diff --git a/docs/1.18.0/.buildinfo b/docs/1.18.0/.buildinfo new file mode 100644 index 000000000..7d8d90ffd --- /dev/null +++ b/docs/1.18.0/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: ce7fb4dff48a72ce57913ea9f5373460 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/1.18.0/README.html b/docs/1.18.0/README.html new file mode 100644 index 000000000..c665fc366 --- /dev/null +++ b/docs/1.18.0/README.html @@ -0,0 +1,414 @@ + + + + + + + Getting Started — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
+ +
+ + + + + + +
+ + + +
+
+ +
+ +
+

Getting Started

+
+

About Flame

+

Flame is a modular Flutter game engine that provides a complete set of out-of-the-way solutions for +games. It takes advantage of the powerful infrastructure provided by Flutter but simplifies the code +you need to build your projects.

+

It provides you with a simple yet effective game loop implementation, and the necessary +functionalities that you might need in a game. For instance; input, images, sprites, sprite sheets, +animations, collision detection, and a component system that we call Flame Component System (FCS for +short).

+

We also provide stand-alone packages that extend the Flame functionality which can be found in the +Bridge Packages section.

+

You can pick and choose whichever parts you want, as they are all independent and modular.

+

The engine and its ecosystem are constantly being improved by the community, so please feel free to +reach out, open issues and PRs as well as make suggestions.

+

Give us a star if you want to help give the engine exposure and grow the community. :)

+
+
+

Installation

+

Add the flame package as a dependency in your pubspec.yaml by running the following command:

+
flutter pub add flame
+
+
+

The latest version can be found on pub.dev.

+

then run flutter pub get and you are ready to start using it!

+
+
+

Getting started

+

There is a set of tutorials that you can follow to get started in the +tutorials folder.

+

Simple examples for all features can be found in the +examples folder.

+

You can also check out the awesome flame +repository, +it contains quite a lot of good tutorials and articles written by the community +to get you started with Flame.

+
+
+

Outside of the scope of the engine

+

Games sometimes require complex feature sets depending on what the game is all about. Some of these +feature sets are outside of the scope of the Flame Engine ecosystem, in this section you can find +them, and also some recommendations of packages/services that can be used:

+
+

Multiplayer (netcode)

+

Flame doesn’t bundle any network feature, which may be needed to write online multiplayer games.

+

If you are building a multiplayer game, here are some recommendations of packages/services:

+
    +
  • Nakama: An open-source server designed +to power modern games and apps.

  • +
  • Firebase: Provides dozens of services that can be used to write +simpler multiplayer experiences.

  • +
  • Supabase: A cheaper alternative to Firebase, based on Postgres.

  • +
+
+
+
+ + +
+ +
+
+
+
+ + + +
+
+ + + + + + \ No newline at end of file diff --git a/docs/1.18.0/_images/LevelSegmentSketch.jpg b/docs/1.18.0/_images/LevelSegmentSketch.jpg new file mode 100644 index 000000000..3cb0e5d58 Binary files /dev/null and b/docs/1.18.0/_images/LevelSegmentSketch.jpg differ diff --git a/docs/1.18.0/_images/Segment0Sketch.jpg b/docs/1.18.0/_images/Segment0Sketch.jpg new file mode 100644 index 000000000..603706f18 Binary files /dev/null and b/docs/1.18.0/_images/Segment0Sketch.jpg differ diff --git a/docs/1.18.0/_images/Step3Platforms.jpg b/docs/1.18.0/_images/Step3Platforms.jpg new file mode 100644 index 000000000..972a9a4fd Binary files /dev/null and b/docs/1.18.0/_images/Step3Platforms.jpg differ diff --git a/docs/1.18.0/_images/Step4Enemies.jpg b/docs/1.18.0/_images/Step4Enemies.jpg new file mode 100644 index 000000000..f5a91bd52 Binary files /dev/null and b/docs/1.18.0/_images/Step4Enemies.jpg differ diff --git a/docs/1.18.0/_images/Step4Ground.jpg b/docs/1.18.0/_images/Step4Ground.jpg new file mode 100644 index 000000000..460ff4bdb Binary files /dev/null and b/docs/1.18.0/_images/Step4Ground.jpg differ diff --git a/docs/1.18.0/_images/Step6HUD.jpg b/docs/1.18.0/_images/Step6HUD.jpg new file mode 100644 index 000000000..345c76f1c Binary files /dev/null and b/docs/1.18.0/_images/Step6HUD.jpg differ diff --git a/docs/1.18.0/_images/TiledEditor.jpg b/docs/1.18.0/_images/TiledEditor.jpg new file mode 100644 index 000000000..bf3265f18 Binary files /dev/null and b/docs/1.18.0/_images/TiledEditor.jpg differ diff --git a/docs/1.18.0/_images/android-studio-screenshot-1.webp b/docs/1.18.0/_images/android-studio-screenshot-1.webp new file mode 100644 index 000000000..93cd6339a Binary files /dev/null and b/docs/1.18.0/_images/android-studio-screenshot-1.webp differ diff --git a/docs/1.18.0/_images/android-studio-screenshot-2.webp b/docs/1.18.0/_images/android-studio-screenshot-2.webp new file mode 100644 index 000000000..ad5027ccb Binary files /dev/null and b/docs/1.18.0/_images/android-studio-screenshot-2.webp differ diff --git a/docs/1.18.0/_images/block.png b/docs/1.18.0/_images/block.png new file mode 100644 index 000000000..60d8d1fb9 Binary files /dev/null and b/docs/1.18.0/_images/block.png differ diff --git a/docs/1.18.0/_images/ember.png b/docs/1.18.0/_images/ember.png new file mode 100644 index 000000000..a5858eb5c Binary files /dev/null and b/docs/1.18.0/_images/ember.png differ diff --git a/docs/1.18.0/_images/ember_quest_sketch.png b/docs/1.18.0/_images/ember_quest_sketch.png new file mode 100644 index 000000000..912d5d118 Binary files /dev/null and b/docs/1.18.0/_images/ember_quest_sketch.png differ diff --git a/docs/1.18.0/_images/ground.png b/docs/1.18.0/_images/ground.png new file mode 100644 index 000000000..09796783d Binary files /dev/null and b/docs/1.18.0/_images/ground.png differ diff --git a/docs/1.18.0/_images/heart.png b/docs/1.18.0/_images/heart.png new file mode 100644 index 000000000..a6721a112 Binary files /dev/null and b/docs/1.18.0/_images/heart.png differ diff --git a/docs/1.18.0/_images/heart_half.png b/docs/1.18.0/_images/heart_half.png new file mode 100644 index 000000000..649625dad Binary files /dev/null and b/docs/1.18.0/_images/heart_half.png differ diff --git a/docs/1.18.0/_images/isometric.png b/docs/1.18.0/_images/isometric.png new file mode 100644 index 000000000..72b59e0d4 Binary files /dev/null and b/docs/1.18.0/_images/isometric.png differ diff --git a/docs/1.18.0/_images/klondike-sketch.webp b/docs/1.18.0/_images/klondike-sketch.webp new file mode 100644 index 000000000..5977fc956 Binary files /dev/null and b/docs/1.18.0/_images/klondike-sketch.webp differ diff --git a/docs/1.18.0/_images/klondike-sprites.png b/docs/1.18.0/_images/klondike-sprites.png new file mode 100644 index 000000000..321d81df4 Binary files /dev/null and b/docs/1.18.0/_images/klondike-sprites.png differ diff --git a/docs/1.18.0/_images/klondike-tableau-hitboxes.png b/docs/1.18.0/_images/klondike-tableau-hitboxes.png new file mode 100644 index 000000000..f93192752 Binary files /dev/null and b/docs/1.18.0/_images/klondike-tableau-hitboxes.png differ diff --git a/docs/1.18.0/_images/orthogonal.png b/docs/1.18.0/_images/orthogonal.png new file mode 100644 index 000000000..1c8ea4095 Binary files /dev/null and b/docs/1.18.0/_images/orthogonal.png differ diff --git a/docs/1.18.0/_images/player.png b/docs/1.18.0/_images/player.png new file mode 100644 index 000000000..6dfc79a25 Binary files /dev/null and b/docs/1.18.0/_images/player.png differ diff --git a/docs/1.18.0/_images/pointy_hex_even.png b/docs/1.18.0/_images/pointy_hex_even.png new file mode 100644 index 000000000..7f63bd048 Binary files /dev/null and b/docs/1.18.0/_images/pointy_hex_even.png differ diff --git a/docs/1.18.0/_images/polygon_shape.png b/docs/1.18.0/_images/polygon_shape.png new file mode 100644 index 000000000..bd44befc1 Binary files /dev/null and b/docs/1.18.0/_images/polygon_shape.png differ diff --git a/docs/1.18.0/_images/star.png b/docs/1.18.0/_images/star.png new file mode 100644 index 000000000..3ad5e944d Binary files /dev/null and b/docs/1.18.0/_images/star.png differ diff --git a/docs/1.18.0/_images/tile-height-example.png b/docs/1.18.0/_images/tile-height-example.png new file mode 100644 index 000000000..26c23bdea Binary files /dev/null and b/docs/1.18.0/_images/tile-height-example.png differ diff --git a/docs/1.18.0/_images/tile_stack_single_move.png b/docs/1.18.0/_images/tile_stack_single_move.png new file mode 100644 index 000000000..ad6ab1192 Binary files /dev/null and b/docs/1.18.0/_images/tile_stack_single_move.png differ diff --git a/docs/1.18.0/_images/water_enemy.png b/docs/1.18.0/_images/water_enemy.png new file mode 100644 index 000000000..243229133 Binary files /dev/null and b/docs/1.18.0/_images/water_enemy.png differ diff --git a/docs/1.18.0/_sources/README.md.txt b/docs/1.18.0/_sources/README.md.txt new file mode 100644 index 000000000..cae361a4f --- /dev/null +++ b/docs/1.18.0/_sources/README.md.txt @@ -0,0 +1,70 @@ +# Getting Started + + +## About Flame + +Flame is a modular Flutter game engine that provides a complete set of out-of-the-way solutions for +games. It takes advantage of the powerful infrastructure provided by Flutter but simplifies the code +you need to build your projects. + +It provides you with a simple yet effective game loop implementation, and the necessary +functionalities that you might need in a game. For instance; input, images, sprites, sprite sheets, +animations, collision detection, and a component system that we call Flame Component System (FCS for +short). + +We also provide stand-alone packages that extend the Flame functionality which can be found in the +[Bridge Packages](bridge_packages/bridge_packages.md) section. + +You can pick and choose whichever parts you want, as they are all independent and modular. + +The engine and its ecosystem are constantly being improved by the community, so please feel free to +reach out, open issues and PRs as well as make suggestions. + +Give us a star if you want to help give the engine exposure and grow the community. :) + + +## Installation + +Add the `flame` package as a dependency in your `pubspec.yaml` by running the following command: + +```console +flutter pub add flame +``` + +The latest version can be found on [pub.dev](https://pub.dev/packages/flame/install). + +then run `flutter pub get` and you are ready to start using it! + + +## Getting started + +There is a set of tutorials that you can follow to get started in the +[tutorials folder](https://github.com/flame-engine/flame/tree/main/doc/tutorials). + +Simple examples for all features can be found in the +[examples folder](https://github.com/flame-engine/flame/tree/main/examples). + +You can also check out the [awesome flame +repository](https://github.com/flame-engine/awesome-flame#user-content-articles--tutorials), +it contains quite a lot of good tutorials and articles written by the community +to get you started with Flame. + + +## Outside of the scope of the engine + +Games sometimes require complex feature sets depending on what the game is all about. Some of these +feature sets are outside of the scope of the Flame Engine ecosystem, in this section you can find +them, and also some recommendations of packages/services that can be used: + + +### Multiplayer (netcode) + +Flame doesn't bundle any network feature, which may be needed to write online multiplayer games. + +If you are building a multiplayer game, here are some recommendations of packages/services: + +- [Nakama](https://github.com/obrunsmann/flutter_nakama/): An open-source server designed + to power modern games and apps. +- [Firebase](https://firebase.google.com/): Provides dozens of services that can be used to write +simpler multiplayer experiences. +- [Supabase](https://supabase.com/): A cheaper alternative to Firebase, based on Postgres. diff --git a/docs/1.18.0/_sources/bridge_packages/bridge_packages.md.txt b/docs/1.18.0/_sources/bridge_packages/bridge_packages.md.txt new file mode 100644 index 000000000..abe27282f --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/bridge_packages.md.txt @@ -0,0 +1,102 @@ +# Bridge Packages + +:::{package} flame_audio + +Play multiple audio files simultaneously (bridge package for [AudioPlayers]). +::: + +:::{package} flame_bloc + +A predictable state management library (bridge package for [Bloc]). +::: + +:::{package} flame_fire_atlas + +Create texture atlases for games (bridge package for [FireAtlas]). +::: + +:::{package} flame_forge2d + +A Box2D physics engine (bridge package for [Forge2D]). +::: + +:::{package} flame_isolate + +Use isolates to offload heavy computations to another thread. +::: + +:::{package} flame_lottie + +Use Lottie animations in Flame (bridge package for [Lottie]). +::: + +:::{package} flame_network_assets + +Fetch assets over the network. +::: + +:::{package} flame_oxygen + +Replace FCS with the Oxygen Entity Component System. +::: + +:::{package} flame_rive + +Create interactive animations (bridge package for [Rive]). +::: + +:::{package} flame_riverpod + +A reactive caching and data-binding framework (bridge package for [Riverpod]). +::: + +:::{package} flame_spine + +Use Spine skeletal animations (bridge package for [Spine]). +::: + +:::{package} flame_splash_screen + +Add the "Powered by Flame" splash screen. +::: + +:::{package} flame_svg + +Draw SVG files in Flutter (bridge package for [flutter_svg]). +::: + +:::{package} flame_tiled + +2D tilemap level editor (bridge package for [Tiled]). +::: + +[AudioPlayers]: https://github.com/bluefireteam/audioplayers +[Bloc]: https://github.com/felangel/bloc +[FireAtlas]: https://github.com/flame-engine/fire-atlas +[Forge2D]: https://github.com/flame-engine/forge2d +[Lottie]: https://pub.dev/packages/lottie +[Rive]: https://rive.app/ +[Riverpod]: https://github.com/rrousselGit/riverpod +[Spine]: https://pub.dev/packages/spine_flutter +[Tiled]: https://www.mapeditor.org/ +[flutter_svg]: https://github.com/dnfield/flutter_svg + + +```{toctree} +:hidden: + +flame_audio +flame_bloc +flame_fire_atlas +flame_forge2d +flame_isolate +flame_lottie +flame_network_assets +flame_oxygen +flame_rive +flame_riverpod +flame_splash_screen +flame_spine +flame_svg +flame_tiled +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_audio/audio.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_audio/audio.md.txt new file mode 100644 index 000000000..c10fcb070 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_audio/audio.md.txt @@ -0,0 +1,111 @@ +# Audio + +Playing audio is essential for most games, so we made it simple! + +First you have to add [flame_audio](https://github.com/flame-engine/flame_audio) to your dependency +list in your `pubspec.yaml` file: + +```yaml +dependencies: + flame_audio: VERSION +``` + +The latest version can be found on [pub.dev](https://pub.dev/packages/flame_audio/install). + +After installing the `flame_audio` package, you can add audio files in the assets section of your +`pubspec.yaml` file. Make sure that the audio files exists in the paths that you provide. + +The default directory for `FlameAudio` is `assets/audio` (which can be changed by providing your own +instance of `AudioCache`). + +For the examples below, your `pubspec.yaml` file needs to contain something like this: + +```yaml +flutter: + assets: + - assets/audio/explosion.mp3 + - assets/audio/music.mp3 +``` + +Then you have the following methods at your disposal: + +```dart +import 'package:flame_audio/flame_audio.dart'; + +// For shorter reused audio clips, like sound effects +FlameAudio.play('explosion.mp3'); + +// For looping an audio file +FlameAudio.loop('music.mp3'); + +// For playing a longer audio file +FlameAudio.playLongAudio('music.mp3'); + +// For looping a longer audio file +FlameAudio.loopLongAudio('music.mp3'); + +// For background music that should be paused/played when the pausing/resuming +// the game +FlameAudio.bgm.play('music.mp3'); +``` + +The difference between the `play/loop` and `playLongAudio/loopLongAudio` is that `play/loop` makes +use of optimized features that allow sounds to be looped without gaps between their iterations, and +almost no drop on the game frame rate will happen. You should whenever possible, prefer the former +methods. + +`playLongAudio/loopLongAudio` allows for audios of any length to be played, but they do create frame +rate drop, and the looped audio will have a small gap between iterations. + +You can use [the `Bgm` class](bgm.md) (via `FlameAudio.bgm`) to play looping background music +tracks. The `Bgm` class lets Flame automatically manage the pausing and resuming of background music +tracks when the game is sent to background or comes back to the foreground. + +You can use [the `AudioPool` class](audio_pool.md) if you want to fire quick sound effects in a very +efficient manner. `AudioPool` will keep a pool of `AudioPlayer`s preloaded with a given sound, and +allow you to play them very fast in quick succession. + +Some file formats that work across devices and that we recommend are: MP3, OGG and WAV. + +This bridge library (flame_audio) uses [audioplayers](https://github.com/bluefireteam/audioplayers) +in order to allow for playing multiple sounds simultaneously (crucial in a game). You can check the +link for a more in-depth explanation. + +Both on `play` and `loop` you can pass an additional optional double parameter, the `volume` +(defaults to `1.0`). + +Both the `play` and `loop` methods return an instance of an `AudioPlayer` from the +[audioplayers](https://github.com/bluefireteam/audioplayers) lib, that allows you to stop, pause and +configure other parameters. + +In fact you can always use `AudioPlayer`s directly to gain full control over how your audio is played +-- the `FlameAudio` class is just a wrapper for common functionality. + + +## Caching + +You can pre-load your assets. Audios need to be stored in the memory the first time they +are requested; therefore, the first time you play each mp3 you might get a delay. In order to +pre-load your audios, just use: + +```dart +await FlameAudio.audioCache.load('explosion.mp3'); +``` + +You can load all your audios in the beginning in your game's `onLoad` method so that they always +play smoothly. To load multiple audio files, use the `loadAll` method: + +```dart +await FlameAudio.audioCache.loadAll(['explosion.mp3', 'music.mp3']); +``` + +Finally, you can use the `clear` method to remove a file that has been loaded into the cache: + +```dart +FlameAudio.audioCache.clear('explosion.mp3'); +``` + +There is also a `clearCache` method, that clears the whole cache. + +This might be useful if, for instance, your game has multiple levels and each has a different +set of sounds and music. diff --git a/docs/1.18.0/_sources/bridge_packages/flame_audio/audio_pool.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_audio/audio_pool.md.txt new file mode 100644 index 000000000..0c3dad970 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_audio/audio_pool.md.txt @@ -0,0 +1,15 @@ +# AudioPool + +An AudioPool is a provider of AudioPlayers that are pre-loaded with +local assets to minimize delays. + +A single AudioPool always plays the same sound, usually a quick sound +effect, like a laser shooting from your ship or a jump sound for your +platformer. + +The advantage of using Audio Pool is that by configuring a minimum +(starting) size, and a maximum size, the pool will create and preload +some players, and allow them to be re-used many times. + +You can use the helper method `FlameAudio.createPool` to create AudioPool +instances using the same global `FlameAudio.audioCache`. diff --git a/docs/1.18.0/_sources/bridge_packages/flame_audio/bgm.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_audio/bgm.md.txt new file mode 100644 index 000000000..14d48ee05 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_audio/bgm.md.txt @@ -0,0 +1,95 @@ +# Looping Background Music + +With the `Bgm` class, you can manage looping of background music tracks with regards to application +(or game) lifecycle state changes. + +When the application is terminated, or sent to background, `Bgm` will automatically pause +the currently playing music track. Similarly, when the application is resumed, `Bgm` will resume the +background music. Manually pausing and resuming your tracks is also supported. + +For this class to function properly, the observer must be registered by calling the following: + +```dart +FlameAudio.bgm.initialize(); +``` + +**IMPORTANT Note:** The `initialize` function must be called at a point in time where an instance of +the `WidgetsBinding` class already exists. Best practice is to put this call inside of your game's +`onLoad` method`. + +In cases where you're done with background music but still want to keep the application/game +running, use the `dispose` function to remove the observer. + +```dart +FlameAudio.bgm.dispose(); +``` + +To play a looping background music track, run: + +```dart +import 'package:flame_audio/flame_audio.dart'; + +FlameAudio.bgm.play('adventure-track.mp3'); +``` + +You must have an appropriate folder structure and add the files to the `pubspec.yaml` file, as +explained in [Flame Audio documentation](audio.md). + + +## Caching music files + +The `Bgm` class will use the static instance of `FlameAudio` for storing cached +music files by default. + +So in order to pre-load music, you can use the same recommendations from the +[Flame Audio documentation](audio.md). + +You can optionally create your own `Bgm` instances with different backing `AudioCache`s, +if you so desire. + + +## Methods + + +### Play + +The `play` function takes in a `String` that should be a path that points to the location of the +music file to be played (following the Flame Audio folder structure requirements). + +You can pass an additional optional `double` parameter which is the `volume` (defaults to `1.0`). + +Examples: + +```dart +FlameAudio.bgm.play('music/boss-fight/level-382.mp3'); +``` + +```dart +FlameAudio.bgm.play('music/world-map.mp3', volume: .25); +``` + + +### Stop + +To stop a currently playing background music track, just call `stop`. + +```dart +FlameAudio.bgm.stop(); +``` + + +### Pause and Resume + +To manually pause and resume background music you can use the `pause` and `resume` functions. + +`FlameAudio.bgm` automatically handles pausing and resuming the currently playing background music +track. Manually `pausing` prevents the app/game from auto-resuming when focus is given back to the +app/game. + +```dart +FlameAudio.bgm.pause(); +``` + +```dart +FlameAudio.bgm.resume(); +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_audio/flame_audio.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_audio/flame_audio.md.txt new file mode 100644 index 000000000..7a62e26d6 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_audio/flame_audio.md.txt @@ -0,0 +1,7 @@ +# flame_audio + +```{toctree} +General audio +Background music +AudioPool +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_bloc/bloc.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_bloc/bloc.md.txt new file mode 100644 index 000000000..da1075df9 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_bloc/bloc.md.txt @@ -0,0 +1,121 @@ +# flame_bloc + +`flame_bloc` is a bridge library for using [Bloc](https://bloclibrary.dev/) in your Flame +game. `flame_bloc` offers a simple and natural (as in similar to flutter_bloc) way to use blocs and +cubits inside a FlameGame. Bloc offers way to make game state changes predictable by regulating when +a game state change can occur and offers a single way to change game state throughout an entire +Game. + +To use it in your game you just need to add `flame_bloc` to your pubspec.yaml, as can be seen in the +[Flame Bloc example](https://github.com/flame-engine/flame/tree/main/packages/flame_bloc/example) +and in the pub.dev [installation instructions](https://pub.dev/packages/flame_bloc). + + +## How to use + +Lets assume we have a bloc that handles player inventory, first we need to make it available to our +components. + +We can do that by using `FlameBlocProvider` component: + +```dart +class MyGame extends FlameGame { + @override + Future onLoad() async { + await add( + FlameBlocProvider( + create: () => PlayerInventoryBloc(), + children: [ + Player(), + // ... + ], + ), + ); + } +} +``` + +With the above changes, the `Player` component will now have access to our bloc. + +If more than one bloc needs to be provided, `FlameMultiBlocProvider` can be used in a similar +fashion: + +```dart +class MyGame extends FlameGame { + @override + Future onLoad() async { + await add( + FlameMultiBlocProvider( + providers: [ + FlameBlocProvider( + create: () => PlayerInventoryBloc(), + ), + FlameBlocProvider( + create: () => PlayerStatsBloc(), + ), + ], + children: [ + Player(), + // ... + ], + ), + ); + } +} +``` + +Listening to states changes at the component level can be done with two approaches: + +By using `FlameBlocListener` component: + +```dart +class Player extends PositionComponent { + @override + Future onLoad() async { + await add( + FlameBlocListener( + listener: (state) { + updateGear(state); + }, + ), + ); + } +} +``` + +Or by using `FlameBlocListenable` mixin: + +```dart + +class Player extends PositionComponent + with FlameBlocListenable { + + @override + void onNewState(state) { + updateGear(state); + } +} + +``` + +If all your component need is to simply access a bloc, the `FlameBlocReader` mixin can be applied to +a component: + +```dart +class Player extends PositionComponent + with FlameBlocReader { + + void takeHit() { + bloc.add(const PlayerDamaged()); + } +} + +``` + +Note that one limitation of the mixin is that it can access only a single bloc. + + +## Full Example + +You can check an example +[here](https://github.com/flame-engine/flame/tree/main/packages/flame_bloc/example). diff --git a/docs/1.18.0/_sources/bridge_packages/flame_bloc/bloc_components.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_bloc/bloc_components.md.txt new file mode 100644 index 000000000..46f685bbc --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_bloc/bloc_components.md.txt @@ -0,0 +1,115 @@ + + +# Components + + +## FlameBlocProvider + +FlameBlocProvider is a Component which creates and provides a bloc to its children. +The bloc will only live while this component is alive. It is used as a dependency injection (DI) +widget so that a single instance of a bloc can be provided to multiple Components within a subtree. + +FlameBlocProvider should be used to create new blocs which will be made available to the rest of the +subtree. + +```dart +FlameBlocProvider( + create: () => BlocA(), + children: [...] +); +``` + +FlameBlocProvider can be used to provide an existing bloc to a new portion of the Component tree. + +```dart +FlameBlocProvider.value( + value: blocA, + children: [...], +); +``` + + +## FlameMultiBlocProvider + +Similar to FlameBlocProvider, but provides multiples blocs down to the component tree + +```dart +FlameMultiBlocProvider( + providers: [ + FlameBlocProvider( + create: () => BlocA(), + ), + FlameBlocProvider.value( + create: () => BlocB(), + ), + ], + children: [...], +) +``` + + +## FlameBlocListener + +FlameBlocListener is Component which can listen to changes in a Bloc state. It invokes +the `onNewState` in response to state changes in the bloc. For fine-grained control over when +the `onNewState` function is called an optional `listenWhen` can be provided. `listenWhen` takes the +previous bloc state and current bloc state and returns a boolean. If `listenWhen` returns +true, `onNewState` will be called with `state`. If `listenWhen` returns false, `onNewState` will not +be called with `state`. + +alternatively you can use `FlameBlocListenable` mixin to listen state changes on Component. + +```dart +FlameBlocListener( + listenWhen: (previousState, newState) { + // return true/false to determine whether or not + // to call listener with state + }, + onNewState: (state) { + // do stuff here based on state + }, +) +``` + + +## FlameBlocListenable + +FlameBlocListenable is an alternative to FlameBlocListener to listen state changes. + +```dart +class ComponentA extends Component + with FlameBlocListenable { + + @override + bool listenWhen(PlayerState previousState, PlayerState newState) { + // return true/false to determine whether or not + // to call listener with state + } + + @override + void onNewState(PlayerState state) { + super.onNewState(state); + // do stuff here based on state + } +} +``` + + +## FlameBlocReader + +FlameBlocReader is mixin that allows you to read the current state of bloc on Component. It is +Useful for components that needs to only read a bloc current state or to trigger an event on it. You +can have only one reader on Component + + +```dart + +class InventoryReader extends Component + with FlameBlocReader {} + + /// inside game + + final component = InventoryReader(); + // reading current state + var state = component.bloc +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_bloc/flame_bloc.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_bloc/flame_bloc.md.txt new file mode 100644 index 000000000..5c933929a --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_bloc/flame_bloc.md.txt @@ -0,0 +1,7 @@ +# flame_bloc + +```{toctree} +Overview +Components +``` + diff --git a/docs/1.18.0/_sources/bridge_packages/flame_fire_atlas/fire_atlas.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_fire_atlas/fire_atlas.md.txt new file mode 100644 index 000000000..601c223f3 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_fire_atlas/fire_atlas.md.txt @@ -0,0 +1,105 @@ +# Flame fire atlas + +Flame fire atlas is a texture atlas lib for Flame. By using `flame_fire_atlas` one can access images +and animations stored in a `.fa` texture atlas by referring to them by their named keys. + + +## FireAtlas + +FireAtlas is a tool for handling texture atlases. Atlases can be created using the +[Fire Atlas Editor](https://fire-atlas.flame-engine.org). + + +### Creating Atlas + +To create a texture atlas open [Fire Atlas Editor](https://fire-atlas.flame-engine.org). + +Select new atlas and give the atlas a name, tile width, tile height and an image and press okay. +This will take you to the atlas editor. + +To create a new `Sprite` in the atlas, select a portion and click the plus button on top left and +give the selection a name and then select type `Sprite` and press `Create Sprite`. You can now +see a preview in the right panel of editor. + +To create a new `SpriteAnimation` in the atlas, select a portion and click the plus button on top +left and give the selection a name and then select type `Animation` and provide `frame count` +and `steps times (in milliseconds)` and select the checkbox to loop the animation, and then +press `Create Animation`. You can now see a preview of the animation in the right panel of the +editor. + +Once you are done with editing you can download the fire atlas file from top left with +the `download` icon button. + + +## Texture atlas + +A [Texture atlas](https://en.wikipedia.org/wiki/Texture_atlas) is an image that contains data from +several smaller images that have been packed together to reduce overall dimensions. With it, you +reduce the number of images loaded and can speed up the loading time of the game. + + +## Usage + +To use the bridge library in your game you just need to add `flame_fire_atlas` to your pubspec.yaml, +as can be seen in +the [Flame Fire Atlas example](https://github.com/flame-engine/flame/tree/main/packages/flame_fire_atlas/example) +and in the pub.dev [installation instructions](https://pub.dev/packages/flame_fire_atlas). + +Then you have the following methods at your disposal: + +```dart +import 'package:flame_fire_atlas/flame_fire_atlas.dart'; + +// Load the atlas from your assets +// file at assets/atlas.fa +final atlas = await FireAtlas.loadAsset('atlas.fa'); + +//or when inside a game instance, the loadFireAtlas can be used: +// file at assets/atlas.fa +final atlas = await loadFireAtlas('atlas.fa'); + +// Get a Sprite with the given key. +FireAtlas.getSprite('sprite_name') + +// Get a SpriteAnimation with the given key. +FireAtlas.getAnimation('animation_name') +``` + +To use FireAtlas in your game, load the fire atlas file in an `onLoad` method, either in your game +or a component. Then you can use `getSprite` and `getAnimation` to retrieve the mapped assets. + +```dart +class ExampleGame extends FlameGame { + + late FireAtlas _atlas; + + @override + Future onLoad() async { + _atlas = await loadFireAtlas('atlas.fa'); + + add( + SpriteComponent( + size: Vector2(50, 50), + position: Vector2(0, 50), + sprite: _atlas.getSprite('sprite_name'), + ), + ); + + add( + SpriteAnimationComponent( + size: Vector2(150, 100), + position: Vector2(150, 100), + animation: _atlas.getAnimation('animation_name'), + ), + ); + } + +} +``` + + +## Full Example + +You can check an example +[here](https://github.com/flame-engine/flame/tree/main/packages/flame_fire_atlas/example). + diff --git a/docs/1.18.0/_sources/bridge_packages/flame_fire_atlas/flame_fire_atlas.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_fire_atlas/flame_fire_atlas.md.txt new file mode 100644 index 000000000..b9e31345b --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_fire_atlas/flame_fire_atlas.md.txt @@ -0,0 +1,5 @@ +# flame_fire_atlas + +```{toctree} +Overview +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_forge2d/flame_forge2d.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_forge2d/flame_forge2d.md.txt new file mode 100644 index 000000000..c4e72f9ab --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_forge2d/flame_forge2d.md.txt @@ -0,0 +1,6 @@ +# flame_forge2d + +```{toctree} +Overview +Joints +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_forge2d/forge2d.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_forge2d/forge2d.md.txt new file mode 100644 index 000000000..727d17bd2 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_forge2d/forge2d.md.txt @@ -0,0 +1,150 @@ +# Forge2D + +Blue Fire maintains a ported version of the Box2D physics engine and our +version is called Forge2D. + +If you want to use Forge2D specifically for Flame you should use our bridge library +[flame_forge2d](https://github.com/flame-engine/flame/tree/main/packages/flame_forge2d) and if you +just want to use it in a Dart project you can use the +[forge2d](https://github.com/flame-engine/forge2d) library directly. + +To use it in your game you just need to add `flame_forge2d` to your +`pubspec.yaml`, as can be seen in the [Forge2D +[example](https://github.com/flame-engine/flame/tree/main/packages/flame_forge2d/example) +and the pub. dev [installation +instructions](https://pub.dev/packages/flame_forge2d)](). + + +## Forge2DGame + +If you are going to use Forge2D in your project it can be a good idea to use the Forge2D-specific +`FlameGame` class, `Forge2DGame`. + +It is called `Forge2DGame` and supports both the special Forge2D components called `BodyComponents` +as well as normal Flame components. + +`Forge2DGame` has a built-in `CameraComponent` and has a zoom level set to 10 by default, so your +components will be a lot bigger than in a normal Flame game. This is due to the speed limit in the +`Forge2D` world, which you would hit very quickly if you are using it with `zoom = 1.0`. You can +easily change the zoom level either by calling `super(zoom: yourZoom)` in your constructor or +doing `game.cameraComponent.viewfinder.zoom = yourZoom;` at a later stage. + +If you are previously familiar with Box2D it can be good to know that the whole concept of the +Box2d world is mapped to `world` in the `Forge2DGame` component and every `Body` that you want to +use as a component should be wrapped in a `BodyComponent`, and added to the `world` in your +`Forge2DGame`. + +You can have have non-physics-related components in your `Forge2DGame` world's component list along +with your physical entities. When the update is called, it will use the Forge2D physics engine to +properly update every `BodyComponent` and other components in the game will be updated according to +the normal `FlameGame` way. + +In `Forge2DGame` the gravity is flipped compared to `Forge2D` to keep the same coordinate system as +in Flame, so a positive y-axis in the gravity like `Vector2(0, 10)` would be pulling bodies +downwards, meanwhile, a negative y-axis would pull them upwards. The gravity can be set directly in +the constructor of the `Forge2DGame`. + +A simple `Forge2DGame` implementation example can be seen in the +[examples folder](https://github.com/flame-engine/flame/tree/main/packages/flame_forge2d/example). + + +## BodyComponent + +The `BodyComponent` is a wrapper for the `Forge2D` body, which is the body that the physics engine +is interacting with. To create a `BodyComponent` you can either: + +- override `createBody()` and create and return your created body; +- use the default `createBody()` implementation by passing a `BodyDef` instance (and optionally a +list of `FixtureDef` instances) to the BodyComponent's constructor; +- use the default `createBody()` implementation and assign a `BodyDef` instance to `this.bodyDef`, +and optionally a list of `FixtureDef` instances to `this.fixtureDefs`. + +The `BodyComponent` is by default having `renderBody = true`, since otherwise, it wouldn't show +anything after you have created a `Body` and added the `BodyComponent` to the game. If you want to +turn it off you can just set (or override) `renderBody` to false. + +Just like any other Flame component you can add children to the `BodyComponent`, which can be very +useful if you want to add for example animations or other components on top of your body. + +The body that you create should be defined according to Flame's coordinate system, +not according to the coordinate system of Forge2D (where the Y-axis is flipped). + +:exclamation: In Forge2D you shouldn't add any bodies as children to other components, +since Forge2D doesn't have a concept of nested bodies. +So bodies should live on the top level in the physics world, `Forge2DGame.world`. +So instead of `add(Weapon()))`, `world.add(Weapon())` should be used (as below), and the `Player` +should also of course initially be added to the world. + +```dart +class Weapon extends BodyComponent { + @override + void onLoad() { + ... + } +} + +class Player extends BodyComponent { + @override + void onLoad() { + world.add(Weapon()); + } +} +``` + +Later you might want to add bullets coming from your weapon, these are added to the world in the +same sense, but if they are going to be moving very fast, make sure that you set `isBullet = true` +to avoid some tunneling problems. + + +## Contact callbacks + +`Forge2DGame` provides a simple out-of-the-box solution to propagate contact events. + +Contact events occur whenever two `Fixture`s meet each other. These events allow listening when +these `Fixture`s begin to come in contact (`beginContact`) and cease being in contact +(`endContact`). + +There are multiple ways to listen to these events. One common way is to use the `ContactCallbacks` +class as a mixin in the `BodyComponent` where you are interested in these events. + +```dart +class Ball extends BodyComponent with ContactCallbacks { + ... + void beginContact(Object other, Contact contact) { + if (other is Wall) { + // Do something here. + } + } + ... +} +``` + +For the above to work, the `Ball`'s `body.userData` or contacting `fixture.userData` must be +set to a `ContactCallback`. And if `Wall` is a `BodyComponent` it's `body.userData` or contacting +`fixture.userData` must be set to `Wall`. + +If `userData` is `null` the contact events are ignored, it is `null` by default. + +A convenient way of setting `userData` is to assign it when creating the body. For example: + +```dart +class Ball extends BodyComponent with ContactCallbacks { + ... + + @override + Body createBody() { + ... + final bodyDef = BodyDef( + userData: this, + ); + ... + } + +} +``` + +Every time `Ball` and `Wall` begin to come in contact `beginContact` will be called, and once the +fixtures cease being in contact, `endContact` will be called. + +An implementation example can be seen in the [Flame Forge2D +example](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/utils/balls.dart). diff --git a/docs/1.18.0/_sources/bridge_packages/flame_forge2d/joints.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_forge2d/joints.md.txt new file mode 100644 index 000000000..a2a94b90f --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_forge2d/joints.md.txt @@ -0,0 +1,636 @@ +# Joints + +Joints are used to connect two different bodies together in various ways. +They help to simulate interactions between objects to create hinges, wheels, ropes, chains etc. + +One `Body` in a joint may be of type `BodyType.static`. Joints between `BodyType.static` and/or +`BodyType.kinematic` are allowed, but have no effect and use some processing time. + +To construct a `Joint`, you need to create a corresponding subclass of `JointDef`and initialize it +with its parameters. + +To register a `Joint` use `world.createJoint`and later use `world.destroyJoint` when you want to +remove it. + + +## Built-in joints + +Currently, Forge2D supports the following joints: + +- [`ConstantVolumeJoint`](#constantvolumejoint) +- [`DistanceJoint`](#distancejoint) +- [`FrictionJoint`](#frictionjoint) +- [`GearJoint`](#gearjoint) +- [`MotorJoint`](#motorjoint) +- [`MouseJoint`](#mousejoint) +- [`PrismaticJoint`](#prismaticjoint) +- [`PulleyJoint`](#pulleyjoint) +- [`RevoluteJoint`](#revolutejoint) +- [`RopeJoint`](#ropejoint) +- [`WeldJoint`](#weldjoint) +- WheelJoint + + +### `ConstantVolumeJoint` + +This type of joint connects a group of bodies together and maintains a constant volume within them. +Essentially, it is a set of [`DistanceJoint`](#distancejoint)s, that connects all bodies one after +another. + +It can for example be useful when simulating "soft-bodies". + +```dart + final constantVolumeJoint = ConstantVolumeJointDef() + ..frequencyHz = 10 + ..dampingRatio = 0.8; + + bodies.forEach((body) { + constantVolumeJoint.addBody(body); + }); + + world.createJoint(ConstantVolumeJoint(world, constantVolumeJoint)); +``` + +```{flutter-app} +:sources: ../../examples +:subfolder: stories/bridge_libraries/flame_forge2d/joints +:page: constant_volume_joint +:show: code popup +``` + +`ConstantVolumeJointDef` requires at least 3 bodies to be added using the `addBody` method. It also +has two optional parameters: + +- `frequencyHz`: This parameter sets the frequency of oscillation of the joint. If it is not set to +0, the higher the value, the less springy each of the compound `DistantJoint`s are. + +- `dampingRatio`: This parameter defines how quickly the oscillation comes to rest. It ranges from +0 to 1, where 0 means no damping and 1 indicates critical damping. + + +### `DistanceJoint` + +A `DistanceJoint` constrains two points on two bodies to remain at a fixed distance from each other. + +You can view this as a massless, rigid rod. + +```dart +final distanceJointDef = DistanceJointDef() + ..initialize(firstBody, secondBody, firstBody.worldCenter, secondBody.worldCenter) + ..length = 10 + ..frequencyHz = 3 + ..dampingRatio = 0.2; + +world.createJoint(DistanceJoint(distanceJointDef)); +``` + +```{flutter-app} +:sources: ../../examples +:page: distance_joint +:subfolder: stories/bridge_libraries/flame_forge2d/joints +:show: code popup +``` + +To create a `DistanceJointDef`, you can use the `initialize` method, which requires two bodies and a +world anchor point on each body. The definition uses local anchor points, allowing for a slight +violation of the constraint in the initial configuration. This is useful when saving and +loading a game. + +The `DistanceJointDef` has three optional parameters that you can set: + +- `length`: This parameter determines the distance between the two anchor points and must be greater +than 0. The default value is 1. + +- `frequencyHz`: This parameter sets the frequency of oscillation of the joint. If it is not set +to 0, the higher the value, the less springy the joint becomes. + +- `dampingRatio`: This parameter defines how quickly the oscillation comes to rest. It ranges from +0 to 1, where 0 means no damping and 1 indicates critical damping. + +```{warning} +Do not use a zero or short length. +``` + + +### `FrictionJoint` + +A `FrictionJoint` is used for simulating friction in a top-down game. It provides 2D translational +friction and angular friction. + +The `FrictionJoint` isn't related to the friction that occurs when two shapes collide in the x-y plane +of the screen. Instead, it's designed to simulate friction along the z-axis, which is perpendicular +to the screen. The most common use-case for it is applying the friction force between a moving body +and the game floor. + +The `initialize` method of the `FrictionJointDef` method requires two bodies that will have friction +force applied to them, and an anchor. + +The third parameter is the `anchor` point in the world coordinates where the friction force will be +applied. In most cases, it would be the center of the first object. However, for more complex +physics interactions between bodies, you can set the `anchor` point to a specific location on one or +both of the bodies. + +```dart +final frictionJointDef = FrictionJointDef() + ..initialize(ballBody, floorBody, ballBody.worldCenter) + ..maxForce = 50 + ..maxTorque = 50; + + world.createJoint(FrictionJoint(frictionJointDef)); +``` + +```{flutter-app} +:sources: ../../examples +:page: friction_joint +:subfolder: stories/bridge_libraries/flame_forge2d/joints +:show: code popup +``` + +When creating a `FrictionJoint`, simulated friction can be applied via maximum force and torque +values: + +- `maxForce`: the maximum translational friction which applied to the joined body. A higher value +- simulates higher friction. + +- `maxTorque`: the maximum angular friction which may be applied to the joined body. A higher value +- simulates higher friction. + +In other words, the former simulates the friction, when the body is sliding and the latter simulates +the friction when the body is spinning. + + +### `GearJoint` + +The `GearJoint` is used to connect two joints together. Joints are required to be a +[`RevoluteJoint`](#revolutejoint) or a [`PrismaticJoint`](#prismaticjoint) in any combination. + +```{warning} +The connected joints must attach a dynamic body to a static body. +The static body is expected to be a bodyA on those joints +``` + +```dart +final gearJointDef = GearJointDef() + ..bodyA = firstJoint.bodyA + ..bodyB = secondJoint.bodyA + ..joint1 = firstJoint + ..joint2 = secondJoint + ..ratio = 1; + +world.createJoint(GearJoint(gearJointDef)); +``` + +```{flutter-app} +:sources: ../../examples +:page: gear_joint +:subfolder: stories/bridge_libraries/flame_forge2d/joints +:show: code popup +``` + +- `joint1`, `joint2`: Connected revolute or prismatic joints +- `bodyA`, `bodyB`: Any bodies form the connected joints, as long as they are not the same body. +- `ratio`: Gear ratio + +Similarly to [`PulleyJoint`](#pulleyjoint), you can specify a gear ratio to bind the motions +together: + +```text +coordinate1 + ratio * coordinate2 == constant +``` + +The ratio can be negative or positive. If one joint is a `RevoluteJoint` and the other joint is a +`PrismaticJoint`, then the ratio will have units of length or units of 1/length. + +Since the `GearJoint` depends on two other joints, if these are destroyed, the `GearJoint` needs to +be destroyed as well. + +```{warning} +Manually destroy the `GearJoint` if joint1 or joint2 is destroyed +``` + + +### `MotorJoint` + +A `MotorJoint` is used to control the relative motion between two bodies. A typical usage is to +control the movement of a dynamic body with respect to the fixed point, for example to create +animations. + +A `MotorJoint` lets you control the motion of a body by specifying target position and rotation +offsets. You can set the maximum motor force and torque that will be applied to reach the target +position and rotation. If the body is blocked, it will stop and the contact forces will be +proportional the maximum motor force and torque. + +```dart +final motorJointDef = MotorJointDef() + ..initialize(first, second) + ..maxTorque = 1000 + ..maxForce = 1000 + ..correctionFactor = 0.1; + + world.createJoint(MotorJoint(motorJointDef)); +``` + +```{flutter-app} +:sources: ../../examples +:page: motor_joint +:subfolder: stories/bridge_libraries/flame_forge2d/joints +:show: code popup +``` + +A `MotorJointDef` has three optional parameters: + +- `maxForce`: the maximum translational force which will be applied to the joined body to reach the +target position. + +- `maxTorque`: the maximum angular force which will be applied to the joined body to reach the +target rotation. + +- `correctionFactor`: position correction factor in range [0, 1]. It adjusts the joint's response to +deviation from target position. A higher value makes the joint respond faster, while a lower value +makes it respond slower. If the value is set too high, the joint may overcompensate and oscillate, +becoming unstable. If set too low, it may respond too slowly. + +The linear and angular offsets are the target distance and angle that the bodies should achieve +relative to each other's position and rotation. By default, the linear target will be the distance +between the two body centers and the angular target will be the relative rotation of the bodies. +Use the `setLinearOffset(Vector2)` and `setLinearOffset(double)` methods of the `MotorJoint` to set +the desired relative translation and rotate between the bodies. + +For example, this code increments the angular offset of the joint every update cycle, causing the +body to rotate. + +```dart +@override +void update(double dt) { + super.update(dt); + + final angularOffset = joint.getAngularOffset() + motorSpeed * dt; + joint.setAngularOffset(angularOffset); +} +``` + + +### `MouseJoint` + +The `MouseJoint` is used to manipulate bodies with the mouse. It attempts to drive a point on a body +towards the current position of the cursor. There is no restriction on rotation. + +The `MouseJoint` definition has a target point, maximum force, frequency, and damping ratio. The +target point initially coincides with the body's anchor point. The maximum force is used to prevent +violent reactions when multiple dynamic bodies interact. You can make this as large as you like. +The frequency and damping ratio are used to create a spring/damper effect similar to the distance +joint. + +```{warning} +Many users have tried to adapt the mouse joint for game play. Users often want +to achieve precise positioning and instantaneous response. The mouse joint +doesn't work very well in that context. You may wish to consider using +kinematic bodies instead. +``` + +```dart +final mouseJointDef = MouseJointDef() + ..maxForce = 3000 * ballBody.mass * 10 + ..dampingRatio = 1 + ..frequencyHz = 5 + ..target.setFrom(ballBody.position) + ..collideConnected = false + ..bodyA = groundBody + ..bodyB = ballBody; + + mouseJoint = MouseJoint(mouseJointDef); + world.createJoint(mouseJoint); +} +``` + +```{flutter-app} +:sources: ../../examples +:page: mouse_joint +:subfolder: stories/bridge_libraries/flame_forge2d/joints +:show: code popup +``` + +- `maxForce`: This parameter defines the maximum constraint force that can be exerted to move the + candidate body. Usually you will express as some multiple of the weight + (multiplier *mass* gravity). + +- `dampingRatio`: This parameter defines how quickly the oscillation comes to rest. It ranges from + 0 to 1, where 0 means no damping and 1 indicates critical damping. + +- `frequencyHz`: This parameter defines the response speed of the body, i.e. how quickly it tries to + reach the target position + +- `target`: The initial world target point. This is assumed to coincide with the body anchor + initially. + + +### `PrismaticJoint` + +The `PrismaticJoint` provides a single degree of freedom, allowing for a relative translation of two +bodies along an axis fixed in bodyA. Relative rotation is prevented. + +`PrismaticJointDef` requires defining a line of motion using an axis and an anchor point. +The definition uses local anchor points and a local axis so that the initial configuration +can violate the constraint slightly. + +The joint translation is zero when the local anchor points coincide in world space. +Using local anchors and a local axis helps when saving and loading a game. + +```{warning} +At least one body should by dynamic with a non-fixed rotation. +``` + +The `PrismaticJoint` definition is similar to the [`RevoluteJoint`](#revolutejoint) definition, but +instead of rotation, it uses translation. + +```dart +final prismaticJointDef = PrismaticJointDef() + ..initialize( + dynamicBody, + groundBody, + dynamicBody.worldCenter, + Vector2(1, 0), + ) +``` + +```{flutter-app} +:sources: ../../examples +:page: prismatic_joint +:subfolder: stories/bridge_libraries/flame_forge2d/joints +:show: code popup +``` + +- `b1`, `b2`: Bodies connected by the joint. +- `anchor`: World anchor point, to put the axis through. Usually the center of the first body. +- `axis`: World translation axis, along which the translation will be fixed. + +In some cases you might wish to control the range of motion. For this, the `PrismaticJointDef` has +optional parameters that allow you to simulate a joint limit and/or a motor. + + +#### Prismatic Joint Limit + +You can limit the relative rotation with a joint limit that specifies a lower and upper translation. + +```dart +jointDef + ..enableLimit = true + ..lowerTranslation = -20 + ..upperTranslation = 20; +``` + +- `enableLimit`: Set to true to enable translation limits +- `lowerTranslation`: The lower translation limit in meters +- `upperTranslation`: The upper translation limit in meters + +You change the limits after the joint was created with this method: + +```dart +prismaticJoint.setLimits(-10, 10); +``` + + +#### Prismatic Joint Motor + +You can use a motor to drive the motion or to model joint friction. A maximum motor force is +provided so that infinite forces are not generated. + +```dart +jointDef + ..enableMotor = true + ..motorSpeed = 1 + ..maxMotorForce = 100; +``` + +- `enableMotor`: Set to true to enable the motor +- `motorSpeed`: The desired motor speed in radians per second +- `maxMotorForce`: The maximum motor torque used to achieve the desired motor speed in N-m. + +You change the motor's speed and force after the joint was created using these methods: + +```dart +prismaticJoint.setMotorSpeed(2); +prismaticJoint.setMaxMotorForce(200); +``` + +Also, you can get the joint angle and speed using the following methods: + +```dart +prismaticJoint.getJointTranslation(); +prismaticJoint.getJointSpeed(); +``` + + +### `PulleyJoint` + +A `PulleyJoint` is used to create an idealized pulley. The pulley connects two bodies to the ground +and to each other. As one body goes up, the other goes down. The total length of the pulley rope is +conserved according to the initial configuration: + +```text +length1 + length2 == constant +``` + +You can supply a ratio that simulates a block and tackle. This causes one side of the pulley to +extend faster than the other. At the same time the constraint force is smaller on one side than the +other. You can use this to create a mechanical leverage. + +```text +length1 + ratio * length2 == constant +``` + +For example, if the ratio is 2, then `length1` will vary at twice the rate of `length2`. Also the +force in the rope attached to the first body will have half the constraint force as the rope +attached to the second body. + +```dart +final pulleyJointDef = PulleyJointDef() + ..initialize( + firstBody, + secondBody, + firstPulley.worldCenter, + secondPulley.worldCenter, + firstBody.worldCenter, + secondBody.worldCenter, + 1, + ); + +world.createJoint(PulleyJoint(pulleyJointDef)); +``` + +```{flutter-app} +:sources: ../../examples +:page: pulley_joint +:subfolder: stories/bridge_libraries/flame_forge2d/joints +:show: code popup +``` + +The `initialize` method of `PulleyJointDef` requires two ground anchors, two dynamic bodies and +their anchor points, and a pulley ratio. + +- `b1`, `b2`: Two dynamic bodies connected with the joint +- `ga1`, `ga2`: Two ground anchors +- `anchor1`, `anchor2`: Anchors on the dynamic bodies the joint will be attached to +- `r`: Pulley ratio to simulate a block and tackle + +`PulleyJoint` also provides the current lengths: + +```dart +joint.getCurrentLengthA() +joint.getCurrentLengthB() +``` + +```{warning} +`PulleyJoint` can get a bit troublesome by itself. They often work better when +combined with prismatic joints. You should also cover the anchor points +with static shapes to prevent one side from going to zero length. +``` + + +### `RevoluteJoint` + +A `RevoluteJoint` forces two bodies to share a common anchor point, often called a hinge point. +The revolute joint has a single degree of freedom: the relative rotation of the two bodies. + +To create a `RevoluteJoint`, provide two bodies and a common point to the `initialize` method. +The definition uses local anchor points so that the initial configuration can violate the +constraint slightly. + +```dart +final jointDef = RevoluteJointDef() + ..initialize(firstBody, secondBody, firstBody.position); +world.createJoint(RevoluteJoint(jointDef)); +``` + +```{flutter-app} +:sources: ../../examples +:page: revolute_joint +:subfolder: stories/bridge_libraries/flame_forge2d/joints +:show: code popup +``` + +In some cases you might wish to control the joint angle. For this, the `RevoluteJointDef` has +optional parameters that allow you to simulate a joint limit and/or a motor. + + +#### Revolute Joint Limit + +You can limit the relative rotation with a joint limit that specifies a lower and upper angle. + +```dart +jointDef + ..enableLimit = true + ..lowerAngle = 0 + ..upperAngle = pi / 2; +``` + +- `enableLimit`: Set to true to enable angle limits +- `lowerAngle`: The lower angle in radians +- `upperAngle`: The upper angle in radians + +You change the limits after the joint was created with this method: + +```dart +revoluteJoint.setLimits(0, pi); +``` + + +#### Revolute Joint Motor + +You can use a motor to drive the relative rotation about the shared point. A maximum motor torque is +provided so that infinite forces are not generated. + +```dart +jointDef + ..enableMotor = true + ..motorSpeed = 5 + ..maxMotorTorque = 100; +``` + +- `enableMotor`: Set to true to enable the motor +- `motorSpeed`: The desired motor speed in radians per second +- `maxMotorTorque`: The maximum motor torque used to achieve the desired motor speed in N-m. + +You change the motor's speed and torque after the joint was created using these methods: + +```dart +revoluteJoint.setMotorSpeed(2); +revoluteJoint.setMaxMotorTorque(200); +``` + +Also, you can get the joint angle and speed using the following methods: + +```dart +revoluteJoint.jointAngle(); +revoluteJoint.jointSpeed(); +``` + + +### `RopeJoint` + +A `RopeJoint` restricts the maximum distance between two points on two bodies. + +`RopeJointDef` requires two body anchor points and the maximum length. + +```dart +final ropeJointDef = RopeJointDef() + ..bodyA = firstBody + ..localAnchorA.setFrom(firstBody.getLocalCenter()) + ..bodyB = secondBody + ..localAnchorB.setFrom(secondBody.getLocalCenter()) + ..maxLength = (secondBody.worldCenter - firstBody.worldCenter).length; + +world.createJoint(RopeJoint(ropeJointDef)); +``` + +```{flutter-app} +:sources: ../../examples +:page: rope_joint +:subfolder: stories/bridge_libraries/flame_forge2d/joints +:show: code popup +``` + +- `bodyA`, `bodyB`: Connected bodies +- `localAnchorA`, `localAnchorB`: Optional parameter, anchor point relative to the body's origin. +- `maxLength`: The maximum length of the rope. This must be larger than `linearSlop`, or the joint +will have no effect. + +```{warning} +The joint assumes that the maximum length doesn't change during simulation. +See `DistanceJoint` if you want to dynamically control length. +``` + + +### `WeldJoint` + +A `WeldJoint` is used to restrict all relative motion between two bodies, effectively joining them +together. + +`WeldJointDef` requires two bodies that will be connected, and a world anchor: + +```dart +final weldJointDef = WeldJointDef() + ..initialize(bodyA, bodyB, anchor); + +world.createJoint(WeldJoint(weldJointDef)); +``` + +```{flutter-app} +:sources: ../../examples +:page: weld_joint +:subfolder: stories/bridge_libraries/flame_forge2d/joints +:show: code popup +``` + +- `bodyA`, `bodyB`: Two bodies that will be connected + +- `anchor`: Anchor point in world coordinates, at which two bodies will be welded together + to 0, the higher the value, the less springy the joint becomes. + + +#### Breakable Bodies and WeldJoint + +Since the Forge2D constraint solver is iterative, joints are somewhat flexible. This means that the +bodies connected by a WeldJoint may bend slightly. If you want to simulate a breakable body, it's +better to create a single body with multiple fixtures. When the body breaks, you can destroy a +fixture and recreate it on a new body instead of relying on a `WeldJoint`. diff --git a/docs/1.18.0/_sources/bridge_packages/flame_isolate/flame_isolate.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_isolate/flame_isolate.md.txt new file mode 100644 index 000000000..ff47f8572 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_isolate/flame_isolate.md.txt @@ -0,0 +1,5 @@ +# flame_isolate + +```{toctree} +Overview +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_isolate/isolate.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_isolate/isolate.md.txt new file mode 100644 index 000000000..2d45f9444 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_isolate/isolate.md.txt @@ -0,0 +1,72 @@ +# FlameIsolate + +The power of [integral_isolates](https://pub.dev/packages/integral_isolates) neatly packaged in +[flame_isolate](https://pub.dev/packages/flame_isolate) for your Flame game. + +If you've ever used the [compute](https://api.flutter.dev/flutter/foundation/compute-constant.html) +function before, you will feel right at home. This mixin allows you to run CPU-intensive code in an +isolate. + +To use it in your game you just need to add `flame_isolate` to your pubspec.yaml. + + +## Usage + +Just add the mixin `FlameIsolate` to your component and start utilizing the power of an isolate as +simple as running the [compute](https://api.flutter.dev/flutter/foundation/compute-constant.html) +function. + +Example: + +```dart +class MyGame extends FlameGame with FlameIsolate { + ... + @override + void update(double dt) { + if (shouldRecalculate) { + isolate(recalculateWorld, worldData).then(updateWorld); + } + ... + } + ... +} +``` + + +### Performance note + +Keep in mind that every component with `FlameIsolate` mixin that you create and add to your game +will create a new isolate. This means you will probably want to create a manager component to +manage a lot of "dumber" components. Think of it like ants, where the queen controls the worker +ants. If every individual worker ant got its own isolate, it would be a total waste of power, +hence you would put it on the queen, which in turn tells all the worker ants what to do. + +A simple example of this can be found in the example application for the FlameIsolate package. + + +### Backpressure Strategies + +Backpressure strategies are a way to cope with the job queue when job items are produced more +rapidly than the isolate can handle them. This presents the problem of what to do with such a +growing backlog of unhandled jobs. To mitigate this problem this library funnels all jobs through a +job queue handler. Also known as `BackpressureStrategy`. + +The ones currently supported are: + +- `NoBackPressureStrategy` that basically does not handle back pressure. It uses a FIFO stack for +storing a backlog of unhandled jobs. +-`ReplaceBackpressureStrategy` that has a job queue with size one, and discards the queue upon +adding a new job. +- `DiscardNewBackPressureStrategy` that has a job queue with size one, and as long as the queue is +populated a new job will not be added. + +You can specify a backpressure strategy by overriding the `backpressureStrategy` field. This will +create the isolate with the specified strategy when the component is mounted. + +```dart +class MyGame extends FlameGame with FlameIsolate { + @override + BackpressureStrategy get backpressureStrategy => ReplaceBackpressureStrategy(); + ... +} +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_lottie/flame_lottie.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_lottie/flame_lottie.md.txt new file mode 100644 index 000000000..259709970 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_lottie/flame_lottie.md.txt @@ -0,0 +1,51 @@ +# flame_lottie + +This package allows you to load and add Lottie animations to your Flame game. + + +The native Lottie libraries (such as [lottie-android](https://github.com/airbnb/lottie-android)) +are maintained by **Airbnb**. + +The Flutter package ``lottie``, on which this wrapper is based on, is by developed **xaha.dev** and +can be found on [pub.dev](https://pub.dev/packages/lottie). + + +## Usage + +To use it in your game you just need to add `flame_lottie` to your pubspec.yaml. + +Simply load the Lottie animation using the **loadLottie** method and +the [LottieBuilder](https://pub.dev/documentation/lottie/latest/lottie/LottieBuilder-class.html). +It allows all the various ways of loading a Lottie file: + +- [Lottie.asset](https://pub.dev/documentation/lottie/latest/lottie/Lottie/asset.html), for +obtaining a Lottie file from an AssetBundle using a key. +- [Lottie.network](https://pub.dev/documentation/lottie/latest/lottie/Lottie/network.html), for +obtaining a lottie file from a URL. +- [Lottie.file](https://pub.dev/documentation/lottie/latest/lottie/Lottie/file.html), for obtaining + a lottie file from a File. +- [Lottie.memory](https://pub.dev/documentation/lottie/latest/lottie/Lottie/memory.html), for +obtaining a lottie file from a Uint8List. + +... and add it as `LottieComponent` to your Flame 🔥 game. + +Example: + +```dart +class MyGame extends FlameGame { + ... + @override + Future onLoad() async { + final asset = Lottie.asset('assets/LottieLogo1.json'); + final animation = await loadLottie(asset); + add( + LottieComponent( + animation, + repeating: true, // Continuously loop the animation. + size: Vector2.all(400), + ), + ); + } + ... +} +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_network_assets/flame_network_assets.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_network_assets/flame_network_assets.md.txt new file mode 100644 index 000000000..bad672c78 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_network_assets/flame_network_assets.md.txt @@ -0,0 +1,35 @@ +# FlameNetworkAssets + +`FlameNetworkAssets` is a bridge package focused on providing a solution to fetch, and cache assets +from the network. + +The `FlameNetworkAssets` class provides an abstraction that should be extended in order to create +asset specific handler. + +By default, the package relies on the `http` package to make http requests, and `path_provider` +to get the place to store the local cache, to use a different approach for those, use the +optional arguments in the constructor. + +This package bundles a specific asset handler class for images: + +```dart +final networkAssets = FlameNetworkImages(); +final playerSprite = await networkAssets.load('https://url.com/image.png'); +``` + +To create a specific asset handler class, you just need to extend the `FlameNetworkAssets` class +and define the `decodeAsset` and `encodeAsset` arguments: + +```dart +class FlameNetworkCustomAsset extends FlameNetworkAssets { + FlameNetworkImages({ + super.get, + super.getAppDirectory, + super.cacheInMemory, + super.cacheInStorage, + }) : super( + decodeAsset: (bytes) => CustomAsset.decode(bytes), + encodeAsset: (CustomAsset asset) => asset.encode(), + ); +} +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_oxygen/flame_oxygen.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_oxygen/flame_oxygen.md.txt new file mode 100644 index 000000000..da65d946d --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_oxygen/flame_oxygen.md.txt @@ -0,0 +1,8 @@ +# flame_oxygen + +[flame_oxygen](https://github.com/flame-engine/flame/tree/main/packages/flame_oxygen) + +```{toctree} +:hidden: + +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_rive/flame_rive.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_rive/flame_rive.md.txt new file mode 100644 index 000000000..f8c6f1f3c --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_rive/flame_rive.md.txt @@ -0,0 +1,6 @@ +# flame_rive + +```{toctree} +Overview + +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_rive/rive.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_rive/rive.md.txt new file mode 100644 index 000000000..dede4feca --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_rive/rive.md.txt @@ -0,0 +1,54 @@ +# flame_rive + +`flame_rive` is a bridge library for using [rive](https://rive.app/) animations in your Flame game. +Rive is a real-time interactive design and animation tool and you use it to create animations. + +To use a file created by Rive in your game you need to add `flame_rive` to your pubspec.yaml, as can +be seen in the +[Flame Rive example](https://github.com/flame-engine/flame/tree/main/packages/flame_rive/example) +and in the pub.dev [installation instructions](https://pub.dev/packages/flame_rive). + + +## How to use it + +First, start with adding the `animation.riv` file to the assets folder. Then load the artboard of +the animation to the game using the `loadArtboard` method. After that, create the +`StateMachineController` from the artboard and add a controller to it. Then you can create a +`RiveComponent` using that artboard. + +```{flutter-app} +:sources: ../flame/examples +:page: rive_example +:show: widget code infobox +:width: 200 +:height: 200 +``` + +```dart +class RiveExampleGame extends FlameGame { + @override + Future onLoad() async { + final skillsArtboard = + await loadArtboard(RiveFile.asset('assets/skills.riv')); + + final controller = StateMachineController.fromArtboard( + skillsArtboard, + "Designer's Test", + ); + + skillsArtboard.addController(controller!); + + add(RiveComponent(artboard: skillsArtboard, size: Vector2.all(550))); + } +} +``` + +You can use the controller to manage the state of animation. +Check out the example for more information. + + +## Full Example + +You can check an example +[here](https://github.com/flame-engine/flame/tree/main/packages/flame_rive/example). + diff --git a/docs/1.18.0/_sources/bridge_packages/flame_riverpod/component.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_riverpod/component.md.txt new file mode 100644 index 000000000..b7195fa07 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_riverpod/component.md.txt @@ -0,0 +1,48 @@ +# Component + + +## ComponentRef + +`ComponentRef` exposes Riverpod functionality to individual `Component`s, and is comparable to +`flutter_riverpod`'s `WidgetRef`. + + +## RiverpodComponentMixin + +`RiverpodComponentMixin` manages the lifecycle of listeners on behalf of individual `Component`s. + +`Component`s using this mixin must use `addToGameWidgetBuild` in their `onMount` method to add +listeners (e.g. `ref.watch` or `ref.listen`) *prior to* calling `super.onMount`, which manages the +staged listeners and disposes of them on the user's behalf inside `onRemove`. + +```dart + +class RiverpodAwareTextComponent extends PositionComponent + with RiverpodComponentMixin { + late TextComponent textComponent; + int currentValue = 0; + + @override + void onMount() { + addToGameWidgetBuild(() { + ref.listen(countingStreamProvider, (p0, p1) { + if (p1.hasValue) { + currentValue = p1.value!; + textComponent.text = '$currentValue'; + } + }); + }); + super.onMount(); + add(textComponent = TextComponent(position: position + Vector2(0, 27))); + } +} + +``` + + +## RiverpodGameMixin + +`RiverpodGameMixin` provides listeners from all components to the build method of the +`RiverpodAwareGameWidget`. +The `addToGameWidgetBuild` method is available in the `RiverpodGameMixin` as well, +enabling you to access `ComponentRef` methods directly in your Game class. diff --git a/docs/1.18.0/_sources/bridge_packages/flame_riverpod/flame_riverpod.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_riverpod/flame_riverpod.md.txt new file mode 100644 index 000000000..b63c85a8b --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_riverpod/flame_riverpod.md.txt @@ -0,0 +1,8 @@ +# flame_riverpod + +```{toctree} +Overview +Component +Widget +``` + diff --git a/docs/1.18.0/_sources/bridge_packages/flame_riverpod/riverpod.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_riverpod/riverpod.md.txt new file mode 100644 index 000000000..f75ffdc3e --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_riverpod/riverpod.md.txt @@ -0,0 +1,67 @@ +# flame_riverpod + + +## Riverpod + +[Riverpod](https://riverpod.dev/) is a reactive caching and data-binding +framework for Dart & Flutter. + +In `flutter_riverpod`, widgets can be configured to rebuild when the state +of a provider changes. + +When using Flame, we are interacting with components, which are *not* Widgets. + +`flame_riverpod` provides the `RiverpodAwareGameWidget`, `RiverpodGameMixin`, and +`RiverpodComponentMixin` to facilitate managing state from `Provider`s in your Flame Game. + + +## Usage + +You should use the `RiverpodAwareGameWidget` as your Flame `GameWidget`, the `RiverpodGameMixin` +mixin on your game that extends `FlameGame`, and the `RiverpodComponentMixin` on any components +interacting with Riverpod providers. + +Subscriptions to a provider are managed in accordance with the lifecycle +of a Flame Component: initialization occurs when a Component is mounted, and disposal +occurs when a Component is removed. + +By default, the `RiverpodAwareGameWidget` is rebuilt when +Riverpod-aware (i.e. using the `RiverpodComponentMixin`) components are mounted and when they are +removed. + +```dart +/// An excerpt from the Example. Check it out! +class RefExampleGame extends FlameGame with RiverpodGameMixin { + @override + Future onLoad() async { + await super.onLoad(); + add(TextComponent(text: 'Flame')); + add(RiverpodAwareTextComponent()); + } +} + +class RiverpodAwareTextComponent extends PositionComponent + with RiverpodComponentMixin { + late TextComponent textComponent; + int currentValue = 0; + + @override + void onMount() { + addToGameWidgetBuild(() { + ref.listen(countingStreamProvider, (p0, p1) { + if (p1.hasValue) { + currentValue = p1.value!; + textComponent.text = '$currentValue'; + } + }); + }); + super.onMount(); + add(textComponent = TextComponent(position: position + Vector2(0, 27))); + } +} + +``` + +The order of operations in `Component.onMount` is important. The `RiverpodComponentMixin` +interacts with `RiverpodGameMixin` (inside of `RiverpodComponentMixin.onMount`) to co-ordinate +adding and removing listeners as the corresponding component is mounted and removed, respectively. diff --git a/docs/1.18.0/_sources/bridge_packages/flame_riverpod/widget.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_riverpod/widget.md.txt new file mode 100644 index 000000000..fd9a8a280 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_riverpod/widget.md.txt @@ -0,0 +1,16 @@ +# Widget + + +## RiverpodAwareGameWidget + +`RiverpodAwareGameWidget` is a GameWidget with a `State` object of type +`RiverpodAwareGameWidgetState`. + +The required `GlobalKey` argument is used to provide `Component`s using `RiverpodComponentMixin` +access to `Provider`s via `RiverpodAwareGameWidgetState`. + + +## RiverpodAwareGameWidgetState + +`RiverpodAwareGameWidgetState` performs the duties associated with the +`ConsumerStatefulElement` in `flutter_riverpod` and `GameWidgetState` in `flame`. diff --git a/docs/1.18.0/_sources/bridge_packages/flame_spine/flame_spine.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_spine/flame_spine.md.txt new file mode 100644 index 000000000..b0c6652dd --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_spine/flame_spine.md.txt @@ -0,0 +1,52 @@ +# flame_spine + +This package allows you to load and add Spine skeletal animations to your Flame game. + + +## Usage + +To use it in your game you just need to add `flame_spine` to your pubspec.yaml and your spine +assets to your `assets/` directory, and you can add a `SpineComponent` to your `FlameGame`. + +```{note} +Remember to call `await initSpineFlutter();` in your `main` method, or in `onLoad`. +``` + +Example: + +```dart +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + await initSpineFlutter(); + runApp(const GameWidget.controlled(gameFactory: SpineExample.new)); +} + +class FlameSpineExample extends FlameGame with TapDetector { + late final SpineComponent spineboy; + + @override + Future onLoad() async { + await initSpineFlutter(); + // Load the Spineboy atlas and skeleton data from asset files + // and create a SpineComponent from them, scaled down and + // centered on the screen + spineboy = await SpineComponent.fromAssets( + atlasFile: 'assets/spine/spineboy.atlas', + skeletonFile: 'assets/spine/spineboy-pro.skel', + scale: Vector2(0.4, 0.4), + anchor: Anchor.center, + position: size / 2, + ); + + // Set the "walk" animation on track 0 in looping mode + spineboy.animationState.setAnimationByName(0, 'walk', true); + await add(spineboy); + } + + @override + void onDetach() { + // Dispose the native resources that have been loaded for spineboy. + spineboy.dispose(); + } +} +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_splash_screen/flame_splash_screen.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_splash_screen/flame_splash_screen.md.txt new file mode 100644 index 000000000..a9f9ac826 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_splash_screen/flame_splash_screen.md.txt @@ -0,0 +1,17 @@ +# flame_splash_screen + +![Showcase of the splash screen](https://raw.githubusercontent.com/flame-engine/flame_splash_screen/main/demogif.gif) + +Style your flame game with a beautiful splash screen. + +flame_splash_screen is a very customizable splash screen package. + +```dart +FlameSplashScreen( + theme: FlameSplashTheme.dark, + onFinish: (BuildContext context) => Navigator.pushNamed(context, '/your-game-initial-screen') +) +``` + +Check the [package's repo](https://github.com/flame-engine/flame_splash_screen) and the +[pub page](https://pub.dev/packages/flame_splash_screen) for more details. diff --git a/docs/1.18.0/_sources/bridge_packages/flame_svg/flame_svg.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_svg/flame_svg.md.txt new file mode 100644 index 000000000..a287108d8 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_svg/flame_svg.md.txt @@ -0,0 +1,5 @@ +# flame_svg + +```{toctree} +Overview +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_svg/svg.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_svg/svg.md.txt new file mode 100644 index 000000000..22e9c9126 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_svg/svg.md.txt @@ -0,0 +1,47 @@ +# Flame SVG + +flame_svg provides a simple API for rendering SVG images in your game. + + +## Installation + +Svg support is provided by the `flame_svg` bridge package, be sure to put it in your pubspec file +to use it. + +If you want to know more about the installation visit +[flame_svg on pub.dev](https://pub.dev/packages/flame_svg/install). + + +## How to use flame_svg + +To use it just import the `Svg` class from `'package:flame_svg/flame_svg.dart'`, and use the +following snippet to render it on the canvas: + +```dart +final svgInstance = await Svg.load('android.svg'); + +final position = Vector2(100, 100); +final size = Vector2(300, 300); + +svgInstance.renderPosition(canvas, position, size); +``` + +or use the `SvgComponent` and add it to the component tree: + +```dart +class MyGame extends FlameGame { + @override + Future onLoad() async { + final svgInstance = await Svg.load('android.svg'); + final size = Vector2.all(100); + final position = Vector2.all(100); + final svgComponent = SvgComponent( + size: size, + position: position, + svg: svgInstance, + ); + + add(svgComponent); + } +} +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_tiled/flame_tiled.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_tiled/flame_tiled.md.txt new file mode 100644 index 000000000..6f9d026e9 --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_tiled/flame_tiled.md.txt @@ -0,0 +1,140 @@ +# flame_tiled + +**flame_tiled** is the bridge package that connects the flame game engine to [Tiled] maps by parsing +TMX (XML) files and accessing the tiles, objects, and everything in there. + +To use this, + +1. Create your own map by using [Tiled]. +2. Create a `TiledComponent` and add it to the component tree as follows: + +```dart +final component = await TiledComponent.load( + 'my_map.tmx', + Vector2.all(32), +); + +add(component); +``` + + +## TiledComponent + +Tiled is a free and open source, full-featured level and map editor for your platformer or +RPG game. Currently we have an "in progress" implementation of a Tiled component. This API +uses the lib [tiled.dart](https://github.com/flame-engine/tiled.dart) to parse map files and +render visible layers using the performant `SpriteBatch` for each layer. + +Supported map types include: Orthogonal, Isometric, Hexagonal, and Staggered. + +Orthogonal | Hexagonal | Isomorphic +:--:|:-------------------------:|:-------------------------: +![An example of an orthogonal map](../../images/orthogonal.png)|![An example of hexagonal map](../../images/pointy_hex_even.png) | ![An example of isomorphic map](../../images/tile_stack_single_move.png) + +An example of how to use the API can be found +[here](https://github.com/flame-engine/flame_tiled/tree/main/example). + + +### TileStack + +Once a `TiledComponent` is loaded, you can select any column of (x,y) tiles in a `tileStack` to +then add animation. Removing the stack will not remove the tiles from the map. + +> **Note**: This currently only supports position based effects. + +```dart +void onLoad() { + final stack = map.tileMap.tileStack(4, 0, named: {'floor_under'}); + stack.add( + SequenceEffect( + [ + MoveEffect.by( + Vector2(5, 0), + NoiseEffectController(duration: 1, frequency: 20), + ), + MoveEffect.by(Vector2.zero(), LinearEffectController(2)), + ], + repeatCount: 3, + ) + ..onComplete = () => stack.removeFromParent(), + ); + map.add(stack); +} +``` + + +### TileAtlas + +When a tilemap has multiple images (from multiple tilesets) `TiledComponent` uses a `TileAtlas` to +pack all those image into a single big image (a.k.a atlas). This helps in rendering the whole map in +a single draw call. But is there a limit on how big this atlas can be based on the target platform +and hardware. As it is not possible to query this max size from Flame or Flutter as of now, +`TiledComponent` limits the atlas to `4096x4096` for web and `8192x8192` for all other platforms. + +These limits should work well for most cases. But in case you are sure that your target platform can +support bigger atlas and want to override the limits used by `TiledComponent` you can do so by +passing in the `atlasMaxX` and `atlasMaxX` values to `TiledComponent.load`. + +NOTE: This is not recommended as such huge sizes might not work with all hardware. Instead consider +resizing the original tileset images so that when packed they fit with the limits. + +```dart +final component = await TiledComponent.load( + 'my_map.tmx', + Vector2.all(32), + atlasMaxX: 9216, + atlasMaxY: 9216, +); + +add(component); +``` + + +## Limitations + + +### Flip + +[Tiled] has a feature that allows you to flip a tile horizontally or vertically, or even rotate it. + +`flame_tiled` supports this but if you are using a large texture and have flipped tiles there will +be a drop in performance. If you want to ignore any flips in your tilemap you can set the +`ignoreFlip` to false in the constructor. + +**Note**: A large texture in this context means one with multiple tilesets (or a huge tileset) +where the sum of their dimensions are in the thousands. + +```dart +final component = await TiledComponent.load( + 'my_map.tmx', + Vector2.all(32), + ignoreFlip: true, +); +``` + + +### Clearing images cache + +If you have called `Flame.images.clearCache()` you also need to call `TiledAtlas.clearCache()` to +remove disposed images from the tiled cache. It might be useful if your next game map have completely +different tiles than the previous. + +[Tiled]: https://www.mapeditor.org/ + + +## Troubleshooting + + +### My game shows "lines" and artifacts between the map tiles + +This is caused by the imprecision found in float-pointing numbers in computer science. + +Check this [Article](https://verygood.ventures/blog/solving-super-dashs-rendering-challenges-eliminating-ghost-lines-for-a-seamless-gaming-experience) +to learn more about the issue and how it can be solved. + +```{toctree} +:hidden: + +Tiled +Layers +``` diff --git a/docs/1.18.0/_sources/bridge_packages/flame_tiled/layers.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_tiled/layers.md.txt new file mode 100644 index 000000000..72c0afd0c --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_tiled/layers.md.txt @@ -0,0 +1,44 @@ +# Layers + +At its simplest, layers can be retrieved from a Tilemap by invoking: + +```dart +getLayer("myObjectGroupLayer"); +getLayer("myImageLayer"); +getLayer("myTileLayer"); +getLayer("myGroupLayer"); +``` + +These methods will either return the requested layer type or null if it does not exist. + + +## Layer properties + +The following Tiled properties are supported: + +- [x] Visible +- [x] Opacity +- [ ] Tint color +- [x] Horizontal offset +- [x] Vertical offset +- [x] Parallax factor +- [x] Custom properties + + +## Tiles properties + +- Tiles can have custom properties accessible at `tile.properties`. +- Tiles can have a custom `type` (or `class` starting in Tiled v1.9) accessible at `tile.type`. + + +## Other features + +Other advanced features are not yet supported, but you can easily read the objects and other +features of the TMX and add custom behavior (eg regions for triggers and walking areas, custom +animated objects). + + +## Full Example + +You can check a working example +[here](https://github.com/flame-engine/flame/tree/main/packages/flame_tiled/example). diff --git a/docs/1.18.0/_sources/bridge_packages/flame_tiled/tiled.md.txt b/docs/1.18.0/_sources/bridge_packages/flame_tiled/tiled.md.txt new file mode 100644 index 000000000..ddbabd64e --- /dev/null +++ b/docs/1.18.0/_sources/bridge_packages/flame_tiled/tiled.md.txt @@ -0,0 +1,39 @@ +# Tiled + +[Tiled] is a great tool to design levels and maps. From [Tiled]'s documentation: + +> Tiled is a 2D level editor that helps you develop the content of your game. Its +> primary feature is to edit tile maps of various forms, but it also supports +> free image placement as well as powerful ways to annotate your level with extra +> information used by the game. Tiled focuses on general flexibility while trying +> to stay intuitive. +> +> In terms of tile maps, it supports straight rectangular tile layers, but also +> projected isometric, staggered isometric and staggered hexagonal layers. A +> tileset can be either a single image containing many tiles, or it can be a +> collection of individual images. In order to support certain depth faking +> techniques, tiles and layers can be offset by a custom distance and their +> rendering order can be configured. + + +![Tiled Editor](../../images/TiledEditor.jpg) + + +Flame provides a package ([flame_tiled]) that bundles a [dart] package which allows you to parse TMX +(XML) files and access the tiles, objects, and everything in there. + +The [dart] package provides a simple `Tiled` class and [flame_tiled] provides a component wrapper +`TiledComponent`, for the map rendering, which renders the tiles on the screen and supports +rotations and flips. + + +## Tiled Editor + +You can choose to download the [Tiled] map editor and create interactive maps that can be loaded +into your game. At its core, the [Tiled] map editor creates a TMX file that can be parsed and used +within your game. + + +[dart]: https://pub.dev/packages/tiled +[flame_tiled]: https://github.com/flame-engine/flame_tiled +[Tiled]: https://www.mapeditor.org/ diff --git a/docs/1.18.0/_sources/development/contributing.md.txt b/docs/1.18.0/_sources/development/contributing.md.txt new file mode 100644 index 000000000..ef6daa82a --- /dev/null +++ b/docs/1.18.0/_sources/development/contributing.md.txt @@ -0,0 +1,2 @@ +```{include} ../../CONTRIBUTING.md +``` diff --git a/docs/1.18.0/_sources/development/development.md.txt b/docs/1.18.0/_sources/development/development.md.txt new file mode 100644 index 000000000..42901125a --- /dev/null +++ b/docs/1.18.0/_sources/development/development.md.txt @@ -0,0 +1,15 @@ +# Development + +- [Contributing](contributing.md) +- [Documentation](documentation.md) +- [Style Guide](style_guide.md) +- [Tests Guide](testing_guide.md) + +```{toctree} +:hidden: + +Contributing +Documentation +Style Guide +Tests Guide +``` diff --git a/docs/1.18.0/_sources/development/documentation.md.txt b/docs/1.18.0/_sources/development/documentation.md.txt new file mode 100644 index 000000000..16880800e --- /dev/null +++ b/docs/1.18.0/_sources/development/documentation.md.txt @@ -0,0 +1,231 @@ +# Documentation Site + +Flame's documentation is written in **Markdown**. It is then rendered into HTML with the help of +the [Sphinx] engine and its [MyST] plugin. The rendered files are then manually (but with the help +of a script) published to [flame-docs-site], where the site is served via [GitHub Pages]. + +[Sphinx]: https://www.sphinx-doc.org/en/master/ +[MyST]: https://myst-parser.readthedocs.io/en/latest/ +[flame-docs-site]: https://github.com/flame-engine/flame-docs-site +[GitHub Pages]: https://pages.github.com/ + + +## Markdown + +The main documentation site is written in Markdown. We assume that you're already familiar with the +basics of the Markdown syntax (if not, there are plenty of guides on the Internet). Instead, this +section will focus on the Markdown extensions that are enabled in our build system. + + +## Table of contents + +The table of contents for the site must be created manually. This is done using special `{toctree}` +blocks, one per each subdirectory: + +`````markdown +```{toctree} +:hidden: + +First Topic +Second Topic +``` +````` + +When adding new documents into the documentation site, make sure that they are mentioned in one of +the toctrees -- otherwise you will see a warning during the build that the document is orphaned. + + +## Admonitions + +Admonitions are emphasized blocks of text with a distinct appearance. They are created using the +triple-backticks syntax: + +`````markdown +```{note} +Please note this very important caveat. +``` +```{warning} +Don't look down, or you will encounter an error. +``` +```{error} +I told you so. +``` +```{seealso} +Also check out this cool thingy. +``` +````` + +```{note} +Please note this very important caveat. +``` + +```{warning} +Don't look down, or you will encounter an error. +``` + +```{error} +I told you so. +``` + +```{seealso} +Also check out this cool thingy. +``` + + +## Deprecations + +The special `{deprecated}` block can be used to mark some part of documentation or syntax as being +deprecated. This block requires specifying the version when the deprecation has occurred + +`````markdown +```{deprecated} v1.3.0 + +Please use this **other** thing instead. +``` +````` + +Which would be rendered like this: + +```{deprecated} v1.3.0 + +Please use this **other** thing instead. +``` + + +## Live examples + +Our documentation site includes a custom-built **flutter-app** directive which allows creating +Flutter widgets and embedding them alongside the overall documentation content. + +In Markdown, the code for inserting an embed looks like this: + +`````markdown +```{flutter-app} +:sources: ../flame/examples +:page: tap_events +:show: widget code popup +:width: 180 +:height: 160 +``` +`````` + +Here's what the different options mean: + +- **sources**: specifies the name of the root directory where the Flutter code that you wish to run + is located. This directory must be a Flutter repository, and there must be a `pubspec.yaml` file + there. The path is considered relative to the `doc/_sphinx` directory. + +- **page**: a sub-path within the root directory given in `sources`. This option has two effects: + first, it is appended to the path of the html page of the widget, like so: `main.dart.html?$page`. + Secondly, the button to show the source code of the embed will display the code from the file or + directory with the name given by `page`. + + The purpose of this option is to be able to bundle multiple examples into a single executable. + When using this option, the `main.dart` file of the app should route the execution to the proper + widget according to the `page` being passed. + +- **show**: contains a subset of modes: `widget`, `code`, `infobox`, and `popup`. The `widget` mode + creates an iframe with the embedded example, directly within the page. The `code` mode will show + a button that allows the user to see the code that produced this example. The `popup` mode also + shows a button, which displays the example in an overlay window. This is more suitable for + demoing larger apps. Using both "widget" and "popup" modes at the same time is not recommended. + Finally, the `infobox` mode will display the result in a floating window -- this mode is best + combined with `widget` and `code`. + +- **width**: an integer that defines the width of the embedded application. If this is not defined, + the width will be 100%. + +- **height**: an integer that defines the height of the embedded application. If this is not + defined, the height will be 350px. + +```{flutter-app} +:sources: ../flame/examples +:page: tap_events +:show: widget code popup +``` + + +## Standardization and Templates + +For every section or package added to the documentation, naming conventions, directory structure, +and standardized table of contents are important. Every section and package must have a table of +contents or an entry in the parent markdown file to allow navigation from the left sidebar menu in +logical or alphabetical order. Additionally, naming conventions should be followed for organization, +such as: + +- bridge_packages/package_name/package_name.md +- documentation_section/documentation_section.md + +```{note} +Avoid having spaces in the paths to the docs since that will keep you from +building the project due to +[this bug](https://github.com/ipython/ipython/pull/13765). +``` + + +## Building documentation locally + +Building the documentation site on your own computer is fairly simple. All you need is the +following: + +1. A working **Flutter** installation, accessible from the command line. + +2. **Melos** command-line tool, as per the [contributing] guide. + +3. A **Python** environment, with python version 3.8+ or higher. Having a dedicated python + virtual environment is recommended but not required. + +4. Install the remaining requirements using the command + + ```shell + melos run doc-setup + ``` + +Once these prerequisites are met, you can build the documentation by using the built-in Melos +target: + +```shell +melos doc-build +``` + +The **melos doc-build** command here renders the documentation site into HTML. This command needs to +be re-run every time you make changes to any of the documents. Luckily, it is smart enough to only +rebuild the documents that have changed since the previous run, so usually, a rebuild takes only a +second or two. + +If you want to automatically recompile the docs every time there is a change to one of the files +you can use the built-in Melos target below, which will also serve and open your default +browser with the docs. + +```shell +melos doc-serve +``` + +When using the **melos doc-serve** command, the **melos doc-build** is only needed when +there are changes to the sphinx theme. This is because the serve command both automatically +compiles the docs on changes and also hosts them locally. The docs are served at +`http://localhost:8000/` by default. + +There are other make commands that you may find occasionally useful too: + +- **melos doc-clean** removes all cached generated files (in case the system gets stuck in a bad +state). +- **melos doc-linkcheck** to check whether there are any broken links in the documentation. +- **melos doc-kill** removes any orphaned TCP threads running on port 8000. + +The generated html files will be in the `doc/_build/html` directory, you can view them directly +by opening the file `doc/_build/html/index.html` in your browser. The only drawback is that the +browser won't allow any dynamic content in a file opened from a local drive. The solution to this +is to run **melos doc-serve**. + +If you ever run the **melos doc-clean** command, the server will need to be restarted, because the +clean command deletes the entire `html` directory. + +```{note} +Avoid having spaces in the paths to the docs since that will keep you from +building the project due to +[this bug](https://github.com/ipython/ipython/pull/13765). +``` + + +[contributing]: contributing.md#environment-setup diff --git a/docs/1.18.0/_sources/development/style_guide.md.txt b/docs/1.18.0/_sources/development/style_guide.md.txt new file mode 100644 index 000000000..e6df0eb17 --- /dev/null +++ b/docs/1.18.0/_sources/development/style_guide.md.txt @@ -0,0 +1,228 @@ +# Flame Style Guide + +This is a general style guide for writing code within Flame and adjacent projects. We strive to +maintain the code clean and readable -- both for the benefit of the users who will need to study +this code in order to understand how a particular feature works or debug something that is breaking, +and for the benefit of the current and future maintainers. + +This guide extends upon the official [Dart's style guide][effective dart]. Please make sure to read +that document first, as it is sure to improve your skill in Dart programming. + + +## Code Formatting + +Most of the code formatting rules are enforced automatically via the linter. Run the following +commands to ensure the code is conformant and to fix any easy formatting problems: + +```shell +flutter analyze +dart format . +``` + + +## Code Structure + + +### Imports + +- If you're using an external symbol that's defined in multiple libraries, prefer importing the + smallest of them. For example, use `package:meta/meta.dart` to import annotations like + `@protected`, or `dart:ui` to import `Canvas`. + +- Never import `package:flutter/cupertino.dart` or `package:flutter/material.dart` -- prefer + a much smaller library `package:flutter/widgets.dart` if you're working with widgets. + + +### Exports + +- Strongly prefer to have only one public class per file, and name the file after that class. + Having several private classes within the file is perfectly reasonable. + +- A possible exception to this rule is if the "main" class requires some small "helper" classes + that need to be public. Or if the file hosts multiple very small related classes. + +- The "main" class in a file should be located at the start of the file (right after the imports + section), so that it can be seen immediately upon opening the file. All other definitions, + including typedefs, helper classes and functions, should be moved below the main class. + +- If multiple public symbols are defined in a file, then they must be exported explicitly using + the `export ... show ...` statement. For example: + + ```dart + export 'src/effects/provider_interfaces.dart' + show + AnchorProvider, + AngleProvider, + PositionProvider, + ScaleProvider, + SizeProvider; + ``` + + +### Assertions + +Use `assert`s to detect contract violations, or pre-condition/post-condition failures. Sometimes, +however, using exceptions would be more appropriate. The following rules of thumb apply: + +- Use an assert with a clear error message to check for a condition that is in developers' control. + For example, when creating a component that takes an `opacity` level as an input, you should check + whether the value is in the range from 0 to 1. Consider also including the value itself into the + error message, to make it easier for the developer to debug the error: + + ```dart + assert(0 <= opacity && opacity <= 1, 'The opacity value must be from 0 to 1: $opacity'); + ``` + + Always use asserts as early as possible to detect possible violations. For example, check the + validity of `opacity` in the constructor/setter, instead of in the render function. + + When adding such an assert, also include a test that checks that the assert triggers. This test + would verify that the component does not accept invalid input, and that the error message is what + you expect it to be. + +- Use an assert without an error message to check for a condition that cannot be triggered by the + developer through any means known to you. If such an assert does trigger, it would indicate a bug + in the Flame framework. + + Such asserts serve as "mini-tests" directly in the code, and protect against future refactorings + that could create an erroneous internal state. It should not be possible to write a test that + would deliberately trigger such an assert. + +- Use an explicit if-check with an exception to test for a condition that may be outside of the + developer's control (i.e. it may depend on the environment or on user's input). When deciding + whether to use an assert or exception, consider the following question: is it possible for the + error condition to occur in production even after the developer has done extensive testing on + their side? + + +### Class structure + +- Consider putting all class constructors at the top of the class. This makes it much easier to see + how the class ought to be used. + +- Try to make as much of your class' API private as possible, do not expose members "just in case". + This makes it much easier to modify/refactor the class later without it being a breaking change. + + Remember to document all your public members! Documenting things is harder than it looks, and one + way to avoid the burden of documentation is to make as many variables private as possible. + +- If a class exposes a `List` or `Vector2` property -- it is **NOT** an invitation to modify + them at will! Consider such properties as read-only, unless the documentation explicitly says that + they are allowed to be modified. + +- When a class becomes sufficiently big, consider adding *regions* inside it, which help with code + navigation and collapsing (note the lack of space after `//`): + + ```dart + //#region Region description + ... + //#endregion + ``` + +- If a class has a private member that needs to be exposed via a getter/setter, prefer the following + code structure: + + ```dart + class MyClass { + MyClass(); + + ... + int _variable; + ... + + /// Docs for both the getter and the setter. + int get variable => _variable; + set variable(int value) { + assert(value >= 0, 'variable must be non-negative: $value'); + _variable = value; + } + } + ``` + + This would gather all private variables in a single block near the top of the class, allowing one + to quickly see what data the class has. + + +## Documentation + +- Use dartdocs `///` to explain the meaning/purpose of a class, method, or a variable. + +- Use regular comments `//` to explain implementation details of a particular code fragment. That + is, these comments explain HOW something works. + +- Use markdown documentation in `doc/` folder to give the high-level overview of the functionality, + and especially how it fits into the overall Flame framework. + + +### Dartdocs + +- Check the [Flutter Documentation Guide] -- it contains lots of great advice on writing good + documentation. + - However, disregard the advice about writing in a passive voice. + +- Class documentation should ideally start with the class name itself, and follow a pattern such as: + + ```dart + /// [MyClass] is ... + /// [MyClass] serves as ... + /// [MyClass] does the following ... + ``` + + The reason for such convention is that often the documentation for a class becomes sufficiently + long, and it may not be immediately apparent when looking at the top of the doc what exactly is + being documented there. + +- Method documentation should start with a verb in the present simple tense, with the method name + as an implicit subject. Add a paragraph break after the first sentence. Try to think about what + could be unclear to the users of the method; and mention any pre- and post-conditions. + For example: + + ```dart + /// Adds a new [child] into the container, and becomes the owner of that + /// child. + /// + /// The child will be disposed of when this container is destroyed. + /// It is an error to try to add a child that already belongs to another + /// container. + void addChild(T child) { ... } + ``` + + Avoid stating the obvious (or at least only the obvious). + +- Constructor documentation may follow either the style of a method (i.e. "Creates ...", + "Constructs ..."), or of the class but omitting the name of the class (i.e. "Rectangular-shaped + component"). Constructor documentation may be omitted if (1) it's the main constructor of the + class, and (2) all the parameters are obvious and coincide with the public members of the class. + + **Do not** use macros to copy the class documentation into the constructor's dartdoc. Generally, + the class documentation answers the question "what the class is", whereas the constructor docs + answer "how it will be constructed". + + +### Main docs + +This refers to the docs on the main Flame Documentation website, the one you're reading right now. +The main documentation site serves as a place where people go to learn about various functionality +available in Flame. If you're adding a new class, then it must be documented both at the dartdocs +level, and on the main docs site. The latter serves the purposes of discoverability of your class. +Without the docs site, your class might never be used (or at least used less than it could have +been), because the developers would simply not know about it. + +When adding the documentation to the main docs site, consider also including an example directly +into the docs. This will make readers more excited about trying this new functionality. + +Check the [Documentation] manual about how to work with the docs site. + +The following style rules generally apply when writing documentation: + +- Maximum line length of 100 characters; +- Prefer to define external links at the bottom of the document, so as to make reading the plain + text of the document easier; +- Separate headers from the preceding content with 2 blank lines -- this makes it easier to see the + sections within the plain text. +- Lists should start at the beginning of the line and sublists should be indented with 2 spaces. + + +[effective dart]: https://dart.dev/guides/language/effective-dart +[flutter documentation guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#user-content-documentation-dartdocs-javadocs-etc +[documentation]: documentation.md diff --git a/docs/1.18.0/_sources/development/testing_guide.md.txt b/docs/1.18.0/_sources/development/testing_guide.md.txt new file mode 100644 index 000000000..d9b1a292a --- /dev/null +++ b/docs/1.18.0/_sources/development/testing_guide.md.txt @@ -0,0 +1,176 @@ +# Writing tests + +- All new functionality must be tested, if at all possible. When fixing a bug, tests must be added + to ensure that this bug would not reappear in the future. + +- Run `melos run coverage` to execute all tests in the "coverage" mode. The results will be saved + in the `coverage/index.html` file, which can be opened in a browser. Try to achieve 100% coverage + for any new functionality added. + +- Every source file should have a corresponding test file, with the `_test` suffix. For example, + if you're making a `SpookyEffect` and the source file is `src/effects/spooky_effect.dart`, then + the test file should be `test/effects/spooky_effect_test.dart` mirroring the source directory. + +- The test file should contain a `main()` function with a single `group()` whose name matches the + name of the class being tested. If the source file contains multiple public classes, then each of + them should have its own group. For example: + + ```dart + void main() { + group('SpookyEffect', () { + // tests here + }); + } + ``` + +- For a larger class, multiple groups can be created inside the top-level group, allowing to + navigate the test suite easier. The names of the nested groups should be capitalized. + +- The names of the individual tests should normally start with a lowercase. + +- Often, you would need to define multiple helper classes to run the tests. Such classes should be + private (start with an underscore), and placed at the end of the file. The reason for this is that + whenever some test breaks, the first thing one needs to do is to go into the test file and run all + the tests. Having the `main()` function at the top of the file makes this process much easier. + + +## Types of tests + + +### Simple tests + +```dart +test('the name of the test', () { + expect(...); +}); +``` + +This is the simplest kind of test available, and also the fastest. Use these tests for checking +some classes/methods that can function in isolation from the rest of the Flame framework. + + +### FlameGame tests + +It is very common to want to have a `FlameGame` instance inside a test, so that you can add some +components to it and verify various behaviors. The following approach is recommended: + +```dart +testWithFlameGame('the name of the test', (game) async { + game.add(...); + await game.ready(); + + expect(...); +}); +``` + +Here the `game` instance that is passed to the test body is a fully initialized game that behaves +as if it was mounted to a `GameWidget`. The `game.ready()` method waits until all the scheduled +components are loaded and mounted to the component tree. + +The time within the `game` can be advanced with `game.update(dt)`. + +If you need to have a custom game inside this test (say, a game with some mixin), then use + +```dart +testWithGame<_MyGame>( + 'the name of the test', + _MyGame.new, + (game) async { + // test body... + }, +); +``` + + +### Widget tests + +Sometimes having a "naked" `FlameGame` is insufficient, and you want to have access to the Flutter +infrastructure as well. That is, to have a game mounted into a real `GameWidget` embedded into an +actual Flutter framework. In such cases, use + +```dart +testWidgets('test name', (tester) async { + final game = _MyGame(); + await tester.pumpWidget(GameWidget(game: game)); + await tester.pump(); + await tester.pump(); + + // At this point the game is fully initialized, and you can run your checks + // against it. + expect(...); + + // Equivalent to game.update(0) + await tester.pump(); + + // Advances in-game time by 20 milliseconds + await tester.pump(const Duration(milliseconds: 20)); +}); +``` + +There are some additional methods available on the `tester` controller, for example in order to +simulate taps, or drags, or key presses. + + +### Golden tests + +These tests verify that things render as intended. The process of creating a golden test is +simple: + +1. Write the test, using the following template: + + ```dart + testGolden( + 'the name of the test', + (game) async { + // Set up the game by adding the necessary components + // You can add `expect()` checks here too, if you want to + }, + size: Vector2(300, 200), + goldenFile: '.../_goldens/my_test_file.png', + ); + ``` + + Here the `size` parameter determines the size of the game canvas and of the output image. The + `goldenFile` parameter is the name of the file where you want to store the "golden" results. This + should be a relative path to the `test/_goldens` directory, starting from your test file. + +2. Run + + ```shell + flutter test --update-goldens + ``` + + this would create the golden file for the first time. Open the file to verify that it renders + exactly as you intended. If not, then delete the file and go back to step 1. + +3. Subsequent runs of `flutter test` will check whether the output of the golden test matches the + saved golden file. If not, Flutter will save the image-diff files into the `failures/` directory + where your test is located. + +```{note} +Avoid using text in your golden tests -- it does not render reliably across +different platforms, due to font discrepancies and differences in +anti-aliasing algorithms. +``` + + +### Random tests + +These are the tests that use a random number generator in order to construct a randomized input and +then check its correctness. Use as follows: + +```dart +testRandom('test name', (Random random) { + // Use [random] to generate random input +}); +``` + +You can add `repeatCount: 1000` parameter to run this test the specified number of times, each one +with a different seed. It is useful to run a high `repeatCount` when developing the test, to ensure +that it doesn't break. However, when submitting the test to the main repository, avoid repeatCounts +higher than 10. + +If the test breaks at some particular seed, then that seed will be shown in the test output. Add it +as the `seed: NNN` parameter to your test, and you'll be able to run it for the same seed as long +as you need until the test is fixed. Do not leave the `seed:` parameter when submitting your code, +as it defeats the purpose of having the test randomized. diff --git a/docs/1.18.0/_sources/flame/camera_component.md.txt b/docs/1.18.0/_sources/flame/camera_component.md.txt new file mode 100644 index 000000000..c5b6c3150 --- /dev/null +++ b/docs/1.18.0/_sources/flame/camera_component.md.txt @@ -0,0 +1,254 @@ +# Camera component + +Camera-as-a-component is the new way of structuring a game, an approach that +allows more flexibility in placing the camera, or even having more than one +camera simultaneously. + +In order to understand how this approach works, imagine that your game world is +an entity that exists *somewhere* independently from your application. Imagine +that your game is merely a window through which you can look into that world. +That you can close that window at any moment, and the game world would still be +there. Or, on the contrary, you can open multiple windows that all look at the +same world (or different worlds) at the same time. + +With this mindset, we can now understand how camera-as-a-component works. + +First, there is the [World](#world) class, which contains all components that are +inside your game world. The `World` component can be mounted anywhere, for +example at the root of your game class, like the built-in `World` is. + +Then, a [CameraComponent](#cameracomponent) class that "looks at" the [World](#world). The +`CameraComponent` has a [Viewport](#viewport) and a [Viewfinder](#viewfinder) inside, allowing +both the flexibility of rendering the world at any place on the screen, and +also control the viewing location and angle. The `CameraComponent` also +contains a [backdrop](#backdrop) component which is statically rendered below the +world. + + +## World + +This component should be used to host all other components that comprise your +game world. The main property of the `World` class is that it does not render +through traditional means -- instead it is rendered by one or more +[CameraComponent](#cameracomponent)s to "look at" the world. In the `FlameGame` class there is +one `World` called `world` which is added by default and paired together with +the default `CameraComponent` called `camera`. + +A game can have multiple `World` instances that can be rendered either at the +same time, or at different times. For example, if you have two worlds A and B +and a single camera, then switching that camera's target from A to B will +instantaneously switch the view to world B without having to unmount A and +then mount B. + +Just like with most `Component`s, children can be added to `World` by using the +`children` argument in its constructor, or by using the `add` or `addAll` +methods. + +For many games you want to extend the world and create your logic in there, +such a game structure could look like this: + +```dart +void main() { + runApp(GameWidget(FlameGame(world: MyWorld()))); +} + +class MyWorld extends World { + @override + Future onLoad() async { + // Load all the assets that are needed in this world + // and add components etc. + } +} +``` + + +## CameraComponent + +This is a component through which a `World` is rendered. It requires a +reference to a `World` instance during construction; however later the target +world can be replaced with another one. Multiple cameras can observe the same +world at the same time. + +There is a default `CameraComponent` called `camera` on the `FlameGame` class +which is paired together with the default `world`, so you don't need to create +or add your own `CameraComponent` if your game doesn't need to. + +A `CameraComponent` has two other components inside: a [Viewport](#viewport) and a +[Viewfinder](#viewfinder). Unlike the `World` object, the camera owns the viewport and +the viewfinder, which means those components are children of the camera. + +There is also a static property `CameraComponent.currentCamera` which is not +null only during the rendering stage, and it returns the camera object that +currently performs rendering. This is needed only for certain advanced use +cases where the rendering of a component depends on the camera settings. For +example, some components may decide to skip rendering themselves and their +children if they are outside of the camera's viewport. + +The `FlameGame` class has a `camera` field in its constructor, so you can set +what type of default camera that you want like this for example: + +```dart +void main() { + runApp( + GameWidget( + FlameGame( + camera: CameraComponent.withFixedResolution(width: 800, height: 600), + ), + ), + ); +} +``` + + +### CameraComponent.withFixedResolution() + +This factory constructor will let you pretend that the user's device has a fixed resolution of your +choice. For example: + +```dart +final camera = CameraComponent.withFixedResolution( + world: myWorldComponent, + width: 800, + height: 600, +); +``` + +This will create a camera with a viewport centered in the middle of the screen, taking as much +space as possible while still maintaining the 800:600 aspect ratio, and showing a game world region +of size 800 x 600. + +A "fixed resolution" is very simple to work with, but it will underutilize the user's available +screen space, unless their device happens to have the same pixel ratio as your chosen dimensions. + + +## Viewport + +The `Viewport` is a window through which the `World` is seen. That window +has a certain size, shape, and position on the screen. There are multiple kinds +of viewports available, and you can always implement your own. + +The `Viewport` is a component, which means you can add other components to it. +These children components will be affected by the viewport's position, but not +by its clip mask. Thus, if a viewport is a "window" into the game world, then +its children are things that you can put on top of the window. + +Adding elements to the viewport is a convenient way to implement "HUD" +components. + +The following viewports are available: + +- `MaxViewport` (default) -- this viewport expands to the maximum size allowed + by the game, i.e. it will be equal to the size of the game canvas. +- `FixedResolutionViewport` -- keeps the resolution and aspect ratio fixed, with black bars on the + sides if it doesn't match the aspect ratio. +- `FixedSizeViewport` -- a simple rectangular viewport with predefined size. +- `FixedAspectRatioViewport` -- a rectangular viewport which expands to fit + into the game canvas, but preserving its aspect ratio. +- `CircularViewport` -- a viewport in the shape of a circle, fixed size. + + +If you add children to the `Viewport` they will appear as static HUDs in front of the world. + + +## Viewfinder + +This part of the camera is responsible for knowing which location in the +underlying game world we are currently looking at. The `Viewfinder` also +controls the zoom level, and the rotation angle of the view. + +The `anchor` property of the viewfinder allows you to designate which point +inside the viewport serves as a "logical center" of the camera. For example, +in side-scrolling action games it is common to have the camera focused on the +main character who is displayed not in the center of the screen but closer to +the lower-left corner. This off-center position would be the "logical center" +of the camera, controlled by the viewfinder's `anchor`. + +If you add children to the `Viewfinder` they will appear will appear in front +of the world, but behind the viewport and with the same transformations as are +applied to the world, so these components are not static. + +You can also add behavioral components as children to the viewfinder, for +example [effects](effects.md) or other controllers. If you for example would add a +`ScaleEffect` you would be able to achieve a smooth zoom in your game. + + +## Backdrop + +To add static components behind the world you can add them to the `backdrop` +component, or replace the `backdrop` component. This is for example useful if +you want to have a static `ParallaxComponent` beneath a world that you can move +around it. + +Example: + +```dart +camera.backdrop.add(MyStaticBackground()); +``` + +or + +```dart +camera.backdrop = MyStaticBackground(); +``` + + +## Camera controls + +There are several ways to modify camera's settings at runtime: + + 1. Do it manually. You can always override the `CameraComponent.update()` + method (or the same method on the viewfinder or viewport) and within it + change the viewfinder's position or zoom as you see fit. This approach may + be viable in some circumstances, but in general it is not recommended. + + 2. Apply effects and/or behaviors to the camera's `Viewfinder` or `Viewport`. + The effects and behaviors are special kinds of components whose purpose is + to modify over time some property of a component that they attach to. + + 3. Use special camera functions such as `follow()`, `moveBy()` and `moveTo()`. + Under the hood, this approach uses the same effects/behaviors as in (2). + +Camera has several methods for controlling its behavior: + +- `Camera.follow()` will force the camera to follow the provided target. + Optionally you can limit the maximum speed of movement of the camera, or + allow it to move horizontally/vertically only. + +- `Camera.stop()` will undo the effect of the previous call and stop the camera + at its current position. + +- `Camera.moveBy()` can be used to move the camera by the specified offset. + If the camera was already following another component or moving towards, + those behaviors would be automatically cancelled. + +- `Camera.moveTo()` can be used to move the camera to the designated point on + the world map. If the camera was already following another component or + moving towards another point, those behaviors would be automatically + cancelled. + +- `Camera.setBounds()` allows you to add limits to where the camera is allowed to go. These limits + are in the form of a `Shape`, which is commonly a rectangle, but can also be any other shape. + + +### visibleWorldRect + +The camera exposes property `visibleWorldRect`, which is a rect that describes the world's region +which is currently visible through the camera. This region can be used in order to avoid rendering +components that are out of view, or updating objects that are far away from the player less +frequently. + +The `visibleWorldRect` is a cached property, and it updates automatically whenever the camera +moves or the viewport changes its size. + + +### Check if a component is visible from the camera point of view + +The `CameraComponent` has a method called `canSee` which can be used to check +if a component is visible from the camera point of view. +This is useful for example to cull components that are not in view. + +```dart +if (!camera.canSee(component)) { + component.removeFromParent(); // Cull the component +} +``` diff --git a/docs/1.18.0/_sources/flame/collision_detection.md.txt b/docs/1.18.0/_sources/flame/collision_detection.md.txt new file mode 100644 index 000000000..e22874fee --- /dev/null +++ b/docs/1.18.0/_sources/flame/collision_detection.md.txt @@ -0,0 +1,636 @@ +# Collision Detection + +Collision detection is needed in most games to detect and act upon two components intersecting each +other. For example an arrow hitting an enemy or the player picking up a coin. + +In most collision detection systems you use something called hitboxes to create more precise +bounding boxes of your components. In Flame the hitboxes are areas of the component that can react +to collisions (and make [gesture input](inputs/gesture_input.md#gesturehitboxes)) more accurate. + +The collision detection system supports three different types of shapes that you can build hitboxes +from, these shapes are Polygon, Rectangle and Circle. Multiple hitbox can be added +to a component to form the area which can be used to either detect collisions +or whether it contains a point or not, +the latter is very useful for accurate gesture detection. The collision detection does not handle +what should happen when two hitboxes collide, so it is up to the user to implement what will happen +when for example two `PositionComponent`s have intersecting hitboxes. + +Do note that the built-in collision detection system does not take collisions between two hitboxes +that overshoot each other into account, this could happen when they either move very fast or +`update` being called with a large delta time (for example if your app is not in the foreground). +This behavior is called tunneling, if you want to read more about it. + +Also note that the collision detection system has a limitation that makes it not work properly if +you have certain types of combinations of flips and scales of the ancestors of the hitboxes. + + +## Mixins + + +### HasCollisionDetection + +If you want to use collision detection in your game you have to add the `HasCollisionDetection` +mixin to your game so that it can keep track of the components that can collide. + +Example: + +```dart +class MyGame extends FlameGame with HasCollisionDetection { + // ... +} +``` + +Now when you add `ShapeHitbox`s to components that are then added to the game, they will +automatically be checked for collisions. + +You can also add `HasCollisionDetection` directly to another `Component` instead +of the `FlameGame`, +for example to the `World` that is used for the `CameraComponent`. +If that is done, hitboxes that are added in that component's tree will only be compared to other +hitboxes in that subtree, which makes it possible to have several worlds with collision detection +within one `FlameGame`. + +Example: + +```dart +class CollisionDetectionWorld extends World with HasCollisionDetection {} +``` + +```{note} +Hitboxes will only be connected to one collision detection system and that is +the closest parent that has the `HasCollisionDetection` mixin. +``` + + +### CollisionCallbacks + +To react to a collision you should add the `CollisionCallbacks` mixin to your component. +Example: + + +```{flutter-app} +:sources: ../flame/examples +:page: collision_detection +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +class MyCollidable extends PositionComponent with CollisionCallbacks { + @override + void onCollision(Set points, PositionComponent other) { + if (other is ScreenHitbox) { + //... + } else if (other is YourOtherComponent) { + //... + } + } + + @override + void onCollisionEnd(PositionComponent other) { + if (other is ScreenHitbox) { + //... + } else if (other is YourOtherComponent) { + //... + } + } +} +``` + +In this example we use Dart's `is` keyword to check what kind of component we collided with. +The set of points is where the edges of the hitboxes intersect. + +Note that the `onCollision` method will be called on both `PositionComponent`s if they have both +implemented the `onCollision` method, and also on both hitboxes. The same goes for the +`onCollisionStart` and `onCollisionEnd` methods, which are called when two components and hitboxes +starts or stops colliding with each other. + +When a `PositionComponent` (and hitbox) starts to collide with another `PositionComponent` +both `onCollisionStart` and `onCollision` are called, so if you don't need to do something specific +when a collision starts you only need to override `onCollision`, and vice versa. + +If you want to check collisions with the screen edges, as we do in the example above, you can use +the predefined [ScreenHitbox](#screenhitbox) class. + +By default all hitboxes are hollow, this means that one hitbox can be fully enclosed by another +hitbox without triggering a collision. If you want to set your hitboxes to be solid you can set +`isSolid = true`. A hollow hitbox inside of a solid hitbox will trigger a collision, but not the +other way around. If there are no intersections with the edges on a solid hitbox the center +position is instead returned. + + +### Collision order + +If a `Hitbox` collides with more than one other `Hitbox` within a given time step, then +the `onCollision` callbacks will be called in an essentially random order. In some cases this can +be a problem, such as in a bouncing ball game where the trajectory of the ball can differ depending +on which other object was hit first. To help resolve this the `collisionsCompletedNotifier` +listener can be used - this triggers at the end of the collision detection process. + +An example of how this might be used is to add a local variable in your `PositionComponent` to save +the other components with which it's colliding: +`List collisionComponents = [];`. The `onCollision` callback is then used to +save all the other `PositionComponent`s to this list: + +```dart +@override +void onCollision(Set intersectionPoints, PositionComponent other) { + collisionComponents.add(other); + super.onCollision(intersectionPoints, other); +} + +``` + +Finally, one adds a listener to the `onLoad` method of the `PositionComponent` to call a function +which will resolve how the collisions should be dealt with: + +```dart +(game as HasCollisionDetection) + .collisionDetection + .collisionsCompletedNotifier + .addListener(() { + resolveCollisions(); +}); +``` + +The list `collisionComponents` would need to be cleared in each call to `update`. + + +## ShapeHitbox + +The `ShapeHitbox`s are normal components, so you add them to the component that you want to add +hitboxes to just like any other component: + +```dart +class MyComponent extends PositionComponent { + @override + void onLoad() { + add(RectangleHitbox()); + } +} +``` + +If you don't add any arguments to the hitbox, like above, the hitbox will try to fill its parent as +much as possible. Except for having the hitboxes trying to fill their parents, +there are two ways to +initiate hitboxes and it is with the normal constructor where you define the hitbox by itself, with +a size and a position etc. The other way is to use the `relative` constructor which defines the +hitbox in relation to the size of its intended parent. + + +In some specific cases you might want to handle collisions only between hitboxes, without +propagating `onCollision*` events to the hitbox's parent component. For example, a vehicle could +have a body hitbox to control collisions and side hitboxes to check the possibility to turn left +or right. +So, colliding with a body hitbox means colliding with the component itself, whereas colliding with +a side hitbox does not mean a real collision and should not be propagated to hitbox's parent. +For this case you can set `triggersParentCollision` variable to `false`: + +```dart +class MyComponent extends PositionComponent { + + late final MySpecialHitbox utilityHitbox; + + @override + void onLoad() { + utilityHitbox = MySpecialHitbox(); + add(utilityHitbox); + } + + void update(double dt) { + if (utilityHitbox.isColliding) { + // do some specific things if hitbox is colliding + } + } +// component's onCollision* functions, ignoring MySpecialHitbox collisions. +} + +class MySpecialHitbox extends RectangleHitbox { + MySpecialHitbox() { + triggersParentCollision = false; + } + +// hitbox specific onCollision* functions + +} +``` + +You can read more about how the different shapes are defined in the +[ShapeComponents](components.md#shapecomponents) section. + +Remember that you can add as many `ShapeHitbox`s as you want to your `PositionComponent` to make up +more complex areas. For example a snowman with a hat could be represented by three `CircleHitbox`s +and two `RectangleHitbox`s as its hat. + +A hitbox can be used either for collision detection or for making gesture detection more accurate +on top of components, see more regarding the latter in the section about the +[GestureHitboxes](inputs/gesture_input.md#gesturehitboxes) mixin. + + +### CollisionType + +The hitboxes have a field called `collisionType` which defines when a hitbox should collide with +another. Usually you want to set as many hitboxes as possible to `CollisionType.passive` to make +the collision detection more performant. By default the `CollisionType` is `active`. + +The `CollisionType` enum contains the following values: + +- `active` collides with other `Hitbox`es of type active or passive +- `passive` collides with other `Hitbox`es of type active +- `inactive` will not collide with any other `Hitbox`es + +So if you have hitboxes that you don't need to check collisions against each other you can mark +them as passive by setting `collisionType: CollisionType.passive` in the constructor, +this could for example be ground components or maybe your enemies don't need +to check collisions between each other, then they could be marked as `passive` too. + +Imagine a game where there are a lot of bullets, that can't collide with each other, flying towards +the player, then the player would be set to `CollisionType.active` and the bullets would be set to +`CollisionType.passive`. + +Then we have the `inactive` type which simply doesn't get checked at all +in the collision detection. +This could be used for example if you have components outside of the screen that you don't care +about at the moment but that might later come back in to view so they are not completely removed +from the game. + +These are just examples of how you could use these types, there will be a lot more use cases for +them so don't doubt to use them even if your use case isn't listed here. + + +### PolygonHitbox + +It should be noted that if you want to use collision detection or `containsPoint` on the `Polygon`, +the polygon needs to be convex. So always use convex polygons or you will most likely run into +problems if you don't really know what you are doing. +It should also be noted that you should always define the vertices in your polygon +in a counter-clockwise order. + +The other hitbox shapes don't have any mandatory constructor, that is because they can have a +default calculated from the size of the collidable that they are attached to, but since a +polygon can be made in an infinite number of ways inside of a bounding box you have to add the +definition in the constructor for this shape. + +The `PolygonHitbox` has the same constructors as the [](components.md#polygoncomponent), see that +section for documentation regarding those. + + +### RectangleHitbox + +The `RectangleHitbox` has the same constructors as the [](components.md#rectanglecomponent), see +that section for documentation regarding those. + + +### CircleHitbox + +The `CircleHitbox` has the same constructors as the [](components.md#circlecomponent), see that +section for documentation regarding those. + + +## ScreenHitbox + +`ScreenHitbox` is a component which represents the edges of your viewport/screen. If you add a +`ScreenHitbox` to your game your other components with hitboxes will be notified when they +collide with the edges. It doesn't take any arguments, it only depends on the `size` of the game +that it is added to. To add it you can just do `add(ScreenHitbox())` in your game, if you don't +want the `ScreenHitbox` itself to be notified when something collides with it. Since +`ScreenHitbox` has the `CollisionCallbacks` mixin you can add your own `onCollisionCallback`, +`onStartCollisionCallback` and `onEndCollisionCallback` functions to that object if needed. + + +## CompositeHitbox + +In the `CompositeHitbox` you can add multiple hitboxes so that +they emulate being one joined hitbox. + +If you want to form a hat for example you might want +to use two [](#rectanglehitbox)s to follow that +hat's edges properly, then you can add those hitboxes to an instance of this class and react to +collisions to the whole hat, instead of for just each hitbox separately. + + +## Broad phase + +If your game field isn't huge and does not have a lot of collidable components - you don't have to +worry about the broad phase system that is used, so if the standard implementation is performant +enough for you, you probably don't have to read this section. + +A broad phase is the first step of collision detection where potential collisions are calculated. +Calculating these potential collisions is faster than to checking the intersections exactly, +and it removes the need to check all hitboxes against each other and +therefore avoiding O(n²). + +The broad phase produces a set of potential collisions (a set of +`CollisionProspect`s). This set is then used to check the exact intersections between +hitboxes (sometimes called "narrow phase"). + +By default, Flame's collision detection is using a sweep and prune broadphase step. If your game +requires another type of broadphase you can write your own broadphase by extending `Broadphase` and +manually setting the collision detection system that should be used. + +For example, if you have implemented a broadphase built on a magic algorithm +instead of the standard sweep and prune, then you would do the following: + +```dart +class MyGame extends FlameGame with HasCollisionDetection { + MyGame() : super() { + collisionDetection = + StandardCollisionDetection(broadphase: MagicAlgorithmBroadphase()); + } +} +``` + + +## Quad Tree broad phase + +If your game field is large and the game contains a lot of collidable +components (more than a hundred), standard sweep and prune can +become inefficient. If it does, you can try to use the quad tree broad phase. + +To do this, add the `HasQuadTreeCollisionDetection` mixin to your game instead of +`HasCollisionDetection` and call the `initializeCollisionDetection` function on game load: + +```dart +class MyGame extends FlameGame with HasQuadTreeCollisionDetection { + @override + void onLoad() { + initializeCollisionDetection( + mapDimensions: const Rect.fromLTWH(0, 0, mapWidth, mapHeight), + minimumDistance: 10, + ); + } +} +``` + +When calling `initializeCollisionDetection` you should pass it the correct map dimensions, to make +the quad tree algorithm to work properly. There are also additional parameters to make the system +more efficient: + +- `minimumDistance`: minimum distance between objects to consider them as possibly colliding. + If `null` - the check is disabled, it is default behavior +- `maxObjects`: maximum objects count in one quadrant. Default to 25. +- `maxDepth`: maximum nesting levels inside quadrant. Default to 10 + +If you use the quad tree system, you can make it even more efficient by implementing the +`onComponentTypeCheck` function of the `CollisionCallbacks` mixin in your components. +It is useful if you need to prevent collisions of items of different types. +The result of the calculation is cached so +you should not check any dynamic parameters here, the function is intended to be used as a pure +type checker: + +```dart +class Bullet extends PositionComponent with CollisionCallbacks { + + @override + bool onComponentTypeCheck(PositionComponent other) { + if (other is Player || other is Water) { + // do NOT collide with Player or Water + return false; + } + // Just return true if you're not interested in the parent's type check result. + // Or call super and you will be able to override the result with the parent's + // result. + return super.onComponentTypeCheck(other); + } + + @override + void onCollisionStart( + Set intersectionPoints, + PositionComponent other, + ) { + // Removes the component when it comes in contact with a Brick. + // Neither Player nor Water would be passed to this function + // because these classes are filtered out by [onComponentTypeCheck] + // in an earlier stage. + if (other is Brick) { + removeFromParent(); + } + super.onCollisionStart(intersectionPoints, other); + } +} +``` + +After intensive gameplay a map could become over-clusterized with a lot of empty quadrants. +Run `QuadTree.optimize()` to perform a cleanup of empty quadrants: + +```dart +class QuadTreeExample extends FlameGame + with HasQuadTreeCollisionDetection { + + /// A function called when intensive gameplay session is over + /// It also might be scheduled, but no need to run it on every update. + /// Use right interval depending on your game circumstances + onGameIdle() { + (collisionDetection as QuadTreeCollisionDetection) + .quadBroadphase + .tree + .optimize(); + } +} + +``` + +```{note} +Always experiment with different collision detection approaches +and check how they perform on your game. +It is not unheard of that `QuadTreeBroadphase` is significantly +_slower_ than the default. +Don't assume that the more sophisticated approach is always faster. +``` + + +## Ray casting and Ray tracing + +Ray casting and ray tracing are methods for sending out rays from a point in your game and being +able to see what these rays collide with and how they reflect after hitting something. + +For all of the following methods, if there are any hitboxes that you wish to ignore, +you can add the `ignoreHitboxes` argument which is a list of the hitboxes +that you wish to disregard for the call. +This can be quite useful for example if you are casting rays from within a hitbox, +which could be on your player or NPC; +or if you don't want a ray to bounce off a `ScreenHitbox`. + + +### Ray casting + +Ray casting is the operation of casting out one or more rays from a point and see if they hit +anything, in Flame's case, hitboxes. + +We provide two methods for doing so, `raycast` and `raycastAll`. The first one just casts out +a single ray and gets back a result with information about what and where the ray hit, and some +extra information like the distance, the normal and the reflection ray. +The second one, `raycastAll`, +works similarly but sends out multiple rays uniformly around the origin, or within an angle +centered at the origin. + +By default, `raycast` and `raycastAll` scan for the nearest hit irrespective of +how far it lies from the ray origin. +But in some use cases, it might be interesting to find hits only within a certain +range. For such cases, an optional `maxDistance` can be provided. + +To use the ray casting functionality you have to have the `HasCollisionDetection` mixin on your +game. After you have added that you can call `collisionDetection.raycast(...)` on your game class. + +Example: + +```{flutter-app} +:sources: ../flame/examples +:page: ray_cast +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +class MyGame extends FlameGame with HasCollisionDetection { + @override + void update(double dt) { + super.update(dt); + final ray = Ray2( + origin: Vector2(0, 100), + direction: Vector2(1, 0), + ); + final result = collisionDetection.raycast(ray); + } +} +``` + +In this example one can see that the `Ray2` class is being used, this class defines a ray from an +origin position and a direction (which are both defined by `Vector2`s). This particular ray starts +from `0, 100` and shoots a ray straight to the right. + +The result from this operation will either be `null` if the ray didn't hit anything, or a +`RaycastResult` which contains: + +- Which hitbox the ray hit +- The intersection point of the collision +- The reflection ray, i.e. how the ray would reflect on the hitbox that it hix +- The normal of the collision, i.e. a vector perpendicular to the face of the hitbox that it hits + +If you are concerned about performance you can pre create a `RaycastResult` object that you send in +to the method with the `out` argument, this will make it possible for the method to reuse this +object instead of creating a new one for each iteration. This can be good if you do a lot of +ray casting in your `update` methods. + + +#### raycastAll + +Sometimes you want to send out rays in all, or a limited range, of directions from an origin. This +can have a lot of applications, for example you could calculate the field of view of a player or +enemy, or it can also be used to create light sources. + +Example: + +```dart +class MyGame extends FlameGame with HasCollisionDetection { + @override + void update(double dt) { + super.update(dt); + final origin = Vector2(200, 200); + final result = collisionDetection.raycastAll( + origin, + numberOfRays: 100, + ); + } +} +``` + +In this example we would send out 100 rays from (200, 200) uniformly spread in all directions. + +If you want to limit the directions you can use the `startAngle` and the `sweepAngle` arguments. +Where the `startAngle` (counting from straight up) is where the rays will start and then the rays +will end at `startAngle + sweepAngle`. + +If you are concerned about performance you can re-use the `RaycastResult` objects that are created +by the function by sending them in as a list with the `out` argument. + + +### Ray tracing + +Ray tracing is similar to ray casting, but instead of just checking what the ray hits you can +continue to trace the ray and see what its reflection ray (the ray bouncing off the hitbox) will +hit and then what that casted reflection ray's reflection ray will hit and so on, until you decide +that you have traced the ray for long enough. If you imagine how a pool ball would bounce on a pool +table for example, that information could be retrieved with the help of ray tracing. + +Example: + +```{flutter-app} +:sources: ../flame/examples +:page: ray_trace +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +class MyGame extends FlameGame with HasCollisionDetection { + @override + void update(double dt) { + super.update(dt); + final ray = Ray2( + origin: Vector2(0, 100), + direction: Vector2(1, 1)..normalize() + ); + final results = collisionDetection.raytrace( + ray, + maxDepth: 100, + ); + for (final result in results) { + if (result.intersectionPoint.distanceTo(ray.origin) > 300) { + break; + } + } + } +} +``` + +In the example above we send out a ray from (0, 100) diagonally down to the right +and we say that we want it the bounce on at most 100 hitboxes, +it doesn't necessarily have to get 100 results since at +some point one of the reflection rays might not hit a hitbox and then the method is done. + +The method is lazy, which means that it will only do the calculations that you ask for, so you have +to loop through the iterable that it returns to get the results, or do `toList()` to directly +calculate all the results. + +In the for-loop it can be seen how this can be used, in that loop we check whether the current +reflection rays intersection point (where the previous ray hit the hitbox) is further away than 300 +pixels from the origin of the starting ray, and if it is we don't care about the rest +of the results (and then they don't have to be calculated either). + +If you are concerned about performance you can re-use the `RaycastResult` objects that are created +by the function by sending them in as a list with the `out` argument. + + +## Comparison to Forge2D + +If you want to have a full-blown physics engine in your game we recommend that you use +Forge2D by adding [flame_forge2d](https://github.com/flame-engine/flame_forge2d) as a dependency. +But if you have a simpler use-case and just want to check for collisions of components and improve +the accuracy of gestures, Flame's built-in collision detection will serve you very well. + +If you have the following needs you should at least consider to use +[Forge2D](https://github.com/flame-engine/forge2d): + +- Interacting realistic forces +- Particle systems that can interact with other bodies +- Joints between bodies + +It is a good idea to just use the Flame collision detection system if you on the other hand only +need some of the following things (since it is simpler to not involve Forge2D): + +- The ability to act on some of your components colliding +- The ability to act on your components colliding with the screen boundaries +- Complex shapes to act as a hitbox for your component so that gestures will be more accurate +- Hitboxes that can tell what part of a component that collided with something + + +## Examples + +- [Collidable AnimationComponent](https://examples.flame-engine.org/#/Collision_Detection_Collidable_AnimationComponent) +- [Circles](https://examples.flame-engine.org/#/Collision_Detection_Circles) +- [Multiple shapes](https://examples.flame-engine.org/#/Collision_Detection_Multiple_shapes) +- [More Examples](https://github.com/flame-engine/flame/tree/main/examples/lib/stories/collision_detection) diff --git a/docs/1.18.0/_sources/flame/components.md.txt b/docs/1.18.0/_sources/flame/components.md.txt new file mode 100644 index 000000000..643bfe0f9 --- /dev/null +++ b/docs/1.18.0/_sources/flame/components.md.txt @@ -0,0 +1,1422 @@ +# Components + +```{include} diagrams/component.md +``` + +This diagram might look intimidating, but don't worry, it is not as complex as it looks. + + +## Component + +All components inherit from the abstract class `Component` and all components can have other +`Component`s as children. This is the base of what we call the Flame Component System, or FCS for +short. + +Children can be added either with the `add(Component c)` method or directly in the constructor. + +Example: + +```dart +void main() { + final component1 = Component(children: [Component(), Component()]); + final component2 = Component(); + component2.add(Component()); + component2.addAll([Component(), Component()]); +} +``` + +The `Component()` here could of course be any subclass of `Component`. + +Every `Component` has a few methods that you can optionally implement, which are used by the +`FlameGame` class. + + +### Component lifecycle + +```{include} diagrams/component_life_cycle.md +``` + +The `onGameResize` method is called whenever the screen is resized, and also when this component +gets added into the component tree, before the `onMount`. + +The `onParentResize` method is similar: it is also called when the component is mounted into the +component tree, and also whenever the parent of the current component changes its size. + +The `onRemove` method can be overridden to run code before the component is removed from the game, +it is only run once even if the component is removed both by using the parents remove method and +the `Component` remove method. + +The `onLoad` method can be overridden to run asynchronous initialization code for the component, +like loading an image for example. This method is executed before `onGameResize` and +`onMount`. This method is guaranteed to execute only once during the lifetime of the component, so +you can think of it as an "asynchronous constructor". + +The `onMount` method runs every time when the component is mounted into a game tree. This means that +you should not initialize `late final` variables here, since this method might run several times +throughout the component's lifetime. This method will only run if the parent is already mounted. +If the parent is not mounted yet, then this method will wait in a queue (this will have no effect +on the rest of the game engine). + +The `onChildrenChanged` method can be overridden if it's needed to detect changes in a parent's +children. This method is called whenever a child is added to or removed from a parent (this includes +if a child is changing its parent). Its parameters contain the targeting child and the type of +change it went through (`added` or `removed`). + +A component lifecycle state can be checked by a series of getters: + +- `isLoaded`: Returns a bool with the current loaded state. +- `loaded`: Returns a future that will complete once the component has finished loading. +- `isMounted`: Returns a bool with the current mounted state. +- `mounted`: Returns a future that will complete once the component has finished mounting. +- `isRemoved`: Returns a bool with the current removed state. +- `removed`: Returns a future that will complete once the component has been removed. + + +### Priority + +In Flame every `Component` has the `int priority` property, which determines +that component's sorting order within its parent's children. This is sometimes referred to +as `z-index` in other languages and frameworks. The higher the `priority` is set to, the +closer the component will appear on the screen, since it will be rendered on top of any components +with lower priority that were rendered before it. + +If you add two components and set one of their priorities to 1 for example, then that component will +be rendered on top of the other component (if they overlap), because the default priority is 0. + +All components take in `priority` as a named argument, so if you know the priority that you want +your component at compile time, then you can pass it in to the constructor. + +Example: + +```dart +class MyGame extends FlameGame { + @override + void onLoad() { + final myComponent = PositionComponent(priority: 5); + add(myComponent); + } +} +``` + +To update the priority of a component you have to set it to a new value, like +`component.priority = 2`, and it will be updated in the current tick before the rendering stage. + +In the following example we first initialize the component with priority 1, and then when the +user taps the component we change its priority to 2: + +```dart +class MyComponent extends PositionComponent with TapCallbacks { + + MyComponent() : super(priority: 1); + + @override + void onTapDown(TapDownEvent event) { + priority = 2; + } +} +``` + + +### Composability of components + +Sometimes it is useful to wrap other components inside of your component. For example by grouping +visual components through a hierarchy. You can do this by adding child components to any component, +for example `PositionComponent`. + +When you have child components on a component every time the parent is updated and rendered, all the +children are rendered and updated with the same conditions. + +Example of usage, where visibility of two components are handled by a wrapper: + +```dart +class GameOverPanel extends PositionComponent { + bool visible = false; + final Image spriteImage; + + GameOverPanel(this.spriteImage); + + @override + void onLoad() { + final gameOverText = GameOverText(spriteImage); // GameOverText is a Component + final gameOverButton = GameOverButton(spriteImage); // GameOverRestart is a SpriteComponent + + add(gameOverText); + add(gameOverButton); + } + + @override + void render(Canvas canvas) { + if (visible) { + } // If not visible none of the children will be rendered + } +} +``` + +There are two methods for adding children components to your component. First, +you have methods `add()`, `addAll()`, and `addToParent()`, which can be used +at any time during the game. Traditionally, children will be created and added +from the component's `onLoad()` method, but it is also common to add new +children during the course of the game. + +The second method is to use the `children:` parameter in the component's +constructor. This approach more closely resembles the standard Flutter API: + +```dart +class MyGame extends FlameGame { + @override + void onLoad() { + add( + PositionComponent( + position: Vector2(30, 0), + children: [ + HighScoreDisplay(), + HitPointsDisplay(), + FpsComponent(), + ], + ), + ); + } +} +``` + +The two approaches can be combined freely: the children specified within the +constructor will be added first, and then any additional child components +after. + +Note that the children added via either methods are only guaranteed to be +available eventually: after they are loaded and mounted. We can only assure +that they will appear in the children list in the same order as they were +scheduled for addition. + + +### Access to the World from a Component + +If a component that has a `World` as an ancestor and requires access to that `World` object, one can +use the `HasWorldReference` mixin. + +Example: + +```dart +class MyComponent extends Component with HasWorldReference, + TapCallbacks { + @override + void onTapDown(TapDownEvent info) { + // world is of type MyWorld + world.add(AnotherComponent()); + } +} +``` + +If you try to access `world` from a component that doesn't have a `World` +ancestor of the correct type an assertion error will be thrown. + + +### Ensuring a component has a given parent + +When a component requires to be added to a specific parent type the +`ParentIsA` mixin can be used to enforce a strongly typed parent. + +Example: + +```dart +class MyComponent extends Component with ParentIsA { + @override + void onLoad() { + // parent is of type MyParentComponent + print(parent.myValue); + } +} +``` + +If you try to add `MyComponent` to a parent that is not `MyParentComponent`, +an assertion error will be thrown. + + +### Ensuring a component has a given ancestor + +When a component requires to have a specific ancestor type somewhere in the +component tree, `HasAncestor` mixin can be used to enforce that relationship. + +The mixin exposes the `ancestor` field that will be of the given type. + +Example: + +```dart +class MyComponent extends Component with HasAncestor { + @override + void onLoad() { + // ancestor is of type MyAncestorComponent. + print(ancestor.myValue); + } +} +``` + +If you try to add `MyComponent` to a tree that does not contain `MyAncestorComponent`, +an assertion error will be thrown. + + +### Component Keys + +Components can have an identification key that allows them to be retrieved from the component tree, from +any point of the tree. + +To register a component with a key, simply pass a key to the `key` argument on the component's +constructor: + +```dart +final myComponent = Component( + key: ComponentKey.named('player'), +); +``` + +Then, to retrieve it in a different point of the component tree: + +```dart +flameGame.findByKey(ComponentKey.named('player')); +``` + +There are two types of keys, `unique` and `named`. Unique keys are based on equality of the key +instance, meaning that: + +```dart +final key = ComponentKey.unique(); +final key2 = key; +print(key == key2); // true +print(key == ComponentKey.unique()); // false +``` + +Named ones are based on the name that it receives, so: + +```dart +final key1 = ComponentKey.named('player'); +final key2 = ComponentKey.named('player'); +print(key1 == key2); // true +``` + +When named keys are used, the `findByKeyName` helper can also be used to retrieve the component. + + +```dart +flameGame.findByKeyName('player'); +``` + + +### Querying child components + +The children that have been added to a component live in a `QueryableOrderedSet` called +`children`. To query for a specific type of components in the set, the `query()` function can be +used. By default `strictMode` is `false` in the children set, but if you set it to true, then the +queries will have to be registered with `children.register` before a query can be used. + +If you know in compile time that you later will run a query of a specific type it is recommended to +register the query, no matter if the `strictMode` is set to `true` or `false`, since there are some +performance benefits to gain from it. The `register` call is usually done in `onLoad`. + +Example: + +```dart +@override +void onLoad() { + children.register(); +} +``` + +In the example above a query is registered for `PositionComponent`s, and an example of how to query +the registered component type can be seen below. + +```dart +@override +void update(double dt) { + final allPositionComponents = children.query(); +} +``` + + +### Querying components at a specific point on the screen + +The method `componentsAtPoint()` allows you to check which components were rendered at some point +on the screen. The returned value is an iterable of components, but you can also obtain the +coordinates of the initial point in each component's local coordinate space by providing a writable +`List` as a second parameter. + +The iterable retrieves the components in the front-to-back order, i.e. first the components in the +front, followed by the components in the back. + +This method can only return components that implement the method `containsLocalPoint()`. The +`PositionComponent` (which is the base class for many components in Flame) provides such an +implementation. However, if you're defining a custom class that derives from `Component`, you'd have +to implement the `containsLocalPoint()` method yourself. + +Here is an example of how `componentsAtPoint()` can be used: + +```dart +void onDragUpdate(DragUpdateInfo info) { + game.componentsAtPoint(info.widget).forEach((component) { + if (component is DropTarget) { + component.highlight(); + } + }); +} +``` + + +### PositionType + +```{note} +If you are using the `CameraComponent` you should not use `PositionType`, but +instead adding your components directly to the viewport for example if you +want to use them as a HUD. +``` + +If you want to create a HUD (Head-up display) or another component that isn't positioned in relation +to the game coordinates, you can change the `PositionType` of the component. +The default `PositionType` is `positionType = PositionType.game` and that can be changed to +either `PositionType.viewport` or `PositionType.widget` depending on how you want to position +the component. + +- `PositionType.game` (Default) - Respects camera and viewport. +- `PositionType.viewport` - Respects viewport only (ignores camera). +- `PositionType.widget` - Position in relation to the coordinate system of the Flutter game + widget (i.e. the raw canvas). + +Most of your components will probably be positioned according to `PositionType.game`, since you +want them to respect the `Camera` and the `Viewport`. But quite often you want for example buttons +and text to always show on the screen, no matter if you move the camera, then you want to use +`PositionType.viewport`. In some rare cases you want to use `PositionType.widget` to position +your widgets, when you don't want the component to respect the camera nor the viewport; this could +for example be for controls or joysticks that would not be ergonomic to use if they had to stay +within the viewport. + +Do note that this setting is only respected if the component is added directly to the root +`FlameGame` and not as a child component of another component. + + +### Visibility of components + +The recommended way to hide or show a component is usually to add or remove it from the tree +using the `add` and `remove` methods. + +However, adding and removing components from the tree will trigger lifecycle steps for that +component (such as calling `onRemove` and `onMount`). It is also an asynchronous process and care +needs to be taken to ensure the component has finished removing before it is added again if you +are removing and adding a component in quick succession. + +```dart +/// Example of handling the removal and adding of a child component +/// in quick succession +void show() async { + // Need to await the [removed] future first, just in case the + // component is still in the process of being removed. + await myChildComponent.removed; + add(myChildComponent); +} + +void hide() { + remove(myChildComponent); +} +``` + +These behaviors are not always desirable. + +An alternative method to show and hide a component is to use the `HasVisibility` mixin, which may +be used on any class that inherits from `Component`. This mixin introduces the `isVisible` property. +Simply set `isVisible` to `false` to hide the component, and `true` to show it again, without +removing it from the tree. This affects the visibility of the component and all it's descendants +(children). + +```dart +/// Example that implements HasVisibility +class MyComponent extends PositionComponent with HasVisibility {} + +/// Usage of the isVisible property +final myComponent = MyComponent(); +add(myComponent); + +myComponent.isVisible = false; +``` + +The mixin only affects whether the component is rendered, and will not affect other behaviors. + +```{note} +Important! Even when the component is not visible, it is still in the tree and +will continue to receive calls to 'update' and all other lifecycle events. It +will still respond to input events, and will still interact with other +components, such as collision detection for example. +``` + +The mixin works by preventing the `renderTree` method, therefore if `renderTree` is being +overridden, a manual check for `isVisible` should be included to retain this functionality. + +```dart +class MyComponent extends PositionComponent with HasVisibility { + + @override + void renderTree(Canvas canvas) { + // Check for visibility + if (isVisible) { + // Custom code here + + // Continue rendering the tree + super.renderTree(canvas); + } + } +} +``` + + +## PositionComponent + +This class represents a positioned object on the screen, being a floating rectangle, a rotating +sprite, or anything else with position and size. It can also represent a group of positioned +components if children are added to it. + +The base of the `PositionComponent` is that it has a `position`, `size`, `scale`, `angle` and +`anchor` which transforms how the component is rendered. + + +### Position + +The `position` is just a `Vector2` which represents the position of the component's anchor in +relation to its parent; if the parent is a `FlameGame`, it is in relation to the viewport. + + +### Size + +The `size` of the component when the zoom level of the camera is 1.0 (no zoom, default). +The `size` is *not* in relation to the parent of the component. + + +### Scale + +The `scale` is how much the component and its children should be scaled. Since it is represented +by a `Vector2`, you can scale in a uniform way by changing `x` and `y` with the same amount, or in a +non-uniform way, by change `x` or `y` by different amounts. + + +### Angle + +The `angle` is the rotation angle around the anchor, represented as a double in radians. It is +relative to the parent's angle. + + +### Native Angle + +The `nativeAngle` is an angle in radians, measured clockwise, representing the default orientation +of the component. It can be used to define the direction in which the component is facing when +[angle](#angle) is zero. + +It is specially helpful when making a sprite based component look at a specific target. If the +original image of the sprite is not facing in the up/north direction, the calculated angle to make +the component look at the target will need some offset to make it look correct. For such cases, +`nativeAngle` can be used to let the component know what direction the original image is faces. + +An example could be a bullet image pointing in east direction. In this case `nativeAngle` can be set +to pi/2 radians. Following are some common directions and their corresponding native angle values. + +Direction | Native Angle | In degrees +----------|--------------|------------- +Up/North | 0 | 0 +Down/South| pi or -pi | 180 or -180 +Left/West | -pi/2 | -90 +Right/East| pi/2 | 90 + + +### Anchor + +```{flutter-app} +:sources: ../flame/examples +:page: anchor +:show: widget code infobox +This example shows effect of changing `anchor` point of parent (red) and child (blue) +components. Tap on them to cycle through the anchor points. Note that the local +position of the child component is (0, 0) at all times. +``` + +The `anchor` is where on the component that the position and rotation should be defined from (the +default is `Anchor.topLeft`). So if you have the anchor set as `Anchor.center` the component's +position on the screen will be in the center of the component and if an `angle` is applied, it is +rotated around the anchor, so in this case around the center of the component. You can think of it +as the point within the component by which Flame "grabs" it. + +When `position` or `absolutePosition` of a component is queried, the returned coordinates are that of +the `anchor` of the component. In case if you want to find the position of a specific anchor point +of a component which is not actually the `anchor` of that component, you can use the `positionOfAnchor` +and `absolutePositionOfAnchor` method. + +```dart +final comp = PositionComponent( + size: Vector2.all(20), + anchor: Anchor.center, +); + +// Returns (0,0) +final p1 = component.position; + +// Returns (10, 10) +final p2 = component.positionOfAnchor(Anchor.bottomRight); +``` + +A common pitfall when using `anchor` is confusing it for as being the attachment point for children +components. For example, setting `anchor` to `Anchor.center` for a parent component does not mean +that the children components will be placed w.r.t the center of parent. + +```{note} +Local origin for a child component is always the top-left corner of its parent component, +irrespective of their `anchor` values. +``` + + +### PositionComponent children + +All children of the `PositionComponent` will be transformed in relation to the parent, which means +that the `position`, `angle` and `scale` will be relative to the parents state. +So if you, for example, wanted to position a child in the center of the parent you would do this: + +```dart +@override +void onLoad() { + final parent = PositionComponent( + position: Vector2(100, 100), + size: Vector2(100, 100), + ); + final child = PositionComponent( + position: parent.size / 2, + anchor: Anchor.center, + ); + parent.add(child); +} +``` + +Remember that most components that are rendered on the screen are `PositionComponent`s, so +this pattern can be used in for example [](#spritecomponent) and [](#spriteanimationcomponent) too. + + +### Render PositionComponent + +When implementing the `render` method for a component that extends `PositionComponent` remember to +render from the top left corner (0.0). Your render method should not handle where on the screen your +component should be rendered. To handle where and how your component should be rendered use the +`position`, `angle` and `anchor` properties and Flame will automatically handle the rest for you. + +If you want to know where on the screen the bounding box of the component is you can use the +`toRect` method. + +In the event that you want to change the direction of your components rendering, you can also use +`flipHorizontally()` and `flipVertically()` to flip anything drawn to canvas during +`render(Canvas canvas)`, around the anchor point. These methods are available on all +`PositionComponent` objects, and are especially useful on `SpriteComponent` and +`SpriteAnimationComponent`. + +In case you want to flip a component around its center without having to change the anchor to +`Anchor.center`, you can use `flipHorizontallyAroundCenter()` and `flipVerticallyAroundCenter()`. + + +## SpriteComponent + +The most commonly used implementation of `PositionComponent` is `SpriteComponent`, and it can be +created with a `Sprite`: + +```dart +import 'package:flame/components/component.dart'; + +class MyGame extends FlameGame { + late final SpriteComponent player; + + @override + Future onLoad() async { + final sprite = await Sprite.load('player.png'); + final size = Vector2.all(128.0); + final player = SpriteComponent(size: size, sprite: sprite); + + // Vector2(0.0, 0.0) by default, can also be set in the constructor + player.position = Vector2(10, 20); + + // 0 by default, can also be set in the constructor + player.angle = 0; + + // Adds the component + add(player); + } +} +``` + + +## SpriteAnimationComponent + +This class is used to represent a Component that has sprites that run in a single cyclic animation. + +This will create a simple three frame animation using 3 different images: + +```dart +@override +Future onLoad() async { + final sprites = [0, 1, 2] + .map((i) => Sprite.load('player_$i.png')); + final animation = SpriteAnimation.spriteList( + await Future.wait(sprites), + stepTime: 0.01, + ); + this.player = SpriteAnimationComponent( + animation: animation, + size: Vector2.all(64.0), + ); +} +``` + +If you have a sprite sheet, you can use the `sequenced` constructor from the `SpriteAnimationData` +class (check more details on [Images > Animation](rendering/images.md#animation)): + +```dart +@override +Future onLoad() async { + final size = Vector2.all(64.0); + final data = SpriteAnimationData.sequenced( + textureSize: size, + amount: 2, + stepTime: 0.1, + ); + this.player = SpriteAnimationComponent.fromFrameData( + await images.load('player.png'), + data, + ); +} +``` + +All animation components internally maintains a `SpriteAnimationTicker` which ticks the `SpriteAnimation`. +This allows multiple components to share the same animation object. + +Example: + +```dart +final sprites = [/*You sprite list here*/]; +final animation = SpriteAnimation.spriteList(sprites, stepTime: 0.01); + +final animationTicker = SpriteAnimationTicker(animation); + +// or alternatively, you can ask the animation object to create one for you. + +final animationTicker = animation.createTicker(); // creates a new ticker + +animationTicker.update(dt); +``` + +To listen when the animation is done (when it reaches the last frame and is not looping) you can +use `animationTicker.completed`. + +Example: + +```dart +await animationTicker.completed; + +doSomething(); + +// or alternatively + +animationTicker.completed.whenComplete(doSomething); +``` + +Additionally, `SpriteAnimationTicker` also has the following optional event callbacks: `onStart`, `onFrame`, +and `onComplete`. To listen to these events, you can do the following: + +```dart +final animationTicker = SpriteAnimationTicker(animation) + ..onStart = () { + // Do something on start. + }; + +final animationTicker = SpriteAnimationTicker(animation) + ..onComplete = () { + // Do something on completion. + }; + +final animationTicker = SpriteAnimationTicker(animation) + ..onFrame = (index) { + if (index == 1) { + // Do something for the second frame. + } + }; +``` + + +## SpriteAnimationGroupComponent + +`SpriteAnimationGroupComponent` is a simple wrapper around `SpriteAnimationComponent` which enables +your component to hold several animations and change the current playing animation at runtime. Since +this component is just a wrapper, the event listeners can be implemented as described in +[](#spriteanimationcomponent). + +Its use is very similar to the `SpriteAnimationComponent` but instead of being initialized with a +single animation, this component receives a Map of a generic type `T` as key and a +`SpriteAnimation` as value, and the current animation. + +Example: + +```dart +enum RobotState { + idle, + running, +} + +final running = await loadSpriteAnimation(/* omitted */); +final idle = await loadSpriteAnimation(/* omitted */); + +final robot = SpriteAnimationGroupComponent( + animations: { + RobotState.running: running, + RobotState.idle: idle, + }, + current: RobotState.idle, +); + +// Changes current animation to "running" +robot.current = RobotState.running; +``` + +As this component works with multiple `SpriteAnimation`s, naturally it needs equal number of animation +tickers to make all those animation tick. Use `animationsTickers` getter to access a map containing tickers +for each animation state. This can be useful if you want to register callbacks for `onStart`, `onComplete` +and `onFrame`. + +Example: + +```dart +enum RobotState { idle, running, jump } + +final running = await loadSpriteAnimation(/* omitted */); +final idle = await loadSpriteAnimation(/* omitted */); + +final robot = SpriteAnimationGroupComponent( + animations: { + RobotState.running: running, + RobotState.idle: idle, + }, + current: RobotState.idle, +); + +robot.animationTickers?[RobotState.running]?.onStart = () { + // Do something on start of running animation. +}; + +robot.animationTickers?[RobotState.jump]?.onStart = () { + // Do something on start of jump animation. +}; + +robot.animationTickers?[RobotState.jump]?.onComplete = () { + // Do something on complete of jump animation. +}; + +robot.animationTickers?[RobotState.idle]?.onFrame = (currentIndex) { + // Do something based on current frame index of idle animation. +}; +``` + + +## SpriteGroupComponent + +`SpriteGroupComponent` is pretty similar to its animation counterpart, but especially for sprites. + +Example: + +```dart +class PlayerComponent extends SpriteGroupComponent + with HasGameReference, TapCallbacks { + @override + Future? onLoad() async { + final pressedSprite = await gameRef.loadSprite(/* omitted */); + final unpressedSprite = await gameRef.loadSprite(/* omitted */); + + sprites = { + ButtonState.pressed: pressedSprite, + ButtonState.unpressed: unpressedSprite, + }; + + current = ButtonState.unpressed; + } + + // tap methods handler omitted... +} +``` + + +## SpawnComponent + +This component is a non-visual component that spawns other components inside of the parent of the +`SpawnComponent`. It's great if you for example want to spawn enemies or power-ups randomly within +an area. + +The `SpawnComponent` takes a factory function that it uses to create new components and an area +where the components should be spawned within (or along the edges of). + +For the area, you can use the `Circle`, `Rectangle` or `Polygon` class, and if you want to only +spawn components along the edges of the shape set the `within` argument to false (defaults to true). + +This would for example spawn new components of the type `MyComponent` every 0.5 seconds randomly +within the defined circle: + +The `factory` function takes an `int` as an argument, which is the index of the component that is +being spawned, so if for example 4 components have been spawned already the 5th component will have +the index 4, since the indexing starts at 0. + +```dart +SpawnComponent( + factory: (i) => MyComponent(size: Vector2(10, 20)), + period: 0.5, + area: Circle(Vector2(100, 200), 150), +); +``` + +If you don't want the spawning rate to be static, you can use the `SpawnComponent.periodRange` +constructor with the `minPeriod` and `maxPeriod` arguments instead. +In the following example the component would be spawned randomly within the circle and the time +between each new spawned component is between 0.5 to 10 seconds. + +```dart +SpawnComponent.periodRange( + factory: (i) => MyComponent(size: Vector2(10, 20)), + minPeriod: 0.5, + maxPeriod: 10, + area: Circle(Vector2(100, 200), 150), +); +``` + +If you want to set the position yourself within the `factory` function, you can use set +`selfPositioning = true` in the constructors and you will be able to set the positions yourself and +ignore the `area` argument. + +```dart +SpawnComponent( + factory: (i) => + MyComponent(position: Vector2(100, 200), size: Vector2(10, 20)), + selfPositioning: true, + period: 0.5, +); +``` + + +## SvgComponent + +**Note**: To use SVG with Flame, use the [`flame_svg`](https://github.com/flame-engine/flame_svg) +package. + +This component uses an instance of `Svg` class to represent a Component that has a svg that is +rendered in the game: + +```dart +@override +Future onLoad() async { + final svg = await Svg.load('android.svg'); + final android = SvgComponent.fromSvg( + svg, + position: Vector2.all(100), + size: Vector2.all(100), + ); +} +``` + + +## ParallaxComponent + +This `Component` can be used to render backgrounds with a depth feeling by drawing several +transparent images on top of each other, where each image or animation (`ParallaxRenderer`) is +moving with a different velocity. + +The rationale is that when you look at the horizon and moving, closer objects seem to move faster +than distant ones. + +This component simulates this effect, making a more realistic background effect. + +The simplest `ParallaxComponent` is created like this: + +```dart +@override +Future onLoad() async { + final parallaxComponent = await loadParallaxComponent([ + ParallaxImageData('bg.png'), + ParallaxImageData('trees.png'), + ]); + add(parallaxComponent); +} +``` + +A ParallaxComponent can also "load itself" by implementing the `onLoad` method: + +```dart +class MyParallaxComponent extends ParallaxComponent { + @override + Future onLoad() async { + parallax = await gameRef.loadParallax([ + ParallaxImageData('bg.png'), + ParallaxImageData('trees.png'), + ]); + } +} + +class MyGame extends FlameGame { + @override + void onLoad() { + add(MyParallaxComponent()); + } +} +``` + +This creates a static background. If you want a moving parallax (which is the whole point of a +parallax), you can do it in a few different ways depending on how fine-grained you want to set the +settings for each layer. + +They simplest way is to set the named optional parameters `baseVelocity` and +`velocityMultiplierDelta` in the `load` helper function. For example if you want to move your +background images along the X-axis with a faster speed the "closer" the image is: + +```dart +@override +Future onLoad() async { + final parallaxComponent = await loadParallaxComponent( + _dataList, + baseVelocity: Vector2(20, 0), + velocityMultiplierDelta: Vector2(1.8, 1.0), + ); +} +``` + +You can set the baseSpeed and layerDelta at any time, for example if your character jumps or your +game speeds up. + +```dart +@override +void onLoad() { + final parallax = parallaxComponent.parallax; + parallax.baseSpeed = Vector2(100, 0); + parallax.velocityMultiplierDelta = Vector2(2.0, 1.0); +} +``` + +By default, the images are aligned to the bottom left, repeated along the X-axis and scaled +proportionally so that the image covers the height of the screen. If you want to change this +behavior, for example if you are not making a side-scrolling game, you can set the `repeat`, +`alignment` and `fill` parameters for each `ParallaxRenderer` and add them to `ParallaxLayer`s that +you then pass in to the `ParallaxComponent`'s constructor. + +Advanced example: + +```dart +final images = [ + loadParallaxImage( + 'stars.jpg', + repeat: ImageRepeat.repeat, + alignment: Alignment.center, + fill: LayerFill.width, + ), + loadParallaxImage( + 'planets.jpg', + repeat: ImageRepeat.repeatY, + alignment: Alignment.bottomLeft, + fill: LayerFill.none, + ), + loadParallaxImage( + 'dust.jpg', + repeat: ImageRepeat.repeatX, + alignment: Alignment.topRight, + fill: LayerFill.height, + ), +]; + +final layers = images.map( + (image) => ParallaxLayer( + await image, + velocityMultiplier: images.indexOf(image) * 2.0, + ) +); + +final parallaxComponent = ParallaxComponent.fromParallax( + Parallax( + await Future.wait(layers), + baseVelocity: Vector2(50, 0), + ), +); +``` + +- The stars image in this example will be repeatedly drawn in both axis, align in the center and be + scaled to fill the screen width. +- The planets image will be repeated in Y-axis, aligned to the bottom left of the screen and not be + scaled. +- The dust image will be repeated in X-axis, aligned to the top right and scaled to fill the screen + height. + +Once you are done setting up your `ParallaxComponent`, add it to the game like with any other +component (`game.add(parallaxComponent`). +Also, don't forget to add you images to the `pubspec.yaml` file as assets or they wont be found. + +The `Parallax` file contains an extension of the game which adds `loadParallax`, `loadParallaxLayer` +, `loadParallaxImage` and `loadParallaxAnimation` so that it automatically uses your game's image +cache instead of the global one. The same goes for the `ParallaxComponent` file, but that provides +`loadParallaxComponent`. + +If you want a fullscreen `ParallaxComponent` simply omit the `size` argument and it will take the +size of the game, it will also resize to fullscreen when the game changes size or orientation. + +Flame provides two kinds of `ParallaxRenderer`: `ParallaxImage` and `ParallaxAnimation`, +`ParallaxImage` is a static image renderer and `ParallaxAnimation` is, as it's name implies, an +animation and frame based renderer. +It is also possible to create custom renderers by extending the `ParallaxRenderer` class. + +Three example implementations can be found in the +[examples directory](https://github.com/flame-engine/flame/tree/main/examples/lib/stories/parallax). + + +## ShapeComponents + +A `ShapeComponent` is the base class for representing a scalable geometrical shape. The shapes have +different ways of defining how they look, but they all have a size and angle that can be modified +and the shape definition will scale or rotate the shape accordingly. + +These shapes are meant as a tool for using geometrical shapes in a more general way than together +with the collision detection system, where you want to use the +[ShapeHitbox](collision_detection.md#shapehitbox)es. + + +### PolygonComponent + +A `PolygonComponent` is created by giving it a list of points in the constructor, called vertices. +This list will be transformed into a polygon with a size, which can still be scaled and rotated. + +For example, this would create a square going from (50, 50) to (100, 100), with it's center in +(75, 75): + +```dart +void main() { + PolygonComponent([ + Vector2(100, 100), + Vector2(100, 50), + Vector2(50, 50), + Vector2(50, 100), + ]); +} +``` + +A `PolygonComponent` can also be created with a list of relative vertices, which are points defined +in relation to the given size, most often the size of the intended parent. + +For example you could create a diamond shapes polygon like this: + +```dart +void main() { + PolygonComponent.relative( + [ + Vector2(0.0, 1.0), // Middle of top wall + Vector2(1.0, 0.0), // Middle of right wall + Vector2(0.0, -1.0), // Middle of bottom wall + Vector2(-1.0, 0.0), // Middle of left wall + ], + size: Vector2.all(100), + ); +} +``` + +The vertices in the example defines percentages of the length from the center to the edge of the +screen in both x and y axis, so for our first item in our list (`Vector2(0.0, 1.0)`) we are pointing +on the middle of the top wall of the bounding box, since the coordinate system here is defined from +the center of the polygon. + +![An example of how to define a polygon shape](../images/polygon_shape.png) + +In the image you can see how the polygon shape formed by the purple arrows is defined by the red +arrows. + +Remember to define the lists in a counter clockwise manner (if you think in the screen coordinate +system where the y-axis is flipped, otherwise it is clockwise). + + +### RectangleComponent + +A `RectangleComponent` is created very similarly to how a `PositionComponent` is created, since it +also has a bounding rectangle. + +Something like this for example: + +```dart +void main() { + RectangleComponent( + position: Vector2(10.0, 15.0), + size: Vector2.all(10), + angle: pi/2, + anchor: Anchor.center, + ); +} +``` + +Dart also already has an excellent way to create rectangles and that class is called `Rect`, you can +create a Flame `RectangleComponent` from a `Rect` by using the `Rectangle.fromRect` factory, and +just like when setting the vertices of the `PolygonComponent`, your rectangle will be sized +according to the `Rect` if you use this constructor. + +The following would create a `RectangleComponent` with its top left corner in `(10, 10)` and a size +of `(100, 50)`. + +```dart +void main() { + RectangleComponent.fromRect( + Rect.fromLTWH(10, 10, 100, 50), + ); +} +``` + +You can also create a `RectangleComponent` by defining a relation to the intended parent's size, +you can use the default constructor to build your rectangle from a position, size and angle. The +`relation` is a vector defined in relation to the parent size, for example a `relation` that is +`Vector2(0.5, 0.8)` would create a rectangle that is 50% of the width of the parent's size and +80% of its height. + +In the example below a `RectangleComponent` of size `(25.0, 30.0)` positioned at `(100, 100)` would +be created. + +```dart +void main() { + RectangleComponent.relative( + Vector2(0.5, 1.0), + position: Vector2.all(100), + size: Vector2(50, 30), + ); +} +``` + +Since a square is a simplified version of a rectangle, there is also a constructor for creating a +square `RectangleComponent`, the only difference is that the `size` argument is a `double` instead +of a `Vector2`. + +```dart +void main() { + RectangleComponent.square( + position: Vector2.all(100), + size: 200, + ); +} +``` + + +### CircleComponent + +If you know how long your circle's position and/or how long the radius is going to be from the start +you can use the optional arguments `radius` and `position` to set those. + +The following would create a `CircleComponent` with its center in `(100, 100)` with a radius of 5, +and therefore a size of `Vector2(10, 10)`. + +```dart +void main() { + CircleComponent(radius: 5, position: Vector2.all(100), anchor: Anchor.center); +} +``` + +When creating a `CircleComponent` with the `relative` constructor you can define how long the +radius is in comparison to the shortest edge of the of the bounding box defined by `size`. + +The following example would result in a `CircleComponent` that defines a circle with a radius of 40 +(a diameter of 80). + +```dart +void main() { + CircleComponent.relative(0.8, size: Vector2.all(100)); +} +``` + + +## IsometricTileMapComponent + +This component allows you to render an isometric map based on a cartesian matrix of blocks and an +isometric tileset. + +A simple example on how to use it: + +```dart +// Creates a tileset, the block ids are automatically assigned sequentially +// starting at 0, from left to right and then top to bottom. +final tilesetImage = await images.load('tileset.png'); +final tileset = SpriteSheet(image: tilesetImage, srcSize: Vector2.all(32)); +// Each element is a block id, -1 means nothing +final matrix = [[0, 1, 0], [1, 0, 0], [1, 1, 1]]; +add(IsometricTileMapComponent(tileset, matrix)); +``` + +It also provides methods for converting coordinates so you can handle clicks, hovers, render +entities on top of tiles, add a selector, etc. + +You can also specify the `tileHeight`, which is the vertical distance between the bottom and top +planes of each cuboid in your tile. Basically, it's the height of the front-most edge of your +cuboid; normally it's half (default) or a quarter of the tile size. On the image below you can see +the height colored in the darker tone: + +![An example of how to determine the tileHeight](../images/tile-height-example.png) + +This is an example of how a quarter-length map looks like: + +![An example of a isometric map with selector](../images/isometric.png) + +Flame's Example app contains a more in-depth example, featuring how to parse coordinates to make a +selector. The code can be found +[here](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/isometric_tile_map_example.dart), +and a live version can be seen [here](https://examples.flame-engine.org/#/Rendering_Isometric_Tile_Map). + + +## NineTileBoxComponent + +A Nine Tile Box is a rectangle drawn using a grid sprite. + +The grid sprite is a 3x3 grid and with 9 blocks, representing the 4 corners, the 4 sides and the +middle. + +The corners are drawn at the same size, the sides are stretched on the side direction and the middle +is expanded both ways. + +Using this, you can get a box/rectangle that expands well to any sizes. This is useful for making +panels, dialogs, borders. + +Check the example app +[nine_tile_box](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/nine_tile_box_example.dart) +for details on how to use it. + + +## CustomPainterComponent + +A `CustomPainter` is a Flutter class used with the `CustomPaint` widget to render custom +shapes inside a Flutter application. + +Flame provides a component that can render a `CustomPainter` called `CustomPainterComponent`, it +receives a custom painter and renders it on the game canvas. + +This can be used for sharing custom rendering logic between your Flame game, and your Flutter +widgets. + +Check the example app +[custom_painter_component](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/widgets/custom_painter_example.dart) +for details on how to use it. + + +## ComponentsNotifier + +Most of the time just accessing children and their attributes is enough to build the logic of +your game. + +But sometimes, reactivity can help the developer to simplify and write better code, to help with +that Flame provides the `ComponentsNotifier`, which is an implementation of a +`ChangeNotifier` that notifies listeners every time a component is added, removed or manually +changed. + +For example, lets say that we want to show a game over text when the player's lives reach zero. + +To make the component automatically report when new instances are added or removed, the `Notifier` +mixin can be applied to the component class: + +```dart +class Player extends SpriteComponent with Notifier {} +``` + +Then to listen to changes on that component the `componentsNotifier` method from `FlameGame` can +be used: + +```dart +class MyGame extends FlameGame { + int lives = 2; + + @override + void onLoad() { + final playerNotifier = componentsNotifier() + ..addListener(() { + final player = playerNotifier.single; + if (player == null) { + lives--; + if (lives == 0) { + add(GameOverComponent()); + } else { + add(Player()); + } + } + }); + } +} +``` + +A `Notifier` component can also manually notify its listeners that something changed. Lets expand +the example above to make a hud component to blink when the player has half of their health. In +order to do so, we need that the `Player` component notify a change manually, example: + +```dart +class Player extends SpriteComponent with Notifier { + double health = 1; + + void takeHit() { + health -= .1; + if (health == 0) { + removeFromParent(); + } else if (health <= .5) { + notifyListeners(); + } + } +} +``` + +Then our hud component could look like: + +```dart +class Hud extends PositionComponent with HasGameRef { + + @override + void onLoad() { + final playerNotifier = gameRef.componentsNotifier() + ..addListener(() { + final player = playerNotifier.single; + if (player != null) { + if (player.health <= .5) { + add(BlinkEffect()); + } + } + }); + } +} +``` + +`ComponentsNotifier`s can also come in handy to rebuild widgets when state changes inside a +`FlameGame`, to help with that Flame provides a `ComponentsNotifierBuilder` widget. + +To see an example of its use check the running example +[here](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/components/components_notifier_example.dart). + + +## ClipComponent + +A `ClipComponent` is a component that will clip the canvas to its size and shape. This means that +if the component itself or any child of the `ClipComponent` renders outside of the +`ClipComponent`'s boundaries, the part that is not inside the area will not be shown. + +A `ClipComponent` receives a builder function that should return the `Shape` that will define the +clipped area, based on its size. + +To make it easier to use that component, there are three factories that offers common shapes: + +- `ClipComponent.rectangle`: Clips the area in the form a rectangle based on its size. +- `ClipComponent.circle`: Clips the area in the form of a circle based on its size. +- `ClipComponent.polygon`: Clips the area in the form of a polygon based on the points received +in the constructor. + +Check the example app +[clip_component](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/components/clip_component_example.dart) +for details on how to use it. + + +## Effects + +Flame provides a set of effects that can be applied to a certain type of components, these effects +can be used to animate some properties of your components, like position or dimensions. +You can check the list of those effects [here](effects.md). + +Examples of the running effects can be found [here](https://github.com/flame-engine/flame/tree/main/examples/lib/stories/effects); + + +## When not using `FlameGame` + +If you are not using `FlameGame`, don't forget that all components needs to be updated every time your +game updates. This lets component perform their internal processing and update their state. + +For example, the `SpriteAnimationTicker` inside all the `SpriteAnimation` based components needs to tick +the animation object to decide which animation frame will be displayed next. This can be done by manually +calling `component.update()` when not using `FlameGame`. This also means, if you are implementing your +own sprite animation based component, you can directly use a `SpriteAnimationTicker` to update the `SpriteAnimation`. diff --git a/docs/1.18.0/_sources/flame/diagrams/component.md.txt b/docs/1.18.0/_sources/flame/diagrams/component.md.txt new file mode 100644 index 000000000..a808e50f4 --- /dev/null +++ b/docs/1.18.0/_sources/flame/diagrams/component.md.txt @@ -0,0 +1,55 @@ +``` {mermaid} +%%{init: { 'theme': 'dark' } }%% +graph TD + %% Config %% + classDef default fill:#282828,stroke:#F6BE00; + + %% Nodes %% + Component(Component) + Misc(" + TimerComponent + ParticleComponent + SpriteBatchComponent + ") + Effects("Effects
(See the effects section)") + Game(Game) + FlameGame(FlameGame) + PositionComponent(PositionComponent) + + Sprites(" + SpriteComponent + SpriteGroupComponent + SpriteAnimationComponent + SpriteAnimationGroupComponent + ParallaxComponent + IsoMetricTileMapComponent + ") + + HudMarginComponent(HudMarginComponent) + HudComponents(" + HudButtonComponent + JoystickComponent + ") + + OtherPositionComponents(" + ButtonComponent + CustomPainterComponent + ShapeComponent + SpriteButtonComponent + TextComponent + TextBoxComponent + NineTileBoxComponent + ") + + %% Flow %% + Component --> Misc + Component --> Effects + Component --> PositionComponent + Component --> FlameGame + + Game --> FlameGame + PositionComponent --> Sprites + PositionComponent --> HudMarginComponent + PositionComponent --> OtherPositionComponents + HudMarginComponent --> HudComponents +``` diff --git a/docs/1.18.0/_sources/flame/diagrams/component_life_cycle.md.txt b/docs/1.18.0/_sources/flame/diagrams/component_life_cycle.md.txt new file mode 100644 index 000000000..e1a9b5ac3 --- /dev/null +++ b/docs/1.18.0/_sources/flame/diagrams/component_life_cycle.md.txt @@ -0,0 +1,46 @@ +``` {mermaid} +%%{init: { 'theme': 'dark' } }%% + + graph TD + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + x(Runs Each Tick) + y(Runs On Add & Resize):::lightYellow + z(Runs Once):::yellow + +``` + +``` {mermaid} +%%{init: { 'theme': 'dark' } }%% + graph LR + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + + A(onLoad):::yellow + B(onGameResize):::lightYellow + C(onMount):::yellow + D(update) + E(render) + F(onRemove):::yellow + + %% Flow %% + + A-->B + B-->C + C-->D + D-->E + E-->D + E-. If removed .->F + F-. If re-parented .->A + +``` diff --git a/docs/1.18.0/_sources/flame/diagrams/flame_game_life_cycle.md.txt b/docs/1.18.0/_sources/flame/diagrams/flame_game_life_cycle.md.txt new file mode 100644 index 000000000..792fd203a --- /dev/null +++ b/docs/1.18.0/_sources/flame/diagrams/flame_game_life_cycle.md.txt @@ -0,0 +1,46 @@ +``` {mermaid} +%%{init: { 'theme': 'dark' } }%% + + graph TD + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + x(Runs Each Tick) + y(Runs On Add & Resize):::lightYellow + z(Runs Once):::yellow + +``` + +``` {mermaid} +%%{init: { 'theme': 'dark' } }%% + graph LR + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + + A(onGameResize):::lightYellow + B(onLoad):::yellow + C(onMount):::yellow + D(update) + E(render) + F(onRemove):::yellow + + %% Flow %% + + A-->B + B-->C + C-->D + D-->E + E-->D + E-. If removed .->F + F-. If re-parented .->A + +``` diff --git a/docs/1.18.0/_sources/flame/diagrams/low_level_game_api.md.txt b/docs/1.18.0/_sources/flame/diagrams/low_level_game_api.md.txt new file mode 100644 index 000000000..6d136bc07 --- /dev/null +++ b/docs/1.18.0/_sources/flame/diagrams/low_level_game_api.md.txt @@ -0,0 +1,42 @@ +``` {mermaid} +%%{init: { 'theme': 'dark' } }%% + graph TD + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000; + + %% Nodes %% + + z(Abstract Class):::yellow + x(Normal Class) +``` + +``` {mermaid} +%%{init: { 'theme': 'dark' } }%% + + graph BT + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000; + + %% Nodes %% + + A(OxygenGame) + B(Game):::yellow + C(FlameGame) + D(Component) + E(Other Components) + F(GameWidget) + + %% Flow %% + + A-- Extends -->B + F-- Wants -->B + + C-- Extends -->D + E-- Extends -->D + + C-- With -->B + ``` diff --git a/docs/1.18.0/_sources/flame/effects.md.txt b/docs/1.18.0/_sources/flame/effects.md.txt new file mode 100644 index 000000000..4e25e89ad --- /dev/null +++ b/docs/1.18.0/_sources/flame/effects.md.txt @@ -0,0 +1,852 @@ +# Effects + +An effect is a special component that can attach to another component in order to modify its +properties or appearance. + +For example, suppose you are making a game with collectible power-up items. You want these power-ups +to generate randomly around the map and then de-spawn after some time. Obviously, you could make a +sprite component for the power-up and then place that component on the map, but we could do even +better! + +Let's add a `ScaleEffect` to grow the item from 0 to 100% when the power-up first appears. Add +another infinitely repeating alternating `MoveEffect` in order to make the item move slightly up +and down. Then add an `OpacityEffect` that will "blink" the item 3 times, this effect will have a +built-in delay of 30 seconds, or however long you want your power-up to stay in place. Lastly, add +a `RemoveEffect` that will automatically remove the item from the game tree after the specified +time (you probably want to time it right after the end of the `OpacityEffect`). + +As you can see, with a few simple effects we have turned a simple lifeless sprite into a much more +interesting item. And what's more important, it didn't result in an increased code complexity: the +effects, once added, will work automatically, and then self-remove from the game tree when +finished. + + +## Overview + +The function of an `Effect` is to effect a change over time in some component's property. In order +to achieve that, the `Effect` must know the initial value of the property, the final value, and how +it should progress over time. The initial value is usually determined by an effect automatically, +the final value is provided by the user explicitly, and progression over time is handled by +`EffectController`s. + +There are multiple effects provided by Flame, and you can also +[create your own](#creating-new-effects). The following effects are included: + +- [`MoveByEffect`](#movebyeffect) +- [`MoveToEffect`](#movetoeffect) +- [`MoveAlongPathEffect`](#movealongpatheffect) +- [`RotateEffect.by`](#rotateeffectby) +- [`RotateEffect.to`](#rotateeffectto) +- [`ScaleEffect.by`](#scaleeffectby) +- [`ScaleEffect.to`](#scaleeffectto) +- [`SizeEffect.by`](#sizeeffectby) +- [`SizeEffect.to`](#sizeeffectto) +- [`AnchorByEffect`](#anchorbyeffect) +- [`AnchorToEffect`](#anchortoeffect) +- [`OpacityToEffect`](#opacitytoeffect) +- [`OpacityByEffect`](#opacitybyeffect) +- [`ColorEffect`](#coloreffect) +- [`SequenceEffect`](#sequenceeffect) +- [`RemoveEffect`](#removeeffect) + +An `EffectController` is an object that describes how the effect should evolve over time. If you +think of the initial value of the effect as 0% progress, and the final value as 100% progress, then +the job of the effect controller is to map from the "physical" time, measured in seconds, into the +"logical" time, which changes from 0 to 1. + +There are multiple effect controllers provided by the Flame framework as well: + +- [`EffectController`](#effectcontroller) +- [`LinearEffectController`](#lineareffectcontroller) +- [`ReverseLinearEffectController`](#reverselineareffectcontroller) +- [`CurvedEffectController`](#curvedeffectcontroller) +- [`ReverseCurvedEffectController`](#reversecurvedeffectcontroller) +- [`PauseEffectController`](#pauseeffectcontroller) +- [`RepeatedEffectController`](#repeatedeffectcontroller) +- [`InfiniteEffectController`](#infiniteeffectcontroller) +- [`SequenceEffectController`](#sequenceeffectcontroller) +- [`SpeedEffectController`](#speedeffectcontroller) +- [`DelayedEffectController`](#delayedeffectcontroller) +- [`NoiseEffectController`](#noiseeffectcontroller) +- [`RandomEffectController`](#randomeffectcontroller) +- [`SineEffectController`](#sineeffectcontroller) +- [`ZigzagEffectController`](#zigzageffectcontroller) + + +## Built-in effects + + +### `Effect` + +The base `Effect` class is not usable on its own (it is abstract), but it provides some common +functionality inherited by all other effects. This includes: + +- The ability to pause/resume the effect using `effect.pause()` and `effect.resume()`. You can + check whether the effect is currently paused using `effect.isPaused`. + +- Property `removeOnFinish` (which is true by default) will cause the effect component to be + removed from the game tree and garbage-collected once the effect completes. Set this to false + if you plan to reuse the effect after it is finished. + +- Optional user-provided `onComplete`, which will be invoked when the effect has just + completed its execution but before it is removed from the game. + +- A `completed` future that completes when the effect finishes. + +- The `reset()` method reverts the effect to its original state, allowing it to run once again. + + +### `MoveByEffect` + +This effect applies to a `PositionComponent` and shifts it by a prescribed `offset` amount. This +offset is relative to the current position of the target: + +```{flutter-app} +:sources: ../flame/examples +:page: move_by_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = MoveByEffect( + Vector2(0, -10), + EffectController(duration: 0.5), +); +``` + +If the component is currently at `Vector2(250, 200)`, then at the end of the effect its position +will be `Vector2(250, 190)`. + +Multiple move effects can be applied to a component at the same time. The result will be the +superposition of all the individual effects. + + +### `MoveToEffect` + +This effect moves a `PositionComponent` from its current position to the specified destination +point in a straight line. + +```{flutter-app} +:sources: ../flame/examples +:page: move_to_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = MoveToEffect( + Vector2(100, 500), + EffectController(duration: 3), +); +``` + +It is possible, but not recommended to attach multiple such effects to the same component. + + +### `MoveAlongPathEffect` + +This effect moves a `PositionComponent` along the specified path relative to the component's +current position. The path can have non-linear segments, but must be singly connected. It is +recommended to start a path at `Vector2.zero()` in order to avoid sudden jumps in the component's +position. + +```{flutter-app} +:sources: ../flame/examples +:page: move_along_path_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = MoveAlongPathEffect( + Path()..quadraticBezierTo(100, 0, 50, -50), + EffectController(duration: 1.5), +); +``` + +An optional flag `absolute: true` will declare the path within the effect as absolute. That is, the +target will "jump" to the beginning of the path at start, and then follow that path as if it was a +curve drawn on the canvas. + +Another flag `oriented: true` instructs the target not only move along the curve, but also rotate +itself in the direction the curve is facing at each point. With this flag the effect becomes both +the move- and the rotate- effect at the same time. + + +### `RotateEffect.by` + +Rotates the target clockwise by the specified angle relative to its current orientation. The angle +is in radians. For example, the following effect will rotate the target 90º (=[tau]/4 in radians) +clockwise: + +```{flutter-app} +:sources: ../flame/examples +:page: rotate_by_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = RotateEffect.by( + tau/4, + EffectController(duration: 2), +); +``` + + +### `RotateEffect.to` + +Rotates the target clockwise to the specified angle. For example, the following will rotate the +target to look east (0º is north, 90º=[tau]/4 east, 180º=tau/2 south, and 270º=tau*3/4 west): + +```{flutter-app} +:sources: ../flame/examples +:page: rotate_to_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = RotateEffect.to( + tau/4, + EffectController(duration: 2), +); +``` + + +### `ScaleEffect.by` + +This effect will change the target's scale by the specified amount. For example, this will cause +the component to grow 50% larger: + + ```{flutter-app} + :sources: ../flame/examples + :page: scale_by_effect + :show: widget code infobox + :width: 180 + :height: 160 + ``` + +```dart +final effect = ScaleEffect.by( + Vector2.all(1.5), + EffectController(duration: 0.3), +); +``` + + +### `ScaleEffect.to` + +This effect works similar to `ScaleEffect.by`, but sets the absolute value of the target's scale. + + ```{flutter-app} + :sources: ../flame/examples + :page: scale_to_effect + :show: widget code infobox + :width: 180 + :height: 160 + ``` + +```dart +final effect = ScaleEffect.to( + Vector2.all(0.5), + EffectController(duration: 0.5), +); +``` + + +### `SizeEffect.by` + +This effect will change the size of the target component, relative to its current size. For example, +if the target has size `Vector2(100, 100)`, then after the following effect is applied and runs its +course, the new size will be `Vector2(120, 50)`: + + ```{flutter-app} + :sources: ../flame/examples + :page: size_by_effect + :show: widget code infobox + :width: 180 + :height: 160 + ``` + +```dart +final effect = SizeEffect.by( + Vector2(-15, 30), + EffectController(duration: 1), +); +``` + +The size of a `PositionComponent` cannot be negative. If an effect attempts to set the size to a +negative value, the size will be clamped at zero. + +Note that for this effect to work, the target component must implement the `SizeProvider` interface +and take its `size` into account when rendering. Only few of the built-in components implement this +API, but you can always make your own component work with size effects by adding +`implements SizeEffect` to the class declaration. + +An alternative to `SizeEffect` is the `ScaleEffect`, which works more generally and scales both the +target component and its children. + + +### `SizeEffect.to` + +Changes the size of the target component to the specified size. Target size cannot be negative: + + + ```{flutter-app} + :sources: ../flame/examples + :page: size_to_effect + :show: widget code infobox + :width: 180 + :height: 160 + ``` + +```dart +final effect = SizeEffect.to( + Vector2(90, 80), + EffectController(duration: 1), +); +``` + + +### `AnchorByEffect` + +Changes the location of the target's anchor by the specified offset. This effect can also be created +using `AnchorEffect.by()`. + +```{flutter-app} +:sources: ../flame/examples +:page: anchor_by_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = AnchorByEffect( + Vector2(0.1, 0.1), + EffectController(speed: 1), +); +``` + + +### `AnchorToEffect` + +Changes the location of the target's anchor. This effect can also be created using +`AnchorEffect.to()`. + +```{flutter-app} +:sources: ../flame/examples +:page: anchor_to_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = AnchorToEffect( + Anchor.center, + EffectController(speed: 1), +); +``` + + +### `OpacityToEffect` + +This effect will change the opacity of the target over time to the specified alpha-value. +It can only be applied to components that implement the `OpacityProvider`. + +```{flutter-app} +:sources: ../flame/examples +:page: opacity_to_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = OpacityEffect.to( + 0.2, + EffectController(duration: 0.75), +); +``` + +If the component uses multiple paints, the effect can target one more more of those paints +using the `target` parameter. The `HasPaint` mixin implements `OpacityProvider` and exposes APIs +to easily create providers for desired paintIds. For single paintId `opacityProviderOf` can be used +and for multiple paintIds and `opacityProviderOfList` can be used. + + +```{flutter-app} +:sources: ../flame/examples +:page: opacity_effect_with_target +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = OpacityEffect.to( + 0.2, + EffectController(duration: 0.75), + target: component.opacityProviderOfList( + paintIds: const [paintId1, paintId2], + ), +); +``` + +The opacity value of 0 corresponds to a fully transparent component, and the opacity value of 1 is +fully opaque. Convenience constructors `OpacityEffect.fadeOut()` and `OpacityEffect.fadeIn()` will +animate the target into full transparency / full visibility respectively. + + +### `OpacityByEffect` + +This effect will change the opacity of the target relative to the specified alpha-value. For example, +the following effect will change the opacity of the target by `90%`: + +```{flutter-app} +:sources: ../flame/examples +:page: opacity_by_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = OpacityEffect.by( + 0.9, + EffectController(duration: 0.75), +); +``` + +Currently this effect can only be applied to components that have a `HasPaint` mixin. If the target component +uses multiple paints, the effect can target any individual color using the `paintId` parameter. + + +### GlowEffect + +```{note} +This effect is currently experimental, and its API may change in the future. +``` + +This effect will apply the glowing shade around target relative to the specified +`glow-strength`. The color of shade will be targets paint color. For example, the following effect +will apply the glowing shade around target by strength of `10`: + +```{flutter-app} +:sources: ../flame/examples +:page: glow_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = GlowEffect( + 10.0, + EffectController(duration: 3), +); +``` + +Currently this effect can only be applied to components that have a `HasPaint` mixin. + + +### `SequenceEffect` + +This effect can be used to run multiple other effects one after another. The constituent effects +may have different types. + +The sequence effect can also be alternating (the sequence will first run forward, and then +backward); and also repeat a certain predetermined number of times, or infinitely. + +```{flutter-app} +:sources: ../flame/examples +:page: sequence_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = SequenceEffect([ + ScaleEffect.by( + Vector2.all(1.5), + EffectController( + duration: 0.2, + alternate: true, + ), + ), + MoveEffect.by( + Vector2(30, -50), + EffectController( + duration: 0.5, + ), + ), + OpacityEffect.to( + 0, + EffectController( + duration: 0.3, + ), + ), + RemoveEffect(), +]); +``` + + +### `RemoveEffect` + +This is a simple effect that can be attached to a component causing it to be removed from the game +tree after the specified delay has passed: + +```{flutter-app} +:sources: ../flame/examples +:page: remove_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + + +```dart +final effect = RemoveEffect(delay: 3.0); +``` + + +## ColorEffect + +This effect will change the base color of the paint, causing the rendered component to be tinted by +the provided color between a provided range. + +Usage example: + +```{flutter-app} +:sources: ../flame/examples +:page: color_effect +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +final effect = ColorEffect( + const Color(0xFF00FF00), + EffectController(duration: 1.5), + opacityFrom = 0.2, + opacityTo: 0.8, +); +``` + +The `opacityFrom` and `opacityTo` arguments will determine "how much" of the color that will be +applied to the component. In this example the effect will start with 20% and will go up to 80%. + +**Note:** Due to how this effect is implemented, and how Flutter's `ColorFilter` class works, this +effect can't be mixed with other `ColorEffect`s, when more than one is added to the component, only +the last one will have effect. + + +## Creating new effects + +Although Flame provides a wide array of built-in effects, eventually you may find them to be +insufficient. Luckily, creating new effects is very simple. + +Each effect extends the base `Effect` class, possibly via one of the more specialized abstract +subclasses such as `ComponentEffect` or `Transform2DEffect`. + +The `Effect` class' constructor requires an `EffectController` instance as an argument. In most +cases you may want to pass that controller from your own constructor. Luckily, the effect controller +encapsulates much of the complexity of an effect's implementation, so you don't need to worry about +re-creating that functionality. + +Lastly, you will need to implement a single method `apply(double progress)` that will be called at +each update tick while the effect is active. In this method you are supposed to make changes to the +target of your effect. + +In addition, you may want to implement callbacks `onStart()` and `onFinish()` if there are any +actions that must be taken when the effect starts or ends. + +When implementing the `apply()` method we recommend to use relative updates only. That is, change +the target property by incrementing/decrementing its current value, rather than directly setting +that property to a fixed value. This way multiple effects would be able to act on the same component +without interfering with each other. + + +## Effect controllers + + +### `EffectController` + +The base `EffectController` class provides a factory constructor capable of creating a variety of +common controllers. The syntax of the constructor is the following: + +```dart +EffectController({ + required double duration, + Curve curve = Curves.linear, + double? reverseDuration, + Curve? reverseCurve, + bool alternate = false, + double atMaxDuration = 0.0, + double atMinDuration = 0.0, + int? repeatCount, + bool infinite = false, + double startDelay = 0.0, + VoidCallback? onMax, + VoidCallback? onMin, +}); +``` + +- *`duration`* -- the length of the main part of the effect, i.e. how long it should take to go + from 0 to 100%. This parameter cannot be negative, but can be zero. If this is the only parameter + specified then the effect will grow linearly over the `duration` seconds. + +- *`curve`* -- if given, creates a non-linear effect that grows from 0 to 100% according to the + provided [curve](https://api.flutter.dev/flutter/animation/Curves-class.html). + +- *`reverseDuration`* -- if provided, adds an additional step to the controller: after the effect + has grown from 0 to 100% over the `duration` seconds, it will then go backwards from 100% to 0 + over the `reverseDuration` seconds. In addition, the effect will complete at progress level of 0 + (normally the effect completes at progress 1). + +- *`reverseCurve`* -- the curve to be used during the "reverse" step of the effect. If not given, + this will default to `curve.flipped`. + +- *`alternate`* -- setting this to true is equivalent to specifying the `reverseDuration` equal + to the `duration`. If the `reverseDuration` is already set, this flag has no effect. + +- *`atMaxDuration`* -- if non-zero, this inserts a pause after the effect reaches its max + progress and before the reverse stage. During this time the effect is kept at 100% progress. If + there is no reverse stage, then this will simply be a pause before the effect is marked as + completed. + +- *`atMinDuration`* -- if non-zero, this inserts a pause after the reaches its lowest progress + (0) at the end of the reverse stage. During this time, the effect's progress is at 0%. If there + is no reverse stage, then this pause will still be inserted after the "at-max" pause if it's + present, or after the forward stage otherwise. In addition, the effect will now complete at + progress level of 0. + +- *`repeatCount`* -- if greater than one, it will cause the effect to repeat itself the prescribed + number of times. Each iteration will consists of the forward stage, pause at max, reverse stage, + then pause at min (skipping those that were not specified). + +- *`infinite`* -- if true, the effect will repeat infinitely and never reach completion. This is + equivalent to as if `repeatCount` was set to infinity. + +- *`startDelay`* -- an additional wait time inserted before the beginning of the effect. This + wait time is executed only once, even if the effect is repeating. During this time the effect's + `.started` property returns false. The effect's `onStart()` callback will be executed at the end + of this waiting period. + + Using this parameter is the simplest way to create a chain of effects that execute one after + another (or with an overlap). + +- *`onMax`* -- callback function which will be invoked right after reaching its max progress and + before the optional pause and reverse stage. + +- *`onMin`* -- callback function which will be invoked right after reaching its lowest progress + at the end of the reverse stage and before the optional pause and forward stage. + +The effect controller returned by this factory constructor will be composited of multiple simpler +effect controllers described further below. If this constructor proves to be too limited for your +needs, you can always create your own combination from the same building blocks. + +In addition to the factory constructor, the `EffectController` class defines a number of properties +common for all effect controllers. These properties are: + +- `.started` -- true if the effect has already started. For most effect controllers this property + is always true. The only exception is the `DelayedEffectController` which returns false while the + effect is in the waiting stage. + +- `.completed` -- becomes true when the effect controller finishes execution. + +- `.progress` -- current value of the effect controller, a floating-point value from 0 to 1. This + variable is the main "output" value of an effect controller. + +- `.duration` -- total duration of the effect, or `null` if the duration cannot be determined (for + example if the duration is random or infinite). + + +### `LinearEffectController` + +This is the simplest effect controller that grows linearly from 0 to 1 over the specified +`duration`: + +```dart +final ec = LinearEffectController(3); +``` + + +### `ReverseLinearEffectController` + +Similar to the `LinearEffectController`, but it goes in the opposite direction and grows linearly +from 1 to 0 over the specified duration: + +```dart +final ec = ReverseLinearEffectController(1); +``` + + +### `CurvedEffectController` + +This effect controller grows non-linearly from 0 to 1 over the specified `duration` and following +the provided `curve`: + +```dart +final ec = CurvedEffectController(0.5, Curves.easeOut); +``` + + +### `ReverseCurvedEffectController` + +Similar to the `CurvedEffectController`, but the controller grows down from 1 to 0 following the +provided `curve`: + +```dart +final ec = ReverseCurvedEffectController(0.5, Curves.bounceInOut); +``` + + +### `PauseEffectController` + +This effect controller keeps the progress at a constant value for the specified time duration. +Typically, the `progress` would be either 0 or 1: + +```dart +final ec = PauseEffectController(1.5, progress: 0); +``` + + +### `RepeatedEffectController` + +This is a composite effect controller. It takes another effect controller as a child, and repeats +it multiple times, resetting before the start of each next cycle. + +```dart +final ec = RepeatedEffectController(LinearEffectController(1), 10); +``` + +The child effect controller cannot be infinite. If the child is random, then it will be +re-initialized with new random values on each iteration. + + +### `InfiniteEffectController` + +Similar to the `RepeatedEffectController`, but repeats its child controller indefinitely. + +```dart +final ec = InfiniteEffectController(LinearEffectController(1)); +``` + + +### `SequenceEffectController` + +Executes a sequence of effect controllers, one after another. The list of controllers cannot be +empty. + +```dart +final ec = SequenceEffectController([ + LinearEffectController(1), + PauseEffectController(0.2), + ReverseLinearEffectController(1), +]); +``` + + +### `SpeedEffectController` + +Alters the duration of its child effect controller so that the effect proceeds at the predefined +speed. The initial duration of the child EffectController is irrelevant. The child controller must +be the subclass of `DurationEffectController`. + +The `SpeedEffectController` can only be applied to effects for which the notion of speed is +well-defined. Such effects must implement the `MeasurableEffect` interface. For example, the +following effects qualify: [`MoveByEffect`](#movebyeffect), [`MoveToEffect`](#movetoeffect), +[`MoveAlongPathEffect`](#movealongpatheffect), [`RotateEffect.by`](#rotateeffectby), +[`RotateEffect.to`](#rotateeffectto). + +The parameter `speed` is in units per second, where the notion of a "unit" depends on the target +effect. For example, for move effects, they refer to the distance traveled; for rotation effects +the units are radians. + +```dart +final ec1 = SpeedEffectController(LinearEffectController(0), speed: 1); +final ec2 = EffectController(speed: 1); // same as ec1 +``` + + +### `DelayedEffectController` + +Effect controller that executes its child controller after the prescribed `delay`. While the +controller is executing the "delay" stage, the effect will be considered "not started", i.e. its +`.started` property will be returning `false`. + +```dart +final ec = DelayedEffectController(LinearEffectController(1), delay: 5); +``` + + +### `NoiseEffectController` + +This effect controller exhibits noisy behavior, i.e. it oscillates randomly around zero. Such effect +controller can be used to implement a variety of shake effects. + +```dart +final ec = NoiseEffectController(duration: 0.6, frequency: 10); +``` + + +### `RandomEffectController` + +This controller wraps another controller and makes its duration random. The actual value for the +duration is re-generated upon each reset, which makes this controller particularly useful within +repeated contexts, such as [](#repeatedeffectcontroller) or [](#infiniteeffectcontroller). + +```dart +final ec = RandomEffectController.uniform( + LinearEffectController(0), // duration here is irrelevant + min: 0.5, + max: 1.5, +); +``` + +The user has the ability to control which `Random` source to use, as well as the exact distribution +of the produced random durations. Two distributions -- `.uniform` and `.exponential` are included, +any other can be implemented by the user. + + +### `SineEffectController` + +An effect controller that represents a single period of the sine function. Use this to create +natural-looking harmonic oscillations. Two perpendicular move effects governed by +`SineEffectControllers` with different periods, will create a [Lissajous curve]. + +```dart +final ec = SineEffectController(period: 1); +``` + + +### `ZigzagEffectController` + +Simple alternating effect controller. Over the course of one `period`, this controller will proceed +linearly from 0 to 1, then to -1, and then back to 0. Use this for oscillating effects where the +starting position should be the center of the oscillations, rather than the extreme (as provided +by the standard alternating `EffectController`). + +```dart +final ec = ZigzagEffectController(period: 2); +``` + + +## See also + +- [Examples of various effects](https://examples.flame-engine.org/). + + +[tau]: https://en.wikipedia.org/wiki/Tau_(mathematical_constant) +[Lissajous curve]: https://en.wikipedia.org/wiki/Lissajous_curve diff --git a/docs/1.18.0/_sources/flame/flame.md.txt b/docs/1.18.0/_sources/flame/flame.md.txt new file mode 100644 index 000000000..d3ea165ee --- /dev/null +++ b/docs/1.18.0/_sources/flame/flame.md.txt @@ -0,0 +1,35 @@ +# Flame + +- [File Structure](structure.md) +- [Game Widget](game_widget.md) +- [Game Loop](game.md) +- [Components](components.md) +- [Router](router.md) +- [Platforms](platforms.md) +- [Collision Detection](collision_detection.md) +- [Effects](effects.md) +- [Camera Component](camera_component.md) +- [Inputs](inputs/inputs.md) +- [Rendering](rendering/rendering.md) +- [Layout](layout/layout.md) +- [Overlays](overlays.md) +- [Other](other/other.md) + +```{toctree} +:hidden: + +File Structure +Game Widget +Game Loop +Components +Router +Platforms +Collision Detection +Effects +Camera Component +Inputs +Rendering +Layout +Overlays +Other +``` diff --git a/docs/1.18.0/_sources/flame/game.md.txt b/docs/1.18.0/_sources/flame/game.md.txt new file mode 100644 index 000000000..350c7bbb3 --- /dev/null +++ b/docs/1.18.0/_sources/flame/game.md.txt @@ -0,0 +1,261 @@ +# FlameGame + +The `FlameGame` class implements a `Component` based `Game`. It has a tree of components +and calls the `update` and `render` methods of all components that have been added to the game. + +We refer to this component-based system as the Flame Component System (FCS). Throughout the +documentation, FCS is used to reference this system. + +Components can be added to the `FlameGame` directly in the constructor with the named `children` +argument, or from anywhere else with the `add`/`addAll` methods. Most of the time however, you want +to add your children to a `World`, the default world exist under `FlameGame.world` and you add +components to it just like you would to any other component. + +A simple `FlameGame` implementation that adds two components, one in `onLoad` and one directly in +the constructor can look like this: + +```dart +import 'package:flame/components.dart'; +import 'package:flame/game.dart'; +import 'package:flutter/widgets.dart'; + +/// A component that renders the crate sprite, with a 16 x 16 size. +class MyCrate extends SpriteComponent { + MyCrate() : super(size: Vector2.all(16)); + + @override + Future onLoad() async { + sprite = await Sprite.load('crate.png'); + } +} + +class MyWorld extends World { + @override + Future onLoad() async { + await add(MyCrate()); + } +} + +void main() { + final myGame = FlameGame(world: MyWorld()); + runApp( + GameWidget(game: myGame), + ); +} +``` + +```{note} +If you instantiate your game in a build method your game will be rebuilt every +time the Flutter tree gets rebuilt, which usually is more often than you'd like. +To avoid this, you can either create an instance of your game first and +reference it within your widget structure or use the `GameWidget.controlled` +constructor. +``` + +To remove components from the list on a `FlameGame` the `remove` or `removeAll` methods can be used. +The first can be used if you just want to remove one component, and the second can be used when you +want to remove a list of components. These methods exist on all `Component`s, including the world. + + +## Game Loop + +The `GameLoop` module is a simple abstraction of the game loop concept. Basically, most games are +built upon two methods: + +- The render method takes the canvas for drawing the current state of the game. +- The update method receives the delta time in microseconds since the last update and allows you to + move to the next state. + +The `GameLoop` is used by all of Flame's `Game` implementations. + + +## Resizing + +Every time the game needs to be resized, for example when the orientation is changed, `FlameGame` +will call all of the `Component`s `onGameResize` methods and it will also pass this information to +the camera and viewport. + +The `FlameGame.camera` controls which point in the coordinate space that should be at the anchor of +your viewfinder, [0,0] is in the center (`Anchor.center`) of the viewport by default. + + +## Lifecycle + +The `FlameGame` lifecycle callbacks, `onLoad`, `render`, etc. are called in the following sequence: + +```{include} diagrams/flame_game_life_cycle.md +``` + +When a `FlameGame` is first added to a `GameWidget` the lifecycle methods `onGameResize`, `onLoad` +and `onMount` will be called in that order. Then `update` and `render` are called in sequence for +every game tick. If the `FlameGame` is removed from the `GameWidget` then `onRemove` is called. +If the `FlameGame` is added to a new `GameWidget` the sequence repeats from `onGameResize`. + +```{note} +The order of `onGameResize`and `onLoad` are reversed from that of other +`Component`s. This is to allow game element sizes to be calculated before +resources are loaded or generated. +``` + +The `onRemove` callback can be used to clean up children and cached data: + +```dart + @override + void onRemove() { + // Optional based on your game needs. + removeAll(children); + processLifecycleEvents(); + Flame.images.clearCache(); + Flame.assets.clearCache(); + // Any other code that you want to run when the game is removed. + } +``` + +```{note} +Clean-up of children and resources in a `FlameGame` is not done automatically +and must be explicitly added to the `onRemove` call. +``` + + +## Debug mode + +Flame's `FlameGame` class provides a variable called `debugMode`, which by default is `false`. It +can, however, be set to `true` to enable debug features for the components of the game. **Be aware** +that the value of this variable is passed through to its components when they are added to the +game, so if you change the `debugMode` at runtime, it will not affect already added components by +default. + +To read more about the `debugMode` on Flame, please refer to the [Debug Docs](other/debug.md) + + +## Change background color + +To change the background color of your `FlameGame` you have to override `backgroundColor()`. + +In the following example, the background color is set to be fully transparent, so that you can see +the widgets that are behind the `GameWidget`. The default is opaque black. + +```dart +class MyGame extends FlameGame { + @override + Color backgroundColor() => const Color(0x00000000); +} +``` + +Note that the background color can't change dynamically while the game is running, but you could +just draw a background that covers the whole canvas if you would want it to change dynamically. + + +## SingleGameInstance mixin + +An optional mixin `SingleGameInstance` can be applied to your game if you are making a single-game +application. This is a common scenario when building games: there is a single full-screen +`GameWidget` that hosts a single `Game` instance. + +Adding this mixin provides performance advantages in certain scenarios. In particular, a component's +`onLoad` method is guaranteed to start when that component is added to its parent, even if the +parent is not yet mounted itself. Consequently, `await`-ing on `parent.add(component)` is guaranteed +to always finish loading the component. + +Using this mixin is simple: + +```dart +class MyGame extends FlameGame with SingleGameInstance { + // ... +} +``` + + +## Low-level Game API + +```{include} diagrams/low_level_game_api.md +``` + +The abstract `Game` class is a low-level API that can be used when you want to implement the +functionality of how the game engine should be structured. `Game` does not implement any `update` or +`render` function for example. + +The class also has the lifecycle methods `onLoad`, `onMount` and `onRemove` in it, which are +called from the `GameWidget` (or another parent) when the game is loaded + mounted, or removed. +`onLoad` is only called the first time the class is added to a parent, but `onMount` (which is +called after `onLoad`) is called every time it is added to a new parent. `onRemove` is called when +the class is removed from a parent. + +```{note} +The `Game` class allows for more freedom of how to implement things, but you +are also missing out on all of the built-in features in Flame if you use it. +``` + +An example of how a `Game` implementation could look like is: + +```dart +class MyGameSubClass extends Game { + @override + void render(Canvas canvas) { + // ... + } + + @override + void update(double dt) { + // ... + } +} + +void main() { + final myGame = MyGameSubClass(); + runApp( + GameWidget( + game: myGame, + ) + ); +} +``` + + +## Pause/Resuming/Stepping game execution + +A Flame `Game` can be paused and resumed in two ways: + +- With the use of the `pauseEngine` and `resumeEngine` methods. +- By changing the `paused` attribute. + +When pausing a `Game`, the `GameLoop` is effectively paused, meaning that no updates or new renders +will happen until it is resumed. + +While the game is paused, it is possible to advanced it frame by frame using the `stepEngine` +method. +It might not be much useful in the final game, but can be very helpful in inspecting game state step +by step during the development cycle. + + +### Backgrounding + +The game will be automatically paused when the app is sent to the background, +and resumed when it comes back to the foreground. This behavior can be disabled by setting +`pauseWhenBackgrounded` to `false`. + +```dart +class MyGame extends FlameGame { + MyGame() { + pauseWhenBackgrounded = false; + } +} +``` + +On the current Flutter stable (3.13), this flag is effectively ignored on +non-mobile platforms including the web. + + +## HasPerformanceTracker mixin + +While optimizing a game, it can be useful to track the time it took for the game to update and render +each frame. This data can help in detecting areas of the code that are running hot. It can also help +in detecting visual areas of the game that are taking the most time to render. + +To get the update and render times, just add the `HasPerformanceTracker` mixin to the game class. + +```dart +class MyGame extends FlameGame with HasPerformanceTracker { + // access `updateTime` and `renderTime` getters. +} +``` diff --git a/docs/1.18.0/_sources/flame/game_widget.md.txt b/docs/1.18.0/_sources/flame/game_widget.md.txt new file mode 100644 index 000000000..b0f841d4c --- /dev/null +++ b/docs/1.18.0/_sources/flame/game_widget.md.txt @@ -0,0 +1,11 @@ +# Game Widget + +```{dartdoc} +:package: flame +:symbol: GameWidget +:file: src/game/game_widget/game_widget.dart + +[ClipRect]: https://api.flutter.dev/flutter/widgets/ClipRect-class.html +[FocusNode]: https://api.flutter.dev/flutter/widgets/FocusNode-class.html +[RepaintBoundary]: https://api.flutter.dev/flutter/widgets/RepaintBoundary-class.html +``` diff --git a/docs/1.18.0/_sources/flame/inputs/drag_events.md.txt b/docs/1.18.0/_sources/flame/inputs/drag_events.md.txt new file mode 100644 index 000000000..43f970b36 --- /dev/null +++ b/docs/1.18.0/_sources/flame/inputs/drag_events.md.txt @@ -0,0 +1,138 @@ +# Drag Events + +**Drag events** occur when the user moves their finger across the screen of the device, or when they +move the mouse while holding its button down. + +Multiple drag events can occur at the same time, if the user is using multiple fingers. Such cases +will be handled correctly by Flame, and you can even keep track of the events by using their +`pointerId` property. + +For those components that you want to respond to drags, add the `DragCallbacks` mixin. + +- This mixin adds four overridable methods to your component: `onDragStart`, `onDragUpdate`, + `onDragEnd`, and `onDragCancel`. By default, these methods do nothing -- they need to be + overridden in order to perform any function. +- In addition, the component must implement the `containsLocalPoint()` method (already implemented + in `PositionComponent`, so most of the time you don't need to do anything here) -- this method + allows Flame to know whether the event occurred within the component or not. + +```dart +class MyComponent extends PositionComponent with DragCallbacks { + MyComponent() : super(size: Vector2(180, 120)); + + @override + void onDragStart(DragStartEvent event) { + // Do something in response to a drag event + } +} +``` + + +## Demo + +In this example you can use drag gestures to either drag star-like shapes across the screen, or to +draw curves inside the magenta rectangle. + +```{flutter-app} +:sources: ../flame/examples +:page: drag_events +:show: widget code +``` + + +## Drag anatomy + + +### onDragStart + +This is the first event that occurs in a drag sequence. Usually, the event will be delivered to the +topmost component at the point of touch with the `DragCallbacks` mixin. However, by setting the flag +`event.continuePropagation` to true, you can allow the event to propagate to the components below. + +The `DragStartEvent` object associated with this event will contain the coordinate of the point +where the event has originated. This point is available in multiple coordinate system: +`devicePosition` is given in the coordinate system of the entire device, `canvasPosition` is in the +coordinate system of the game widget, and `localPosition` provides the position in the component's +local coordinate system. + +Any component that receives `onDragStart` will later be receiving `onDragUpdate` and `onDragEnd` +events as well. + + +### onDragUpdate + +This event is fired continuously as user drags their finger across the screen. It will not fire if +the user is holding their finger still. + +The default implementation delivers this event to all the components that received the previous +`onDragStart` with the same pointer id. If the point of touch is still within the component, then +`event.localPosition` will give the position of that point in the local coordinate system. However, +if the user moves their finger away from the component, the property `event.localPosition` will +return a point whose coordinates are NaNs. Likewise, the `event.renderingTrace` in this case will be +empty. However, the `canvasPosition` and `devicePosition` properties of the event will be valid. + +In addition, the `DragUpdateEvent` will contain `delta` -- the amount the finger has moved since the +previous `onDragUpdate`, or since the `onDragStart` if this is the first drag-update after a drag- +start. + +The `event.timestamp` property measures the time elapsed since the beginning of the drag. It can be +used, for example, to compute the speed of the movement. + + +### onDragEnd + +This event is fired when the user lifts their finger and thus stops the drag gesture. There is no +position associated with this event. + + +### onDragCancel + +The precise semantics when this event occurs is not clear, so we provide a default implementation +which simply converts this event into an `onDragEnd`. + + +## Mixins + + +### DragCallbacks + +The `DragCallbacks` mixin can be added to any `Component` in order for that component to start +receiving drag events. + +This mixin adds methods `onDragStart`, `onDragUpdate`, `onDragEnd`, and `onDragCancel` to the +component, which by default don't do anything, but can be overridden to implement any real +functionality. + +Another crucial detail is that a component will only receive drag events that originate *within* +that component, as judged by the `containsLocalPoint()` function. The commonly-used +`PositionComponent` class provides such an implementation based on its `size` property. Thus, if +your component derives from a `PositionComponent`, then make sure that you set its size correctly. +If, however, your component derives from the bare `Component`, then the `containsLocalPoint()` +method must be implemented manually. + +If your component is a part of a larger hierarchy, then it will only receive drag events if its +ancestors have all implemented the `containsLocalPoint` correctly. + +```dart +class MyComponent extends PositionComponent with DragCallbacks { + MyComponent({super.size}); + + final _paint = Paint(); + bool _isDragged = false; + + @override + void onDragStart(DragStartEvent event) => _isDragged = true; + + @override + void onDragUpdate(DragUpdateEvent event) => position += event.delta; + + @override + void onDragEnd(DragEndEvent event) => _isDragged = false; + + @override + void render(Canvas canvas) { + _paint.color = _isDragged? Colors.red : Colors.white; + canvas.drawRect(size.toRect(), _paint); + } +} +``` diff --git a/docs/1.18.0/_sources/flame/inputs/gesture_input.md.txt b/docs/1.18.0/_sources/flame/inputs/gesture_input.md.txt new file mode 100644 index 000000000..f1e22998e --- /dev/null +++ b/docs/1.18.0/_sources/flame/inputs/gesture_input.md.txt @@ -0,0 +1,239 @@ +# Gesture Input + +This is documentation for gesture inputs attached directly on the game class, most of the time you +want to detect input on your components instead, see for example the [TapCallbacks](tap_events.md) +and [DragCallbacks](drag_events.md) for that. + +For other input documents, see also: + +- [Keyboard Input](keyboard_input.md): for keystrokes +- [Other Inputs](other_inputs.md): For joysticks, game pads, etc. + + +## Intro + +Inside `package:flame/gestures.dart` you can find a whole set of `mixin`s which can be included on +your game class instance to be able to receive touch input events. Below you can see the full list +of these `mixin`s and its methods: + + +## Touch and mouse detectors + +```text +- TapDetector + - onTap + - onTapCancel + - onTapDown + - onLongTapDown + - onTapUp + +- SecondaryTapDetector + - onSecondaryTapDown + - onSecondaryTapUp + - onSecondaryTapCancel + +- TertiaryTapDetector + - onTertiaryTapDown + - onTertiaryTapUp + - onTertiaryTapCancel + +- DoubleTapDetector + - onDoubleTap + +- LongPressDetector + - onLongPress + - onLongPressStart + - onLongPressMoveUpdate + - onLongPressUp + - onLongPressEnd + +- VerticalDragDetector + - onVerticalDragDown + - onVerticalDragStart + - onVerticalDragUpdate + - onVerticalDragEnd + - onVerticalDragCancel + +- HorizontalDragDetector + - onHorizontalDragDown + - onHorizontalDragStart + - onHorizontalDragUpdate + - onHorizontalDragEnd + - onHorizontalDragCancel + +- ForcePressDetector + - onForcePressStart + - onForcePressPeak + - onForcePressUpdate + - onForcePressEnd + +- PanDetector + - onPanDown + - onPanStart + - onPanUpdate + - onPanEnd + - onPanCancel + +- ScaleDetector + - onScaleStart + - onScaleUpdate + - onScaleEnd + +- MultiTouchTapDetector + - onTap + - onTapCancel + - onTapDown + - onTapUp + +- MultiTouchDragDetector + - onReceiveDrag +``` + +Mouse only events + +```text + - MouseMovementDetector + - onMouseMove + - ScrollDetector + - onScroll +``` + + +It is not possible to mix advanced detectors (`MultiTouch*`) with basic detectors of the same +kind, since the advanced detectors will *always win the gesture arena* and the basic detectors will +never be triggered. So for example, you can't use both `MultiTouchTapDetector` and `PanDetector` +together, since no events will be triggered for the latter (there is also an assertion for this). + +Flame's GestureApi is provided by Flutter's Gesture Widgets, including +[GestureDetector widget](https://api.flutter.dev/flutter/widgets/GestureDetector-class.html), +[RawGestureDetector widget](https://api.flutter.dev/flutter/widgets/RawGestureDetector-class.html) +and [MouseRegion widget](https://api.flutter.dev/flutter/widgets/MouseRegion-class.html), you can +also read more about Flutter's gestures +[here](https://api.flutter.dev/flutter/gestures/gestures-library.html). + + +## PanDetector and ScaleDetector + +If you add a `PanDetector` together with a `ScaleDetector` you will be prompted with a quite cryptic +assertion from Flutter that says: + +```{note} +Having both a pan gesture recognizer and a scale gesture recognizer is +redundant; scale is a superset of pan. + +Just use the scale gesture recognizer. +``` + +This might seem strange, but `onScaleUpdate` is not only triggered when the scale should be changed, +but for all pan/drag events too. So if you need to use both of those detectors you'll have to handle +both of their logic inside `onScaleUpdate` (+`onScaleStart` and `onScaleEnd`). + +For example you could do something like this if you want to move the camera on pan events and zoom +on scale events: + +```dart + late double startZoom; + + @override + void onScaleStart(_) { + startZoom = camera.zoom; + } + + @override + void onScaleUpdate(ScaleUpdateInfo info) { + final currentScale = info.scale.global; + if (!currentScale.isIdentity()) { + camera.zoom = startZoom * currentScale.y; + } else { + camera.translateBy(-info.delta.global); + camera.snap(); + } + } +``` + +In the example above the pan events are handled with `info.delta` and the scale events with +`info.scale`, although they are theoretically both from underlying scale events. + +This can also be seen in the +[zoom example](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/camera_and_viewport/zoom_example.dart). + + +## Mouse cursor + +It is also possible to change the current mouse cursor displayed on the `GameWidget` region. To do +so the following code can be used inside the `Game` class + +```dart +mouseCursor.value = SystemMouseCursors.move; +``` + +To already initialize the `GameWidget` with a custom cursor, the `mouseCursor` property can be used + +```dart +GameWidget( + game: MouseCursorGame(), + mouseCursor: SystemMouseCursors.move, +); +``` + + +## Event coordinate system + +On events that have positions, like for example `Tap*` or `Drag`, you will notice that the +`eventPosition` attribute includes 2 fields: `global` and `widget`. Below you will find a brief +explanation about each of them. + + +### global + +The position where the event occurred considering the entire screen, same as +`globalPosition` in Flutter's native events. + + +### widget + +The position where the event occurred relative to the `GameWidget` position and size, same as +`localPosition` in Flutter's native events. + + +## Example + +```dart +class MyGame extends FlameGame with TapDetector { + // Other methods omitted + + @override + bool onTapDown(TapDownInfo info) { + print("Player tap down on ${info.eventPosition.widget}"); + return true; + } + + @override + bool onTapUp(TapUpInfo info) { + print("Player tap up on ${info.eventPosition.widget}"); + return true; + } +} +``` + +You can also check more complete examples +[here](https://github.com/flame-engine/flame/tree/main/examples/lib/stories/input/). + + +### GestureHitboxes + +The `GestureHitboxes` mixin is used to more accurately recognize gestures on top of your +`Component`s. Say that you have a fairly round rock as a `SpriteComponent` for example, then you +don't want to register input that is in the corner of the image where the rock is not displayed, +since a `PositionComponent` is rectangular by default. Then you can use the `GestureHitboxes` mixin +to define a more accurate circle or polygon (or another shape) for which the input should be within +for the event to be registered on your component. + +You can add new hitboxes to the component that has the `GestureHitboxes` mixin just like they are +added in the below `Collidable` example. + +More information about how to define hitboxes can be found in the hitbox section of the +[collision detection](../collision_detection.md#shapehitbox) docs. + +An example of how to use it can be seen +[here](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/gesture_hitboxes_example.dart). diff --git a/docs/1.18.0/_sources/flame/inputs/hardware_keyboard_detector.md.txt b/docs/1.18.0/_sources/flame/inputs/hardware_keyboard_detector.md.txt new file mode 100644 index 000000000..71db8f601 --- /dev/null +++ b/docs/1.18.0/_sources/flame/inputs/hardware_keyboard_detector.md.txt @@ -0,0 +1,12 @@ +# HardwareKeyboardDetector + +```{dartdoc} +:file: src/events/hardware_keyboard_detector.dart +:symbol: HardwareKeyboardDetector +:package: flame + +[HardwareKeyboard]: https://api.flutter.dev/flutter/services/HardwareKeyboard-class.html +[KeyDownEvent]: https://api.flutter.dev/flutter/services/KeyDownEvent-class.html +[KeyUpEvent]: https://api.flutter.dev/flutter/services/KeyUpEvent-class.html +[KeyRepeatEvent]: https://api.flutter.dev/flutter/services/KeyRepeatEvent-class.html +``` diff --git a/docs/1.18.0/_sources/flame/inputs/inputs.md.txt b/docs/1.18.0/_sources/flame/inputs/inputs.md.txt new file mode 100644 index 000000000..dc5a4d7a0 --- /dev/null +++ b/docs/1.18.0/_sources/flame/inputs/inputs.md.txt @@ -0,0 +1,20 @@ +# Inputs + +- [Tap Events](tap_events.md) +- [Drag Events](drag_events.md) +- [Gesture Input](gesture_input.md) +- [Keyboard Input](keyboard_input.md) +- [Other Inputs and Helpers](other_inputs.md) +- [Hardware Keyboard Detector](hardware_keyboard_detector.md) + +```{toctree} +:hidden: + +Drag Events +Gesture Input +Keyboard Input +Other Inputs +Tap Events +Pointer Events +HardwareKeyboardDetector +``` diff --git a/docs/1.18.0/_sources/flame/inputs/keyboard_input.md.txt b/docs/1.18.0/_sources/flame/inputs/keyboard_input.md.txt new file mode 100644 index 000000000..3aab488f6 --- /dev/null +++ b/docs/1.18.0/_sources/flame/inputs/keyboard_input.md.txt @@ -0,0 +1,136 @@ +# Keyboard Input + +This includes documentation for keyboard inputs. + +For other input documents, see also: + +- [Gesture Input](gesture_input.md): for mouse and touch pointer gestures +- [Other Inputs](other_inputs.md): For joysticks, game pads, etc. + + +## Intro + +The keyboard API on flame relies on the +[Flutter's Focus widget](https://api.flutter.dev/flutter/widgets/Focus-class.html). + +To customize focus behavior, see [Controlling focus](#controlling-focus). + +There are two ways a game can react to key strokes; at the game level and at a component level. +For each we have a mixin that can me added to a `Game` or `Component` class. + + +### Receive keyboard events in a game level + +To make a `Game` sub class sensitive to key stroke, mix it with `KeyboardEvents`. + +After that, it will be possible to override an `onKeyEvent` method. + +This method receives two parameters, first the +[`KeyEvent`](https://api.flutter.dev/flutter/services/KeyEvent-class.html) +that triggers the callback in the first place. The second is a set of the currently pressed +[`LogicalKeyboardKey`](https://api.flutter.dev/flutter/services/LogicalKeyboardKey-class.html). + +The return value is a +[`KeyEventResult`](https://api.flutter.dev/flutter/widgets/KeyEventResult.html). + +`KeyEventResult.handled` will tell the framework that the key stroke was resolved inside of Flame +and skip any other keyboard handler widgets apart of `GameWidget`. + +`KeyEventResult.ignored` will tell the framework to keep testing this event in any other keyboard +handler widget apart of `GameWidget`. If the event is not resolved by any handler, the framework +will trigger `SystemSoundType.alert`. + +`KeyEventResult.skipRemainingHandlers` is very similar to `.ignored`, apart from the fact that will +skip any other handler widget and will straight up play the alert sound. + +Minimal example: + +```dart +class MyGame extends FlameGame with KeyboardEvents { + // ... + @override + KeyEventResult onKeyEvent( + KeyEvent event, + Set keysPressed, + ) { + final isKeyDown = event is KeyDownEvent; + + final isSpace = keysPressed.contains(LogicalKeyboardKey.space); + + if (isSpace && isKeyDown) { + if (keysPressed.contains(LogicalKeyboardKey.altLeft) || + keysPressed.contains(LogicalKeyboardKey.altRight)) { + this.shootHarder(); + } else { + this.shoot(); + } + return KeyEventResult.handled; + } + return KeyEventResult.ignored; + } +} +``` + + +### Receive keyboard events in a component level + +To receive keyboard events directly in components, there is the mixin `KeyboardHandler`. + +Similarly to `TapCallbacks` and `DragCallbacks`, `KeyboardHandler` can be mixed into any subclass of +`Component`. + +KeyboardHandlers must only be added to games that are mixed with `HasKeyboardHandlerComponents`. + +> ⚠️ Note: If `HasKeyboardHandlerComponents` is used, you must remove `KeyboardEvents` +> from the game mixin list to avoid conflicts. + +After applying `KeyboardHandler`, it will be possible to override an `onKeyEvent` method. + +This method receives two parameters. First the +[`KeyEvent`](https://api.flutter.dev/flutter/services/KeyEvent-class.html) +that triggered the callback in the first place. The second is a set of the currently pressed +[`LogicalKeyboardKey`](https://api.flutter.dev/flutter/services/LogicalKeyboardKey-class.html)s. + +The returned value should be `true` to allow the continuous propagation of the key event among other +components. To not allow any other component to receive the event, return `false`. + +Flame also provides a default implementation called `KeyboardListenerComponent` which can be used +to handle keyboard events. Like any other component, it can be added as a child to a `FlameGame` +or another `Component`: + +For example, imagine a `PositionComponent` which has methods to move on the X and Y axis, +then the following code could be used to bind those methods to key events: + +```dart +add( + KeyboardListenerComponent( + keyUp: { + LogicalKeyboardKey.keyA: (keysPressed) { ... }, + LogicalKeyboardKey.keyD: (keysPressed) { ... }, + LogicalKeyboardKey.keyW: (keysPressed) { ... }, + LogicalKeyboardKey.keyS: (keysPressed) { ... }, + }, + keyDown: { + LogicalKeyboardKey.keyA: (keysPressed) { ... }, + LogicalKeyboardKey.keyD: (keysPressed) { ... }, + LogicalKeyboardKey.keyW: (keysPressed) { ... }, + LogicalKeyboardKey.keyS: (keysPressed) { ... }, + }, + ), +); +``` + + +### Controlling focus + +On the widget level, it is possible to use the +[`FocusNode`](https://api.flutter.dev/flutter/widgets/FocusNode-class.html) API to control whether +the game is focused or not. + +`GameWidget` has an optional `focusNode` parameter that allow its focus to be controlled externally. + +By default `GameWidget` has its `autofocus` set to true, which means it will get focused once it is +mounted. To override that behavior, set `autofocus` to false. + +For a more complete example see +[here](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/keyboard_example.dart). diff --git a/docs/1.18.0/_sources/flame/inputs/other_inputs.md.txt b/docs/1.18.0/_sources/flame/inputs/other_inputs.md.txt new file mode 100644 index 000000000..5e86acf1e --- /dev/null +++ b/docs/1.18.0/_sources/flame/inputs/other_inputs.md.txt @@ -0,0 +1,183 @@ +# Other Inputs and Helpers + +This includes documentation for input methods besides keyboard and mouse. + +For other input documents, see also: + +- [Gesture Input](gesture_input.md): for mouse and touch pointer gestures +- [Keyboard Input](keyboard_input.md): for keystrokes + + +## Joystick + +Flame provides a component capable of creating a virtual joystick for taking input for your game. +To use this feature, you need to create a `JoystickComponent`, configure it the way you want, and +add it to your game. + +Check out the following example to get a better understanding: + +```dart +class MyGame extends FlameGame { + + @override + Future onLoad() async { + super.onLoad(); + final image = await images.load('joystick.png'); + final sheet = SpriteSheet.fromColumnsAndRows( + image: image, + columns: 6, + rows: 1, + ); + final joystick = JoystickComponent( + knob: SpriteComponent( + sprite: sheet.getSpriteById(1), + size: Vector2.all(100), + ), + background: SpriteComponent( + sprite: sheet.getSpriteById(0), + size: Vector2.all(150), + ), + margin: const EdgeInsets.only(left: 40, bottom: 40), + ); + + final player = Player(joystick); + add(player); + add(joystick); + } +} + +class Player extends SpriteComponent with HasGameRef { + Player(this.joystick) + : super( + anchor: Anchor.center, + size: Vector2.all(100.0), + ); + + /// Pixels/s + double maxSpeed = 300.0; + + final JoystickComponent joystick; + + @override + Future onLoad() async { + sprite = await gameRef.loadSprite('layers/player.png'); + position = gameRef.size / 2; + } + + @override + void update(double dt) { + if (joystick.direction != JoystickDirection.idle) { + position.add(joystick.relativeDelta * maxSpeed * dt); + angle = joystick.delta.screenAngle(); + } + } +} +``` + +In this example, we created the classes `MyGame` and `Player`. +`MyGame` creates a joystick which is passed to the `Player` when the latter is created. +In the `Player` class we act upon the current state of the joystick. + +The joystick has a few fields that change depending on what state it is in. + +Following fields should be used to know the state of the joystick: + +- `intensity`: The percentage [0.0, 1.0] that the knob is dragged from the epicenter to the edge of + the joystick (or `knobRadius` if that is set). +- `delta`: The absolute amount (defined as a `Vector2`) that the knob is dragged from its epicenter. +- `relativeDelta`: The percentage, presented as a `Vector2`, and direction that the knob is currently + pulled from its base position to a edge of the joystick. + +If you want to create buttons to go with your joystick, check out +[`HudButtonComponent`](#hudbuttoncomponent). + +For the complete code on implementing the joystick, check out the +[Joystick Example](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/joystick_example.dart). +You can also view the +[JoystickComponent in action](https://examples.flame-engine.org/#/Input_Joystick) +to see a live example of the joystick input function integrated into a game. + +For an additional challenge, explore the +[Advanced Joystick Example](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/joystick_advanced_example.dart). +See what else the advanced features can do in the +[live demo](https://examples.flame-engine.org/#/Input_Joystick_Advanced). + + +## HudButtonComponent + +A `HudButtonComponent` is a button that can be defined with margins to the edge of the `Viewport` +instead of with a position. It takes two `PositionComponent`s. `button` and `buttonDown`, the first +is used for when the button is idle and the second is shown when the button is being pressed. The +second one is optional if you don't want to change the look of the button when it is pressed, or if +you handle this through the `button` component. + +As the name suggests this button is a hud by default, which means that it will be static on your +screen even if the camera for the game moves around. You can also use this component as a non-hud by +setting `hudButtonComponent.respectCamera = true;`. + +If you want to act upon the button being pressed (which would be the common thing to do) and released, +you can either pass in callback functions as the `onPressed` and `onReleased` arguments, or you can +extend the component and override `onTapDown`, `onTapUp` and/or `onTapCancel` and implement your +logic there. + + +## SpriteButtonComponent + +A `SpriteButtonComponent` is a button that is defined by two `Sprite`s, one that represents +when the button is pressed and one that represents when the button is released. + + +## ButtonComponent + +A `ButtonComponent` is a button that is defined by two `PositionComponent`s, one that represents +when the button is pressed and one that represents when the button is released. If you only want +to use sprites for the button, use the [](#spritebuttoncomponent) instead, but this component can be +good to use if you for example want to have a `SpriteAnimationComponent` as a button, or anything +else which isn't a pure sprite. + + +## Gamepad + +Flame has a dedicated plugin to support external game controllers (gamepads). +Find more information in the [Gamepads repository](https://github.com/flame-engine/gamepad). + + +## AdvancedButtonComponent + +The `AdvancedButtonComponent` have separate states for each of the different pointer phases. +The skin can be customized for each state and each skin is represented by a `PositionComponent`. + +These are the fields that can be used to customize the looks of the `AdvancedButtonComponent`: + +- `defaultSkin`: Component that will be displayed by default on the button. +- `downSkin`: Component displayed when the button is clicked or tapped. +- `hoverSkin`: Component displayed when the button is hovered. (desktop and web). +- `defaultLabel`: Component shown on top of skins. Automatically aligned to center. +- `disabledSkin`: Component displayed when button is disabled. +- `disabledLabel`: Component shown on top of skins when button is disabled. + + +## ToggleButtonComponent + +The [ToggleButtonComponent] is an [AdvancedButtonComponent] that can switch between selected +and not selected. + +In addition to the already existing skins, the [ToggleButtonComponent] contains the following skins: + +- `defaultSelectedSkin`: The component to display when the button is selected. +- `downAndSelectedSkin`: The component that is displayed when the selectable button is selected and + pressed. +- `hoverAndSelectedSkin`: Hover on selectable and selected button (desktop and web). +- `disabledAndSelectedSkin`: For when the button is selected and in the disabled state. +- `defaultSelectedLabel`: Component shown on top of the skins when button is selected. + + +## IgnoreEvents mixin + +If you don't want a component subtree to receive events, you can use the `IgnoreEvents` mixin. +Once you have added this mixin you can turn off events to reach a component and its descendants by +setting `ignoreEvents = true` (default when the mixin is added), and then set it to `false` when you +want to receive events again. + +This can be done for optimization purposes, since all events currently go through the whole +component tree. diff --git a/docs/1.18.0/_sources/flame/inputs/pointer_events.md.txt b/docs/1.18.0/_sources/flame/inputs/pointer_events.md.txt new file mode 100644 index 000000000..9cac3e8d2 --- /dev/null +++ b/docs/1.18.0/_sources/flame/inputs/pointer_events.md.txt @@ -0,0 +1,84 @@ +# Pointer Events + +```{note} +This document describes the new events API. The old (legacy) approach, +which is still supported, is described in [](gesture_input.md). +``` + +**Pointer events** are Flutter's generalized "mouse-movement"-type events (for desktop or web). + +If you want to interact with mouse movement events within your component or game, you can use the +`PointerMoveCallbacks` mixin. + +For example: + +```dart +class MyComponent extends PositionComponent with PointerMoveCallbacks { + MyComponent() : super(size: Vector2(80, 60)); + + @override + void onPointerMove(PointerMoveEvent event) { + // Do something in response to the mouse move (e.g. update coordinates) + } +} +``` + +The mixin adds two overridable methods to your component: + +- `onPointerMove`: called when the mouse moves within the component +- `onPointerMoveStop`: called once if the component was being hovered and the mouse leaves + +By default, each of these methods does nothing, they need to be overridden in order to perform any +function. + +In addition, the component must implement the `containsLocalPoint()` method (already implemented in +`PositionComponent`, so most of the time you don't need to do anything here) -- this method allows +Flame to know whether the event occurred within the component or not. + +Note that only mouse events happening within your component will be proxied along. However, +`onPointerMoveStop` will be fired once on the first mouse movement that leaves your component, so +you can handle any exit conditions there. + + +## HoverCallbacks + +If you want to specifically know if your component is being hovered or not, or if you want to hook +into hover enter and exist events, you can use a more dedicated mixin called `HoverCallbacks`. + +For example: + +```dart +class MyComponent extends PositionComponent with HoverCallbacks { + + MyComponent() : super(size: Vector2(80, 60)); + + @override + void update(double dt) { + // use `isHovered` to know if the component is being hovered + } + + @override + void onHoverEnter() { + // Do something in response to the mouse entering the component + } + + @override + void onHoverExit() { + // Do something in response to the mouse leaving the component + } +} +``` + +Note that you can still listen to the "raw" onPointerMove methods for additional functionality, just +make sure to call the `super` version to enable the `HoverCallbacks` behavior. + + +### Demo + +Play with the demo below to see the pointer hover events in action. + +```{flutter-app} +:sources: ../flame/examples +:page: pointer_events +:show: widget code +``` diff --git a/docs/1.18.0/_sources/flame/inputs/tap_events.md.txt b/docs/1.18.0/_sources/flame/inputs/tap_events.md.txt new file mode 100644 index 000000000..c863e93d1 --- /dev/null +++ b/docs/1.18.0/_sources/flame/inputs/tap_events.md.txt @@ -0,0 +1,218 @@ +# Tap Events + +```{note} +This document describes the new events API. The old (legacy) approach, +which is still supported, is described in [](gesture_input.md). +``` + +**Tap events** are one of the most basic methods of interaction with a Flame game. These events +occur when the user touches the screen with a finger, or clicks with a mouse, or taps with a stylus. +A tap can be "long", but the finger isn't supposed to move during the gesture. Thus, touching the +screen, then moving the finger, and then releasing -- is not a tap but a drag. Similarly, clicking +a mouse button while the mouse is moving will also be registered as a drag. + +Multiple tap events can occur at the same time, especially if the user has multiple fingers. Such +cases will be handled correctly by Flame, and you can even keep track of the events by using their +`pointerId` property. + +For those components that you want to respond to taps, add the `TapCallbacks` mixin. + +- This mixin adds four overridable methods to your component: `onTapDown`, `onTapUp`, + `onTapCancel`, and `onLongTapDown`. By default, each of these methods does nothing, they need + to be overridden in order to perform any function. +- In addition, the component must implement the `containsLocalPoint()` method (already implemented + in `PositionComponent`, so most of the time you don't need to do anything here) -- this method + allows Flame to know whether the event occurred within the component or not. + +```dart +class MyComponent extends PositionComponent with TapCallbacks { + MyComponent() : super(size: Vector2(80, 60)); + + @override + void onTapUp(TapUpEvent event) { + // Do something in response to a tap event + } +} +``` + + +## Tap anatomy + + +### onTapDown + +Every tap begins with a "tap down" event, which you receive via the `void onTapDown(TapDownEvent)` +handler. The event is delivered to the first component located at the point of touch that has the +`TapCallbacks` mixin. Normally, the event then stops propagation. However, you can force the event +to also be delivered to the components below by setting `event.continuePropagation` to true. + +The `TapDownEvent` object that is passed to the event handler, contains the available information +about the event. For example, `event.localPosition` will contain the coordinate of the event in the +current component's local coordinate system, whereas `event.canvasPosition` is in the coordinate +system of the entire game canvas. + +Every component that received an `onTapDown` event will eventually receive either `onTapUp` or +`onTapCancel` with the same `pointerId`. + + +### onLongTapDown + +If the user holds their finger down for some time (as configured by the `.longTapDelay` property +in `MultiTapDispatcher`), "long tap" will be triggered. This event invokes the +`void onLongTapDown(TapDownEvent)` handler on those components that previously received the +`onTapDown` event. + +By default, the `.longTapDelay` is set to 300 milliseconds, what may be different of the system default. +You can change this value by setting the `TapConfig.longTapDelay` value. +It may also be useful for specific accessibility needs. + + +### onTapUp + +This event indicates successful completion of the tap sequence. It is guaranteed to only be +delivered to those components that previously received the `onTapDown` event with the same pointer +id. + +The `TapUpEvent` object passed to the event handler contains the information about the event, which +includes the coordinate of the event (i.e. where the user was touching the screen right before +lifting their finger), and the event's `pointerId`. + +Note that the device coordinates of the tap-up event will be the same (or very close) to the device +coordinates of the corresponding tap-down event. However, the same cannot be said about the local +coordinates. If the component that you're tapping is moving (as they often tend to in games), then +you may find that the local tap-up coordinates are quite different from the local tap-down +coordinates. + +In extreme case, when the component moves away from the point of touch, the `onTapUp` event will not +be generated at all: it will be replaced with `onTapCancel`. Note, however, that in this case the +`onTapCancel` will be generated at the moment the user lifts or moves their finger, not at the +moment the component moves away from the point of touch. + + +### onTapCancel + +This event occurs when the tap fails to materialize. Most often, this will happen if the user moves +their finger, which converts the gesture from "tap" into "drag". Less often, this may happen when +the component being tapped moves away from under the user's finger. Even more rarely, the +`onTapCancel` occurs when another widget pops over the game widget, or when the device turns off, +or similar situations. + +The `TapCancelEvent` object contains only the `pointerId` of the previous `TapDownEvent` which is +now being canceled. There is no position associated with a tap-cancel. + + +### Demo + +Play with the demo below to see the tap events in action. + +The blue-ish rectangle in the middle is the component that has the `TapCallbacks` mixin. Tapping +this component would create circles at the points of touch. Specifically, `onTapDown` event +starts making the circle. The thickness of the circle will be proportional to the duration of the +tap: after `onTapUp` the circle's stroke width will no longer grow. There will be a thin white +stripe at the moment the `onLongTapDown` fires. Lastly, the circle will implode and disappear if +you cause the `onTapCancel` event by moving the finger. + +```{flutter-app} +:sources: ../flame/examples +:page: tap_events +:show: widget code +``` + + +## Mixins + +This section describes in more details several mixins needed for tap event handling. + + +### TapCallbacks + +The `TapCallbacks` mixin can be added to any `Component` in order for that component to start +receiving tap events. + +This mixin adds methods `onTapDown`, `onLongTapDown`, `onTapUp`, and `onTapCancel` to the component, +which by default don't do anything, but can be overridden to implement any real functionality. There +is no need to override all of them either: for example, you can override only `onTapUp` if you wish +to respond to "real" taps only. + +Another crucial detail is that a component will only receive tap events that occur *within* that +component, as judged by the `containsLocalPoint()` function. The commonly-used `PositionComponent` +class provides such an implementation based on its `size` property. Thus, if your component derives +from a `PositionComponent`, then make sure that you set its size correctly. If, however, your +component derives from the bare `Component`, then the `containsLocalPoint()` method must be +implemented manually. + +If your component is a part of a larger hierarchy, then it will only receive tap events if its +parent has implemented the `containsLocalPoint` correctly. + +```dart +class MyComponent extends Component with TapCallbacks { + final _rect = const Rect.fromLTWH(0, 0, 100, 100); + final _paint = Paint(); + bool _isPressed = false; + + @override + bool containsLocalPoint(Vector2 point) => _rect.contains(point.toOffset()); + + @override + void onTapDown(TapDownEvent event) => _isPressed = true; + + @override + void onTapUp(TapUpEvent event) => _isPressed = false; + + @override + void onTapCancel(TapCancelEvent event) => _isPressed = false; + + @override + void render(Canvas canvas) { + _paint.color = _isPressed? Colors.red : Colors.white; + canvas.drawRect(_rect, _paint); + } +} +``` + + +### DoubleTapCallbacks + +Flame also offers a mixin named `DoubleTapCallbacks` to receive a double-tap event from the +component. To start receiving double tap events in a component, add the +`DoubleTapCallbacks` mixin to your `PositionComponent`. + +```dart +class MyComponent extends PositionComponent with DoubleTapCallbacks { + @override + void onDoubleTapUp(DoubleTapEvent event) { + /// Do something + } + + @override + void onDoubleTapCancel(DoubleTapCancelEvent event) { + /// Do something + } + + @override + void onDoubleTapDown(DoubleTapDownEvent event) { + /// Do something + } +``` + + +## Migration + +If you have an existing game that uses `Tappable`/`Draggable` mixins, then this section will +describe how to transition to the new API described in this document. Here's what you need to do: + +Take all of your components that uses these mixins, and replace them with +`TapCallbacks`/`DragCallbacks`. +The methods `onTapDown`, `onTapUp`, `onTapCancel` and `onLongTapDown` will need to be adjusted +for the new API: + +- The argument pair such as `(int pointerId, TapDownDetails details)` was replaced with a single + event object `TapDownEvent event`. +- There is no return value anymore, but if you need to make a component to pass-through the taps + to the components below, then set `event.continuePropagation` to true. This is only needed for + `onTapDown` events -- all other events will pass-through automatically. +- If your component needs to know the coordinates of the point of touch, use + `event.localPosition` instead of computing it manually. Properties `event.canvasPosition` and + `event.devicePosition` are also available. +- If the component is attached to a custom ancestor then make sure that ancestor also have the + correct size or implement `containsLocalPoint()`. diff --git a/docs/1.18.0/_sources/flame/layout/align_component.md.txt b/docs/1.18.0/_sources/flame/layout/align_component.md.txt new file mode 100644 index 000000000..61747b993 --- /dev/null +++ b/docs/1.18.0/_sources/flame/layout/align_component.md.txt @@ -0,0 +1,10 @@ +# AlignComponent + +```{dartdoc} +:package: flame +:symbol: AlignComponent +:file: src/layout/align_component.dart + +[Align]: https://api.flutter.dev/flutter/widgets/Align-class.html +[Alignment]: https://api.flutter.dev/flutter/painting/Alignment-class.html +``` diff --git a/docs/1.18.0/_sources/flame/layout/layout.md.txt b/docs/1.18.0/_sources/flame/layout/layout.md.txt new file mode 100644 index 000000000..0c12289e2 --- /dev/null +++ b/docs/1.18.0/_sources/flame/layout/layout.md.txt @@ -0,0 +1,9 @@ +# Layout + +- [Align Component](align_component.md) + +```{toctree} +:hidden: + +AlignComponent +``` diff --git a/docs/1.18.0/_sources/flame/other/debug.md.txt b/docs/1.18.0/_sources/flame/other/debug.md.txt new file mode 100644 index 000000000..fd7abbea1 --- /dev/null +++ b/docs/1.18.0/_sources/flame/other/debug.md.txt @@ -0,0 +1,87 @@ +# Debug features + + +## FlameGame features + +Flame provides some debugging features for the `FlameGame` class. These features are enabled when +the `debugMode` property is set to `true` (or overridden to be `true`). +When `debugMode` is enabled, each `PositionComponent` will be rendered with their bounding size, and +have their positions written on the screen. This way, you can visually verify the components +boundaries and positions. + +Check out this [working example of the debugging features of the `FlameGame`](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/components/debug_example.dart). + + +## Devtools extension + +If you open the [Flutter DevTools](https://docs.flutter.dev/tools/devtools/overview), you will see a +new tab called "Flame". This tab will show you information about the current game, for example a +visualization of the component tree, the ability to play, pause and step the game, information +about the selected component, and more. + + +## FPS + +The FPS reported from Flame might be a bit lower than what is reported from for example the Flutter +DevTools, depending on which platform you are targeting. The source of truth for how many FPS your +game is running in should be the FPS that we are reporting, since that is what our game loop is +bound by. + + +### FpsComponent + +The `FpsComponent` can be added to anywhere in the component tree and will keep track of how many +FPS that the game is currently rendering in. If you want to display this as text in the game, use +the [](#fpstextcomponent). + + +### FpsTextComponent + +The `FpsTextComponent` is simply a [TextComponent] that wraps an `FpsComponent`, since you most +commonly want to show the current FPS somewhere when the `FpsComponent` is used. + + +[TextComponent]: ../rendering/text_rendering.md#textcomponent + + +### ChildCounterComponent + +`ChildCounterComponent` is a component that renders the number of children of +type `T` from a component (`target`) every second. So for example: + +So for example, the following will render the number of `SpriteAnimationComponent` that are +children of the game `world`: + +```dart +add( + ChildCounterComponent( + target: world, + ), +); +``` + + +### TimeTrackComponent + +This component allows developers to track time spent inside their code. This can be useful for +performance debugging time spent in certain parts of the code. + +To use it, add it to your game somewhere (since this is a debug feature, we advise to only add the +component in a debug build/flavor): + +```dart +add(TimeTrackComponent()); +``` + +Then in the code section that you want to track time, do the following: + +```dart +void update(double dt) { + TimeTrackComponent.start('MyComponent.update'); + // ... + TimeTrackComponent.end('MyComponent.update'); +} +``` + +With the calls above, the added `TimeTrackComponent` will render the elapsed time in +microseconds. diff --git a/docs/1.18.0/_sources/flame/other/other.md.txt b/docs/1.18.0/_sources/flame/other/other.md.txt new file mode 100644 index 000000000..4f7517ca9 --- /dev/null +++ b/docs/1.18.0/_sources/flame/other/other.md.txt @@ -0,0 +1,13 @@ +# Other + +- [Debugging](debug.md) +- [Utils](util.md) +- [Widgets](widgets.md) + +```{toctree} +:hidden: + +Debugging +Utils +Widgets +``` diff --git a/docs/1.18.0/_sources/flame/other/util.md.txt b/docs/1.18.0/_sources/flame/other/util.md.txt new file mode 100644 index 000000000..11a36ee82 --- /dev/null +++ b/docs/1.18.0/_sources/flame/other/util.md.txt @@ -0,0 +1,345 @@ +# Util + +On this page you can find documentation for some utility classes and methods. + + +## Device Class + +This class can be accessed from `Flame.device` and it has some methods that can be used to control +the state of the device, for instance you can change the screen orientation and set whether the +application should be fullscreen or not. + + +### `Flame.device.fullScreen()` + +When called, this disables all `SystemUiOverlay` making the app full screen. +When called in the main method, it makes your app full screen (no top nor bottom bars). + +**Note:** It has no effect when called on the web. + + +### `Flame.device.setLandscape()` + +This method sets the orientation of the whole application (effectively, also the game) to landscape +and depending on operating system and device setting, should allow both left and right landscape +orientations. To set the app orientation to landscape on a specific direction, use either +`Flame.device.setLandscapeLeftOnly` or `Flame.device.setLandscapeRightOnly`. + +**Note:** It has no effect when called on the web. + + +### `Flame.device.setPortrait()` + +This method sets the orientation of the whole application (effectively, also the game) to portrait +and depending on operating system and device setting, it should allow for both up and down portrait +orientations. To set the app orientation to portrait for a specific direction, use either +`Flame.device.setPortraitUpOnly` or `Flame.device.setPortraitDownOnly`. + +**Note:** It has no effect when called on the web. + + +### `Flame.device.setOrientation()` and `Flame.device.setOrientations()` + +If a finer control of the allowed orientations is required (without having to deal with +`SystemChrome` directly), `setOrientation` (accepts a single `DeviceOrientation` as a parameter) and +`setOrientations` (accepts a `List` for possible orientations) can be used. + +**Note:** It has no effect when called on the web. + + +## Timer + +Flame provides a simple utility class to help you handle countdowns and timer state changes like +events. + +Countdown example: + +```dart +import 'package:flame/components.dart'; +import 'package:flame/game.dart'; +import 'package:flame/input.dart'; +import 'package:flutter/material.dart'; + +class MyGame extends Game { + final TextPaint textPaint = TextPaint( + style: const TextStyle(color: Colors.white, fontSize: 20), + ); + + final countdown = Timer(2); + + @override + void update(double dt) { + countdown.update(dt); + if (countdown.finished) { + // Prefer the timer callback, but this is better in some cases + } + } + + @override + void render(Canvas canvas) { + textPaint.render( + canvas, + "Countdown: ${countdown.current.toString()}", + Vector2(10, 100), + ); + } +} + +``` + +Interval example: + +```dart +import 'package:flame/components.dart'; +import 'package:flame/game.dart'; +import 'package:flame/input.dart'; +import 'package:flutter/material.dart'; + +class MyGame extends Game { + final TextPaint textPaint = TextPaint( + style: const TextStyle(color: Colors.white, fontSize: 20), + ); + Timer interval; + + int elapsedSecs = 0; + + MyGame() { + interval = Timer( + 1, + onTick: () => elapsedSecs += 1, + repeat: true, + ); + } + + @override + void update(double dt) { + interval.update(dt); + } + + @override + void render(Canvas canvas) { + textPaint.render(canvas, "Elapsed time: $elapsedSecs", Vector2(10, 150)); + } +} + +``` + +`Timer` instances can also be used inside a `FlameGame` game by using the `TimerComponent` class. + +`TimerComponent` example: + +```dart +import 'package:flame/timer.dart'; +import 'package:flame/components.dart'; +import 'package:flame/game.dart'; + +class MyFlameGame extends FlameGame { + MyFlameGame() { + add( + TimerComponent( + period: 10, + repeat: true, + onTick: () => print('10 seconds elapsed'), + ) + ); + } +} +``` + + +## Time Scale + +In many games it is often desirable to create slow-motion or fast-forward effects based on some in +game events. A very common approach to achieve these results is to manipulate the in game time or +tick rate. + +To make this manipulation easier, Flame provides a `HasTimeScale` mixin. This mixin can be attached +to any Flame `Component` and exposes a simple get/set API for `timeScale`. The default value of +`timeScale` is `1`, implying in-game time of the component is running at the same speed as real life +time. Setting it to `2` will make the component tick twice as fast and setting it to `0.5` will make +it tick at half the speed as compared to real life time. + +Since `FlameGame` is a `Component` too, this mixin can be attached to the `FlameGame` as well. Doing +so will allow controlling time scale for all the component of the game from a single place. + +```{flutter-app} +:sources: ../flame/examples +:page: time_scale +:show: widget code infobox +:width: 180 +:height: 160 +``` + +```dart +import 'package:flame/components.dart'; +import 'package:flame/game.dart'; + +class MyFlameGame extends FlameGame with HasTimeScale { + void speedUp(){ + timeScale = 2.0; + } + + void slowDown(){ + timeScale = 1.0; + } +} +``` + + +## Extensions + +Flame bundles a collection of utility extensions, these extensions are meant to help the developer +with shortcuts and conversion methods, here you can find the summary of those extensions. + +They can all be imported from `package:flame/extensions.dart` + + +### Canvas + +Methods: + +- `scaleVector`: Just like `canvas scale` method, but takes a `Vector2` as an argument. +- `translateVector`: Just like `canvas translate` method, but takes a `Vector2` as an argument. +- `renderPoint`: renders a single point on the canvas (mostly for debugging purposes). +- `renderAt` and `renderRotated`: if you are directly rendering to the `Canvas`, you can use these + functions to easily manipulate coordinates to render things on the correct places. They change the + `Canvas` transformation matrix but reset afterwards. + + +### Color + +Methods: + +- `darken`: Darken the shade of the color by an amount between 0 to 1. +- `brighten`: Brighten the shade of the color by an amount between 0 to 1. + +Factories: + +- `ColorExtension.fromRGBHexString`: Parses an RGB color from a valid hex string (e.g. #1C1C1C). +- `ColorExtension.fromARGBHexString`: Parses an ARGB color from a valid hex string (e.g. #FF1C1C1C). + + +### Image + +Methods: + +- `pixelsInUint8`: Retrieves the pixel data as a `Uint8List`, in the `ImageByteFormat.rawRgba` + pixel format, for the image. +- `getBoundingRect`: Get the bounding rectangle of the `Image` as a `Rect`. +- `size`: The size of an `Image` as `Vector2`. +- `darken`: Darken each pixel of the `Image` by an amount between 0 to 1. +- `brighten`: Brighten each pixel of the `Image` by an amount between 0 to 1. + + +### Offset + +Methods; + +- `toVector2`; Creates an `Vector2` from the `Offset`. +- `toSize`: Creates a `Size` from the `Offset`. +- `toPoint`: Creates a `Point` from the `Offset`. +- `toRect`: Creates a `Rect` starting in (0,0) and its bottom right corner is the [Offset]. + + +### Rect + +Methods: + +- `toOffset`: Creates an `Offset` from the `Rect`. +- `toVector2`: Creates a `Vector2` starting in (0,0) and goes to the size of the `Rect`. +- `containsPoint` Whether this `Rect` contains a `Vector2` point or not. +- `intersectsSegment`; Whether the segment formed by two `Vector2`s intersects this `Rect`. +- `intersectsLineSegment`: Whether the `LineSegment` intersects the `Rect`. +- `toVertices`: Turns the four corners of the `Rect` into a list of `Vector2`. +- `toFlameRectangle`: Converts this `Rect` into a Flame `Rectangle`. +- `toMathRectangle`: Converts this `Rect` into a `math.Rectangle`. +- `toGeometryRectangle`: Converts this `Rect` into a `Rectangle` from flame-geom. +- `transform`: Transforms the `Rect` using a `Matrix4`. + +Factories: + +- `RectExtension.getBounds`: Construct a `Rect` that represents the bounds of a list of `Vector2`s. +- `RectExtension.fromCenter`: Construct a `Rect` from a center point (using `Vector2`). + + +### math.Rectangle + +Methods: + +- `toRect`: Converts this math `Rectangle` into an ui `Rect`. + + +### Size + +Methods: + +- `toVector2`; Creates an `Vector2` from the `Size`. +- `toOffset`: Creates a `Offset` from the `Size`. +- `toPoint`: Creates a `Point` from the `Size`. +- `toRect`: Creates a `Rect` starting in (0,0) with the size of `Size`. + + +### Vector2 + +This class comes from the `vector_math` package and we have some useful extension methods on top of +what is offered by that package. + +Methods: + +- `toOffset`: Creates a `Offset` from the `Vector2`. +- `toPoint`: Creates a `Point` from the `Vector2`. +- `toRect`: Creates a `Rect` starting in (0,0) with the size of `Vector2`. +- `toPositionedRect`: Creates a `Rect` starting from [x, y] in the `Vector2` and has the size of + the `Vector2` argument. +- `lerp`: Linearly interpolates the `Vector2` towards another Vector2. +- `rotate`: Rotates the `Vector2` with an angle specified in radians, it rotates around the + optionally defined `Vector2`, otherwise around the center. +- `scaleTo`: Changes the length of the `Vector2` to the length provided, without changing + direction. +- `moveToTarget`: Smoothly moves a Vector2 in the target direction by a given distance. + +Factories: + +- `Vector2Extension.fromInts`: Create a `Vector2` with ints as input. + +Operators: + +- `&`: Combines two `Vector2`s to form a Rect, the origin should be on the left and the size on the + right. +- `%`: Modulo/Remainder of x and y separately of two `Vector2`s. + + +### Matrix4 + +This class comes from the `vector_math` package. We have created a few extension methods on top +of what is already offered by `vector_math`. + +Methods: + +- `translate2`: Translate the `Matrix4` by the given `Vector2`. +- `transform2`: Create a new `Vector2` by transforming the given `Vector2` using the `Matrix4`. +- `transformed2`: Transform the input `Vector2` into the output `Vector2`. + +Getters: + +- `m11`: The first row and first column. +- `m12`: The first row and second column. +- `m13`: The first row and third column. +- `m14`: The first row and fourth column. +- `m21`: The second row and first column. +- `m22`: The second row and second column. +- `m23`: The second row and third column. +- `m24`: The second row and fourth column. +- `m31`: The third row and first column. +- `m32`: The third row and second column. +- `m33`: The third row and third column. +- `m34`: The third row and fourth column. +- `m41`: The fourth row and first column. +- `m42`: The fourth row and second column. +- `m43`: The fourth row and third column. +- `m44`: The fourth row and fourth column. + +Factories: + +- `Matrix4Extension.scale`: Create a scaled `Matrix4`. Either by passing a `Vector4` or `Vector2` + as it's first argument, or by passing x y z doubles. diff --git a/docs/1.18.0/_sources/flame/other/widgets.md.txt b/docs/1.18.0/_sources/flame/other/widgets.md.txt new file mode 100644 index 000000000..bc5e4a2d4 --- /dev/null +++ b/docs/1.18.0/_sources/flame/other/widgets.md.txt @@ -0,0 +1,95 @@ +# Widgets + +One advantage when developing games with Flutter is the ability to use Flutter's extensive toolset +for building UIs, Flame tries to expand on that by introducing widgets that are made with games in +mind. + +Here you can find all the available widgets provided by Flame. + +You can also see all the widgets showcased inside a +[Dashbook](https://github.com/bluefireteam/dashbook) sandbox +[here](https://github.com/flame-engine/flame/tree/main/examples/lib/stories/widgets) + + +## NineTileBoxWidget + +A Nine Tile Box is a rectangle drawn using a grid sprite. + +The grid sprite is a 3x3 grid and with 9 blocks, representing the 4 corners, the 4 sides and the +middle. + +The corners are drawn at the same size, the sides are stretched on the side direction and the middle +is expanded both ways. + +The `NineTileBoxWidget` implements a `Container` using that standard. This pattern is also +implemented as a component in the `NineTileBoxComponent` so that you can add this feature directly +to your `FlameGame`. To get to know more about this, check the component docs +[here](../components.md#ninetileboxcomponent). + +Here you can find an example of how to use it (without using the `NineTileBoxComponent`): + +```dart +import 'package:flame/widgets'; + +NineTileBoxWidget( + image: image, // dart:ui image instance + tileSize: 16, // The width/height of the tile on your grid image + destTileSize: 50, // The dimensions to be used when drawing the tile on the canvas + child: SomeWidget(), // Any Flutter widget +) +``` + + +## SpriteButton + +`SpriteButton` is a simple widget that creates a button based on Flame sprites. This can be very +useful when trying to create non-default looking buttons. For example when it is easier for you to +achieve your wanted look by drawing the button in a graphics editor, instead of making it directly +in Flutter. + +How to use it: + +```dart +SpriteButton( + onPressed: () { + print('Pressed'); + }, + label: const Text('Sprite Button', style: const TextStyle(color: const Color(0xFF5D275D))), + sprite: _spriteButton, + pressedSprite: _pressedSprite, + height: _height, + width: _width, +) +``` + + +## SpriteWidget + +`SpriteWidget` is a widget used to display a [Sprite](../rendering/images.md#sprite) inside a widget +tree. + +This is how to use it: + +```dart +SpriteWidget( + sprite: yourSprite, + anchor: Anchor.center, +) +``` + + +## SpriteAnimationWidget + +`SpriteAnimationWidget` is a widget used to display +[SpriteAnimations](../rendering/images.md#animation) inside a widget tree. + +This is how to use it: + +```dart +SpriteAnimationWidget( + animation: _animation, + animationTicker: _animationTicker, + playing: true, + anchor: Anchor.center, +) +``` diff --git a/docs/1.18.0/_sources/flame/overlays.md.txt b/docs/1.18.0/_sources/flame/overlays.md.txt new file mode 100644 index 000000000..7a96d4f29 --- /dev/null +++ b/docs/1.18.0/_sources/flame/overlays.md.txt @@ -0,0 +1,45 @@ +# Overlays + +Since a Flame game can be wrapped in a widget, it is quite easy to use it alongside other Flutter +widgets in your tree. However, if you want to easily show widgets on top of your Flame game, like +messages, menu screens or something of that nature, you can use the Widgets Overlay API to make +things even easier. + +`Game.overlays` enables any Flutter widget to be shown on top of a game instance. This makes it very +easy to create things like a pause menu or an inventory screen for example. + +The feature can be used via the `game.overlays.add` and `game.overlays.remove` methods that mark an +overlay to be shown or hidden, respectively, via a `String` argument that identifies the overlay. +After that, you can map each overlay to their corresponding Widget in your `GameWidget` declaration +by providing an `overlayBuilderMap`. + +```dart + // Inside your game: + final pauseOverlayIdentifier = 'PauseMenu'; + + // Marks 'PauseMenu' to be rendered. + overlays.add(pauseOverlayIdentifier); + // Marks 'PauseMenu' to not be rendered. + overlays.remove(pauseOverlayIdentifier); +``` + +```dart +// On the widget declaration +final game = MyGame(); + +Widget build(BuildContext context) { + return GameWidget( + game: game, + overlayBuilderMap: { + 'PauseMenu': (BuildContext context, MyGame game) { + return Text('A pause menu'); + }, + }, + ); +} +``` + +The order of rendering for an overlay is determined by the order of the keys in the +`overlayBuilderMap`. + +See an [example of the Overlays feature](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/system/overlays_example.dart). diff --git a/docs/1.18.0/_sources/flame/platforms.md.txt b/docs/1.18.0/_sources/flame/platforms.md.txt new file mode 100644 index 000000000..abd382400 --- /dev/null +++ b/docs/1.18.0/_sources/flame/platforms.md.txt @@ -0,0 +1,114 @@ +# Supported Platforms + +Since Flame runs on top of Flutter, so its supported platforms depend on which platforms that are +supported by Flutter. + +At the moment, Flame supports web, mobile(Android and iOS) and desktop (Windows, MacOS and Linux). + + +## Flutter channels + +Flame keeps it support on the stable channel. The dev, beta and master channel should work, but we +don't support them. This means that issues happening outside the stable channel are not a priority. + + +## Flame web + +To use Flame on web you need to make sure your game is using the CanvasKit/[Skia](https://skia.org/) +renderer. This will increase performance on the web, as it will use the `canvas` element instead of +separate DOM elements. + +To run your game using skia, use the following command: + +```shell +flutter run -d chrome --web-renderer canvaskit +``` + +To build the game for production, using skia, use the following: + +```shell +flutter build web --release --web-renderer canvaskit +``` + + +## Deploy your game to GitHub Pages + +One easy way to deploy your game online, is to use [GitHub Pages](https://pages.github.com/). +It is a cool feature from GitHub, by which you can easily host web content from your repository. + +Here we will explain the easiest way to get your game hosted using GitHub pages. + +First thing, lets create the branch where your deployed files will live: + +```shell +git checkout -b gh-pages +``` + +This branch can be created from `main` or any other place, it doesn't matter much. After you push that +branch go back to your `main` branch. + +Now you should add the [flutter-gh-pages](https://github.com/bluefireteam/flutter-gh-pages) +action to your repository, you can do that by creating a file `gh-pages.yaml` under the folder +`.github/workflows`. + +```yaml +name: Gh-Pages + +on: + push: + branches: [ main ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: subosito/flutter-action@v2 + - uses: bluefireteam/flutter-gh-pages@v8 + with: + baseHref: /NAME_OF_YOUR_REPOSITORY/ + webRenderer: canvaskit +``` + +Be sure to change `NAME_OF_YOUR_REPOSITORY` to the name of your GitHub repository. + +Now, whenever you push something to the `main` branch, the action will run and update your +deployed game. + +The game should be available at an URL like this: +`https://YOUR_GITHUB_USERNAME.github.io/YOUR_REPO_NAME/` + + +## Deploy your game to itch.io + +1. Create a web build, either from your IDE or by running `flutter build web` +(If it complains about `Missing index.html` run `flutter create . --platforms=web`) +2. Go into `index.html` and remove the line that says `` +3. zip the `build/web` folder and upload to itch.io + +**Remember that it shouldn't be the `web` directory in your project's root, but in `build/web`!** + +If you are submitting your game to a game jam, remember to make it public and submit it on the +game jam page too (many get confused by this). + +Further instructions can be found on +[itch.io](https://itch.io/docs/creators/html5#getting-started/zip-file). + + +### Web support + +When using Flame on the web some methods may not work. For example `Flame.device.setOrientation` and +`Flame.device.fullScreen` won't work on web, they can be called, but nothing will happen. + +Another example: pre caching audio using `flame_audio` package also doesn't work due to Audioplayers +not supporting it on web. This can be worked around by using the `http` package, and requesting a +get to the audio file, that will make the browser cache the file producing the same effect as on +mobile. + +If you want to create instances of `ui.Image` on the web you can use our +`Flame.images.decodeImageFromPixels` method. This wraps the `decodeImageFromPixels` from the `ui` +library, but with support for the web platform. If the `runAsWeb` argument is set to `true` (by +default it is set to `kIsWeb`) it will decode the image using an internal image method. When the +`runAsWeb` is `false` it will use the `decodeImageFromPixels`, which is currently not supported on +the web. diff --git a/docs/1.18.0/_sources/flame/rendering/decorators.md.txt b/docs/1.18.0/_sources/flame/rendering/decorators.md.txt new file mode 100644 index 000000000..11285154f --- /dev/null +++ b/docs/1.18.0/_sources/flame/rendering/decorators.md.txt @@ -0,0 +1,200 @@ +# Decorators + +**Decorators** are classes that can encapsulate certain visual effects and then apply those visual +effects to a sequence of canvas drawing operations. Decorators are not [Component]s, but they can +be applied to components either manually or via the [HasDecorator] mixin. Likewise, decorators are +not [Effect]s, although they can be used to implement certain `Effect`s. + +There are a certain number of decorators available in Flame, and it is simple to add one's own if +necessary. We are planning to add shader-based decorators once Flutter fully supports them on the +web. + + +## Flame built-in decorators + + +### PaintDecorator.blur + +```{flutter-app} +:sources: ../flame/examples +:page: decorator_blur +:show: widget code infobox +:width: 180 +:height: 160 +``` + +This decorator applies a Gaussian blur to the underlying component. The amount of blur can be +different in the X and Y direction, though this is not very common. + +```dart +final decorator = PaintDecorator.blur(3.0); +``` + +Possible uses: + +- soft shadows; +- "out-of-focus" objects in the distance or very close to the camera; +- motion blur effects; +- deemphasize/obscure content when showing a popup dialog; +- blurred vision when the character is drunk. + + +### PaintDecorator.grayscale + +```{flutter-app} +:sources: ../flame/examples +:page: decorator_grayscale +:show: widget code infobox +:width: 180 +:height: 160 +``` + +This decorator converts the underlying image into the shades of grey, as if it was a +black-and-white photograph. In addition, you can make the image semi-transparent to the desired +level of `opacity`. + +```dart +final decorator = PaintDecorator.grayscale(opacity: 0.5); +``` + +Possible uses: + +- apply to an NPC to turn them into stone, or into a ghost! +- apply to a scene to indicate that it is a memory of the past; +- black-and-white photos. + + +### PaintDecorator.tint + +```{flutter-app} +:sources: ../flame/examples +:page: decorator_tint +:show: widget code infobox +:width: 180 +:height: 160 +``` + +This decorator *tints* the underlying image with the specified color, as if watching it through a +colored glass. It is recommended that the `color` used by this decorator was semi-transparent, so +that you can see the details of the image below. + +```dart +final decorator = PaintDecorator.tint(const Color(0xAAFF0000); +``` + +Possible uses: + +- NPCs affected by certain types of magic; +- items/characters in the shadows can be tinted black; +- tint the scene red to show bloodlust, or that the character is low on health; +- tint green to show that the character is poisoned or sick; +- tint the scene deep blue during the night time; + + +### Rotate3DDecorator + +```{flutter-app} +:sources: ../flame/examples +:page: decorator_rotate3d +:show: widget code infobox +:width: 180 +:height: 160 +``` + +This decorator applies a 3D rotation to the underlying component. You can specify the angles of the +rotation, as well as the pivot point and the amount of perspective distortion to apply. + +The decorator also supplies the `isFlipped` property, which allows you to determine whether the +component is currently being viewed from the front side or from the back. This is useful if you want +to draw a component whose appearance is different in the front and in the back. + +```dart +final decorator = Rotate3DDecorator( + center: component.center, + angleX: rotationAngle, + perspective: 0.002, +); +``` + +Possible uses: + +- a card that can be flipped over; +- pages in a book; +- transitions between app routes; +- 3d falling particles such as snowflakes or leaves. + + +### Shadow3DDecorator + +```{flutter-app} +:sources: ../flame/examples +:page: decorator_shadow3d +:show: widget code infobox +:width: 180 +:height: 160 +``` + +This decorator renders a shadow underneath the component, as if the component was a 3D object +standing on a plane. This effect works best for games that use isometric camera projection. + +The shadow produced by this generator is quite flexible: you can control its angle, length, opacity, +blur, etc. For a full description of what properties this decorator has and their meaning, see the +class documentation. + +```dart +final decorator = Shadow3DDecorator( + base: Vector2(100, 150), + angle: -1.4, + xShift: 200, + yScale: 1.5, + opacity: 0.5, + blur: 1.5, +); +``` + +The primary purpose of this decorator is to add shadows on the ground to your components. The main +limitation is that the shadows are flat and cannot interact with the environment. For example, this +decorator cannot handle shadows that fall onto walls or other vertical structures. + + +## Using decorators + + +### HasDecorator mixin + +This `Component` mixin adds the `decorator` property, which is initially `null`. If you set this +property to an actual `Decorator` object, then that decorator will apply its visual effect during +the rendering of the component. In order to remove this visual effect, simply set the `decorator` +property back to `null`. + + +### PositionComponent + +`PositionComponent` (and all the derived classes) already has a `decorator` property, so for these +components the `HasDecorator` mixin is not needed. + +In fact, the `PositionComponent` uses its decorator in order to properly position the component on +the screen. Thus, any new decorators that you'd want to apply to the `PositionComponent` will need +to be chained (see the [](#multiple-decorators) section below). + +It is also possible to replace the root decorator of the `PositionComponent`, if you want to create +an alternative logic for how the component shall be positioned on the screen. + + +### Multiple decorators + +It is possible to apply several decorators simultaneously to the same component: the `Decorator` +class supports chaining. That is, if you have an existing decorator on a component and you want to +add another one, then you can call `component.decorator.addLast(newDecorator)` -- this will add +the new decorator at the end of the existing chain. The method `removeLast()` can remove that +decorator later. + +Several decorators can be chain that way. For example, if `A` is an initial decorator, then +`A.addLast(B)` can be followed by either `A.addLast(C)` or `B.addLast(C)` -- and in both cases the +chain `A -> B -> C` will be created. In practice, it means that the entire chain can be manipulated +from its root, which usually is `component.decorator`. + + +[Component]: ../../flame/components.md#component +[Effect]: ../../flame/effects.md +[HasDecorator]: #hasdecorator-mixin diff --git a/docs/1.18.0/_sources/flame/rendering/images.md.txt b/docs/1.18.0/_sources/flame/rendering/images.md.txt new file mode 100644 index 000000000..3a4c3e8db --- /dev/null +++ b/docs/1.18.0/_sources/flame/rendering/images.md.txt @@ -0,0 +1,366 @@ +# Images + +To start off you must have an appropriate folder structure and add the files to the `pubspec.yaml` +file, like this: + +```yaml +flutter: + assets: + - assets/images/player.png + - assets/images/enemy.png +``` + +Images can be in any format supported by Flutter, which include: JPEG, WebP, PNG, GIF, animated GIF, +animated WebP, BMP, and WBMP. Other formats would require additional libraries. For example, SVG +images can be loaded via the `flame_svg` library. + + +## Loading images + +Flame bundles an utility class called `Images` that allows you to easily load and cache images from +the assets directory into memory. + +Flutter has a handful of types related to images, and converting everything properly from a local +asset to an `Image` that can be drawn on Canvas is a bit convoluted. This class allows you to obtain +an `Image` that can be drawn on the `Canvas` using the `drawImageRect` method. + +It automatically caches any image loaded by filename, so you can safely call it many times. + +The methods for loading and clearing the cache are: `load`, `loadAll`, `clear` and `clearCache`. +They return `Future`s for loading the images. These futures must be awaited for before the images +can be used in any way. If you do not want to await these futures right away, you can initiate +multiple `load()` operations and then await for all of them at once using `Images.ready()` method. + +To synchronously retrieve a previously cached image, the `fromCache` method can be used. If an image +with that key was not previously loaded, it will throw an exception. + +To add an already loaded image to the cache, the `add` method can be used and you can set the key +that the image should have in the cache. + +You can also use `ImageExtension.fromPixels()` to dynamically create an image during the game. + +For `clear` and `clearCache`, do note that `dispose` is called for each removed image from the +cache, so make sure that you don't use the image afterwards. + + +### Standalone usage + +It can manually be used by instantiating it: + +```dart +import 'package:flame/cache.dart'; +final imagesLoader = Images(); +Image image = await imagesLoader.load('yourImage.png'); +``` + +But Flame also offers two ways of using this class without instantiating it yourself. + + +### Flame.images + +There is a singleton, provided by the `Flame` class, that can be used as a global image cache. + +Example: + +```dart +import 'package:flame/flame.dart'; +import 'package:flame/sprite.dart'; + +// inside an async context +Image image = await Flame.images.load('player.png'); + +final playerSprite = Sprite(image); +``` + + +### Game.images + +The `Game` class offers some utility methods for handling images loading too. It bundles an instance +of the `Images` class, that can be used to load image assets to be used during the game. The game +will automatically free the cache when the game widget is removed from the widget tree. + +The `onLoad` method from the `Game` class is a great place for the initial assets to be loaded. + +Example: + +```dart +class MyGame extends Game { + + Sprite player; + + @override + Future onLoad() async { + // Note that you could also use Sprite.load for this. + final playerImage = await images.load('player.png'); + player = Sprite(playerImage); + } +} +``` + +Loaded assets can also be retrieved while the game is running by `images.fromCache`, for example: + +```dart +class MyGame extends Game { + + // attributes omitted + + @override + Future onLoad() async { + // other loads omitted + await images.load('bullet.png'); + } + + void shoot() { + // This is just an example, in your game you probably don't want to + // instantiate new [Sprite] objects every time you shoot. + final bulletSprite = Sprite(images.fromCache('bullet.png')); + _bullets.add(bulletSprite); + } +} +``` + + +## Loading images over the network + +The Flame core package doesn't offer a built in method to loading images from the network. + +The reason for that is that Flutter/Dart does not have a built in http client, which requires +a package to be used and since there are a couple of packages available out there, we refrain +from forcing the user to use a specific package. + +With that said, it is quite simple to load images from the network once a http client package +is chosen by the user. The following snippet shows how an `Image` can be fetched from the web +using the [http](https://pub.dev/packages/http) package. + +```dart +import 'package:http/http.dart' as http; +import 'package:flutter/painting.dart'; + +final response = await http.get('https://url.com/image.png'); +final image = await decodeImageFromList(response.bytes); +``` + +```{note} +Check [`flame_network_assets`](https://pub.dev/packages/flame_network_assets) +for a ready to use network assets solution that provides a built in cache. +``` + + +## Sprite + +Flame offers a `Sprite` class that represents an image, or a region of an image. + +You can create a `Sprite` by providing it an `Image` and coordinates that defines the piece of the +image that that sprite represents. + +For example, this will create a sprite representing the whole image of the file passed: + +```dart +final image = await images.load('player.png'); +Sprite player = Sprite(image); +``` + +You can also specify the coordinates in the original image where the sprite is located. This allows +you to use sprite sheets and reduce the number of images in memory, for example: + +```dart +final image = await images.load('player.png'); +final playerFrame = Sprite( + image, + srcPosition: Vector2(32.0, 0), + srcSize: Vector2(16.0, 16.0), +); +``` + +The default values are `(0.0, 0.0)` for `srcPosition` and `null` for `srcSize` (meaning it will use +the full width/height of the source image). + +The `Sprite` class has a render method, that allows you to render the sprite onto a `Canvas`: + +```dart +final image = await images.load('block.png'); +Sprite block = Sprite(image); + +// in your render method +block.render(canvas, 16.0, 16.0); //canvas, width, height +``` + +You must pass the size to the render method, and the image will be resized accordingly. + +All render methods from the `Sprite` class can receive a `Paint` instance as the optional named +parameter `overridePaint` that parameter will override the current `Sprite` paint instance for that +render call. + +`Sprite`s can also be used as widgets, to do so just use `SpriteWidget` class. +Here is a complete +[example using sprite as widgets](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/widgets/sprite_widget_example.dart). + + +## SpriteBatch + +If you have a sprite sheet (also called an image atlas, which is an image with smaller images +inside), and would like to render it effectively - `SpriteBatch` handles that job for you. + +Give it the filename of the image, and then add rectangles which describes various part of the +image, in addition to transforms (position, scale and rotation) and optional colors. + +You render it with a `Canvas` and an optional `Paint`, `BlendMode` and `CullRect`. + +A `SpriteBatchComponent` is also available for your convenience. + +See how to use it in the +[SpriteBatch examples](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/sprites/sprite_batch_example.dart) + + +## ImageComposition + +In some cases you may want to merge multiple images into a single image; this is called +[Compositing](https://en.wikipedia.org/wiki/Compositing). This can be useful for example when +working with the [SpriteBatch](#spritebatch) API to optimize your drawing calls. + +For such use cases Flame comes with the `ImageComposition` class. This allows you to add multiple +images, each at their own position, onto a new image: + +```dart +final composition = ImageComposition() + ..add(image1, Vector2(0, 0)) + ..add(image2, Vector2(64, 0)); + ..add(image3, + Vector2(128, 0), + source: Rect.fromLTWH(32, 32, 64, 64), + ); + +Image image = await composition.compose(); +Image imageSync = composition.composeSync(); +``` + +As you can see, two versions of composing image are available. Use `ImageComposition.compose()` for +the async approach. Or use the new `ImageComposition.composeSync()` function to rasterize the +image into GPU context using the benefits of the `Picture.toImageSync` function. + +**Note:** Composing images is expensive, we do not recommend you run this every tick as it affect +the performance badly. Instead we recommend to have your compositions pre-rendered so you can just +reuse the output image. + + +## Animation + +The Animation class helps you create a cyclic animation of sprites. + +You can create it by passing a list of equally sized sprites and the stepTime (that is, how many +seconds it takes to move to the next frame): + +```dart +final a = SpriteAnimationTicker(SpriteAnimation.spriteList(sprites, stepTime: 0.02)); +``` + +After the animation is created, you need to call its `update` method and render the current frame's +sprite on your game instance. + +Example: + +```dart +class MyGame extends Game { + SpriteAnimationTicker a; + + MyGame() { + a = SpriteAnimationTicker(SpriteAnimation(...)); + } + + void update(double dt) { + a.update(dt); + } + + void render(Canvas c) { + a.getSprite().render(c); + } +} +``` + +A better alternative to generate a list of sprites is to use the `fromFrameData` constructor: + +```dart +const amountOfFrames = 8; +final a = SpriteAnimation.fromFrameData( + imageInstance, + SpriteAnimationFrame.sequenced( + amount: amountOfFrames, + textureSize: Vector2(16.0, 16.0), + stepTime: 0.1, + ), +); +``` + +This constructor makes creating an `Animation` very easy when using sprite sheets. + +In the constructor you pass an image instance and the frame data, which contains some parameters +that can be used to describe the animation. Check the documentation on the constructors available on +the `SpriteAnimationFrameData` class to see all the parameters. + +If you use Aseprite for your animations, Flame does provide some support for Aseprite animation's +JSON data. To use this feature you will need to export the Sprite Sheet's JSON data, and use +something like the following snippet: + +```dart +final image = await images.load('chopper.png'); +final jsonData = await assets.readJson('chopper.json'); +final animation = SpriteAnimation.fromAsepriteData(image, jsonData); +``` + +**Note:** trimmed sprite sheets are not supported by flame, so if you export your sprite sheet this +way, it will have the trimmed size, not the sprite original size. + +Animations, after created, have an update and render method; the latter renders the current frame, +and the former ticks the internal clock to update the frames. + +Animations are normally used inside `SpriteAnimationComponent`s, but custom components with several +Animations can be created as well. + +To learn more, check out the full example code of +[using animations as widgets](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/widgets/sprite_animation_widget_example.dart). + + +## SpriteSheet + +Sprite sheets are big images with several frames of the same sprite on it and is a very good way to +organize and store your animations. Flame provides a very simple utility class to deal with +SpriteSheets, using which you can load your sprite sheet image and extract animations from it as +well. Following is a simple example of how to use it: + +```dart +import 'package:flame/sprite.dart'; + +final spriteSheet = SpriteSheet( + image: imageInstance, + srcSize: Vector2.all(16.0), +); + +final animation = spriteSheet.createAnimation(0, stepTime: 0.1); +``` + +Now you can use the animation directly or use it in an animation component. + +You can also create a custom animation by retrieving individual `SpriteAnimationFrameData` using +either `SpriteSheet.createFrameData` or `SpriteSheet.createFrameDataFromId`: + +```dart +final animation = SpriteAnimation.fromFrameData( + imageInstance, + SpriteAnimationData([ + spriteSheet.createFrameDataFromId(1, stepTime: 0.1), // by id + spriteSheet.createFrameData(2, 3, stepTime: 0.3), // row, column + spriteSheet.createFrameDataFromId(4, stepTime: 0.1), // by id + ]), +); +``` + +If you don't need any kind of animation and instead only want an instance of a `Sprite` on the +`SpriteSheet` you can use the `getSprite` or `getSpriteById` methods: + +```dart +spriteSheet.getSpriteById(2); // by id +spriteSheet.getSprite(0, 0); // row, column +``` + +See a full example of the [`SpriteSheet` class](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/sprites/sprite_sheet_example.dart) +for more details on how to work with it. diff --git a/docs/1.18.0/_sources/flame/rendering/layers.md.txt b/docs/1.18.0/_sources/flame/rendering/layers.md.txt new file mode 100644 index 000000000..4c32552c8 --- /dev/null +++ b/docs/1.18.0/_sources/flame/rendering/layers.md.txt @@ -0,0 +1,267 @@ +# Layers and Snapshots + +Layers and snapshots share some common features, including the ability to pre-render and cache +objects for improved performance. However, they also have unique features which make them better +suited for different use-cases. + +`Snapshot` is a mixin that can be added to any `PositionComponent`. Use this for: + +- Mixing in to existing game objects (that are `PositionComponents`). +- Caching game objects, such as sprites, that are complex to render. +- Drawing the same object many times without rendering it each time. +- Capturing an image snapshot to save as a screenshot (for example). + +`Layer` is a class. Use or extend this class for: + +- Structuring your game with logical layers (e.g. UI, foreground, main, background). +- Grouping objects to form a complex scene, and then caching it (e.g. a background layer). +- Processor support. Layers allow user-defined processors to run pre- and post- render. + + +## Layers + +Layers allow you to group rendering by context, as well as allow you to pre-render things. This +enables, for example, rendering parts of your game that don't change much in memory, like a +background. By doing this, you'll free processing power for more dynamic content that needs to be +rendered every game tick. + +There are two types of layers on Flame: + +- `DynamicLayer`: For things that are moving or changing. +- `PreRenderedLayer`: For things that are static. + + +### DynamicLayer + +Dynamic layers are layers that are rendered every time that they are drawn on the canvas. As the +name suggests, it is meant for dynamic content and is most useful for grouping rendering of objects +that have the same context. + +Usage example: + +```dart +class GameLayer extends DynamicLayer { + final MyGame game; + + GameLayer(this.game); + + @override + void drawLayer() { + game.playerSprite.render( + canvas, + position: game.playerPosition, + ); + game.enemySprite.render( + canvas, + position: game.enemyPosition, + ); + } +} + +class MyGame extends Game { + // Other methods omitted... + + @override + void render(Canvas canvas) { + gameLayer.render(canvas); // x and y can be provided as optional position arguments + } +} +``` + + +### PreRenderedLayer + +Pre-rendered layers are rendered only once, cached in memory and then just +replicated on the game canvas afterwards. They are useful for caching content that doesn't change +during the game, like a background for example. + +Usage example: + +```dart +class BackgroundLayer extends PreRenderedLayer { + final Sprite sprite; + + BackgroundLayer(this.sprite); + + @override + void drawLayer() { + sprite.render( + canvas, + position: Vector2(50, 200), + ); + } +} + +class MyGame extends Game { + // Other methods omitted... + + @override + void render(Canvas canvas) { + // x and y can be provided as optional position arguments. + backgroundLayer.render(canvas); + } +} +``` + + +### Layer Processors + +Flame also provides a way to add processors on your layer, which are ways to add effects on the +entire layer. At the moment, out of the box, only the `ShadowProcessor` is available, this processor +renders a back drop shadow on your layer. + +To add processors to your layer, just add them to the layer `preProcessors` or `postProcessors` +list, like so: + +```dart +// Works the same for both DynamicLayer and PreRenderedLayer +class BackgroundLayer extends PreRenderedLayer { + final Sprite sprite; + + BackgroundLayer(this.sprite) { + preProcessors.add(ShadowProcessor()); + } + + @override + void drawLayer() { /* omitted */ } + + // ... +``` + +Custom processors can be created by extending the `LayerProcessor` class. + +See [a working example of layers](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/layers_example.dart). + + +## Snapshots + +Snapshots are an alternative to layers. The `Snapshot` mixin can be applied to any `PositionComponent`. + +```dart +class SnapshotComponent extends PositionComponent with Snapshot {} + +class MyGame extends FlameGame { + late final SnapshotComponent root; + + @override + Future onLoad() async { + // Add a snapshot component. + root = SnapshotComponent(); + add(root); + } +} +``` + + +### Render as a snapshot + +Setting `renderSnapshot` to `true` (the default) on a snapshot-enabled component behaves similarly +to a `PreRenderedLayer`. The component is rendered only once, cached in memory and then just +replicated on the game canvas afterwards. This is useful for caching content that doesn't change +during the game, like a background. + +```dart +class SnapshotComponent extends PositionComponent with Snapshot {} + +class MyGame extends FlameGame { + late final SnapshotComponent root; + late final SpriteComponent background1; + late final SpriteComponent background2; + + @override + Future onLoad() async { + // Add a snapshot component. + root = SnapshotComponent(); + add(root); + + // Add some children. + final background1Sprite = Sprite(await images.load('background1.png')); + background1 = SpriteComponent(sprite: background1Sprite); + root.add(background1); + + final background2Sprite = Sprite(await images.load('background2.png')); + background2 = SpriteComponent(sprite: background2Sprite); + root.add(background2); + + // root will now render once (itself and all its children) and then cache + // the result. On subsequent render calls, root itself, nor any of its + // children, will be rendered. The snapshot will be used instead for + // improved performance. + } +} +``` + + +#### Regenerating a snapshot + +A snapshot-enabled component will generate a snapshot of its entire tree, including its children. +If any of the children change (for example, their position changes, or they are animated), call +`takeSnapshot` to update the cached snapshot. If they are changing very frequently, it's best not +to use a `Snapshot` because there will be no performance benefit. + +A component rendering a snapshot can still be transformed without incurring any performance cost. +Once a snapshot has been taken, the component may still be scaled, moved and rotated. However, if +the content of the component changes (what it is rendering) then the snapshot must be regenerated +by calling `takeSnapshot`. + + +### Taking a snapshot + +A snapshot-enabled component can be used to generate a snapshot at any time, even if +`renderSnapshot` is set to false. This is useful for taking screen-grabs or any other purpose when +it may be useful to have a static snapshot of all or part of your game. + +A snapshot is always generated with no transform applied - i.e. as if the snapshot-enabled +component is at position (0,0) and has no scale or rotation applied. + +A snapshot is saved as a `Picture`, but it can be converted to an `Image` using `snapshotToImage`. + +```dart +class SnapshotComponent extends PositionComponent with Snapshot {} + +class MyGame extends FlameGame { + late final SnapshotComponent root; + + @override + Future onLoad() async { + // Add a snapshot component, but don't use its render mode. + root = SnapshotComponent()..renderSnapshot = false; + add(root); + + // Other code omitted. + } + + // Call something like this to take an image snapshot at any time. + void takeSnapshot() { + root.takeSnapshot(); + final image = root.snapshotToImage(200, 200); + } +} +``` + + +### Snapshots that are cropped or off-center + +Sometimes your snapshot `Image` may appear cropped, or not in the position you expected. + +This is because the contents of a `Picture` can be positioned anywhere with respect to the origin, +but when it is converted to an `Image`, the image always starts from `0,0`. This means that +anything with a -ve position will be cropped. + +The best way to deal with this is to ensure that your `Snapshot` component is always at position +`0,0` with respect to your game and you never move it. This means that the image will usually +contain what you expect it to. + +However, this is not always possible. To move (or rotate, or scale etc) the snapshot before +converting it to an image, pass a transformation matrix to `snapshotToImage` like so: + +```dart +// Call something like this to take an image snapshot at any time. +void takeSnapshot() { + // Prepare a matrix to move the snapshot by 200,50. + final matrix = Matrix4.identity()..translate(200.0,50.0); + + root.takeSnapshot(); + final image = root.snapshotToImage(200, 200, transform: matrix); +} +``` diff --git a/docs/1.18.0/_sources/flame/rendering/palette.md.txt b/docs/1.18.0/_sources/flame/rendering/palette.md.txt new file mode 100644 index 000000000..d1e87eca0 --- /dev/null +++ b/docs/1.18.0/_sources/flame/rendering/palette.md.txt @@ -0,0 +1,88 @@ +# Palette + +Throughout your game you are going to need to use colors in lots of places. There are two classes on +`dart:ui` that can be used, `Color` and `Paint`. + +The `Color` class represents a ARGB color in a hexadecimal integer +format. So to create a `Color` instance, you just need to pass the color as an integer in the ARGB +format. + + +You can use Dart's hexadecimal notation to make it really easy; for instance: `0xFF00FF00` is fully +opaque green (the "mask" would be `0xAARRGGBB`). + +**Note**: The first two hexadecimal digits are for +the alpha channel (transparency), unlike on regular (non-A) RGB. The max(FF = 255) for the two first +digits means fully opaque, and the min (00 = 0) means fully transparent. + +In the Material Flutter package there is a `Colors` class that provides common colors as constants: + +```dart +import 'package:flutter/material.dart' show Colors; + +const black = Colors.black; +``` + +Some more complex methods might also take a `Paint` object, which is a more complete structure that +allows you to configure aspects related to stroke, colors, filters and blends. +However, normally when using even the more complex APIs, you just want an instance of a `Paint` +object representing just a single simple plain solid color. + +**Note:** we don't recommend that you create a new `Paint` object every time you need a specific +`Paint`, since it could potentially lead to a lot of unnecessary objects being created. A better way +is to either define the `Paint` object somewhere and re-use it (however, do note that the `Paint` +class is mutable, unlike `Color`), or to use the `Palette` class to define all the colors that you +want to use in your game. + +You can create such an object like this: + +```dart +Paint green = Paint()..color = const Color(0xFF00FF00); +``` + +To help you with this and also keep your game's color palette consistent, Flame adds the `Palette` +class. You can use it to easily access both `Color`s and `Paint`s where needed and also define +the colors your game use as constants, so that you don't get those mixed up. + +The `BasicPalette` class is an example of what a palette can look like, and adds black and white as +colors. So you can access black or white directly from the `BasicPalette`; for example, +using `color`: + +```dart +TextConfig regular = TextConfig(color: BasicPalette.white.color); +``` + +Or using `paint`: + +```dart +canvas.drawRect(rect, BasicPalette.black.paint); +``` + +However, the idea is that you can create your own palette, following the `BasicPalette` example, and +add the color palette/scheme of your game. Then you will be able to statically access any color in +your components and classes. Below is an example of a `Palette` implementation, from the [example +game BGUG](https://github.com/bluefireteam/bgug/blob/master/lib/palette.dart): + +```dart +import 'dart:ui'; + +import 'package:flame/palette.dart'; + +class Palette { + static PaletteEntry white = BasicPalette.white; + + static PaletteEntry toastBackground = PaletteEntry(Color(0xFFAC3232)); + static PaletteEntry toastText = PaletteEntry(Color(0xFFDA9A00)); + + static PaletteEntry grey = PaletteEntry(Color(0xFF404040)); + static PaletteEntry green = PaletteEntry(Color(0xFF54a286)); +} +``` + +A `PaletteEntry` is a `const` class that holds information of a color and it has the following +members: + +- `color`: returns the `Color` specified +- `paint`: creates a new `Paint` with the color specified. `Paint` is a non-`const` class, so this + method actually creates a brand new instance every time it's called. It's safe to cascade + mutations to this. diff --git a/docs/1.18.0/_sources/flame/rendering/particles.md.txt b/docs/1.18.0/_sources/flame/rendering/particles.md.txt new file mode 100644 index 000000000..448d66c5f --- /dev/null +++ b/docs/1.18.0/_sources/flame/rendering/particles.md.txt @@ -0,0 +1,451 @@ +# Particles + +Flame offers a basic, yet robust and extendable particle system. The core concept of this system is +the `Particle` class, which is very similar in its behavior to the `ParticleSystemComponent`. + +The most basic usage of a `Particle` with `FlameGame` would look as in the following: + +```dart +import 'package:flame/components.dart'; + +// ... + +game.add( + // Wrapping a Particle with ParticleSystemComponent + // which maps Component lifecycle hooks to Particle ones + // and embeds a trigger for removing the component. + ParticleSystemComponent( + particle: CircleParticle(), + ), +); +``` + +When using `Particle` with a custom `Game` implementation, please ensure that both the `update` and +`render` methods are called during each game loop tick. + +Main approaches to implement desired particle effects: + +- Composition of existing behaviors. +- Use behavior chaining (just a syntactic sugar of the first one). +- Using `ComputedParticle`. + +Composition works in a similar fashion to those of Flutter widgets by defining the effect from top +to bottom. Chaining allows to express the same composition trees more fluently by defining behaviors +from bottom to top. Computed particles in their turn fully delegate implementation of the behavior +to your code. Any of the approaches could be used in conjunction with existing behaviors where +needed. + +```dart +Random rnd = Random(); + +Vector2 randomVector2() => (Vector2.random(rnd) - Vector2.random(rnd)) * 200; + +// Composition. +// +// Defining a particle effect as a set of nested behaviors from top to bottom, +// one within another: +// +// ParticleSystemComponent +// > ComposedParticle +// > AcceleratedParticle +// > CircleParticle +game.add( + ParticleSystemComponent( + particle: Particle.generate( + count: 10, + generator: (i) => AcceleratedParticle( + acceleration: randomVector2(), + child: CircleParticle( + paint: Paint()..color = Colors.red, + ), + ), + ), + ), +); + +// Chaining. +// +// Expresses the same behavior as above, but with a more fluent API. +// Only Particles with SingleChildParticle mixin can be used as chainable behaviors. +game.add( + ParticleSystemComponent( + particle: Particle.generate( + count: 10, + generator: (i) => pt.CircleParticle(paint: Paint()..color = Colors.red) + ) + ) +); + +// Computed Particle. +// +// All the behaviors are defined explicitly. Offers greater flexibility +// compared to built-in behaviors. +game.add( + ParticleSystemComponent( + particle: Particle.generate( + count: 10, + generator: (i) { + Vector2 position = Vector2.zero(); + Vector2 speed = Vector2.zero(); + final acceleration = randomVector2(); + final paint = Paint()..color = Colors.red; + + return ComputedParticle( + renderer: (canvas, _) { + speed += acceleration; + position += speed; + canvas.drawCircle(Offset(position.x, position.y), 1, paint); + } + ); + } + ) + ) +); +``` + +See more [examples of how to use built-in particles in various +combinations](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/particles_example.dart). + + +## Lifecycle + +A behavior common to all `Particle`s is that all of them accept a `lifespan` argument. This value is +used to make the `ParticleSystemComponent` remove itself once its internal `Particle` has reached +the end of its life. Time within the `Particle` itself is tracked using the Flame `Timer` class. It +can be configured with a `double`, represented in seconds (with microsecond precision) by passing +it into the corresponding `Particle` constructor. + +```dart +Particle(lifespan: .2); // will live for 200ms. +Particle(lifespan: 4); // will live for 4s. +``` + +It is also possible to reset a `Particle`'s lifespan by using the `setLifespan` method, which also +accepts a `double` of seconds. + +```dart +final particle = Particle(lifespan: 2); + +// ... after some time. +particle.setLifespan(2) // will live for another 2s. +``` + +During its lifetime, a `Particle` tracks the time it was alive and exposes it through the `progress` +getter, which returns a value between `0.0` and `1.0`. This value can be used in a similar fashion +as the `value` property of the `AnimationController` class in Flutter. + +```dart +final particle = Particle(lifespan: 2.0); + +game.add(ParticleSystemComponent(particle: particle)); + +// Will print values from 0 to 1 with step of .1: 0, 0.1, 0.2 ... 0.9, 1.0. +Timer.periodic(duration * .1, () => print(particle.progress)); +``` + +The `lifespan` is passed down to all the descendants of a given `Particle`, if it supports any of +the nesting behaviors. + + +## Built-in particles + +Flame ships with a few built-in `Particle` behaviors: + +- The `TranslatedParticle` translates its `child` by given `Vector2` +- The `MovingParticle` moves its `child` between two predefined `Vector2`, supports `Curve` +- The `AcceleratedParticle` allows basic physics based effects, like gravitation or speed dampening +- The `CircleParticle` renders circles of all shapes and sizes +- The `SpriteParticle` renders Flame `Sprite` within a `Particle` effect +- The `ImageParticle` renders *dart:ui* `Image` within a `Particle` effect +- The `ComponentParticle` renders Flame `Component` within a `Particle` effect +- The `FlareParticle` renders Flare animation within a `Particle` effect + +See more [examples of how to use built-in Particle behaviors +together](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/particles_example.dart). +All the implementations are available in the [particles folder on the +Flame repository.](https://github.com/flame-engine/flame/tree/main/packages/flame/lib/src/particles) + + +## TranslatedParticle + +Simply translates the underlying `Particle` to a specified `Vector2` within the rendering `Canvas`. +Does not change or alter its position, consider using `MovingParticle` or `AcceleratedParticle` +where change of position is required. Same effect could be achieved by translating the `Canvas` +layer. + +```dart +game.add( + ParticleSystemComponent( + particle: TranslatedParticle( + // Will translate the child Particle effect to the center of game canvas. + offset: game.size / 2, + child: Particle(), + ), + ), +); +``` + + +## MovingParticle + +Moves the child `Particle` between the `from` and `to` `Vector2`s during its lifespan. Supports +`Curve` via `CurvedParticle`. + +```dart +game.add( + ParticleSystemComponent( + particle: MovingParticle( + // Will move from corner to corner of the game canvas. + from: Vector2.zero(), + to: game.size, + child: CircleParticle( + radius: 2.0, + paint: Paint()..color = Colors.red, + ), + ), + ), +); +``` + + +## AcceleratedParticle + +A basic physics particle which allows you to specify its initial `position`, `speed` and +`acceleration` and lets the `update` cycle do the rest. All three are specified as `Vector2`s, which +you can think of as vectors. It works especially well for physics-based "bursts", but it is not +limited to that. Unit of the `Vector2` value is *logical px/s*. So a speed of `Vector2(0, 100)` will +move a child `Particle` by 100 logical pixels of the device every second of game time. + +```dart +final rnd = Random(); +Vector2 randomVector2() => (Vector2.random(rnd) - Vector2.random(rnd)) * 100; + +game.add( + ParticleSystemComponent( + particle: AcceleratedParticle( + // Will fire off in the center of game canvas + position: game.canvasSize/2, + // With random initial speed of Vector2(-100..100, 0..-100) + speed: Vector2(rnd.nextDouble() * 200 - 100, -rnd.nextDouble() * 100), + // Accelerating downwards, simulating "gravity" + // speed: Vector2(0, 100), + child: CircleParticle( + radius: 2.0, + paint: Paint()..color = Colors.red, + ), + ), + ), +); +``` + + +## CircleParticle + +A `Particle` which renders a circle with given `Paint` at the zero offset of passed `Canvas`. Use in +conjunction with `TranslatedParticle`, `MovingParticle` or `AcceleratedParticle` in order to achieve +desired positioning. + +```dart +game.add( + ParticleSystemComponent( + particle: CircleParticle( + radius: game.size.x / 2, + paint: Paint()..color = Colors.red.withOpacity(.5), + ), + ), +); +``` + + +## SpriteParticle + +Allows you to embed a `Sprite` into your particle effects. + +```dart +game.add( + ParticleSystemComponent( + particle: SpriteParticle( + sprite: Sprite('sprite.png'), + size: Vector2(64, 64), + ), + ), +); +``` + + +## ImageParticle + +Renders given `dart:ui` image within the particle tree. + +```dart +// During game initialization +await Flame.images.loadAll(const [ + 'image.png', +]); + +// ... + +// Somewhere during the game loop +final image = await Flame.images.load('image.png'); + +game.add( + ParticleSystemComponent( + particle: ImageParticle( + size: Vector2.all(24), + image: image, + ); + ), +); +``` + + +## ScalingParticle + +Scales the child `Particle` between `1` and `to` during its lifespan. + +```dart +game.add( + ParticleSystemComponent( + particle: ScalingParticle( + lifespan: 2, + to: 0, + child: CircleParticle( + radius: 2.0, + paint: Paint()..color = Colors.red, + ) + ); + ), +); +``` + + +## SpriteAnimationParticle + +A `Particle` which embeds a `SpriteAnimation`. +By default, aligns the `SpriteAnimation`'s `stepTime` so that +it's fully played during the `Particle` lifespan. It's possible to override this behavior with the +`alignAnimationTime` argument. + +```dart +final spriteSheet = SpriteSheet( + image: yourSpriteSheetImage, + srcSize: Vector2.all(16.0), +); + +game.add( + ParticleSystemComponent( + particle: SpriteAnimationParticle( + animation: spriteSheet.createAnimation(0, stepTime: 0.1), + ); + ), +); +``` + + +## ComponentParticle + +This `Particle` allows you to embed a `Component` within the particle effects. The `Component` could +have its own `update` lifecycle and could be reused across different effect trees. If the only thing +you need is to add some dynamics to an instance of a certain `Component`, please consider adding it +to the `game` directly, without the `Particle` in the middle. + +```dart +final longLivingRect = RectComponent(); + +game.add( + ParticleSystemComponent( + particle: ComponentParticle( + component: longLivingRect + ); + ), +); + +class RectComponent extends Component { + void render(Canvas c) { + c.drawRect( + Rect.fromCenter(center: Offset.zero, width: 100, height: 100), + Paint()..color = Colors.red + ); + } + + void update(double dt) { + /// Will be called by parent [Particle] + } +} +``` + + +## ComputedParticle + +A `Particle` which could help you when: + +- Default behavior is not enough +- Complex effects optimization +- Custom easings + +When created, it delegates all the rendering to a supplied `ParticleRenderDelegate` which is called +on each frame to perform necessary computations and render something to the `Canvas`. + +```dart +game.add( + ParticleSystemComponent( + // Renders a circle which gradually changes its color and size during the + // particle lifespan. + particle: ComputedParticle( + renderer: (canvas, particle) => canvas.drawCircle( + Offset.zero, + particle.progress * 10, + Paint() + ..color = Color.lerp( + Colors.red, + Colors.blue, + particle.progress, + ), + ), + ), + ), +) +``` + + +## Nesting behavior + +Flame's implementation of particles follows the same pattern of extreme composition as Flutter +widgets. That is achieved by encapsulating small pieces of behavior in every particle and then +nesting these behaviors together to achieve the desired visual effect. + +Two entities that allow `Particle`s to nest each other are: `SingleChildParticle` mixin and +`ComposedParticle` class. + +A `SingleChildParticle` may help you with creating `Particles` with a custom behavior. For example, +randomly positioning its child during each frame: + +The `SingleChildParticle` may help you with creating `Particles` with a custom behavior. + +For example, randomly positioning it's child during each frame: + +```dart +var rnd = Random(); + +class GlitchParticle extends Particle with SingleChildParticle { + Particle child; + + GlitchParticle({ + required this.child, + super.lifespan, + }); + + @override + render(Canvas canvas) { + canvas.save(); + canvas.translate(rnd.nextDouble() * 100, rnd.nextDouble() * 100); + + // Will also render the child + super.render(); + + canvas.restore(); + } +} +``` + +The `ComposedParticle` could be used either as a standalone or within an existing `Particle` tree. diff --git a/docs/1.18.0/_sources/flame/rendering/rendering.md.txt b/docs/1.18.0/_sources/flame/rendering/rendering.md.txt new file mode 100644 index 000000000..8d7c8426b --- /dev/null +++ b/docs/1.18.0/_sources/flame/rendering/rendering.md.txt @@ -0,0 +1,19 @@ +# Rendering + +- [Colors and Palette](palette.md) +- [Decorators](decorators.md) +- [Images, Sprites and Animations](images.md) +- [Layers](layers.md) +- [Particles](particles.md) +- [Text Rendering](text_rendering.md) + +```{toctree} +:hidden: + +Colors and Palette +Decorators +Images, Sprites and Animations +Layers and Snapshots +Particles +Text Rendering +``` diff --git a/docs/1.18.0/_sources/flame/rendering/text_rendering.md.txt b/docs/1.18.0/_sources/flame/rendering/text_rendering.md.txt new file mode 100644 index 000000000..2dd4d0eb1 --- /dev/null +++ b/docs/1.18.0/_sources/flame/rendering/text_rendering.md.txt @@ -0,0 +1,617 @@ +# Text Rendering + +Flame has some dedicated classes to help you render text. + + +## Text Components + +The simplest way to render text with Flame is to leverage one of the provided text-rendering +components: + +- `TextComponent` for rendering a single line of text +- `TextBoxComponent` for bounding multi-line text within a sized box, including the possibility of a +typing effect. You can use the `newLineNotifier` to be notified when a new line is added. Use the +`onComplete` callback to execute a function when the text is completely printed. +- `ScrollTextBoxComponent` enhances the functionality of `TextBoxComponent` by adding vertical +scrolling capability when the text exceeds the boundaries of the enclosing box. + + +All components are showcased in [this example](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/text_example.dart). + + +### TextComponent + +`TextComponent` is a simple component that renders a single line of text. + +Simple usage: + +```dart +class MyGame extends FlameGame { + @override + void onLoad() { + add( + TextComponent( + text: 'Hello, Flame', + position: Vector2.all(16.0), + ), + ); + } +} +``` + +In order to configure aspects of the rendering like font family, size, color, etc, you need to +provide (or amend) a `TextRenderer` with such information; while you can read more details about +this interface below, the simplest implementation you can use is the `TextPaint`, which takes a +Flutter `TextStyle`: + +```dart +final regular = TextPaint( + style: TextStyle( + fontSize: 48.0, + color: BasicPalette.white.color, + ), +); + +class MyGame extends FlameGame { + @override + void onLoad() { + add( + TextComponent( + text: 'Hello, Flame', + textRenderer: regular, + anchor: Anchor.topCenter, + position: Vector2(size.width / 2, 32.0), + ), + ); + } +} +``` + +You can find all the options under [TextComponent's +API](https://pub.dev/documentation/flame/latest/components/TextComponent-class.html). + + +### TextBoxComponent + +`TextBoxComponent` is very similar to `TextComponent`, but as its name suggest it is used to render +text inside a bounding box, creating line breaks according to the provided box size. + +You can decide if the box should grow as the text is written or if it should be static by the +`growingBox` variable in the `TextBoxConfig`. A static box could either have a fixed size (setting +the `size` property of the `TextBoxComponent`), or to automatically shrink to fit the text content. + +In addition, the `align` property allows you to control the horizontal and vertical alignment of +the text content. For example, setting `align` to `Anchor.center` will center the text within its +bounding box both vertically and horizontally. + +If you want to change the margins of the box use the `margins` variable in the `TextBoxConfig`. + +Finally, if you want to simulate a "typing" effect, by showing each character of the string one by +one as if being typed in real-time, you can provide the `boxConfig.timePerChar` parameter. + +Example usage: + +```dart +class MyTextBox extends TextBoxComponent { + MyTextBox(String text) : super( + text: text, + textRenderer: tiny, + boxConfig: TextBoxConfig(timePerChar: 0.05), + ); + + final bgPaint = Paint()..color = Color(0xFFFF00FF); + final borderPaint = Paint()..color = Color(0xFF000000)..style = PaintingStyle.stroke; + + @override + void render(Canvas canvas) { + Rect rect = Rect.fromLTWH(0, 0, width, height); + canvas.drawRect(rect, bgPaint); + canvas.drawRect(rect.deflate(boxConfig.margin), borderPaint); + super.render(canvas); + } +} +``` + + +You can find all the options under [TextBoxComponent's +API](https://pub.dev/documentation/flame/latest/components/TextBoxComponent-class.html). + + +### ScrollTextBoxComponent + +The `ScrollTextBoxComponent` is an advanced version of the `TextBoxComponent`, +designed for displaying scrollable text within a defined area. +This component is particularly useful for creating interfaces where large amounts of text +need to be presented in a constrained space, such as dialogues or information panels. + +Note that the `align` property of `TextBoxComponent` is not available. + + +Example usage: + + +```dart +class MyScrollableText extends ScrollTextBoxComponent { + MyScrollableText(Vector2 frameSize, String text) : super( + size: frameSize, + text: text, + textRenderer: regular, + boxConfig: TextBoxConfig(timePerChar: 0.05), + ); +} +``` + + +### TextElementComponent + +If you want to render an arbitrary TextElement, ranging from a single InlineTextElement to a +formatted DocumentRoot, you can use the `TextElementComponent`. + +A simple example is to create a DocumentRoot to render a sequence of block elements (think of an +HTML "div") containing rich text: + +```dart + final document = DocumentRoot([ + HeaderNode.simple('1984', level: 1), + ParagraphNode.simple( + 'Anything could be true. The so-called laws of nature were nonsense.', + ), + // ... + ]); + final element = TextElementComponent.fromDocument( + document: document, + position: Vector2(100, 50), + size: Vector2(400, 200), + ); +``` + +Note that the size can be specified in two ways; either via: + +- the size property common to all `PositionComponents`; or +- the width/height included within the `DocumentStyle` applied. + +An example applying a style to the document (which can include the size but other parameters as +well): + +```dart + final style = DocumentStyle( + width: 400, + height: 200, + padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 14), + background: BackgroundStyle( + color: const Color(0xFF4E322E), + borderColor: const Color(0xFF000000), + borderWidth: 2.0, + ), + ); + final document = DocumentRoot([ ... ]); + final element = TextElementComponent.fromDocument( + document: document, + style: style, + position: Vector2(100, 50), + ); +``` + +See a more elaborate [example of rich-text, formatted +text blocks rendering](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/rich_text_example.dart). + +For more details about the underlying mechanics of the text rendering pipeline, see "Text Elements, +Text Nodes, and Text Styles" below. + + +### Flame Markdown + +In order to more easily create rich-text-based DocumentRoots, from simple strings with bold/italics +to complete structured documents, Flame provides the `flame_markdown` bridge package that connects +the `markdown` library with Flame's text rendering infrastructure. + +Just use the `FlameMarkdown` helper class and the `toDocument` method to convert a markdown string +into a DocumentRoot (which can then be used to create a `TextElementComponent`): + +```dart +import 'package:flame/text.dart'; +import 'package:flame_markdown/flame_markdown.dart'; + +// ... +final component = await TextElementComponent.fromDocument( + document: FlameMarkdown.toDocument( + '# Header\n' + '\n' + 'This is a **bold** text, and this is *italic*.\n' + '\n' + 'This is a second paragraph.\n', + ), + style: ..., + position: ..., + size: ..., +); +``` + + +## Infrastructure + +If you are not using the Flame Component System, want to understand the infrastructure behind text +rendering, want to customize fonts and styles used, or want to create your own custom renderers, +this section is for you. + +- `TextRenderer`: renderers know "how" to render text; in essence they contain the style information + to render any string +- `TextElement`: an element is formatted, "laid-out" piece of text, include the string ("what") and + the style ("how") + +The following diagram showcases the class and inheritance structure of the text rendering pipeline: + +```{mermaid} +%%{init: { 'theme': 'dark' } }%% +classDiagram + %% renderers + note for TextRenderer "This just the style (how). + It knows how to take a text string and create a TextElement. + `render` is just a helper to `format(text).render(...)`. Same for `getLineMetrics`." + class TextRenderer { + TextElement format(String text) + LineMetrics getLineMetrics(String text) + void render(Canvas canvas, String text, ...) + } + class TextPaint + class SpriteFontRenderer + class DebugTextRenderer + + %% elements + class TextElement { + LineMetrics metrics + render(Canvas canvas, ...) + } + class TextPainterTextElement + + TextRenderer --> TextPaint + TextRenderer --> SpriteFontRenderer + TextRenderer --> DebugTextRenderer + + TextRenderer *-- TextElement + TextPaint *-- TextPainterTextElement + SpriteFontRenderer *-- SpriteFontTextElement + + note for TextElement "This is the text (what) and the style (how); + laid out and ready to render." + TextElement --> TextPainterTextElement + TextElement --> SpriteFontTextElement + TextElement --> Others +``` + + +### TextRenderer + +`TextRenderer` is the abstract class used by Flame to render text. Implementations of `TextRenderer` +must include the information about the "how" the text is rendered. Font style, size, color, etc. It +should be able to combine that information with a given string of text, via the `format` method, to +generate a `TextElement`. + +Flame provides two concrete implementations: + +- `TextPaint`: most used, uses Flutter `TextPainter` to render regular text +- `SpriteFontRenderer`: uses a `SpriteFont` (a sprite sheet-based font) to render bitmap text +- `DebugTextRenderer`: only intended to be used for Golden Tests + +But you can also provide your own if you want to extend to other customized forms of text rendering. + +The main job of a `TextRenderer` is to format a string of text into a `TextElement`, that then can +be rendered onto the screen: + +```dart +final textElement = textRenderer.format("Flame is awesome") +textElement.render(...) +``` + +However the renderer provides a helper method to directly create the element and render it: + +```dart +textRenderer.render( + canvas, + 'Flame is awesome', + Vector2(10, 10), + anchor: Anchor.topCenter, +); +``` + + +#### TextPaint + +`TextPaint` is the built-in implementation of text rendering in Flame. It is based on top of +Flutter's `TextPainter` class (hence the name), and it can be configured by the style class +`TextStyle`, which contains all typographical information required to render text; i.e., font size +and color, font family, etc. + +Outside of the style you can also optionally provide one extra parameter which is the +`textDirection` (but that is typically already set to `ltr` or left-to-right). + +Example usage: + +```dart +const TextPaint textPaint = TextPaint( + style: TextStyle( + fontSize: 48.0, + fontFamily: 'Awesome Font', + ), +); +``` + +Note: there are several packages that contain the class `TextStyle`. We export the right one (from +Flutter) via the `text` module: + +```dart +import 'package:flame/text.dart'; +``` + +But if you want to import it explicitly, make sure that you import it from +`package:flutter/painting.dart` (or from material or widgets). If you also need to import `dart:ui`, +you might need to hide its version of `TextStyle`, since that module contains a different class with +the same name: + +```dart +import 'package:flutter/painting.dart'; +import 'dart:ui' hide TextStyle; +``` + +Following are some common properties of `TextStyle`(see the [full +list of `TextStyle` properties](https://api.flutter.dev/flutter/painting/TextStyle-class.html)): + +- `fontFamily`: a commonly available font, like Arial (default), or a custom font added in your + pubspec (see [how to add a custom font](https://docs.flutter.dev/cookbook/design/fonts)). +- `fontSize`: font size, in pts (default `24.0`). +- `height`: height of text line, as a multiple of font size (default `null`). +- `color`: the color, as a `ui.Color` (default white). + +For more information regarding colors and how to create them, see the [Colors and +Palette](palette.md) guide. + + +#### SpriteFontRenderer + +The other renderer option provided out of the box is `SpriteFontRenderer`, which allows you to +provide a `SpriteFont` based off of a sprite sheet. TODO + + +#### DebugTextRenderer + +This renderer is intended to be used for Golden Tests. Rendering normal font-based text in Golden +Tests is unreliable due to differences in font definitions across platforms and different algorithms +used for anti-aliasing. This renderer will render text as if each word was a solid rectangle, making +it possible to test the layout, positioning and sizing of the elements without having to rely on +font-based rendering. + + +## Inline Text Elements + +A `TextElement` is a "pre-compiled", formatted and laid-out piece of text with a specific styling +applied, ready to be rendered at any given position. + +A `InlineTextElement` implements the `TextElement` interface and must implement their two methods, +one that teaches how to translate it around and another on how to draw it to the canvas: + +```dart + void translate(double dx, double dy); + void draw(Canvas canvas); +``` + +These methods are intended to be overwritten by the implementations of `InlineTextElement`, and +probably will not be called directly by users; because a convenient `render` method is provided: + +```dart + void render( + Canvas canvas, + Vector2 position, { + Anchor anchor = Anchor.topLeft, + }) +``` + +That allows the element to be rendered at a specific position, using a given anchor. + +The interface also mandates (and provides) a getter for the `LineMetrics` object associated with +that `InlineTextElement`, which allows you (and the `render` implementation) to access sizing +information related to the element (width, height, ascend, etc). + +```dart + LineMetrics get metrics; +``` + + +## Text Elements, Text Nodes, and Text Styles + +While normal renderers always work with a `InlineTextElement` directly, there is a bigger underlying +infrastructure that can be used to render more rich or formatter text. + +Text Elements are a superset of Inline Text Elements that represent an arbitrary rendering block +within a rich-text document. Essentially, they are concrete and "physical": they are objects that +are ready to be rendered on a canvas. + +This property distinguishes them from Text Nodes, which are structured pieces of text, and from Text +Styles (called `FlameTextStyle` in code to make it easier to work alongside Flutter's `TextStyle`), +which are descriptors for how arbitrary pieces of text ought to be rendered. + +So, in the most general case, a user would use a `TextNode` to describe a desired piece of rich +text; define a `FlameTextStyle` to apply to it; and use that to generate a `TextElement`. Depending +on the type of rendering, the `TextElement` generated will be an `InlineTextElement`, which brings +us back to the normal flow of the rendering pipeline. The unique property of the Inline-Text-type +element is that it exposes a LineMetrics that can be used for advanced rendering; while the other +elements only expose a simpler `draw` method which is unaware of sizing and positioning. + +However, the other types of Text Elements, Text Nodes, and Text Styles must be used if the intent is +to create an entire document (multiple blocks or paragraphs), enriched with formatted text. In order +to render an arbitrary TextElement, you can alternatively use the `TextElementComponent` (see above). + +See [examples of such usage](https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/rich_text_example.dart). + + +### Text Nodes and the Document Root + +A `DocumentRoot` is not a `TextNode` (inheritance-wise) in itself but represents a grouping of +`BlockNodes` that layout a "page" or "document" of rich text laid out in multiple blocks or +paragraphs. It represents the entire document and can receive a global Style. + +The first step to define your rich-text document is to create a Node, which will likely be a +`DocumentRoot`. + +It will first contain the top-most list of Block Nodes that can define headers, paragraphs or +columns. + +Then each of those blocks can contain other blocks or the Inline Text Nodes, either Plain Text Nodes +or some rich-text with specific formatting. + +Note that the hierarchy defined by the node structure is also used for styling purposes as per +defined in the `FlameTextStyle` class. + +The actual nodes all inherit from `TextNode` and are broken down by the following diagram: + +```{mermaid} +%%{init: { 'theme': 'dark' } }%% +graph TD + %% Config %% + classDef default fill:#282828,stroke:#F6BE00; + + %% Nodes %% + TextNode(" + TextNode + Can be thought of as an HTML DOM node; + each subclass can be thought of as a specific tag. + ") + BlockNode(" + BlockNode + #quot;div#quot; + ") + InlineTextNode(" + InlineTextNode + #quot;span#quot; + ") + ColumnNode(" + ColumnNode + column-arranged group of other Block Nodes + ") + TextBlockNode(" + TextBlockNode + a #quot;div#quot; with an InlineTextNode as a direct child + ") + HeaderNode(" + HeaderNode + #quot;h1#quot; / #quot;h2#quot; / etc + ") + ParagraphNode(" + ParagraphNode + #quot;p#quot; + ") + GroupTextNode(" + GroupTextNode + groups other TextNodes in a single line + ") + PlainTextNode(" + PlainTextNode + just plain text, unformatted + ") + ItalicTextNode(" + ItalicTextNode + #quot;i#quot; / #quot;em#quot; + ") + BoldTextNode(" + BoldTextNode + #quot;b#quot; / #quot;strong#quot; + ") + TextNode ----> BlockNode + TextNode --------> InlineTextNode + BlockNode --> ColumnNode + BlockNode --> TextBlockNode + TextBlockNode --> HeaderNode + TextBlockNode --> ParagraphNode + InlineTextNode --> GroupTextNode + InlineTextNode --> PlainTextNode + InlineTextNode --> BoldTextNode + InlineTextNode --> ItalicTextNode +``` + + +### (Flame) Text Styles + +Text Styles can be applied to nodes to generate elements. They all inherit from `FlameTextStyle` +abstract class (which is named as is to avoid confusion with Flutter's `TextStyle`). + +They follow a tree-like structure, always having `DocumentStyle` as the root; this structure is +leveraged to apply cascading style to the analogous Node structure. In fact, they are pretty similar +to, and can be thought of as, CSS definitions. + +The full inheritance chain can be seen on the following diagram: + +```{mermaid} +%%{init: { 'theme': 'dark' } }%% +classDiagram + %% Nodes %% + class FlameTextStyle { + copyWith() + merge() + } + + note for FlameTextStyle "Root for all styles. + Not to be confused with Flutter's TextStyle." + + class DocumentStyle { + <> + size + padding + background [BackgroundStyle] + specific styles [for blocks & inline] + } + + class BlockStyle { + <> + margin, padding + background [BackgroundStyle] + text [InlineTextStyle] + } + + class BackgroundStyle { + <> + color + border + } + + class InlineTextStyle { + <> + font, color + } + + FlameTextStyle <|-- DocumentStyle + FlameTextStyle <|-- BlockStyle + FlameTextStyle <|-- BackgroundStyle + FlameTextStyle <|-- InlineTextStyle +``` + + +### Text Elements + +Finally, we have the elements, that represent a combination of a node ("what") with a style ("how"), +and therefore represent a pre-compiled, laid-out piece of rich text to be rendered on the Canvas. + +Inline Text Elements specifically can alternatively be thought of as a combination of a +`TextRenderer` (simplified "how") and a string (single line of "what"). + +That is because an `InlineTextStyle` can be converted to a specific `TextRenderer` via the +`asTextRenderer` method, which is then used to lay out each line of text into a unique +`InlineTextElement`. + +When using the renderer directly, the entire layout process is skipped, and a single +`TextPainterTextElement` or `SpriteFontTextElement` is returned. + +As you can see, both definitions of an Element are, essentially, equivalent, all things considered. +But it still leaves us with two paths for rendering text. Which one to pick? How to solve this +conundrum? + +When in doubt, the following guidelines can help you picking the best path for you: + +- for the simplest way to render text, use `TextPaint` (basic renderer implementation) + - you can use the FCS provided component `TextComponent` for that. +- for rendering Sprite Fonts, you must use `SpriteFontRenderer` (a renderer implementation that + accepts a `SpriteFont`); +- for rendering multiple lines of text, with automatic line breaks, you have two options: + - use the FCS `TextBoxComponent`, which uses any text renderer to draw each line of text as an + Element, and does its own layout and line breaking; + - use the Text Node & Style system to create your pre-laid-out Elements. Note: there is no current + FCS component for it. +- finally, in order to have formatted (or rich) text, you must use Text Nodes & Styles. diff --git a/docs/1.18.0/_sources/flame/router.md.txt b/docs/1.18.0/_sources/flame/router.md.txt new file mode 100644 index 000000000..626bdc9f1 --- /dev/null +++ b/docs/1.18.0/_sources/flame/router.md.txt @@ -0,0 +1,183 @@ + +```{flutter-app} +:sources: ../flame/examples +:page: router +:show: widget code infobox + +This example app shows the use of the `RouterComponent` to move across multiple +screens within the game. In addition, the "pause" button stops time and applies +visual effects to the content of the page below it. +``` + + +# RouterComponent + +The **RouterComponent**'s job is to manage navigation across multiple screens within the game. It is +similar in spirit to Flutter's [Navigator][Flutter Navigator] class, except that it works with Flame +components instead of Flutter widgets. + +A typical game will usually consist of multiple pages: the splash screen, the starting menu page, +the settings page, credits, the main game page, several pop-ups, etc. The router will organize +all these destinations and allow you to transition between them. + +Internally, the `RouterComponent` contains a stack of routes. When you request it to show a route, +it will be placed on top of all other pages in the stack. Later you can `pop()` to remove the +topmost page from the stack. The pages of the router are addressed by their unique names. + +Each page in the router can be either transparent or opaque. If a page is opaque, then the pages +below it in the stack are not rendered and do not receive pointer events (such as taps or drags). +On the contrary, if a page is transparent, then the page below it will be rendered and receive +events normally. Such transparent pages are useful for implementing modal dialogs, inventory or +dialogue UIs, etc. If you want your route to be visually transparent but for the routes below it +to not receive events, make sure to add a background component to your route that captures the +events by using one of the [event capturing mixins](inputs/inputs.md). + +Usage example: + +```dart +class MyGame extends FlameGame { + late final RouterComponent router; + + @override + void onLoad() { + add( + router = RouterComponent( + routes: { + 'home': Route(HomePage.new), + 'level-selector': Route(LevelSelectorPage.new), + 'settings': Route(SettingsPage.new, transparent: true), + 'pause': PauseRoute(), + 'confirm-dialog': OverlayRoute.existing(), + }, + initialRoute: 'home', + ), + ); + } +} + +class PauseRoute extends Route { ... } +``` + +```{note} +Use `hide Route` if any of your imported packages export another class called `Route` + +eg: `import 'package:flutter/material.dart' hide Route;` +``` + + +[Flutter Navigator]: https://api.flutter.dev/flutter/widgets/Navigator-class.html + + +## Route + +The **Route** component holds information about the content of a particular page. `Route`s are +mounted as children to the `RouterComponent`. + +The main property of a `Route` is its `builder` -- the function that creates the component with +the content of its page. + +In addition, the routes can be either transparent or opaque (default). An opaque prevents the route +below it from rendering or receiving pointer events, a transparent route doesn't. As a rule of +thumb, declare the route opaque if it is full-screen, and transparent if it is supposed to cover +only a part of the screen. + +By default, routes maintain the state of the page component after being popped from the stack +and the `builder` function is only called the first time a route is activated. Setting +`maintainState` to `false` drops the page component after the route is popped from the route stack +and the `builder` function is called each time the route is activated. + +The current route can be replaced using `pushReplacementNamed` or `pushReplacement`. Each method +simply executes `pop` on the current route and then `pushNamed` or `pushRoute`. + + +## OverlayRoute + +The **OverlayRoute** is a special route that allows adding game overlays via the router. These +routes are transparent by default. + +There are two constructors for the `OverlayRoute`. The first constructor requires a builder function +that describes how the overlay's widget is to be built. The second constructor can be used when the +builder function was already specified within the `GameWidget`: + +```dart +final router = RouterComponent( + routes: { + 'ok-dialog': OverlayRoute( + (context, game) { + return Center( + child: DecoratedContainer(...), + ); + }, + ), // OverlayRoute + 'confirm-dialog': OverlayRoute.existing(), + }, +); +``` + +Overlays that were defined within the `GameWidget` don't even need to be declared within the routes +map beforehand: the `RouterComponent.pushOverlay()` method can do it for you. Once an overlay route +was registered, it can be activated either via the regular `.pushNamed()` method, or via the +`.pushOverlay()` -- the two methods will do exactly the same, though you can use the second one to +make it more clear in your code that an overlay is being added instead of a regular route. + +The current overlay can be replaced using `pushReplacementOverlay`. This method executes +`pushReplacementNamed` or `pushReplacement` based on the status of the overlay being pushed. + + +## ValueRoute + +```{flutter-app} +:sources: ../flame/examples +:page: value_route +:show: widget code infobox +:width: 280 +``` + +A **ValueRoute** is a route that will return a value when it is eventually popped from the stack. +Such routes can be used, for example, for dialog boxes that ask for some feedback from the user. + +In order to use `ValueRoute`s, two steps are required: + +1. Create a route derived from the `ValueRoute` class, where `T` is the type of the value that + your route will return. Inside that class override the `build()` method to construct the + component that will be displayed. The component should use the `completeWith(value)` method to + pop the route and return the specified value. + + ```dart + class YesNoDialog extends ValueRoute { + YesNoDialog(this.text) : super(value: false); + final String text; + + @override + Component build() { + return PositionComponent( + children: [ + RectangleComponent(), + TextComponent(text: text), + Button( + text: 'Yes', + action: () => completeWith(true), + ), + Button( + text: 'No', + action: () => completeWith(false), + ), + ], + ); + } + } + ``` + +2. Display the route using `Router.pushAndWait()`, which returns a future that resolves with the + value returned from the route. + + ```dart + Future foo() async { + final result = await game.router.pushAndWait(YesNoDialog('Are you sure?')); + if (result) { + // ... the user is sure + } else { + // ... the user was not so sure + } + } + ``` diff --git a/docs/1.18.0/_sources/flame/structure.md.txt b/docs/1.18.0/_sources/flame/structure.md.txt new file mode 100644 index 000000000..6f0358ab8 --- /dev/null +++ b/docs/1.18.0/_sources/flame/structure.md.txt @@ -0,0 +1,60 @@ +# Structure + +Flame has a proposed structure for your project that includes the standard Flutter `assets` +directory in addition to some children: `audio`, `images` and `tiles`. + +If using the following example code: + +```dart +void main() { + FlameAudio.play('explosion.mp3'); + + Flame.images.load('player.png'); + Flame.images.load('enemy.png'); + + final map1 = TiledComponent.load('level.tmx', tileSize); + + final map2 = await SpriteFusionTilemapComponent.load( + mapJsonFile: 'map.json', + spriteSheetFile: 'spritesheet.png' + ); +} +``` + +The following file structure is where Flame would expect to find the files: + +```text +. +└── assets + ├── audio + │ └── explosion.mp3 + ├── images + │ ├── enemy.png + │ ├── player.png + │ └── spritesheet.png + └── tiles + ├── level.tmx + └── map.json +``` + +Optionally you can split your `audio` folder into two subfolders, one for `music` and one for `sfx`. + +Don't forget to add these files to your `pubspec.yaml` file: + +```yaml +flutter: + assets: + - assets/audio/explosion.mp3 + - assets/images/player.png + - assets/images/enemy.png + - assets/tiles/level.tmx +``` + +If you want to change this structure, this is possible by using the `prefix` parameter and creating +your instances of `AssetsCache`, `Images`, and `AudioCache`, instead of using the +global ones provided by Flame. + +Additionally, `AssetsCache` and `Images` can receive a custom +[`AssetBundle`](https://api.flutter.dev/flutter/services/AssetBundle-class.html). +This can be used to make Flame look for assets in a different location other the `rootBundle`, +like the file system for example. diff --git a/docs/1.18.0/_sources/index.md.txt b/docs/1.18.0/_sources/index.md.txt new file mode 100644 index 000000000..f210af517 --- /dev/null +++ b/docs/1.18.0/_sources/index.md.txt @@ -0,0 +1,13 @@ +```{include} README.md +``` + +```{toctree} +:hidden: + +Flame +Bridge Packages +Other Modules +Tutorials +Development +Resources +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/jenny.md.txt b/docs/1.18.0/_sources/other_modules/jenny/jenny.md.txt new file mode 100644 index 000000000..5238929ff --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/jenny.md.txt @@ -0,0 +1,130 @@ + + +# Jenny + +The **jenny** library is a toolset for adding *dialogue* into a game. The dialogue may be quite +complex, including user-controlled interactions, branching, dynamically-generated content, commands, +markup, state controlled either from Jenny or from the game, custom functions and commands, etc. +The `jenny` library is an unofficial port of the [Yarn Spinner] library for Unity. The name of the +library comes from [spinning jenny], a kind of yarn-spinning machine. + +Adding dialogue into any game generally consists of two stages: + +1. Writing the text of the dialogue; +2. Interactively displaying it within the game. + +With `jenny`, these two tasks are completely separate, allowing the creation of game content and +development of the game engine to be independent. + +[Yarn Spinner]: https://docs.yarnspinner.dev/ +[spinning jenny]: https://en.wikipedia.org/wiki/Spinning_jenny + + +## Writing dialogue + +In `jenny`, the dialogue is written in plain text and stored in `.yarn` files that are added +to the game as assets. The `.yarn` file format is developed by the authors of [Yarn Spinner], and +is specifically designed for writing dialogue. + +The simplest form of the yarn dialogue looks like a play: + +```yarn +title: Scene1_Gregory_and_Sampson +--- +Sampson: Gregory, on my word, we'll not carry coals. +Gregory: No, for then we should be colliers. +Sampson: I mean, an we be in choler, we'll draw. +Gregory: Ay, while you live, draw your neck out of collar. +Sampson: I strike quickly being moved. +Gregory: But thou art not quickly moved to strike. +=== +``` + +This simple exchange, when rendered within a game, will be shown as a sequence of phrases spoken +in turn by the two characters. The `DialogRunner` will allow you to control whether the dialogue +proceeds automatically or requires "clicking-through" by the user. + +The `.yarn` format supports many more advanced features too, allowing the dialogue to proceed +non-linearly, supporting variables and conditional execution, giving the player an ability to +select their response, etc. Most importantly, the format is so intuitive that it can be generally +understood without having to learn it: + +```yarn +title: Slughorn_encounter +--- +<> + Slughorn: Sorry, Tom, I don't have time right now. + <> +<> + +Slughorn: Oh hello, Tom, is there anything I can help you with? +Tom: Good {time_of_day()}, Professor. +-> I was curious about the 12 uses of the dragon blood. + Slughorn: Such an inquisitive mind! You can read about that in the "Moste \ + Potente Potions" in the Restricted Section of the library. + <> + Tom: Thank you, Professor, this is very munificent of you. +-> I wanted to ask... about Horcruxes <> + <> +-> I just wanted to say how much I always admire your lectures. + Slughorn: Thank you, Tom. I do enjoy flattery, even if it is well-deserved. +=== + +title: Horcrux_question +--- +Slughorn: Where... did you hear that? +-> Tom: It was mentioned in an old book in the library... + Slughorn: I see that you have read more books from the Restricted Section \ + than is wise. + Slughorn: I'm sorry, Tom, I should have seen you'd be tempted... + <> + -> But Professor!.. + Slughorn: This is for your good, Tom. Many of those books are dangerous! + Slughorn: Now off you go. And do your best to forget about what you \ + asked... + <> +-> Tom: I overheard it... And the word felt sharp and frigid, like it was the \ + embodiment of Dark Art <= 80>> + Slughorn: It is a very Dark Art indeed, it is not good for you to know \ + about it... + Tom: But if I don't know about this Dark Art, how can I defend myself \ + against it? + Slughorn: It is a Ritual, one of the darkest known to wizard-kind ... + ... + <> +=== +``` + +This fragment demonstrates many of the features of the `.yarn` language, including: + +- ability to divide the text into smaller chunks called *nodes*; +- control the flow of the dialog via commands such as `<>` or `<>`; +- different dialogue path depending on player's choices; +- disable certain menu choices dynamically; +- keep state information in variables; +- user-defined functions (`time_of_day`, `luck`) and commands (`<>`, `<>`). + +For more information, see the [Yarn Language](language/language.md) section. + + +## Using the dialogue in a game + +By itself, the `jenny` library does not integrate with any game engine. However, it provides a +runtime that can be used to build such an integration. This runtime consists of the following +components: + +- [`YarnProject`](runtime/yarn_project.md) -- the central repository of information, which knows + about all your yarn scripts, variables, custom functions and commands, settings, etc. +- [`DialogueRunner`](runtime/dialogue_runner.md) -- an executor that can run a specific dialogue + node. This executor will send the dialogue lines into one or more `DialogueView`s. +- [`DialogueView`](runtime/dialogue_view.md) -- an abstract interface describing how the dialogue + will be presented to the end user. Implementing this interface is the primary way of integrating + `jenny` into a specific environment. + + +```{toctree} +:hidden: + +YarnSpinner language +Jenny API +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/commands/character.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/commands/character.md.txt new file mode 100644 index 000000000..57c0f2f14 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/commands/character.md.txt @@ -0,0 +1,60 @@ +# `<>` + +The **\<\\>** command declares a character with the given name, and one or more aliases +that can be used in the scripts. + +The command has several purposes: + +- it protects you from accidentally misspelling a character's name in your script; +- it allows a character to have *full name*, which doesn't have to be an ID; +- it allows declaring multiple aliases for the same character, which can be used in different + nodes (an alias may even be in a different language than the full name); +- you can associate additional data with each character, which will then be available at runtime. + +The format of this command is the following: + +```yarn +<> +``` + +The *full name* here is optional: if given, it will be considered *the* name of the character. +However, if the name is omitted, then the first alias will be considered the true character's name. +Each *alias* must be a valid ID, and at least one alias must be provided. For example: + +```yarn +// A well-mannered seven-year-old girl, who nevertheless always gets into +// all kinds of zany adventures. +<> + +// A magical cat known for his ability to grin majestically, and partially +// vanish. He is mad (by his own admission). +<> + +// A foul-tempered Queen, who is also a playing card. Described as +// "a blind fury", her favorite saying is "Off with their heads!". +// Not to be confused with Red Queen. +<> +``` + +After a character is declared, any of its aliases can be used in the script: they will all refer +to the same `Character` object. At the same time, using a character without declaring it first is +not allowed (unless a special flag in `YarnProject` is set to allow this). + +```yarn +title: Alice_and_the_Cat +--- +Alice: But I don't want to go among mad people. +Cat: Oh, you can't help that, we're all mad here. I'm mad. You're mad. +Alice: How do you know I'm mad? +Cat: You must be, or you wouldn't have come here. +Alice: And how do you know that you're mad? +Cat: To begin with, a dog's not mad. You grant that? +Alice: I suppose so. +Cat: Well then, you see a dog growls when it's angry, and wags its tail \ + when it's pleased. +Cat: Now, [i]I[/i] growl when I'm pleased, and wag my tail when I'm angry. \ + Therefore, I'm mad. +Alice: [i]I[/i] call it purring, not growling. +Cat: Call it what you like. +=== +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/commands/commands.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/commands/commands.md.txt new file mode 100644 index 000000000..9e42494cd --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/commands/commands.md.txt @@ -0,0 +1,66 @@ +# Commands + +The **commands** are special instructions surrounded with double angle-brackets: `<>`. There +are both *built-in* and *user-defined* commands. + +The **built-in** commands are those that are supported by the YarnSpinner runtime itself. Typically +they would alter the execution of the dialogue, or perform a similar dialogue-related function. The +full list of such commands is given below. + +The **user-defined** commands are those that you yourself create and then use within your yarn +scripts. For a full description of these commands, see the document on [user-defined commands]. + + +## Built-in commands + + +### Variables + +**[\<\\>](character.md)** +: Declares a character (person). + +**[\<\\>](declare.md)** +: Declares a global variable. + +**[\<\\>](local.md)** +: Declares a local variable. + +**[\<\\>](set.md)** +: Updates the value of a variable (either local or global). + + +### Control flow + +**[\<\\>](if.md)** +: Conditionally executes certain statements. This is equivalent to the **if** keyword in most + programming languages. + +**[\<\\>](jump.md)** +: Switches execution to another node. + +**[\<\\>](stop.md)** +: Stops executing the current node. + +**[\<\\>](visit.md)** +: Temporarily jumps to another node, and then comes back. + +**[\<\\>](wait.md)** +: Pauses the dialogue for the specified amount of time. + + +[user-defined commands]: user_defined_commands.md + +```{toctree} +:hidden: + +<> +<> +<> +<> +<> +<> +<> +<> +<> +User-defined commands +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/commands/declare.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/commands/declare.md.txt new file mode 100644 index 000000000..f0ee4e535 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/commands/declare.md.txt @@ -0,0 +1,94 @@ +# `<>` + +The **\<\\>** command creates a new global variable and assigns an initial value to it. +After this command is encountered, the declared variable will be available for use anywhere a +variable might be needed, including in inline expressions, other commands, and even other declare +statements. + +Unlike most other commands, the `<>` command is executed at compile time, i.e. when the +yarn scripts are parsed. When the dialogue runs, it has no effect, since by that time the variable +is already initialized and ready for use. For this reason, the `<>` commands must be +placed outside of nodes, at the root level of the script, making it clear that these commands do +not execute when a node runs. + +For example: + +```yarn +<> + +--------------- +title: Greeting +--------------- +Teacher: Welcome to the class, {$monicker}! +=== +``` + +Here the `<>` command introduces a new variable called `$monicker`, of type `String`, and +assigns it an initial value of `"boy"`. Later on, this variable is used inside the "Greeting" node. +By that time, the value of the variable can be anything: it could be changed in some other node, or +by the game itself. The `<>` statement, however, is necessary to tell Jenny that this is +a valid variable name, and what type it has. + +From the project organization standpoint, the recommended approach is to put all the `<>` +statements into a separate file, and then make sure that this yarn file is parsed first. This will +ensure that all global variables are declared before they are used in subsequent nodes. + +If your game supports save-games, then you would probably want to store the values of yarn global +variables too. In this case restoring the saved values should be done *after* all yarn scripts are +parsed (otherwise the engine will think that a variable is declared twice). + + +## Syntax + +There are several forms of the `<>` statement. The most common one is the following: + +```yarn +<> +``` + +Here `$VARIABLE` is the name of the variable being declared (all variables in Yarn start with a `$` +sign), and `EXPRESSION` is either a literal or a more complicated [expression] that will be +evaluated at compile time in order to provide the initial value for the variable. The type of the +variable will be deduced from the type of the `EXPRESSION`. + +Another possible syntax for the `<>` command is this: + +```yarn +<> +``` + +where `TYPE` is one of `Bool`, `Number`, or `String`. This will create a variable of the given type, +and initialize it with values `false`, `0`, or `""` respectively. + +Finally, it is possible to combine these two syntaxes: + +```yarn +<> +``` + +This can be useful when the type of the `EXPRESSION` is not immediately obvious, and you want to +make the declaration more explicit. The compiler will check that the type of the `EXPRESSION` is +the same as `TYPE`, and will throw a compile-time error otherwise. + + +## Examples + +```yarn +<> +<> +<> + +<> +<> + +<> +<> +``` + +:::{note} +It is a good idea to accompany each `<>` with a doc-comment explaining the purpose of the +variable, similarly to how you would document public members of a class. +::: + + +[expression]: ../expressions/expressions.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/commands/if.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/commands/if.md.txt new file mode 100644 index 000000000..b4df9028e --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/commands/if.md.txt @@ -0,0 +1,54 @@ +# `<>` + +The **\<\\>** command evaluates its condition, and based on that decides which statements to +execute next. This is equivalent to `if` keyword in most programming languages. This command may +have multiple parts, which look as follows: + +```yarn +<> + statements1... +<> + statements2... +<> + statementsN... +<> +``` + +- The conditions within each command must have boolean type. +- There could be any number of `<>` blocks. +- The `<>` blocks and `<>` are optional. +- The final `<>` is mandatory. +- The statements within each block must be indented. + +At runtime, the condition within the `if` block is evaluated first. If it turns out to be `true`, +then the dialogue proceeds with executing `statements1`, and no other conditions are evaluated nor +other statement blocks executed. However, if `condition1` evaluated to `false`, then `condition2` +is calculated. If it is true, then the dialogue runner will execute `statements2`, and if false it +will fall-through into the `else` block and execute `statementsN`. In the end, the dialogue will +proceed to statements that occur after the final `<>`. + + +## Example + +In this dialogue a *Guard* will greet you differently depending on your reputation with the +citizens of the area. If your reputation falls below −100, you'll be attacked on sight. + +```yarn +title: GuardGreeting +--- +<= 100>> + Guard: Hail to the savior of the people! +<= 30>> + Guard: Nice to meet you, sir! +<= 0>> + Guard: Hello +< -30>> + Guard: I'm keeping an eye on you... +< -100>> + Guard: You filthy scum! +<> + Guard: You'll pay for your crimes! #auto + <> +<> +=== +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/commands/jump.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/commands/jump.md.txt new file mode 100644 index 000000000..a6df718ac --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/commands/jump.md.txt @@ -0,0 +1,24 @@ +# `<>` + +The **\<\\>** command stops executing the current node, and then immediately starts running +the target node. This is similar to a `goto` in many programming languages. For example: + +```yarn +<> +``` + +The argument of this command is the id of the node to jump to. It can be given either as a plain +node ID, or as an expression in curly braces: + +```yarn +<> +``` + +If the expression evaluates at runtime to an unknown name, then a `NameError` exception will be +thrown. + + +## See Also + +- [\<\\>](visit.md) command, which jumps into the destination node temporarily and then + returns to the same place in the dialogue as before. diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/commands/local.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/commands/local.md.txt new file mode 100644 index 000000000..e6f77eb4a --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/commands/local.md.txt @@ -0,0 +1,48 @@ +# `<>` + +The **\<\\>** command creates a new variable within the current node, and initializes it +to some starting value. Thus, it is similar to [\<\\>][declare], except that the variable +it creates is visible within a single node only. + +The syntax of the `<>` command can be one of the following: + +```yarn +<> +<> +``` + +This would create a variable with the name `$VARIABLE` (all variables in YarnSpinner start with a +`$` sign), and assign it the value of `EXPRESSION`. In the second form, it will ensure that the +type of the expression is equal to `TYPE`, otherwise a compile-time error will be thrown. Thus, the +second form serves as the explicit annotation for the type of the variable created. + +The following restrictions apply: + +- each local variable can be declared only once within a node; +- the name of a local variable cannot coincide with the name of any global variable. + + +## Examples + +In this example the variable `$roll` will only be needed temporarily within this one node, so it +wouldn't make sense to declare it as global. + +```yarn +title: a_dice_roll +--- +<> +<> + You've rolled 1, rotten luck... +<> + You've rolled 2, which is still below the average. Try harder! +<> + You've rolled 3.14159265 (well, almost). +<> + Your roll is an unlucky number. Please roll again +<> + You've rolled 10 (when rounded to the nearest ten). Good job! +<> +=== +``` + +[declare]: declare.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/commands/set.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/commands/set.md.txt new file mode 100644 index 000000000..6525bb042 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/commands/set.md.txt @@ -0,0 +1,66 @@ +# `<>` + +The **\<\\>** command is used to update the value of an existing variable. The variable +must be declared with [\<\\>][declare] or [\<\\>][local] before it can be used +in `<>`. + +The command `<>` allows either regular assignment, or modifying assignment, like follows: + +```yarn +// Regular assignment +<> +<> + +// Modifying assignments +<> +<> +<> +<> +<> + +// These modifying assignments are equivalent to the following: +<> +<> +<> +<> +<> +``` + +In all cases, the `EXPRESSION` must have the same type as the `$VARIABLE`. If not, a compile-time +error will be thrown. + + +## Examples + +```yarn +<> + +title: ColorQuiz +--- +What is your favorite color? +-> White + <> +-> Red + <> +-> Yellow + <> +-> Blue + Oh, Nice! Which shade of blue? + -> Azure + -> Cerulean + -> Lapis Lazuli + Umm, I don't know how to spell that. I'll just put you down as "blue". + <> +-> Black + <> + That's mine too! + <> +-> Prefer not to tell + Aww... Maybe if I ask again really nicely? + <> +=== +``` + + +[declare]: declare.md +[local]: local.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/commands/stop.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/commands/stop.md.txt new file mode 100644 index 000000000..0d2c358ac --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/commands/stop.md.txt @@ -0,0 +1,13 @@ +# `<>` + +The **\<\\>** command: immediately stops evaluating the current node, as if you jumped to +its end. This command takes no arguments. + +Normally, the effect of this command is that it stops the dialogue. However, if you're only +visiting the current node from a different one, then `<>` will only exit the current node, +and the execution flow will return to the parent. Thus, the `<>` command is similar to +`return;` in many programming languages. + +```yarn +<> +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/commands/user_defined_commands.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/commands/user_defined_commands.md.txt new file mode 100644 index 000000000..66ae09d09 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/commands/user_defined_commands.md.txt @@ -0,0 +1,37 @@ +# User-defined commands + +In addition to the built-in commands, you can also declare your own **user-defined commands** for +use in your yarn scripts. Typically, these commands would perform some in-game action that can be +viewed as a natural part of the dialogue. For example, you can create commands for such action as +`<>`, `<>`, `<>`, `<>`, `<>`, `<>`, +`<>`, `<>`, `<>`, `<>`, `<>`, `<>`, +`<>`, `<>`, `<>`, `<>`, and so on. + +In many cases, the commands will need to take arguments. The arguments of a user-defined command +are processed according to the following rules: + +- First, all content after the command name and until the closing `>>` is parsed according to the + rules of regular line parsing, where interpolated expressions are allowed but markup and hashtags + are not. +- At runtime, the content of that line is evaluated, meaning that we substitute the values of all + expressions. +- The evaluated argument string is then broken into individual arguments at whitespace, and the + types of these arguments are checked against the signature of the backing function. +- Then, the backing function is called with the parsed arguments. +- Lastly, all dialogue views in the dialogue runner receive the `onCommand()` event. + +As a concrete example, consider the following command: + +```yarn +<> +``` + +First note that, unlike builtin commands, the arguments of the command are treated as text, and any +expressions need to be placed in curly brackets. + +Then, at runtime the expression is evaluated, and (assuming `$multiplier` is 1.5) the command's +argument string becomes `"Gold 150"`. The string is then broken at white spaces and each argument +is parsed according to its type in the backing Dart function. For example, if the function's +signature is `void give(String item, int? amount)`, then it will be invoked as `give("Gold", 150)`. +If, on the other hand, the number or types of arguments do not match the expected signature, then +a `DialogueException` will be raised. diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/commands/visit.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/commands/visit.md.txt new file mode 100644 index 000000000..461eb7cc0 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/commands/visit.md.txt @@ -0,0 +1,38 @@ +# `<>` + +The **\<\\>** command temporarily puts the current node on hold, executes the target node, +and after it finishes, resumes execution of the previous node. This is similar to a function call +in many programming languages. + +The `<>` command can be useful for splitting a large dialogue into several smaller nodes, +or for reusing some common dialogue lines in several nodes. For example: + +```yarn +title: RoamingTrader1 +--- +<> + Hello again, {$player}! +<> + <> +<> + +-> What do you think about the Calamity? <> + <> +-> Have you seen a weird-looking girl running by? <> + <> +-> What do you have for trade? + <> + +Pleasure doing business with you! #auto +=== +``` + +The argument of this command is the id of the node to jump to. It can be given either as a plain +node ID, or as an expression in curly braces: + +```yarn +<> +``` + +If the expression evaluates at runtime to an unknown name, then a `NameError` exception will be +thrown. diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/commands/wait.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/commands/wait.md.txt new file mode 100644 index 000000000..e51f6fe7e --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/commands/wait.md.txt @@ -0,0 +1,13 @@ +# `<>` + +The **\<\\>** command forces the dialogue engine to wait for the specified duration +(in seconds) before resuming the dialogue. The number of seconds can be 0, but cannot be negative. +This command takes a single argument, which must be a numeric expression. For example: + +```yarn +// Wait for a quarter of a second +<> + +// Wait for the amount of time given by the $delay variable +<> +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/expressions/expressions.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/expressions.md.txt new file mode 100644 index 000000000..16dfacb3d --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/expressions.md.txt @@ -0,0 +1,34 @@ +# Expressions + +The **expressions** in YarnSpinner provide a way to dynamically change the flow or the content +of the dialogue, based on [variables], combined with [operators] or [function] calls. They are +used in several places: + +- to insert a dynamic text into a [line]; +- to create or update a [variable]; +- as part of a [command] such as `<>` or `<>`; +- to compute the values of [markup] attributes. + +An expression always evaluates synchronously, meaning that it cannot wait for user's input, nor +perform an action over time, nor carry out any computationally intensive calculations in a +different thread. If such functionality is really desired, then it can be achieved via a +[user-defined command] that waits for the calculation to succeed and then stores the result into +some global [variable], which can then be accessed from an expression. + + +```{toctree} +:hidden: + +Variables +Operators +Functions +``` + +[command]: ../commands/commands.md +[function]: functions/functions.md +[line]: ../lines.md +[markup]: ../markup.md +[operators]: operators.md +[user-defined command]: ../commands/user_defined_commands.md +[variable]: variables.md +[variables]: variables.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/functions.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/functions.md.txt new file mode 100644 index 000000000..abf159360 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/functions.md.txt @@ -0,0 +1,101 @@ +# Functions + +A **function** in YarnSpinner is the same notion as in any other programming language, or in math: +it takes a certain number of arguments, and then computes and returns the result. A function call +is indicated by the name of the function, followed by its arguments in parentheses. The parentheses +are required, even when there are no arguments: + +```yarn +<> +<> +``` + +There are around 20 built-in functions in Jenny, listed below; and it is also possible to add +user-defined functions as well. + + +## Built-in functions + +- **Random functions** + - [`dice(n)`](random.md#dicen) + - [`random()`](random.md#random) + - [`random_range(a, b)`](random.md#random_rangea-b) + +- **Numeric functions** + - [`ceil(x)`](numeric.md#ceilx) + - [`dec(x)`](numeric.md#decx) + - [`decimal(x)`](numeric.md#decimalx) + - [`floor(x)`](numeric.md#floorx) + - [`inc(x)`](numeric.md#incx) + - [`int(x)`](numeric.md#intx) + - [`round(x)`](numeric.md#roundx) + - [`round_places(x, n)`](numeric.md#round_placesx-n) + +- **Type conversion functions** + - [`bool(x)`](type.md#boolx) + - [`number(x)`](type.md#numberx) + - [`string(x)`](type.md#stringx) + +- **Other functions** + - [`if(condition, then, else)`](misc.md#ifcondition-then-else) + - [`plural(x, ...)`](misc.md#pluralx-words) + - [`visit_count(node)`](misc.md#visit_countnode) + - [`visited(node)`](misc.md#visitednode) + + +## User-defined functions + +In addition to the built-in functions, you can also define any number of **user-defined functions** +which can later be used in your yarn scripts. The syntax for these functions is exactly the same +as for the built-in functions: it consists of a function name, followed by the arguments in +parentheses. + +Each user-defined function has a fixed signature, declared at the time when the function is added +to the `YarnProject`. A function must have a fixed number of arguments of specific types, and a +fixed return type. + +All user-defined functions must be added to the `YarnProject` before they can be used. A compile +error will be raised if the parser encounters an unknown function, or if the number or types of +arguments do not match. + +User-defined functions can be used for a variety of purposes, such as: + +- implement functionality that is currently missing in Jenny; +- interface with the game engine; +- provide access to "variables" stored outside of Jenny; +- etc. + +```yarn +title: Blacksmith +--- +// This example showcases several hypothetical user-defined functions: +// - broken(slot): checks whether the item in the given slot is broken; +// - name(slot): gives the name for an item in a slot, e.g. "sword" or "bow"; +// - money(): returns the current amount of money that the player has. +// At the same time, functions `round()` and `plural()` are built-in. + +<> + <> + + Blacksmith: Your {name("main_hand")} seems to be completely broken! + Blacksmith: I can fix it for just {plural($repair_cost, "% coin")} + -> Ok, do it <= $repair_cost>> + -> I'll be fine... +<> +=== +``` + +```{seealso} +- [`FunctionStorage`](../../../runtime/function_storage.md) -- document + describing how to add user-defined functions to a `YarnProject`. +``` + + +```{toctree} +:hidden: + +Random functions +Numeric functions +Type conversion functions +Miscellaneous functions +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/misc.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/misc.md.txt new file mode 100644 index 000000000..bf5a6f336 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/misc.md.txt @@ -0,0 +1,135 @@ +# Miscellaneous functions + + +## if(condition, then, else) + +This function implements the ternary-if condition, it is equivalent to the `?:` operator in Dart. + +The function evaluates its `condition` (which must be a boolean), and then returns either the value +of `then` if the condition was `true`, or the value of `else` if the condition was `false`. The +types of arguments `then` and `else` must be the same. + +Note: Only one of the `then`/`else` values will be evaluated, depending on the `condition`. This +may be important in cases when evaluating those expressions may produce a side-effect. + +```yarn +title: Birth +--- +Doctor: Congratulations, you have a { if($gender == "m", "boy", "girl") }! +=== +``` + + +## plural(x, words...) + +Returns the correct plural form depending on the value of variable `x`. + +This function is locale-dependent, and its implementation and signature changes depending on the +`locale` property in the `YarnProject`. In all cases, the first argument `x` must be numeric, +while all other arguments should be strings. + +The purpose of this function is to form correct plural phrases, according to the rules of the +current language. For example, suppose you need to say `{$n} items`, where `$n` is a variable. If +you simply plug in the value of the variable like that, you'll end up getting phrases like +"23 items", or "1 items" -- which is not what you want. So instead, the `plural()` function can be +used, which will select the correct plural form of the word "item": + +```yarn +I have {plural($n, "% item")}. +``` + +In English locale (`en`), the function `plural()` takes either 1 or 2 `word`s after the numeral +`$x`. The first word is the singular form, and the second is the plural. The second word can be +omitted if the singular form is simple enough that its plural form can be obtained by adding either +`-s` or `-es`. For example: + +```yarn +// Here "foot" is an irregular noun, so its plural form must be specified +// explicitly. At the same time, "inch" is regular, and the function +// plural() will know to add "es" to make its plural form. +The distance is {plural($ft, "% foot", "% feet")} and {plural($in, "% inch")}. +``` + +In locales other than English, the number of plural words can be anywhere from 1 to 3. Usually, +the first word is the singular form, while others are different plurals -- their meaning would +depend on a particular language. For example, in Ukrainian locale (`uk`) the function `plural()` +requires 3 words: the singular form, the "few" plural form, and the "many" plural form: + + +```yarn +// Assuming locale == 'uk' +У мене є {plural($coins, "% монета", "% монети", "% монет")}. + +// Produces phrases like this: +// У мене є 21 монета +// У мене є 23 монети +// У мене є 25 монет +``` + +Note that in all examples above the words contain the `%` sign. This is used as a placeholder where +the numeral itself should be placed. It is allowed for some (or all) of the `words` to not contain +the `%` sign. + + +## visit_count(node) + +Returns the number of times that the `node` was visited. + +A node is considered "visited" if the dialogue enters and then exits that node. The node can be +exited either through the normal dialogue flow, or via the [\<\\>] command. However, if a +runtime exception occurs while running the node, then the visit will not count. + +The `node` argument must be a string, and it must contain a valid node name. If a node with the +given name does not exist in the project, an exception will be thrown. + +```yarn +title: LuckyWheel +--- +<> + Clown: Would you like to spin a wheel and get fabulous prizes? + -> I sure do! + <> + -> I don't talk to strangers... + <> +<> + Clown: Sorry kid, we're all out of prizes for now. +<> +=== +``` + +```{seealso} +- [`visited(node)`](#visitednode) +``` + + +## visited(node) + +Returns `true` if the node with the given title was visited, and `false` otherwise. + +For a node to be considered "visited", the dialogue must enter and then exit the node at least +once. For example, within a node "X" the expression `visited("X")` will return `false` during the +first run of this node, and `true` upon all subsequent runs. + +The `node` argument must be a string, and it must contain a valid node name. If a node with the +given name does not exist in the project, an exception will be thrown. + +```yarn +title: MerchantDialogue +--- +<> + // This part of the dialogue will run only during the first interaction + // with the merchant. + Merchant: Greetings! My name is Linn. + Merchant: I offer exquisite wares for the most fastidious customers! + Player: Hi. I'm Bob. I like stuff. +<> +... +=== +``` + +```{seealso} +- [`visit_count(node)`](#visit_countnode) +``` + + +[\<\\>]: ../../commands/stop.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/numeric.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/numeric.md.txt new file mode 100644 index 000000000..6a67b4a7d --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/numeric.md.txt @@ -0,0 +1,197 @@ +# Numeric functions + +These functions are used to manipulate numeric values. Most of them take a single numeric argument +and produce a numeric result. + + +## `ceil(x)` + +Returns the value `x` rounded up towards positive infinity. In other words, this returns the +smallest integer value greater than or equal to `x`. + +```yarn +title: ceil +--- +{ ceil(0) } // 0 +{ ceil(0.3) } // 1 +{ ceil(5) } // 5 +{ ceil(5.001) } // 6 +{ ceil(5.999) } // 6 +{ ceil(-2.07) } // -2 +=== +``` + +```{seealso} +- [`floor(x)`](#floorx) +- [`int(x)`](#intx) +``` + + +## `dec(x)` + +Returns the value `x` reduced towards the previous integer. Thus, if `x` is already an integer +this returns `x - 1`, but if `x` is not an integer then this returns `floor(x)`. + +```yarn +title: dec +--- +{ dec(0) } // -1 +{ dec(0.3) } // 0 +{ dec(5.0) } // 4 +{ dec(5.001) } // 5 +{ dec(5.999) } // 5 +{ dec(-2.07) } // -3 +=== +``` + +```{seealso} +- [`inc(x)`](#incx) +``` + + +## `decimal(x)` + +Returns a fractional part of `x`. + +If `x` is positive, then the returned value will be between `0` (inclusive) and `1` (exclusive). +If `x` is negative, then the returned value will be between `0` and `-1`. In all cases it should +hold that `x == int(x) + decimal(x)`. + +```yarn +title: decimal +--- +{ decimal(0) } // 0 +{ decimal(0.3) } // 0.3 +{ decimal(5.0) } // 0 +{ decimal(5.001) } // 0.001 +{ decimal(5.999) } // 0.999 +{ decimal(-2.07) } // -0.07 +=== +``` + +```{seealso} +- [`int(x)`](#intx) +``` + + +## `floor(x)` + +Returns the value `x` rounded down towards negative infinity. In other words, this returns the +largest integer value less than or equal to `x`. + +```yarn +title: floor +--- +{ floor(0) } // 0 +{ floor(0.3) } // 0 +{ floor(5) } // 5 +{ floor(5.001) } // 5 +{ floor(5.999) } // 5 +{ floor(-2.07) } // -3 +=== +``` + +```{seealso} +- [`ceil(x)`](#ceilx) +- [`int(x)`](#intx) +``` + + +## `inc(x)` + +Returns the value `x` increased towards the next integer. Thus, if `x` is already an integer +this returns `x + 1`, but if `x` is not an integer then this returns `ceil(x)`. + +```yarn +title: inc +--- +{ inc(0) } // 1 +{ inc(0.3) } // 1 +{ inc(5.0) } // 6 +{ inc(5.001) } // 6 +{ inc(5.999) } // 6 +{ inc(-2.07) } // -2 +=== +``` + +```{seealso} +- [`dec(x)`](#decx) +``` + + +## `int(x)` + +Truncates the fractional part of `x`, rounding it towards zero, and returns just the integer part +of the argument `x`. + +```yarn +title: int +--- +{ int(0) } // 0 +{ int(0.3) } // 0 +{ int(5.0) } // 5 +{ int(5.001) } // 5 +{ int(5.999) } // 5 +{ int(-2.07) } // -2 +=== +``` + +```{seealso} +- [`decimal(x)`](#decimalx) +- [`round(x)`](#roundx) +``` + + +## `round(x)` + +Rounds the value `x` towards a nearest integer. + +The values that end with `.5` are rounded up if `x` is positive, and down if `x` is negative. + +```yarn +title: round +--- +{ round(0) } // 0 +{ round(0.3) } // 0 +{ round(5.0) } // 5 +{ round(5.001) } // 5 +{ round(5.5) } // 6 +{ round(5.999) } // 6 +{ round(-2.07) } // -2 +{ round(-2.5) } // -3 +=== +``` + +```{seealso} +- [`round_places(x, n)`](#round_placesx-n) +``` + + +## `round_places(x, n)` + +Rounds the value `x` to `n` decimal places. + +The value `x` can be either positive, negative, or zero, but it must be an integer. Rounding to +`0` decimal places is equivalent to the regular `round(x)` function. If `n` is positive, then the +function will attempt to keep that many digits after the decimal point in `x`. If `n` is negative, +then `round_places()` will round `x` to nearest tens, hundreds, thousands, etc: + +```yarn +title: round_places +--- +{ round_places(0, 1) } // 0 +{ round_places(0.3, 1) } // 0.3 +{ round_places(5.001, 1) } // 5.0 +{ round_places(5.001, 2) } // 5.0 +{ round_places(5.001, 3) } // 5.001 +{ round_places(5.5, 1) } // 5.5 +{ round_places(5.999, 1) } // 6.0 +{ round_places(-2.07, 1) } // -2.1 +{ round_places(13, -1) } // 10 +{ round_places(252, -2) } // 200 +=== +``` + +```{seealso} +- [`round(x)`](#roundx) +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/random.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/random.md.txt new file mode 100644 index 000000000..d1bc07200 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/random.md.txt @@ -0,0 +1,50 @@ +# Random functions + +These functions produce random results each time they run. + +Internally, each function uses `YarnSpinner.random` random generator, which can be replaced with a +custom generator if you need reproducible draws for debug purposes, or to prevent the player from +getting different results upon reload. + + +## `dice(n)` + +Returns a random integer between `1` and `n`, inclusive. For example, `dice(6)` will return a +random integer from 1 to 6, as if throwing a regular six-sided die. + +The argument `n` must be numeric, and greater or equal than 1. If `n` is a non-integer, then it +will be truncated to an integer value at runtime. Thus, `dice(3.5)` is equivalent to `dice(3)`. + +```yarn +<> +<> +``` + + +## `random()` + +Returns a random floating-point between `0` and `1`. + +This function can be used to implement events with a prescribed probability. For example: + +```yarn +<> + // This happens only with 0.1% probability + You found it! The Holy Grail! +<> +``` + + +## `random_range(a, b)` + +Returns a random integer between `a` and `b` inclusive. + +Both arguments `a` and `b` must be numeric, and they will be truncated to integers upon evaluation. +The value of `a` must be less than or equal to `b`, or otherwise a runtime exception will be thrown. + +The purpose of this function is similar to `dice()`, but it can be used in situations where a +custom range is desired. + +```yarn +<> +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/type.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/type.md.txt new file mode 100644 index 000000000..8ba6f9d9d --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/functions/type.md.txt @@ -0,0 +1,47 @@ +# Type conversion functions + +These functions convert values of one type into another type, if possible. All of these functions +take a single argument of arbitrary type, and return the result of the type corresponding to the +name of the function. + + +## `bool(x)` + +Converts its argument into a boolean value. + +- If `x` is already a boolean, then it returns the argument as-is. +- If `x` is numeric, then the result is `false` when `x` is `0`, and `true` for all other values + of `x`. +- If `x` is string, then the function will check whether that string can be found within + `YarnProject.trueValues` or `YarnProject.falseValues` sets. If yes, then it will return the + `true` / `false` value respectively. Otherwise, an error will be thrown. + + +## `number(x)` + +Converts its argument `x` into a numeric value. + +- If `x` is boolean, then it returns `1` for `true` and `0` for `false`. +- If `x` is numeric, then it is returned unmodified. +- If `x` is string, then the function attempts to parse that string as a number. A runtime + exception will be raised if `x` does not have a valid format for a number. The following formats + are recognized: + - integer: `"-3"`, `"214"` + - decimal: `"0.745"`, `"3.14159"`, `".1"`, `"-3."` + - scientific: `"2e5"`, `"3.11e-05"` + - hexadecimal: `"0xDEAD"`, `"0x7F"` + + +## `string(x)` + +Converts its argument `x` into a string value. + +- If `x` is boolean, returns strings `"true"` or `"false"`. +- If `x` is numeric, converts it into a string representation using the standard Dart's + `.toString()` method, which attempts to produce the shortest string that can represent + the number `x`. In particular, + - if `x` is integer-valued, returns its decimal representation without a decimal point; + - if `x` is a double in the range `1e-6` to `1e21`, returns its decimal representation + with a decimal point; + - for all other doubles, returns `x` written in the scientific (exponential) format. +- If `x` is a string, then it is returned as-is. diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/expressions/operators.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/operators.md.txt new file mode 100644 index 000000000..8041be292 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/operators.md.txt @@ -0,0 +1,192 @@ +# Operators + +The **operators** are special symbols that perform common mathematical operations. For example, +operator `+` performs summation, and thus we can write `$x + $y` to denote the sum of variables +`$x` and `$y`. There are over 20 different operators in YarnSpinner, which can be loosely grouped +into the following categories: + + +## Operator types + + +### Arithmetic + +The **arithmetic** operators, have the same meaning as in regular math. These apply to numeric +arguments (with the exception of `+` which can also be used with strings): + +```{list-table} +:align: left +:class: first-col-align-center +:header-rows: 1 +:widths: 1 2 9 + +* - operator + - name + - notes +* - `+` + - addition + - +* - `-` + - subtraction + - Also, a unary minus +* - `*` + - multiplication + - +* - `/` + - division + - Division by `0` is not allowed, and will throw a runtime error if it occurs. +* - `%` + - modulo + - This operator can apply to both integer and decimal numbers, and it returns + the remainder of integer division of two numbers. The right-hand side of + `%` cannot be zero or a negative number, otherwise a runtime error will be + thrown. The result of `x % y` is always a number in the range `[0; y)`, + regardless of the sign of `x`. +* - `+` + - concatenation + - When applied to strings, the `+` operator simply glues them together. For + example, `"Hello" + "World"` produces string `"HelloWorld"`. +``` + + +### Logical + +The **logical** operators apply to boolean values. These operators can be written either in +symbolic or word form -- both forms are equivalent: + +```{list-table} +:align: left +:class: first-col-align-center +:header-rows: 1 +:widths: 1 2 9 + +* - operator + - name + - notes +* - `!`, `not` + - logical NOT + - This is a unary operator that inverts its operand: `!true` is `false`, + and `!false` is `true`. +* - `&&`, `and` + - logical AND + - Returns `true` if both of its arguments are `true`. +* - `||`, `or` + - logical OR + - Returns `true` if at least one of its arguments is `true`. +* - `^`, `xor` + - logical XOR + - Returns `true` if the arguments are different, and `false` if they are + the same. +``` + + +### Assignment + +The **assignment** operators modify the value of a variable. The left-hand side of such an operator +is the variable that shall be modified, the right-hand side is the expression of the same type as +the variable on the left: + +```{list-table} +:align: left +:class: first-col-align-center +:header-rows: 1 +:widths: 1 2 9 + +* - operator + - name + - notes +* - `=`, `to` + - assign + - `$var = X` stores the value of `X` into the variable `$var` +* - `+=` + - increase + - `$var += X` is equivalent to `$var = $var + X` +* - `-=` + - decrease + - `$var -= X` is equivalent to `$var = $var - X` +* - `*=` + - multiply + - `$var *= X` is equivalent to `$var = $var * X` +* - `/=` + - divide + - `$var /= X` is equivalent to `$var = $var / X` +* - `%=` + - reduce modulo + - `$var %= X` is equivalent to `$var = $var % X` +``` + +Unlike all other operators, the assignment operators do not produce a value. This means they +cannot be used inside a larger expression, for example the following is invalid: `3 + ($x += 7)`. +Instead, the assignment operators are only usable at the top level of commands such as +[\<\\>], [\<\\>], and [\<\\>]. + + +### Relational + +The **relational** operators compare various values. The first two operators in this list can be +applied to operands of any types, as long as the types are the same. The remaining four operators +can only be used with numbers. Regardless of the types of operands, the result of every +relational operator is a boolean value, which can be either assigned to a variable, or used in a +larger expression: + +```{list-table} +:align: left +:class: first-col-align-center +:header-rows: 1 +:widths: 1 3 8 + +* - operator + - name + - notes +* - `==` + - equality + - +* - `!=` + - inequality + - +* - `<` + - less than + - +* - `<=` + - less than or equal + - +* - `>` + - greater than + - +* - `>=` + - greater than or equal + - +``` + +Note that operator chaining is not supported. Thus, for example, `$x == $y == $z` will first +compare variables `$x` and `$y`, then the result of that comparison, which is either `true` or +`false`, will be compared with variable `$z`. Given that such expressions would be highly +confusing to a reader, we recommend against using them. If you need to compare that all three +values `$x`, `$y` and `$z` are the same, then you should use the `&&` operator instead: +`$x == $y && $x == $z`. + + +## Precedence + +Just as in mathematics, the operators have precedence ordering among them, meaning that some +operators will always evaluate before the others. For example, if you write `3 + 4 * 5`, then +the result will be `23` instead of `35` because multiplication has higher precedence than addition +and thus evaluates first. + +The precedence order is as follows, from highest to lowest: + +- `*`, `/`, `%`; +- `-`, `+`; +- `==`, `!=`, `<`, `<=`, `>=`, `>`; +- `!`; +- `&&`, `^`; +- `||`; +- `=`, `+=`, `-=`, `*=`, `/=`, `%=`. + +You can use parentheses `()` in order to alter the order of evaluation. For example, `(3 + 4) * 5` +is `35` instead of `23`. + + +[\<\\>]: ../commands/declare.md +[\<\\>]: ../commands/local.md +[\<\\>]: ../commands/set.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/expressions/variables.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/variables.md.txt new file mode 100644 index 000000000..913743df8 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/expressions/variables.md.txt @@ -0,0 +1,88 @@ +# Variables + +A **variable** is a place to store some piece of information -- it is the same notion as in any +other programming language. Each variable has a **name**, **value**, **type**, and a **scope**. + + +## Name + +The **name** of a variable is how you refer to it in a `.yarn` script. The names of all variables +start with a `$` sign, followed by a letter or an underscore, and then by any number of letters, +digits, or underscores. Thus, the following are all valid variables names: + +```text +$i +$WARNING +$_secret_ +$door10 +$climbed_over_wall_and_avoided_all_guard_patrols +$DoorPassword +``` + +while the following are NOT valid names: + +```text +$2000_years +$[main] +@today +victory +``` + + +## Type + +Each variable has a certain **type** associated with it. The type of a variable is determined when +the variable is first declared, and it never changes afterwards. + +There are three types of variables in YarnSpinner: `string`, `number`, and `bool`. + +- `bool` variables can store either `true` or `false` and nothing else; +- `number` variables may contain either integer or decimal numbers, such as `0`, `42`, `2.5`; +- `string` variables contain arbitrary text, for example `"the most random number is 4"`. + +```yarn +// Creates a variable $money of type number, and gives it initial value of 100 +<> + +// Creates variable $name of type string, the initial value will be "" +<> +``` + + +## Value + +Each variable stores a single **value**. This value can be replaced with another value at any time, +but the type of the new value must be the same. + +Each variable will have an initial value assigned to it when the variable is first created, and +then new values can be assigned with the [\<\\>][set] command. + +```yarn +<> // increases the value of $money by 10 +``` + + +## Scope + +The **scope** of a variable is where exactly it can be accessed. In YarnSpinner, the variables can +be either global or local. + +- The **global** variables are introduced via the [\<\\>][declare] command, and once + created can be accessed anywhere. The names of all global variables are unique. +- The **local** variables are created with the [\<\\>][local] command, and can only be used + within the node where they were created. It is possible to have a local variable with the same + name in different nodes, and they will be considered different variables. + +```yarn +<> + +title: MyNode +--- +<> +=== +``` + + +[declare]: ../commands/declare.md +[local]: ../commands/local.md +[set]: ../commands/set.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/language.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/language.md.txt new file mode 100644 index 000000000..433bbc849 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/language.md.txt @@ -0,0 +1,82 @@ +# YarnSpinner language + +**YarnSpinner** is the language in which `.yarn` files are written. You can check out the +[official documentation] for the YarnSpinner language, however, here we will be describing the +**Jenny** implementation, which may not contain all the original features, but may also contain +some that were not implemented in the YarnSpinner yet. + + +## Yarn files + +Any Yarn project will contain one or more `.yarn` files. These are plain text files in UTF-8 +encoding. As such, they can be edited in any text editor or IDE. + +Having multiple `.yarn` files helps you better organize your project, but Jenny doesn't impose any +requirements on the number of files or their relationship. + +Each `.yarn` file may contain **comments**, **tags**, **[commands]**, and **[nodes]**. +For example: + +```yarn +// This is a comment +// The line below, however, is a tag: +# Chapter 1d + +<> +<> // is this too much? + +title: Start +--- +// Node content +=== +``` + + +### Comments + +A comment starts with `//` and continues until the end of the line. All the text inside a comment +will be completely ignored by Jenny as if it wasn't there. + +There are no multi-line comments in YarnSpinner. + + +### Tags + +File-level tags start with a `#` and continue until the end of the line. A tag can be used to +include some per-file custom project metadata. These tags are not interpreted by Jenny in any way. + + +### Commands + +The commands are explained in more details [later][commands], but at this point it is +worth pointing out that only a limited number of commands are allowed at the root level of a file +(that is, outside of nodes). Currently, these commands are: + +- `<>` +- `<>` + +The commands outside of nodes are compile-time instructions, that is they are executed during the +compilation of a YarnProject. + + +### Nodes + +Nodes represent the main bulk of content in a yarn file, and are explained in a dedicated +[section][nodes]. There could be multiple nodes in a single file, placed one after another. +No special separator is needed between nodes: as soon as one node ends, the next one can begin. + + +```{toctree} +:hidden: + +Nodes +Lines +Options +Commands +Expressions +Markup +``` + +[commands]: commands/commands.md +[nodes]: nodes.md +[official documentation]: https://docs.yarnspinner.dev/getting-started/writing-in-yarn diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/lines.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/lines.md.txt new file mode 100644 index 000000000..61fad4fd2 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/lines.md.txt @@ -0,0 +1,195 @@ +# Lines + +A **line** is the most common element of the Yarn dialogue. It's just a single phrase that a +character in the game says. In a `.yarn` file, a **line** is represented by a single line of text +in a [node body]. A line may contain the following elements: + +- A character ID; +- Normal text; +- Escaped text; +- Interpolated expressions; +- Markup; +- Hashtags; +- A comment at the end of the line; +- (a line, however, cannot contain commands). + +A **line** is represented with the [DialogueLine] class in Jenny runtime. + + +## Character ID + +If a line starts with a single word followed by a `:`, then that word is presumed to be the name +of the character who is speaking that line. In the following example there are two characters +talking to each other: Prosser and Ford, and the last line has no character ID. + +```yarn +title: Bulldozer_Conversation +--- +Prosser: You want me to come and lie there... +Ford: Yes +Prosser: In front of the bulldozer? +Ford: Yes +Prosser: In the mud. +Ford: In, as you say, the mud. +(low rumbling noise...) +=== +``` + +It is worth emphasizing that a character ID must be a valid ID -- that is, it cannot contain +spaces or other special characters. In the example below "Harry Potter" is not a valid character ID, +while all other alternatives are ok. + +```yarn +title: Hello +--- +Harry Potter: Hello, Hermione! +Harry_Potter: Hello, Hermione! +HarryPotter: Hello, Hermione! +Harry: Hello, Hermione! +=== +``` + +If you want to have a line that starts with a `WORD + ':'`, but you don't want that word to be +interpreted as a character name, then the colon can be [escaped](#escaped-text): + +```yarn +title: Warning +--- +Attention\: The cake is NOT a lie +=== +``` + +```{note} +All characters must be **declared** using the [\<\\>] command +before they can be used in a script. +``` + + +## Interpolated expressions + +You can insert dynamic text into a line with the help of **interpolated expression**s. These +expressions are surrounded with curly braces `{}`, and everything inside the braces will be +evaluated, and then the result of the evaluation will be inserted into the text. + +```yarn +title: Greeting +--- +Trader: Hello, {$player_name}! Would you like to see my wares? +Player: I have only {plural($money, "% coin")}, do you have anything I can afford? +=== +``` + +The expressions will be evaluated at runtime when the line is delivered, which means it can produce +different text during different runs of the line. + +```yarn +title: Exam_Greeting +--- +<> + Professor: Welcome to the exam! + <> +<> + Professor: You have tried {plural($n_attempts, "% time")} already, but I \ + can give you another try. + <> +<> + Professor: You've failed 5 times in a row! How is this even possible? +<> +=== +``` + +After evaluation, the text of the expression will be inserted into the line as-is, without any +further processing. Which means that the text of the expression may contain special characters +(such as `[`, `]`, `{`, `}`, `\`, etc), and they don't need to be escaped. It also means that the +expression cannot contain markup, or produce a hashtag, etc. + +Read more about expressions in the [Expressions] section. + + +## Markup + +The **markup** is a mechanism for text annotation. It is somewhat similar to HTML tags, except that +it uses square brackets `[]` instead of angular ones: + +```yarn +title: Markup +--- +Wizard: No, no, no! [em]This is insanity![/em] +=== +``` + +The markup tags do not alter the text of the line, they merely insert annotations in it. Thus, the +line above will be delivered in game as "No, no, no! This is insanity!", however there will be +additional information attached to the line that shows that the last 17 characters were marked with +the `em` tag. + +Markup tags can be nested, or be zero-width, they can also include parameters whose values can be +dynamic. Read more about this in the [Markup] document. + + +## Hashtags + +Hashtags may appear at the end of the line, and take the following form: `#text`. That is, a hashtag +is a `#` symbol followed by any text that doesn't contain whitespace. + +Hashtags are used to add line-level metadata. There can be no line content after a hashtag (though +comments are allowed). A line can have multiple hashtags associated with it. + + +```yarn +title: Hashtags +--- +Harry: There is no justice in the laws of Nature, Headmaster, no term for \ + fairness in the equations of motion. #sad // HPMOR.39 +Harry: The universe is neither evil, nor good, it simply does not care. +Harry: The stars don't care, or the Sun, or the sky. +Harry: But they don't have to! We care! #elated #volume:+1 +Harry: There is light in the world, and it is us! #volume:+2 +=== +``` + +In most cases the Jenny engine does not interpret the tags, but merely stores them as part of the +line information. It is up to the programmer to examine these tags at runtime. + + +## Escaped text + +Whenever you have a line that needs to include a character that would normally be interpreted as +one of the special syntaxes mentioned above, then such a character can be **escaped** with a +backslash `\`. + +The following escape sequences are recognized: `\\`, `\/`, `\#`, `\<`, `\>`, `\[`, `\]`, `\{`, `\}`, +`\:`, `\-`, `\n`. In addition, there is also `\⏎` (i.e. backslash followed immediately by a +newline). + +```yarn +title: Escapes +--- +\// This is not a comment // but this is +This is not a \#hashtag +This is not a \<> +\{This line\} does not contain an expression +Not a \[markup\] +=== +``` + +The `\⏎` escape can be used to split a single long line into multiple physical lines, that would +still be treated by Jenny as if it was a single line. This escape sequence consumes both the +newline symbol and all the whitespace at the start of the next line: + +```yarn +title: One_long_line +--- +This line is so long that it becomes uncomfortable to read in a text editor. \ + Therefore, we use the backslash-newline escape sequence to split it into \ + several physical lines. The indentation at the start of the continuation \ + lines is for convenience only, and will be removed from the resulting \ + text. +=== +``` + + +[node body]: nodes.md#body +[DialogueLine]: ../runtime/dialogue_line.md +[Expressions]: expressions/expressions.md +[Markup]: markup.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/markup.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/markup.md.txt new file mode 100644 index 000000000..304c5efe2 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/markup.md.txt @@ -0,0 +1,120 @@ + + + +# Markup + +**Markup** is a mechanism for annotating fragments of a dialogue line. They are somewhat similar to +HTML tags, or you can imagine them as comments in a google document. Importantly, markup tags +only annotate the text, but do not alter its content or display in the game. It is up to the +developer to actually use the markup information in their game. + + +## Syntax + +Markup tags are denoted with the name of the tag, placed in square brackets: `[tag_name]`. The +corresponding closing tag would be `[/tag_name]`. Every markup tag must have a corresponding +closing tag: + +```yarn +Hello, [wavy]world[/wavy]! +``` + +Markup tags may nest within each other, though they must nest properly, in the sense that one +markup range must be fully inside or fully outside another: + +```yarn +Lorem [S]ipsum dolor [A]sit[/A] amet[/S], consectetur [B]adipiscing[/B] elit +``` + +The special **close-all** markup tag `[/]` closes all currently opened markup ranges. It is also +handy in situations where the name of the markup tag is long and you don't want to repeat it: + +```yarn +Lorem ipsum dolor sit amet, [bold]consectetur adipiscing elit[/] +``` + +The **self-closing** markup tags have the form `[tag_name/]`. These tags mark a single location +within the text. In addition, if such tag is surrounded by spaces on both sides, then a single +space after the tag will be removed from the resulting text. If this is undesired, then simply +add an extra space after the markup tag: + +```yarn +Lorem ipsum dolor sit amet, [wave/] consectetur adipiscing elit. +``` + +Markup tags also accept parameters, which are similar to HTML tag attributes. The names of these +parameters can be arbitrary IDs, and the values are expressions that will be evaluated each time +the line is executed. Thus, the values of attributes can be dynamic: + +```yarn +Lorem ipsum [color name=$color]dolor sit amet[/color] +``` + +Markup tags can surround dynamic text (interpolated expressions), which will cause the length of +the marked up span to be different every time the line is run. At the same time, markup cannot be +generated dynamically -- in the sense that the interpolated expressions will always be inserted +as-is, even if they contain some text in square brackets. + +```yarn +Hello, [b]{$player}[/b]! +``` + +Lastly, it should be noted that if you want to have an actual text in square brackets within a +line, then in order to prevent it from being parsed as markup you can escape the square brackets +with a backslash `\`: + +```yarn +Hello, \[world\]! +``` + +```{seealso} +- [MarkupAttribute](../runtime/markup_attribute.md): the runtime representation + of a markup attribute within a line. +``` + + +## Examples + + +### Mark a piece of text with a different style + +In this example the word "Voldemort" is rendered with a special "cursed" markup, indicating that +the word itself is cursed (it is up to you how to actually render this in a game). Similarly, the +word "stupid" in the second line has an emphasis, which may be rendered as italic text. + +```yarn +title: Scene117_Harry_MrMalfoy +--- +Harry: I'm not afraid of [cursed]Voldemort[/cursed]! +MrMalfoy: You must be really brave... or really [i]stupid[/i]? +=== +``` + + +### Provide additional information about a text fragment + +In this example the word "Llewellyn" has a tooltip information associated with it. A game might +render this with a special style suggesting that the user may hover over that word to see a +tooltip with a minimap for where to find this NPC. + +```yarn +title: MonkDialogue +--- +Monk: Visit [tooltip place="TS" x=23 y=-74]Llewellyn[/] in Thunderstorm, \ + he will be able to help you. +=== +``` + + +### Indicate where special non-text tokens may be inserted + +The `[item/]` markup tag will be replaced by the item's name, which will also be interactive: +tapping this name would bring up the item's description card. + +```yarn +title: BlacksmithQuest +--- +<> +Smith: Find me my lost ring, and I'll give you this [item id=$reward/]. +=== +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/nodes.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/nodes.md.txt new file mode 100644 index 000000000..affecd806 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/nodes.md.txt @@ -0,0 +1,89 @@ +# Nodes + +A **node** is a small section of text, that represents a single conversation or interaction with +an NPC. Each node has a **title**, which can be used to *run* that node in a [DialogueRunner], or to +[jump] to that node from another node. + +You can think of a node as if it was a function in a regular programming language. Running a node +is equivalent to calling a function, and it is not possible to start execution in the middle of a +node/function. When a function becomes too large, we will usually want to split it into multiple +smaller ones -- the same is true for nodes, when a node becomes too long it is a good idea to split +it into several smaller nodes. + +Each node consists of a **header** and a **body**. The header is separated from the body with 3 +(or more) dashes, and the body is terminated with 3 "=" signs: + +```yarn +// NODE HEADER +--- +// NODE BODY +=== +``` + +In addition, you can use 3 (or more) dashes to separate the header from the previous content, which +means the following is also a valid node: + +```yarn +--------------- +// NODE HEADER +--------------- +// NODE BODY +=== +``` + +A **node** is represented with a [Node] class in Jenny runtime. + +[Node]: ../runtime/node.md + + +## Header + +The header of a node consists of one or more lines of the form `TAG: CONTENT`. One of these lines +must contain the node's **title**, which is the name of the node: + +```yarn +title: NodeName +``` + +The title of a node must be a valid ID (that is, starts with a letter, followed by any number of +letters, digits, or underscores). All nodes within a single project must have unique titles. + +Besides the title, you can add any number of extra tags into the node's header. Jenny will store +these tags with the node's metadata, but will not interpret them in any other way. You will then +be able to access these tags programmatically + +```yarn +title: Alert +colorID: 0 +modal: true +--- +WARNING\: Entering Radioactive Zone! +=== +``` + + +## Body + +The body of a node is where the dialogue itself is located. The body is just a sequence of +statements, where each statement is either a [Line], an [Option], or a [Command]. For example: + +```yarn +title: Gloomy_Morning +camera_zoom: 2 +--- +You : Good morning! +Guard: You call this good? 'Tis as crappy as could be +You : Why, what happened? +Guard: Don't you see the fog? Chills me through to the bones +You : Sorry to hear that... +You : So, can I pass? +Guard: Can I get some exercise cutting you into pieces? Maybe that'll warm me up! +You : Ok, I think I'll be going. Hope you feel better soon! +=== +``` + +[DialogueRunner]: ../runtime/dialogue_runner.md +[jump]: commands/jump.md +[Line]: lines.md +[Option]: options.md +[Command]: commands/commands.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/language/options.md.txt b/docs/1.18.0/_sources/other_modules/jenny/language/options.md.txt new file mode 100644 index 000000000..1c28fa3cd --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/language/options.md.txt @@ -0,0 +1,62 @@ +# Options + +**Options** are special lines that display a menu of choices for the player, and the player must +select one of them in order to continue. The options are indicated with an arrow `->` at the start +of the line: + +```yarn +title: Adventure +--- +You arrive at the edge of the forest. The road dives in, but there is another \ +one going around the edge. +-> Go straight ahead, on the beaten path (x) +-> Take the road along the forest's edge +-> Turn back +=== +``` + +An option is typically followed by an indented list of statements (which may, again, be lines, +options, or commands). These statements indicate how the dialogue should proceed if the player +chooses that particular option. After the control flow finishes running through the block +corresponding to the selected option, the dialogue resumes after the option set. + +Other than the arrow indicator, an option follows the same syntax as the [line]. Thus, it can have +a character name, the main text, interpolated expressions, markup, and hashtags. One additional +feature that an option can have is the **conditional**. A conditional is a short-form `<>` +command after the text of an option (but before the hashtags): + +```yarn +title: Bridge +--- +Guard: 50 coins and you can cross the bridge. +-> Alright, take the money <= 50>> + <> + <> +-> I have so much money, here, take a 100 <= 10000>> + <> + <> + Guard: Wow, so generous! + Guard: But I wouldn't recommend going around telling everyone that you \ + have "so much money" +-> That's too expensive! + Guard: Is it? My condolences +-> How about I [s]kick your butt[/s] instead? + <> + <> + <> + You make a very reasonable point, sir, my apologies. + <> + <> +=== +``` + +When the conditional evaluates to `true`, the option is delivered to the game normally. If the +conditional turns out to be false, the option is still delivered, but is marked as `unavailable`. +It is up to the game whether to display such option as greyed out, or crossed, or not show it at +all; however, such option cannot be selected. + +As you have noticed, options always come in groups: after all, the player must select among several +possible choices. Thus, any sequence of options that are adjacent to each other in the dialogue, +will always be delivered as a single bundle to the frontend. This is called the **choice set**. + +[line]: lines.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/character.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/character.md.txt new file mode 100644 index 000000000..0882eae3b --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/character.md.txt @@ -0,0 +1,17 @@ +# Character + +```{dartdoc} +:package: jenny +:symbol: Character +:file: src/character.dart + +[<>]: ../language/commands/character.md +``` + + +## See Also + +- [CharacterStorage]: the container where all Character objects within a YarnProject are cached. + + +[CharacterStorage]: character_storage.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/character_storage.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/character_storage.md.txt new file mode 100644 index 000000000..04090c103 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/character_storage.md.txt @@ -0,0 +1,38 @@ +# CharacterStorage + +```{dartdoc} +:package: jenny +:symbol: CharacterStorage +:file: src/character_storage.dart +``` + + +## Accessing character storage + +Character storage is accessed via the [YarnProject]. + +```dart +final characters = yarnProject.characters; +``` + + +## Removing characters + +There may be situations where characters need to be removed from storage. For example, in a game +with many scenes, characters could be removed after a scene and new characters loaded for the next +scene. + +Remove all characters with `clear`. + +```dart +yarnProject.characters.clear(); +``` + +Use `remove` to remove a single character. Pass in the name of the character or any of its +aliases. The character and all its aliases will be removed. + +```dart +yarnProject.characters.remove('Jenny'); +``` + +[YarnProject]: yarn_project.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/command_storage.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/command_storage.md.txt new file mode 100644 index 000000000..a5aee80de --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/command_storage.md.txt @@ -0,0 +1,198 @@ +# CommandStorage + +The **CommandStorage** is a part of [YarnProject] responsible for storing all [user-defined +commands]. You can access it as the `YarnProject.commands` property. + +The command storage can be used to register any number of custom commands, making them available to +use in yarn scripts. Such commands must be registered before parsing the yarn scripts, or the +compiler will throw an error that the command is not recognized. + +In order to register a function as a yarn command, the function must satisfy several requirements: + +- The function's return value must be `void` or `Future`. If the function returns a future, + then that future will be awaited before proceeding to the next step of the dialogue. This makes it + possible to create commands that take a certain time to unfold in the game, for example + `<>`, `<>`, or `<>`. +- The function's arguments must be of types that are known to Yarn: `String`, `num`, `int`, + `double`, or `bool`. All arguments must be positional, with no defaults. +- In order to register the function, use methods `addCommand0()` ... `addCommand5()`, according to + the number of function's arguments. +- If the function's signature has 1 or more booleans at the end, then those arguments will be + considered optional and will default to `false`. + + +## Methods + +**hasCommand**(`String name`) → `bool` +: Returns the status of whether the command `name` has been added to the storage. + +**addCommand0**(`String name`, `FutureOr Function() fn`) +: Registers a no-argument function `fn` as the command `name`. + +**addCommand1**(`String name`, `FutureOr Function(T1) fn`) +: Registers a single-argument function `fn` as the command `name`. + +**addCommand2**(`String name`, `FutureOr Function(T1, T2) fn`) +: Registers a two-argument function `fn` as the command `name`. + +**addCommand3**(`String name`, `FutureOr Function(T1, T2, T3) fn`) +: Registers a three-argument function `fn` as the command `name`. + +**addCommand4**(`String name`, `FutureOr Function(T1, T2, T3, T4) fn`) +: Registers a four-argument function `fn` as the command `name`. + +**addCommand5**(`String name`, `FutureOr Function(T1, T2, T3, T4, T5) fn`) +: Registers a five-argument function `fn` as the command `name`. + +**addOrphanedCommand**(`name`) +: Registers a command `name` which is not backed by any Dart function. Such command will still be + delivered to [DialogueView]s via the `onCommand()` callback, but its arguments will not be parsed. + +**clear** +: Removes all user-defined commands + +**remove**(`String name`) +: Removes the user-defined command with the specified `name`. + + +## Properties + +**length** → `int` +: The number of user-defined commands registered so far. + +**isEmpty** → `bool` +: Returns `true` if no user-defined commands were registered. + +**isNotEmpty** → `bool` +: Returns `true` if any commands have been registered + + +## Examples + + +### `<>` + +Suppose we want to have a yarn command `<>`, which would initiate a quest. The command +would take the quest name and quest ID as arguments. Technically, just the ID should be enough -- +but then it would be really difficult to read the yarn script and understand what quest is being +initiated. So, instead we'll pass both the ID and the name, and then check at runtime that the ID +of the quest matches its name. + +A typical invocation of this command might look like this (note that the name of the quest is in +quotes, otherwise it would be parsed as four different arguments `"Get"`, `"rid"`, `"of"`, and +`"bandits"`): + +```yarn +<> +``` + +In order to implement this command, we create a Dart function `startQuest()` with two string +arguments. The function will do a brief animated "Started quest X" message, but we don't want the +game dialogue to wait for that message, so we'll make the function return `void`, not a future. +Finally, we register the command with `commands.addCommand2()`. + +```dart +class MyGame { + late YarnProject yarnProject; + + void startQuest(String questId, String questName) { + assert(quests.containsKey(questId)); + assert(quests[questId]!.name == questName); + // ... + } + @override + void onLoad() { + yarnProject = YarnProject() + ..commands.addCommand2('StartQuest', startQuest); + } +} +``` + +Note that the name of the Dart function is different from the name of the command -- you can choose +whatever names suit your programming style best. + + +### `<>` + +The `<>` function will open a modal dialogue and ask the user to enter their response. This +command will be waiting for the user's input, so it must return a future. Also, we want to return +the result of the prompt into the dialogue -- but, unfortunately, the commands are not expressions, +and are not supposed to return values. So instead we will write the result into a global variable +`$prompt`, and then the dialogue can access that variable in order to read the result of the prompt. + +```dart +class MyGame { + final YarnProject yarnProject = YarnProject(); + + Future prompt(String message) async { + // This will wait until the modal dialog is popped from the router stack + final name = await router.pushAndWait(KeyboardDialog(message)); + yarnProject.variables.setVariable(r'$prompt', name); + } + + @override + void onLoad() { + yarnProject + ..variables.setVariable(r'$prompt', '') + ..commands.addCommand1('prompt', prompt); + } +} +``` + +Then in a yarn script this command can be used like this: + +```yarn +<> + +title: Greeting +--- +Guide: Hello, my name is Jenny, and you? +<> +<> // Store the name for later +Guide: Nice to meet you, {$player} +=== +``` + + +### `<>` + +Suppose that we want to make a command that will give the player a certain item, or a number of +items. This command would take 3 arguments: the person who gives the items, the name of the item, +and the quantity. For example: + +```yarn +<> +``` + +Note that the quest reward variable will contain both the reward item and its amount, for example +it could be `"100 gold"`, `"5 potion_of_healing"`, or `'1 "Sword of Darkness"'`. When such +variable is substituted into the command at runtime, the command becomes equivalent to + +```yarn +<> +<> +<> +``` + +which will then be parsed as a regular 3-argument command corresponding to the following Dart +function: + +```dart +/// Takes [amount] of [item]s from [source] and gives them to the player. +void give(int amount, String item, String source) { + // ... +} +``` + + +## See also + +- The description of [user-defined commands] in the YarnSpinner language. +- The [UserDefinedCommand] class, which is used to inform a [DialogueView] that a custom command + is being executed. + + +[DialogueView]: dialogue_view.md +[UserDefinedCommand]: user_defined_command.md +[YarnProject]: yarn_project.md +[user-defined commands]: ../language/commands/user_defined_commands.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_choice.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_choice.md.txt new file mode 100644 index 000000000..33dd515f0 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_choice.md.txt @@ -0,0 +1,16 @@ +# DialogueChoice + +The **DialogueChoice** class represents multiple [Option] lines in the `.yarn` script, which will be +presented to the user so that they can make a choice for how the dialogue should proceed. The +`DialogueChoice` objects will be delivered to your `DialogueView` with the method +`onChoiceStart()`. + + +## Properties + +**options** `List` +: The list of [DialogueOption]s comprising this choice set. + + +[Option]: ../language/options.md +[DialogueOption]: dialogue_option.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_line.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_line.md.txt new file mode 100644 index 000000000..678defaf9 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_line.md.txt @@ -0,0 +1,9 @@ +# DialogueLine + +```{dartdoc} +:package: jenny +:symbol: DialogueLine +:file: src/structure/dialogue_line.dart + +[Line]: ../language/lines.md +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_option.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_option.md.txt new file mode 100644 index 000000000..9f0778cab --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_option.md.txt @@ -0,0 +1,30 @@ +# DialogueOption + +The **DialogueOption** class represents a single [Option] line in the `.yarn` script. Multiple +options will be grouped into [DialogueChoice] objects. + + +## Properties + +**text** `String` +: The computed text of the option, after evaluating the inline expressions, stripping the markup, + and processing the escape sequences. + +**tags** `List` +: The list of hashtags for this option. If there are no hashtags, the list will be empty. Each entry + in the list will be a simple string starting with `#`. + +**attributes** `List` +: The list of markup spans associated with the option. Each [MarkupAttribute] corresponds to a + single span within the **text**, delineated with markup tags. + +**isAvailable** `bool` +: The result of evaluating the *conditional* of this option. If the option has no conditional, this + will return `true`. + +**isDisabled** `bool` +: Same as `!isAvailable`. + + +[Option]: ../language/options.md +[DialogueChoice]: dialogue_choice.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_runner.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_runner.md.txt new file mode 100644 index 000000000..3e5833ddc --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_runner.md.txt @@ -0,0 +1,54 @@ +# DialogueRunner + +```{dartdoc} +:file: src/dialogue_runner.dart +:symbol: DialogueRunner +:package: jenny +``` + + +## Execution model + +The `DialogueRunner` uses futures as a main mechanism for controlling the timing of the dialogue +progression. For each event, the dialogue runner will invoke the corresponding callback on all its +[DialogueView]s, and each of those callbacks may return a future. The dialogue runner then awaits +on all of these futures (in parallel), before proceeding to the next event. + +For a simple `.yarn` script like this + +```yarn +title: main +--- +Hello +-> Hi +-> Go away + <> +=== + +title: Away +--- +<> +=== +``` + +the sequence of emitted events will be as follows (assuming the second option is selected): + +- `onDialogueStart()` +- `onNodeStart(Node("main"))` +- `onLineStart(Line("Hello"))` +- `onLineFinish(Line("Hello"))` +- `onChoiceStart(Choice(["Hi", "Go away"]))` +- `onChoiceFinish(Option("Go away"))` +- `onNodeFinish(Node("main"))` +- `onNodeStart(Node("Away"))` +- `onCommand(Command("OhNo"))` +- `onNodeFinish(Node("Away"))` +- `onDialogueFinish()` + +:::{note} +Keep in mind that if a `DialogueError` is thrown while running the dialogue, then the dialogue will +terminate immediately and none of the `*Finish` callbacks will run. +::: + + +[DialogueView]: dialogue_view.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_view.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_view.md.txt new file mode 100644 index 000000000..c2e1cd118 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/dialogue_view.md.txt @@ -0,0 +1,14 @@ +# DialogueView + +```{dartdoc} +:file: src/dialogue_view.dart +:symbol: DialogueView +:package: jenny + +[Completer]: https://api.dart.dev/stable/2.18.6/dart-async/Completer-class.html +[FutureOr]: https://api.dart.dev/stable/2.18.6/dart-async/FutureOr-class.html +[user-defined command]: user_defined_command.md +[<>]: ../language/commands/jump.md +[<>]: ../language/commands/stop.md +[<>]: ../language/commands/visit.md +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/function_storage.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/function_storage.md.txt new file mode 100644 index 000000000..f644f5e36 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/function_storage.md.txt @@ -0,0 +1,76 @@ +# FunctionStorage + +The **FunctionStorage** is a part of [YarnProject] responsible for storing all [user-defined +functions]. You can access it as the `YarnProject.functions` property. + +The function storage can be used to register any number of custom functions, making them +available to use in yarn scripts. Such functions must be registered before parsing the yarn +scripts, or the compiler will throw an error that the function name is not recognized. + +A Dart function can be registered as a user-defined function in Jenny, if it satisfies the +following requirements: + +- its return type is one of `int`, `double`, `num`, `bool`, or `String`; +- all its arguments are positional, i.e. there are no named arguments; +- all its arguments have types `int`, `int?`, `double`, `double?`, `num`, `num?`, `bool`, `bool?`, + `String`, or `String?`; +- the nullable arguments, if any, must come after the non-nullable ones. These arguments become + optional in Yarn scripts, and if not provided they will be passed as `null` values; +- the first argument in a function can also be `YarnProject`. If such argument is present, then + it will be passed automatically. For example, if you have a function `fn(YarnProject, int)`, + then it can be invoked from the yarn script simply as `fn(1)`. + +A Dart function can then be added using one of the methods `addFunction0`, ..., `addFunction4`, +depending on how many arguments the function has (this is a limitation of Dart's template language). +When registering a function, you give it a `name`, under this function will be known in Yarn +scripts. This name can be the same, or different from the real function's name. For example, you +may have a function `hasVisitedTheWizard()` in your game, but you'd register it under the name +`has_visited_the_wizard()` in your YarnProject. + +Keep in mind that the name of the user-defined function must be: + +- unique; +- a valid ID; +- cannot be the same as any built-in function. + + +## Methods + +**hasFunction**(`String name`) → `bool` +: Returns the status of whether the function `name` has been already registered. + +**addFunction0**(`String name`, `T0 Function() fn`) +: Registers a no-argument function `fn` as the user-defined function `name`. + +**addFunction1**(`String name`, `T0 Function(T1) fn1`) +: Registers a single-argument function `fn1` under the name `name`. + +**addFunction2**(`String name`, `T0 Function(T1, T2) fn2`) +: Registers a two-argument function `fn2` with the given `name`. + +**addFunction3**(`String name`, `T0 Function(T1, T2, T3) fn3`) +: Registers a three-argument function `fn3` with the name `name`. + +**addFunction4**(`String name`, `T0 Function(T1, T2, T3, T4) fn4`) +: Registers a four-argument function `fn4` as `name`. + +**clear** +: Removes all user-defined functions + +**remove**(`String name`) +: Removes the user-defined function with the specified `name`. + + +## Properties + +**length** → `int` +: The number of user-defined functions registered so far. + +**isEmpty** → `bool` +: Returns `true` if no user-defined functions were registered. + +**isNotEmpty** → `bool` +: Has any functions been registered at all? + + +[user-defined functions]: ../language/expressions/functions/functions.md#user-defined-functions diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/jenny_runtime.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/jenny_runtime.md.txt new file mode 100644 index 000000000..222a7e3f5 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/jenny_runtime.md.txt @@ -0,0 +1,20 @@ +# Jenny Runtime + +```{toctree} +:hidden: + +Character +CharacterStorage +CommandStorage +DialogueChoice +DialogueLine +DialogueOption +DialogueRunner +DialogueView +FunctionStorage +MarkupAttribute +Node +UserDefinedCommand +VariableStorage +YarnProject +``` diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/markup_attribute.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/markup_attribute.md.txt new file mode 100644 index 000000000..f71c39ad3 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/markup_attribute.md.txt @@ -0,0 +1,43 @@ +# MarkupAttribute + +A **MarkupAttribute** is a descriptor of a subrange of text in a [line], demarcated with markup +tags. For example, in a `.yarn` line below there are two ranges of text surrounded by markup tags, +and therefore there will be two `MarkupAttribute`s associated with this line: + +```yarn +[b]Jenny[/b] is a library based on \ + [link url="docs.yarnspinner.dev"]YarnSpinner[/link] for Unity. +``` + +These `MarkupAttribute`s can be found in the `.attributes` property of a [DialogueLine][line]. + + +## Properties + +**name** `String` +: The name of the markup tag. In the example above, the name of the first attribute is `"b"`, and + the second is `"link"`. + +**start**, **end** `int` +: The location of the marked-up span within the final text of the line. The first index is + inclusive, while the second is exclusive. The `start` may be equal to `end` for a zero-width + markup attribute. + +**length** `int` +: The length of marked-up text. This is always equal to `end - start`. + +**parameters** `Map` +: The set of parameters associated with this markup attribute. In the example above, the first + markup attribute has no parameters, so this map will be empty. The second markup attribute has a + single parameter, so this map will be equal to `{"url": "docs.yarnspinner.dev"}`. + + The type of each parameter will be either `String`, `num`, or `bool`, depending on the type of + expression give in the `.yarn` script. The expressions for parameter values can be dynamic, that + is they can be evaluated at runtime. In the example below, the parameter `color` will be equal to + the value of the variable `$color`, which may change each time the line is run. + + ```yarn + My [i]favorite[/i] color is [bb color=$color]{$color}[/bb]. + ``` + +[line]: dialogue_line.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/node.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/node.md.txt new file mode 100644 index 000000000..79f161b04 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/node.md.txt @@ -0,0 +1,21 @@ +# Node + +The **Node** class represents a single [node] within the `.yarn` script. The objects of this class +will be delivered to your [DialogueView]s with the methods `onNodeStart()`, `onNodeFinish()`. + + +## Properties + +**title** `String` +: The title (name) of the node. + +**tags** `Map` +: Additional tags specified in the header of the node. The map will be empty if there were no tags + besides the required `title` tag. + +**iterator** `Iterator` +: The content of the node, which is a sequence of `DialogueLine`s, `DialogueChoice`s, or + `Command`s. + +[node]: ../language/nodes.md +[DialogueView]: dialogue_view.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/user_defined_command.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/user_defined_command.md.txt new file mode 100644 index 000000000..b45f51a86 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/user_defined_command.md.txt @@ -0,0 +1,39 @@ +# UserDefinedCommand + +The **UserDefinedCommand** class represents a single invocation of a custom (non-built-in) command +within a yarn script. Objects of this type will be delivered to a [DialogueView] in its +`.onCommand()` method. + + +## Properties + +**name** `String` +: The name of the command, without the angle brackets. For example, if the command is `<>` + in the yarn script, then its name will be `"smile"`. + +**argumentString** `String` +: Command arguments, as a single string. For example, if the command is `<>`, + and the value of variable `$delta` is `3.17`, then the argument string will be `"Hippo 3.17"`. + + The `argumentString` is re-evaluated every time the command is executed, however, it is an error + to access this property before the command was executed by the dialogue runner. + +**arguments** `List?` +: Command arguments, as a list of parsed values. This property will be null if the command was + declared without a signature (i.e. as an "orphaned command"). However, if the command was linked + as an external function, then the number and types of arguments in the list will correspond to + the arguments of that function. + + In the same example as above, the `arguments` will be `['Hippo', 3.17]`, assuming the linked Dart + function is `move(String target, double distance)`. + + +## See also + +- The description of [User-defined Commands] in the YarnSpinner language. +- The guide on how to register a new custom command in the [CommandStorage] document. + + +[CommandStorage]: command_storage.md +[DialogueView]: dialogue_view.md +[User-defined Commands]: ../language/commands/user_defined_commands.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/variable_storage.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/variable_storage.md.txt new file mode 100644 index 000000000..353b89bf4 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/variable_storage.md.txt @@ -0,0 +1,44 @@ +# VariableStorage + +```{dartdoc} +:package: jenny +:symbol: VariableStorage +:file: src/variable_storage.dart +``` + + +## Accessing variable storage + +Variable storage is accessed via the [YarnProject]. + +```dart +final variables = yarnProject.variables; +``` + + +## Removing variables + +In most cases variables should be retained for the life of the [YarnProject]. However there may be +situations where variables need to be removed from storage. For example, in a game with many +scenes, variables specific to that scene could be removed if they are no longer required. + +Remove all variables with `clear`. By default this will retain node visit counts, which are also +stored as variables. Node visit counts are used by Yarn for logic such as 'do this if the node has +already been visited', so it's best to leave these alone. However, to remove them as well set +`clearNodeVisits` to `true`. + +```dart +/// Clear all variables except node visit counts. +yarnProject.variables.clear(); + +/// Clear all variables including node visit counts. +yarnProject.variables.clear(clearNodeVisits: true); +``` + +Use `remove` to remove a single variable. + +```dart +yarnProject.variables.remove('money'); +``` + +[YarnProject]: yarn_project.md diff --git a/docs/1.18.0/_sources/other_modules/jenny/runtime/yarn_project.md.txt b/docs/1.18.0/_sources/other_modules/jenny/runtime/yarn_project.md.txt new file mode 100644 index 000000000..37ad46a5a --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/jenny/runtime/yarn_project.md.txt @@ -0,0 +1,101 @@ +# Yarn Project + +A **YarnProject** is the central hub for all yarn scripts and the accompanying information. +Generally, there would be a single `YarnProject` in a game, though it is also possible to make +several yarn projects if their content is completely independent. + +The standard sequence of initializing a `YarnProject` is the following: + +- link user-defined functions; +- link user-defined commands; +- set the locale (if different from `en`); +- parse a `.yarn` script containing declarations of global variables and characters; +- parse all other `.yarn` scripts; +- restore the variables from a save-game storage. + +For example: + +```dart +final yarn = YarnProject() + ..functions.addFunction0('money', player.getMoney) + ..commands.addCommand1('achievement', player.earnAchievement) + ..parse(readFile('project.yarn')) + ..parse(readFile('chapter1.yarn')) + ..parse(readFile('chapter2.yarn')); +``` + + +## Properties + +**locale** `String` +: The language used in this `YarnProject` (the default is `'en'`). Selecting a different language + changes the builtin `plural()` function. + +**random** `Random` +: The random number generator. This can be replaced with a different generator, if, for example, + you need to control the seed. + +**nodes** `Map` +: All [Node]s loaded into the project, keyed by their titles. + +**variables** `VariableStorage` +: The container for all global variables used in this yarn project. There could be several reasons + to access this storage: + + + - to change the value of a yarn variable from the game. This enables you to pass the information + from the game into the dialogue. For example, your dialogue may have variable `$gold`, which + you may want to update whenever the player's amount of money changes within the game. + - to store the values of all yarn variables during the save game, and to restore them when + loading the game. + + +**functions** `FunctionStorage` +: The [container][FunctionStorage] for all user-defined functions linked into the project. The main + reason to access this property is to register new custom function to be available at runtime. + + Note that all custom functions must be added to the `YarnProject` before they can be used in a + dialogue script -- otherwise a compile error will occur when encountering an unknown function. + +**commands** `CommandStorage` +: The [container][CommandStorage] for all user-defined commands linked into the project. The main + reason to access this container is to register new custom commands. + + All custom commands must be added before they can be used in the dialogue script. + +**characters** `CharacterStorage` +: The [container][CharacterStorage] for all [Character] objects declared in your yarn scripts. + +**strictCharacterNames** `bool` +: If `true` (default), the validity of character names will be strictly enforced. That is, all + characters must be declared before they can be used, using the [\<\\>] commands. If + this property is set to false, then new [Character] objects will be created automatically as + they are encountered in scripts. + +**trueValues**, **falseValues** `Set` +: The strings that can be recognized as `true`/`false` values respectively. + +**variables** `VariableStorage` +: The [container][VariableStorage] for all variables declared and manipulated in your yarn scripts. + This is also used for maintaining the visit counts for nodes that the user has visited. To + implement a 'save game' feature it is possible to save the variables from + `VariableStorage.variables` and later restore them again. + + +## Methods + +**parse**(`String text`) +: Parses and compiles the `text` of a yarn script. After this command, the nodes contained within + the script will be runnable. + + This method can be executed multiple times, and each time the new nodes will be added to the + existing ones. + + +[\<\\>]: ../language/commands/character.md +[Character]: character.md +[CharacterStorage]: character_storage.md +[CommandStorage]: command_storage.md +[FunctionStorage]: function_storage.md +[Node]: node.md +[VariableStorage]: variable_storage.md diff --git a/docs/1.18.0/_sources/other_modules/other_modules.md.txt b/docs/1.18.0/_sources/other_modules/other_modules.md.txt new file mode 100644 index 000000000..43a53ff4b --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/other_modules.md.txt @@ -0,0 +1,22 @@ +# Other Modules + +:::{package} jenny + +This module lets you add interactive dialogue into your game. The module itself handles Yarn scripts +and the dialogue runtime; use bridge package `flame_jenny` in order to add it into a Flame game. +::: + +:::{package} oxygen + +Oxygen is a lightweight Entity Component System framework written in Dart, with a focus on +performance and ease of use. This package replaces the Flame Component System with the Oxygen +Entity Component System. +::: + + +```{toctree} +:hidden: + +jenny +oxygen +``` diff --git a/docs/1.18.0/_sources/other_modules/oxygen/components.md.txt b/docs/1.18.0/_sources/other_modules/oxygen/components.md.txt new file mode 100644 index 000000000..cfe56fb0f --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/oxygen/components.md.txt @@ -0,0 +1,223 @@ +# Components + +Components in Oxygen are different than the ones from FCS mainly because instead of containing logic +they only contain data. This data is then used in systems which in turn define the logic. To +accommodate people who are switching from FCS to Oxygen we implemented a few components to help you +get started. Some of these components are based on the multiple functionalities that the +`PositionComponent` from FCS has. Others are just easy wrappers around certain Flame API +functionality, they are often accompanied by predefined systems that you can use. + +Components can be registered to the world using the `world.registerComponent` method on +`OxygenGame`. + + +## PositionComponent + +The `PositionComponent` as its name implies is a component that describes the position of an +entity. And it is registered to the world by default. + +Creating a positioned entity using OxygenGame: + +```dart +game.createEntity( + position: Vector2(100, 100), + size: // ... +); +``` + +Creating a positioned entity using the World: + +```dart +world.createEntity() + ..add(Vector2(100, 100)); +``` + + +## SizeComponent + +The `SizeComponent` as its name implies is a component that describes the size of an entity. +And it is registered to the world by default. + +Creating a sized entity using OxygenGame: + +```dart +game.createEntity( + position: // ... + size: Vector2(50, 50), +); +``` + +Creating a sized entity using the World: + +```dart +world.createEntity() + ..add(Vector2(50, 50)); +``` + + +## AnchorComponent + +The `AnchorComponent` as its name implies is a component that describes the anchor position of an +entity. And it is registered to the world by default. + +This component is especially useful when you are using the `BaseSystem`. But can also +be used for your anchoring logic. + +Creating an anchored entity using OxygenGame: + +```dart +game.createEntity( + position: // ... + size: // ... + anchor: Anchor.center, +); +``` + +Creating an anchored entity using the World: + +```dart +world.createEntity() + ..add(Anchor.center); +``` + + +### AngleComponent + +The `AngleComponent` as its name implies is a component that describes the angle of an entity and +it is registered to the world by default. The angle is in radians. + +This component is especially useful when you are using the `BaseSystem`. But can also +be used for your angle logic. + +Creating an angled entity using OxygenGame: + +```dart +game.createEntity( + position: // ... + size: // ... + angle: 1.570796, +); +``` + +Creating an angled entity using the World: + +```dart +world.createEntity() + ..add(1.570796); +``` + + +## FlipComponent + +The `FlipComponent` can be used to flip your rendering on either the X or Y axis. It is registered +to the world by default. + +This component is especially useful when you are using the `BaseSystem`. But can also +be used for your flipping logic. + +Creating an entity that is flipped on its X-axis using OxygenGame: + +```dart +game.createEntity( + position: // ... + size: // ... + flipX: true +); +``` + +Creating an entity that is flipped on its X-axis using the World: + +```dart +world.createEntity() + ..add(FlipInit(flipX: true)); +``` + + +## SpriteComponent + +The `SpriteComponent` as its name implies is a component that describes the sprite of an entity and +it is registered to the world by default. + +This allows you to assign a Sprite to an Entity. + +Creating an entity with a sprite using OxygenGame: + +```dart +game.createEntity( + position: // ... + size: // ... +)..add( + SpriteInit(await game.loadSprite('pizza.png')), +); +``` + +Creating an entity with a sprite using World: + +```dart +world.createEntity() + ..add( + SpriteInit(await game.loadSprite('pizza.png')), + ); +``` + + +## TextComponent + +The `TextComponent` as its name implies is a component that adds a text component to an entity. +And it is registered to the world by default. + +This allows you to add text to your entity, combined with the `PositionComponent` you can use it +as a text entity. + +Creating an entity with text using OxygenGame: + +```dart +game.createEntity( + position: // ... + size: // ... +)..add( + TextInit( + 'Your text', + config: const TextPaintConfig(), + ), +); +``` + +Creating an entity with text using World: + +```dart +world.createEntity() + ..add( + TextInit( + 'Your text', + config: const TextPaintConfig(), + ), + ); +``` + + +## ParticleComponent + +The `ParticleComponent` wraps a `Particle` from Flame. Combined with the `ParticleSystem` you can +easily add particles to your game without having to worry about how to render a particle or when/how +to update one. + +Creating an entity with a particle using OxygenGame: + +```dart +game.createEntity( + position: // ... + size: // ... +)..add( + // Your Particle. +); +``` + +Creating an entity with a particle using World: + +```dart +world.createEntity() + ..add( + // Your Particle. + ); +``` diff --git a/docs/1.18.0/_sources/other_modules/oxygen/oxygen.md.txt b/docs/1.18.0/_sources/other_modules/oxygen/oxygen.md.txt new file mode 100644 index 000000000..37ac5fe28 --- /dev/null +++ b/docs/1.18.0/_sources/other_modules/oxygen/oxygen.md.txt @@ -0,0 +1,185 @@ +# Oxygen + +We (the Flame organization) built an ECS (Entity Component System) named Oxygen. + +If you want to use Oxygen specifically for Flame as a replacement for the +FCS(Flame Component System) you should use our bridge library +[flame_oxygen](https://github.com/flame-engine/flame/tree/main/packages/flame_oxygen) and if you +just want to use it in a Dart project you can use the +[oxygen](https://github.com/flame-engine/oxygen) library directly. + +If you are not familiar with Oxygen yet we recommend you read up on its +[documentation](https://github.com/flame-engine/oxygen/tree/main/doc). + +To use it in your game you just need to add `flame_oxygen` to your `pubspec.yaml`, as can be seen +in the +[Oxygen example](https://github.com/flame-engine/flame/tree/main/packages/flame_oxygen/example) +and in the `pub.dev` [installation instructions](https://pub.dev/packages/flame_oxygen). + + +## OxygenGame (Game extension) + +If you are going to use Oxygen in your project it can be a good idea to use the Oxygen specific +extension of the `Game` class. + +It is called `OxygenGame` and it will give you full access to the Oxygen framework while also +having full access to the Flame game loop. + +Instead of using `onLoad`, as you are used to with Flame, `OxygenGame` comes with the `init` +method. This method is called in the `onLoad` but before the world initialization, allowing you +to register components and systems and do anything else that you normally would do in `onLoad`. + +A simple `OxygenGame` implementation example can be seen in the +[example folder](https://github.com/flame-engine/flame/tree/main/packages/flame_oxygen/example). + +The `OxygenGame` also comes with it's own `createEntity` method that automatically adds certain +default components on the entity. This is especially helpful when you are using the +[BaseSystem](#basesystem) as your base. + + +## Systems + +Systems define the logic of your game. In FCS you normally would add your logic inside a component +with Oxygen we use systems for that. Oxygen itself is completely platform agnostic, meaning it has +no render loop. It only knows `execute`, which is a method equal to the `update` method in Flame. + +On each `execute` Oxygen automatically calls all the systems that were registered in order. But in +Flame we can have different logic for different loops (render/update). So in `flame_oxygen` we +introduced the `RenderSystem` and `UpdateSystem` mixin. These mixins allow you to add the `render` +method and the `update` method respectively to your custom system. For more information see the +[RenderSystem](#mixin-rendersystem) and [UpdateSystem](#mixin-updatesystem) section. + +If you are coming from FCS you might expect certain default functionality that you normally got +from the `PositionComponent`. As mentioned before components do not contain any kind of logic, but +to give you the same default functionality we also created a class called `BaseSystem`. This system +acts almost identical to the prerender logic from the `PositionComponent` in FCS. You only have +to subclass it to your own system. For more information see the +[BaseSystem](#basesystem) section. + +Systems can be registered to the world using the `world.registerSystem` method on +[OxygenGame](#oxygengame-game-extension). + + +### mixin GameRef + +The `GameRef` mixin allows a system to become aware of the `OxygenGame` instance its attached to. +This allows easy access to the methods on the game class. + +```dart +class YourSystem extends System with GameRef { + @override + void init() { + // Access to game using the .game property + } + + // ... +} +``` + + +### mixin RenderSystem + +The `RenderSystem` mixin allows a system to be registered for the render loop. +By adding a `render` method to the system you get full access to the canvas as +you normally would in Flame. + +```dart +class SimpleRenderSystem extends System with RenderSystem { + Query? _query; + + @override + void init() { + _query = createQuery([/* Your filters */]); + } + + void render(Canvas canvas) { + for (final entity in _query?.entities ?? []) { + // Render entity based on components + } + } +} +``` + + +### mixin UpdateSystem + +The `MixinSystem` mixin allows a system to be registered for the update loop. +By adding a `update` method to the system you get full access to the delta time as you +normally would in Flame. + +```dart +class SimpleUpdateSystem extends System with UpdateSystem { + Query? _query; + + @override + void init() { + _query = createQuery([/* Your filters */]); + } + + void update(double dt) { + for (final entity in _query?.entities ?? []) { + // Update components values + } + } +} +``` + + +### BaseSystem + +The `BaseSystem` is an abstract class whose logic can be compared to the `PositionComponent` +from FCS. The `BaseSystem` automatically filters all entities that have the `PositionComponent` +and `SizeComponent` from `flame_oxygen`. On top of that you can add your own filters by defining +a getter called `filters`. These filters are then used to filter down the entities you are +interested in. + +The `BaseSystem` is also fully aware of the game instance. You can access the game instance by using +the `game` property. This also gives you access to the `createEntity` helper method on `OxygenGame`. + +On each render loop the `BaseSystem` will prepare your canvas the same way the `PositionComponent` +from FCS would (translating, rotating and setting the anchor. After that it will call the +`renderEntity` method so you can add your own render logic for that entity on a prepared canvas. + +The following components will be checked by `BaseSystem` for the preparation of the canvas: + +- `PositionComponent` (required) +- `SizeComponent` (required) +- `AnchorComponent` (optional, defaults to `Anchor.topLeft`) +- `AngleComponent` (optional, defaults to `0`) + +```dart +class SimpleBaseSystem extends BaseSystem { + @override + List> get filters => []; + + @override + void renderEntity(Canvas canvas, Entity entity) { + // The canvas is translated, rotated and fully prepared for rendering. + } +} +``` + + +### ParticleSystem + +The `ParticleSystem` is a simple system that brings the Particle API from Flame to Oxygen. This +allows you to use the [ParticleComponent](components.md#particlecomponent) without having to worry +about how it will render or when to update it. As most of that logic is already contained in the +Particle itself. + +Simply register the `ParticleSystem` and the `ParticleComponent` to your world like so: + +```dart +world.registerSystem(ParticleSystem()); + +world.registerComponent(() => ParticleComponent); +``` + +You can now create a new entity with a `ParticleComponent`. For more info about that see the +`ParticleComponent` section. + +```{toctree} +:hidden: + +Components +``` diff --git a/docs/1.18.0/_sources/resources/resources.md.txt b/docs/1.18.0/_sources/resources/resources.md.txt new file mode 100644 index 000000000..e111b8555 --- /dev/null +++ b/docs/1.18.0/_sources/resources/resources.md.txt @@ -0,0 +1,11 @@ +# Resources + +- [Flame API](https://pub.dev/documentation/flame/1.18.0/) +- [Flame Examples](https://examples.flame-engine.org/#/) + +```{toctree} +:hidden: + +Flame API +Flame Examples +``` diff --git a/docs/1.18.0/_sources/tutorials/bare_flame_game.md.txt b/docs/1.18.0/_sources/tutorials/bare_flame_game.md.txt new file mode 100644 index 000000000..93ba54e3b --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/bare_flame_game.md.txt @@ -0,0 +1,187 @@ +# Bare Flame game + +This tutorial assumes that you have basic familiarity with using the command line, and the following +programs on your computer (all of them are free): + +- [Flutter], version 3.13.0 or above. +- [Android Studio], or any other IDE for example [Visual Studio Code]. +- [git] (optional), to save your project on GitHub. + + +## 1. Check flutter installation + +First, let's verify that your Flutter SDK was installed correctly and is accessible from the command +line: + +```shell +$ flutter doctor +Doctor summary (to see all details, run flutter doctor -v): +[✓] Flutter (Channel stable, 3.13.7, on macOS 13.6 22G120 darwin-arm64, locale en) +[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0) +[✓] Xcode - develop for iOS and macOS (Xcode 15.0) +[✓] Chrome - develop for the web +[✓] Android Studio (version 2021.2) +[✓] IntelliJ IDEA Community Edition (version 2022.2.2) +[✓] VS Code (version 1.83.0) +[✓] Connected device (2 available) +[✓] Network resources + +• No issues found! +``` + +Your output will be slightly different, but the important thing is to verify that no errors are +reported and that your Flutter version is at least **3.13.0**. + + +## 2. Create the Project Directory + +Now you need to come up with a name for your project. The name can only use lowercase Latin letters, +digits, and underscores. It must also be a valid Dart identifier (thus, for example, it cannot be a +keyword). In this tutorial, we're going to call the project **syzygy**, which is a totally real +non-made-up word. + +Create the directory for your new project: + +```shell +mkdir -p ~/projects/syzygy +cd ~/projects/syzygy +``` + + +## 3. Initialize empty Flutter project + +To turn this barren directory into an actual Flutter project, run the following command: + +```shell +flutter create . +``` + +(I have omitted the output for brevity, but there will be lots of output). + +You can verify that the project files were created successfully: + +```shell +$ ls +README.md android/ lib/ pubspec.yaml test/ +analysis_options.yaml ios/ pubspec.lock syzygy.iml web/ +``` + + +## 4. Open the project in Android Studio + +Launch Android Studio, then in the project selection window choose `[Open]` and navigate to your +project directory. With any luck, the project will now look like this: + +![Project in Android Studio](../images/tutorials/android-studio-screenshot-1.webp) + +If you see only the `main.dart` file but not the side panel, then click the vertical `[Project]` +button at the left edge of the window. + +Before we proceed, let's fix the view in the left panel. Locate the button in the top left corner +that says `[Android]` in the screenshot. In this dropdown select the first option "Project". Your +project window should now look like this: + +![Project in Android Studio](../images/tutorials/android-studio-screenshot-2.webp) + +The important part is that you should be able to see all files in your project directory. + + +## 5. Clean up the project files + +The default project created by Flutter is not very useful for making a Flame game, so we should get +rid of it. + +First, open the file `pubspec.yaml` and replace it with the following code (adjusting the `name` and +`description` to match your project): + +```yaml +name: syzygy +description: Syzygy Flame game +version: 0.0.0 +publish_to: none + +environment: + sdk: ^3.0.0 + flutter: ^3.13.0 + +dependencies: + flutter: + sdk: flutter + flame: ^1.18.0 +``` + +After that, press the `[Pub get]` button at the top of the window, or you could run command `flutter +pub get` from the terminal. This will "apply" the changes in `pubspec` file to your project, in +particular, it will download the Flame library which we have declared as a dependency. In the +future, you should run `flutter pub get` whenever you make changes to this file. + +Now, open the file `lib/main.dart` and replace its content with the following: + +```dart +import 'package:flame/game.dart'; +import 'package:flutter/widgets.dart'; + +void main() { + final game = FlameGame(); + runApp(GameWidget(game: game)); +} +``` + +Lastly, remove the file `test/widget_test.dart` completely. + + +## 6. Run the project + +Let's verify that everything is working as intended, and the project can run. + +In the menu bar at the top of the window find a dropdown that says ``. In that +dropdown choose `` instead. + +After that open the `main.dart` file and press the green arrow next to the `void main()` function in +line 4. Select `[Run main.dart]` from the menu. + +This should open a new Chrome window (which may take 10-30 seconds) and run your project in that +window. For now, it will simply show a black screen, which is expected because we created the game +in its simplest blank configuration. + + +## 7. Sync to GitHub + +The last step is to upload your project to GitHub. This is not required but strongly recommended as +it will serve as a backup for your code. This step assumes that you already have a GitHub account. + +Log into your GitHub account, select `[Your repositories]` from your profile dropdown, and press the +green `[New]` button. In the form, enter the repository name the same as your project name; select +type "private"; and opt out of adding initial files like `README`, `license`, and `.gitignore`. + +Now go to your project's directory in the terminal and execute the following commands (make sure to +replace the URL with the link to the repository that you just created): + +```shell +git init +git add --all +git commit -m 'Initial commit' +git remote add origin https://github.com/your-github-username/syzygy.git +git branch -M main +git push -u origin main +``` + +At this point, if you go to your repository page on GitHub, you shall see that all your project +files are there. + + +## 8. Done + +That's it! By this point you have + +- Created an initial blank state Flame project; +- Set up the Android Studio IDE for that project; +- Created a GitHub repository for the project. + +Happy coding! + + +[Flutter]: https://docs.flutter.dev/get-started/install +[git]: https://git-scm.com/downloads +[Android Studio]: https://developer.android.com/studio +[Visual Studio Code]: https://code.visualstudio.com/download diff --git a/docs/1.18.0/_sources/tutorials/klondike/klondike.md.txt b/docs/1.18.0/_sources/tutorials/klondike/klondike.md.txt new file mode 100644 index 000000000..53e343c44 --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/klondike/klondike.md.txt @@ -0,0 +1,21 @@ +# Klondike game tutorial + +[Klondike] is a popular solitaire card game. In this tutorial we will follow the step-by-step +process for coding this game using the Flame engine. + +This tutorial assumes that you have at least some familiarity with common programming concepts, and +with the [Dart] programming language. + + +[Dart]: https://dart.dev/overview +[Klondike]: https://en.wikipedia.org/wiki/Klondike_(solitaire) + +```{toctree} +:hidden: + +1. Preparation +2. Scaffolding +3. Cards +4. Gameplay +5. Additional features +``` diff --git a/docs/1.18.0/_sources/tutorials/klondike/step1.md.txt b/docs/1.18.0/_sources/tutorials/klondike/step1.md.txt new file mode 100644 index 000000000..5b4cc30d9 --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/klondike/step1.md.txt @@ -0,0 +1,113 @@ +# 1. Preparation + +Before you begin any kind of game project, you need to give it a **name**. For +this tutorial the name will be simply `klondike`. + +Having this name in mind, please head over to the [tutorial](../bare_flame_game.md) +and complete the necessary set up steps. When you come back, you should +already have the `main.dart` file with the following content: + +```dart +import 'package:flame/game.dart'; +import 'package:flutter/widgets.dart'; + +void main() { + final game = FlameGame(); + runApp(GameWidget(game: game)); +} +``` + + +## Planning + +The start of any project usually feels overwhelming. Where even to begin? +I always find it useful to create a rough sketch of what I am about to code, +so that it can serve as a reference point. My sketch for the Klondike game is +shown below: + +![Sketch of the klondike card game](../../images/tutorials/klondike-sketch.webp) + +Here you can see both the general layout of the game, as well as names of +various objects. These names are the [standard terminology] for solitaire games. +Which is really lucky, because normally figuring out good names for various +classes is quite a challenging task. + +Looking at this sketch, we can already imagine the high-level structure of the +game. Obviously, there will be a `Card` class, but also the `Stock` class, the +`Waste` class, a `Tableau` containing seven `Pile`s, and 4 `Foundation`s. There +may also be a `Deck`. All of these components will be tied together via the +`KlondikeGame` derived from the `FlameGame`. + + +## Assets + +Another important aspect in any game development is the game's assets. These +includes images, sprites, animations, sounds, textures, data files, and so on. +In such a simple game as Klondike we won't need lots of fancy graphics, but +still some sprites will be needed in order to draw the cards. + +In order to prepare the graphic assets, I first took a physical playing card and +measured it to be 63mm × 88mm, which is the ratio of approximately `10:14`. +Thus, I decided that my in-game cards should be rendered at 1000×1400 pixels, +and I should draw all my images with this scale in mind. + +Note that the exact pixel dimensions are somewhat irrelevant here, since the +images will in the end be scaled up or down, according to the device's actual +resolution. Here I'm using probably a bigger resolution than necessary for +phones, but it would also work nicely for larger devices like an iPad. + +And now, without further ado, here's my graphic asset for the Klondike game +(I'm not an artist, so don't judge too harshly): + +![Klondike sprites](app/assets/images/klondike-sprites.png) + +Right-click the image, choose "Save as...", and store it in the `assets/images` +folder of the project. At this point our project's structure looks like this +(there are other files too, of course, but these are the important ones): + +```text +klondike/ + ├─assets/ + │ └─images/ + │ └─klondike-sprites.png + ├─lib/ + │ └─main.dart + └─pubspec.yaml +``` + +By the way, this kind of file is called the **sprite sheet**: it's just a +collection of multiple independent images in a single file. We are using a +sprite sheet here for the simple reason that loading a single large image is +faster than many small images. In addition, rendering sprites that were +extracted from a single source image can be faster too, since Flutter will +optimize multiple such drawing commands into a single `drawAtlas` command. + +Here are the contents of my sprite sheet: + +- Numerals 2, 3, 4, ..., K, A. In theory, we could have rendered these in the + game as text strings, but then we would need to also include a font as an + asset -- seems simpler to just have them as images instead. +- Suit marks: ♥, ♦, ♣, ♠. Again, we could have used Unicode characters for + these, but images are much easier to position precisely. + - In case you're wondering why these are yellow/blue instead of red/black + -- turns out, black symbols don't look very nice on a dark background, + so I had to adjust the color scheme. +- Flame logo, for use on the backs of the cards. +- Pictures of a Jack, a Queen, and a King. Normally there would be four times + more of these, with a different character for each suite, but I got too + tired drawing these. + +Also, you need to tell Flutter about this image (just having it inside the +`assets` folder is not enough). In order to do this, let's add the following +lines into the `pubspec.yaml` file: + +```yaml +flutter: + assets: + - assets/images/ +``` + +Alright, enough with preparing -- onward to coding! + + +[standard terminology]: https://en.wikipedia.org/wiki/Solitaire_terminology diff --git a/docs/1.18.0/_sources/tutorials/klondike/step2.md.txt b/docs/1.18.0/_sources/tutorials/klondike/step2.md.txt new file mode 100644 index 000000000..b719b532a --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/klondike/step2.md.txt @@ -0,0 +1,305 @@ +# 2. Scaffolding + +In this section we will use broad strokes to outline the main elements of the +game. This includes the main game class, and the general layout. + + +## KlondikeGame + +In Flame universe, the **FlameGame** class is the cornerstone of most games. +This class runs the game loop, dispatches events, owns all the components that +comprise the game (the component tree), and usually also serves as the central +repository for the game's state. + +So, create a new file called `klondike_game.dart` inside the `lib/` folder, and +declare the `KlondikeGame` class inside: + +```dart +import 'package:flame/game.dart'; +import 'package:flame/flame.dart'; + +class KlondikeGame extends FlameGame { + @override + Future onLoad() async { + await Flame.images.load('klondike-sprites.png'); + } +} +``` + +For now we only declared the `onLoad` method, which is a special handler that +is called when the game instance is attached to the Flutter widget tree for the +first time. You can think of it as a delayed asynchronous constructor. +Currently, the only thing that `onLoad` does is that it loads the sprites image +into the game; but we will be adding more soon. Any image or other resource that +you want to use in the game needs to be loaded first, which is a relatively slow +I/O operation, hence the need for `await` keyword. + +I am loading the image into the global `Flame.images` cache here. An alternative +approach is to load it into the `Game.images` cache instead, but then it would +have been more difficult to access that image from other classes. + +Also note that I am `await`ing the image to finish loading before initializing +anything else in the game. This is for convenience: it means that by the time +all other components are initialized, they can assume the sprite sheet is already +loaded. We can even add a helper function to extract a sprite from the common +sprite sheet: + +```dart +Sprite klondikeSprite(double x, double y, double width, double height) { + return Sprite( + Flame.images.fromCache('klondike-sprites.png'), + srcPosition: Vector2(x, y), + srcSize: Vector2(width, height), + ); +} +``` + +This helper function won't be needed in this chapter, but will be used +extensively in the next. + +Let's incorporate this class into the project so that it isn't orphaned. Open +the `main.dart` find the line which says `final game = FlameGame();` and replace +the `FlameGame` with `KlondikeGame`. You will need to import the class too. +After all is done, the file should look like this: + +```dart +import 'package:flame/game.dart'; +import 'package:flutter/widgets.dart'; +import 'klondike_game.dart'; + +void main() { + final game = KlondikeGame(); + runApp(GameWidget(game: game)); +} +``` + + +## Other classes + +So far we have the main `KlondikeGame` class, and now we need to create objects +that we will add to the game. In Flame these objects are called *components*, +and when added to the game they form a "game component tree". All entities that +exist in the game must be components. + +As we already mentioned in the previous chapter, our game mainly consists of +`Card` components. However, since drawing the cards will take some effort, we +will defer implementation of that class to the next chapter. + +For now, let's create the container classes, as shown on the sketch. These are: +`Stock`, `Waste`, `Pile` and `Foundation`. Inside the `lib/` folder create a +sub-directory `components`, and then the file `lib/components/stock.dart`. In that +file write + +```dart +import 'package:flame/components.dart'; + +class Stock extends PositionComponent { + @override + bool get debugMode => true; +} +``` + +Here we declare the `Stock` class as a `PositionComponent` (which is a component +that has a position and size). We also turn on the debug mode for this class so +that we can see it on the screen even though we don't have any rendering logic +yet. + +Likewise, create three more classes `Foundation`, `Pile` and `Waste`, each in +its corresponding file. For now all four classes will have exactly the same +logic inside, we'll be adding more functionality into those classes in +subsequent chapters. + +At this moment the directory structure of your game should look like this: + +```text +klondike/ + ├─assets/ + │ └─images/ + │ └─klondike-sprites.png + ├─lib/ + │ ├─components/ + │ │ ├─foundation.dart + │ │ ├─pile.dart + │ │ ├─stock.dart + │ │ └─waste.dart + │ ├─klondike_game.dart + │ └─main.dart + ├─analysis_options.yaml + └─pubspec.yaml +``` + + +## Game structure + +Once we have some basic components, they need to be added to the game. It is +time to make a decision about the high-level structure of the game. + +There exist multiple approaches here, which differ in their complexity, +extendability, and overall philosophy. The approach that we will be taking in +this tutorial is based on using the [World] component, together with a [Camera]. + +The idea behind this approach is the following: imagine that your game **world** +exists independently from the device, that it exists already in our heads, and +on the sketch, even though we haven't done any coding yet. This world will have +a certain size, and each element in the world will have certain coordinates. It +is up to us to decide what will be the size of the world, and what is the unit +of measurement for that size. The important part is that the world exists +independently from the device, and its dimensions likewise do not depend on the +pixel resolution of the screen. + +All elements that are part of the world will be added to the `World` component, +and the `World` component will be then added to the game. + +The second part of the overall structure is a **camera** (`CameraComponent`). +The purpose of the camera is to be able to look at the world, to make sure that +it renders at the right size on the screen of the user's device. + +Thus, the overall structure of the component tree will look approximately like +this: + +```text +KlondikeGame + ├─ World + │ ├─ Stock + │ ├─ Waste + │ ├─ Foundation (×4) + │ └─ Pile (×7) + └─ CameraComponent +``` + +For this game I've been drawing my image assets having in mind the dimension of +a single card at 1000×1400 pixels. So, this will serve as the reference size for +determining the overall layout. Another important measurement that affects the +layout is the inter-card distance. It seems like it should be somewhere between +150 to 200 units (relative to the card width), so we will declare it as a +variable `cardGap` that can be adjusted later if needed. For simplicity, both +the vertical and horizontal inter-card distance will be the same, and the +minimum padding between the cards and the edges of the screen will also be equal +to `cardGap`. + +Alright, let's put all this together and implement our `KlondikeGame` class. + +First, we declare several global constants which describe the dimensions of a +card and the distance between cards. We declare them as constants because we are +not planning to change these values during the game: + +```dart + static const double cardWidth = 1000.0; + static const double cardHeight = 1400.0; + static const double cardGap = 175.0; + static const double cardRadius = 100.0; + static final Vector2 cardSize = Vector2(cardWidth, cardHeight); +``` + +Next, we will create a `Stock` component, the `Waste`, four `Foundation`s and +seven `Pile`s, setting their sizes and positions in the world. The positions +are calculated using simple arithmetics. This should all happen inside the +`onLoad` method, after loading the sprite sheet: + +```dart + final stock = Stock() + ..size = cardSize + ..position = Vector2(cardGap, cardGap); + final waste = Waste() + ..size = cardSize + ..position = Vector2(cardWidth + 2 * cardGap, cardGap); + final foundations = List.generate( + 4, + (i) => Foundation() + ..size = cardSize + ..position = + Vector2((i + 3) * (cardWidth + cardGap) + cardGap, cardGap), + ); + final piles = List.generate( + 7, + (i) => Pile() + ..size = cardSize + ..position = Vector2( + cardGap + i * (cardWidth + cardGap), + cardHeight + 2 * cardGap, + ), + ); +``` + +Since Flame version 1.9.0, `FlameGame` sets up default `world` and `camera` +objects. `KlondikeGame` is an extension of `FlameGame`, so we can add to that +`world` all the components that we just created. + +```dart + world.add(stock); + world.add(waste); + world.addAll(foundations); + world.addAll(piles); +``` + +```{note} +You may be wondering when you need to `await` the result of `add()`, and when +you don't. The short answer is: usually you don't need to wait, but if you want +to, then it won't hurt either. + +If you check the documentation for `.add()` method, you'll see that the returned +future only waits until the component is finished loading, not until it is +actually mounted to the game. As such, you only have to wait for the future from +`.add()` if your logic requires that the component is fully loaded before it can +proceed. This is not very common. + +If you don't `await` the future from `.add()`, then the component will be added +to the game anyways, and in the same amount of time. +``` + +Lastly, we use FlameGame's `camera` object to look at the `world`. Internally, +the camera consists of two parts: a **viewport** and a **viewfinder**. The +default viewport is `MaxViewport`, which takes up the entire available screen +size -- this is exactly what we need for our game, so no need to change +anything. The viewfinder, on the other hand, needs to be set up to take the +dimensions of the underlying world into account. + +We want the entire card layout to be visible on the screen without the need to +scroll. In order to accomplish this, we specify that we want the entire world +size (which is `7*cardWidth + 8*cardGap` by `4*cardHeight + 3*cardGap`) to be +able to fit into the screen. The `.visibleGameSize` setting ensures that no +matter the size of the device, the zoom level will be adjusted such that the +specified chunk of the game world will be visible. + +The game size calculation is obtained like this: there are 7 cards in the +tableau and 6 gaps between them, add 2 more "gaps" to account for padding, and +you get the width of `7*cardWidth + 8*cardGap`. Vertically, there are two rows +of cards, but in the bottom row we need some extra space to be able to display +a tall pile -- by my rough estimate, thrice the height of a card is sufficient +for this -- which gives the total height of the game world as +`4*cardHeight + 3*cardGap`. + +Next, we specify which part of the world will be in the "center" of the +viewport. In this case I specify that the "center" of the viewport should +be at the top center of the screen, and the corresponding point within +the game world is at coordinates `[(7*cardWidth + 8*cardGap)/2, 0]`. + +The reason for such choice for the viewfinder's position and anchor is +because of how we want it to respond if the game size becomes too wide or +too tall: in case of too wide we want it to be centered on the screen, +but if the screen is too tall, we want the content to be aligned at the +top. + +```dart + camera.viewfinder.visibleGameSize = + Vector2(cardWidth * 7 + cardGap * 8, 4 * cardHeight + 3 * cardGap); + camera.viewfinder.position = Vector2(cardWidth * 3.5 + cardGap * 4, 0); + camera.viewfinder.anchor = Anchor.topCenter; +``` + +If you run the game now, you should see the placeholders for where the various +components will be. If you are running the game in the browser, try resizing the +window and see how the game responds to this. + +```{flutter-app} +:sources: ../tutorials/klondike/app +:page: step2 +:show: popup code +``` + +And this is it with this step -- we've created the basic game structure upon +which everything else will be built. In the next step, we'll learn how to render +the card objects, which are the most important visual objects in this game. + +[World]: ../../flame/camera_component.md#world +[Camera]: ../../flame/camera_component.md#cameracomponent diff --git a/docs/1.18.0/_sources/tutorials/klondike/step3.md.txt b/docs/1.18.0/_sources/tutorials/klondike/step3.md.txt new file mode 100644 index 000000000..242314fe0 --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/klondike/step3.md.txt @@ -0,0 +1,491 @@ +# 3. Cards + +In this chapter we will begin implementing the most visible component in the +game -- the **Card** component, which corresponds to a single real-life card. +There will be 52 `Card` objects in the game. + +Each card has a **rank** (from 1 to 13, where 1 is an Ace, and 13 is a King) +and a **suit** (from 0 to 3: hearts ♥, diamonds ♦, clubs ♣, and spades ♠). +Also, each card will have a boolean flag **faceUp**, which controls whether +the card is currently facing up or down. This property is important both for +rendering, and for certain aspects of the gameplay logic. + +The rank and the suit are simple properties of a card, they aren't components, +so we need to make a decision on how to represent them. There are several +possibilities: either as a simple `int`, or as an `enum`, or as objects. The +choice will depend on what operations we need to perform with them. For the +rank, we will need to be able to tell whether one rank is one higher/lower than +another rank. Also, we need to produce the text label and a sprite corresponding +to the given rank. For suits, we need to know whether two suits are of different +colors, and also produce a text label and a sprite. Given these requirements, +I decided to represent both `Rank` and `Suit` as classes. + + +## Suit + +Create file `suit.dart` and declare an `@immutable class Suit` there, with no +parent. The `@immutable` annotation here is just a hint for us that the objects +of this class should not be modified after creation. + +Next, we define the factory constructor for the class: `Suit.fromInt(i)`. We +use a factory constructor here in order to enforce the singleton pattern for +the class: instead of creating a new object every time, we are returning one +of the pre-built objects that we store in the `_singletons` list: + +```dart + factory Suit.fromInt(int index) { + assert(index >= 0 && index <= 3); + return _singletons[index]; + } +``` + +After that, there is a private constructor `Suit._()`. This constructor +initializes the main properties of each `Suit` object: the numeric value, the +string label, and the sprite object which we will later use to draw the suit +symbol on the canvas. The sprite object is initialized using the +`klondikeSprite()` function that we created in the previous chapter: + +```dart + Suit._(this.value, this.label, double x, double y, double w, double h) + : sprite = klondikeSprite(x, y, w, h); + + final int value; + final String label; + final Sprite sprite; +``` + +Then comes the static list of all `Suit` objects in the game. Note that we +define it as static variable so it is evaluated lazily (as if it was marked +with the `late` keyword) meaning that it will be only initialized the first +time it is needed. This is important: as we can see above, the constructor +tries to retrieve an image from the global cache, so it can only be invoked +after the image is loaded into the cache. + +```dart + static final List _singletons = [ + Suit._(0, '♥', 1176, 17, 172, 183), + Suit._(1, '♦', 973, 14, 177, 182), + Suit._(2, '♣', 974, 226, 184, 172), + Suit._(3, '♠', 1178, 220, 176, 182), + ]; +``` + +The last four numbers in the constructor are the coordinates of the sprite +image within the sprite sheet `klondike-sprites.png`. If you're wondering how I +obtained these numbers, the answer is that I used a free online service +[spritecow.com] -- it's a handy tool for locating sprites within a sprite sheet. + +Lastly, I have simple getters to determine the "color" of a suit. This will be +needed later when we need to enforce the rule that cards can only be placed +into columns by alternating colors. + +```dart + /// Hearts and Diamonds are red, while Clubs and Spades are black. + bool get isRed => value <= 1; + bool get isBlack => value >= 2; +``` + + +## Rank + +The `Rank` class is very similar to `Suit`. The main difference is that `Rank` +contains two sprites instead of one, separately for ranks of "red" and "black" +colors. The full code for the `Rank` class is as follows: + +```dart +import 'package:flame/components.dart'; +import 'package:flame/flame.dart'; +import 'package:flutter/foundation.dart'; + +@immutable +class Rank { + factory Rank.fromInt(int value) { + assert(value >= 1 && value <= 13); + return _singletons[value - 1]; + } + + Rank._( + this.value, + this.label, + double x1, + double y1, + double x2, + double y2, + double w, + double h, + ) : redSprite = klondikeSprite(x1, y1, w, h), + blackSprite = klondikeSprite(x2, y2, w, h); + + final int value; + final String label; + final Sprite redSprite; + final Sprite blackSprite; + + static final List _singletons = [ + Rank._(1, 'A', 335, 164, 789, 161, 120, 129), + Rank._(2, '2', 20, 19, 15, 322, 83, 125), + Rank._(3, '3', 122, 19, 117, 322, 80, 127), + Rank._(4, '4', 213, 12, 208, 315, 93, 132), + Rank._(5, '5', 314, 21, 309, 324, 85, 125), + Rank._(6, '6', 419, 17, 414, 320, 84, 129), + Rank._(7, '7', 509, 21, 505, 324, 92, 128), + Rank._(8, '8', 612, 19, 607, 322, 78, 127), + Rank._(9, '9', 709, 19, 704, 322, 84, 130), + Rank._(10, '10', 810, 20, 805, 322, 137, 127), + Rank._(11, 'J', 15, 170, 469, 167, 56, 126), + Rank._(12, 'Q', 92, 168, 547, 165, 132, 128), + Rank._(13, 'K', 243, 170, 696, 167, 92, 123), + ]; +} +``` + + +## Card component + +Now that we have the `Rank` and the `Suit` classes, we can finally start +implementing the **Card** component. Create file `components/card.dart` and +declare the `Card` class extending from the `PositionComponent`: + +```dart +class Card extends PositionComponent {} +``` + +The constructor of the class will take integer rank and suit, and make the +card initially facing down. Also, we initialize the size of the component to +be equal to the `cardSize` constant defined in the `KlondikeGame` class: + +```dart + Card(int intRank, int intSuit) + : rank = Rank.fromInt(intRank), + suit = Suit.fromInt(intSuit), + _faceUp = false, + super(size: KlondikeGame.cardSize); + + final Rank rank; + final Suit suit; + bool _faceUp; +``` + +The `_faceUp` property is private (indicated by the underscore) and non-final, +meaning that it can change during the lifetime of a card. We should create some +public accessors and mutators for this variable: + +```dart + bool get isFaceUp => _faceUp; + bool get isFaceDown => !_faceUp; + void flip() => _faceUp = !_faceUp; +``` + +Lastly, let's add a simple `toString()` implementation, which may turn out to +be useful when we need to debug the game: + +```dart + @override + String toString() => rank.label + suit.label; // e.g. "Q♠" or "10♦" +``` + +Before we proceed with implementing the rendering, we need to add some cards +into the game. Head over to the `KlondikeGame` class and add the following at +the bottom of the `onLoad` method: + +```dart + final random = Random(); + for (var i = 0; i < 7; i++) { + for (var j = 0; j < 4; j++) { + final card = Card(random.nextInt(13) + 1, random.nextInt(4)) + ..position = Vector2(100 + i * 1150, 100 + j * 1500) + ..addToParent(world); + if (random.nextDouble() < 0.9) { // flip face up with 90% probability + card.flip(); + } + } + } +``` + +This snippet is a temporary code -- we will remove it in the next chapter -- +but for now it lays down 28 random cards on the table, most of them facing up. + + +### Rendering + +In order to be able to see a card, we need to implement its `render()` method. +Since the card has two distinct states -- face up or down -- we will +implement rendering for these two states separately. Add the following methods +into the `Card` class: + +```dart + @override + void render(Canvas canvas) { + if (_faceUp) { + _renderFront(canvas); + } else { + _renderBack(canvas); + } + } + + void _renderFront(Canvas canvas) {} + void _renderBack(Canvas canvas) {} +``` + + +### renderBack() + +Since rendering the back of a card is simpler, we will do it first. + +The `render()` method of a `PositionComponent` operates in a local coordinate +system, which means we don't need to worry about where the card is located on +the screen. This local coordinate system has the origin at the top-left corner +of the component, and extends to the right by `width` and down by `height` +pixels. + +There is a lot of artistic freedom in how to draw the back of a card, but my +implementation contains a solid background, a border, a flame logo in the +middle, and another decorative border: + +```dart + void _renderBack(Canvas canvas) { + canvas.drawRRect(cardRRect, backBackgroundPaint); + canvas.drawRRect(cardRRect, backBorderPaint1); + canvas.drawRRect(backRRectInner, backBorderPaint2); + flameSprite.render(canvas, position: size / 2, anchor: Anchor.center); + } +``` + +The most interesting part here is the rendering of a sprite: we want to +render it in the middle (`size/2`), and we use `Anchor.center` to tell the +engine that we want the *center* of the sprite to be at that point. + +Various properties used in the `_renderBack()` method are defined as follows: + +```dart + static final Paint backBackgroundPaint = Paint() + ..color = const Color(0xff380c02); + static final Paint backBorderPaint1 = Paint() + ..color = const Color(0xffdbaf58) + ..style = PaintingStyle.stroke + ..strokeWidth = 10; + static final Paint backBorderPaint2 = Paint() + ..color = const Color(0x5CEF971B) + ..style = PaintingStyle.stroke + ..strokeWidth = 35; + static final RRect cardRRect = RRect.fromRectAndRadius( + KlondikeGame.cardSize.toRect(), + const Radius.circular(KlondikeGame.cardRadius), + ); + static final RRect backRRectInner = cardRRect.deflate(40); + static final Sprite flameSprite = klondikeSprite(1367, 6, 357, 501); +``` + +I declared these properties as static because they will all be the same across +all 52 card objects, so we might as well save some resources by having them +initialized only once. + + +### renderFront() + +When rendering the face of a card, we will follow the standard card design: the +rank and the suit in two opposite corners, plus the number of pips equal to the +rank value. The court cards (jack, queen, king) will have special images in the +center. + +As before, we begin by declaring some constants that will be used for rendering. +The background of a card will be black, whereas the border will be different +depending on whether the card is of a "red" suit or "black": + +```dart + static final Paint frontBackgroundPaint = Paint() + ..color = const Color(0xff000000); + static final Paint redBorderPaint = Paint() + ..color = const Color(0xffece8a3) + ..style = PaintingStyle.stroke + ..strokeWidth = 10; + static final Paint blackBorderPaint = Paint() + ..color = const Color(0xff7ab2e8) + ..style = PaintingStyle.stroke + ..strokeWidth = 10; +``` + +Next, we also need the images for the court cards: + +```dart + static final Sprite redJack = klondikeSprite(81, 565, 562, 488); + static final Sprite redQueen = klondikeSprite(717, 541, 486, 515); + static final Sprite redKing = klondikeSprite(1305, 532, 407, 549); +``` + +Note that I'm calling these sprites `redJack`, `redQueen`, and `redKing`. This +is because, after some trial, I found that the images that I have don't look +very well on black-suit cards. So what I decided to do is to take these images +and *tint* them with a blueish hue. Tinting of a sprite can be achieved by +using a paint with `colorFilter` set to the specified color and the `srcATop` +blending mode: + +```dart + static final blueFilter = Paint() + ..colorFilter = const ColorFilter.mode( + Color(0x880d8bff), + BlendMode.srcATop, + ); + static final Sprite blackJack = klondikeSprite(81, 565, 562, 488) + ..paint = blueFilter; + static final Sprite blackQueen = klondikeSprite(717, 541, 486, 515) + ..paint = blueFilter; + static final Sprite blackKing = klondikeSprite(1305, 532, 407, 549) + ..paint = blueFilter; +``` + +Now we can start coding the render method itself. First, draw the background +and the card border: + +```dart + void _renderFront(Canvas canvas) { + canvas.drawRRect(cardRRect, frontBackgroundPaint); + canvas.drawRRect( + cardRRect, + suit.isRed ? redBorderPaint : blackBorderPaint, + ); + } +``` + +In order to draw the rest of the card, I need one more helper method. This +method will draw the provided sprite on the canvas at the specified place (the +location is relative to the dimensions of the card). The sprite can be +optionally scaled. In addition, if flag `rotate=true` is passed, the sprite +will be drawn as if it was rotated 180º around the center of the card: + +```dart + void _drawSprite( + Canvas canvas, + Sprite sprite, + double relativeX, + double relativeY, { + double scale = 1, + bool rotate = false, + }) { + if (rotate) { + canvas.save(); + canvas.translate(size.x / 2, size.y / 2); + canvas.rotate(pi); + canvas.translate(-size.x / 2, -size.y / 2); + } + sprite.render( + canvas, + position: Vector2(relativeX * size.x, relativeY * size.y), + anchor: Anchor.center, + size: sprite.srcSize.scaled(scale), + ); + if (rotate) { + canvas.restore(); + } + } +``` + +Let's draw the rank and the suit symbols in the corners of the card. Add the +following to the `_renderFront()` method: + +```dart + final rankSprite = suit.isBlack ? rank.blackSprite : rank.redSprite; + final suitSprite = suit.sprite; + _drawSprite(canvas, rankSprite, 0.1, 0.08); + _drawSprite(canvas, rankSprite, 0.1, 0.08, rotate: true); + _drawSprite(canvas, suitSprite, 0.1, 0.18, scale: 0.5); + _drawSprite(canvas, suitSprite, 0.1, 0.18, scale: 0.5, rotate: true); +``` + +The middle of the card is rendered in the same manner: we will create a big +switch statement on the card's rank, and draw pips accordingly. The code +below may seem long, but it is actually quite repetitive and consists only +of drawing various sprites in different places on the card's face: + +```dart + switch (rank.value) { + case 1: + _drawSprite(canvas, suitSprite, 0.5, 0.5, scale: 2.5); + case 2: + _drawSprite(canvas, suitSprite, 0.5, 0.25); + _drawSprite(canvas, suitSprite, 0.5, 0.25, rotate: true); + case 3: + _drawSprite(canvas, suitSprite, 0.5, 0.2); + _drawSprite(canvas, suitSprite, 0.5, 0.5); + _drawSprite(canvas, suitSprite, 0.5, 0.2, rotate: true); + case 4: + _drawSprite(canvas, suitSprite, 0.3, 0.25); + _drawSprite(canvas, suitSprite, 0.7, 0.25); + _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true); + _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true); + case 5: + _drawSprite(canvas, suitSprite, 0.3, 0.25); + _drawSprite(canvas, suitSprite, 0.7, 0.25); + _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true); + _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true); + _drawSprite(canvas, suitSprite, 0.5, 0.5); + case 6: + _drawSprite(canvas, suitSprite, 0.3, 0.25); + _drawSprite(canvas, suitSprite, 0.7, 0.25); + _drawSprite(canvas, suitSprite, 0.3, 0.5); + _drawSprite(canvas, suitSprite, 0.7, 0.5); + _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true); + _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true); + case 7: + _drawSprite(canvas, suitSprite, 0.3, 0.2); + _drawSprite(canvas, suitSprite, 0.7, 0.2); + _drawSprite(canvas, suitSprite, 0.5, 0.35); + _drawSprite(canvas, suitSprite, 0.3, 0.5); + _drawSprite(canvas, suitSprite, 0.7, 0.5); + _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true); + _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true); + case 8: + _drawSprite(canvas, suitSprite, 0.3, 0.2); + _drawSprite(canvas, suitSprite, 0.7, 0.2); + _drawSprite(canvas, suitSprite, 0.5, 0.35); + _drawSprite(canvas, suitSprite, 0.3, 0.5); + _drawSprite(canvas, suitSprite, 0.7, 0.5); + _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true); + _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true); + _drawSprite(canvas, suitSprite, 0.5, 0.35, rotate: true); + case 9: + _drawSprite(canvas, suitSprite, 0.3, 0.2); + _drawSprite(canvas, suitSprite, 0.7, 0.2); + _drawSprite(canvas, suitSprite, 0.5, 0.3); + _drawSprite(canvas, suitSprite, 0.3, 0.4); + _drawSprite(canvas, suitSprite, 0.7, 0.4); + _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true); + _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true); + _drawSprite(canvas, suitSprite, 0.3, 0.4, rotate: true); + _drawSprite(canvas, suitSprite, 0.7, 0.4, rotate: true); + case 10: + _drawSprite(canvas, suitSprite, 0.3, 0.2); + _drawSprite(canvas, suitSprite, 0.7, 0.2); + _drawSprite(canvas, suitSprite, 0.5, 0.3); + _drawSprite(canvas, suitSprite, 0.3, 0.4); + _drawSprite(canvas, suitSprite, 0.7, 0.4); + _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true); + _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true); + _drawSprite(canvas, suitSprite, 0.5, 0.3, rotate: true); + _drawSprite(canvas, suitSprite, 0.3, 0.4, rotate: true); + _drawSprite(canvas, suitSprite, 0.7, 0.4, rotate: true); + case 11: + _drawSprite(canvas, suit.isRed? redJack : blackJack, 0.5, 0.5); + case 12: + _drawSprite(canvas, suit.isRed? redQueen : blackQueen, 0.5, 0.5); + case 13: + _drawSprite(canvas, suit.isRed? redKing : blackKing, 0.5, 0.5); + } +``` + +And this is it with the rendering of the `Card` component. If you run the code +now, you would see four rows of cards neatly spread on the table. Refreshing +the page will lay down a new set of cards. Remember that we have laid these +cards in this way only temporarily, in order to be able to check that rendering +works properly. + +In the next chapter we will discuss how to implement interactions with the +cards, that is, how to make them draggable and tappable. + +```{flutter-app} +:sources: ../tutorials/klondike/app +:page: step3 +:show: popup code +``` + +[spritecow.com]: http://www.spritecow.com/ diff --git a/docs/1.18.0/_sources/tutorials/klondike/step4.md.txt b/docs/1.18.0/_sources/tutorials/klondike/step4.md.txt new file mode 100644 index 000000000..2b84a339c --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/klondike/step4.md.txt @@ -0,0 +1,995 @@ +# 4. Gameplay + +In this chapter we will be implementing the core of Klondike's gameplay: how the cards move between +the stock and the waste, the piles and the foundations. + +Before we begin though, let's clean up all those cards that we left scattered across the table in +the previous chapter. Open the `KlondikeGame` class and erase the loop at the bottom of `onLoad()` +that was adding 28 cards onto the table. + + +## The piles + +Another small refactoring that we need to do is to rename our components: `Stock` ⇒ `StockPile`, +`Waste` ⇒ `WastePile`, `Foundation` ⇒ `FoundationPile`, and `Pile` ⇒ `TableauPile`. This is +because these components have some common features in how they handle interactions with the cards, +and it would be convenient to have all of them implement a common API. We will call the interface +that they will all be implementing the `Pile` class. + +```{note} +Refactors and changes in architecture happen during development all the time: +it's almost impossible to get the structure right on the first try. Do not be +anxious about changing code that you have written in the past: it is a good +habit to have. +``` + +After such a rename, we can begin implementing each of these components. + + +### Stock pile + +The **stock** is a place in the top-left corner of the playing field which holds the cards that are +not currently in play. We will need to build the following functionality for this component: + +1. Ability to hold cards that are not currently in play, face down; +2. Tapping the stock should reveal top 3 cards and move them to the **waste** pile; +3. When the cards run out, there should be a visual indicating that this is the stock pile; +4. When the cards run out, tapping the empty stock should move all the cards from the waste pile + into the stock, turning them face down. + +The first question that needs to be decided here is this: who is going to own the `Card` components? +Previously we have been adding them directly to the game field, but now wouldn't it be better to +say that the cards belong to the `Stock` component, or to the waste, or piles, or foundations? While +this approach is tempting, I believe it would make our life more complicated as we need to move a +card from one place to another. + +So, I decided to stick with my first approach: the `Card` components are owned directly by the +`KlondikeGame` itself, whereas the `StockPile` and other piles are merely aware of which cards are +currently placed there. + +Having this in mind, let's start implementing the `StockPile` component: + +```dart +class StockPile extends PositionComponent { + StockPile({super.position}) : super(size: KlondikeGame.cardSize); + + /// Which cards are currently placed onto this pile. The first card in the + /// list is at the bottom, the last card is on top. + final List _cards = []; + + void acquireCard(Card card) { + assert(!card.isFaceUp); + card.position = position; + card.priority = _cards.length; + _cards.add(card); + } +} +``` + +Here the `acquireCard()` method stores the provided card into the internal list `_cards`; it also +moves that card to the `StockPile`'s position and adjusts the cards priority so that they are +displayed in the right order. However, this method does not mount the card as a child of the +`StockPile` component -- it remains belonging to the top-level game. + +Speaking of the game class, let's open the `KlondikeGame` and add the following lines to create a +full deck of 52 cards and put them onto the stock pile (this should be added at the end of the +`onLoad` method): + +```dart +final cards = [ + for (var rank = 1; rank <= 13; rank++) + for (var suit = 0; suit < 4; suit++) + Card(rank, suit) +]; +world.addAll(cards); +cards.forEach(stock.acquireCard); +``` + +This concludes the first step of our short plan at the beginning of this section. For the second +step, though, we need to have a waste pile -- so let's make a quick detour and implement the +`WastePile` class. + + +### Waste pile + +The **waste** is a pile next to the stock. During the course of the game we will be taking the cards +from the top of the stock pile and putting them into the waste. The functionality of this class is +quite simple: it holds a certain number of cards face up, fanning out the top 3. + +Let's start implementing the `WastePile` class same way as we did with the `StockPile` class, only +now the cards are expected to be face up: + +```dart +class WastePile extends PositionComponent { + WastePile({super.position}) : super(size: KlondikeGame.cardSize); + + final List _cards = []; + + void acquireCard(Card card) { + assert(card.isFaceUp); + card.position = position; + card.priority = _cards.length; + _cards.add(card); + } +} +``` + +So far, this puts all cards into a single neat pile, whereas we wanted a fan-out of top three. So, +let's add a dedicated method `_fanOutTopCards()` for this, which we will call at the end of each +`acquireCard()`: + +```dart + void _fanOutTopCards() { + final n = _cards.length; + for (var i = 0; i < n; i++) { + _cards[i].position = position; + } + if (n == 2) { + _cards[1].position.add(_fanOffset); + } else if (n >= 3) { + _cards[n - 2].position.add(_fanOffset); + _cards[n - 1].position.addScaled(_fanOffset, 2); + } + } +``` + +The `_fanOffset` variable here helps determine the shift between cards in the fan, which I decided +to be about 20% of the card's width: + +```dart + final Vector2 _fanOffset = Vector2(KlondikeGame.cardWidth * 0.2, 0); +``` + +Now that the waste pile is ready, let's get back to the `StockPile`. + + +### Stock pile -- tap to deal cards + +The second item on our todo list is the first interactive functionality in the game: tap the stock +pile to deal 3 cards onto the waste. + +Adding tap functionality to the components in Flame is quite simple: we just add the mixin +`TapCallbacks` to the component that we want to be tappable: + +```dart +class StockPile extends PositionComponent with TapCallbacks { ... } +``` + +Oh, and we also need to say what we want to happen when the tap occurs. Here we want the top 3 cards +to be turned face up and moved to the waste pile. So, add the following method to the `StockPile` +class: + +```dart + @override + void onTapUp(TapUpEvent event) { + final wastePile = parent!.firstChild()!; + for (var i = 0; i < 3; i++) { + if (_cards.isNotEmpty) { + final card = _cards.removeLast(); + card.flip(); + wastePile.acquireCard(card); + } + } + } +``` + +You have probably noticed that the cards move from one pile to another immediately, which looks very +unnatural. However, this is how it is going to be for now -- we will defer making the game more +smooth till the next chapter of the tutorial. + +Also, the cards are organized in a well-defined order right now, starting from Kings and ending with +Aces. This doesn't make a very exciting gameplay though, so add line + +```dart + cards.shuffle(); +``` + +in the `KlondikeGame` class right after the list of cards is created. + + +:::{seealso} +For more information about tap functionality, see [](../../flame/inputs/tap_events.md). +::: + + +### Stock pile -- visual representation + +Currently, when the stock pile has no cards, it simply shows an empty space -- there is no visual +cue that this is where the stock is. Such cue is needed, though, because we want the user to be +able to click the stock pile when it is empty in order to move all the cards from the waste back to +the stock so that they can be dealt again. + +In our case, the empty stock pile will have a card-like border, and a circle in the middle: + +```dart + @override + void render(Canvas canvas) { + canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint); + canvas.drawCircle( + Offset(width / 2, height / 2), + KlondikeGame.cardWidth * 0.3, + _circlePaint, + ); + } +``` + +where the paints are defined as + +```dart + final _borderPaint = Paint() + ..style = PaintingStyle.stroke + ..strokeWidth = 10 + ..color = const Color(0xFF3F5B5D); + final _circlePaint = Paint() + ..style = PaintingStyle.stroke + ..strokeWidth = 100 + ..color = const Color(0x883F5B5D); +``` + +and the `cardRRect` in the `KlondikeGame` class as + +```dart + static final cardRRect = RRect.fromRectAndRadius( + const Rect.fromLTWH(0, 0, cardWidth, cardHeight), + const Radius.circular(cardRadius), + ); +``` + +Now when you click through the stock pile till the end, you should be able to see the placeholder +for the stock cards. + + +### Stock pile -- refill from the waste + +The last piece of functionality to add, is to move the cards back from the waste pile into the stock +pile when the user taps on an empty stock. To implement this, we will modify the `onTapUp()` method +like so: + +```dart + @override + void onTapUp(TapUpEvent event) { + final wastePile = parent!.firstChild()!; + if (_cards.isEmpty) { + wastePile.removeAllCards().reversed.forEach((card) { + card.flip(); + acquireCard(card); + }); + } else { + for (var i = 0; i < 3; i++) { + if (_cards.isNotEmpty) { + final card = _cards.removeLast(); + card.flip(); + wastePile.acquireCard(card); + } + } + } + } +``` + +If you're curious why we needed to reverse the list of cards removed from the waste pile, then it is +because we want to simulate the entire waste pile being turned over at once, and not each card being +flipped one by one in their places. You can check that this is working as intended by verifying that +on each subsequent run through the stock pile, the cards are dealt in the same order as they were +dealt in the first run. + +The method `WastePile.removeAllCards()` still needs to be implemented though: + +```dart + List removeAllCards() { + final cards = _cards.toList(); + _cards.clear(); + return cards; + } +``` + +This pretty much concludes the `StockPile` functionality, and we already implemented the `WastePile` +-- so the only two components remaining are the `FoundationPile` and the `TableauPile`. We'll start +with the first one because it looks simpler. + + +### Foundation piles + +The **foundation** piles are the four piles in the top right corner of the game. This is where we +will be building the ordered runs of cards from Ace to King. The functionality of this class is +similar to the `StockPile` and the `WastePile`: it has to be able to hold cards face up, and there +has to be some visual to show where the foundation is when there are no cards there. + +First, let's implement the card-holding logic: + +```dart +class FoundationPile extends PositionComponent { + FoundationPile({super.position}) : super(size: KlondikeGame.cardSize); + + final List _cards = []; + + void acquireCard(Card card) { + assert(card.isFaceUp); + card.position = position; + card.priority = _cards.length; + _cards.add(card); + } +} +``` + +For visual representation of a foundation, I've decided to make a large icon of that foundation's +suit, in grey color. Which means we'd need to update the definition of the class to include the +suit information: + +```dart +class FoundationPile extends PositionComponent { + FoundationPile(int intSuit, {super.position}) + : suit = Suit.fromInt(intSuit), + super(size: KlondikeGame.cardSize); + + final Suit suit; + ... +} +``` + +The code in the `KlondikeGame` class that generates the foundations will have to be adjusted +accordingly in order to pass the suit index to each foundation. + +Now, the rendering code for the foundation pile will look like this: + +```dart + @override + void render(Canvas canvas) { + canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint); + suit.sprite.render( + canvas, + position: size / 2, + anchor: Anchor.center, + size: Vector2.all(KlondikeGame.cardWidth * 0.6), + overridePaint: _suitPaint, + ); + } +``` + +Here we need to have two paint objects, one for the border and one for the suits: + +```dart + final _borderPaint = Paint() + ..style = PaintingStyle.stroke + ..strokeWidth = 10 + ..color = const Color(0x50ffffff); + late final _suitPaint = Paint() + ..color = suit.isRed? const Color(0x3a000000) : const Color(0x64000000) + ..blendMode = BlendMode.luminosity; +``` + +The suit paint uses `BlendMode.luminosity` in order to convert the regular yellow/blue colors of +the suit sprites into grayscale. The "color" of the paint is different depending whether the suit +is red or black because the original luminosity of those sprites is different. Therefore, I had to +pick two different colors in order to make them look the same in grayscale. + + +### Tableau Piles + +The last piece of the game to be implemented is the `TableauPile` component. There are seven of +these piles in total, and they are where the majority of the game play is happening. + +The `TableauPile` also needs a visual representation, in order to indicate that it's a place where +a King can be placed when it is empty. I believe it could be just an empty frame, and that should +be sufficient: + +```dart +class TableauPile extends PositionComponent { + TableauPile({super.position}) : super(size: KlondikeGame.cardSize); + + final _borderPaint = Paint() + ..style = PaintingStyle.stroke + ..strokeWidth = 10 + ..color = const Color(0x50ffffff); + + @override + void render(Canvas canvas) { + canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint); + } +} +``` + +Oh, and the class will need to be able hold the cards too, obviously. Here, some of the cards will +be face down, while others will be face up. Also we will need a small amount of vertical fanning, +similar to how we did it for the `WastePile` component: + +```dart + /// Which cards are currently placed onto this pile. + final List _cards = []; + final Vector2 _fanOffset = Vector2(0, KlondikeGame.cardHeight * 0.05); + + void acquireCard(Card card) { + if (_cards.isEmpty) { + card.position = position; + } else { + card.position = _cards.last.position + _fanOffset; + } + card.priority = _cards.length; + _cards.add(card); + } +``` + +All that remains now is to head over to the `KlondikeGame` and make sure that the cards are dealt +into the `TableauPile`s at the beginning of the game. Modify the code at the end of the `onLoad()` +method so that it looks like this: + +```dart + @override + Future onLoad() async { + ... + + final cards = [ + for (var rank = 1; rank <= 13; rank++) + for (var suit = 0; suit < 4; suit++) + Card(rank, suit) + ]; + cards.shuffle(); + world.addAll(cards); + + int cardToDeal = cards.length - 1; + for (var i = 0; i < 7; i++) { + for (var j = i; j < 7; j++) { + piles[j].acquireCard(cards[cardToDeal--]); + } + piles[i].flipTopCard(); + } + for(int n = 0; n <= cardToDeal; n++) { + stock.acquireCard(cards[n]); + } + } +``` + +Note how we deal the cards from the deck and place them into `TableauPile`s one by one, and only +after that we put the remaining cards into the stock. + +Recall that we decided earlier that all the cards would be owned by the `KlondikeGame` itself. So +they are put into a generated List structure called `cards`, shuffled and added to the `world`. This +List should always have 52 cards in it, so a descending index `cardToDeal` is used to deal 28 cards +one by one from the top of the deck into piles that acquire references to the cards in the deck. An +ascending index is used to deal the remaining 24 cards into the stock in correct shuffled order. At +the end of the deal there are still 52 `Card` objects in the `cards` list. In the card piles we +used `removeList()` to retrieve a card from a pile, but not here because it would remove cards +from `KlondikeGame`'s ownership. + +The `flipTopCard` method in the `TableauPile` class is as trivial as it sounds: + +```dart + void flipTopCard() { + assert(_cards.last.isFaceDown); + _cards.last.flip(); + } +``` + +If you run the game at this point, it would be nicely set up and look as if it was ready to play. +Except that we can't move the cards yet, which is kinda a deal-breaker here. So without further ado, +presenting you the next section: + + +## Moving the cards + +Moving the cards is a somewhat more complicated topic than what we have had so far. We will split +it into several smaller steps: + +1. Simple movement: grab a card and move it around. +2. Ensure that the user can only move the cards that they are allowed to. +3. Check that the cards are dropped at proper destinations. +4. Drag a run of cards. + + +### 1. Simple movement + +So, we want to be able to drag the cards on the screen. This is even simpler than making the +`StockPile` tappable: just head over into the `Card` class and add the `DragCallbacks` mixin: + +```dart +class Card extends PositionComponent with DragCallbacks { +} +``` + +The next step is to implement the actual drag event callbacks: `onDragStart`, `onDragUpdate`, and +`onDragEnd`. + +When the drag gesture is initiated, the first thing that we need to do is to raise the priority of +the card, so that it is rendered above all others. Without this, the card would be occasionally +"sliding beneath" other cards, which would look most unnatural: + +```dart + @override + void onDragStart(DragStartEvent event) { + priority = 100; + } +``` + +During the drag, the `onDragUpdate` event will be called continuously. Using this callback we will +be updating the position of the card so that it follows the movement of the finger (or the mouse). +The `event` object passed to this callback contains the most recent coordinate of the point of +touch, and also the `localDelta` property -- which is the displacement vector since the previous +call of `onDragUpdate`, considering the camera zoom. + +```dart + @override + void onDragUpdate(DragUpdateEvent event) { + position += event.delta; + } +``` + +So far this allows you to grab any card and drag it anywhere around the table. What we want, +however, is to be able to restrict where the card is allowed or not allowed to go. This is where +the core of the logic of the game begins. + + +### 2. Move only allowed cards + +The first restriction that we impose is that the user should only be able to drag the cards that we +allow, which include: (1) the top card of a waste pile, (2) the top card of a foundation pile, and +(3) any face-up card in a tableau pile. + +Thus, in order to determine whether a card can be moved or not, we need to know which pile it +currently belongs to. There could be several ways that we go about it, but seemingly the most +straightforward is to let every card keep a reference to the pile in which it currently resides. + +So, let's start by defining the abstract interface `Pile` that all our existing piles will be +implementing: + +```dart +abstract class Pile { + bool canMoveCard(Card card); +} +``` + +We will expand this class further later, but for now let's make sure that each of the classes +`StockPile`, `WastePile`, `FoundationPile`, and `TableauPile` are marked as implementing this +interface: + +```dart +class StockPile extends PositionComponent with TapCallbacks implements Pile { + ... + @override + bool canMoveCard(Card card) => false; +} + +class WastePile extends PositionComponent implements Pile { + ... + @override + bool canMoveCard(Card card) => _cards.isNotEmpty && card == _cards.last; +} + +class FoundationPile extends PositionComponent implements Pile { + ... + @override + bool canMoveCard(Card card) => _cards.isNotEmpty && card == _cards.last; +} + +class TableauPile extends PositionComponent implements Pile { + ... + @override + bool canMoveCard(Card card) => _cards.isNotEmpty && card == _cards.last; +} +``` + +We also wanted to let every `Card` know which pile it is currently in. For this, add the field +`Pile? pile` into the `Card` class, and make sure to set it in each pile's `acquireCard()` method, +like so: + +```dart + void acquireCard(Card card) { + ... + card.pile = this; + } +``` + +Now we can put this new functionality to use: go into the `Card.onDragStart()` method and modify +it so that it would check whether the card is allowed to be moved before starting the drag: + +```dart + void onDragStart(DragStartEvent event) { + if (pile?.canMoveCard(this) ?? false) { + super.onDragStart(event); + priority = 100; + } + } +``` + +We have also added a call to `super.onDragStart()` which sets an `_isDragged` variable to `true` +in the `DragCallbacks` mixin, we need to check this flag via the public `isDragged` getter in +the `onDragUpdate()` method and use `super.onDragEnd()` in `onDragEnd()` so the flag is set back +to `false`: + +```dart + @override + void onDragUpdate(DragUpdateEvent event) { + if (!isDragged) { + return; + } + position += event.delta; + } + + @override + void onDragEnd(DragEndEvent event) { + super.onDragEnd(event); + } +``` + +Now only the proper cards can be dragged, but they still drop at random positions on the table, +so let's work on that. + + +### 3. Dropping the cards at proper locations + +At this point what we want to do is to figure out where the dragged card is being dropped. More +specifically, we want to know into which *pile* it is being dropped. This can be achieved by using +the `componentsAtPoint()` API, which allows you to query which components are located at a given +position on the screen. + +Thus, my first attempt at revising the `onDragEnd` callback looks like this: + +```dart + @override + void onDragEnd(DragEndEvent event) { + if (!isDragged) { + return; + } + super.onDragEnd(event); + final dropPiles = parent! + .componentsAtPoint(position + size / 2) + .whereType() + .toList(); + if (dropPiles.isNotEmpty) { + // if (card is allowed to be dropped into this pile) { + // remove the card from the current pile + // add the card into the new pile + // } + } + // return the card to where it was originally + } +``` + +This still contains several placeholders for the functionality that still needs to be implemented, +so let's get to it. + +First piece of the puzzle is the "is card allowed to be dropped here?" check. To implement this, +first head over into the `Pile` class and add the `canAcceptCard()` abstract method: + +```dart +abstract class Pile { + ... + bool canAcceptCard(Card card); +} +``` + +Obviously this now needs to be implemented for every `Pile` subclass, so let's get to it: + +```dart +class FoundationPile ... implements Pile { + ... + @override + bool canAcceptCard(Card card) { + final topCardRank = _cards.isEmpty? 0 : _cards.last.rank.value; + return card.suit == suit && card.rank.value == topCardRank + 1; + } +} + +class TableauPile ... implements Pile { + ... + @override + bool canAcceptCard(Card card) { + if (_cards.isEmpty) { + return card.rank.value == 13; + } else { + final topCard = _cards.last; + return card.suit.isRed == !topCard.suit.isRed && + card.rank.value == topCard.rank.value - 1; + } + } +} +``` + +(for the `StockPile` and the `WastePile` the method should just return false, since no cards should +be dropped there). + +Alright, next part is the "remove the card from its current pile". Once again, let's head over to +the `Pile` class and add the `removeCard()` abstract method: + +```dart +abstract class Pile { + ... + void removeCard(Card card); +} +``` + +Then we need to re-visit all four pile subclasses and implement this method: + +```dart +class StockPile ... implements Pile { + ... + @override + void removeCard(Card card) => throw StateError('cannot remove cards from here'); +} + +class WastePile ... implements Pile { + ... + @override + void removeCard(Card card) { + assert(canMoveCard(card)); + _cards.removeLast(); + _fanOutTopCards(); + } +} + +class FoundationPile ... implements Pile { + ... + @override + void removeCard(Card card) { + assert(canMoveCard(card)); + _cards.removeLast(); + } +} + +class TableauPile ... implements Pile { + ... + @override + void removeCard(Card card) { + assert(_cards.contains(card) && card.isFaceUp); + final index = _cards.indexOf(card); + _cards.removeRange(index, _cards.length); + if (_cards.isNotEmpty && _cards.last.isFaceDown) { + flipTopCard(); + } + } +} +``` + +The next action in our pseudo-code is to "add the card to the new pile". But this one we have +already implemented: it's the `acquireCard()` method. So all we need is to declare it in the `Pile` +interface: + +```dart +abstract class Pile { + ... + void acquireCard(Card card); +} +``` + +The last piece that's missing is "return the card to where it was". You can probably guess how we +are going to go about this one: add the `returnCard()` method into the `Pile` interface, and then +implement this method in all four pile subclasses: + +```dart +class StockPile ... implements Pile { + ... + @override + void returnCard(Card card) => throw StateError('cannot remove cards from here'); +} + +class WastePile ... implements Pile { + ... + @override + void returnCard(Card card) { + card.priority = _cards.indexOf(card); + _fanOutTopCards(); + } +} + +class FoundationPile ... implements Pile { + ... + @override + void returnCard(Card card) { + card.position = position; + card.priority = _cards.indexOf(card); + } +} + +class TableauPile ... implements Pile { + ... + @override + void returnCard(Card card) { + final index = _cards.indexOf(card); + card.position = + index == 0 ? position : _cards[index - 1].position + _fanOffset; + card.priority = index; + } +} +``` + +Now, putting this all together, the `Card`'s `onDragEnd` method will look like this: + +```dart + @override + void onDragEnd(DragEndEvent event) { + if (!isDragged) { + return; + } + super.onDragEnd(event); + final dropPiles = parent! + .componentsAtPoint(position + size / 2) + .whereType() + .toList(); + if (dropPiles.isNotEmpty) { + if (dropPiles.first.canAcceptCard(this)) { + pile!.removeCard(this); + dropPiles.first.acquireCard(this); + return; + } + } + pile!.returnCard(this); + } +``` + +Ok, that was quite a lot of work -- but if you run the game now, you'd be able to move the cards +properly from one pile to another, and they will never go where they are not supposed to go. The +only thing that remains is to be able to move multiple cards at once between tableau piles. So take +a short break, and then on to the next section! + + +### 4. Moving a run of cards + +In this section we will be implementing the necessary changes to allow us to move small stacks of +cards between the tableau piles. Before we begin, though, we need to make a small fix first. + +You have probably noticed when running the game in the previous section that the cards in the +tableau piles clamp too closely together. That is, they are at the correct distance when they face +down, but they should be at a larger distance when they face up, which is not currently the case. +This makes it really difficult to see which cards are available for dragging. + +So, let's head over into the `TableauPile` class and create a new method `layOutCards()`, whose job +would be to ensure that all cards currently in the pile have the right positions: + +```dart + final Vector2 _fanOffset1 = Vector2(0, KlondikeGame.cardHeight * 0.05); + final Vector2 _fanOffset2 = Vector2(0, KlondikeGame.cardHeight * 0.20); + + void layOutCards() { + if (_cards.isEmpty) { + return; + } + _cards[0].position.setFrom(position); + for (var i = 1; i < _cards.length; i++) { + _cards[i].position + ..setFrom(_cards[i - 1].position) + ..add(_cards[i - 1].isFaceDown ? _fanOffset1 : _fanOffset2); + } + } +``` + +Make sure to call this method at the end of `removeCard()`, `returnCard()`, and `acquireCard()` -- +replacing any current logic that handles card positioning. + +Another problem that you may have noticed is that for taller card stacks it becomes hard to place a +card there. This is because our logic for determining in which pile the card is being dropped checks +whether the center of the card is inside any of the `TableauPile` components -- but those components +have only the size of a single card! To fix this inconsistency, all we need is to declare that the +height of the tableau pile is at least as tall as all the cards in it, or even higher. Add this line +at the end of the `layOutCards()` method: + +```dart + height = KlondikeGame.cardHeight * 1.5 + _cards.last.y - _cards.first.y; +``` + +The factor `1.5` here adds a little bit extra space at the bottom of each pile. The card to be +dropped should be overlapping the hitbox by a little over half its width and height. If you are +approaching from below, it would be just overlapping the nearest card (i.e. the one that is fully +visible). You can temporarily turn the debug mode on to see the hitboxes. + +![Illustration of Tableau Pile Hitboxes](../../images/tutorials/klondike-tableau-hitboxes.png) + +Ok, let's get to our main topic: how to move a stack of cards at once. + +First thing that we're going to add is the list of `attachedCards` for every card. This list will +be non-empty only when the card is being dragged while having other cards on top. Add the following +declaration to the `Card` class: + +```dart + final List attachedCards = []; +``` + +Now, in order to create this list in `onDragStart`, we need to query the `TableauPile` for the list +of cards that are on top of the given card. Let's add such a method into the `TableauPile` class: + +```dart + List cardsOnTop(Card card) { + assert(card.isFaceUp && _cards.contains(card)); + final index = _cards.indexOf(card); + return _cards.getRange(index + 1, _cards.length).toList(); + } +``` + +While we are in the `TableauPile` class, let's also update the `canMoveCard()` method to allow +dragging cards that are not necessarily on top: + +```dart + @override + bool canMoveCard(Card card) => card.isFaceUp; +``` + +Heading back into the `Card` class, we can use this method in order to populate the list of +`attachedCards` when the card starts to move: + +```dart + @override + void onDragStart(DragStartEvent event) { + if (pile?.canMoveCard(this) ?? false) { + super.onDragStart(); + priority = 100; + if (pile is TableauPile) { + attachedCards.clear(); + final extraCards = (pile! as TableauPile).cardsOnTop(this); + for (final card in extraCards) { + card.priority = attachedCards.length + 101; + attachedCards.add(card); + } + } + } + } +``` + +Now all we need to do is to make sure that the attached cards are also moved with the main card in +the `onDragUpdate` method: + +```dart + @override + void onDragUpdate(DragUpdateEvent event) { + if (!isDragged) { + return; + } + final delta = event.delta; + position.add(delta); + attachedCards.forEach((card) => card.position.add(delta)); + } +``` + +This does the trick, almost. All that remains is to fix any loose ends. For example, we don't want +to let the user drop a stack of cards onto a foundation pile, so let's head over into the +`FoundationPile` class and modify the `canAcceptCard()` method accordingly: + +```dart + @override + bool canAcceptCard(Card card) { + final topCardRank = _cards.isEmpty ? 0 : _cards.last.rank.value; + return card.suit == suit && + card.rank.value == topCardRank + 1 && + card.attachedCards.isEmpty; + } +``` + +Secondly, we need to properly take care of the stack of card as it is being dropped into a tableau +pile. So, go back into the `Card` class and update its `onDragEnd()` method to also move the +attached cards into the pile, and the same when it comes to returning the cards into the old pile: + +```dart + @override + void onDragEnd(DragEndEvent event) { + if (!isDragged) { + return; + } + super.onDragEnd(event); + final dropPiles = parent! + .componentsAtPoint(position + size / 2) + .whereType() + .toList(); + if (dropPiles.isNotEmpty) { + if (dropPiles.first.canAcceptCard(this)) { + pile!.removeCard(this); + dropPiles.first.acquireCard(this); + if (attachedCards.isNotEmpty) { + attachedCards.forEach((card) => dropPiles.first.acquireCard(card)); + attachedCards.clear(); + } + return; + } + } + pile!.returnCard(this); + if (attachedCards.isNotEmpty) { + attachedCards.forEach((card) => pile!.returnCard(card)); + attachedCards.clear(); + } + } +``` + +Well, this is it! The game is now fully playable. Press the button below to see what the resulting +code looks like, or to play it live. In the next section we will discuss how to make it more +animated with the help of effects. + +```{flutter-app} +:sources: ../tutorials/klondike/app +:page: step4 +:show: popup code +``` diff --git a/docs/1.18.0/_sources/tutorials/klondike/step5.md.txt b/docs/1.18.0/_sources/tutorials/klondike/step5.md.txt new file mode 100644 index 000000000..9f55cb738 --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/klondike/step5.md.txt @@ -0,0 +1,786 @@ +# 5. Animations, restarting, buttons and a New World + +In this chapter we will be showing various ways to make the Klondike game more fun and easier to +play. The topics to be covered are: + +- Klondike Draw 1 and Draw 3 +- Animating and automating moves +- Detecting and celebrating a win +- Ending and restarting the game +- How to implement your own FlameGame world +- Simple action-buttons +- Anchors and co-ordinates +- Random number generation and seeding +- Effects and EffectControllers + + +## The Klondike draw + +The Klondike patience game (or solitaire game in the USA) has two main variants: Draw 3 and Draw 1. +Currently the Klondike Flame Game is Draw 3, which is a lot more difficult than Draw 1, because +although you can see 3 cards, you can only move one of them and that move changes the "phase" of +other cards. So different cards are going to become available — not easy. + +In Klondike Draw 1 just one card at a time is drawn from the Stock and shown, so every card in it is +available, and you can go through the Stock as many times as you like, just as in Klondike Draw 3. + +So how do we implement Klondike Draw 1? Clearly only the Stock and Waste piles are involved, so +maybe we should have KlondikeGame provide a value 1 or 3 to each of them. They both have code for +constructors, so we could just add an extra parameter to that code, but in Flame there is another +way, which works even if your component has a default constructor (no code for it) or your game has +many game-wide values. Let us call our value `klondikeDraw`. In your class declaration add the +`HasGameReference` mixin, then write `game.klondikeDraw` wherever you need the value 1 or 3. +For class StockPile we will have: + +```dart +class StockPile extends PositionComponent + with TapCallbacks, HasGameReference + implements Pile { +``` + +and + +```dart + @override + void onTapUp(TapUpEvent event) { + final wastePile = parent!.firstChild()!; + if (_cards.isEmpty) { + wastePile.removeAllCards().reversed.forEach((card) { + card.flip(); + acquireCard(card); + }); + } else { + for (var i = 0; i < game.klondikeDraw; i++) { + if (_cards.isNotEmpty) { + final card = _cards.removeLast(); + card.flip(); + wastePile.acquireCard(card); + } + } + } + } +``` + +For class WastePile we will have: + +```dart +class WastePile extends PositionComponent + with HasGameReference + implements Pile { +``` + +and + +```dart + void _fanOutTopCards() { + if (game.klondikeDraw == 1) { // No fan-out in Klondike Draw 1. + return; + } + final n = _cards.length; + for (var i = 0; i < n; i++) { + _cards[i].position = position; + } + if (n == 2) { + _cards[1].position.add(_fanOffset); + } else if (n >= 3) { + _cards[n - 2].position.add(_fanOffset); + _cards[n - 1].position.addScaled(_fanOffset, 2); + } + } +``` + +That makes the Stock and Waste piles play either Klondike Draw 1 or Klondike Draw 3, but how do you +tell them which variant to play? For now, we will add a place-holder to the KlondikeGame class. +We just comment out whichever one we do not want and then rebuild. + +```dart + // final int klondikeDraw = 3; + final int klondikeDraw = 1; +``` + +This is fine as a temporary measure, when we have not yet decided how to handle some aspect of +our design, but ultimately we will have to provide some kind of **input** for the player to choose +which flavor of Klondike to play, such as a menu screen, a settings screen or a button. Flame can +incorporate Flutter widgets into a game and the next Tutorial (Ember) shows how to add a menu +widget, as its final step. + + +## Making cards move + +In Flame, if we need a component to do something, we use an `Effect` - a special component that can +attach to another component, such as a card, and modify its properties. That includes any kind of +motion (or change of `position`). We also need an `EffectController`, which provides timing for an +effect: when to start, how long to go for and what `Curve` to follow. The latter is not a curve in +space. It is a time-curve that specifies accelerations and decelerations during the time of the +effect, such as start moving a card quickly and then slow down as it approaches its destination. + +To move a card, we will add a `doMove()` method to the `Card` class. It will require a `to` location +to go to. Optional parameters are `speed:` (default 10.0), `start:` (default zero), +`curve:` (default `Curves.easeOutQuad`) and `onComplete:` (default `null`, i.e. no callback when +the move finishes). Speed is in card widths per second. Usually we will provide a callback, because +a bit of gameplay must be done **after** the animated move. The default `curve:` parameter gives us +a fast-in/slow-out move, much as a human player would do. So the following code is added to the +end of the `Card` class: + +```dart + void doMove( + Vector2 to, { + double speed = 10.0, + double start = 0.0, + Curve curve = Curves.easeOutQuad, + VoidCallback? onComplete, + }) { + assert(speed > 0.0, 'Speed must be > 0 widths per second'); + final dt = (to - position).length / (speed * size.x); + assert(dt > 0.0, 'Distance to move must be > 0'); + priority = 100; + add( + MoveToEffect( + to, + EffectController(duration: dt, startDelay: start, curve: curve), + onComplete: () { + onComplete?.call(); + }, + ), + ); + } +``` + +To make this code compile we need to import `'package:flame/effects.dart'` and +`'package:flutter/animation.dart'` at the top of the `components/card.dart` file. That done, we can +start using the new method to return the card(s) gracefully to where they came from, after being +dropped in an invalid position. First, we need a private data item to store a card's position when +a drag-and-drop started. So let us insert new lines in two places as shown below: + +```dart + bool _isDragging = false; + Vector2 _whereCardStarted = Vector2(0, 0); + + final List attachedCards = []; +``` + +```dart + _isDragging = true; + priority = 100; + // Copy each co-ord, else _whereCardStarted changes as the position does. + _whereCardStarted = Vector2(position.x, position.y); + if (pile is TableauPile) { +``` + +It would be a mistake to write `_whereCardStarted = position;` here. In Dart, that would just +copy a reference: so `_whereCardStarted` would point to the same data as `position` while the +drag occurred and the card's `position` data changed. We can get around this by copying the card's +**current** X and Y co-ordinates into a **new** `Vector2` object. + +To animate cards being returned to their original piles after an invalid drag-and-drop, we replace +five lines at the end of the `onDragEnd()` method with: + +```dart + // Invalid drop (middle of nowhere, invalid pile or invalid card for pile). + doMove( + _whereCardStarted, + onComplete: () { + pile!.returnCard(this); + }, + ); + if (attachedCards.isNotEmpty) { + attachedCards.forEach((card) { + final offset = card.position - position; + card.doMove( + _whereCardStarted + offset, + onComplete: () { + pile!.returnCard(card); + }, + ); + }); + attachedCards.clear(); + } +``` + +In each case, we use the default speed of 10 card-widths per second. +Notice how the `onComplete:` parameters are used to return each card to the pile where it started. +It will then be added back to that pile's list of contents. Notice also that the list of attached +cards (if any) is cleared immediately, as the animated cards start to move. This does not matter, +because each moving card has a `MoveToEffect` and an `EffectController` added to it and these +contain all the data needed to get the right card to the right place at the right time. Thus +no important information is lost by clearing the attached cards early. Also, by default, the +`MoveToEffect` and `EffectController` in each moving card automatically get detached and deleted +by Flame when the show is over. + +Some other automatic and animated moves we can try are dealing the cards, flipping cards from Stock +to Waste pile, turning cards over automatically on the tableau piles, and settling cards into place +after a valid drag-and-drop. We will have a look at animating a flip first. + + +## Animating a card-flip + +Flutter and Flame do not yet support 3-D effects (as at October 2023), but we can emulate them. +To make a card look as if it is turning over, we will shrink the width of the back-view, switch +to the front view and expand back to full width. The code uses quite a few features of Effects +and EffectControllers: + +```dart + void turnFaceUp({ + double time = 0.3, + double start = 0.0, + VoidCallback? onComplete, + }) { + assert(!_isFaceUpView, 'Card must be face-down before turning face-up.'); + assert(time > 0.0, 'Time to turn card over must be > 0'); + _isAnimatedFlip = true; + anchor = Anchor.topCenter; + position += Vector2(width / 2, 0); + priority = 100; + add( + ScaleEffect.to( + Vector2(scale.x / 100, scale.y), + EffectController( + startDelay: start, + curve: Curves.easeOutSine, + duration: time / 2, + onMax: () { + _isFaceUpView = true; + }, + reverseDuration: time / 2, + onMin: () { + _isAnimatedFlip = false; + _faceUp = true; + anchor = Anchor.topLeft; + position -= Vector2(width / 2, 0); + }, + ), + onComplete: () { + onComplete?.call(); + }, + ), + ); + } +``` + +So how does all this work? We have a default time of 0.3 seconds for the flip to occur, a start time +and an optional callback on completion, as before. Now we add a ScaleEffect to the card, +which shrinks it almost to zero width, but leaves the height unchanged. However, that must take +only half the time, then we must switch from the face-down to the face-up view of the card and +expand it back out, also in half the time. + +This is where we use some of the fancier parameters of the `EffectController` class. The +`duration:` is set to `time / 2` and we use an `onMax:` callback, with inline code to change the +view to face-up. That callback will happen after `time / 2`, when the `Effect` (whatever it is) +has reached its maximum (i.e. in this case, the view of the card has shrunk to a thin vertical +line). After the switch to face-up view, the EffectController will take the Effect into reverse +for `reverseDuration: time / 2`. Everything is reversed: the view of the card expands and the +`curve:` of time is applied in reverse order. In total, the timing follows a sine curve from +0 to pi, giving a smooth animation in which the width of the card-view is always the projection +into 2-D of its 3-D position. Wow! That's a lot of work for a little EffectController! + +We are not there yet! If you were to run just the `add()` part of the code, you would see some +ugly things happening. Yeah, yeah, been there, done that — when I was preparing this code! +First off, the card shrinks to a line at its left. That is because all cards in this game have +an `Anchor` at `topLeft`, which is the point used to set the card's `position`. We would like +the card to flip around its vertical center-line. Easy, just set `anchor = Anchor.topCenter` +first: that makes the card flip realistically, but it jumps by half a card-width to the left +before flipping. + +Long story short, see the lines between `assert(` and `add(` and their reversal in the `onMin:` +callback, which occurs when the Effect is finished, but before the final `onComplete:` callback. +At the beginning, the card's rendering `priority` is set to 100, so that it will ride above all +other cards in the neighborhood. That value cannot always be saved and restored because we may +not know what the card's priority should be in whatever `Pile` is receiving it. So we have made +sure that the receiver is always called in the `onComplete:` option, using a method that will +adjust the positions and priorities of the cards in the pile. + +Last but not least, in the preceding code, notice the use of the variable `_isAnimatedFlip`. +This is a `bool` variable defined and initialized near the start of class `Card` in file +`components/card.dart`, along with another new `bool` called `_isFaceUpView`. Initially these +are set `false`, along with the existing `bool _faceUp = false` variable. What is the significance +of these variables? It is **huge**. A few lines further down, we see: + +```dart + @override + void render(Canvas canvas) { + if (_isFaceUpView) { + _renderFront(canvas); + } else { + _renderBack(canvas); + } + } +``` + +This is the code that makes every card visible on the screen, in either face-up or face-down state. +At the end of Klondike Tutorial Step 4, the `if` statement was `if (_faceUp) {`. This was OK +because all moves of cards were instantaneous (leaving aside drags and drops): any change in the +card's face-up or face-down state could be rendered at the Flame Engine's next `tick` or soon after. +This posed no problem when we started to animate card moves, provided there were no flips involved. +However, when we tapped a non-empty Stock Pile, the executed code was: + +```dart + final card = _cards.removeLast(); + card.flip; + wastePile.acquireCard(card); +``` + +And the first thing `wastePile.acquireCard(` does is `assert(card.isFaceUp);`, which fails if an +animated flip is keeping the card face-down while the first half of the flip is occurring. + + +## Model and View + +Clearly the card cannot be in two states at once: it is not Schrödinger's cat! We can resolve the +dilemma by using two definitions of "face-up": a Model type and a View type. The View version is +used in rendering and animation (i.e. what appears on the screen) and the Model version in the logic +of the game, the gameplay and its error-checks. That way, we do not have to revise all the logic +of the Piles in this game in order to animate some of it. A more complex game might benefit from +separating the Model and the View during the design and early coding stages — even into +separate classes. In this game we are using just a little separation of Model and View. The +`_isAnimatedFlip` variable is `true` while there is an animated flip going on, otherwise `false`, +and the `Card` class's `flip()` function is expanded to: + +```dart + void flip() { + if (_isAnimatedFlip) { + // Let the animation determine the FaceUp/FaceDown state. + _faceUp = _isFaceUpView; + } else { + // No animation: flip and render the card immediately. + _faceUp = !_faceUp; + _isFaceUpView = _faceUp; + } + } +``` + +In the Klondike Tutorial game we are still having to trigger a Model update in the `onComplete:` +callback of the flip animation. It might be nice, for impatient or rapid-fingered players, to +transfer a card from Stock Pile to Waste Pile instantaneously, in the Model, leaving the animation +in the View to catch up later, with no `onComplete:` callback. That way, you could flip through +the Stock Pile very rapidly, by tapping fast. However, that is beyond the scope of this Tutorial. + + +## Ending and restarting the game + +As it stands, there is no easy way to finish the Klondike Tutorial game and start another, even if +you have won. We can only close the app and start it again. And there is no "reward" for winning. + +There are various ways to tackle this, depending on the simplicity or complexity of your game and +on how long the `onLoad()` method is likely to take. They can range from writing your own +GameWidget, to doing a few simple re-initializations in your Game class (i.e. KlondikeGame in this +case). + +In the GameWidget case you would supply the Game with a VoidCallback function parameter named +`reset` or `restart`. When the callback is invoked, it would use the Flutter conventions of a +`StatefulWidget` (e.g. `setState(() {});)` to force the widget to be rebuilt and replaced, thus +releasing all references to the current Game instance, its state and all of its memory. There could +also be Flutter code to run a menu or other startup screen. + +Re-initialization should be undertaken only if the operations involved are few and simple. Otherwise +coding errors could lead to subtle problems, memory leaks and crashes in your game. It might be the +easiest way to go in Klondike (as it is in the Ember Tutorial). Basically, we must clear all the +card references out of all the `Pile`s and then re-shuffle (or not) and re-deal, possibly changing +from Klondike Draw 3 to Klondike Draw 1 or vice-versa. + +Well, that was not as easy as it looked! Re-initializing the `Pile`s and each `Card` was easy +enough, but the difficult bit came next... Whether the player wins or restarts without winning, we +have 52 cards spread around various piles on the screen, some face-up and maybe some face-down. We +would like to animate the deal later, so it would be nice to collect the cards into a neat face-down +pile at top left, in the Stock Pile area: not the actual Stock Pile yet, because that gets created +during the deal. + +Writing a simple little loop to set each `Card` face-down and use its `doMove` method to make it +move independently to the top left fails. It causes one of those "subtle problems" referred to +earlier. The cards all travel at the same speed but arrive at different times. The deal then +produces messy Tableau Piles with several cards out of position. Also the animated move of all +the cards to the Stock Pile area was a bit ugly. + +The problem of the messy Tableau Piles was fixable, but at this point the reviewer of the code +and documentation proposed a completely new approach which avoids re-initializing anything and +creates all the Components from scratch, which is the preferred Flutter/Flame way of doing things. + + +## A New World + + +### Start and restart actions + +We wish to provide the following actions in the Klondike game: + +- A first start, +- Any number of restarts with a new deal, +- Any number of restarts with the same deal as before, +- A switch between Klondike Draw 1 and Draw 3 and restart with a new deal, and +- Have fun before restarting with a new deal (we'll keep that as a surprise for later). + +The proposal is to have a new KlondikeWorld class, which replaces the default `world` provided by +FlameGame. The new world contains (almost) everything we need to play the game and is created or +re-created during each of the above actions. + + +### A stripped-down KlondikeGame class + +Here is the new code for the KlondikeGame class (what is left of it). + +```dart +enum Action { newDeal, sameDeal, changeDraw, haveFun } + +class KlondikeGame extends FlameGame { + static const double cardGap = 175.0; + static const double topGap = 500.0; + static const double cardWidth = 1000.0; + static const double cardHeight = 1400.0; + static const double cardRadius = 100.0; + static const double cardSpaceWidth = cardWidth + cardGap; + static const double cardSpaceHeight = cardHeight + cardGap; + static final Vector2 cardSize = Vector2(cardWidth, cardHeight); + static final cardRRect = RRect.fromRectAndRadius( + const Rect.fromLTWH(0, 0, cardWidth, cardHeight), + const Radius.circular(cardRadius), + ); + + // Constant used when creating Random seed. + static const int maxInt = 0xFFFFFFFE; // = (2 to the power 32) - 1 + + // This KlondikeGame constructor also initiates the first KlondikeWorld. + KlondikeGame() : super(world: KlondikeWorld()); + + // These three values persist between games and are starting conditions + // for the next game to be played in KlondikeWorld. The actual seed is + // computed in KlondikeWorld but is held here in case the player chooses + // to replay a game by selecting Action.sameDeal. + int klondikeDraw = 1; + int seed = 1; + Action action = Action.newDeal; +} +``` + +Huh! What happened to the `onLoad()` method? And what's this `seed` thing? And how does +KlondikeWorld get into the act? Well, everything that used to be in the `onLoad()` method is now +in the `onLoad()` method of KlondikeWorld, which is an extension of the `World` class and is a type +of `Component`, so it can have an `onLoad()` method, as can any `Component` type. The content of +the method is much the same as before, except that `world.add(` becomes just `add(`. It also brings +in some `addButton()` references, but more on these later. + + +### Using a Random Number Generator seed + +The `seed` is a common games-programming technique in any programming environment. Usually it allows +you to start a Random Number Generator from a known point (called the seed) and give your game +reproducible behavior when you are in the development and testing stage. Here it is used to +provide exactly the same deal of the Klondike cards when the player requests `Same deal`. + + +### Introducing the new KlondikeWorld class + +The `class KlondikeGame` declaration specifies that this extension of the FlameGame class must +have a world of type KlondikeWorld (i.e. `FlameGame`). Didn't know we could do +that for a game, did we? So how does the first instance of KlondikeWorld get created? It's all in +the KlondikeGame constructor code: + +```dart + KlondikeGame() : super(world: KlondikeWorld()); +``` + +The constructor itself is a default constructor, but the colon `:` begins a constructor +initialization sequence which creates our world for the first time. + + +### Buttons + +We are going to use some buttons to activate the various ways of restarting the Klondike Game. First +we extend Flame's `ButtonComponent` to create class `FlatButton`, adapted from a Flat Button which +used to be in Flame's Examples pages. `ButtonComponent` uses two `PositionComponent`s, one for when +the button is in its normal state (up) and one for when it is pressed. The two components are +`mounted` and `rendered` alternately as the user presses the button and releases it. To press the +button, tap and hold it down. + +In our button, the two components are the button's outlines - the `buttonDown:` one makes +the outline of the button turn red when it is pressed, as a warning, because the four button-actions +all end the current game and start another. That is also why they are positioned at the top of the +canvas, above all the cards, where you are less likely to press them accidentally. If you do press +one and have second thoughts, keep pressing and slide away, then the button will have no effect. + +The four buttons trigger the restart actions described above and are labelled `New deal`, +`Same deal`, `Draw 1 ⇌ 3` and `Have fun`. Flame also has a `SpriteButtonComponent`, based on two +alternating `Sprite`s, a `HudButtonComponent` and an `AdvancedButtonComponent`. For further types +of buttons and controllers, it would be best to use a Flutter overlay, menu or settings widget and +have access to Flutter's widgets for radio buttons, dropdown lists, sliders, etc. For the purposes +of this Tutorial our FlatButton will do fine. + +We use the `addButton()` method, during our world's `onLoad()`, to set up our four buttons and +add them to our `world`. + +```dart + playAreaSize = + Vector2(7 * cardSpaceWidth + cardGap, 4 * cardSpaceHeight + topGap); + final gameMidX = playAreaSize.x / 2; + + addButton('New deal', gameMidX, Action.newDeal); + addButton('Same deal', gameMidX + cardSpaceWidth, Action.sameDeal); + addButton('Draw 1 or 3', gameMidX + 2 * cardSpaceWidth, Action.changeDraw); + addButton('Have fun', gameMidX + 3 * cardSpaceWidth, Action.haveFun); +``` + +That places them above our four Foundation piles and centrally aligned with them. The first +Foundation pile happens to be aligned around the top-center of the screen, so the first button +is centred above it. + + +### Anchors and co-ordinates + +The expressions here and in the `addButton()` method may seem odd because the cards and piles all +have `Anchor.topLeft` but the buttons have `Anchor.center`. The `position` co-ordinates of a `Card` +are where its top-left corner goes, but the `position` co-ordinates of a `FlatButton` are where its +*center* goes and the various parts of a `FlatButton` are arranged (internally) around its center. +These examples can give us some insight into how co-ordinate systems work in Flame. + + +### The `deal()` method + +The last thing the KlondikeWorld's `onLoad()` method does is call the `deal()` method to shuffle +and deal the cards. This method is now in the KlondikeWorld class and so are the `checkWin()` and +`letsCelebrate()` methods, but more about those later. The deal process is the same as before but +now includes some animation: + +```dart + void deal() { + assert(cards.length == 52, 'There are ${cards.length} cards: should be 52'); + + if (game.action != Action.sameDeal) { + // New deal: change the Random Number Generator's seed. + game.seed = Random().nextInt(KlondikeGame.maxInt); + if (game.action == Action.changeDraw) { + game.klondikeDraw = (game.klondikeDraw == 3) ? 1 : 3; + } + } + // For the "Same deal" option, re-use the previous seed, else use a new one. + cards.shuffle(Random(game.seed)); + + var cardToDeal = cards.length - 1; + var nMovingCards = 0; + for (var i = 0; i < 7; i++) { + for (var j = i; j < 7; j++) { + final card = cards[cardToDeal--]; + card.doMove( + tableauPiles[j].position, + start: nMovingCards * 0.15, + onComplete: () { + tableauPiles[j].acquireCard(card); + nMovingCards--; + if (nMovingCards == 0) { + var delayFactor = 0; + for (final tableauPile in tableauPiles) { + delayFactor++; + tableauPile.flipTopCard(start: delayFactor * 0.15); + } + } + }, + ); + nMovingCards++; + } + } + for (var n = 0; n <= cardToDeal; n++) { + stock.acquireCard(cards[n]); + } + } +``` + +First we implement the `Action` value for this game. In the very first game, the KlondikeGame class +sets defaults of `Action.newDeal` and `klondikeDraw = 1`, but after that the player can select an +action by pressing and releasing a button and KlondikeWorld saves it in KlondikeGame — or the player +wins the game, in which case `Action.newDeal` is selected and saved automatically. The action +usually generates and saves a new seed, but that is skipped if we have `Action.sameDeal`. Then we +shuffle the cards, using whatever `seed` applies. + +The deal logic is the same as we used in Klondike Tutorial Step 4 and the animation is fairly easy. +We just use `card.doMove(` for each card, with a changing destination and an increasing `start:` +value, counting each moving card as it departs. For a few milliseconds after the loops terminate +`nMovingCards` will be at a maximum of 28 (i.e. 1 + 2 + 3 + 4 + 5 + 6 + 7) and the remaining 24 +cards will go into a properly constructed Stock Pile. + +Then cards will be arriving over the next second or so and a problem arises. The cards do not +necessarily arrive in the order they are sent from the Stock Pile area. If we start turning over +the last cards in the columns too soon, we might turn over the wrong card and mess up the deal. The +following printout of the deal shows how arrivals can get out of order. The `j` variable is the +Tableau Pile number and `i` is the card's position in the pile. The King of Hearts for Pile 6 is +arriving before the Queen of Clubs that is the last card in Pile 5. And there are two more cards +to go in Pile 6. + +```console +flutter: Move done, i 3, j 6, 6♠ 5 moving cards. +flutter: Move done, i 4, j 5, 9♥ 4 moving cards. +flutter: Move done, i 4, j 6, K♥ 3 moving cards. +flutter: Move done, i 5, j 5, Q♣ 2 moving cards. +flutter: Move done, i 5, j 6, 2♠ 1 moving cards. +flutter: Move done, i 6, j 6, 10♠ 0 moving cards. +flutter: Pile 0 [Q♦] +flutter: Pile 1 [J♣, Q♥] +flutter: Pile 2 [5♥, 5♦, J♦] +flutter: Pile 3 [A♠, Q♠, A♥, 5♠] +flutter: Pile 4 [8♦, 10♣, 7♥, 3♥, 4♥] +flutter: Pile 5 [4♠, 8♣, 5♣, 2♥, 9♥, Q♣] +flutter: Pile 6 [4♣, 3♦, K♦, 6♠, K♥, 2♠, 10♠] +``` + +So we count off the cards in the `onComplete()` callback code as they arrive. Only when all 28 cards +have arrived do we start turning over the last card of each Tableau Pile. When the deal has been +completed our KlondikeWorld is also complete and ready for play. + + +## More animations of moves + +The `Card` class's `doMove()` and `turnFaceUp()` methods have been combined into a doMoveAndFlip() +method, which is used to draw cards from the Stock Pile. The dropping of a card or cards onto a pile +after drag-and-drop also uses `doMove()` to settle the drop more gracefully. Finally, there is a +shortcut to auto-move a card onto its Foundation Pile if it is ready to go out. This adds +`TapCallbacks` to the `Card` class and an `onTapUp()` callback as follows: + +```dart + onTapUp(TapUpEvent event) { + if (isFaceUp) { + final suitIndex = suit.value; + if (game.foundations[suitIndex].canAcceptCard(this)) { + pile!.removeCard(this); + doMove( + game.foundations[suitIndex].position, + onComplete: () { + game.foundations[suitIndex].acquireCard(this); + }, + ); + } + } else if (pile is StockPile) { + game.stock.onTapUp(event); + } + } +``` + +If a card is ready to go out, just tap on it and it will move automatically to the correct +Foundation Pile for its suit. This saves a load of dragging-and-dropping when you are close to +winning the game! There is nothing new in the above code, except that if you tap the top card of +the Stock Pile, the `Card` object receives the tap first and forwards it on to the `stock` object. + + +## A graphics glitch + +If you moved multiple cards from one Tableau Pile to another, the internal code of the `TableauPile` +class would formerly (in Tutorial Step 4) move the cards into place abruptly, as soon as the +drag-and-drop ended. In the new code (Step 5), drags and drops use essentially the same code as +before, so it is tempting to get that code to do a multi-card move as a series of animated moves +each completing with an `acquireCard` call. But this caused some ugly graphics glitches. It +appears they were due to `acquireCard` also calling the `layoutCards()` method of `TableauPile` and +instantly re-arranging all the cards in the pile, every time a card was acquired. The problem has +been solved (with some difficulty as it turned out), by adding a `dropCards` method to +`TableauPile`, which mimics some of the existing actions while dovetailing some card animations +in as well. + +The lesson to be learned is that it is worth giving some attention to animation and time-dependent +concerns at Game Design time. When was that? Back in Klondike Tutorial Step 1 Preparation and +Step 2 Scaffolding. + + +## Winning the game + +You win the game when all cards in all suits, Ace to King, have been moved to the Foundation Piles, +13 cards in each pile. The game now has code to recognize that event — an `isFull` test added to +the `FoundationPile`'s `acquireCard()` method, a callback to `KlondikeWorld` and a test as +to whether all four Foundations are full. Here is the code: + +```dart +class FoundationPile extends PositionComponent implements Pile { + FoundationPile(int intSuit, this.checkWin, {super.position}) + : suit = Suit.fromInt(intSuit), + super(size: KlondikeGame.cardSize); + + final VoidCallback checkWin; + + final Suit suit; + final List _cards = []; + + //#region Pile API + + bool get isFull => _cards.length == 13; +``` + +```dart + void acquireCard(Card card) { + assert(card.isFaceUp); + card.position = position; + card.priority = _cards.length; + card.pile = this; + _cards.add(card); + if (isFull) { + checkWin(); // Get KlondikeWorld to check all FoundationPiles. + } + } +``` + +```dart + void checkWin() + { + var nComplete = 0; + for (final f in foundations) { + if (f.isFull) { + nComplete++; + } + } + if (nComplete == foundations.length) { + letsCelebrate(); + } + } +``` + +It is often possible to calculate whether you can win from a given position of the cards in a +Klondike game, or could have won but missed a vital move. It is frequently possible to calculate +whether the initial deal is winnable: a percentage of Klondike deals are not. But all that is far +beyond the scope of this Tutorial, so for now it is up to the player to work out whether to keep +playing and try to win — or give up and press one of the buttons. + + +## Ending a game and re-starting it + +A game ends either after the player wins or they press and release one of the buttons. At that +point the KlondikeGame class must hold all the data needed to start a new game, namely an `Action` +value, a `klondikeDraw` value (1 or 3) and a `seed` from the previous game. Each button has an +`onReleased:` callback provided by the `addButton()` method in KlondikeWorld, with code as follows: + +```dart + onReleased: () { + if (action == Action.haveFun) { + // Shortcut to the "win" sequence, for Tutorial purposes only. + letsCelebrate(); + } else { + // Restart with a new deal or the same deal as before. + game.action = action; + game.world = KlondikeWorld(); + } + }, +``` + +The `letsCelebrate()` method is normally invoked only when the player wins. The functions of the +other three buttons are to set the `Action` value in KlondikeGame and to set `world` in `FlameGame` +to refer to a new KlondikeWorld, thus replacing the current one and leaving the former +KlondikeWorld's storage to be disposed of by Garbage Collect. `FlameGame` will continue on to +trigger KlondikeWorld's `onLoad()` method. + +The `letsCelebrate()` method ends with similar code, but forces a new deal: + +```dart + game.action = Action.newDeal; + game.world = KlondikeWorld(); +``` + + +## The `Have fun` button + +When you win the Klondike Game, the `letsCelebrate()` method puts on a little display. To save you +having to play and win a whole game before you see it — **and** to test the method, we have +provided the `Have fun` button. Of course a real game could not have such a button... + +Well, this is it! The game is now more playable. + +We could do more, but this game **is** a Tutorial above all else. Press the buttons below to see +what the final code looks like, or to play it live. + +But it is also time to have a look at the Ember Tutorial! + +```{flutter-app} +:sources: ../tutorials/klondike/app +:page: step5 +:show: popup code +``` diff --git a/docs/1.18.0/_sources/tutorials/platformer/platformer.md.txt b/docs/1.18.0/_sources/tutorials/platformer/platformer.md.txt new file mode 100644 index 000000000..1f038e4fb --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/platformer/platformer.md.txt @@ -0,0 +1,22 @@ +# Ember Quest Game Tutorial + +In this tutorial, we will follow a step-by-step process for coding a game using the Flame +engine. + +This tutorial assumes that you have at least some familiarity with common programming concepts, and +with the [Dart] programming language. + + +[Dart]: https://dart.dev/overview + +```{toctree} +:hidden: + +1. Preparation +2. Start Coding +3. Building the World +4. Adding the Remaining Components +5. Controlling Movement +6. Adding the HUD +7. Adding Menus +``` diff --git a/docs/1.18.0/_sources/tutorials/platformer/step_1.md.txt b/docs/1.18.0/_sources/tutorials/platformer/step_1.md.txt new file mode 100644 index 000000000..10eee6161 --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/platformer/step_1.md.txt @@ -0,0 +1,105 @@ +# 1. Preparation + +Before you begin any kind of game project, you need an idea of what you want to make and I like to +then give it a **name**. For this tutorial and game, Ember will be on a quest to gather as many +(GitHub) stars as possible and I will call the game, `Ember Quest`. + +Now it is time to get started, but first you need to go to the [bare flame game +tutorial](../bare_flame_game.md) and complete the necessary setup steps. When you come back, you +should already have the `main.dart` file with the following content: + +```dart +import 'package:flame/game.dart'; +import 'package:flutter/widgets.dart'; + +void main() { + final game = FlameGame(); + runApp(GameWidget(game: game)); +} +``` + + +## Planning + +Like in the [klondike](../klondike/klondike.md) tutorial, starting a new game can feel overwhelming. +I like to first decide what platform I am trying to target. Will this be a mobile game, a desktop +game, or maybe a web game, with Flutter and Flame, these are all possible. For this game though, I +am going to focus on a web game. This means my users will interact with the game using their +keyboards. + +Starting with a simple sketch (it doesn't have to be perfect as mine is very rough) is +the best way to get an understanding of what will need to be accomplished. For the sketch below, +we know we will need the following: + +- Player Class +- Enemy Class +- Star Class +- Platform Class +- Ground Class +- HUD Class (health and stars collected) + +![Sketch of Ember Quest](../../images/tutorials/platformer/ember_quest_sketch.png) + +All of these will be brought together in `EmberQuestGame` derived from `FlameGame`. + + +## Assets + +Every game needs assets. Assets are images, sprites, animations, sounds, etc. Now, I am not an +artist, but because I am basing this game on Ember, the flame mascot, and Ember is already designed, +it sets the tone that this will be a pixel art game. There are numerous sites available that +provide free pixel art that can be used in games, but please check and comply with the licensing and +always provide valid creator attribution. For this game though, I am going to take a chance and +make my artwork using an online pixel art tool. If you decide to use this tool, multiple online +tutorials will assist you with the basic operations as well as exporting the assets. Now normally, +most games will utilize sprite sheets. These combine many images into one larger image that can be +sectioned and used as individual images. For this tutorial though, I specifically will save the +images individually as I want to demonstrate the Flame engine's caching abilities. Ember and the +water enemy are sprite sheets though as they contain multiple images to create animations. + +Right-click the images below, choose "Save as...", and store them in the `assets/images` folder of the +project. At this point our project's structure looks like this: + +```text +emberquest/ + ├─assets/ + │ └─images/ + │ ├─block.png + │ ├─ember.png + │ ├─ground.png + │ ├─heart_half.png + │ ├─heart.png + │ ├─star.png + │ └─water_enemy.png + ├─lib/ + │ └─main.dart + └─pubspec.yaml +``` + +![Platform Block](app/assets/images/block.png) +![Ember Animation](app/assets/images/ember.png) +![Ground Block](app/assets/images/ground.png) +![HUD Heart Half Opacity](app/assets/images/heart_half.png) +![HUD Heart Full Opacity](app/assets/images/heart.png) +![Star](app/assets/images/star.png) +![Water Enemy Animation](app/assets/images/water_enemy.png) + +```{note} +You may ask, why are the images different sizes? + +As I was using the online tool to make the assets, I had trouble getting the +detail I desired for the game in a 16x16 block. The heart worked out in 32x32 +and the ground as well as the star were 64x64. Regardless, the asset size does +not matter for the game as we will resize as needed. +``` + +Also, you need to tell Flutter about these images (just having them inside the `assets` folder is +not enough). To do this, let's add the following lines into the `pubspec.yaml` file: + +```yaml +flutter: + assets: + - assets/images/ +``` + +Alright, enough with preparing -- onward to coding! diff --git a/docs/1.18.0/_sources/tutorials/platformer/step_2.md.txt b/docs/1.18.0/_sources/tutorials/platformer/step_2.md.txt new file mode 100644 index 000000000..14a57d62d --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/platformer/step_2.md.txt @@ -0,0 +1,207 @@ +# 2. Start Coding + + +## The Plan + +Now that we have the assets loaded and a very rough idea of what classes we will need, we need to +start thinking about how we will implement this game and our goals. To do this, let's break down +what the game should do: + +- Ember should be able to be controlled to move left, right, and jump. +- The level will be infinite, so we need a way to randomly load sections of the level. +- The objective is to collect stars while avoiding enemies. +- Enemies cannot be killed as you need to use the platforms to avoid them. +- If Ember is hit by an enemy, it should reduce Ember's health by 1. +- Ember should have 3 lives to lose. +- There should be pits that if Ember falls into, it is automatically game over. +- There should be a main menu and a game-over screen that lets the player start over. + +Now that this is planned out, I know you are probably as excited as I am to begin and I just want to +see Ember on the screen. So let's do that first. + +```{note} +Why did I choose to make this game an infinite side scrolling platformer? + +Well, I wanted to be able to showcase random level loading. No two game plays +will be the same. This exact setup can easily be adapted to be a traditional +level game. As you make your way through this tutorial, you will see how we +could modify the level code to have an end. I will add a note in that section +to explain the appropriate mechanics. +``` + + +## Loading Assets + +For Ember to be displayed, we will need to load the assets. This can be done in `main.dart`, but by +so doing, we will quickly clutter the file. To keep our game organized, we should create files that +have a single focus. So let's create a file in the `lib` folder called `ember_quest.dart`. In that +file, we will add: + +```dart +import 'package:flame/game.dart'; + +class EmberQuestGame extends FlameGame { + EmberQuestGame(); + + @override + Future onLoad() async { + await images.loadAll([ + 'block.png', + 'ember.png', + 'ground.png', + 'heart_half.png', + 'heart.png', + 'star.png', + 'water_enemy.png', + ]); + + } +} +``` + +As I mentioned in the [assets](step_1.md#assets) section, we are using multiple individual image +files and for performance reasons, we should leverage Flame's built-in caching system which will +only load the files once, but allow us to access them as many times as needed without an impact to +the game. `await images.loadAll()` takes a list of the file names that are found in `assets/images` +and loads them to cache. + + +## Scaffolding + +So now that we have our game file, let's prepare the `main.dart` file to receive our newly created +`FlameGame`. Change your entire `main.dart` file to the following: + +```dart +import 'package:flame/game.dart'; +import 'package:flutter/material.dart'; + +import 'ember_quest.dart'; + +void main() { + runApp( + const GameWidget.controlled( + gameFactory: EmberQuestGame.new, + ), + ); +} +``` + +You can run this file and you should just have a blank screen now. Let's get Ember loaded! + + +## CameraComponent and World + +To move around in the world we are going the use the built-in `CameraComponent` and `World` that +exists on the `FlameGame` class. +We are going to add all our components to the `world` and follow the player with the `camera`. + +```dart +import 'package:flame/components.dart'; +import 'package:flame/game.dart'; + +class EmberQuestGame extends FlameGame { + @override + Future onLoad() async { + await images.loadAll([ + 'block.png', + 'ember.png', + 'ground.png', + 'heart_half.png', + 'heart.png', + 'star.png', + 'water_enemy.png', + ]); + + // Everything in this tutorial assumes that the position + // of the `CameraComponent`s viewfinder (where the camera is looking) + // is in the top left corner, that's why we set the anchor here. + camera.viewfinder.anchor = Anchor.topLeft; + } +} +``` + + +## Ember Time + +Keeping your game files organized can always be a challenge. I like to keep things logically +organized by how they will be involved in my game. So for Ember, let's create the following folder, +`lib/actors` and in that folder, create `ember.dart`. In that file, add the following code: + +```dart +import 'package:flame/components.dart'; + +import '../ember_quest.dart'; + +class EmberPlayer extends SpriteAnimationComponent + with HasGameReference { + EmberPlayer({ + required super.position, + }) : super(size: Vector2.all(64), anchor: Anchor.center); + + @override + void onLoad() { + animation = SpriteAnimation.fromFrameData( + game.images.fromCache('ember.png'), + SpriteAnimationData.sequenced( + amount: 4, + textureSize: Vector2.all(16), + stepTime: 0.12, + ), + ); + } +} +``` + +This file uses the `HasGameRef` mixin which allows us to reach back to `ember_quest.dart` and +leverage any of the variables or methods that are defined in the game class. You can see this in +use with the line `game.images.fromCache('ember.png')`. Earlier, we loaded all the files into +cache, so to use that file now, we call `fromCache` so it can be leveraged by the `SpriteAnimation`. +The `EmberPlayer` class is extending a `SpriteAnimationComponent` which allows us to define +animation as well as position it accordingly in our game world. When we construct this class, the +default size of `Vector2.all(64)` is defined as the size of Ember in our game world should be 64x64. +You may notice that in the animation `SpriteAnimationData`, the `textureSize` is defined as +`Vector2.all(16)` or 16x16. This is because the individual frame in our `ember.png` is 16x16 and +there are 4 frames in total. To define the speed of the animation, `stepTime` is used and set at +`0.12` seconds per frame. You can change the `stepTime` to any length that makes the animation seem +correct for your game vision. + +Now before you rush to run the game again, we have to add Ember to the game world. To do this, go +back to `ember_quest.dart` and add the following: + +```dart +import 'package:flame/game.dart'; + +import 'actors/ember.dart'; + +class EmberQuestGame extends FlameGame { + late EmberPlayer _ember; + + @override + Future onLoad() async { + await images.loadAll([ + 'block.png', + 'ember.png', + 'ground.png', + 'heart_half.png', + 'heart.png', + 'star.png', + 'water_enemy.png', + ]); + + camera.viewfinder.anchor = Anchor.topLeft; + + _ember = EmberPlayer( + position: Vector2(128, canvasSize.y - 70), + ); + world.add(_ember); + } +} +``` + +Run your game now and you should now see Ember flickering in the lower left-hand corner. + + +## Building Blocks + +Now that we have Ember showing on screen and we know our basic environment is all working correctly, +it's time to create a world for Embers Quest! Proceed on to [](step_3.md)! diff --git a/docs/1.18.0/_sources/tutorials/platformer/step_3.md.txt b/docs/1.18.0/_sources/tutorials/platformer/step_3.md.txt new file mode 100644 index 000000000..bcf9190e7 --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/platformer/step_3.md.txt @@ -0,0 +1,455 @@ +# 3. Building the World + + +## Creating Segments + +For this world to be infinite, the best way to approach this is to create segments that can be +reloaded over and over. To do this, we need a rough sketch of what our level segments will look +like. I have created the following sketch to show what the segments would look like and how they can +be repeated: + +![Level Segment Sketch](../../images/tutorials/platformer/LevelSegmentSketch.jpg) + +Each segment is a 10x10 grid and each block is 64 pixels x 64 pixels. This means Ember Quest has a +height of 640 with an infinite width. In my design, there must always be a ground +block at the beginning and the end. Additionally, there must be at least 3 ground blocks that come +before an enemy, including if the segment wraps to another segment. This is because the plan is to +have the enemies traverse back and forth for 3 blocks. Now that we have a plan for the segments, +let's create a segment manager class. + + +### Segment Manager + +To get started, we have to understand that we will be referencing our blocks in the segment manager, +so first create a new folder called `lib/objects`. In that folder, create 3 files called +`ground_block.dart`, `platform_block.dart`, and `star.dart`. Those files just need basic +boilerplate code for the class, so create the following in their respective files: + +```dart +class GroundBlock {} + +class PlatformBlock {} + +class Star {} +``` + +Also, create `water_enemy.dart` in the `lib/actors` folder using this boilerplate code: + +```dart +class WaterEnemy {} +``` + +Now we can create a file called `segment_manager.dart` which will be placed in a new folder called +`lib/managers`. The segment manager is the heart and soul, if you will, of Ember Quest. This is +where you can get as creative as you want. You do not have to follow my design, just remember that +whatever you design, the segment must follow the rules outlined above. Add the following code to +`segment_manager.dart`: + +```dart +class Block { + // gridPosition position is always segment based X,Y. + // 0,0 is the bottom left corner. + // 10,10 is the upper right corner. + final Vector2 gridPosition; + final Type blockType; + Block(this.gridPosition, this.blockType); +} + +final segments = [ + segment0, +]; + +final segment0 = [ + +]; +``` + +So what this does, is allows us to create segments (segment0, segment1, etc) in a list format that +gets added to the `segments` list. The individual segments will be made up of multiple entries of the +`Block` class. This information will allow us to translate the block position from a 10x10 grid to +the actual pixel position in the game world. To create a segment, you need to create +entries for each block that you wish to be rendered from the sketch. + +To understand each segment, if we start in the bottom left corner of the grid in the sketch, we see +that we should place a `Block()` in the `segment0` list with a first parameter `gridPosition` of a +`Vector2(0,0)` and a `blockType` of the `GroundBlock` class that we created earlier. Remember, the +very bottom left cell is x=0 and y=0 thus the `Vector2(x,y)` is `Vector2(0,0)`. + +![Segment 0 Sketch](../../images/tutorials/platformer/Segment0Sketch.jpg) + +The full segment would look like this: + +```dart +final segment0 = [ + Block(Vector2(0, 0), GroundBlock), + Block(Vector2(1, 0), GroundBlock), + Block(Vector2(2, 0), GroundBlock), + Block(Vector2(3, 0), GroundBlock), + Block(Vector2(4, 0), GroundBlock), + Block(Vector2(5, 0), GroundBlock), + Block(Vector2(5, 1), WaterEnemy), + Block(Vector2(5, 3), PlatformBlock), + Block(Vector2(6, 0), GroundBlock), + Block(Vector2(6, 3), PlatformBlock), + Block(Vector2(7, 0), GroundBlock), + Block(Vector2(7, 3), PlatformBlock), + Block(Vector2(8, 0), GroundBlock), + Block(Vector2(8, 3), PlatformBlock), + Block(Vector2(9, 0), GroundBlock), +]; +``` + +Proceed to build the remaining segments. The full segment manager should look like this: + +```dart +import 'package:flame/components.dart'; + +import '../actors/water_enemy.dart'; +import '../objects/ground_block.dart'; +import '../objects/platform_block.dart'; +import '../objects/star.dart'; + +class Block { + // gridPosition position is always segment based X,Y. + // 0,0 is the bottom left corner. + // 10,10 is the upper right corner. + final Vector2 gridPosition; + final Type blockType; + Block(this.gridPosition, this.blockType); +} + +final segments = [ + segment0, + segment1, + segment2, + segment3, + segment4, +]; + +final segment0 = [ + Block(Vector2(0, 0), GroundBlock), + Block(Vector2(1, 0), GroundBlock), + Block(Vector2(2, 0), GroundBlock), + Block(Vector2(3, 0), GroundBlock), + Block(Vector2(4, 0), GroundBlock), + Block(Vector2(5, 0), GroundBlock), + Block(Vector2(5, 1), WaterEnemy), + Block(Vector2(5, 3), PlatformBlock), + Block(Vector2(6, 0), GroundBlock), + Block(Vector2(6, 3), PlatformBlock), + Block(Vector2(7, 0), GroundBlock), + Block(Vector2(7, 3), PlatformBlock), + Block(Vector2(8, 0), GroundBlock), + Block(Vector2(8, 3), PlatformBlock), + Block(Vector2(9, 0), GroundBlock), +]; + +final segment1 = [ + Block(Vector2(0, 0), GroundBlock), + Block(Vector2(1, 0), GroundBlock), + Block(Vector2(1, 1), PlatformBlock), + Block(Vector2(1, 2), PlatformBlock), + Block(Vector2(1, 3), PlatformBlock), + Block(Vector2(2, 6), PlatformBlock), + Block(Vector2(3, 6), PlatformBlock), + Block(Vector2(6, 5), PlatformBlock), + Block(Vector2(7, 5), PlatformBlock), + Block(Vector2(7, 7), Star), + Block(Vector2(8, 0), GroundBlock), + Block(Vector2(8, 1), PlatformBlock), + Block(Vector2(8, 5), PlatformBlock), + Block(Vector2(8, 6), WaterEnemy), + Block(Vector2(9, 0), GroundBlock), +]; + +final segment2 = [ + Block(Vector2(0, 0), GroundBlock), + Block(Vector2(1, 0), GroundBlock), + Block(Vector2(2, 0), GroundBlock), + Block(Vector2(3, 0), GroundBlock), + Block(Vector2(3, 3), PlatformBlock), + Block(Vector2(4, 0), GroundBlock), + Block(Vector2(4, 3), PlatformBlock), + Block(Vector2(5, 0), GroundBlock), + Block(Vector2(5, 3), PlatformBlock), + Block(Vector2(5, 4), WaterEnemy), + Block(Vector2(6, 0), GroundBlock), + Block(Vector2(6, 3), PlatformBlock), + Block(Vector2(6, 4), PlatformBlock), + Block(Vector2(6, 5), PlatformBlock), + Block(Vector2(6, 7), Star), + Block(Vector2(7, 0), GroundBlock), + Block(Vector2(8, 0), GroundBlock), + Block(Vector2(9, 0), GroundBlock), +]; + +final segment3 = [ + Block(Vector2(0, 0), GroundBlock), + Block(Vector2(1, 0), GroundBlock), + Block(Vector2(1, 1), WaterEnemy), + Block(Vector2(2, 0), GroundBlock), + Block(Vector2(2, 1), PlatformBlock), + Block(Vector2(2, 2), PlatformBlock), + Block(Vector2(4, 4), PlatformBlock), + Block(Vector2(6, 6), PlatformBlock), + Block(Vector2(7, 0), GroundBlock), + Block(Vector2(7, 1), PlatformBlock), + Block(Vector2(8, 0), GroundBlock), + Block(Vector2(8, 8), Star), + Block(Vector2(9, 0), GroundBlock), +]; + +final segment4 = [ + Block(Vector2(0, 0), GroundBlock), + Block(Vector2(1, 0), GroundBlock), + Block(Vector2(2, 0), GroundBlock), + Block(Vector2(2, 3), PlatformBlock), + Block(Vector2(3, 0), GroundBlock), + Block(Vector2(3, 1), WaterEnemy), + Block(Vector2(3, 3), PlatformBlock), + Block(Vector2(4, 0), GroundBlock), + Block(Vector2(5, 0), GroundBlock), + Block(Vector2(5, 5), PlatformBlock), + Block(Vector2(6, 0), GroundBlock), + Block(Vector2(6, 5), PlatformBlock), + Block(Vector2(6, 7), Star), + Block(Vector2(7, 0), GroundBlock), + Block(Vector2(8, 0), GroundBlock), + Block(Vector2(8, 3), PlatformBlock), + Block(Vector2(9, 0), GroundBlock), + Block(Vector2(9, 1), WaterEnemy), + Block(Vector2(9, 3), PlatformBlock), +]; +``` + + +### Loading the Segments into the World + +Now that our segments are defined, we need to create a way to load these blocks into our world. To +do that, we are going to start work in the `ember_quest.dart` file. We will create a `loadSegments` +method that when given an index for the segments list, will then loop through that segment from +our `segment_manager` and we will add the appropriate blocks later. It should look like this: + +```dart +void loadGameSegments(int segmentIndex, double xPositionOffset) { + for (final block in segments[segmentIndex]) { + switch (block.blockType) { + case GroundBlock: + case PlatformBlock: + case Star: + case WaterEnemy: + } + } + } +``` + +You will need to add the following imports if they were not auto-imported: + +```dart +import 'actors/water_enemy.dart'; +import 'managers/segment_manager.dart'; +import 'objects/ground_block.dart'; +import 'objects/platform_block.dart'; +import 'objects/star.dart'; +``` + +Now we can refactor our game a bit and create an `initializeGame()` method which will call our +`loadGameSegments` method. + +```dart + void initializeGame() { + // Assume that size.x < 3200 + final segmentsToLoad = (size.x / 640).ceil(); + segmentsToLoad.clamp(0, segments.length); + + for (var i = 0; i <= segmentsToLoad; i++) { + loadGameSegments(i, (640 * i).toDouble()); + } + + _ember = EmberPlayer( + position: Vector2(128, canvasSize.y - 70), + ); + world.add(_ember); + } +``` + +We simply are taking the width of the game screen, divide that by 640 (10 blocks in a segment times +64 pixels wide for each block), and round that up. As we only defined 5 segments total, we need to +restrict that integer from 0 to the length of the segments list in case the user has a really wide +screen. Then we simply loop through the number of `segmentsToLoad` and call `loadGameSegments` with +the integer to load and then calculate the offset. + +Additionally, I have moved the Ember-related code from the `onLoad` method to our new +`initializeGame` method. This means I can now make the call in `onLoad` to `initializeGame` such +as: + +```dart +@override + Future onLoad() async { + await images.loadAll([ + 'block.png', + 'ember.png', + 'ground.png', + 'heart_half.png', + 'heart.png', + 'star.png', + 'water_enemy.png', + ]); + + camera.viewfinder.anchor = Anchor.topLeft; + initializeGame(); + } +``` + +At this point, you probably have errors for all the object classes and the enemy class, but don't +worry, we will solve those right now. + + +### The Platform Block + +One of the easiest blocks to start with is the Platform Block. There are two things that we need to +develop beyond getting the sprite to be displayed; that is, we need to place it in the correct +position and as Ember moves across the screen, we need to remove the blocks once they are off the +screen. In Ember Quest, the player can only move forward, so this will keep the game lightweight as +it's an infinite level. + +Open the `lib/objects/platform_block.dart` file and add the following code: + +```dart +import 'package:flame/collisions.dart'; +import 'package:flame/components.dart'; + +import '../ember_quest.dart'; + +class PlatformBlock extends SpriteComponent + with HasGameReference { + final Vector2 gridPosition; + double xOffset; + + PlatformBlock({ + required this.gridPosition, + required this.xOffset, + }) : super(size: Vector2.all(64), anchor: Anchor.bottomLeft); + + @override + void onLoad() { + } + + @override + void update(double dt) { + super.update(dt); + } +} +``` + +We are going to extend the Flame `SpriteComponent` and we will need the `HasGameRef` mixin to access +our game class just like we did before. We are starting with the empty `onLoad` and `update` +methods and we will begin adding code to create the functionality that is necessary for the game. + +The secret to any gaming engine is the game loop. This is an infinite loop that calls all the +objects in your game so you can provide updates. The `update` method is the hook into this and it +uses a `double dt` to pass to your method the amount of time in seconds since it was last +called. This `dt` variable then allows you to calculate how far your component needs to move +on-screen. + +All components in our game will need to move at the same speed, so to do this, open +`lib/ember_quest.dart`, and let's define a global variable called `objectSpeed`. At the top of the +`EmberQuestGame` class, add: + +```dart + late EmberPlayer _ember; + double objectSpeed = 0.0; +``` + +So to implement that movement, declare a variable at the top of the `PlatformBlock` class and make +your `update` method look like this: + +```dart +final Vector2 velocity = Vector2.zero(); +``` + +```dart + @override + void update(double dt) { + velocity.x = game.objectSpeed; + position += velocity * dt; + if (position.x < -size.x) removeFromParent(); + super.update(dt); + } +``` + +All that is happening is we define a base `velocity` that is instantiated at 0 on both axes and then +we update `velocity` using the global `objectSpeed` variable for the x-axis. As this is our +platform block, it will only scroll left and right, so our y-axis in the `velocity` will always be 0 +as do not want our blocks jumping. + +Next, we update the `position` which is a special variable built into the Flame engine components. +By multiplying the `velocity` vector by the `dt` we can move our component to the required amount. + +Finally, if `x` value of position is `-size.x` (this means off the left side of the screen by the +width of the image) then remove this platform block from the game entirely. + +Now we just need to finish the `onLoad` method. So make your `onLoad` method look like this: + +```dart + @override + void onLoad() { + final platformImage = game.images.fromCache('block.png'); + sprite = Sprite(platformImage); + position = Vector2((gridPosition.x * size.x) + xOffset, + game.size.y - (gridPosition.y * size.y), + ); + add(RectangleHitbox(collisionType: CollisionType.passive)); + } +``` + +First, we retrieve the image from cache as we did before, and because this is a `SpriteComponent` +we can use the built-in `sprite` variable to assign the image to the component. Next, we need to +calculate its starting position. This is where all the magic happens, so let's break this down. + +Just like in the `update` method we will be setting the `position` variable to a `Vector2`. To +determine where it needs to be, we need to calculate the x and y positions. Focusing on the x +first, we can see that we are taking `gridPosition.x` times the width of the image and then we will +add that to the `xOffset` that we pass in. With the y-axis, we will take the height of the +game and we will subtract the `gridPosition.y` times the height of the image. + +Lastly, as we want Ember to be able to interact with the platform, we will add a `RectangleHitbox` +with a `passive` `CollisionType`. Collisions will be explained more in a later chapter. + + +#### Display the Platform + +In our `loadGameSegments` method from earlier, we will need to add the call to add our block. We +will need to define `gridPosition` and `xOffset` to be passed in. `gridPosition` will be a +`Vector2` and `xOffset` is a double as that will be used to calculate the x-axis offset for +the block in a `Vector2`. So add the following to your `loadGameSegments` method: + +```dart +case PlatformBlock: + add(PlatformBlock( + gridPosition: block.gridPosition, + xOffset: xPositionOffset, + )); +``` + +If you run your code, you should now see: + +![Platforms Displayed](../../images/tutorials/platformer/Step3Platforms.jpg) + +While this does run, the black just makes it look like Ember is in a dungeon. Let's change that +background real quick so there is a nice blue sky. Just add the following code to +`lib/ember_quest.dart`: + +```dart +import 'package:flutter/material.dart'; + +@override +Color backgroundColor() { + return const Color.fromARGB(255, 173, 223, 247); +} +``` + +Excellent! Ember is now in front of a blue sky. + +On to [](step_4.md), where we will add the rest of the components now that we have a basic +understanding of what we are going to accomplish. diff --git a/docs/1.18.0/_sources/tutorials/platformer/step_4.md.txt b/docs/1.18.0/_sources/tutorials/platformer/step_4.md.txt new file mode 100644 index 000000000..e84f72f21 --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/platformer/step_4.md.txt @@ -0,0 +1,406 @@ +# 4. Adding the Remaining Components + + +## Star + +The star is pretty simple. It is just like the Platform block except we are going to add an effect +to make it pulse in size. For the effect to look correct, we need to change the object's `Anchor` +to `center`. This means we will need to adjust the position by half of the image size. For brevity, +I am going to add the whole class and explain the additional changes after. + +```dart +import 'package:flame/collisions.dart'; +import 'package:flame/components.dart'; +import 'package:flame/effects.dart'; +import 'package:flutter/material.dart'; + +import '../ember_quest.dart'; + +class Star extends SpriteComponent + with HasGameReference { + final Vector2 gridPosition; + double xOffset; + + final Vector2 velocity = Vector2.zero(); + + Star({ + required this.gridPosition, + required this.xOffset, + }) : super(size: Vector2.all(64), anchor: Anchor.center); + + @override + void onLoad() { + final starImage = game.images.fromCache('star.png'); + sprite = Sprite(starImage); + position = Vector2( + (gridPosition.x * size.x) + xOffset + (size.x / 2), + game.size.y - (gridPosition.y * size.y) - (size.y / 2), + ); + add(RectangleHitbox(collisionType: CollisionType.passive)); + add( + SizeEffect.by( + Vector2(-24, -24), + EffectController( + duration: .75, + reverseDuration: .5, + infinite: true, + curve: Curves.easeOut, + ), + ), + ); + } + + @override + void update(double dt) { + velocity.x = game.objectSpeed; + position += velocity * dt; + if (position.x < -size.x) removeFromParent(); + super.update(dt); + } +} +``` + +So the only change between the Star and the Platform beyond the anchor is simply the following: + +```dart +add( + SizeEffect.by( + Vector2(-24, -24), + EffectController( + duration: .75, + reverseDuration: .5, + infinite: true, + curve: Curves.easeOut, + ), + ), +); +``` + +The `SizeEffect` is best explained by going to their +[docs](../../flame/effects.md#sizeeffectby). In short, we simply reduce the size of the star +by -24 pixels in both directions and we make it pulse infinitely using the `EffectController`. + +Don't forget to add the star to your `lib/ember_quest.dart` file by doing: + +```dart +case Star: + world.add( + Star( + gridPosition: block.gridPosition, + xOffset: xPositionOffset, + ), + ); +``` + +If you run your game, you should now see pulsating stars! + + +## Water Enemy + +Now that we understand adding effects to our objects, let's do the same for the water drop enemy. +Open `lib/actors/water_enemy.dart` and add the following code: + +```dart +import 'package:flame/collisions.dart'; +import 'package:flame/components.dart'; +import 'package:flame/effects.dart'; + +import '../ember_quest.dart'; + +class WaterEnemy extends SpriteAnimationComponent + with HasGameReference { + final Vector2 gridPosition; + double xOffset; + + final Vector2 velocity = Vector2.zero(); + + WaterEnemy({ + required this.gridPosition, + required this.xOffset, + }) : super(size: Vector2.all(64), anchor: Anchor.bottomLeft); + + @override + void onLoad() { + animation = SpriteAnimation.fromFrameData( + game.images.fromCache('water_enemy.png'), + SpriteAnimationData.sequenced( + amount: 2, + textureSize: Vector2.all(16), + stepTime: 0.70, + ), + ); + position = Vector2( + (gridPosition.x * size.x) + xOffset, + game.size.y - (gridPosition.y * size.y), + ); + add(RectangleHitbox(collisionType: CollisionType.passive)); + add( + MoveEffect.by( + Vector2(-2 * size.x, 0), + EffectController( + duration: 3, + alternate: true, + infinite: true, + ), + ), + ); + } + + @override + void update(double dt) { + velocity.x = game.objectSpeed; + position += velocity * dt; + if (position.x < -size.x) removeFromParent(); + super.update(dt); + } +} + +``` + +The water drop enemy is an animation just like Ember, so this class is extending the +`SpriteAnimationComponent` class but it uses all of the previous code we have used for the Star and +the Platform. The only difference will be instead of the `SizeEffect`, we are going to use the +`MoveEffect`. The best resource for information will be their [help +docs](../../flame/effects.md#sizeeffectby). + +In short, the `MoveEffect` will last for 3 seconds, alternate directions, and run infinitely. It +will move our enemy to the left, 128 pixels (-2 x image width). + +Don't forget to add the water enemy to your `lib/ember_quest.dart` file by doing: + +```dart +case WaterEnemy: + world.add( + WaterEnemy( + gridPosition: block.gridPosition, + xOffset: xPositionOffset, + ), + ); +``` + +If you run the game now, the Water Enemy should be displayed and moving! + +![Water Enemies](../../images/tutorials/platformer/Step4Enemies.jpg) + + +## Ground Blocks + +Finally, the last component that needs to be displayed is the Ground Block! This component is more +complex than the others as we need to identify two times during a block's life cycle. + +- When the block is added, if it is the last block in the segment, we need to update a global value + as to its position. +- When the block is removed, if it was the first block in the segment, we need to randomly get the + next segment to load. + +So let's start with the basic class which is nothing more than a copy of the Platform Block. + +```dart +import 'package:flame/collisions.dart'; +import 'package:flame/components.dart'; +import 'package:flutter/material.dart'; + +import '../ember_quest.dart'; + +class GroundBlock extends SpriteComponent with HasGameReference { + final Vector2 gridPosition; + double xOffset; + + final Vector2 velocity = Vector2.zero(); + + GroundBlock({ + required this.gridPosition, + required this.xOffset, + }) : super(size: Vector2.all(64), anchor: Anchor.bottomLeft); + + @override + void onLoad() { + final groundImage = game.images.fromCache('ground.png'); + sprite = Sprite(groundImage); + position = Vector2( + gridPosition.x * size.x + xOffset, + game.size.y - gridPosition.y * size.y, + ); + add(RectangleHitbox(collisionType: CollisionType.passive)); + } + + @override + void update(double dt) { + velocity.x = game.objectSpeed; + position += velocity * dt; + super.update(dt); + } +} +``` + +The first thing we will tackle is registering the block globally if it is the absolute last block to +be loaded. To do this, add two new global variables in `lib/ember_quest.dart` called: + +```dart + late double lastBlockXPosition = 0.0; + late UniqueKey lastBlockKey; +``` + +Declare the following variable at the top of your Ground Block class: + +```dart +final UniqueKey _blockKey = UniqueKey(); +``` + +Now in your Ground Block's `onLoad` method, add the following at the end of the method: + +```dart +if (gridPosition.x == 9 && position.x > game.lastBlockXPosition) { + game.lastBlockKey = _blockKey; + game.lastBlockXPosition = position.x + size.x; +} +``` + +All that is happening is if this block is the 10th block (9 as the segment grid is 0 based) AND +this block's position is greater than the global `lastBlockXPosition`, set the global block key to be +this block's key and set the global `lastBlockXPosition` to be this blocks position plus the width of +the image (the anchor is bottom left and we want the next block to align right next to it). + +Now we can address updating this information, so in the `update` method, add the following code: + +```dart + @override + void update(double dt) { + velocity.x = game.objectSpeed; + position += velocity * dt; + + if (gridPosition.x == 9) { + if (game.lastBlockKey == _blockKey) { + game.lastBlockXPosition = position.x + size.x - 10; + } + } + + super.update(dt); + } +``` + +`game.lastBlockXPosition` is being updated by the block's current x-axis position plus its width - +10 pixels. This will cause a little overlap, but due to the potential variance in `dt` this +prevents gaps in the map as it loads while a player is moving. + + +### Loading the Next Random Segment + +To load the next random segment, we will use the `Random()` function that is built-in to +`dart:math`. The following line of code gets a random integer from 0 (inclusive) to the max number +in the passed parameter (exclusive). + +```dart +Random().nextInt(segments.length), +``` + +Back in our Ground Block, we can now add the following to our 'update' method before +the other block we just added: + +```dart +if (position.x < -size.x) { + removeFromParent(); + if (gridPosition.x == 0) { + game.loadGameSegments( + Random().nextInt(segments.length), + game.lastBlockXPosition, + ); + } +} +``` + +This simply extends the code that we have in our other objects, where once the block is off the +screen and if the block is the first block of the segment, we will call the `loadGameSegments` +method in our game class, get a random number between 0 and the number of segments and pass in the +offset. If `Random()` or `segments.length` does not auto-import, you will need: + +```dart +import 'dart:math'; + +import '../managers/segment_manager.dart'; +``` + +So our full Ground Block class should look like this: + +```dart +import 'dart:math'; + +import 'package:flame/collisions.dart'; +import 'package:flame/components.dart'; +import 'package:flutter/material.dart'; + +import '../ember_quest.dart'; +import '../managers/segment_manager.dart'; + +class GroundBlock extends SpriteComponent with HasGameReference { + final Vector2 gridPosition; + double xOffset; + + final UniqueKey _blockKey = UniqueKey(); + final Vector2 velocity = Vector2.zero(); + + GroundBlock({ + required this.gridPosition, + required this.xOffset, + }) : super(size: Vector2.all(64), anchor: Anchor.bottomLeft); + + @override + void onLoad() { + final groundImage = game.images.fromCache('ground.png'); + sprite = Sprite(groundImage); + position = Vector2( + gridPosition.x * size.x + xOffset, + game.size.y - gridPosition.y * size.y, + ); + add(RectangleHitbox(collisionType: CollisionType.passive)); + if (gridPosition.x == 9 && position.x > game.lastBlockXPosition) { + game.lastBlockKey = _blockKey; + game.lastBlockXPosition = position.x + size.x; + } + } + + @override + void update(double dt) { + velocity.x = game.objectSpeed; + position += velocity * dt; + + if (position.x < -size.x) { + removeFromParent(); + if (gridPosition.x == 0) { + game.loadGameSegments( + Random().nextInt(segments.length), + game.lastBlockXPosition, + ); + } + } + if (gridPosition.x == 9) { + if (game.lastBlockKey == _blockKey) { + game.lastBlockXPosition = position.x + size.x - 10; + } + } + + super.update(dt); + } +} + +``` + +Finally, don't forget to add your Ground Block to `lib/ember_quest.dart` by adding the following: + +```dart +case GroundBlock: + world.add( + GroundBlock( + gridPosition: block.gridPosition, + xOffset: xPositionOffset, + ), + ); +``` + +If you run your code, your game should now look like this: + +![Ground Blocks](../../images/tutorials/platformer/Step4Ground.jpg) + +You might say, but wait! Ember is in the middle of the ground and that is correct because Ember's +`Anchor` is set to center. This is ok and we will be addressing this in [](step_5.md) where we will +be adding movement and collisions to Ember! diff --git a/docs/1.18.0/_sources/tutorials/platformer/step_5.md.txt b/docs/1.18.0/_sources/tutorials/platformer/step_5.md.txt new file mode 100644 index 000000000..0ed638157 --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/platformer/step_5.md.txt @@ -0,0 +1,330 @@ +# 5. Controlling Movement + +If you were waiting for some serious coding, this chapter is it. Prepare yourself as we dive in! + + +## Keyboard Controls + +The first step will be to allow control of Ember via the keyboard. We need to start by adding the +appropriate mixins to the game class and Ember. Add the following: + +`lib/ember_quest.dart` + +```dart +import 'package:flame/events.dart'; + +class EmberQuestGame extends FlameGame with HasKeyboardHandlerComponents { +``` + +`lib/actors/ember.dart` + +```dart +class EmberPlayer extends SpriteAnimationComponent + with KeyboardHandler, HasGameReference { +``` + +Now we can add a new method: + +```dart + @override + bool onKeyEvent(KeyEvent event, Set keysPressed) { + return true; + } +``` + +Like before, if this did not trigger an auto-import, you will need the following: + +```dart +import 'package:flutter/services.dart'; +``` + +To control Ember's movement, it is easiest to set a variable where we think of the direction of +movement like a normalized vector, meaning the value will be restricted to -1, 0, or 1. So let's +set a variable at the top of the class: + +```dart + int horizontalDirection = 0; +``` + +Now in our `onKeyEvent` method, we can register the key pressed by adding: + +```dart +@override + bool onKeyEvent(KeyEvent event, Set keysPressed) { + horizontalDirection = 0; + horizontalDirection += (keysPressed.contains(LogicalKeyboardKey.keyA) || + keysPressed.contains(LogicalKeyboardKey.arrowLeft)) + ? -1 + : 0; + horizontalDirection += (keysPressed.contains(LogicalKeyboardKey.keyD) || + keysPressed.contains(LogicalKeyboardKey.arrowRight)) + ? 1 + : 0; + + return true; + } +``` + +Let's make Ember move by adding a few lines of code and creating our `update` method. First, we +need to define a velocity variable for Ember. Add the following at the top of the `EmberPlayer` +class: + +```dart +final Vector2 velocity = Vector2.zero(); +final double moveSpeed = 200; +``` + +This establishes a base velocity of 0 and stores `moveSpeed` so we can adjust as necessary to suit +how the game-play should be. Next, add the `update` method with the following: + + +```dart + @override + void update(double dt) { + velocity.x = horizontalDirection * moveSpeed; + position += velocity * dt; + super.update(dt); + } +``` + +If you run the game now, Ember moves left and right using the arrow keys or the `A` and `D` keys. +You may have noticed that Ember doesn't look back if you are going left, to fix that, add the +following code at the end of your `update` method: + +```dart +if (horizontalDirection < 0 && scale.x > 0) { + flipHorizontally(); +} else if (horizontalDirection > 0 && scale.x < 0) { + flipHorizontally(); +} +``` + +Now Ember looks in the direction they are traveling. + + +## Collisions + +It is time to get into the thick of it with collisions. I highly suggest reading the +[documentation](../../flame/collision_detection.md) to understand how collisions work in Flame. The +first thing we need to do is make the game aware that collisions are going to occur using the +`HasCollisionDetection` mixin. Add that to `lib/ember_quest.dart` like: + +```dart +class EmberQuestGame extends FlameGame + with HasCollisionDetection, HasKeyboardHandlerComponents { +``` + +Next, add the `CollisionCallbacks` mixin to `lib/actors/ember.dart` like: + +```dart +class EmberPlayer extends SpriteAnimationComponent + with KeyboardHandler, CollisionCallbacks, HasGameReference { +``` + +If it did not auto-import, you will need the following: + +```dart +import 'package:flame/collisions.dart'; +``` + +Now add the following `onCollision` method: + +```dart +@override +void onCollision(Set intersectionPoints, PositionComponent other) { + if (other is GroundBlock || other is PlatformBlock) { + if (intersectionPoints.length == 2) { + // Calculate the collision normal and separation distance. + final mid = (intersectionPoints.elementAt(0) + + intersectionPoints.elementAt(1)) / 2; + + final collisionNormal = absoluteCenter - mid; + final separationDistance = (size.x / 2) - collisionNormal.length; + collisionNormal.normalize(); + + // If collision normal is almost upwards, + // ember must be on ground. + if (fromAbove.dot(collisionNormal) > 0.9) { + isOnGround = true; + } + + // Resolve collision by moving ember along + // collision normal by separation distance. + position += collisionNormal.scaled(separationDistance); + } + } + + super.onCollision(intersectionPoints, other); +} +``` + +You will need to import the following: + +```dart +import '../objects/ground_block.dart'; +import '../objects/platform_block.dart'; +``` + +As well as create these class variables: + +```dart + final Vector2 fromAbove = Vector2(0, -1); + bool isOnGround = false; +``` + +For the collisions to be activated for Ember, we need to add a `CircleHitbox`, so in the `onLoad` +method, add the following: + +```dart +add(CircleHitbox()); +``` + +Now that we have the basic collisions created, we can add gravity so Ember exists in a game world +with very basic physics. To do that, we need to create some more variables: + +```dart + final double gravity = 15; + final double jumpSpeed = 600; + final double terminalVelocity = 150; + + bool hasJumped = false; +``` + +Now we can add Ember's ability to jump by adding the following to our `onKeyEvent` method: + +```dart +hasJumped = keysPressed.contains(LogicalKeyboardKey.space); +``` + +Finally, in our `update` method we can tie this all together with: + +```dart +// Apply basic gravity +velocity.y += gravity; + +// Determine if ember has jumped +if (hasJumped) { + if (isOnGround) { + velocity.y = -jumpSpeed; + isOnGround = false; + } + hasJumped = false; +} + +// Prevent ember from jumping to crazy fast as well as descending too fast and +// crashing through the ground or a platform. +velocity.y = velocity.y.clamp(-jumpSpeed, terminalVelocity); +``` + +Earlier I mentioned that Ember was in the center of the grass, to solve this and show how collisions +and gravity work with Ember, I like to add a little drop-in when you start the game. So in +`lib/ember_quest.dart` in the `initializeGame` method, change the following: + +```dart +_ember = EmberPlayer( + position: Vector2(128, canvasSize.y - 128), +); +``` + +If you run the game now, Ember should be created and fall to the ground; then you can jump around! + + +### Collisions with Objects + +Adding the collisions with the other objects is fairly trivial. All we need to do is add the +following to the bottom of the `onCollision` method: + +```dart +if (other is Star) { + other.removeFromParent(); +} + +if (other is WaterEnemy) { + hit(); +} +``` + +When Ember collides with a star, the game will remove the star, and to implement the `hit` method for +when Ember collides with an enemy, we need to do the following: + +Add the following variable at the top of the `EmberPlayer` class: + +```dart +bool hitByEnemy = false; +``` + +Additionally, add this method to the `EmberPlayer` class: + +```dart +// This method runs an opacity effect on ember +// to make it blink. +void hit() { + if (!hitByEnemy) { + hitByEnemy = true; + } + add( + OpacityEffect.fadeOut( + EffectController( + alternate: true, + duration: 0.1, + repeatCount: 6, + ), + )..onComplete = () { + hitByEnemy = false; + }, + ); +} +``` + +If the auto-imports did not occur, you will need to add the following imports to your file: + +```dart +import 'package:flame/effects.dart'; + +import '../objects/star.dart'; +import 'water_enemy.dart'; +``` + +If you run the game now, you should be able to move around, make stars disappear, and if you +collide with an enemy, Ember should blink. + + +## Adding the Scrolling + +This is our last task with Ember. We need to restrict Ember's movement because as of now, Ember can +go off-screen and we never move the map. So to implement this feature, we simply need to add the +following to the end of our `update` method: + +```dart +game.objectSpeed = 0; +// Prevent ember from going backwards at screen edge. +if (position.x - 36 <= 0 && horizontalDirection < 0) { + velocity.x = 0; +} +// Prevent ember from going beyond half screen. +if (position.x + 64 >= game.size.x / 2 && horizontalDirection > 0) { + velocity.x = 0; + game.objectSpeed = -moveSpeed; +} + +position += velocity * dt; +super.update(dt); +``` + +If you run the game now, Ember can't move off-screen to the left, and as Ember moves to the right, +once they get to the middle of the screen, the rest of the objects scroll by. This is because we +are now updating `game.objectSpeed` which we established early on in the series. Additionally, +you will see the next random segment be generated and added to the level based on the work we did in +Ground Block. + +```{note} +As I mentioned earlier, I would add a section on how this game could be adapted +to a traditional level game. As we built the segments in [](step_3.md), we +could add a segment that has a door or a special block. For every `X` number of +segments loaded, we could then add that special segment. When Ember reaches that +object, we could reload the level and start all over maintaining the stars +collected and health. +``` + +We are almost done! In [](step_6.md), we will add the health system, keep track of +the score, and provide a HUD to relay that information to the player. diff --git a/docs/1.18.0/_sources/tutorials/platformer/step_6.md.txt b/docs/1.18.0/_sources/tutorials/platformer/step_6.md.txt new file mode 100644 index 000000000..80619051e --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/platformer/step_6.md.txt @@ -0,0 +1,205 @@ +# 6. Adding the HUD + + +## Setting up the HUD + +Now that the game is up and running, the rest of the code should come fairly easily. To prepare for +the hud, we need to add some variables in `lib/ember_quest.dart`. Add the following to the top of +the class: + +```dart +int starsCollected = 0; +int health = 3; +``` + +Start by creating a folder called `lib/overlays`, and in that folder, create a component called +`heart.dart`. This is going to be the health monitoring component in the upper left-hand corner of +the game. Add the following code: + +```dart +import 'package:ember_quest/ember_quest.dart'; +import 'package:flame/components.dart'; + +enum HeartState { + available, + unavailable, +} + +class HeartHealthComponent extends SpriteGroupComponent + with HasGameReference { + final int heartNumber; + + HeartHealthComponent({ + required this.heartNumber, + required super.position, + required super.size, + super.scale, + super.angle, + super.anchor, + super.priority, + }); + + @override + Future onLoad() async { + await super.onLoad(); + final availableSprite = await game.loadSprite( + 'heart.png', + srcSize: Vector2.all(32), + ); + + final unavailableSprite = await game.loadSprite( + 'heart_half.png', + srcSize: Vector2.all(32), + ); + + sprites = { + HeartState.available: availableSprite, + HeartState.unavailable: unavailableSprite, + }; + + current = HeartState.available; + } + + @override + void update(double dt) { + if (game.health < heartNumber) { + current = HeartState.unavailable; + } else { + current = HeartState.available; + } + super.update(dt); + } +} + +``` + +The `HeartHealthComponent` is just a [SpriteGroupComponent](../../flame/components.md#spritegroup) +that uses the heart images that were created early on. The unique thing that is being done, is when +the component is created, it requires a `heartNumber`, so in the `update` method, we check to see if +the `game.health` is less than the `heartNumber` and if so, change the state of the component to +unavailable. + +To put this all together, create `hud.dart` in the same folder and add the following code: + +```dart +import 'package:flame/components.dart'; +import 'package:flutter/material.dart'; + +import '../ember_quest.dart'; +import 'heart.dart'; + +class Hud extends PositionComponent with HasGameReference { + Hud({ + super.position, + super.size, + super.scale, + super.angle, + super.anchor, + super.children, + super.priority = 5, + }); + + late TextComponent _scoreTextComponent; + + @override + Future onLoad() async { + _scoreTextComponent = TextComponent( + text: '${game.starsCollected}', + textRenderer: TextPaint( + style: const TextStyle( + fontSize: 32, + color: Color.fromRGBO(10, 10, 10, 1), + ), + ), + anchor: Anchor.center, + position: Vector2(game.size.x - 60, 20), + ); + add(_scoreTextComponent); + + final starSprite = await game.loadSprite('star.png'); + add( + SpriteComponent( + sprite: starSprite, + position: Vector2(game.size.x - 100, 20), + size: Vector2.all(32), + anchor: Anchor.center, + ), + ); + + for (var i = 1; i <= game.health; i++) { + final positionX = 40 * i; + await add( + HeartHealthComponent( + heartNumber: i, + position: Vector2(positionX.toDouble(), 20), + size: Vector2.all(32), + ), + ); + } + } + + @override + void update(double dt) { + _scoreTextComponent.text = '${game.starsCollected}'; + } +} + +``` + +In the `onLoad` method, you can see where we loop from 1 to the `game.health` amount, to create +the number of hearts necessary. The last step is to add the hud to the game. + +Go to `lib/ember_quest.dart` and add the following code in the `initializeGame` method: + +```dart +camera.viewport.add(Hud()); +``` + +If the auto-import did not occur, you will need to add: + +```dart +import 'overlays/hud.dart'; +``` + +If you run the game now, you should see: + +![HUD Loaded](../../images/tutorials/platformer/Step6HUD.jpg) + + +## Updating the HUD Data + +The last thing we need to do before closing out the HUD is to update the data. To do this, we need +to open `lib/actors/ember.dart` and add the following code: + +`onCollision` + +```dart +if (other is Star) { + other.removeFromParent(); + game.starsCollected++; +} +``` + +```dart +void hit() { + if (!hitByEnemy) { + game.health--; + hitByEnemy = true; + } + add( + OpacityEffect.fadeOut( + EffectController( + alternate: true, + duration: 0.1, + repeatCount: 5, + ), + )..onComplete = () { + hitByEnemy = false; + }, + ); +} +``` + +If you run the game now, you will see that your health is updated and the stars are incremented as +appropriate. Finally, in [](step_7), we will finish the game by adding the main menu and the +game-over menu. diff --git a/docs/1.18.0/_sources/tutorials/platformer/step_7.md.txt b/docs/1.18.0/_sources/tutorials/platformer/step_7.md.txt new file mode 100644 index 000000000..05299395b --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/platformer/step_7.md.txt @@ -0,0 +1,325 @@ +# 7. Adding Menus + +To add menus to the game, we will leverage Flame's built-in +[overlay](../../flame/overlays.md) system. + + +## Main Menu + +In the `lib/overlays` folder, create `main_menu.dart` and add the following code: + +```dart +import 'package:flutter/material.dart'; + +import '../ember_quest.dart'; + +class MainMenu extends StatelessWidget { + // Reference to parent game. + final EmberQuestGame game; + + const MainMenu({super.key, required this.game}); + + @override + Widget build(BuildContext context) { + const blackTextColor = Color.fromRGBO(0, 0, 0, 1.0); + const whiteTextColor = Color.fromRGBO(255, 255, 255, 1.0); + + return Material( + color: Colors.transparent, + child: Center( + child: Container( + padding: const EdgeInsets.all(10.0), + height: 250, + width: 300, + decoration: const BoxDecoration( + color: blackTextColor, + borderRadius: const BorderRadius.all( + Radius.circular(20), + ), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'Ember Quest', + style: TextStyle( + color: whiteTextColor, + fontSize: 24, + ), + ), + const SizedBox(height: 40), + SizedBox( + width: 200, + height: 75, + child: ElevatedButton( + onPressed: () { + game.overlays.remove('MainMenu'); + }, + style: ElevatedButton.styleFrom( + backgroundColor: whiteTextColor, + ), + child: const Text( + 'Play', + style: TextStyle( + fontSize: 40.0, + color: blackTextColor, + ), + ), + ), + ), + const SizedBox(height: 20), + const Text( +'''Use WASD or Arrow Keys for movement. +Space bar to jump. +Collect as many stars as you can and avoid enemies!''', + textAlign: TextAlign.center, + style: TextStyle( + color: whiteTextColor, + fontSize: 14, + ), + ), + ], + ), + ), + ), + ); + } +} + +``` + +This is a pretty self-explanatory file that just uses standard Flutter widgets to display +information and provide a `Play` button. The only Flame-related line is +`game.overlays.remove('MainMenu');` which simply removes the overlay so the user can play the +game. It should be noted that the user can technically move Ember while this is displayed, but +trapping the input is outside the scope of this tutorial as there are multiple ways this can be +accomplished. + + +## Game Over Menu + +Next, create a file called `lib/overlays/game_over.dart` and add the following code: + +```dart +import 'package:flutter/material.dart'; + +import '../ember_quest.dart'; + +class GameOver extends StatelessWidget { + // Reference to parent game. + final EmberQuestGame game; + const GameOver({super.key, required this.game}); + + @override + Widget build(BuildContext context) { + const blackTextColor = Color.fromRGBO(0, 0, 0, 1.0); + const whiteTextColor = Color.fromRGBO(255, 255, 255, 1.0); + + return Material( + color: Colors.transparent, + child: Center( + child: Container( + padding: const EdgeInsets.all(10.0), + height: 200, + width: 300, + decoration: const BoxDecoration( + color: blackTextColor, + borderRadius: const BorderRadius.all( + Radius.circular(20), + ), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'Game Over', + style: TextStyle( + color: whiteTextColor, + fontSize: 24, + ), + ), + const SizedBox(height: 40), + SizedBox( + width: 200, + height: 75, + child: ElevatedButton( + onPressed: () { + game.reset(); + game.overlays.remove('GameOver'); + }, + style: ElevatedButton.styleFrom( + backgroundColor: whiteTextColor, + ), + child: const Text( + 'Play Again', + style: TextStyle( + fontSize: 28.0, + color: blackTextColor, + ), + ), + ), + ), + ], + ), + ), + ), + ); + } +} +``` + +As with the Main Menu, this is all standard Flutter widgets except for the call to remove the +overlay and also the call to `game.reset()` which we will create now. + +Open `lib/ember_quest.dart` and add / update the following code: + +```dart +@override +Future onLoad() async { + await images.loadAll([ + 'block.png', + 'ember.png', + 'ground.png', + 'heart_half.png', + 'heart.png', + 'star.png', + 'water_enemy.png', + ]); + + camera.viewfinder.anchor = Anchor.topLeft; + initializeGame(true); +} + +void initializeGame(bool loadHud) { + // Assume that size.x < 3200 + final segmentsToLoad = (size.x / 640).ceil(); + segmentsToLoad.clamp(0, segments.length); + + for (var i = 0; i <= segmentsToLoad; i++) { + loadGameSegments(i, (640 * i).toDouble()); + } + + _ember = EmberPlayer( + position: Vector2(128, canvasSize.y - 128), + ); + add(_ember); + if (loadHud) { + add(Hud()); + } +} + +void reset() { + starsCollected = 0; + health = 3; + initializeGame(false); +} +``` + +You may notice that we have added a parameter to the `initializeGame` method which allows us to +bypass adding the HUD to the game. This is because in the coming section, when Ember's health drops +to 0, we will wipe the game, but we do not need to remove the HUD, as we just simply need to reset +the values using `reset()`. + + +## Displaying the Menus + +To display the menus, add the following code to `lib/main.dart`: + +```dart +void main() { + runApp( + GameWidget.controlled( + gameFactory: EmberQuestGame.new, + overlayBuilderMap: { + 'MainMenu': (_, game) => MainMenu(game: game), + 'GameOver': (_, game) => GameOver(game: game), + }, + initialActiveOverlays: const ['MainMenu'], + ), + ); +} +``` + +If the menus did not auto-import, add the following: + +```dart +import 'overlays/game_over.dart'; +import 'overlays/main_menu.dart'; +``` + +If you run the game now, you should be greeted with the Main Menu overlay. Pressing play will +remove it and allow you to start playing the game. + + +### Health Check for Game Over + +Our last step to finish Ember Quest is to add a game-over mechanism. This is fairly simple but +requires us to place similar code in all of our components. So let's get started! + +In `lib/actors/ember.dart`, in the `update` method, add the following: + +```dart +// If ember fell in pit, then game over. +if (position.y > game.size.y + size.y) { + game.health = 0; +} + +if (game.health <= 0) { + removeFromParent(); +} +``` + +In `lib/actors/water_enemy.dart`, in the `update` method update the following code: + +```dart +if (position.x < -size.x || game.health <= 0) { + removeFromParent(); +} +``` + +In `lib/objects/ground_block.dart`, in the `update` method update the following code: + +```dart +if (game.health <= 0) { + removeFromParent(); +} +``` + +In `lib/objects/platform_block.dart`, in the `update` method update the following code: + +```dart +if (position.x < -size.x || game.health <= 0) { + removeFromParent(); +} +``` + +In `lib/objects/star.dart`, in the `update` method update the following code: + +```dart +if (position.x < -size.x || game.health <= 0) { + removeFromParent(); +} +``` + +Finally, in `lib/ember_quest.dart`, add the following `update` method: + +```dart +@override +void update(double dt) { + if (health <= 0) { + overlays.add('GameOver'); + } + super.update(dt); +} +``` + + +## Congratulations + +You made it! You have a working Ember Quest. Press the button below to see what the resulting code +looks like or to play it live. + +```{flutter-app} +:sources: ../tutorials/platformer/app +:show: popup code +``` diff --git a/docs/1.18.0/_sources/tutorials/space_shooter/space_shooter.md.txt b/docs/1.18.0/_sources/tutorials/space_shooter/space_shooter.md.txt new file mode 100644 index 000000000..010ecd9af --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/space_shooter/space_shooter.md.txt @@ -0,0 +1,21 @@ +# Space Shooter Game Tutorial + +In this tutorial, we will follow a step-by-step process for coding a game using the Flame +engine. + +This tutorial assumes that you have at least some familiarity with common programming concepts, and +with the [Dart] programming language. + + +[Dart]: https://dart.dev/overview + +```{toctree} +:hidden: + +1. Getting Started +2. Controlling the player and adding some graphics +3. Adding animations and depth +4. Adding Bullets +5. Adding Enemies +6. Enemy and Bullet collisions +``` diff --git a/docs/1.18.0/_sources/tutorials/space_shooter/step_1.md.txt b/docs/1.18.0/_sources/tutorials/space_shooter/step_1.md.txt new file mode 100644 index 000000000..a438e947f --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/space_shooter/step_1.md.txt @@ -0,0 +1,91 @@ +# Getting Started + +This tutorial will guide you on the development of a full Flame game, starting from the ground up, +step by step. By the end of it, you will have built a classic Space Shooter game, featuring +animations, input using gestures, mouse and keyboard controls, collision detections, and so on. + +This first part will introduce you to: + +- `FlameGame`: The base class for games using the Flame Component System. +- `GameWidget`: The `Widget` that will insert your game into the Flutter widget tree. +- `PositionComponent`: One of the most basic Flame components holds both a position and +dimension in the game space. + +Let's start by creating our game class and the `GameWidget` that will run it. + +```dart +import 'package:flutter/material.dart'; +import 'package:flame/game.dart'; + +class SpaceShooterGame extends FlameGame { +} + +void main() { + runApp(GameWidget(game: SpaceShooterGame())); +} +``` + +That is it! If you run this, you will only see an empty black screen for now, from that, we can +start implementing our game. + +Next, let's create our player component. To do so, we will create a new class based on Flame's +`PositionComponent`. This component is the base for all components that have a position and a size +on the game screen. For now, our component will only render a white square; it could be +implemented as follows: + +```dart +import 'package:flame/components.dart'; + +class Player extends PositionComponent { + static final _paint = Paint()..color = Colors.white; + + @override + void render(Canvas canvas) { + canvas.drawRect(size.toRect(), _paint); + } +} +``` + +Now, let's add our new component to the game. Adding any component on game startup should be done +in the `onLoad` method, so let's override `FlameGame.onLoad` and add our logic there. The modified +code will look like the following: + +```dart +class SpaceShooterGame extends FlameGame { + @override + Future onLoad() async { + await super.onLoad(); + + add( + Player() + ..position = size / 2 + ..width = 50 + ..height = 100 + ..anchor = Anchor.center, + ); + } +} +``` + +If you run this, you will now see a white rectangle being rendered in the center of the screen. + +A couple of points worth commenting: + +- `size` is a `Vector2` variable from the game class and it holds the current dimension of the game +area, where `x` is the horizontal dimension or the width, and `y` is the vertical dimension or the +height. +- By default, Flame follows Flutter's canvas anchoring, which means that (0, 0) is anchored on the +top left corner of the canvas. So the game and all components use that same anchor by default. We +can change this by changing our component's `anchor` attribute to `Anchor.center`, which will make +our life way easier if you want to center the component on the screen. + +And that is it for this first part! In this first step, we learned the basics of how to create a +game class, insert it into the Flutter widget tree, and render a simple component. + +```{flutter-app} +:sources: ../tutorials/space_shooter/app +:page: step1 +:show: popup code +``` + +[Next step: Controlling the player and adding some graphics](./step_2.md) diff --git a/docs/1.18.0/_sources/tutorials/space_shooter/step_2.md.txt b/docs/1.18.0/_sources/tutorials/space_shooter/step_2.md.txt new file mode 100644 index 000000000..bffa1527f --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/space_shooter/step_2.md.txt @@ -0,0 +1,198 @@ +# Controlling the player and adding some graphics + +Now that we have the base for our game and a component for our player, let's add some interactivity +to it. We can begin by allowing the player to be controlled by mouse/touch gestures. + +There are a couple of ways of doing that in Flame. For this tutorial, we will do that by using one +of Flame's gesture detectors: `PanDetector`. + +This detector will make our game class receive pan (or drag) events. To do so, we just need to add +the `PanDetector` mixin to our game class and override its listener methods; in our case, we will +use the `onPanUpdate` method. The updated code will look like the following: + +```dart +import 'package:flame/input.dart'; + +class SpaceShooterGame extends FlameGame with PanDetector { + late Player player; + + @override + void onLoad() { + // omitted + } + + @override + void onPanUpdate(DragUpdateInfo info) { + } +} + +``` + +At this point, our game should be receiving all the pan update inputs, but we are not doing anything +with these events. + +We now need a way to move our player. That can be achieved by simply saving our `Player` component +to a variable inside our game class, adding a method `move` to our `Player`, and just connect +them: + +```dart +class Player extends PositionComponent { + static final _paint = Paint()..color = Colors.white; + + @override + void render(Canvas canvas) { + canvas.drawRect(size.toRect(), _paint); + } + + void move(Vector2 delta) { + position.add(delta); + } +} + +class SpaceShooterGame extends FlameGame with PanDetector { + late Player player; + + @override + Future onLoad() async { + await super.onLoad(); + + player = Player() + ..position = size / 2 + ..width = 50 + ..height = 100 + ..anchor = Anchor.center; + + add(player); + } + + @override + void onPanUpdate(DragUpdateInfo info) { + player.move(info.delta.game); + } +} +``` + +That is it! If you drag the screen, the player should follow your movement and we have just +implemented our very first interactive game! + +Before we move to our next step, let's replace that boring white rectangle with some cool graphics. + +Flame provides many classes to help us with graphical rendering. For this step, we are going to use +the `Sprite` class. + +`Sprite`s are used in Flame to render static images or portions of them in the game. To render a +`Sprite` inside a `FlameGame`, we should use the `SpriteComponent` class, which wraps the `Sprite` +features into a component. + +So let's refactor our current implementation, first, we can replace our inheritance from +`PositionComponent` to `SpriteComponent` (which is a component that extends from +`PositionComponent`) and load the sprite: + +```dart +class Player extends SpriteComponent { + void move(Vector2 delta) { + position.add(delta); + } +} + +class SpaceShooterGame extends FlameGame with PanDetector { + late Player player; + + @override + Future? onLoad() async { + await super.onLoad(); + + final playerSprite = await loadSprite('player-sprite.png'); + player = Player() + ..sprite = playerSprite + ..x = size.x / 2 + ..y = size.y / 2 + ..width = 50 + ..height = 100 + ..anchor = Anchor.center; + + add(player); + } + + @override + void onPanUpdate(DragUpdateInfo info) { + player.move(info.delta.game); + } +} +``` + +And now, you should see a small blue spaceship on the screen! + +A couple of notes worth mentioning: + +- Unlike `PositionComponent`, `SpriteComponent` has an implementation for the `render` method, so we +can delete the previous override. +- `FlameGame` has a couple of methods for loading assets, like `loadSprite`. Those methods are +quite useful, because when used, `FlameGame` will take care of cleaning any cache when the game is +removed from the Flutter widget tree. + +Before we close this step, there is one small improvement that we can do. Right now, we are loading +the sprite and passing it to our component. For now, this may seem fine, but imagine a game with +a lot of components; if the game is responsible for loading assets for all components, our code can +become a mess quite fast. + +Just like `FlameGame`, components also have an `onLoad` method that can be overridden to do +initializations. But before we implement our player's load method, note that we use an attribute and +the `loadSprite` method from the `FlameGame` class. + +That is not a problem! Every time our component needs to access things from its game class, we can +mix our component with the `HasGameRef` mixin; that will add a new variable to our component called +`gameRef` which will point to the game instance where the component is running. Now, let's refactor +our game a little bit: + +```dart +class Player extends SpriteComponent with HasGameRef { + + Player() : super( + size: Vector2(100, 150), + anchor: Anchor.center, + ); + + @override + Future onLoad() async { + await super.onLoad(); + + sprite = await gameRef.loadSprite('player-sprite.png'); + + position = gameRef.size / 2; + } + + void move(Vector2 delta) { + position.add(delta); + } +} + +class SpaceShooterGame extends FlameGame with PanDetector { + late Player player; + + @override + Future onLoad() async { + await super.onLoad(); + + player = Player(); + + add(player); + } + + @override + void onPanUpdate(DragUpdateInfo info) { + player.move(info.delta.game); + } +} +``` + +If you run the game now, you will not notice any visual differences, but now we have a more scalable +structure for developing our game. And that closes this step! + +```{flutter-app} +:sources: ../tutorials/space_shooter/app +:page: step2 +:show: popup code +``` + +[Next step: Adding animations and depth](./step_3.md) diff --git a/docs/1.18.0/_sources/tutorials/space_shooter/step_3.md.txt b/docs/1.18.0/_sources/tutorials/space_shooter/step_3.md.txt new file mode 100644 index 000000000..b5b1a0403 --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/space_shooter/step_3.md.txt @@ -0,0 +1,139 @@ +# Adding animations and depth + +We now have something that looks more like a game, having graphics for our spaceship and being +able to directly control it. + +But our game so far is too boring, the starship is just a static sprite and the background is +just a black screen. + +In this step we will look at how to improve that, we will replace the static graphics of the player +with an animation and create a cool sense of depth and movement by adding a parallax to the +background of the game. + +So lets start by adding the animation to the player ship! For that, we will something that we +call Sprite Animations, which is an animation that is composed by a collection of sprites, each +one representing one frame, and the animation effect is achieved by rendering one sprite after +the other over a time frame. + +To better visualize this, this is the animation that we will be using, note how the image holds 4 +individual images (or frames). + +![](app/assets/images/player.png) + +Flame provides us with a specialized classes to deal with such images: `SpriteAnimation` and its component +wrapper `SpriteAnimationComponent` and changing our `Player` component to be an animation is quite +simple, take a look at how the component will look like now: + +```dart +class Player extends SpriteAnimationComponent + with HasGameReference { + + Player() : super( + size: Vector2(100, 150), + anchor: Anchor.center, + ); + + @override + Future onLoad() async { + await super.onLoad(); + + animation = await game.loadSpriteAnimation( + 'player.png', + SpriteAnimationData.sequenced( + amount: 4, + stepTime: .2, + textureSize: Vector2(32, 48), + ), + ); + + position = game.size / 2; + } + + // Other methods omitted +} +``` + +So lets break down the changes: + +- First we changed our `Player` component to extend from `SpriteAnimationComponent` instead of +`SpriteComponent` +- In the `onLoad` method we are now using the `game.loadSpriteAnimation` helper instead of the + `loadSprite` one, and setting the `animation` attribute with its returned value. + +The `SpriteAnimationData` class might look complicated at first glance, but it is actually quite +simple, note how we used the `sequenced` constructor, which is a helper to load animation images +where the frames are already laid down in the sequence that they will play, then: + +- `amount` defines how many frames the animation has, in this case `4` +- `stepTime` is the time in seconds that each frame will be rendered, before it gets replaced +with the next one. +- `textureSize` is the size in pixels which defines each frame of the image. + +With all of this information, the `SpriteAnimationComponent` will now automatically play the +animation! + +Now lets add some depth and energy to our game background. Of course there are many ways of +doing so, in this tutorial we will explore the idea of parallax scrolling. If you never heard +about it, it consist of a technique where background images move past the camera with different +speeds, this not only creates the sensation of depth but also improves the movement feeling +of the game a lot. If you want to read more about Parallax Scrolling, check this article +from [Wikipedia](https://en.wikipedia.org/wiki/Parallax_scrolling). + +Flame provides classes to implement parallax scrolling out of the box, these classes are `Parallax` and +`ParallaxComponent`, so lets take a look at how we can add that new feature to the game: + +```dart +class SpaceShooterGame extends FlameGame with PanDetector { + late Player player; + + @override + Future onLoad() async { + final parallax = await loadParallaxComponent( + [ + ParallaxImageData('stars_0.png'), + ParallaxImageData('stars_1.png'), + ParallaxImageData('stars_2.png'), + ], + baseVelocity: Vector2(0, -5), + repeat: ImageRepeat.repeat, + velocityMultiplierDelta: Vector2(0, 5), + ); + add(parallax); + + player = Player(); + add(player); + } + + @override + void onPanUpdate(DragUpdateInfo info) { + player.move(info.delta.global); + } +} +``` + +Looking at the code above we notice that we are now using the `loadParallaxComponent` helper +method from the `FlameGame` class to directly load a `ParallaxComponent` and add it to our game. + +The arguments used there are as follows: + +- The first argument is a positional one, which should be a list of `ParallaxData`s. There are a +couple of types of `ParallaxData`s in Flame, in this tutorial we are using the `ParallaxImageData` +which describes a layer in the parallax scrolling effect that is an `image`. This list will tell +Flame about all the layers that we want in our parallax. +- `baseVelocity` is the base value for all the values, so by passing a `Vector2(0, -5)` to it +means that the slower of the layers will move at 0 pixels per second on the `x` axis and `-5` +pixels per second on the `y` axis. +- Finally `velocityMultiplierDelta` is a vector that is applied to the base value for each layer, +and in our example the multiplication rate is `5` on only the `y` axis. + + +Give it a try by running the game now, you will notice that it looks way more dynamic now, giving a +more convincing feeling to the player that the spaceship is really crossing the stars! + +```{flutter-app} +:sources: ../tutorials/space_shooter/app +:page: step3 +:show: popup code +``` + +[Next step: Adding bullets](./step_4.md) diff --git a/docs/1.18.0/_sources/tutorials/space_shooter/step_4.md.txt b/docs/1.18.0/_sources/tutorials/space_shooter/step_4.md.txt new file mode 100644 index 000000000..849bb28ff --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/space_shooter/step_4.md.txt @@ -0,0 +1,205 @@ +# Adding bullets + +For this next step we will add a very important feature to any space shooter game, shooting! + +Here is how we will implement it: since we already control our space ship by dragging on the screen +with the mouse/fingers, we will make the ship auto shoot when the player starts dragging and +stop shooting when the gesture/input has ended. + +First, let's create a `Bullet` component that will represent the shots in the game. + +```dart +class Bullet extends SpriteAnimationComponent + with HasGameReference { + Bullet({ + super.position, + }) : super( + size: Vector2(25, 50), + anchor: Anchor.center, + ); + + @override + Future onLoad() async { + await super.onLoad(); + + animation = await game.loadSpriteAnimation( + 'bullet.png', + SpriteAnimationData.sequenced( + amount: 4, + stepTime: .2, + textureSize: Vector2(8, 16), + ), + ); + } +} +``` + +So far, this does not introduce any new concepts, we just created a component and set +up its animations attributes. + +The `Bullet` behavior is a simple one, it always moves towards the top of the screen and should +be removed from the game if it is not visible anymore, so let's add an `update` method to it +and make it happen: + +```dart +class Bullet extends SpriteAnimationComponent + with HasGameReference { + Bullet({ + super.position, + }) : super( + size: Vector2(25, 50), + anchor: Anchor.center, + ); + + @override + Future onLoad() async { + // Omitted + } + + @override + void update(double dt) { + super.update(dt); + + position.y += dt * -500; + + if (position.y < -height) { + removeFromParent(); + } + } +} +``` + +The above code should be straight forward, but lets break it down: + +- We add to the bullet's y axis position at a rate of -500 pixels per second. Remember going up +in the y axis means getting closer to `0` since the top left corner of the screen is `0, 0`. +- If the y is smaller than the negative value of the bullet's height, means that the component is +completely off the screen and it can be removed. + +Right, we now have a `Bullet` class ready, so lets start to implement the action of shooting. +First thing, let's create two empty methods in the `Player` class, `startShooting()` and +`stopShooting()`. + +```dart +class Player extends SpriteAnimationComponent + with HasGameReference { + + // Rest of implementation omitted + + void startShooting() { + // TODO + } + + void stopShooting() { + // TODO + } +} +``` + +And let's hook into those methods from the game class by using the `onPanStart()` +and `onPanEnd()` methods from the `PanDetector` mixin that we already have been using for the ship +movement: + +```dart +class SpaceShooterGame extends FlameGame with PanDetector { + late Player player; + + // Rest of implementation omitted + + @override + void onPanUpdate(DragUpdateInfo info) { + player.move(info.delta.global); + } + + @override + void onPanStart(DragStartInfo info) { + player.startShooting(); + } + + @override + void onPanEnd(DragEndInfo info) { + player.stopShooting(); + } +} +``` + +We now have everything set up, so let's write the shooting routine in our player class. + +Remember, the shooting behavior will be adding bullets through time intervals when the player is +dragging the starship. + +We could implement the time interval code and the spawning manually, but Flame +provides a component out of the box for that, the `SpawnComponent`, so let's take advantage of it: + + +```dart +class Player extends SpriteAnimationComponent + with HasGameReference { + late final SpawnComponent _bulletSpawner; + + @override + Future onLoad() async { + // Loading animation omitted + + _bulletSpawner = SpawnComponent( + period: .2, + selfPositioning: true, + factory: (index) { + return Bullet( + position: position + + Vector2( + 0, + -height / 2, + ), + ); + + return bullet; + }, + autoStart: false, + ); + + game.add(_bulletSpawner); + } + + void move(Vector2 delta) { + position.add(delta); + } + + void startShooting() { + _bulletSpawner.timer.start(); + } + + void stopShooting() { + _bulletSpawner.timer.stop(); + } +} +``` + +Hopefully the code above speaks for itself, but let's look at it in more detail: + +- First we declared a `SpawnComponent` called `_bulletSpawner` in our game class, we needed it +to be an variable accessible to the whole component since we will be accessing it in the +`startShooting` and `stopShooting` methods. +- We initialize our `_bulletSpawner` in the `onLoad` method. In the first argument, `period`, we set +how much time in seconds it will take between calls, and we choose `.2` seconds for now. +- We set `selfPositioning: true` so the spawn component doesn't try to position the created component +since we want to handle that ourselves to make the bullets spawn out of the ship. +- The `factory` attribute receives a function that will be called every time the `period` is +reached and return the created component. +- We set `autoStart: false` so it does not start by default. +- Finally we add the `_bulletSpawner` to our component, so it can be processed in the game loop. +- Note how the `_bulletSpawner` is added to the game instead of the player, since the bullets +are part of the whole game and not the player itself. + +With the `_bulletSpawner` all set up, the only missing piece now is starting the +`_bulletSpawner.timer` in `startShooting()` and stopping it in the `stopShooting()`! + +And that closes this step, putting us real close to a real game! + +```{flutter-app} +:sources: ../tutorials/space_shooter/app +:page: step4 +:show: popup code +``` + +[Next step: Adding Enemies](./step_5.md) diff --git a/docs/1.18.0/_sources/tutorials/space_shooter/step_5.md.txt b/docs/1.18.0/_sources/tutorials/space_shooter/step_5.md.txt new file mode 100644 index 000000000..0f4ea04e5 --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/space_shooter/step_5.md.txt @@ -0,0 +1,91 @@ +# Adding Enemies + +Now that the starship is able to shoot, we need something for the player to shoot at! So for +this step we will work on adding enemies to the game. + +First, let's create an `Enemy` class that will represent the enemies in game: + +```dart +class Enemy extends SpriteAnimationComponent + with HasGameReference { + + Enemy({ + super.position, + }) : super( + size: Vector2.all(enemySize), + anchor: Anchor.center, + ); + + + static const enemySize = 50.0; + + @override + Future onLoad() async { + await super.onLoad(); + + animation = await game.loadSpriteAnimation( + 'enemy.png', + SpriteAnimationData.sequenced( + amount: 4, + stepTime: .2, + textureSize: Vector2.all(16), + ), + ); + } + + @override + void update(double dt) { + super.update(dt); + + position.y += dt * 250; + + if (position.y > game.size.y) { + removeFromParent(); + } + } +} +``` + +Note that for now, the `Enemy` class is super similar to the `Bullet` one, the only differences are +their sizes, animation information and that bullets travel from bottom to top, while enemies travel from +top to bottom, so nothing new here. + +Next we need to make the enemies spawn in the game, the logic here will be simple: +we will make enemies spawn from the top of the screen at a random position on the `x` axis. + +Once again, we could manually add all the time based events in the game's `update()` method, maintain +a random instance to get the enemy x position and so on and so forth, but Flame provides us with a +way to avoid having to write all that by ourselves: we can use the `SpawnComponent`! So in the +`SpaceShooterGame.onLoad()` method let's add the following code: + +```dart + add( + SpawnComponent( + factory: (index) { + return Enemy(); + }, + period: 1, + area: Rectangle.fromLTWH(0, 0, size.x, -Enemy.enemySize), + ), + ); +``` + +The `SpawnComponent` will take a couple of arguments, let's review them as they appear in the code: + +- `factory` receives a function which has the index of the component that should be created. We +don't use the index in our code, but it is useful to create more advanced spawn routines. +This function should return the created component, in our case a new instance of `Enemy`. +- `period` simply define the interval in which a new component will be spawned. +- `area` defines the possible area where the components can be placed once created. In our case they +should be placed in the area above the screen top, so they can be seen as they are arriving into the +playable area. + +And this concludes this short step! + +```{flutter-app} +:sources: ../tutorials/space_shooter/app +:page: step5 +:show: popup code +``` + +[Next step: Collision Detection](./step_6.md) diff --git a/docs/1.18.0/_sources/tutorials/space_shooter/step_6.md.txt b/docs/1.18.0/_sources/tutorials/space_shooter/step_6.md.txt new file mode 100644 index 000000000..796cda6be --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/space_shooter/step_6.md.txt @@ -0,0 +1,170 @@ +# Enemies and Bullets collision + +Right, we are really close to a playable game, we have enemies and we have the ability to shoot bullets +at them! We now need to do something when a bullet hits an enemy. + +Flame provides a collision detection system out of the box, which we will use to implement our +logic when a bullet and an enemy come into contact. The result will be that both are removed! + +First we need to let our `FlameGame` know that we want collisions between components to +be checked. In order to do so, simply add the `HasCollisionDetection` mixin to the declaration +of the game class: + +```dart +class SpaceShooterGame extends FlameGame + with PanDetector, HasCollisionDetection { + // ... +} +``` + +With that, Flame now will start to check if components have collided with each other. Next we need to +identify which components can cause collisions. + +In our case those are the `Bullet` and `Enemy` components and we need to add hitboxes to them. + +A hitbox is nothing more than a defined part of the component's area that can hit +other objects. Flame offers a collection of classes to define a hitbox, the simplest of them is +the `RectangleHitbox`, which like the name implies, will set a rectangular area as the component's +hitbox. + +Hitboxes are also components, so we can simply add them to the components that we want to have hitboxes. +Let's start by adding the following line to the `Enemy` class: + +```dart +add(RectangleHitbox()); +``` + +For the bullet we will do the same, but with a slight difference: + +```dart +add( + RectangleHitbox( + collisionType: CollisionType.passive, + ), +); +``` + +The `collisionType`s are very important to understand, since they can directly impact the game +performance! + +There are three types of collisions in Flame: + +- `active` collides with other hitboxes of type active or passive +- `passive` collides with other hitboxes of type active +- `inactive` will not collide with any other hitbox + +Usually it is smart to mark `hitboxes` from components that will have a higher number of instances +as passive, so they will be taken into account for collision, but they themselves will not check +their own collisions, drastically reducing the number of checking, giving a better performance +to the game! + +And since in this game we anticipate that there will be more bullets than enemies, we set the +bullets to have a passive collision type! + +From this point on, Flame will take care of checking the collision between those two components and +we now need to do something when this occurs. + +We start by receiving the collision events in one of the classes. Since `Bullet`s have a +passive collision type, we will also add the collision checking logic to the `Enemy` class. + +To listen for collision events we need to add the `CollisionCallbacks` mixin to the component. +By doing so we will be able to override some methods like `onCollisionStart()` and `onCollisionEnd()`. + +So let's make a few changes to the `Enemy` class: + +```dart +class Enemy extends SpriteAnimationComponent + with HasGameReference, CollisionCallbacks { + + // Other methods omitted + + @override + void onCollisionStart( + Set intersectionPoints, + PositionComponent other, + ) { + super.onCollisionStart(intersectionPoints, other); + + if (other is Bullet) { + removeFromParent(); + other.removeFromParent(); + } + } +} +``` + +As you can see, we added the mixin to the class, overrode the `onCollisionStart` method, +where we check whether the component that collided with us was a `Bullet` and if it was, then +we remove both the current `Enemy` instance and the `Bullet`. + +If you run the game now you will finally be able to defeat the enemies crawling down the screen! + +To add some final touches, let's add some explosion animations to introduce more action to the game! + +First, let's create the explosion class: + +```dart +class Explosion extends SpriteAnimationComponent + with HasGameReference { + Explosion({ + super.position, + }) : super( + size: Vector2.all(150), + anchor: Anchor.center, + removeOnFinish: true, + ); + + + @override + Future onLoad() async { + await super.onLoad(); + + animation = await game.loadSpriteAnimation( + 'explosion.png', + SpriteAnimationData.sequenced( + amount: 6, + stepTime: .1, + textureSize: Vector2.all(32), + loop: false, + ), + ); + } +} +``` + +There is not much new in it, the biggest difference compared to the other animation components is +that we are passing `loop: false` in the `SpriteAnimationData.sequenced` constructor and that we are +setting `removeOnFinish: true;`. We do that so that when the animation is finished, it will +automatically be removed from the game! + +And finally, we make a small change in the `onCollisionStart()` method in the `Enemy` class +in order to add the explosion to the game: + +```dart + @override + void onCollisionStart( + Set intersectionPoints, + PositionComponent other, + ) { + super.onCollisionStart(intersectionPoints, other); + + if (other is Bullet) { + removeFromParent(); + other.removeFromParent(); + game.add(Explosion(position: position)); + } + } +``` + +And that is it! We finally have a game which provides all the minimum necessary elements for a space +shooter, from here you can use what you learned to build more features in the game like making +the player suffer damage if it clashes with an enemy, or make the enemies shoot back, or maybe +both? + +Good hunting pilot, and happy coding! + +```{flutter-app} +:sources: ../tutorials/space_shooter/app +:page: step6 +:show: popup code +``` diff --git a/docs/1.18.0/_sources/tutorials/tutorials.md.txt b/docs/1.18.0/_sources/tutorials/tutorials.md.txt new file mode 100644 index 000000000..bee3ae501 --- /dev/null +++ b/docs/1.18.0/_sources/tutorials/tutorials.md.txt @@ -0,0 +1,24 @@ +# Tutorials + +The following are tutorials that are maintained with every release of Flame. + +- [](bare_flame_game.md) -- this tutorial focuses on setting up your environment for making a new + Flame game. This "initial state" is assumed as a starting point for all other tutorials. + +- [](klondike/klondike.md) -- in this tutorial, we will build the Klondike + solitaire card game. + +- [](platformer/platformer.md) -- in this tutorial, we will build Ember Quest, a simple + side-scrolling platformer. + +- [](space_shooter/space_shooter.md) -- in this tutorial, we will build Space Shooter, a classic + top-down shooting game. + +```{toctree} +:hidden: + +Bare Flame game +Klondike +Ember Quest +Space Shooter +``` diff --git a/docs/1.18.0/_static/_sphinx_javascript_frameworks_compat.js b/docs/1.18.0/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 000000000..81415803e --- /dev/null +++ b/docs/1.18.0/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/docs/1.18.0/_static/apps/examples/assets/AssetManifest.bin b/docs/1.18.0/_static/apps/examples/assets/AssetManifest.bin new file mode 100644 index 000000000..d7dc9df51 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/AssetManifest.bin @@ -0,0 +1 @@ + Lassets/audio/music/bg_music.ogg  assetassets/audio/music/bg_music.oggassets/audio/sfx/fire_1.mp3  assetassets/audio/sfx/fire_1.mp3assets/audio/sfx/fire_2.mp3  assetassets/audio/sfx/fire_2.mp3,assets/images/0x72_DungeonTilesetII_v1.4.png  asset,assets/images/0x72_DungeonTilesetII_v1.4.pngassets/images/Car.png  assetassets/images/Car.png%assets/images/animations/chopper.json  asset%assets/images/animations/chopper.json$assets/images/animations/chopper.png  asset$assets/images/animations/chopper.png%assets/images/animations/creature.png  asset%assets/images/animations/creature.png"assets/images/animations/ember.png  asset"assets/images/animations/ember.png(assets/images/animations/lottieLogo.json  asset(assets/images/animations/lottieLogo.json'assets/images/animations/robot-idle.png  asset'assets/images/animations/robot-idle.png"assets/images/animations/robot.png  asset"assets/images/animations/robot.pngassets/images/bomb_ptero.png  assetassets/images/bomb_ptero.pngassets/images/boom.png  assetassets/images/boom.pngassets/images/buttons.png  assetassets/images/buttons.pngassets/images/dialogue_box.png  assetassets/images/dialogue_box.pngassets/images/flame.png  assetassets/images/flame.png"assets/images/green_button_sqr.png  asset"assets/images/green_button_sqr.pngassets/images/joystick.png  assetassets/images/joystick.pngassets/images/knight.png  assetassets/images/knight.png#assets/images/layers/background.png  asset#assets/images/layers/background.pngassets/images/layers/enemy.png  assetassets/images/layers/enemy.pngassets/images/layers/player.png  assetassets/images/layers/player.pngassets/images/mage.png  assetassets/images/mage.pngassets/images/nine-box.png  assetassets/images/nine-box.png#assets/images/parallax/airplane.png  asset#assets/images/parallax/airplane.pngassets/images/parallax/bg.png  assetassets/images/parallax/bg.pngassets/images/parallax/city.png  assetassets/images/parallax/city.png+assets/images/parallax/foreground-trees.png  asset+assets/images/parallax/foreground-trees.png(assets/images/parallax/heavy_clouded.png  asset(assets/images/parallax/heavy_clouded.png"assets/images/parallax/license.txt  asset"assets/images/parallax/license.txt'assets/images/parallax/mountain-far.png  asset'assets/images/parallax/mountain-far.png$assets/images/parallax/mountains.png  asset$assets/images/parallax/mountains.pngassets/images/parallax/rain.png  assetassets/images/parallax/rain.png assets/images/parallax/trees.png  asset assets/images/parallax/trees.pngassets/images/pizza.png  assetassets/images/pizza.pngassets/images/ranger.png  assetassets/images/ranger.png assets/images/red_button_sqr.png  asset assets/images/red_button_sqr.pngassets/images/retro_tiles.png  assetassets/images/retro_tiles.png&assets/images/rogue_shooter/bullet.png  asset&assets/images/rogue_shooter/bullet.png%assets/images/rogue_shooter/enemy.png  asset%assets/images/rogue_shooter/enemy.png)assets/images/rogue_shooter/explosion.png  asset)assets/images/rogue_shooter/explosion.png&assets/images/rogue_shooter/player.png  asset&assets/images/rogue_shooter/player.png%assets/images/rogue_shooter/stars.png  asset%assets/images/rogue_shooter/stars.pngassets/images/shield.png  assetassets/images/shield.pngassets/images/speech-bubble.png  assetassets/images/speech-bubble.pngassets/images/sprite_sheet.png  assetassets/images/sprite_sheet.png*assets/images/tile_maps/selector-short.png  asset*assets/images/tile_maps/selector-short.png$assets/images/tile_maps/selector.png  asset$assets/images/tile_maps/selector.png'assets/images/tile_maps/tiles-short.png  asset'assets/images/tile_maps/tiles-short.png!assets/images/tile_maps/tiles.png  asset!assets/images/tile_maps/tiles.pngassets/images/trex.png  assetassets/images/trex.pngassets/images/zap.png  assetassets/images/zap.pngassets/spine/LICENSE  assetassets/spine/LICENSEassets/spine/spineboy-pro.json  assetassets/spine/spineboy-pro.jsonassets/spine/spineboy-pro.skel  assetassets/spine/spineboy-pro.skelassets/spine/spineboy.atlas  assetassets/spine/spineboy.atlasassets/spine/spineboy.png  assetassets/spine/spineboy.pngassets/svgs/checkerboard.svg  assetassets/svgs/checkerboard.svgassets/svgs/green_balloons.svg  assetassets/svgs/green_balloons.svgassets/svgs/happy_player.svg  assetassets/svgs/happy_player.svgassets/svgs/red_balloons.svg  assetassets/svgs/red_balloons.svg+assets/tiles/0x72_DungeonTilesetII_v1.4.tsx  asset+assets/tiles/0x72_DungeonTilesetII_v1.4.tsxassets/tiles/dungeon.tmx  assetassets/tiles/dungeon.tmxassets/yarn/advanced.yarn  assetassets/yarn/advanced.yarnassets/yarn/simple.yarn  assetassets/yarn/simple.yarn=packages/rogue_shooter/assets/images/rogue_shooter/bullet.png  asset=packages/rogue_shooter/assets/images/rogue_shooter/bullet.png + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2023, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2001-2017 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + +Portions of the attached software ("Contribution") are developed by +SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. + +The Contribution is licensed pursuant to the Eric Young open source +license provided above. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + +Portions of the attached software ("Contribution") are developed by +SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. + +The Contribution is licensed pursuant to the OpenSSL open source +license provided above. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED 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 OpenSSL PROJECT OR +ITS 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. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. +ECC cipher suite support in OpenSSL originally developed by +SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. +ECDH support in OpenSSL originally developed by +SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2005 Nokia. All rights reserved. + +The portions of the attached software ("Contribution") is developed by +Nokia Corporation and is licensed pursuant to the OpenSSL open source +license. + +The Contribution, originally written by Mika Kousa and Pasi Eronen of +Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites +support (see RFC 4279) to OpenSSL. + +No patent licenses or other rights except those expressly stated in +the OpenSSL open source license shall be deemed granted or received +expressly, by implication, estoppel, or otherwise. + +No assurances are provided by Nokia that the Contribution does not +infringe the patent or other intellectual property rights of any third +party or that the license provides you with all the necessary rights +to make use of the Contribution. + +THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN +ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA +SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY +OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR +OTHERWISE. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2010 The Chromium Authors +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file +-------------------------------------------------------------------------------- +boringssl + +Copyright 2011 The Chromium Authors +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file +-------------------------------------------------------------------------------- +boringssl + +Copyright 2012 The Chromium Authors +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file +-------------------------------------------------------------------------------- +boringssl + +Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. +Copyright (c) 2012, Intel Corporation. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2014 The Chromium Authors +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file +-------------------------------------------------------------------------------- +boringssl + +Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +Copyright (c) 2014, Intel Corporation. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +Copyright (c) 2015, Intel Inc. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2015 The Chromium Authors +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file +-------------------------------------------------------------------------------- +boringssl + +Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2016 Brian Smith. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2016 The Chromium Authors +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file +-------------------------------------------------------------------------------- +boringssl + +Copyright 2017 The Chromium Authors +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file +-------------------------------------------------------------------------------- +boringssl + +Copyright 2019 The Chromium Authors +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file +-------------------------------------------------------------------------------- +boringssl + +Copyright 2022 The Chromium Authors +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file +-------------------------------------------------------------------------------- +boringssl + +Copyright 2023 The Chromium Authors +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file +-------------------------------------------------------------------------------- +boringssl + +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +DTLS code by Eric Rescorla + +Copyright (C) 2006, Network Resonance, Inc. +Copyright (C) 2011, RTFM, Inc. +-------------------------------------------------------------------------------- +boringssl + +OpenSSL License +--------------- + +Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED 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 OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + + +This product includes cryptographic software written by Eric Young +(eay@cryptsoft.com). This product includes software written by Tim +Hudson (tjh@cryptsoft.com). + +Original SSLeay License +----------------------- + +Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +All rights reserved. + +This package is an SSL implementation written +by Eric Young (eay@cryptsoft.com). +The implementation was written so as to conform with Netscapes SSL. + +This library is free for commercial and non-commercial use as long as +the following conditions are aheared to. The following conditions +apply to all code found in this distribution, be it the RC4, RSA, +lhash, DES, etc., code; not just the SSL code. The SSL documentation +included with this distribution is covered by the same copyright terms +except that the holder is Tim Hudson (tjh@cryptsoft.com). + +Copyright remains Eric Young's, and as such any Copyright notices in +the code are not to be removed. +If this package is used in a product, Eric Young should be given attribution +as the author of the parts of the library used. +This can be in the form of a textual message at program startup or +in documentation (online or textual) provided with the package. + +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 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. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + "This product includes cryptographic software written by + Eric Young (eay@cryptsoft.com)" + The word 'cryptographic' can be left out if the rouines from the library + being used are not cryptographic related :-). +4. If you include any Windows specific code (or a derivative thereof) from + the apps directory (application code) you must include an acknowledgement: + "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + +THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + +The licence and distribution terms for any publically available version or +derivative of this code cannot be changed. i.e. this code cannot simply be +copied and put under another distribution licence +[including the GNU Public Licence.] + +ISC license used for completely new code in BoringSSL: + +Copyright (c) 2015, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +The code in third_party/fiat carries the MIT license: + +Copyright (c) 2015-2016 the fiat-crypto authors (see +https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). + +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. + +Licenses for support code +------------------------- + +Parts of the TLS test suite are under the Go license. This code is not included +in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so +distributing code linked against BoringSSL does not trigger this license: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +BoringSSL uses the Chromium test infrastructure to run a continuous build, +trybots etc. The scripts which manage this, and the script for generating build +metadata, are under the Chromium license. Distributing code linked against +BoringSSL does not trigger this license. + +Copyright 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +ceval + +Copyright (c) 2021 e_t + +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 +ffi +package_config + +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. + +-------------------------------------------------------------------------------- +convert +crypto +shelf_static +vm_service + +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. + +-------------------------------------------------------------------------------- +coverage +glob +http +http_parser +matcher +path +pool +pub_semver +source_span +string_scanner +test +watcher + +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. + +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2003-2005 Tom Wu +Copyright (c) 2012 Adam Singer (adam@solvr.io) +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, +EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY +WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF +THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +In addition, the following condition applies: + +All redistributions must retain an intact copy of this copyright notice +and disclaimer. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2010, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google 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. +-------------------------------------------------------------------------------- +dart + +Copyright 2012, 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. +-------------------------------------------------------------------------------- +dashbook + +MIT License + +Copyright (c) 2021 Blue Fire 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. + +-------------------------------------------------------------------------------- +device_frame + + +MIT License + +Copyright (c) 2020 Aloïs Deniel + +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. +-------------------------------------------------------------------------------- +double-conversion +icu + +Copyright 2006-2008 the V8 project authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +double-conversion +icu + +Copyright 2010 the V8 project authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +double-conversion +icu + +Copyright 2012 the V8 project authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +engine + +License for the Ahem font embedded below is from: +https://www.w3.org/Style/CSS/Test/Fonts/Ahem/COPYING + +The Ahem font in this directory belongs to the public domain. In +jurisdictions that do not recognize public domain ownership of these +files, the following Creative Commons Zero declaration applies: + + + +which is quoted below: + + The person who has associated a work with this document (the "Work") + affirms that he or she (the "Affirmer") is the/an author or owner of + the Work. The Work may be any work of authorship, including a + database. + + The Affirmer hereby fully, permanently and irrevocably waives and + relinquishes all of her or his copyright and related or neighboring + legal rights in the Work available under any federal or state law, + treaty or contract, including but not limited to moral rights, + publicity and privacy rights, rights protecting against unfair + competition and any rights protecting the extraction, dissemination + and reuse of data, whether such rights are present or future, vested + or contingent (the "Waiver"). The Affirmer makes the Waiver for the + benefit of the public at large and to the detriment of the Affirmer's + heirs or successors. + + The Affirmer understands and intends that the Waiver has the effect + of eliminating and entirely removing from the Affirmer's control all + the copyright and related or neighboring legal rights previously held + by the Affirmer in the Work, to that extent making the Work freely + available to the public for any and all uses and purposes without + restriction of any kind, including commercial use and uses in media + and formats or by methods that have not yet been invented or + conceived. Should the Waiver for any reason be judged legally + ineffective in any jurisdiction, the Affirmer hereby grants a free, + full, permanent, irrevocable, nonexclusive and worldwide license for + all her or his copyright and related or neighboring legal rights in + the Work. +-------------------------------------------------------------------------------- +etc_decoder + +Copyright (c) 2020-2022 Hans-Kristian Arntzen + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2000-2004 Fred L. Drake, Jr. +Copyright (c) 2001-2002 Greg Stein +Copyright (c) 2002-2006 Karl Waclawek +Copyright (c) 2016 Cristian Rodríguez +Copyright (c) 2016-2019 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2018 Yury Gribov + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2000-2005 Fred L. Drake, Jr. +Copyright (c) 2001-2002 Greg Stein +Copyright (c) 2002-2016 Karl Waclawek +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2016 Cristian Rodríguez +Copyright (c) 2016 Thomas Beutlich +Copyright (c) 2017 Rhodri James +Copyright (c) 2022 Thijs Schreijer + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2000-2006 Fred L. Drake, Jr. +Copyright (c) 2001-2002 Greg Stein +Copyright (c) 2002-2016 Karl Waclawek +Copyright (c) 2005-2009 Steven Solie +Copyright (c) 2016 Eric Rahm +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2016 Gaurav +Copyright (c) 2016 Thomas Beutlich +Copyright (c) 2016 Gustavo Grieco +Copyright (c) 2016 Pascal Cuoq +Copyright (c) 2016 Ed Schouten +Copyright (c) 2017-2022 Rhodri James +Copyright (c) 2017 Václav Slavík +Copyright (c) 2017 Viktor Szakats +Copyright (c) 2017 Chanho Park +Copyright (c) 2017 Rolf Eike Beer +Copyright (c) 2017 Hans Wennborg +Copyright (c) 2018 Anton Maklakov +Copyright (c) 2018 Benjamin Peterson +Copyright (c) 2018 Marco Maggi +Copyright (c) 2018 Mariusz Zaborski +Copyright (c) 2019 David Loffredo +Copyright (c) 2019-2020 Ben Wagner +Copyright (c) 2019 Vadim Zeitlin +Copyright (c) 2021 Dong-hee Na +Copyright (c) 2022 Samanta Navarro +Copyright (c) 2022 Jeffrey Walton +Copyright (c) 2022 Jann Horn + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2001-2002 Fred L. Drake, Jr. +Copyright (c) 2006 Karl Waclawek +Copyright (c) 2016-2017 Sebastian Pipping +Copyright (c) 2017 Rhodri James + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2001-2003 Fred L. Drake, Jr. +Copyright (c) 2002 Greg Stein +Copyright (c) 2002-2016 Karl Waclawek +Copyright (c) 2005-2009 Steven Solie +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2016 Pascal Cuoq +Copyright (c) 2016 Don Lewis +Copyright (c) 2017 Rhodri James +Copyright (c) 2017 Alexander Bluhm +Copyright (c) 2017 Benbuck Nason +Copyright (c) 2017 José Gutiérrez de la Concha +Copyright (c) 2019 David Loffredo +Copyright (c) 2021 Dong-hee Na +Copyright (c) 2022 Martin Ettl + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2001-2003 Fred L. Drake, Jr. +Copyright (c) 2004-2009 Karl Waclawek +Copyright (c) 2005-2007 Steven Solie +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2019 David Loffredo +Copyright (c) 2020 Joe Orton +Copyright (c) 2020 Kleber Tarcísio +Copyright (c) 2021 Tim Bray +Copyright (c) 2022 Martin Ettl + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2001-2004 Fred L. Drake, Jr. +Copyright (c) 2002-2009 Karl Waclawek +Copyright (c) 2016-2017 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2017 Franek Korta + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2002-2005 Karl Waclawek +Copyright (c) 2016-2017 Sebastian Pipping +Copyright (c) 2017 Rhodri James + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2002-2016 Karl Waclawek +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2018 Benjamin Peterson +Copyright (c) 2018 Anton Maklakov +Copyright (c) 2019 David Loffredo +Copyright (c) 2020 Boris Kolpackov +Copyright (c) 2022 Martin Ettl + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2005 Karl Waclawek +Copyright (c) 2016-2019 Sebastian Pipping + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2005-2006 Karl Waclawek +Copyright (c) 2016-2019 Sebastian Pipping +Copyright (c) 2019 David Loffredo + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2016-2017 Sebastian Pipping + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2022 Martin Ettl + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2017 Sebastian Pipping + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Greg Stein +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2002-2006 Karl Waclawek +Copyright (c) 2017-2021 Sebastian Pipping + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Greg Stein +Copyright (c) 2002-2006 Karl Waclawek +Copyright (c) 2002-2003 Fred L. Drake, Jr. +Copyright (c) 2005-2009 Steven Solie +Copyright (c) 2016-2021 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2019 David Loffredo +Copyright (c) 2021 Dong-hee Na + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Karl Waclawek +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2017 Sebastian Pipping + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002-2003 Fred L. Drake, Jr. +Copyright (c) 2004-2006 Karl Waclawek +Copyright (c) 2005-2007 Steven Solie +Copyright (c) 2016-2021 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2019 David Loffredo +Copyright (c) 2021 Dong-hee Na + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2017-2019 Sebastian Pipping + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2016-2017 Sebastian Pipping + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2016-2018 Sebastian Pipping +Copyright (c) 2018 Marco Maggi + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2016-2021 Sebastian Pipping +Copyright (c) 2017 Rhodri James + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001-2022 Expat maintainers + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1999-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2007 Karl Waclawek +Copyright (c) 2017 Sebastian Pipping + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Greg Stein +Copyright (c) 2005 Karl Waclawek +Copyright (c) 2017-2021 Sebastian Pipping + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 2000 Clark Cooper +Copyright (c) 2017 Sebastian Pipping + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 2002-2003 Fred L. Drake, Jr. +Copyright (c) 2002-2006 Karl Waclawek +Copyright (c) 2003 Greg Stein +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2018 Yury Gribov +Copyright (c) 2019 David Loffredo + +Licensed under the MIT license: + +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. +-------------------------------------------------------------------------------- +expat +harfbuzz + +Copyright (c) 2021 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fallback_root_certificates + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +You may obtain a copy of this library's Source Code Form from: https://dart.googlesource.com/sdk/+/bb65648e20e29abc47acf3dd984518d29fd625c3 +/third_party/fallback_root_certificates/ + +-------------------------------------------------------------------------------- +fast_noise +google_fonts + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +-------------------------------------------------------------------------------- +ffx_spd + +Copyright (c) 2017-2019 Advanced Micro Devices, Inc. All rights reserved. +Copyright (c) <2014> + +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. +-------------------------------------------------------------------------------- +ffx_spd + +Copyright (c) 2017-2020 Advanced Micro Devices, Inc. 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. +-------------------------------------------------------------------------------- +fiat + +Copyright (c) 2015-2020 the fiat-crypto authors (see + +https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). + +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. +-------------------------------------------------------------------------------- +file + +Copyright 2017, the Dart project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fixnum +http_multi_server +shelf +shelf_web_socket +source_maps +stack_trace + +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. + +-------------------------------------------------------------------------------- +flame +flame_audio +flame_forge2d +flame_lint +flame_noise +flame_svg +flame_tiled + +MIT License + +Copyright (c) 2021 Blue Fire + +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. + + +-------------------------------------------------------------------------------- +flame_isolate +flame_lottie + +MIT License + +Copyright (c) 2022 Blue Fire + +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. + + +-------------------------------------------------------------------------------- +flame_spine + + +flame_spine License +------------------- + +MIT License + +Copyright (c) 2022 Blue Fire + +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. + + +Spine Runtimes License Agreement +-------------------------------- + +Copyright (c) 2013-2021, Esoteric Software LLC + +Integration of the Spine Runtimes into software or otherwise creating +derivative works of the Spine Runtimes is permitted under the terms and +conditions of Section 2 of the Spine Editor License Agreement: +http://esotericsoftware.com/spine-editor-license + +Otherwise, it is permitted to integrate the Spine Runtimes into software +or otherwise create derivative works of the Spine Runtimes (collectively, +"Products"), provided that each user of the Products must obtain their own +Spine Editor license and redistribution of the Products in any form must +include this license and copyright notice. + +THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "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 ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, +BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) 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 +THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +flatbuffers + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright 2014 Google Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +-------------------------------------------------------------------------------- +flutter + +Copyright 2014 The Flutter Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +flutter_colorpicker + +MIT License + +Copyright (c) 2021 fuyumi + +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. +-------------------------------------------------------------------------------- +flutter_markdown +path_provider +path_provider_android +path_provider_foundation +path_provider_linux +path_provider_platform_interface +path_provider_windows +platform +plugin_platform_interface +shared_preferences +shared_preferences_android +shared_preferences_foundation +shared_preferences_linux +shared_preferences_platform_interface +shared_preferences_web +shared_preferences_windows +url_launcher +url_launcher_android +url_launcher_ios +url_launcher_linux +url_launcher_macos +url_launcher_platform_interface +url_launcher_windows +vector_graphics +vector_graphics_codec +vector_graphics_compiler +xdg_directories + +Copyright 2013 The Flutter Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +flutter_svg + +Copyright (c) 2018 Dan Field + +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. +-------------------------------------------------------------------------------- +forge2d + +Copyright 2015, Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 2000, 2001, 2002, 2003, 2006, 2010 by +Francesco Zappa Nardelli + +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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 2000-2004, 2006-2011, 2013, 2014 by +Francesco Zappa Nardelli + +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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 2001, 2002 by +Francesco Zappa Nardelli + +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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 2001, 2002, 2003, 2004 by +Francesco Zappa Nardelli + +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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 2001-2008, 2011, 2013, 2014 by +Francesco Zappa Nardelli + +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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 1990, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +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 +OPEN GROUP 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. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000 Computing Research Labs, New Mexico State University +Copyright 2001-2004, 2011 Francesco Zappa Nardelli + +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 COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY 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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000 Computing Research Labs, New Mexico State University +Copyright 2001-2014 + Francesco Zappa Nardelli + +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 COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY 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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000 Computing Research Labs, New Mexico State University +Copyright 2001-2015 + Francesco Zappa Nardelli + +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 COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY 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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000, 2001, 2004 by +Francesco Zappa Nardelli + +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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000-2001, 2002 by +Francesco Zappa Nardelli + +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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000-2001, 2003 by +Francesco Zappa Nardelli + +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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000-2010, 2012-2014 by +Francesco Zappa Nardelli + +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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2001, 2002, 2012 Francesco Zappa Nardelli + +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 COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY 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. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2003 by +Francesco Zappa Nardelli + +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. +-------------------------------------------------------------------------------- +freetype2 + +The FreeType Project LICENSE +---------------------------- + + 2006-Jan-27 + + Copyright 1996-2002, 2006 by + David Turner, Robert Wilhelm, and Werner Lemberg + + + +Introduction +============ + + The FreeType Project is distributed in several archive packages; + some of them may contain, in addition to the FreeType font engine, + various tools and contributions which rely on, or relate to, the + FreeType Project. + + This license applies to all files found in such packages, and + which do not fall under their own explicit license. The license + affects thus the FreeType font engine, the test programs, + documentation and makefiles, at the very least. + + This license was inspired by the BSD, Artistic, and IJG + (Independent JPEG Group) licenses, which all encourage inclusion + and use of free software in commercial and freeware products + alike. As a consequence, its main points are that: + + o We don't promise that this software works. However, we will be + interested in any kind of bug reports. (`as is' distribution) + + o You can use this software for whatever you want, in parts or + full form, without having to pay us. (`royalty-free' usage) + + o You may not pretend that you wrote this software. If you use + it, or only parts of it, in a program, you must acknowledge + somewhere in your documentation that you have used the + FreeType code. (`credits') + + We specifically permit and encourage the inclusion of this + software, with or without modifications, in commercial products. + We disclaim all warranties covering The FreeType Project and + assume no liability related to The FreeType Project. + + + Finally, many people asked us for a preferred form for a + credit/disclaimer to use in compliance with this license. We thus + encourage you to use the following text: + + """ + Portions of this software are copyright © The FreeType + Project (www.freetype.org). All rights reserved. + """ + + Please replace with the value from the FreeType version you + actually use. + + +Legal Terms +=========== + +0. Definitions +-------------- + + Throughout this license, the terms `package', `FreeType Project', + and `FreeType archive' refer to the set of files originally + distributed by the authors (David Turner, Robert Wilhelm, and + Werner Lemberg) as the `FreeType Project', be they named as alpha, + beta or final release. + + `You' refers to the licensee, or person using the project, where + `using' is a generic term including compiling the project's source + code as well as linking it to form a `program' or `executable'. + This program is referred to as `a program using the FreeType + engine'. + + This license applies to all files distributed in the original + FreeType Project, including all source code, binaries and + documentation, unless otherwise stated in the file in its + original, unmodified form as distributed in the original archive. + If you are unsure whether or not a particular file is covered by + this license, you must contact us to verify this. + + The FreeType Project is copyright (C) 1996-2000 by David Turner, + Robert Wilhelm, and Werner Lemberg. All rights reserved except as + specified below. + +1. No Warranty +-------------- + + THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO + USE, OF THE FREETYPE PROJECT. + +2. Redistribution +----------------- + + This license grants a worldwide, royalty-free, perpetual and + irrevocable right and license to use, execute, perform, compile, + display, copy, create derivative works of, distribute and + sublicense the FreeType Project (in both source and object code + forms) and derivative works thereof for any purpose; and to + authorize others to exercise some or all of the rights granted + herein, subject to the following conditions: + + o Redistribution of source code must retain this license file + (`FTL.TXT') unaltered; any additions, deletions or changes to + the original files must be clearly indicated in accompanying + documentation. The copyright notices of the unaltered, + original files must be preserved in all copies of source + files. + + o Redistribution in binary form must provide a disclaimer that + states that the software is based in part of the work of the + FreeType Team, in the distribution documentation. We also + encourage you to put an URL to the FreeType web page in your + documentation, though this isn't mandatory. + + These conditions apply to any software derived from or based on + the FreeType Project, not just the unmodified files. If you use + our work, you must acknowledge us. However, no fee need be paid + to us. + +3. Advertising +-------------- + + Neither the FreeType authors and contributors nor you shall use + the name of the other for commercial, advertising, or promotional + purposes without specific prior written permission. + + We suggest, but do not require, that you use one or more of the + following phrases to refer to this software in your documentation + or advertising materials: `FreeType Project', `FreeType Engine', + `FreeType library', or `FreeType Distribution'. + + As you have not signed this license, you are not required to + accept it. However, as the FreeType Project is copyrighted + material, only this license, or another one contracted with the + authors, grants you the right to use, distribute, and modify it. + Therefore, by using, distributing, or modifying the FreeType + Project, you indicate that you understand and accept all the terms + of this license. + +4. Contacts +----------- + + There are two mailing lists related to FreeType: + + o freetype@nongnu.org + + Discusses general use and applications of FreeType, as well as + future and wanted additions to the library and distribution. + If you are looking for support, start in this list if you + haven't found anything to help you in the documentation. + + o freetype-devel@nongnu.org + + Discusses bugs, as well as engine internals, design issues, + specific licenses, porting, etc. + + Our home page can be found at + + https://www.freetype.org + + +--- end of FTL.TXT --- +-------------------------------------------------------------------------------- +freetype2 + +This software was written by Alexander Peslyak in 2001. No copyright is +claimed, and the software is hereby placed in the public domain. +In case this attempt to disclaim copyright and place the software in the +public domain is deemed null and void, then the software is +Copyright (c) 2001 Alexander Peslyak and it is hereby released to the +general public under the following terms: + +Redistribution and use in source and binary forms, with or without +modification, are permitted. + +There's ABSOLUTELY NO WARRANTY, express or implied. +-------------------------------------------------------------------------------- +freetype2 + +This software was written by Alexander Peslyak in 2001. No copyright is +claimed, and the software is hereby placed in the public domain. +In case this attempt to disclaim copyright and place the software in the +public domain is deemed null and void, then the software is +Copyright (c) 2001 Alexander Peslyak and it is hereby released to the +general public under the following terms: + +Redistribution and use in source and binary forms, with or without +modification, are permitted. + +There's ABSOLUTELY NO WARRANTY, express or implied. + +(This is a heavily cut-down "BSD license".) +-------------------------------------------------------------------------------- +freezed_annotation + +MIT License + +Copyright (c) 2020 Remi Rousselet + +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. +-------------------------------------------------------------------------------- +frontend_server_client + +Copyright 2020, 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. + +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2014 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +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. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2016 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +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. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2017 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +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. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2018 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +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. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2019 The Fuchsia 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. + +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. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2019 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +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. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2020 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +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. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2021 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +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. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2022 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +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. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2023 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +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. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2024 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +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. +-------------------------------------------------------------------------------- +fuchsia_sdk + +musl as a whole is licensed under the following standard MIT license: + + +Copyright © 2005-2014 Rich Felker, et al. + +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. + + +Authors/contributors include: + +Alex Dowad +Alexander Monakov +Anthony G. Basile +Arvid Picciani +Bobby Bingham +Boris Brezillon +Brent Cook +Chris Spiegel +Clément Vasseur +Daniel Micay +Denys Vlasenko +Emil Renner Berthing +Felix Fietkau +Felix Janda +Gianluca Anzolin +Hauke Mehrtens +Hiltjo Posthuma +Isaac Dunham +Jaydeep Patil +Jens Gustedt +Jeremy Huntwork +Jo-Philipp Wich +Joakim Sindholt +John Spencer +Josiah Worcester +Justin Cormack +Khem Raj +Kylie McClain +Luca Barbato +Luka Perkov +M Farkas-Dyck (Strake) +Mahesh Bodapati +Michael Forney +Natanael Copa +Nicholas J. Kain +orc +Pascal Cuoq +Petr Hosek +Pierre Carrier +Rich Felker +Richard Pennington +Shiz +sin +Solar Designer +Stefan Kristiansson +Szabolcs Nagy +Timo Teräs +Trutz Behn +Valentin Ochs +William Haddon + +Portions of this software are derived from third-party works licensed +under terms compatible with the above MIT license: + +Much of the math library code (third_party/math/* and +third_party/complex/*, and third_party/include/libm.h) is +Copyright © 1993,2004 Sun Microsystems or +Copyright © 2003-2011 David Schultz or +Copyright © 2003-2009 Steven G. Kargl or +Copyright © 2003-2009 Bruce D. Evans or +Copyright © 2008 Stephen L. Moshier +and labelled as such in comments in the individual source files. All +have been licensed under extremely permissive terms. + +The smoothsort implementation (third_party/smoothsort/qsort.c) is +Copyright © 2011 Valentin Ochs and is licensed under an MIT-style +license. + +The x86_64 files in third_party/arch were written by Nicholas J. Kain +and is licensed under the standard MIT terms. + +All other files which have no copyright comments are original works +produced specifically for use as part of this library, written either +by Rich Felker, the main author of the library, or by one or more +contibutors listed above. Details on authorship of individual files +can be found in the git version control history of the project. The +omission of copyright and license comments in each file is in the +interest of source tree size. + +In addition, permission is hereby granted for all public header files +(include/* and arch/*/bits/*) and crt files intended to be linked into +applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit +the copyright notice and permission notice otherwise required by the +license, and to use these files without any requirement of +attribution. These files include substantial contributions from: + +Bobby Bingham +John Spencer +Nicholas J. Kain +Rich Felker +Richard Pennington +Stefan Kristiansson +Szabolcs Nagy + +all of whom have explicitly granted such permission. + +This file previously contained text expressing a belief that most of +the files covered by the above exception were sufficiently trivial not +to be subject to copyright, resulting in confusion over whether it +negated the permissions granted in the license. In the spirit of +permissive licensing, and of not having licensing issues being an +obstacle to adoption, that text has been removed. +-------------------------------------------------------------------------------- +glfw + +Copyright (C) 1997-2013 Sam Lantinga + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the +use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard + +Copyright (c) 2006-2019 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2016 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2017 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2018 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2019 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2019 Camilla Löwy +Copyright (c) 2012 Torsten Walluhn + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2006-2017 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2006-2018 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2009-2016 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2009-2019 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2009-2019 Camilla Löwy +Copyright (c) 2012 Torsten Walluhn + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2009-2021 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2014 Jonas Ådahl + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2016 Google Inc. +Copyright (c) 2016-2017 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2016 Google Inc. +Copyright (c) 2016-2019 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2016-2017 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2021 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2022 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2015-2018 Google, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2015-2019 Google, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2018-2020 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2017, 2022-2024 Arm Limited. +Copyright (C) 2015-2018 Google, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2017, 2022-2024 Arm Limited. +Copyright (C) 2015-2020 Google, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2015 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. +Copyright (C) 2017, 2019 ARM Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2015 LunarG, Inc. +Copyright (C) 2015-2020 Google, Inc. +Copyright (C) 2017 ARM Limited. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2016 LunarG, Inc. +Copyright (C) 2015-2016 Google, Inc. +Copyright (C) 2017 ARM Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2016 LunarG, Inc. +Copyright (C) 2015-2020 Google, Inc. +Copyright (C) 2017, 2022-2024 Arm Limited. +Modifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2016 LunarG, Inc. +Copyright (C) 2017, 2022-2024 Arm Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2015-2018 Google, Inc. +Copyright (c) 2023, Mobica Limited + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2020 Google, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (c) 2002-2010 The ANGLE Project Authors. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013-2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013-2016 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013-2016 LunarG, Inc. +Copyright (C) 2015-2020 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013-2016 LunarG, Inc. +Copyright (C) 2016-2020 Google, Inc. +Modifications Copyright(C) 2021 Advanced Micro Devices, Inc.All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2016 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2016 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2017 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2013 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2013-2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2015 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2015 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2015 LunarG, Inc. +Copyright (C) 2015-2020 Google, Inc. +Copyright (C) 2017 ARM Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2015 LunarG, Inc. +Copyright (C) 2022-2024 Arm Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2016 LunarG, Inc. +Copyright (C) 2015-2020 Google, Inc. +Copyright (C) 2017, 2022-2024 Arm Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2016 LunarG, Inc. +Copyright (C) 2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2016 LunarG, Inc. +Copyright (C) 2018-2020 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2015 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2015-2016 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2015-2018 Google, Inc. +Copyright (C) 2017 ARM Limited. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google, Inc., nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google, Inc., nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. +Copyright (C) 2019, 2022-2024 Arm Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. +Copyright (C) 2022-2024 Arm Limited. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google, Inc., nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016-2017 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016-2017 Google, Inc. +Copyright (C) 2020 The Khronos Group Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016-2017 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016-2018 Google, Inc. +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016-2018 Google, Inc. +Copyright (C) 2016 LunarG, Inc. +Copyright (C) 2023 Mobica Limited. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google, Inc., nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2017 LunarG, Inc. +Copyright (C) 2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2017 LunarG, Inc. +Copyright (C) 2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google, Inc., nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2017-2018 Google, Inc. +Copyright (C) 2017 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2018 The Khronos Group Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2020 The Khronos Group Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of The Khronos Group Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2023 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2002, NVIDIA Corporation. + +NVIDIA Corporation("NVIDIA") supplies this software to you in +consideration of your agreement to the following terms, and your use, +installation, modification or redistribution of this NVIDIA software +constitutes acceptance of these terms. If you do not agree with these +terms, please do not use, install, modify or redistribute this NVIDIA +software. + +In consideration of your agreement to abide by the following terms, and +subject to these terms, NVIDIA grants you a personal, non-exclusive +license, under NVIDIA's copyrights in this original NVIDIA software (the +"NVIDIA Software"), to use, reproduce, modify and redistribute the +NVIDIA Software, with or without modifications, in source and/or binary +forms; provided that if you redistribute the NVIDIA Software, you must +retain the copyright notice of NVIDIA, this notice and the following +text and disclaimers in all such redistributions of the NVIDIA Software. +Neither the name, trademarks, service marks nor logos of NVIDIA +Corporation may be used to endorse or promote products derived from the +NVIDIA Software without specific prior written permission from NVIDIA. +Except as expressly stated in this notice, no other rights or licenses +express or implied, are granted by NVIDIA herein, including but not +limited to any patent rights that may be infringed by your derivative +works or by other works in which the NVIDIA Software may be +incorporated. No hardware is licensed hereunder. + +THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, +INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR +ITS USE AND OPERATION EITHER ALONE OR IN COMBINATION WITH OTHER +PRODUCTS. + +IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, +INCIDENTAL, EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, LOST PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY +OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE +NVIDIA SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, +TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF +NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2013 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are 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 Materials. + +THE MATERIALS ARE 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 +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2014-2017 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are 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 Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2014-2020 The Khronos Group Inc. +Copyright (C) 2022-2024 Arm Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are 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 Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2018 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are 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 Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2019, Viktor Latypov +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2020 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are 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 Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT + https://www.khronos.org/registry/ + +THE MATERIALS ARE 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 +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2020, Travis Fort +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY 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. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2021 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are 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 Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2022 ARM Limited + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are 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 Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright(C) 2021 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 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 3Dlabs Inc. Ltd. 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 HOLDERS 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. +-------------------------------------------------------------------------------- +glslang +skia + +Copyright (c) 2014-2016 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are 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 Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang +spirv-cross + +Copyright (c) 2014-2020 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are 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 Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright (C) 2011 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright (C) 2012 Grigori Goronzy + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright (C) 2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright (c) Microsoft Corporation. + +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 +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 1998-2004 David Turner and Werner Lemberg +Copyright © 2004,2007,2009 Red Hat, Inc. +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 1998-2004 David Turner and Werner Lemberg +Copyright © 2004,2007,2009,2010 Red Hat, Inc. +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 1998-2004 David Turner and Werner Lemberg +Copyright © 2006 Behdad Esfahbod +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007 Chris Wilson +Copyright © 2009,2010 Red Hat, Inc. +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2010,2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2010,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2012,2013 Google, Inc. +Copyright © 2019, Facebook Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2018,2019,2020 Ebrahim Byagowi +Copyright © 2018 Khaled Hosny + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009,2010 Red Hat, Inc. +Copyright © 2010,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009,2010 Red Hat, Inc. +Copyright © 2010,2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009,2010 Red Hat, Inc. +Copyright © 2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009,2010 Red Hat, Inc. +Copyright © 2012,2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009,2010 Red Hat, Inc. +Copyright © 2012,2018 Google, Inc. +Copyright © 2019 Facebook, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2009 Keith Stribley +Copyright © 2011 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2009 Keith Stribley +Copyright © 2015 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2011 Codethink Limited +Copyright © 2010,2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2011 Codethink Limited +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2011 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2015 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009,2010 Red Hat, Inc. +Copyright © 2010,2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009,2010 Red Hat, Inc. +Copyright © 2010,2011,2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009,2010 Red Hat, Inc. +Copyright © 2010,2011,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009,2010 Red Hat, Inc. +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010 Red Hat, Inc. +Copyright © 2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010,2011 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010,2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010,2011,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011 Martin Hosken +Copyright © 2011 SIL International + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011 Martin Hosken +Copyright © 2011 SIL International +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2012 Google, Inc. +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2012,2013 Google, Inc. +Copyright © 2021 Khaled Hosny + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2012,2014 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2014 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012 Mozilla Foundation. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012,2013 Mozilla Foundation. +Copyright © 2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012,2017 Google, Inc. +Copyright © 2021 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012,2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2013 Red Hat, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2014 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2015 Google, Inc. +Copyright © 2019 Adobe Inc. +Copyright © 2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2015 Mozilla Foundation. +Copyright © 2015 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2015-2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2016 Elie Roux +Copyright © 2018 Google, Inc. +Copyright © 2018-2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2016 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2016 Google, Inc. +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2016 Google, Inc. +Copyright © 2018 Khaled Hosny +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2016 Igalia S.L. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2017 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2017 Google, Inc. +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2017 Google, Inc. +Copyright © 2019 Facebook, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2017,2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Ebrahim Byagowi +Copyright © 2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Ebrahim Byagowi +Copyright © 2020 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Ebrahim Byagowi. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Google, Inc. +Copyright © 2019 Facebook, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Google, Inc. +Copyright © 2023 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Adobe Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018-2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019 Adobe Inc. +Copyright © 2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019 Adobe, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019 Facebook, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019 Adobe Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019-2020 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2020 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2020 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2021 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2021 Behdad Esfahbod. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2021 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Red Hat, Inc + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Red Hat, Inc +Copyright © 2021, 2022 Black Foundry + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Red Hat, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Matthias Clasen + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Red Hat, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2023 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2023 Behdad Esfahbod +Copyright © 1999 David Turner +Copyright © 2005 Werner Lemberg +Copyright © 2013-2015 Alexei Podtelezhnikov + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2023 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +HarfBuzz is licensed under the so-called "Old MIT" license. Details follow. +For parts of HarfBuzz that are licensed under different licenses see individual +files names COPYING in subdirectories where applicable. + +Copyright © 2010-2022 Google, Inc. +Copyright © 2015-2020 Ebrahim Byagowi +Copyright © 2019,2020 Facebook, Inc. +Copyright © 2012,2015 Mozilla Foundation +Copyright © 2011 Codethink Limited +Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies) +Copyright © 2009 Keith Stribley +Copyright © 2011 Martin Hosken and SIL International +Copyright © 2007 Chris Wilson +Copyright © 2005,2006,2020,2021,2022,2023 Behdad Esfahbod +Copyright © 2004,2007,2008,2009,2010,2013,2021,2022,2023 Red Hat, Inc. +Copyright © 1998-2005 David Turner and Werner Lemberg +Copyright © 2016 Igalia S.L. +Copyright © 2022 Matthias Clasen +Copyright © 2018,2021 Khaled Hosny +Copyright © 2018,2019,2020 Adobe, Inc +Copyright © 2013-2015 Alexei Podtelezhnikov + +For full copyright notices consult the individual files in the package. + + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz +icu +web_unicode + +Unicode® Copyright and Terms of Use +For the general privacy policy governing access to this site, see the Unicode Privacy Policy. + +A. Unicode Copyright +1. Copyright © 1991-2022 Unicode, Inc. All rights reserved. +B. Definitions +Unicode Data Files ("DATA FILES") include all data files under the directories: +https://www.unicode.org/Public/ +https://www.unicode.org/reports/ +https://www.unicode.org/ivd/data/ + +Unicode Data Files do not include PDF online code charts under the directory: +https://www.unicode.org/Public/ + +Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard +or any source code or compiled code under the directories: +https://www.unicode.org/Public/PROGRAMS/ +https://www.unicode.org/Public/cldr/ +http://site.icu-project.org/download/ +C. Terms of Use +1. Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. +2. Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files, subject to the Terms and Conditions herein. +3. Further specifications of rights and restrictions pertaining to the use of the Unicode DATA FILES and SOFTWARE can be found in the Unicode Data Files and Software License. +4. Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. +5. The Unicode PDF online code charts carry specific restrictions. Those restrictions are incorporated as the first page of each PDF code chart. +6. All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. +7. No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. +8. Modification is not permitted with respect to this document. All copies of this document must be verbatim. +D. Restricted Rights Legend +1. Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. +E.Warranties and Disclaimers +1. This publication and/or website may include technical or typographical errors or other inaccuracies. Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode, Inc. may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. +2. If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. +3. EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. +F. Waiver of Damages +1. In no event shall Unicode, Inc. or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode, Inc. was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. +G. Trademarks & Logos +1. The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. +3. The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. +4. All third party trademarks referenced herein are the property of their respective owners. +H. Miscellaneous +1. Jurisdiction and Venue. This website is operated from a location in the State of California, United States of America. Unicode, Inc. makes no representation that the materials are appropriate for use in other locations. If you access this website from other locations, you are responsible for compliance with local laws. This Agreement, all use of this website and any claims and damages resulting from use of this website are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this website shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. +2. Modification by Unicode, Inc. Unicode, Inc. shall have the right to modify this Agreement at any time by posting it to this website. The user may not assign any part of this Agreement without Unicode, Inc.’s prior written consent. +3. Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. +4. Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. +5. Entire Agreement. This Agreement constitutes the entire agreement between the parties. + +EXHIBIT 1 +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + +See Terms of Use +for definitions of Unicode Inc.’s Data Files and Software. + +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2022 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +# Copyright (c) 2006-2015 International Business Machines Corporation, + # Apple Inc., and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2001, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2002, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2009, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2008, International Business Machines Corporation * +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2012, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2014, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2000, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2009,2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2010, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2011, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2011,2014-2015 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2012, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2013, International Business Machines * +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2013, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2016, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2016, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2001, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2006,2013 IBM Corp. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2007, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2008, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2009, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2010, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2011, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2014 International Business Machines Corporation * +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2015 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016 International Business Machines Corporation +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016 International Business Machines Corporation * +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines Corporation + and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2004, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2012, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2016, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2005, International Business Machines Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2008,2010 IBM and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011 IBM and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011, International Business Machines * + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011, International Business Machines Corporation. * +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011,2014 IBM and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2012, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2013, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014 IBM and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014, International Business Machines * + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014, International Business Machines Corporation. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2015 IBM and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2015, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2016, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2005, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2008 International Business Machines Corporation * +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2008, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2011 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2011, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2014 International Business Machines Corporation +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2015 International Business Machines Corporation +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2015, International Business Machines Corporation and others. + All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016 International Business Machines Corporation +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016 International Business Machines Corporation * +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016 International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016, International Business Machines Corporation and others. + All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003 - 2008, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003 - 2009, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003 - 2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003 - 2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2008, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2009, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2009,2012,2016 International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2010, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2014, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2015, International Business Machines * + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2015, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2016, International Business Machines * + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004 - 2008, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2006 International Business Machines Corporation * +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2006-2012, International Business Machines Corporation and others. * +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2006-2014, International Business Machines Corporation * +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2006-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2008, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2008, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2008, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2014, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2016, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008, Google, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2009, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2011, International Business Machines +Corporation, Google and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2012, International Business Machines Corporation * +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2014, Google, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2014, Google, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2015, Google, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2015, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2010 IBM Corporation and Others. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2010, Google, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2010, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2011, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2011, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2015, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2016, International Business Machines Corporation, * +Google, and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2017, International Business Machines Corporation, * +Google, and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010 , Yahoo! Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2012,2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2012,2015 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2014, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2014, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2016 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2012, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2013, Apple Inc. and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2013, Apple Inc.; Unicode, Inc.; and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2015, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2012 International Business Machines Corporation +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2012,2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2012-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2012-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2012-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2014, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2014, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2016, International Business Machines Corporation and +others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2016, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015-2016, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2016 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2016 and later: Unicode, Inc. and others. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) The Internet Society (2002). All Rights Reserved. + +This document and translations of it may be copied and furnished to +others, and derivative works that comment on or otherwise explain it +or assist in its implementation may be prepared, copied, published +and distributed, in whole or in part, without restriction of any +kind, provided that the above copyright notice and this paragraph are +included on all such copies and derivative works. However, this +document itself may not be modified in any way, such as by removing +the copyright notice or references to the Internet Society or other +Internet organizations, except as needed for the purpose of +developing Internet standards in which case the procedures for +copyrights defined in the Internet Standards process must be +followed, or as required to translate it into languages other than +English. + +The limited permissions granted above are perpetual and will not be +revoked by the Internet Society or its successors or assigns. + +This document and the information contained herein is provided on an +"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING +TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION +HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. +-------------------------------------------------------------------------------- +icu + +Copyright (C) {1999-2001}, International Business Machines Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2016, International Business Machines Corporation + and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1997-2011, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1997-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1997-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1997-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1997-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1999-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1999-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2000-2004 IBM, Inc. and Others. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2000-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2000-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2010 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2012, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2005, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2005, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2006, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2007, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2010, International Business Machines Corporation * +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2011, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2012, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2014, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2016 International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2010 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2010, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2015, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2007-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2007-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2007-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2007-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2007-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2008-2010, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2008-2011, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2008-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2009, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2011-2012 International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2014-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) IBM Corporation, 2000-2010. All rights reserved. + +This software is made available under the terms of the +ICU License -- ICU 1.8.1 and later. +-------------------------------------------------------------------------------- +icu + +Copyright (c) IBM Corporation, 2000-2011. All rights reserved. + +This software is made available under the terms of the +ICU License -- ICU 1.8.1 and later. +-------------------------------------------------------------------------------- +icu + +Copyright (c) IBM Corporation, 2000-2012. All rights reserved. + +This software is made available under the terms of the +ICU License -- ICU 1.8.1 and later. +-------------------------------------------------------------------------------- +icu + +Copyright (c) IBM Corporation, 2000-2014. All rights reserved. + +This software is made available under the terms of the +ICU License -- ICU 1.8.1 and later. +-------------------------------------------------------------------------------- +icu + +Copyright (c) IBM Corporation, 2000-2016. All rights reserved. + +This software is made available under the terms of the +ICU License -- ICU 1.8.1 and later. +-------------------------------------------------------------------------------- +icu + +Copyright 2001 and onwards Google Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright 2004 and onwards Google Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright 2007 Google Inc. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + +See Terms of Use +for definitions of Unicode Inc.’s Data Files and Software. + +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2023 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +Third-Party Software Licenses + +This section contains third-party software notices and/or additional +terms for licensed third-party software components included within ICU +libraries. + +ICU License - ICU 1.8.1 to ICU 57.1 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2016 International Business Machines Corporation and others +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, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +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 +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +of the copyright holder. + +All trademarks and registered trademarks mentioned herein are the +property of their respective owners. + +Chinese/Japanese Word Break Dictionary Data (cjdict.txt) + +The Google Chrome software developed by Google is licensed under +the BSD license. Other software included in this distribution is +provided under other licenses, as set forth below. + +The BSD License +http://opensource.org/licenses/bsd-license.php +Copyright (C) 2006-2008, Google Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided with +the distribution. +Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The word list in cjdict.txt are generated by combining three word lists +listed below with further processing for compound word breaking. The +frequency is generated with an iterative training against Google web +corpora. + +* Libtabe (Chinese) + - https://sourceforge.net/project/?group_id=1519 + - Its license terms and conditions are shown below. + +* IPADIC (Japanese) + - http://chasen.aist-nara.ac.jp/chasen/distribution.html + - Its license terms and conditions are shown below. + +Copyright (c) 1999 TaBE Project. +Copyright (c) 1999 Pai-Hsiang Hsiao. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +. Neither the name of the TaBE Project 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 +REGENTS 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. + +Copyright (c) 1999 Computer Systems and Communication Lab, + Institute of Information Science, Academia + Sinica. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +. Neither the name of the Computer Systems and Communication Lab + 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 +REGENTS 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. + +Copyright 1996 Chih-Hao Tsai @ Beckman Institute, + University of Illinois +c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 + +Copyright 2000, 2001, 2002, 2003 Nara Institute of Science +and Technology. All Rights Reserved. + +Use, reproduction, and distribution of this software is permitted. +Any copy of this software, whether in its original form or modified, +must include both the above copyright notice and the following +paragraphs. + +Nara Institute of Science and Technology (NAIST), +the copyright holders, disclaims all warranties with regard to this +software, including all implied warranties of merchantability and +fitness, in no event shall NAIST be liable for +any special, indirect or consequential damages or any damages +whatsoever resulting from loss of use, data or profits, whether in an +action of contract, negligence or other tortuous action, arising out +of or in connection with the use or performance of this software. + +A large portion of the dictionary entries +originate from ICOT Free Software. The following conditions for ICOT +Free Software applies to the current dictionary as well. + +Each User may also freely distribute the Program, whether in its +original form or modified, to any third party or parties, PROVIDED +that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear +on, or be attached to, the Program, which is distributed substantially +in the same form as set out herein and that such intended +distribution, if actually made, will neither violate or otherwise +contravene any of the laws and regulations of the countries having +jurisdiction over the User or the intended distribution itself. + +NO WARRANTY + +The program was produced on an experimental basis in the course of the +research and development conducted during the project and is provided +to users as so produced on an experimental basis. Accordingly, the +program is provided without any warranty whatsoever, whether express, +implied, statutory or otherwise. The term "warranty" used herein +includes, but is not limited to, any warranty of the quality, +performance, merchantability and fitness for a particular purpose of +the program and the nonexistence of any infringement or violation of +any right of any third party. + +Each user of the program will agree and understand, and be deemed to +have agreed and understood, that there is no warranty whatsoever for +the program and, accordingly, the entire risk arising from or +otherwise connected with the program is assumed by the user. + +Therefore, neither ICOT, the copyright holder, or any other +organization that participated in or was otherwise related to the +development of the program and their respective officials, directors, +officers and other employees shall be held liable for any and all +damages, including, without limitation, general, special, incidental +and consequential damages, arising out of or otherwise in connection +with the use or inability to use the program or any product, material +or result produced or otherwise obtained by using the program, +regardless of whether they have been advised of, or otherwise had +knowledge of, the possibility of such damages at any time during the +project or thereafter. Each user will be deemed to have agreed to the +foregoing by his or her commencement of use of the program. The term +"use" as used herein includes, but is not limited to, the use, +modification, copying and distribution of the program and the +production of secondary products from the program. + +In the case where the program, whether in its original form or +modified, was distributed or delivered to or received by a user from +any person, organization or entity other than ICOT, unless it makes or +grants independently of ICOT any specific warranty to the user in +writing, such person, organization or entity, will also be exempted +from and not be held liable to the user for any such damages as noted +above as far as the program is concerned. + +Lao Word Break Dictionary Data (laodict.txt) + +Copyright (C) 2016 and later: Unicode, Inc. and others. +License & terms of use: http://www.unicode.org/copyright.html +Copyright (c) 2015 International Business Machines Corporation +and others. All Rights Reserved. + +Project: https://github.com/rober42539/lao-dictionary +Dictionary: https://github.com/rober42539/lao-dictionary/laodict.txt +License: https://github.com/rober42539/lao-dictionary/LICENSE.txt + (copied below) + +This file is derived from the above dictionary version of Nov 22, 2020 + +Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and +the following disclaimer in the documentation and/or other materials +provided with the distribution. + +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. + +Burmese Word Break Dictionary Data (burmesedict.txt) + +Copyright (c) 2014 International Business Machines Corporation +and others. All Rights Reserved. + +This list is part of a project hosted at: + github.com/kanyawtech/myanmar-karen-word-lists + +Copyright (c) 2013, LeRoy Benjamin Sharon +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: Redistributions of source code must retain the above +copyright notice, this list of conditions and the following +disclaimer. Redistributions in binary form must reproduce the +above copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + + Neither the name Myanmar Karen Word Lists, 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. + +Google double-conversion + +Copyright 2006-2011, the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +File: install-sh (only for ICU4C) + + +Copyright 1991 by the Massachusetts Institute of Technology + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of M.I.T. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. M.I.T. makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. +-------------------------------------------------------------------------------- +icu + +punycode.c 0.4.0 (2001-Nov-17-Sat) +http://www.cs.berkeley.edu/~amc/idn/ +Adam M. Costello +http://www.nicemice.net/amc/ + +Disclaimer and license + + Regarding this entire document or any portion of it (including + the pseudocode and C code), the author makes no guarantees and + is not responsible for any damage resulting from its use. The + author grants irrevocable permission to anyone to use, modify, + and distribute it in any way that does not diminish the rights + of anyone else to use, modify, and distribute it, provided that + redistributed derivative works do not contain misleading author or + version information. Derivative works need not be licensed under + similar terms. +-------------------------------------------------------------------------------- +include + +Copyright (C) 2011 Nick Bruun +Copyright (C) 2013 Vlad Lazarenko +Copyright (C) 2014 Nicolas Pauss +-------------------------------------------------------------------------------- +include + +Copyright (c) 2008-2009 Bjoern Hoehrmann + +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. +-------------------------------------------------------------------------------- +include + +Copyright (c) 2009 Florian Loitsch. + +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. +-------------------------------------------------------------------------------- +include + +Copyright (c) 2011 - Nick Bruun. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. If you meet (any of) the author(s), you're encouraged to buy them a beer, + a drink or whatever is suited to the situation, given that you like the + software. +4. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +include + +Copyright (c) 2013-2019 Niels Lohmann . + +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. +-------------------------------------------------------------------------------- +inja + +Copyright (c) 2018-2021 Berscheid + +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. +-------------------------------------------------------------------------------- +inja + +Copyright (c) 2018-2021 Lars Berscheid + +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. +-------------------------------------------------------------------------------- +inject_js + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Florent37 + Copyright 2021 Eric Prokop und Nils Wieler Hard- und Softwareentwicklung GbR + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +-------------------------------------------------------------------------------- +integral_isolates + +MIT License + +Copyright (c) 2023 Johannes Pietilä Löhnn + +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. + +-------------------------------------------------------------------------------- +io +term_glyph + +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. + +-------------------------------------------------------------------------------- +jenny +padracing + +MIT License + +Copyright (c) 2022 Blue Fire + +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. + +-------------------------------------------------------------------------------- +js + +Copyright 2012, 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. + +-------------------------------------------------------------------------------- +json + +Copyright (c) 2013-2022 Niels Lohmann + +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. +-------------------------------------------------------------------------------- +json_annotation + +Copyright 2017, the Dart project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +khronos + +Copyright (c) 2013-2014 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are 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 Materials. + +THE MATERIALS ARE 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 +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +libXNVCtrl + +Copyright (c) 2008 NVIDIA, Corporation + +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 (including the next +paragraph) 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. +-------------------------------------------------------------------------------- +libXNVCtrl + +Copyright (c) 2010 NVIDIA, Corporation + +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 (including the next +paragraph) 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. +-------------------------------------------------------------------------------- +libcxx + +Copyright 2018 Ulf Adams +Copyright (c) Microsoft Corporation. All rights reserved. + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +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, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +libcxx +libcxxabi + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +--- LLVM Exceptions to the Apache 2.0 License ---- + +As an exception, if, as a result of your compiling your source code, portions +of this Software are embedded into an Object form of such source code, you +may redistribute such embedded portions in such Object form without complying +with the conditions of Sections 4(a), 4(b) and 4(d) of the License. + +In addition, if you combine or link compiled forms of this Software with +software that is licensed under the GPLv2 ("Combined Software") and if a +court of competent jurisdiction determines that the patent provision (Section +3), the indemnity provision (Section 9) or other Section of the License +conflicts with the conditions of the GPLv2, you may retroactively and +prospectively choose to deem waived or otherwise exclude such Section(s) of +the License, but only in their entirety and only with respect to the Combined +Software. +-------------------------------------------------------------------------------- +libcxx +libcxxabi + +Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT + +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. +-------------------------------------------------------------------------------- +libcxx +libcxxabi + +Copyright (c) 2009-2019 by the contributors listed in CREDITS.TXT + +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.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 with +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: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +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 +CONTRIBUTORS 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 WITH THE +SOFTWARE. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 1988 by Jef Poskanzer. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. This software is provided "as is" without express or +implied warranty. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 1989 by Jef Poskanzer. +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. This software is provided "as is" without express or +implied warranty. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). +All Rights Reserved. +Author: Siarhei Siamashka +Copyright (C) 2013-2014, Linaro Limited. All Rights Reserved. +Author: Ragesh Radhakrishnan +Copyright (C) 2014-2016, D. R. Commander. All Rights Reserved. +Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. +Copyright (C) 2016, Siarhei Siamashka. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). +All Rights Reserved. +Author: Siarhei Siamashka +Copyright (C) 2014, Siarhei Siamashka. All Rights Reserved. +Copyright (C) 2014, Linaro Limited. All Rights Reserved. +Copyright (C) 2015, D. R. Commander. All Rights Reserved. +Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2013, MIPS Technologies, Inc., California. +All Rights Reserved. +Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) + Darko Laus (darko.laus@imgtec.com) +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2013-2014, MIPS Technologies, Inc., California. +All Rights Reserved. +Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) + Darko Laus (darko.laus@imgtec.com) +Copyright (C) 2015, D. R. Commander. All Rights Reserved. +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2014, D. R. Commander. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. +Copyright (C) 2014, Jay Foad. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2015, D. R. Commander. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2009-2014 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project 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 HOLDERS 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. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2009-2015 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project 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 HOLDERS 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. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2009-2016 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project 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 HOLDERS 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. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2011 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project 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 HOLDERS 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. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2011, 2015 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project 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 HOLDERS 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. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2011-2016 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project 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 HOLDERS 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. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright 2009 Pierre Ossman for Cendio AB +Copyright (C) 2010, D. R. Commander. + +Based on the x86 SIMD extension for IJG JPEG library - version 1.02 + +Copyright (C) 1999-2006, MIYASAKA Masaru. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +We are also required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." +-------------------------------------------------------------------------------- +libjpeg-turbo + +libjpeg-turbo Licenses +====================== + +libjpeg-turbo is covered by three compatible BSD-style open source licenses: + +- The IJG (Independent JPEG Group) License, which is listed in + [README.ijg](README.ijg) + + This license applies to the libjpeg API library and associated programs + (any code inherited from libjpeg, and any modifications to that code.) + +- The Modified (3-clause) BSD License, which is listed in + [turbojpeg.c](turbojpeg.c) + + This license covers the TurboJPEG API library and associated programs. + +- The zlib License, which is listed in [simd/jsimdext.inc](simd/jsimdext.inc) + + This license is a subset of the other two, and it covers the libjpeg-turbo + SIMD extensions. + + +Complying with the libjpeg-turbo Licenses +========================================= + +This section provides a roll-up of the libjpeg-turbo licensing terms, to the +best of our understanding. + +1. If you are distributing a modified version of the libjpeg-turbo source, + then: + + 1. You cannot alter or remove any existing copyright or license notices + from the source. + + **Origin** + - Clause 1 of the IJG License + - Clause 1 of the Modified BSD License + - Clauses 1 and 3 of the zlib License + + 2. You must add your own copyright notice to the header of each source + file you modified, so others can tell that you modified that file (if + there is not an existing copyright header in that file, then you can + simply add a notice stating that you modified the file.) + + **Origin** + - Clause 1 of the IJG License + - Clause 2 of the zlib License + + 3. You must include the IJG README file, and you must not alter any of the + copyright or license text in that file. + + **Origin** + - Clause 1 of the IJG License + +2. If you are distributing only libjpeg-turbo binaries without the source, or + if you are distributing an application that statically links with + libjpeg-turbo, then: + + 1. Your product documentation must include a message stating: + + This software is based in part on the work of the Independent JPEG + Group. + + **Origin** + - Clause 2 of the IJG license + + 2. If your binary distribution includes or uses the TurboJPEG API, then + your product documentation must include the text of the Modified BSD + License. + + **Origin** + - Clause 2 of the Modified BSD License + +3. You cannot use the name of the IJG or The libjpeg-turbo Project or the + contributors thereof in advertising, publicity, etc. + + **Origin** + - IJG License + - Clause 3 of the Modified BSD License + +4. The IJG and The libjpeg-turbo Project do not warrant libjpeg-turbo to be + free of defects, nor do we accept any liability for undesirable + consequences resulting from your use of the software. + + **Origin** + - IJG License + - Modified BSD License + - zlib License +-------------------------------------------------------------------------------- +libjpeg-turbo + +libjpeg-turbo note: This file has been modified by The libjpeg-turbo Project +to include only information relevant to libjpeg-turbo, to wordsmith certain +sections, and to remove impolitic language that existed in the libjpeg v8 +README. It is included only for reference. Please see README.md for +information specific to libjpeg-turbo. + + +The Independent JPEG Group's JPEG software +========================================== + +This distribution contains a release of the Independent JPEG Group's free JPEG +software. You are welcome to redistribute this software and to use it for any +purpose, subject to the conditions under LEGAL ISSUES, below. + +This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone, +Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson, +Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers, +and other members of the Independent JPEG Group. + +IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee +(also known as JPEG, together with ITU-T SG16). + + +DOCUMENTATION ROADMAP +===================== + +This file contains the following sections: + +OVERVIEW General description of JPEG and the IJG software. +LEGAL ISSUES Copyright, lack of warranty, terms of distribution. +REFERENCES Where to learn more about JPEG. +ARCHIVE LOCATIONS Where to find newer versions of this software. +FILE FORMAT WARS Software *not* to get. +TO DO Plans for future IJG releases. + +Other documentation files in the distribution are: + +User documentation: + usage.txt Usage instructions for cjpeg, djpeg, jpegtran, + rdjpgcom, and wrjpgcom. + *.1 Unix-style man pages for programs (same info as usage.txt). + wizard.txt Advanced usage instructions for JPEG wizards only. + change.log Version-to-version change highlights. +Programmer and internal documentation: + libjpeg.txt How to use the JPEG library in your own programs. + example.c Sample code for calling the JPEG library. + structure.txt Overview of the JPEG library's internal structure. + coderules.txt Coding style rules --- please read if you contribute code. + +Please read at least usage.txt. Some information can also be found in the JPEG +FAQ (Frequently Asked Questions) article. See ARCHIVE LOCATIONS below to find +out where to obtain the FAQ article. + +If you want to understand how the JPEG code works, we suggest reading one or +more of the REFERENCES, then looking at the documentation files (in roughly +the order listed) before diving into the code. + + +OVERVIEW +======== + +This package contains C software to implement JPEG image encoding, decoding, +and transcoding. JPEG (pronounced "jay-peg") is a standardized compression +method for full-color and grayscale images. JPEG's strong suit is compressing +photographic images or other types of images that have smooth color and +brightness transitions between neighboring pixels. Images with sharp lines or +other abrupt features may not compress well with JPEG, and a higher JPEG +quality may have to be used to avoid visible compression artifacts with such +images. + +JPEG is lossy, meaning that the output pixels are not necessarily identical to +the input pixels. However, on photographic content and other "smooth" images, +very good compression ratios can be obtained with no visible compression +artifacts, and extremely high compression ratios are possible if you are +willing to sacrifice image quality (by reducing the "quality" setting in the +compressor.) + +This software implements JPEG baseline, extended-sequential, and progressive +compression processes. Provision is made for supporting all variants of these +processes, although some uncommon parameter settings aren't implemented yet. +We have made no provision for supporting the hierarchical or lossless +processes defined in the standard. + +We provide a set of library routines for reading and writing JPEG image files, +plus two sample applications "cjpeg" and "djpeg", which use the library to +perform conversion between JPEG and some other popular image file formats. +The library is intended to be reused in other applications. + +In order to support file conversion and viewing software, we have included +considerable functionality beyond the bare JPEG coding/decoding capability; +for example, the color quantization modules are not strictly part of JPEG +decoding, but they are essential for output to colormapped file formats or +colormapped displays. These extra functions can be compiled out of the +library if not required for a particular application. + +We have also included "jpegtran", a utility for lossless transcoding between +different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple +applications for inserting and extracting textual comments in JFIF files. + +The emphasis in designing this software has been on achieving portability and +flexibility, while also making it fast enough to be useful. In particular, +the software is not intended to be read as a tutorial on JPEG. (See the +REFERENCES section for introductory material.) Rather, it is intended to +be reliable, portable, industrial-strength code. We do not claim to have +achieved that goal in every aspect of the software, but we strive for it. + +We welcome the use of this software as a component of commercial products. +No royalty is required, but we do ask for an acknowledgement in product +documentation, as described under LEGAL ISSUES. + + +LEGAL ISSUES +============ + +In plain English: + +1. We don't promise that this software works. (But if you find any bugs, + please let us know!) +2. You can use this software for whatever you want. You don't have to pay us. +3. You may not pretend that you wrote this software. If you use it in a + program, you must acknowledge somewhere in your documentation that + you've used the IJG code. + +In legalese: + +The authors make NO WARRANTY or representation, either express or implied, +with respect to this software, its quality, accuracy, merchantability, or +fitness for a particular purpose. This software is provided "AS IS", and you, +its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this +software (or portions thereof) for any purpose, without fee, subject to these +conditions: +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice +unaltered; and any additions, deletions, or changes to the original files +must be clearly indicated in accompanying documentation. +(2) If only executable code is distributed, then the accompanying +documentation must state that "this software is based in part on the work of +the Independent JPEG Group". +(3) Permission for use of this software is granted only if the user accepts +full responsibility for any undesirable consequences; the authors accept +NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, +not just to the unmodified library. If you use our work, you ought to +acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name +in advertising or publicity relating to this software or products derived from +it. This software may be referred to only as "the Independent JPEG Group's +software". + +We specifically permit and encourage the use of this software as the basis of +commercial products, provided that all warranty or liability claims are +assumed by the product vendor. + + +The Unix configuration script "configure" was produced with GNU Autoconf. +It is copyright by the Free Software Foundation but is freely distributable. +The same holds for its supporting scripts (config.guess, config.sub, +ltmain.sh). Another support script, install-sh, is copyright by X Consortium +but is also freely distributable. + +The IJG distribution formerly included code to read and write GIF files. +To avoid entanglement with the Unisys LZW patent (now expired), GIF reading +support has been removed altogether, and the GIF writer has been simplified +to produce "uncompressed GIFs". This technique does not use the LZW +algorithm; the resulting GIF files are larger than usual, but are readable +by all standard GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." + + +REFERENCES +========== + +We recommend reading one or more of these references before trying to +understand the innards of the JPEG software. + +The best short technical introduction to the JPEG compression algorithm is + Wallace, Gregory K. "The JPEG Still Picture Compression Standard", + Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. +(Adjacent articles in that issue discuss MPEG motion picture compression, +applications of JPEG, and related topics.) If you don't have the CACM issue +handy, a PDF file containing a revised version of Wallace's article is +available at http://www.ijg.org/files/Wallace.JPEG.pdf. The file (actually +a preprint for an article that appeared in IEEE Trans. Consumer Electronics) +omits the sample images that appeared in CACM, but it includes corrections +and some added material. Note: the Wallace article is copyright ACM and IEEE, +and it may not be used for commercial purposes. + +A somewhat less technical, more leisurely introduction to JPEG can be found in +"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by +M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides +good explanations and example C code for a multitude of compression methods +including JPEG. It is an excellent source if you are comfortable reading C +code but don't know much about data compression in general. The book's JPEG +sample code is far from industrial-strength, but when you are ready to look +at a full implementation, you've got one here... + +The best currently available description of JPEG is the textbook "JPEG Still +Image Data Compression Standard" by William B. Pennebaker and Joan L. +Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. +Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG +standards (DIS 10918-1 and draft DIS 10918-2). + +The original JPEG standard is divided into two parts, Part 1 being the actual +specification, while Part 2 covers compliance testing methods. Part 1 is +titled "Digital Compression and Coding of Continuous-tone Still Images, +Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS +10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of +Continuous-tone Still Images, Part 2: Compliance testing" and has document +numbers ISO/IEC IS 10918-2, ITU-T T.83. + +The JPEG standard does not specify all details of an interchangeable file +format. For the omitted details we follow the "JFIF" conventions, revision +1.02. JFIF 1.02 has been adopted as an Ecma International Technical Report +and thus received a formal publication status. It is available as a free +download in PDF format from +http://www.ecma-international.org/publications/techreports/E-TR-098.htm. +A PostScript version of the JFIF document is available at +http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at +http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures. + +The TIFF 6.0 file format specification can be obtained by FTP from +ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme +found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems. +IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6). +Instead, we recommend the JPEG design proposed by TIFF Technical Note #2 +(Compression tag 7). Copies of this Note can be obtained from +http://www.ijg.org/files/. It is expected that the next revision +of the TIFF spec will replace the 6.0 JPEG design with the Note's design. +Although IJG's own code does not support TIFF/JPEG, the free libtiff library +uses our library to implement TIFF/JPEG per the Note. + + +ARCHIVE LOCATIONS +================= + +The "official" archive site for this software is www.ijg.org. +The most recent released version can always be found there in +directory "files". + +The JPEG FAQ (Frequently Asked Questions) article is a source of some +general information about JPEG. +It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/ +and other news.answers archive sites, including the official news.answers +archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/. +If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu +with body + send usenet/news.answers/jpeg-faq/part1 + send usenet/news.answers/jpeg-faq/part2 + + +FILE FORMAT WARS +================ + +The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together +with ITU-T SG16) currently promotes different formats containing the name +"JPEG" which are incompatible with original DCT-based JPEG. IJG therefore does +not support these formats (see REFERENCES). Indeed, one of the original +reasons for developing this free software was to help force convergence on +common, interoperable format standards for JPEG files. +Don't use an incompatible file format! +(In any case, our decoder will remain capable of reading existing JPEG +image files indefinitely.) + + +TO DO +===== + +Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org. +-------------------------------------------------------------------------------- +libjxl + +Copyright 2021 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libmicrohttpd +skia + +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +libpng + +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE +========================================= + +PNG Reference Library License version 2 +--------------------------------------- + +* Copyright (c) 1995-2019 The PNG Reference Library Authors. +* Copyright (c) 2018-2019 Cosmin Truta. +* Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson. +* Copyright (c) 1996-1997 Andreas Dilger. +* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + +The software is supplied "as is", without warranty of any kind, +express or implied, including, without limitation, the warranties +of merchantability, fitness for a particular purpose, title, and +non-infringement. In no event shall the Copyright owners, or +anyone distributing the software, be liable for any damages or +other liability, whether in contract, tort or otherwise, arising +from, out of, or in connection with the software, or the use or +other dealings in the software, even if advised of the possibility +of such damage. + +Permission is hereby granted to use, copy, modify, and distribute +this software, or portions hereof, for any purpose, without fee, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you + must not claim that you wrote the original software. If you + use this software in a product, an acknowledgment in the product + documentation would be appreciated, but is not required. + +2. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + + +PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35) +----------------------------------------------------------------------- + +libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are +Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are +derived from libpng-1.0.6, and are distributed according to the same +disclaimer and license as libpng-1.0.6 with the following individuals +added to the list of Contributing Authors: + + Simon-Pierre Cadieux + Eric S. Raymond + Mans Rullgard + Cosmin Truta + Gilles Vollant + James Yu + Mandar Sahastrabuddhe + Google Inc. + Vadim Barkov + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of + the library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is + with the user. + +Some files in the "contrib" directory and some configure-generated +files that are distributed with libpng have other copyright owners, and +are released under other open source licenses. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are +Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from +libpng-0.96, and are distributed according to the same disclaimer and +license as libpng-0.96, with the following individuals added to the +list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, +and are distributed according to the same disclaimer and license as +libpng-0.88, with the following individuals added to the list of +Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +Some files in the "scripts" directory have other copyright owners, +but are released under this license. + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors" +is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing +Authors and Group 42, Inc. disclaim all warranties, expressed or +implied, including, without limitation, the warranties of +merchantability and of fitness for any purpose. The Contributing +Authors and Group 42, Inc. assume no liability for direct, indirect, +incidental, special, exemplary, or consequential damages, which may +result from the use of the PNG Reference Library, even if advised of +the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute this +source code, or portions hereof, for any purpose, without fee, subject +to the following restrictions: + +1. The origin of this source code must not be misrepresented. + +2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, +without fee, and encourage the use of this source code as a component +to supporting the PNG file format in commercial products. If you use +this source code in a product, acknowledgment is not required but would +be appreciated. +-------------------------------------------------------------------------------- +libtess2 + +Copyright (C) [dates of first publication] Silicon Graphics, Inc. +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 including the dates of first publication and either this +permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +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. + +Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +be used in advertising or otherwise to promote the sale, use or other dealings in +this Software without prior written authorization from Silicon Graphics, Inc. +-------------------------------------------------------------------------------- +libwebp + +Copyright (c) 2010, Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2010 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2011 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2012 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2013 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2014 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2015 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2016 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2017 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2018 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2021 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2022 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * 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 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. +-------------------------------------------------------------------------------- +lints + +Copyright 2021, 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. + +-------------------------------------------------------------------------------- +lottie + +MIT License + +Copyright (c) [year] [fullname] + +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. + +-------------------------------------------------------------------------------- +markdown + +Copyright 2012, 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. + +-------------------------------------------------------------------------------- +material_color_utilities + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2021 Google LLC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +-------------------------------------------------------------------------------- +nested +provider + +MIT License + +Copyright (c) 2019 Remi Rousselet + +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. +-------------------------------------------------------------------------------- +node_preamble + +The MIT License (MIT) + +Copyright (c) 2015 Michael Bullington + +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. + +=== + +Copyright 2012, the Dart project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +ordered_set + +MIT License + +Copyright (c) 2017 Luan Nico + +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. + + +-------------------------------------------------------------------------------- +path_parsing + +Copyright (c) 2018 Dan Field + +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. + +-------------------------------------------------------------------------------- +perfetto + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +Copyright (c) 2017, The Android Open Source Project + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +-------------------------------------------------------------------------------- +petitparser +xml + +The MIT License + +Copyright (c) 2006-2023 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. + +-------------------------------------------------------------------------------- +platform_detect + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017 Workiva Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +-------------------------------------------------------------------------------- +rapidjson + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip-> 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. +-------------------------------------------------------------------------------- +rapidjson + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. 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. +-------------------------------------------------------------------------------- +rapidjson + +Copyright (c) 2006-2013 Alexander Chemeris + +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 product 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 AUTHOR ``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 AUTHOR 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. +-------------------------------------------------------------------------------- +rapidjson + +The above software in this distribution may have been modified by +THL A29 Limited ("Tencent Modifications"). +All Tencent Modifications are Copyright (C) 2015 THL A29 Limited. +-------------------------------------------------------------------------------- +skia + +Copyright (C) 2014 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright (c) 2014 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2005 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2006 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2006-2012 The Android Open Source Project +Copyright 2012 Mozilla Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2007 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2008 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2008 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2009 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2009-2015 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2010 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2010 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2011 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2011 Google Inc. +Copyright 2012 Mozilla Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2011 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2012 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2012 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2012 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2013 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2013 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2014 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2014 Google Inc. +Copyright 2017 ARM Ltd. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2014 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2015 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2015 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2016 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2016 Mozilla Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2016 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2017 ARM Ltd. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2017 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2018 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2018 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2018 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2018 Google, LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2018 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 Google LLC. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 Google, LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2020 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2020 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2020 Google LLC. +-------------------------------------------------------------------------------- +skia + +Copyright 2020 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2020 Google, LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2021 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2021 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2021 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2021 Google, LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2022 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2022 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2022 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2022 Google, LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2023 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2023 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2023 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2023 Google, LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2023 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2024 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2024 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +skia + +Copyright 2024 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. +-------------------------------------------------------------------------------- +spine_flutter + +Spine Runtimes License Agreement +Last updated September 24, 2021. Replaces all prior versions. + +Copyright (c) 2013-2021, Esoteric Software LLC + +Integration of the Spine Runtimes into software or otherwise creating +derivative works of the Spine Runtimes is permitted under the terms and +conditions of Section 2 of the Spine Editor License Agreement: +http://esotericsoftware.com/spine-editor-license + +Otherwise, it is permitted to integrate the Spine Runtimes into software +or otherwise create derivative works of the Spine Runtimes (collectively, +"Products"), provided that each user of the Products must obtain their own +Spine Editor license and redistribution of the Products in any form must +include this license and copyright notice. + +THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "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 ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, +BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) 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 +THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +spirv-cross + +Copyright 2014-2016,2021 The Khronos Group, Inc. + +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. +-------------------------------------------------------------------------------- +spring_animation + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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. +-------------------------------------------------------------------------------- +sprintf + +Copyright (c) 2012, Richard Eames +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY 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. + +-------------------------------------------------------------------------------- +sqlite + +The source code for SQLite is in the public domain. No claim of +copyright is made on any part of the core source code. (The +documentation and test code is a different matter - some sections of +documentation and test logic are governed by open-source licenses.) +All contributors to the SQLite core software have signed affidavits +specifically disavowing any copyright interest in the code. This means +that anybody is able to legally do anything they want with the SQLite +source code. + +There are other SQL database engines with liberal licenses that allow +the code to be broadly and freely used. But those other engines are +still governed by copyright law. SQLite is different in that copyright +law simply does not apply. + +The source code files for other SQL database engines typically begin +with a comment describing your legal rights to view and copy that +file. The SQLite source code contains no license since it is not +governed by copyright. Instead of a license, the SQLite source code +offers a blessing: + +May you do good and not evil +May you find forgiveness for yourself and forgive others +May you share freely, never taking more than you give. +-------------------------------------------------------------------------------- +synchronized + +MIT License + +Copyright (c) 2016, Alexandre Roux Tekartik. + +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. +-------------------------------------------------------------------------------- +test_api +test_core + +Copyright 2018, 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. + +-------------------------------------------------------------------------------- +tiled + +The MIT License (MIT) + +Copyright (c) + +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. + +-------------------------------------------------------------------------------- +uuid + +Copyright (c) 2021 Yulian Kuncheff + +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. +-------------------------------------------------------------------------------- +vector_math + +Copyright 2015, Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Copyright (C) 2013 Andrew Magill + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +-------------------------------------------------------------------------------- +vulkan-validation-layers + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + +File: layers/external/vma/vk_mem_alloc.h + + +Copyright (c) 2017-2022 Advanced Micro Devices, Inc. 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. +-------------------------------------------------------------------------------- +vulkan-validation-layers + +Copyright (C) 2012-2021 Yann Collet + +BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED 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. +-------------------------------------------------------------------------------- +vulkan-validation-layers +vulkan_memory_allocator + +Copyright (c) 2017-2022 Advanced Micro Devices, Inc. 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. +-------------------------------------------------------------------------------- +web + +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. + +-------------------------------------------------------------------------------- +web_ffi_fork + +Copyright 2021 Eric Prokop und Nils Wieler Hard- und Softwareentwicklung GbR + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY 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. +-------------------------------------------------------------------------------- +web_locale_keymap + +Copyright (c) 2022 Google LLC + +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. +-------------------------------------------------------------------------------- +web_socket_channel + +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. + +-------------------------------------------------------------------------------- +webkit_inspection_protocol + +Copyright 2013, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +win32 + +Copyright 2019, Dart | Windows. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +xxhash + +Copyright (C) 2012-2016, Yann Collet + +BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED 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. +-------------------------------------------------------------------------------- +xxhash + +Copyright (C) 2012-2016, Yann Collet. + +BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED 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. +-------------------------------------------------------------------------------- +yaml + +Copyright (c) 2014, the Dart project authors. +Copyright (c) 2006, Kirill Simonov. + +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. + +-------------------------------------------------------------------------------- +zlib + +Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +zlib + +Copyright (C) 1998-2005 Gilles Vollant +-------------------------------------------------------------------------------- +zlib + +Copyright (C) 2017 ARM, Inc. +Copyright 2017 The Chromium 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 Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +zlib + +Copyright 2017 The Chromium 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 Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +zlib + +Copyright 2018 The Chromium 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 Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +zlib + +Copyright 2019 The Chromium 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 Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +zlib + +Copyright 2022 The Chromium 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 Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +zlib + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +zlib + +version 1.2.12, March 27th, 2022 + +Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/audio/music/bg_music.ogg b/docs/1.18.0/_static/apps/examples/assets/assets/audio/music/bg_music.ogg new file mode 100644 index 000000000..93db1d655 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/audio/music/bg_music.ogg differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/audio/sfx/fire_1.mp3 b/docs/1.18.0/_static/apps/examples/assets/assets/audio/sfx/fire_1.mp3 new file mode 100644 index 000000000..7b891722d Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/audio/sfx/fire_1.mp3 differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/audio/sfx/fire_2.mp3 b/docs/1.18.0/_static/apps/examples/assets/assets/audio/sfx/fire_2.mp3 new file mode 100644 index 000000000..60c13004d Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/audio/sfx/fire_2.mp3 differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/0x72_DungeonTilesetII_v1.4.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/0x72_DungeonTilesetII_v1.4.png new file mode 100644 index 000000000..939a5e86d Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/0x72_DungeonTilesetII_v1.4.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/Car.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/Car.png new file mode 100644 index 000000000..7b1161782 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/Car.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/chopper.json b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/chopper.json new file mode 100644 index 000000000..21840a97f --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/chopper.json @@ -0,0 +1,52 @@ +{ "frames": { + "chopper 0.aseprite": { + "frame": { "x": 0, "y": 0, "w": 48, "h": 48 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 48, "h": 48 }, + "sourceSize": { "w": 48, "h": 48 }, + "duration": 100 + }, + "chopper 1.aseprite": { + "frame": { "x": 48, "y": 0, "w": 48, "h": 48 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 48, "h": 48 }, + "sourceSize": { "w": 48, "h": 48 }, + "duration": 100 + }, + "chopper 2.aseprite": { + "frame": { "x": 96, "y": 0, "w": 48, "h": 48 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 48, "h": 48 }, + "sourceSize": { "w": 48, "h": 48 }, + "duration": 100 + }, + "chopper 3.aseprite": { + "frame": { "x": 144, "y": 0, "w": 48, "h": 48 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 48, "h": 48 }, + "sourceSize": { "w": 48, "h": 48 }, + "duration": 100 + } + }, + "meta": { + "app": "http://www.aseprite.org/", + "version": "1.3-dev", + "image": "/home/erick/projetos/gamedev/airplane-resource-pack/chopper.png", + "format": "RGBA8888", + "size": { "w": 192, "h": 48 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "body", "opacity": 255, "blendMode": "normal" }, + { "name": "rotor", "opacity": 255, "blendMode": "normal" }, + { "name": "stabilizer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } +} diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/chopper.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/chopper.png new file mode 100644 index 000000000..b539e7f92 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/chopper.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/creature.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/creature.png new file mode 100644 index 000000000..e430b9641 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/creature.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/ember.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/ember.png new file mode 100644 index 000000000..a5858eb5c Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/ember.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/lottieLogo.json b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/lottieLogo.json new file mode 100644 index 000000000..51dbe4f0f --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/lottieLogo.json @@ -0,0 +1 @@ +{"assets":[],"layers":[{"ddd":0,"ind":0,"ty":1,"nm":"MASTER","ks":{"o":{"k":0},"r":{"k":0},"p":{"k":[214.457,347.822,0]},"a":{"k":[60,60,0]},"s":{"k":[100,100,100]}},"ao":0,"sw":120,"sh":120,"sc":"#ffffff","ip":12,"op":179,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":1,"ty":4,"nm":"S5-Y 4","parent":0,"ks":{"o":{"k":100},"r":{"k":-89.1},"p":{"k":[53.205,131.606,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[142.038,29.278],[131.282,21.807]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":76,"s":[87],"e":[50.633]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":79,"s":[50.633],"e":[0]},{"t":83}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":76,"s":[100],"e":[75.856]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":79,"s":[75.856],"e":[0]},{"t":83}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":76,"op":84,"st":40,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"S4-Y 4","parent":0,"ks":{"o":{"k":100},"r":{"k":-89.1},"p":{"k":[53.205,131.606,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[142.183,-5.112],[130.029,5.016]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":76,"s":[87],"e":[43.833]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":79,"s":[43.833],"e":[0]},{"t":83}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":76,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":79,"s":[66.356],"e":[0]},{"t":83}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":76,"op":84,"st":40,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"S3-Y 4","parent":0,"ks":{"o":{"k":100},"r":{"k":-89.1},"p":{"k":[53.205,131.606,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[147.699,13.025],[133.195,13.21]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":76,"s":[87],"e":[42.133]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":79,"s":[42.133],"e":[0]},{"t":83}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":76,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":79,"s":[66.356],"e":[0]},{"t":83}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":76,"op":84,"st":40,"bm":0,"sr":1},{"ddd":0,"ind":4,"ty":4,"nm":"S5-Y 3","parent":0,"ks":{"o":{"k":100},"r":{"k":97.9},"p":{"k":[58.205,-39.394,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[145.677,22.22],[134.922,14.749]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":75,"s":[87],"e":[50.633]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":78,"s":[50.633],"e":[0]},{"t":82}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":75,"s":[100],"e":[75.856]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":78,"s":[75.856],"e":[0]},{"t":82}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":75,"op":83,"st":39,"bm":0,"sr":1},{"ddd":0,"ind":5,"ty":4,"nm":"S4-Y 3","parent":0,"ks":{"o":{"k":100},"r":{"k":97.9},"p":{"k":[58.205,-39.394,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[144.429,-5.397],[132.275,4.731]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":75,"s":[87],"e":[43.833]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":78,"s":[43.833],"e":[0]},{"t":82}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":75,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":78,"s":[66.356],"e":[0]},{"t":82}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":75,"op":83,"st":39,"bm":0,"sr":1},{"ddd":0,"ind":6,"ty":4,"nm":"S3-Y 3","parent":0,"ks":{"o":{"k":100},"r":{"k":97.9},"p":{"k":[58.205,-39.394,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[149.624,8.244],[136.648,10.156]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":75,"s":[87],"e":[42.133]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":78,"s":[42.133],"e":[0]},{"t":82}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":75,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":78,"s":[66.356],"e":[0]},{"t":82}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":75,"op":83,"st":39,"bm":0,"sr":1},{"ddd":0,"ind":7,"ty":4,"nm":"S13","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[128,3.65],[78.25,3.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":85,"s":[87],"e":[21.233]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":90,"s":[21.233],"e":[0]},{"t":94}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":85,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":90,"s":[66.356],"e":[0]},{"t":94}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":1.5},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":85,"op":95,"st":49,"bm":0,"sr":1},{"ddd":0,"ind":8,"ty":4,"nm":"S12","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[119.25,-20.05],[63.5,-20.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":84,"s":[87],"e":[21.233]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":87,"s":[21.233],"e":[0]},{"t":91}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":84,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":87,"s":[66.356],"e":[0]},{"t":91}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":1.5},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":84,"op":94,"st":48,"bm":0,"sr":1},{"ddd":0,"ind":9,"ty":4,"nm":"S11","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[119.5,-45.05],[82.75,-44.75]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":80,"s":[87],"e":[21.233]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":83,"s":[21.233],"e":[0]},{"t":87}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":80,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":83,"s":[66.356],"e":[0]},{"t":87}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":1.5},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":80,"op":90,"st":44,"bm":0,"sr":1},{"ddd":0,"ind":10,"ty":4,"nm":"S5-Y 2","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[169.5,18.073],[137.481,11.365]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":97,"s":[87],"e":[50.633]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":100,"s":[50.633],"e":[0]},{"t":107}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":97,"s":[100],"e":[75.856]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":100,"s":[75.856],"e":[0]},{"t":107}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":97,"op":107,"st":61,"bm":0,"sr":1},{"ddd":0,"ind":11,"ty":4,"nm":"S4-Y 2","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[156.45,-23.05],[132,2.75]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":97,"s":[87],"e":[43.833]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":100,"s":[43.833],"e":[0]},{"t":107}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":97,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":100,"s":[66.356],"e":[0]},{"t":107}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":97,"op":107,"st":61,"bm":0,"sr":1},{"ddd":0,"ind":12,"ty":4,"nm":"S3-Y 2","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[166.731,-7.927],[136.731,7.115]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":97,"s":[87],"e":[42.133]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":100,"s":[42.133],"e":[0]},{"t":107}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":97,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":100,"s":[66.356],"e":[0]},{"t":107}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":97,"op":107,"st":61,"bm":0,"sr":1},{"ddd":0,"ind":13,"ty":4,"nm":"S6-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-87.5,20.95],[-48.75,54.75]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[87],"e":[43.933]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":57,"s":[43.933],"e":[0]},{"t":64}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[100],"e":[70.456]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":57,"s":[70.456],"e":[0]},{"t":64}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":54,"op":64,"st":18,"bm":0,"sr":1},{"ddd":0,"ind":14,"ty":4,"nm":"S5-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-94.5,37.073],[-48.769,55.365]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[87],"e":[50.633]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":57,"s":[50.633],"e":[0]},{"t":64}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[100],"e":[75.856]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":57,"s":[75.856],"e":[0]},{"t":64}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":54,"op":64,"st":18,"bm":0,"sr":1},{"ddd":0,"ind":15,"ty":4,"nm":"S4-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.45,21.95],[-32.75,55.75]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[87],"e":[43.833]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":57,"s":[43.833],"e":[0]},{"t":64}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":57,"s":[66.356],"e":[0]},{"t":64}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":54,"op":64,"st":18,"bm":0,"sr":1},{"ddd":0,"ind":16,"ty":4,"nm":"S3-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[16.231,39.073],[-32.769,57.365]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[87],"e":[42.133]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":57,"s":[42.133],"e":[0]},{"t":64}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":57,"s":[66.356],"e":[0]},{"t":64}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":2},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":54,"op":64,"st":18,"bm":0,"sr":1},{"ddd":0,"ind":17,"ty":4,"nm":"S8","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[-0.148,14.256],[10.476,0],[0,0]],"o":[[0,0],[-8.551,-8.263],[-21.454,0],[0,0]],"v":[[-3,35.95],[-1.352,-6.756],[-32.046,-20.579],[-42.25,4.25]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":65,"s":[87],"e":[21.233]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":70,"s":[21.233],"e":[0]},{"t":75}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":65,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":70,"s":[66.356],"e":[0]},{"t":75}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":1.5},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":65,"op":75,"st":29,"bm":0,"sr":1},{"ddd":0,"ind":18,"ty":4,"nm":"S7","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[27,1.45],[31.046,-1.421],[0,0]],"o":[[-27,-1.45],[-26.426,1.21],[0,0]],"v":[[34.5,-13.05],[-35.046,-35.579],[-62.25,-5.75]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":65,"s":[87],"e":[21.233]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":70,"s":[21.233],"e":[0]},{"t":75}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":65,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":70,"s":[66.356],"e":[0]},{"t":75}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":1.5},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":65,"op":75,"st":29,"bm":0,"sr":1},{"ddd":0,"ind":19,"ty":4,"nm":"S2-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[1.9,-10.768],[1,-19]],"o":[[0,0],[-3.167,17.951],[-1,19]],"v":[[-67.25,-105.5],[-72.333,-84.201],[-76.5,-37.75]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":29,"s":[87],"e":[25.333]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":33,"s":[25.333],"e":[0]},{"t":36}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":29,"s":[100],"e":[69.056]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":33,"s":[69.056],"e":[0]},{"t":36}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":1.5},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":30,"op":37,"st":-7,"bm":0,"sr":1},{"ddd":0,"ind":20,"ty":4,"nm":"S1-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[25.043,45.678,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[1.9,-10.768],[1,-19]],"o":[[0,0],[-3.167,17.951],[-1,19]],"v":[[-67.125,-112],[-75.458,-89.951],[-80.375,-39.25]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":29,"s":[87],"e":[37.533]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":33,"s":[37.533],"e":[0]},{"t":36}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":29,"s":[100],"e":[66.356]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":33,"s":[66.356],"e":[0]},{"t":36}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":1.5},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":30,"op":37,"st":-7,"bm":0,"sr":1},{"ddd":0,"ind":21,"ty":4,"nm":"Dot1","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.823,"y":0},"n":"0p833_0p833_0p823_0","t":-3,"s":[295.771,108.994,0],"e":[35.771,108.994,0],"to":[0,0,0],"ti":[0,0,0]},{"t":16}]},"a":{"k":[196.791,266.504,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"k":[9.4,9.4]},"p":{"k":[0.8,-0.5]},"nm":"Ellipse Path 1"},{"ty":"fl","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"nm":"Fill 1"},{"ty":"tr","p":{"k":[196,267],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1"}],"ip":-5,"op":17,"st":-36,"bm":0,"sr":1},{"ddd":0,"ind":22,"ty":4,"nm":"L-B","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[39.043,45.678,0]},"a":{"k":[250,250,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[25.671,-4.167],[1.456,6.902],[-8.481,1.863],[-47.562,13.01],[-0.501,0.133],[-71.423,-2.315]],"o":[[0,0],[-8.224,1.335],[-1.456,-6.903],[23.817,-5.233],[0.16,-0.044],[0.501,-0.133],[0,0]],"v":[[-8.837,-58.229],[-35.834,33.662],[-51.688,23.148],[-41.174,7.293],[51.797,44.178],[53.188,43.741],[140.394,43.672]],"c":false}},"nm":"Path 1"},{"ty":"st","fillEnabled":true,"c":{"k":[0,0.48,0.53,1]},"o":{"k":100},"w":{"k":9.194},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[166.029,270.643],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8"},{"ty":"tm","s":{"k":[{"i":{"x":[0.703],"y":[0.821]},"o":{"x":[0.167],"y":[0.167]},"n":["0p703_0p821_0p167_0p167"],"t":18,"s":[80],"e":[50]},{"i":{"x":[0.263],"y":[1]},"o":{"x":[0.037],"y":[0.168]},"n":["0p263_1_0p037_0p168"],"t":23,"s":[50],"e":[30]},{"t":55}],"ix":1},"e":{"k":[{"i":{"x":[0.337],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p337_1_0p167_0p167"],"t":18,"s":[81],"e":[73.4]},{"t":29}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"}],"ip":18,"op":179,"st":8,"bm":0,"sr":1},{"ddd":0,"ind":23,"ty":4,"nm":"L-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[39.043,45.678,0]},"a":{"k":[250,250,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[25.671,-4.167],[1.456,6.902],[-8.481,1.863],[-47.562,13.01],[-0.501,0.133],[-71.423,-2.315]],"o":[[0,0],[-8.224,1.335],[-1.456,-6.903],[23.817,-5.233],[0.16,-0.044],[0.501,-0.133],[0,0]],"v":[[-8.837,-58.229],[-35.834,33.662],[-51.688,23.148],[-41.174,7.293],[51.797,44.178],[53.188,43.741],[140.394,43.672]],"c":false}},"nm":"Path 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":8.4},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[166.029,270.643],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8"},{"ty":"tm","s":{"k":[{"i":{"x":[0.703],"y":[0.857]},"o":{"x":[0.167],"y":[0.167]},"n":["0p703_0p857_0p167_0p167"],"t":16,"s":[80],"e":[50]},{"i":{"x":[0.938],"y":[1]},"o":{"x":[0.333],"y":[0.202]},"n":["0p938_1_0p333_0p202"],"t":20,"s":[50],"e":[0]},{"t":28}],"ix":1},"e":{"k":[{"i":{"x":[0.337],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p337_1_0p167_0p167"],"t":16,"s":[81],"e":[73.4]},{"t":27}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"}],"ip":16,"op":179,"st":8,"bm":0,"sr":1},{"ddd":0,"ind":24,"ty":1,"nm":"N","parent":0,"ks":{"o":{"k":0},"r":{"k":0},"p":{"k":[{"i":{"x":0.26,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p26_1_0p167_0p167","t":28,"s":[-33.667,8.182,0],"e":[-33.667,-72.818,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.74,"y":0},"n":"0p833_0p833_0p74_0","t":40,"s":[-33.667,-72.818,0],"e":[-33.667,102.057,0],"to":[0,0,0],"ti":[0,0,0]},{"t":54}]},"a":{"k":[60,60,0]},"s":{"k":[100,100,100]}},"ao":0,"sw":120,"sh":120,"sc":"#ffffff","ip":28,"op":54,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":25,"ty":4,"nm":"Dot-Y","parent":24,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":28,"s":[39.875,60,0],"e":[79.375,60,0],"to":[6.58333349227905,0,0],"ti":[-6.58333349227905,0,0]},{"t":54}]},"a":{"k":[196.791,266.504,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"k":[9.4,9.4]},"p":{"k":[0.8,-0.5]},"nm":"Ellipse Path 1"},{"ty":"fl","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"nm":"Fill 1"},{"ty":"tr","p":{"k":[196,267],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1"}],"ip":28,"op":54,"st":4,"bm":0,"sr":1},{"ddd":0,"ind":26,"ty":4,"nm":"T1a-B","parent":36,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[250,250,0]},"a":{"k":[250,250,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[-0.5,9.501],[-0.048,5.655],[0.054,0.06],[0.946,1.486],[-9.967,8.05],[-40.546,0]],"o":[[0.031,-0.594],[0.076,-8.978],[-1.161,-1.3],[-5.939,-9.327],[24.677,-19.929],[0,0]],"v":[[-30.72,63.761],[-30.741,45.192],[-37.397,27.014],[-40.698,22.661],[-37.873,-7.117],[49.506,11.559]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":24.9,"ix":1},"e":{"k":[{"i":{"x":[0.673],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p673_1_0p167_0p167"],"t":70,"s":[24.9],"e":[89.1]},{"t":84}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":9.194},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[227.677,234.375],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9"}],"ip":70,"op":179,"st":17,"bm":0,"sr":1},{"ddd":0,"ind":27,"ty":4,"nm":"T2a-B","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[39.043,45.678,0]},"a":{"k":[250,250,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.681,-29.992],[-1.681,29.992]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.06],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p06_1_0p167_0p167"],"t":75,"s":[50],"e":[0]},{"t":85}],"ix":1},"e":{"k":[{"i":{"x":[0.06],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p06_1_0p167_0p167"],"t":75,"s":[50],"e":[100]},{"t":85}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[0,0.48,0.53,1]},"o":{"k":100},"w":{"k":9.194},"lc":3,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[277.698,247.258],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7"}],"ip":75,"op":179,"st":15,"bm":0,"sr":1},{"ddd":0,"ind":28,"ty":4,"nm":"T1a-Y 2","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":56,"s":[39.043,48.678,0],"e":[39.043,45.678,0],"to":[0,0,0],"ti":[0,0,0]},{"t":64}]},"a":{"k":[250,250,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[-0.5,9.501],[-0.048,5.655],[0.054,0.06],[0.946,1.486],[-9.967,8.05],[-40.546,0]],"o":[[0.031,-0.594],[0.076,-8.978],[-1.161,-1.3],[-5.939,-9.327],[24.677,-19.929],[0,0]],"v":[[-30.72,63.761],[-30.741,45.192],[-37.397,27.014],[-40.698,22.661],[-37.873,-7.117],[49.506,11.559]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.301],"y":[0]},"n":["0p833_1_0p301_0"],"t":54,"s":[0],"e":[24.9]},{"t":70}],"ix":1},"e":{"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.301],"y":[0]},"n":["0p667_1_0p301_0"],"t":54,"s":[0],"e":[100]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[0,0.48,0.53,1]},"o":{"k":100},"w":{"k":8.4},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[227.677,234.375],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9"}],"ip":59,"op":179,"st":12,"bm":0,"sr":1},{"ddd":0,"ind":29,"ty":4,"nm":"O-B","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":31,"s":[-62.792,73.057,0],"e":[-53.792,7.557,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.638,"y":1},"o":{"x":0.167,"y":0.198},"n":"0p638_1_0p167_0p198","t":35.257,"s":[-53.792,7.557,0],"e":[-33.667,-72.818,0],"to":[0,0,0],"ti":[-19.1562919616699,1.73831975460052,0]},{"i":{"x":0.795,"y":1},"o":{"x":0.523,"y":0},"n":"0p795_1_0p523_0","t":44,"s":[-33.667,-72.818,0],"e":[-14.167,102.182,0],"to":[16.2075271606445,-1.47073686122894,0],"ti":[0,0,0]},{"i":{"x":0.348,"y":1},"o":{"x":0.18,"y":0},"n":"0p348_1_0p18_0","t":54,"s":[-14.167,102.182,0],"e":[-14.167,59.182,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.27,"y":1},"o":{"x":0.693,"y":0},"n":"0p27_1_0p693_0","t":63,"s":[-14.167,59.182,0],"e":[-14.167,62.182,0],"to":[0,0,0],"ti":[0,0,0]},{"t":73}]},"a":{"k":[196.791,266.504,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":54,"s":[3,3],"e":[44.6,44.6]},{"t":61}]},"p":{"k":[0.8,-0.5]},"nm":"Ellipse Path 1"},{"ty":"st","fillEnabled":true,"c":{"k":[0,0.48,0.53,1]},"o":{"k":100},"w":{"k":9.194},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[196,267],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[0],"e":[30]},{"i":{"x":[0.432],"y":[1]},"o":{"x":[0.167],"y":[1.124]},"n":["0p432_1_0p167_1p124"],"t":63,"s":[30],"e":[39.9]},{"t":91}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[100],"e":[88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":63,"s":[88],"e":[88]},{"t":91}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"}],"ip":54,"op":179,"st":4,"bm":0,"sr":1},{"ddd":0,"ind":30,"ty":4,"nm":"O-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":31,"s":[-62.792,73.057,0],"e":[-53.792,7.557,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.638,"y":1},"o":{"x":0.167,"y":0.198},"n":"0p638_1_0p167_0p198","t":35.257,"s":[-53.792,7.557,0],"e":[-33.667,-72.818,0],"to":[0,0,0],"ti":[-19.1562919616699,1.73831975460052,0]},{"i":{"x":0.795,"y":1},"o":{"x":0.523,"y":0},"n":"0p795_1_0p523_0","t":44,"s":[-33.667,-72.818,0],"e":[-14.167,102.182,0],"to":[16.2075271606445,-1.47073686122894,0],"ti":[0,0,0]},{"i":{"x":0.348,"y":1},"o":{"x":0.18,"y":0},"n":"0p348_1_0p18_0","t":54,"s":[-14.167,102.182,0],"e":[-14.167,59.182,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.27,"y":1},"o":{"x":0.693,"y":0},"n":"0p27_1_0p693_0","t":63,"s":[-14.167,59.182,0],"e":[-14.167,62.182,0],"to":[0,0,0],"ti":[0,0,0]},{"t":73}]},"a":{"k":[196.791,266.504,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":54,"s":[3,3],"e":[44.6,44.6]},{"t":61}]},"p":{"k":[0.8,-0.5]},"nm":"Ellipse Path 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":8.8},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[196,267],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1"}],"ip":54,"op":179,"st":4,"bm":0,"sr":1},{"ddd":0,"ind":31,"ty":4,"nm":"T1b-B","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[39.043,45.678,0]},"a":{"k":[250,250,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.768,-25.966],[-1.768,25.966]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":0,"ix":1},"e":{"k":[{"i":{"x":[0.21],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p21_1_0p167_0p167"],"t":81,"s":[11.7],"e":[100]},{"t":88}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":9.194},"lc":2,"lj":2,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[242.756,265.581],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10"}],"ip":81,"op":179,"st":26,"bm":0,"sr":1},{"ddd":0,"ind":32,"ty":4,"nm":"T1b-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[39.043,45.678,0]},"a":{"k":[250,250,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.768,-25.966],[-1.768,25.966]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":70,"s":[0],"e":[0]},{"t":75}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":70,"s":[11.7],"e":[100]},{"t":75}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[0,0.48,0.53,1]},"o":{"k":100},"w":{"k":8.4},"lc":2,"lj":2,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[242.756,265.581],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10"}],"ip":70,"op":161,"st":15,"bm":0,"sr":1},{"ddd":0,"ind":33,"ty":4,"nm":"T2b-B","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[39.043,45.678,0]},"a":{"k":[250,250,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[246.65,213.814],[340.956,213.628]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_1_0p167_0p167"],"t":82,"s":[29],"e":[0]},{"t":91}],"ix":1},"e":{"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_1_0p167_0p167"],"t":82,"s":[41.1],"e":[66.5]},{"t":91}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[0,0.48,0.53,1]},"o":{"k":100},"w":{"k":9.194},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5"}],"ip":82,"op":179,"st":-17,"bm":0,"sr":1},{"ddd":0,"ind":34,"ty":4,"nm":"T2a-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[39.043,45.678,0]},"a":{"k":[250,250,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.681,-29.992],[-1.681,29.992]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.06],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p06_1_0p167_0p167"],"t":72,"s":[50],"e":[0]},{"t":82}],"ix":1},"e":{"k":[{"i":{"x":[0.06],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p06_1_0p167_0p167"],"t":72,"s":[50],"e":[100]},{"t":82}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":9.194},"lc":3,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[277.698,247.258],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7"}],"ip":72,"op":89,"st":12,"bm":0,"sr":1},{"ddd":0,"ind":35,"ty":4,"nm":"T2b-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[39.043,45.678,0]},"a":{"k":[250,250,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[246.65,213.814],[340.956,213.628]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_1_0p167_0p167"],"t":76,"s":[29],"e":[0]},{"t":85}],"ix":1},"e":{"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_1_0p167_0p167"],"t":76,"s":[41.1],"e":[66.5]},{"t":85}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":9.194},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5"}],"ip":76,"op":92,"st":-23,"bm":0,"sr":1},{"ddd":0,"ind":36,"ty":4,"nm":"T1a-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":56,"s":[39.043,48.678,0],"e":[39.043,45.678,0],"to":[0,0,0],"ti":[0,0,0]},{"t":64}]},"a":{"k":[250,250,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[-0.5,9.501],[-0.048,5.655],[0.054,0.06],[0.946,1.486],[-9.967,8.05],[-40.546,0]],"o":[[0.031,-0.594],[0.076,-8.978],[-1.161,-1.3],[-5.939,-9.327],[24.677,-19.929],[0,0]],"v":[[-30.72,63.761],[-30.741,45.192],[-37.397,27.014],[-40.698,22.661],[-37.873,-7.117],[49.506,11.559]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.301],"y":[0]},"n":["0p833_1_0p301_0"],"t":54,"s":[0],"e":[24.9]},{"t":70}],"ix":1},"e":{"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.301],"y":[0]},"n":["0p667_1_0p301_0"],"t":54,"s":[0],"e":[100]},{"t":74}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":8.4},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[227.677,234.375],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9"}],"ip":59,"op":156,"st":12,"bm":0,"sr":1},{"ddd":0,"ind":37,"ty":4,"nm":"E1-B","parent":38,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[344.672,214.842,0]},"a":{"k":[344.672,214.842,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-13.664,-0.145],[62.163,0.29]],"c":false}},"nm":"Path 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":9.562},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[344.672,214.842],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2"},{"ty":"tm","s":{"k":[{"i":{"x":[0.12],"y":[0.12]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_0p12_0p167_0p167"],"t":84,"s":[0],"e":[0]},{"t":93}],"ix":1},"e":{"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_1_0p167_0p167"],"t":84,"s":[0],"e":[37.5]},{"t":93}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"}],"ip":84,"op":179,"st":84,"bm":0,"sr":1},{"ddd":0,"ind":38,"ty":4,"nm":"E1-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[{"i":{"x":0.12,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p12_1_0p167_0p167","t":79,"s":[113.715,9.146,0],"e":[137.715,9.146,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.12,"y":1},"o":{"x":0.167,"y":0},"n":"0p12_1_0p167_0","t":88,"s":[137.715,9.146,0],"e":[133.715,9.146,0],"to":[0,0,0],"ti":[0,0,0]},{"t":92}]},"a":{"k":[344.672,214.842,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-13.664,-0.145],[62.163,0.29]],"c":false}},"nm":"Path 1"},{"ty":"st","fillEnabled":true,"c":{"k":[0,0.48,0.53,1]},"o":{"k":100},"w":{"k":8.4},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[344.672,214.842],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2"},{"ty":"tm","s":{"k":[{"i":{"x":[0.12],"y":[0.12]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_0p12_0p167_0p167"],"t":79,"s":[0],"e":[0]},{"t":88}],"ix":1},"e":{"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_1_0p167_0p167"],"t":79,"s":[0],"e":[37.5]},{"t":88}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"}],"ip":79,"op":94,"st":79,"bm":0,"sr":1},{"ddd":0,"ind":39,"ty":4,"nm":"E2-B","parent":40,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[332.05,237.932,0]},"a":{"k":[332.05,237.932,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-26.67,-0.283],[99.171,0.066]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.12],"y":[0.12]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_0p12_0p167_0p167"],"t":86,"s":[0],"e":[0]},{"t":95}],"ix":1},"e":{"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_1_0p167_0p167"],"t":86,"s":[0],"e":[43]},{"t":95}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":9.562},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[331.664,238.14],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3"}],"ip":86,"op":179,"st":86,"bm":0,"sr":1},{"ddd":0,"ind":40,"ty":4,"nm":"E2-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[{"i":{"x":0.12,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p12_1_0p167_0p167","t":83,"s":[109.092,33.61,0],"e":[121.092,33.61,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.12,"y":0.12},"o":{"x":0.167,"y":0.167},"n":"0p12_0p12_0p167_0p167","t":92,"s":[121.092,33.61,0],"e":[121.092,33.61,0],"to":[0,0,0],"ti":[0,0,0]},{"t":96}]},"a":{"k":[332.05,237.932,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-26.67,-0.283],[99.171,0.066]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.12],"y":[0.12]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_0p12_0p167_0p167"],"t":83,"s":[0],"e":[0]},{"t":92}],"ix":1},"e":{"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_1_0p167_0p167"],"t":83,"s":[0],"e":[43]},{"t":92}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[0,0.48,0.53,1]},"o":{"k":100},"w":{"k":8.4},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[331.664,238.14],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3"}],"ip":83,"op":96,"st":83,"bm":0,"sr":1},{"ddd":0,"ind":41,"ty":4,"nm":"I-B","parent":42,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[303.802,282.182,0]},"a":{"k":[303.802,282.182,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.859,-21.143],[-4.359,70.392]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.12],"y":[0.12]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_0p12_0p167_0p167"],"t":81,"s":[0],"e":[0]},{"t":91}],"ix":1},"e":{"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_1_0p167_0p167"],"t":81,"s":[0],"e":[45.7]},{"t":91}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":9.194},"lc":3,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[304.135,282.409],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6"}],"ip":81,"op":179,"st":18,"bm":0,"sr":1},{"ddd":0,"ind":42,"ty":4,"nm":"I-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[{"i":{"x":0.12,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p12_1_0p167_0p167","t":78,"s":[93.594,62.861,0],"e":[92.626,82.829,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.12,"y":1},"o":{"x":0.167,"y":0},"n":"0p12_1_0p167_0","t":88,"s":[92.626,82.829,0],"e":[92.844,77.861,0],"to":[0,0,0],"ti":[0,0,0]},{"t":92}]},"a":{"k":[303.802,282.182,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.859,-21.143],[-4.359,70.392]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.12],"y":[0.12]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_0p12_0p167_0p167"],"t":78,"s":[0],"e":[0]},{"t":88}],"ix":1},"e":{"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p12_1_0p167_0p167"],"t":78,"s":[0],"e":[45.7]},{"t":88}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[0,0.48,0.53,1]},"o":{"k":100},"w":{"k":8.4},"lc":3,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[304.135,282.409],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6"}],"ip":78,"op":93,"st":15,"bm":0,"sr":1},{"ddd":0,"ind":43,"ty":4,"nm":"E3-B","parent":44,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[345.189,261.801,0]},"a":{"k":[345.124,261.801,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-13.664,-0.145],[75.663,0.29]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":92,"s":[0],"e":[0]},{"t":97}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":92,"s":[0],"e":[31.6]},{"t":97}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 2"},{"ty":"st","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"w":{"k":9.562},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[344.674,261.877],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1"}],"ip":92,"op":179,"st":29,"bm":0,"sr":1},{"ddd":0,"ind":44,"ty":4,"nm":"E3-Y","parent":0,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":84,"s":[119.167,57.479,0],"e":[137.167,57.479,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"n":"0p667_1_0p167_0","t":92,"s":[137.167,57.479,0],"e":[134.167,57.479,0],"to":[0,0,0],"ti":[0,0,0]},{"t":96}]},"a":{"k":[345.124,261.801,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-13.664,-0.145],[75.663,0.29]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":84,"s":[0],"e":[0]},{"t":92}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":84,"s":[0],"e":[31.6]},{"t":92}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 2"},{"ty":"st","fillEnabled":true,"c":{"k":[0,0.48,0.53,1]},"o":{"k":100},"w":{"k":9.562},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[344.674,261.877],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1"}],"ip":84,"op":102,"st":21,"bm":0,"sr":1},{"ddd":0,"ind":45,"ty":4,"nm":"Dot-Y","parent":46,"ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[{"i":{"x":0,"y":0.812},"o":{"x":0,"y":0},"n":"0_0p812_0_0","t":96,"s":[43.263,59.75,0],"e":[62.513,59.75,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.708,"y":1},"o":{"x":0.39,"y":0.707},"n":"0p708_1_0p39_0p707","t":108,"s":[62.513,59.75,0],"e":[63.763,59.75,0],"to":[0,0,0],"ti":[0,0,0]},{"t":115}]},"a":{"k":[196.791,266.504,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"k":[9.2,9.2]},"p":{"k":[0.8,-0.5]},"nm":"Ellipse Path 1"},{"ty":"fl","fillEnabled":true,"c":{"k":[1,1,1,1]},"o":{"k":100},"nm":"Fill 1"},{"ty":"tr","p":{"k":[196,267],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1"}],"ip":96,"op":182,"st":65,"bm":0,"sr":1},{"ddd":0,"ind":46,"ty":1,"nm":"Bncr","parent":0,"ks":{"o":{"k":0},"r":{"k":0},"p":{"k":[{"i":{"x":0.18,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p18_1_0p167_0p167","t":96,"s":[164.782,57.473,0],"e":[164.782,55.473,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.82,"y":0},"n":"0p833_0p833_0p82_0","t":99,"s":[164.782,55.473,0],"e":[164.782,57.473,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.18,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p18_1_0p167_0p167","t":102,"s":[164.782,57.473,0],"e":[164.782,56.909,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.82,"y":0},"n":"0p833_0p833_0p82_0","t":105,"s":[164.782,56.909,0],"e":[164.782,57.473,0],"to":[0,0,0],"ti":[0,0,0]},{"t":108}]},"a":{"k":[60,60,0]},"s":{"k":[100,100,100]}},"ao":0,"sw":120,"sh":120,"sc":"#ffffff","ip":96,"op":182,"st":15,"bm":0,"sr":1},{"ddd":0,"ind":47,"ty":4,"nm":"BG","ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[187.5,333.5,0]},"a":{"k":[0,0,0]},"s":{"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"k":[375,667]},"p":{"k":[0,0]},"r":{"k":0},"nm":"Rectangle Path 1"},{"ty":"fl","fillEnabled":true,"c":{"k":[0,0.82,0.76,1]},"o":{"k":100},"nm":"Fill 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1"}],"ip":0,"op":179,"st":0,"bm":0,"sr":1}],"v":"4.4.26","ddd":0,"ip":0,"op":179,"fr":30,"w":375,"h":667} \ No newline at end of file diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/robot-idle.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/robot-idle.png new file mode 100644 index 000000000..bf1075c97 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/robot-idle.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/robot.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/robot.png new file mode 100644 index 000000000..2dacfd362 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/animations/robot.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/bomb_ptero.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/bomb_ptero.png new file mode 100644 index 000000000..f87a6e88b Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/bomb_ptero.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/boom.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/boom.png new file mode 100644 index 000000000..2127917d8 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/boom.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/buttons.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/buttons.png new file mode 100644 index 000000000..f188009f4 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/buttons.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/dialogue_box.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/dialogue_box.png new file mode 100644 index 000000000..bf90772d4 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/dialogue_box.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/flame.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/flame.png new file mode 100644 index 000000000..d524db5eb Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/flame.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/green_button_sqr.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/green_button_sqr.png new file mode 100644 index 000000000..41c323b31 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/green_button_sqr.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/joystick.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/joystick.png new file mode 100644 index 000000000..1805eb17e Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/joystick.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/knight.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/knight.png new file mode 100644 index 000000000..123f8a9ca Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/knight.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/layers/background.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/layers/background.png new file mode 100644 index 000000000..d08a58ee6 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/layers/background.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/layers/enemy.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/layers/enemy.png new file mode 100644 index 000000000..f581d737f Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/layers/enemy.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/layers/player.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/layers/player.png new file mode 100644 index 000000000..3afde6b26 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/layers/player.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/mage.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/mage.png new file mode 100644 index 000000000..c9c5d8528 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/mage.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/nine-box.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/nine-box.png new file mode 100644 index 000000000..395c22341 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/nine-box.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/airplane.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/airplane.png new file mode 100644 index 000000000..70dcc28a1 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/airplane.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/bg.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/bg.png new file mode 100644 index 000000000..eecdea1cc Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/bg.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/city.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/city.png new file mode 100644 index 000000000..54dec876f Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/city.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/foreground-trees.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/foreground-trees.png new file mode 100644 index 000000000..38280bc81 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/foreground-trees.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/heavy_clouded.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/heavy_clouded.png new file mode 100644 index 000000000..0bb5fbda5 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/heavy_clouded.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/license.txt b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/license.txt new file mode 100755 index 000000000..2661e4286 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/license.txt @@ -0,0 +1,6 @@ +Artwork created by Luis Zuno (@ansimuz) + +License (CC0) You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission: http://creativecommons.org/publicdomain/zero/1.0/ + +Get more resources at pixelgameart.org, Spread the word! + diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/mountain-far.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/mountain-far.png new file mode 100644 index 000000000..21ea9ee26 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/mountain-far.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/mountains.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/mountains.png new file mode 100644 index 000000000..fd340365e Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/mountains.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/rain.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/rain.png new file mode 100644 index 000000000..55d2097fd Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/rain.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/trees.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/trees.png new file mode 100644 index 000000000..4c0a9aba8 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/parallax/trees.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/pizza.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/pizza.png new file mode 100644 index 000000000..7697e70ed Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/pizza.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/ranger.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/ranger.png new file mode 100644 index 000000000..ee5a351b7 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/ranger.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/red_button_sqr.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/red_button_sqr.png new file mode 100644 index 000000000..caf2a03ae Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/red_button_sqr.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/retro_tiles.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/retro_tiles.png new file mode 100644 index 000000000..ca5d9f5e6 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/retro_tiles.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/bullet.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/bullet.png new file mode 100644 index 000000000..f173be7fe Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/bullet.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/enemy.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/enemy.png new file mode 100644 index 000000000..b388f6da4 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/enemy.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/explosion.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/explosion.png new file mode 100644 index 000000000..40f607942 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/explosion.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/player.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/player.png new file mode 100644 index 000000000..46fd9bc65 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/player.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/stars.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/stars.png new file mode 100644 index 000000000..bcf3da2f8 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/rogue_shooter/stars.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/shield.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/shield.png new file mode 100644 index 000000000..ececde8a5 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/shield.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/speech-bubble.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/speech-bubble.png new file mode 100644 index 000000000..c40a7b8c6 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/speech-bubble.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/sprite_sheet.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/sprite_sheet.png new file mode 100644 index 000000000..de0d8dcea Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/sprite_sheet.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/selector-short.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/selector-short.png new file mode 100644 index 000000000..e2d521faa Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/selector-short.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/selector.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/selector.png new file mode 100644 index 000000000..bdae40d5a Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/selector.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/tiles-short.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/tiles-short.png new file mode 100644 index 000000000..165b1e18f Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/tiles-short.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/tiles.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/tiles.png new file mode 100644 index 000000000..6de6bb033 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/tile_maps/tiles.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/trex.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/trex.png new file mode 100644 index 000000000..e35c8acbe Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/trex.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/images/zap.png b/docs/1.18.0/_static/apps/examples/assets/assets/images/zap.png new file mode 100644 index 000000000..27689a6e9 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/images/zap.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/spine/LICENSE b/docs/1.18.0/_static/apps/examples/assets/assets/spine/LICENSE new file mode 100644 index 000000000..cd3e3b481 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/spine/LICENSE @@ -0,0 +1,8 @@ +Copyright (c) 2013, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy-pro.json b/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy-pro.json new file mode 100644 index 000000000..b4dd8b40f --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy-pro.json @@ -0,0 +1,8707 @@ +{ +"skeleton": { + "hash": "itfFESDjM1c", + "spine": "4.1.23-beta", + "x": -188.63, + "y": -7.94, + "width": 418.45, + "height": 686.2, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root", "rotation": 0.05 }, + { "name": "hip", "parent": "root", "y": 247.27 }, + { "name": "crosshair", "parent": "root", "x": 302.83, "y": 569.45, "color": "ff3f00ff" }, + { + "name": "aim-constraint-target", + "parent": "hip", + "length": 26.24, + "rotation": 19.61, + "x": 1.02, + "y": 5.62, + "color": "abe323ff" + }, + { "name": "rear-foot-target", "parent": "root", "x": 61.91, "y": 0.42, "color": "ff3f00ff" }, + { "name": "rear-leg-target", "parent": "rear-foot-target", "x": -33.91, "y": 37.34, "color": "ff3f00ff" }, + { + "name": "rear-thigh", + "parent": "hip", + "length": 85.72, + "rotation": -72.54, + "x": 8.91, + "y": -5.63, + "color": "ff000dff" + }, + { + "name": "rear-shin", + "parent": "rear-thigh", + "length": 121.88, + "rotation": -19.83, + "x": 86.1, + "y": -1.33, + "color": "ff000dff" + }, + { + "name": "rear-foot", + "parent": "rear-shin", + "length": 51.58, + "rotation": 45.78, + "x": 121.46, + "y": -0.76, + "color": "ff000dff" + }, + { + "name": "back-foot-tip", + "parent": "rear-foot", + "length": 50.3, + "rotation": -0.85, + "x": 51.17, + "y": 0.24, + "transform": "noRotationOrReflection", + "color": "ff000dff" + }, + { "name": "board-ik", "parent": "root", "x": -131.78, "y": 69.09, "color": "4c56ffff" }, + { "name": "clipping", "parent": "root" }, + { "name": "hoverboard-controller", "parent": "root", "rotation": -0.28, "x": -329.69, "y": 69.82, "color": "ff0004ff" }, + { "name": "exhaust1", "parent": "hoverboard-controller", "rotation": 3.02, "x": -249.68, "y": 53.39 }, + { "name": "exhaust2", "parent": "hoverboard-controller", "rotation": 26.34, "x": -191.6, "y": -22.92 }, + { + "name": "exhaust3", + "parent": "hoverboard-controller", + "rotation": -12.34, + "x": -236.03, + "y": 80.54, + "scaleX": 0.7847, + "scaleY": 0.7847 + }, + { "name": "portal-root", "parent": "root", "x": 12.9, "y": 328.54, "scaleX": 2.0334, "scaleY": 2.0334 }, + { "name": "flare1", "parent": "portal-root", "x": -6.34, "y": -161.57 }, + { "name": "flare10", "parent": "portal-root", "x": -6.34, "y": -161.57 }, + { "name": "flare2", "parent": "portal-root", "x": -6.34, "y": -161.57 }, + { "name": "flare3", "parent": "portal-root", "x": -6.34, "y": -161.57 }, + { "name": "flare4", "parent": "portal-root", "x": -6.34, "y": -161.57 }, + { "name": "flare5", "parent": "portal-root", "x": -6.34, "y": -161.57 }, + { "name": "flare6", "parent": "portal-root", "x": -6.34, "y": -161.57 }, + { "name": "flare7", "parent": "portal-root", "x": -6.34, "y": -161.57 }, + { "name": "flare8", "parent": "portal-root", "x": -6.34, "y": -161.57 }, + { "name": "flare9", "parent": "portal-root", "x": -6.34, "y": -161.57 }, + { + "name": "torso", + "parent": "hip", + "length": 42.52, + "rotation": 103.82, + "x": -1.62, + "y": 4.9, + "color": "e0da19ff" + }, + { "name": "torso2", "parent": "torso", "length": 42.52, "x": 42.52, "color": "e0da19ff" }, + { "name": "torso3", "parent": "torso2", "length": 42.52, "x": 42.52, "color": "e0da19ff" }, + { "name": "front-shoulder", "parent": "torso3", "rotation": 255.89, "x": 18.72, "y": 19.33, "color": "00ff04ff" }, + { "name": "front-upper-arm", "parent": "front-shoulder", "length": 69.45, "rotation": -87.51, "color": "00ff04ff" }, + { + "name": "front-bracer", + "parent": "front-upper-arm", + "length": 40.57, + "rotation": 18.3, + "x": 68.8, + "y": -0.68, + "color": "00ff04ff" + }, + { + "name": "front-fist", + "parent": "front-bracer", + "length": 65.39, + "rotation": 12.43, + "x": 40.57, + "y": 0.2, + "color": "00ff04ff" + }, + { "name": "front-foot-target", "parent": "root", "x": -13.53, "y": 0.04, "color": "ff3f00ff" }, + { "name": "front-leg-target", "parent": "front-foot-target", "x": -28.4, "y": 29.06, "color": "ff3f00ff" }, + { + "name": "front-thigh", + "parent": "hip", + "length": 74.81, + "rotation": -95.51, + "x": -17.46, + "y": -11.64, + "color": "00ff04ff" + }, + { + "name": "front-shin", + "parent": "front-thigh", + "length": 128.77, + "rotation": -2.21, + "x": 78.69, + "y": 1.6, + "color": "00ff04ff" + }, + { + "name": "front-foot", + "parent": "front-shin", + "length": 41.01, + "rotation": 51.27, + "x": 128.76, + "y": -0.34, + "color": "00ff04ff" + }, + { + "name": "front-foot-tip", + "parent": "front-foot", + "length": 56.03, + "rotation": -1.68, + "x": 41.42, + "y": -0.09, + "transform": "noRotationOrReflection", + "color": "00ff04ff" + }, + { "name": "back-shoulder", "parent": "torso3", "rotation": -104.11, "x": 7.32, "y": -19.22, "color": "ff000dff" }, + { "name": "rear-upper-arm", "parent": "back-shoulder", "length": 51.94, "rotation": -65.45, "color": "ff000dff" }, + { "name": "rear-bracer", "parent": "rear-upper-arm", "length": 34.56, "rotation": 23.15, "x": 51.36, "color": "ff000dff" }, + { + "name": "gun", + "parent": "rear-bracer", + "length": 43.11, + "rotation": -5.43, + "x": 34.42, + "y": -0.45, + "color": "ff000dff" + }, + { "name": "gun-tip", "parent": "gun", "rotation": 7.1, "x": 200.78, "y": 52.5, "color": "ff0000ff" }, + { + "name": "neck", + "parent": "torso3", + "length": 25.45, + "rotation": -31.54, + "x": 42.46, + "y": -0.31, + "color": "e0da19ff" + }, + { + "name": "head", + "parent": "neck", + "length": 131.79, + "rotation": 26.1, + "x": 27.66, + "y": -0.26, + "color": "e0da19ff" + }, + { + "name": "hair1", + "parent": "head", + "length": 47.23, + "rotation": -49.1, + "x": 149.83, + "y": -59.77, + "color": "e0da19ff" + }, + { + "name": "hair2", + "parent": "hair1", + "length": 55.57, + "rotation": 50.42, + "x": 47.23, + "y": 0.19, + "color": "e0da19ff" + }, + { + "name": "hair3", + "parent": "head", + "length": 62.22, + "rotation": -32.17, + "x": 164.14, + "y": 3.68, + "color": "e0da19ff" + }, + { + "name": "hair4", + "parent": "hair3", + "length": 80.28, + "rotation": 83.71, + "x": 62.22, + "y": -0.04, + "color": "e0da19ff" + }, + { "name": "hoverboard-thruster-front", "parent": "hoverboard-controller", "rotation": -29.2, "x": 95.77, "y": -2.99, "transform": "noRotationOrReflection" }, + { "name": "hoverboard-thruster-rear", "parent": "hoverboard-controller", "rotation": -29.2, "x": -76.47, "y": -4.88, "transform": "noRotationOrReflection" }, + { "name": "hoverglow-front", "parent": "hoverboard-thruster-front", "rotation": 0.17, "x": -1.78, "y": -37.79 }, + { "name": "hoverglow-rear", "parent": "hoverboard-thruster-rear", "rotation": 0.17, "x": 1.06, "y": -35.66 }, + { "name": "muzzle", "parent": "rear-bracer", "rotation": 3.06, "x": 242.34, "y": 34.26, "color": "ffb900ff" }, + { "name": "muzzle-ring", "parent": "muzzle", "color": "ffb900ff" }, + { "name": "muzzle-ring2", "parent": "muzzle", "color": "ffb900ff" }, + { "name": "muzzle-ring3", "parent": "muzzle", "color": "ffb900ff" }, + { "name": "muzzle-ring4", "parent": "muzzle", "color": "ffb900ff" }, + { "name": "portal", "parent": "portal-root" }, + { "name": "portal-shade", "parent": "portal-root" }, + { "name": "portal-streaks1", "parent": "portal-root" }, + { "name": "portal-streaks2", "parent": "portal-root" }, + { "name": "side-glow1", "parent": "hoverboard-controller", "x": -110.56, "y": 2.62, "color": "000effff" }, + { + "name": "side-glow2", + "parent": "hoverboard-controller", + "x": -110.56, + "y": 2.62, + "scaleX": 0.738, + "scaleY": 0.738, + "color": "000effff" + }, + { "name": "head-control", "parent": "head", "x": 110.21, "color": "00a220ff" } +], +"slots": [ + { "name": "portal-bg", "bone": "portal" }, + { "name": "portal-shade", "bone": "portal-shade" }, + { "name": "portal-streaks2", "bone": "portal-streaks2", "blend": "additive" }, + { "name": "portal-streaks1", "bone": "portal-streaks1", "blend": "additive" }, + { "name": "portal-flare8", "bone": "flare8", "color": "c3cbffff", "blend": "additive" }, + { "name": "portal-flare9", "bone": "flare9", "color": "c3cbffff", "blend": "additive" }, + { "name": "portal-flare10", "bone": "flare10", "color": "c3cbffff", "blend": "additive" }, + { "name": "clipping", "bone": "clipping" }, + { "name": "exhaust3", "bone": "exhaust3", "color": "5eb4ffff", "blend": "additive" }, + { "name": "hoverboard-thruster-rear", "bone": "hoverboard-thruster-rear" }, + { "name": "hoverboard-thruster-front", "bone": "hoverboard-thruster-front" }, + { "name": "hoverboard-board", "bone": "hoverboard-controller" }, + { "name": "side-glow1", "bone": "side-glow1", "color": "ff8686ff", "blend": "additive" }, + { "name": "side-glow3", "bone": "side-glow1", "color": "ff8686ff", "blend": "additive" }, + { "name": "side-glow2", "bone": "side-glow2", "color": "ff8686ff", "blend": "additive" }, + { "name": "hoverglow-front", "bone": "hoverglow-front", "color": "5eb4ffff", "blend": "additive" }, + { "name": "hoverglow-rear", "bone": "hoverglow-rear", "color": "5eb4ffff", "blend": "additive" }, + { "name": "exhaust1", "bone": "exhaust2", "color": "5eb4ffff", "blend": "additive" }, + { "name": "exhaust2", "bone": "exhaust1", "color": "5eb4ffff", "blend": "additive" }, + { "name": "rear-upper-arm", "bone": "rear-upper-arm", "attachment": "rear-upper-arm" }, + { "name": "rear-bracer", "bone": "rear-bracer", "attachment": "rear-bracer" }, + { "name": "gun", "bone": "gun", "attachment": "gun" }, + { "name": "rear-foot", "bone": "rear-foot", "attachment": "rear-foot" }, + { "name": "rear-thigh", "bone": "rear-thigh", "attachment": "rear-thigh" }, + { "name": "rear-shin", "bone": "rear-shin", "attachment": "rear-shin" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "torso", "bone": "torso", "attachment": "torso" }, + { "name": "front-upper-arm", "bone": "front-upper-arm", "attachment": "front-upper-arm" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "eye", "bone": "head", "attachment": "eye-indifferent" }, + { "name": "front-thigh", "bone": "front-thigh", "attachment": "front-thigh" }, + { "name": "front-foot", "bone": "front-foot", "attachment": "front-foot" }, + { "name": "front-shin", "bone": "front-shin", "attachment": "front-shin" }, + { "name": "mouth", "bone": "head", "attachment": "mouth-smile" }, + { "name": "goggles", "bone": "head", "attachment": "goggles" }, + { "name": "front-bracer", "bone": "front-bracer", "attachment": "front-bracer" }, + { "name": "front-fist", "bone": "front-fist", "attachment": "front-fist-closed" }, + { "name": "muzzle", "bone": "muzzle" }, + { "name": "head-bb", "bone": "head" }, + { "name": "portal-flare1", "bone": "flare1", "color": "c3cbffff", "blend": "additive" }, + { "name": "portal-flare2", "bone": "flare2", "color": "c3cbffff", "blend": "additive" }, + { "name": "portal-flare3", "bone": "flare3", "color": "c3cbffff", "blend": "additive" }, + { "name": "portal-flare4", "bone": "flare4", "color": "c3cbffff", "blend": "additive" }, + { "name": "portal-flare5", "bone": "flare5", "color": "c3cbffff", "blend": "additive" }, + { "name": "portal-flare6", "bone": "flare6", "color": "c3cbffff", "blend": "additive" }, + { "name": "portal-flare7", "bone": "flare7", "color": "c3cbffff", "blend": "additive" }, + { "name": "crosshair", "bone": "crosshair" }, + { "name": "muzzle-glow", "bone": "gun-tip", "color": "ffffff00", "blend": "additive" }, + { "name": "muzzle-ring", "bone": "muzzle-ring", "color": "d8baffff", "blend": "additive" }, + { "name": "muzzle-ring2", "bone": "muzzle-ring2", "color": "d8baffff", "blend": "additive" }, + { "name": "muzzle-ring3", "bone": "muzzle-ring3", "color": "d8baffff", "blend": "additive" }, + { "name": "muzzle-ring4", "bone": "muzzle-ring4", "color": "d8baffff", "blend": "additive" } +], +"ik": [ + { + "name": "aim-ik", + "order": 13, + "bones": [ "rear-upper-arm" ], + "target": "crosshair", + "mix": 0 + }, + { + "name": "aim-torso-ik", + "order": 8, + "bones": [ "aim-constraint-target" ], + "target": "crosshair" + }, + { + "name": "board-ik", + "order": 1, + "bones": [ "hoverboard-controller" ], + "target": "board-ik" + }, + { + "name": "front-foot-ik", + "order": 6, + "bones": [ "front-foot" ], + "target": "front-foot-target" + }, + { + "name": "front-leg-ik", + "order": 4, + "bones": [ "front-thigh", "front-shin" ], + "target": "front-leg-target", + "bendPositive": false + }, + { + "name": "rear-foot-ik", + "order": 7, + "bones": [ "rear-foot" ], + "target": "rear-foot-target" + }, + { + "name": "rear-leg-ik", + "order": 5, + "bones": [ "rear-thigh", "rear-shin" ], + "target": "rear-leg-target", + "bendPositive": false + } +], +"transform": [ + { + "name": "aim-front-arm-transform", + "order": 11, + "bones": [ "front-upper-arm" ], + "target": "aim-constraint-target", + "rotation": -180, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "aim-head-transform", + "order": 10, + "bones": [ "head" ], + "target": "aim-constraint-target", + "rotation": 84.3, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "aim-rear-arm-transform", + "order": 12, + "bones": [ "rear-upper-arm" ], + "target": "aim-constraint-target", + "x": 57.7, + "y": 56.4, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "aim-torso-transform", + "order": 9, + "bones": [ "torso" ], + "target": "aim-constraint-target", + "rotation": 69.5, + "shearY": -36, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "front-foot-board-transform", + "order": 2, + "bones": [ "front-foot-target" ], + "target": "hoverboard-controller", + "x": -69.8, + "y": 20.7, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "rear-foot-board-transform", + "order": 3, + "bones": [ "rear-foot-target" ], + "target": "hoverboard-controller", + "x": 86.6, + "y": 21.3, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "shoulder", + "bones": [ "back-shoulder" ], + "target": "front-shoulder", + "x": 40.17, + "y": -1.66, + "mixRotate": 0, + "mixX": -1, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "toes-board", + "order": 14, + "bones": [ "front-foot-tip", "back-foot-tip" ], + "target": "hoverboard-controller", + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + } +], +"skins": [ + { + "name": "default", + "attachments": { + "clipping": { + "clipping": { + "type": "clipping", + "end": "head-bb", + "vertexCount": 9, + "vertices": [ 66.76, 509.48, 19.98, 434.54, 5.34, 336.28, 22.19, 247.93, 77.98, 159.54, 182.21, -97.56, 1452.26, -99.8, 1454.33, 843.61, 166.57, 841.02 ], + "color": "ce3a3aff" + } + }, + "crosshair": { + "crosshair": { "width": 89, "height": 89 } + }, + "exhaust1": { + "hoverglow-small": { "scaleX": 0.4629, "scaleY": 0.8129, "rotation": -83.07, "width": 274, "height": 75 } + }, + "exhaust2": { + "hoverglow-small": { + "x": 0.01, + "y": -0.76, + "scaleX": 0.4208, + "scaleY": 0.8403, + "rotation": -89.25, + "width": 274, + "height": 75 + } + }, + "exhaust3": { + "hoverglow-small": { "scaleX": 0.4629, "scaleY": 0.8129, "rotation": -83.07, "width": 274, "height": 75 } + }, + "eye": { + "eye-indifferent": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 66, -36.8, -91.35, 0.3, 46, 73.41, -91.35, 0.7, 2, 66, -87.05, -13.11, 0.70968, 46, 23.16, -13.11, 0.29032, 2, 66, -12.18, 34.99, 0.82818, 46, 98.03, 34.99, 0.17182, 2, 66, 38.07, -43.25, 0.59781, 46, 148.28, -43.25, 0.40219 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 89 + }, + "eye-surprised": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 2, 66, -46.74, -89.7, 0.3, 46, 63.47, -89.7, 0.7, 2, 66, -77.58, -1.97, 0.71, 46, 32.63, -1.97, 0.29, 2, 66, 6.38, 27.55, 0.83, 46, 116.59, 27.55, 0.17, 2, 66, 37.22, -60.19, 0.6, 46, 147.44, -60.19, 0.4 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 89 + } + }, + "front-bracer": { + "front-bracer": { "x": 12.03, "y": -1.68, "rotation": 79.6, "width": 58, "height": 80 } + }, + "front-fist": { + "front-fist-closed": { "x": 35.5, "y": 6, "rotation": 67.16, "width": 75, "height": 82 }, + "front-fist-open": { "x": 39.57, "y": 7.76, "rotation": 67.16, "width": 86, "height": 87 } + }, + "front-foot": { + "front-foot": { + "type": "mesh", + "uvs": [ 0.59417, 0.23422, 0.62257, 0.30336, 0.6501, 0.37036, 0.67637, 0.38404, 0.72068, 0.4071, 0.76264, 0.42894, 1, 0.70375, 1, 1, 0.65517, 1, 0.46923, 0.99999, 0, 1, 0, 0.39197, 0.17846, 0, 0.49796, 0 ], + "triangles": [ 8, 9, 3, 4, 8, 3, 5, 8, 4, 6, 8, 5, 8, 6, 7, 11, 1, 10, 0, 12, 13, 0, 11, 12, 0, 1, 11, 9, 2, 3, 1, 2, 10, 9, 10, 2 ], + "vertices": [ 2, 38, 18.17, 41.57, 0.7896, 39, 12.46, 46.05, 0.2104, 2, 38, 24.08, 40.76, 0.71228, 39, 16.12, 41.34, 0.28772, 2, 38, 29.81, 39.98, 0.55344, 39, 19.67, 36.78, 0.44656, 2, 38, 32.81, 41.67, 0.38554, 39, 23, 35.89, 0.61446, 2, 38, 37.86, 44.52, 0.25567, 39, 28.61, 34.4, 0.74433, 2, 38, 42.65, 47.22, 0.17384, 39, 33.92, 32.99, 0.82616, 1, 39, 64.15, 14.56, 1, 1, 39, 64.51, -5.87, 1, 1, 39, 21.08, -6.64, 1, 2, 38, 44.67, -6.77, 0.5684, 39, -2.34, -6.97, 0.4316, 1, 38, 3.1, -48.81, 1, 1, 38, -26.73, -19.31, 1, 1, 38, -30.15, 15.69, 1, 1, 38, -1.84, 44.32, 1 ], + "hull": 14, + "edges": [ 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 24, 26, 22, 24, 12, 14, 10, 12, 2, 4, 2, 20, 4, 6, 6, 16, 2, 0, 0, 26, 6, 8, 8, 10 ], + "width": 126, + "height": 69 + } + }, + "front-shin": { + "front-shin": { + "type": "mesh", + "uvs": [ 0.90031, 0.05785, 1, 0.12828, 1, 0.21619, 0.9025, 0.31002, 0.78736, 0.35684, 0.78081, 0.39874, 0.77215, 0.45415, 0.77098, 0.51572, 0.84094, 0.63751, 0.93095, 0.7491, 0.95531, 0.7793, 0.78126, 0.87679, 0.5613, 1, 0.2687, 1, 0, 1, 0.00279, 0.96112, 0.01358, 0.81038, 0.02822, 0.60605, 0.08324, 0.45142, 0.18908, 0.31882, 0.29577, 0.2398, 0.30236, 0.14941, 0.37875, 0.05902, 0.53284, 0, 0.70538, 0, 0.41094, 0.71968, 0.40743, 0.54751, 0.41094, 0.4536, 0.4724, 0.35186, 0.33367, 0.27829, 0.50226, 0.31664, 0.65328, 0.67507, 0.60762, 0.52716, 0.6006, 0.45125, 0.62747, 0.37543, 0.6573, 0.3385, 0.27843, 0.32924, 0.18967, 0.45203, 0.16509, 0.58586, 0.18265, 0.7682, 0.50532, 0.24634, 0.59473, 0.17967, 0.60161, 0.10611, 0.51392, 0.04327, 0.72198, 0.28849, 0.82343, 0.20266, 0.86814, 0.11377, 0.79592, 0.04634, 0.44858, 0.15515, 0.25466, 0.96219, 0.53169, 0.9448, 0.7531, 0.8324 ], + "triangles": [ 24, 0, 47, 43, 23, 24, 47, 43, 24, 43, 22, 23, 42, 43, 47, 46, 47, 0, 42, 47, 46, 46, 0, 1, 48, 22, 43, 48, 43, 42, 21, 22, 48, 41, 48, 42, 45, 42, 46, 41, 42, 45, 46, 1, 2, 45, 46, 2, 40, 48, 41, 48, 20, 21, 29, 48, 40, 29, 20, 48, 44, 41, 45, 40, 41, 44, 3, 45, 2, 44, 45, 3, 30, 29, 40, 35, 30, 40, 36, 19, 20, 36, 20, 29, 44, 35, 40, 28, 29, 30, 4, 44, 3, 35, 44, 4, 34, 30, 35, 5, 35, 4, 34, 28, 30, 33, 28, 34, 37, 19, 36, 18, 19, 37, 27, 29, 28, 27, 28, 33, 36, 29, 27, 37, 36, 27, 5, 34, 35, 6, 34, 5, 33, 34, 6, 6, 32, 33, 7, 32, 6, 26, 37, 27, 38, 18, 37, 38, 37, 26, 17, 18, 38, 31, 32, 7, 31, 7, 8, 32, 25, 26, 38, 26, 25, 27, 33, 32, 32, 26, 27, 39, 38, 25, 17, 38, 39, 16, 17, 39, 51, 31, 8, 51, 8, 9, 11, 51, 9, 11, 9, 10, 31, 50, 25, 31, 25, 32, 50, 31, 51, 49, 39, 25, 49, 25, 50, 15, 16, 39, 49, 15, 39, 13, 49, 50, 14, 15, 49, 13, 14, 49, 12, 50, 51, 12, 51, 11, 13, 50, 12 ], + "vertices": [ -23.66, 19.37, -11.73, 28.98, 4.34, 30.83, 22.41, 24.87, 32.05, 16.48, 39.77, 16.83, 49.98, 17.3, 61.25, 18.5, 82.85, 26.78, 102.4, 36.46, 107.69, 39.09, 127.15, 26.97, 151.74, 11.65, 154.49, -12.18, 157.02, -34.07, 149.89, -34.66, 122.23, -36.97, 84.75, -40.09, 55.97, -38.88, 30.73, -33.05, 15.29, -26.03, -1.3, -27.41, -18.54, -23.09, -30.78, -11.79, -32.4, 2.27, 101.92, -6.52, 70.48, -10.44, 53.28, -12.14, 34.11, -9.28, 21.96, -22.13, 27.39, -7.59, 91.48, 12.28, 64.88, 5.44, 51.07, 3.26, 36.95, 3.85, 29.92, 5.5, 31.8, -25.56, 55.08, -30.19, 79.77, -29.37, 112.93, -24.09, 14.51, -8.83, 1.48, -2.95, -12.03, -3.94, -22.69, -12.41, 20.17, 9.71, 3.53, 16.16, -13.14, 17.93, -24.78, 10.62, -1.62, -15.37, 147.71, -14.13, 141.93, 8.07, 119.3, 23.74 ], + "hull": 25, + "edges": [ 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 46, 48, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, 32, 34, 50, 52, 52, 54, 54, 56, 40, 58, 58, 60, 8, 10, 20, 22, 22, 24, 62, 64, 64, 66, 66, 68, 8, 70, 70, 60, 68, 70, 58, 72, 72, 74, 74, 76, 76, 78, 24, 26, 26, 28, 58, 80, 80, 82, 82, 84, 84, 86, 86, 44, 70, 88, 88, 90, 90, 92, 92, 94, 94, 48, 80, 88, 88, 6, 82, 90, 90, 4, 84, 92, 92, 2, 86, 94, 94, 0, 56, 60, 10, 12, 12, 14, 14, 16, 28, 30, 30, 32, 26, 98, 98, 78, 30, 98, 24, 100, 100, 50, 98, 100, 22, 102, 102, 62, 100, 102, 16, 18, 18, 20, 102, 18 ], + "width": 82, + "height": 184 + } + }, + "front-thigh": { + "front-thigh": { "x": 42.48, "y": 4.45, "rotation": 84.87, "width": 45, "height": 112 } + }, + "front-upper-arm": { + "front-upper-arm": { "x": 28.31, "y": 7.37, "rotation": 97.9, "width": 46, "height": 97 } + }, + "goggles": { + "goggles": { + "type": "mesh", + "uvs": [ 0.53653, 0.04114, 0.72922, 0.16036, 0.91667, 0.33223, 0.97046, 0.31329, 1, 0.48053, 0.95756, 0.5733, 0.88825, 0.6328, 0.86878, 0.78962, 0.77404, 0.8675, 0.72628, 1, 0.60714, 0.93863, 0.49601, 0.88138, 0.41558, 0.75027, 0.32547, 0.70084, 0.2782, 0.58257, 0.1721, 0.63281, 0.17229, 0.75071, 0.10781, 0.79898, 0, 0.32304, 0, 0.12476, 0.07373, 0.07344, 0.15423, 0.10734, 0.23165, 0.13994, 0.30313, 0.02256, 0.34802, 0, 0.42979, 0.69183, 0.39476, 0.51042, 0.39488, 0.31512, 0.45878, 0.23198, 0.56501, 0.28109, 0.69961, 0.39216, 0.82039, 0.54204, 0.85738, 0.62343, 0.91107, 0.51407, 0.72639, 0.32147, 0.58764, 0.19609, 0.48075, 0.11269, 0.37823, 0.05501, 0.3287, 0.17866, 0.319, 0.305, 0.36036, 0.53799, 0.40327, 0.70072, 0.30059, 0.55838, 0.21957, 0.2815, 0.09963, 0.28943, 0.56863, 0.4368, 0.4911, 0.37156, 0.51185, 0.52093, 0.67018, 0.59304, 0.7619, 0.68575, 0.73296, 0.43355 ], + "triangles": [ 18, 44, 15, 21, 19, 20, 17, 18, 15, 44, 19, 21, 2, 3, 4, 18, 19, 44, 2, 33, 34, 33, 2, 4, 5, 33, 4, 5, 6, 33, 7, 32, 6, 31, 50, 33, 32, 31, 33, 6, 32, 33, 31, 49, 50, 49, 31, 32, 49, 32, 7, 8, 49, 7, 33, 50, 34, 17, 15, 16, 9, 48, 8, 49, 48, 50, 50, 48, 45, 47, 45, 48, 50, 45, 30, 45, 47, 46, 45, 46, 29, 30, 45, 29, 30, 29, 34, 30, 34, 50, 47, 26, 46, 25, 10, 11, 12, 25, 11, 41, 12, 42, 42, 44, 43, 43, 21, 22, 41, 40, 25, 41, 42, 40, 29, 35, 34, 40, 26, 25, 25, 26, 47, 37, 24, 0, 36, 37, 0, 42, 43, 39, 42, 39, 40, 28, 38, 36, 40, 39, 26, 28, 27, 38, 26, 39, 27, 37, 38, 23, 39, 43, 38, 38, 37, 36, 27, 39, 38, 43, 22, 38, 37, 23, 24, 22, 23, 38, 36, 0, 35, 28, 36, 35, 29, 28, 35, 27, 28, 46, 26, 27, 46, 35, 0, 1, 34, 35, 1, 12, 41, 25, 47, 10, 25, 44, 21, 43, 42, 14, 44, 14, 15, 44, 13, 14, 42, 12, 13, 42, 46, 28, 29, 47, 48, 10, 48, 9, 10, 49, 8, 48, 2, 34, 1 ], + "vertices": [ 2, 66, 61.88, 22.81, 0.832, 46, 172.09, 22.81, 0.168, 2, 66, 59.89, -31.19, 0.6855, 46, 170.1, -31.19, 0.3145, 2, 66, 49.2, -86.8, 0.32635, 46, 159.41, -86.8, 0.67365, 2, 66, 56.82, -99.01, 0.01217, 46, 167.03, -99.01, 0.98783, 1, 46, 143.4, -115.48, 1, 2, 66, 15, -110.14, 0.0041, 46, 125.21, -110.14, 0.9959, 2, 66, -0.32, -96.36, 0.07948, 46, 109.89, -96.36, 0.92052, 2, 66, -26.56, -100.19, 0.01905, 46, 83.65, -100.19, 0.98095, 2, 66, -46.96, -81.16, 0.4921, 46, 63.26, -81.16, 0.50791, 2, 66, -71.84, -76.69, 0.56923, 46, 38.37, -76.69, 0.43077, 2, 66, -72.54, -43.98, 0.74145, 46, 37.67, -43.98, 0.25855, 2, 66, -73.2, -13.47, 0.87929, 46, 37.01, -13.47, 0.12071, 2, 66, -59.63, 13.55, 0.864, 46, 50.58, 13.55, 0.136, 2, 66, -59.69, 38.45, 0.85289, 46, 50.52, 38.45, 0.14711, 2, 66, -45.26, 56.6, 0.74392, 46, 64.95, 56.6, 0.25608, 2, 66, -62.31, 79.96, 0.624, 46, 47.9, 79.96, 0.376, 2, 66, -80.76, 73.42, 0.616, 46, 29.45, 73.42, 0.384, 2, 66, -93.9, 86.64, 0.288, 46, 16.31, 86.64, 0.712, 1, 46, 81.51, 139.38, 1, 1, 46, 112.56, 150.3, 1, 2, 66, 16.76, 134.97, 0.02942, 46, 126.97, 134.97, 0.97058, 2, 66, 18.42, 113.28, 0.36147, 46, 128.63, 113.28, 0.63853, 2, 66, 20.02, 92.43, 0.7135, 46, 130.23, 92.43, 0.2865, 2, 66, 44.58, 81.29, 0.69603, 46, 154.79, 81.29, 0.30397, 2, 66, 52, 71.48, 0.848, 46, 162.21, 71.48, 0.152, 2, 66, -49.25, 13.27, 0.8, 46, 60.96, 13.27, 0.2, 2, 66, -23.88, 31.88, 0.896, 46, 86.33, 31.88, 0.104, 2, 66, 6.72, 42.6, 0.928, 46, 116.93, 42.6, 0.072, 2, 66, 25.26, 31.44, 0.8, 46, 135.47, 31.44, 0.2, 2, 66, 26.77, 2.59, 0.75, 46, 136.98, 2.59, 0.25, 2, 66, 21.02, -36.66, 0.54887, 46, 131.23, -36.66, 0.45113, 2, 66, 8.01, -74.65, 0.36029, 46, 118.22, -74.65, 0.63971, 2, 66, -1.52, -88.24, 0.1253, 46, 108.69, -88.24, 0.8747, 2, 66, 20.25, -95.44, 0.08687, 46, 130.46, -95.44, 0.91313, 2, 66, 34.42, -39.36, 0.72613, 46, 144.63, -39.36, 0.27387, 2, 66, 42.03, 1.7, 0.824, 46, 152.25, 1.7, 0.176, 2, 66, 45.85, 32.6, 0.856, 46, 156.06, 32.6, 0.144, 1, 66, 46.01, 61.02, 1, 1, 66, 22.35, 66.41, 1, 1, 66, 1.73, 61.84, 1, 2, 66, -31.17, 38.83, 0.928, 46, 79.04, 38.83, 0.072, 2, 66, -52.94, 19.31, 0.79073, 46, 57.27, 19.31, 0.20927, 2, 66, -39.54, 52.42, 0.912, 46, 70.67, 52.42, 0.088, 2, 66, -3.2, 87.61, 0.744, 46, 107.02, 87.61, 0.256, 2, 66, -14.82, 116.7, 0.6368, 46, 95.4, 116.7, 0.3632, 2, 66, 2.7, -6.87, 0.856, 46, 112.91, -6.87, 0.144, 2, 66, 6.21, 15.8, 0.744, 46, 116.42, 15.8, 0.256, 2, 66, -15.39, 2.47, 0.856, 46, 94.82, 2.47, 0.144, 2, 66, -12.98, -40.48, 0.72102, 46, 97.24, -40.48, 0.27898, 2, 66, -19.55, -68.16, 0.59162, 46, 90.66, -68.16, 0.40838, 2, 66, 17.44, -47.15, 0.53452, 46, 127.65, -47.15, 0.46548 ], + "hull": 25, + "edges": [ 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 48, 46, 46, 44, 36, 38, 40, 38, 24, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 62, 64, 64, 12, 8, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 24, 24, 84, 84, 86, 86, 44, 40, 42, 42, 44, 42, 88, 88, 30, 58, 90, 90, 92, 92, 94, 18, 20, 20, 22, 94, 20, 18, 96, 96, 98, 60, 100, 100, 62, 98, 100 ], + "width": 261, + "height": 166 + } + }, + "gun": { + "gun": { "x": 77.3, "y": 16.4, "rotation": 60.83, "width": 210, "height": 203 } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.75919, 0.06107, 0.88392, 0.17893, 0.90174, 0.30856, 0.94224, 0.1966, 1, 0.26584, 1, 0.422, 0.95864, 0.46993, 0.92118, 0.51333, 0.85957, 0.5347, 0.78388, 0.65605, 0.74384, 0.74838, 0.85116, 0.75151, 0.84828, 0.82564, 0.81781, 0.85367, 0.75599, 0.85906, 0.76237, 0.90468, 0.65875, 1, 0.38337, 1, 0.1858, 0.85404, 0.12742, 0.81091, 0.06025, 0.69209, 0, 0.58552, 0, 0.41021, 0.0853, 0.20692, 0.24243, 0.14504, 0.5, 0.1421, 0.50324, 0.07433, 0.41738, 0, 0.57614, 0, 0.85059, 0.36087, 0.73431, 0.43206, 0.68481, 0.31271, 0.72165, 0.16718, 0.55931, 0.04154, 0.44764, 0.22895, 0.23926, 0.26559, 0.71272, 0.44036, 0.56993, 0.383, 0.41678, 0.33511, 0.293, 0.31497, 0.70802, 0.44502, 0.56676, 0.38976, 0.41521, 0.34416, 0.28754, 0.33017, 0.88988, 0.50177, 0.30389, 0.73463, 0.2646, 0.65675, 0.21414, 0.61584, 0.14613, 0.62194, 0.10316, 0.66636, 0.10358, 0.72557, 0.14505, 0.79164, 0.20263, 0.81355, 0.27873, 0.80159, 0.34947, 0.7376, 0.23073, 0.57073, 0.08878, 0.60707, 0.29461, 0.8129, 0.73006, 0.87883, 0.69805, 0.87348, 0.66166, 0.79681, 0.22468, 0.69824, 0.14552, 0.67405 ], + "triangles": [ 50, 49, 62, 34, 25, 31, 39, 35, 34, 38, 39, 34, 37, 38, 34, 42, 39, 38, 43, 39, 42, 32, 2, 31, 31, 37, 34, 42, 38, 37, 41, 42, 37, 43, 22, 39, 30, 31, 29, 36, 37, 31, 30, 36, 31, 40, 41, 37, 36, 40, 37, 36, 30, 44, 55, 22, 43, 55, 48, 56, 47, 48, 55, 46, 55, 54, 42, 55, 43, 47, 55, 46, 62, 49, 48, 61, 47, 46, 62, 48, 47, 61, 62, 47, 46, 54, 45, 42, 41, 55, 61, 46, 45, 55, 41, 54, 61, 51, 50, 61, 50, 62, 60, 41, 40, 54, 41, 60, 53, 61, 45, 52, 51, 61, 57, 53, 45, 57, 45, 54, 53, 52, 61, 52, 19, 51, 57, 18, 52, 57, 52, 53, 17, 54, 60, 57, 54, 17, 18, 57, 17, 19, 50, 51, 33, 27, 28, 26, 27, 33, 0, 33, 28, 32, 33, 0, 32, 0, 1, 33, 25, 26, 33, 32, 25, 31, 25, 32, 2, 32, 1, 2, 3, 4, 29, 31, 2, 2, 4, 5, 29, 2, 5, 6, 29, 5, 30, 29, 6, 44, 30, 6, 18, 19, 52, 49, 56, 48, 34, 24, 25, 35, 23, 24, 35, 24, 34, 39, 22, 35, 22, 23, 35, 7, 44, 6, 8, 36, 44, 40, 36, 8, 8, 44, 7, 56, 21, 22, 55, 56, 22, 9, 40, 8, 20, 21, 56, 20, 56, 49, 9, 60, 40, 10, 60, 9, 20, 50, 19, 12, 10, 11, 13, 10, 12, 14, 60, 10, 13, 14, 10, 59, 60, 14, 58, 59, 14, 58, 14, 15, 16, 17, 60, 59, 16, 60, 15, 16, 59, 15, 59, 58, 20, 49, 50 ], + "vertices": [ 2, 50, 41.97, -41.8, 0.94074, 66, 165.41, -22.6, 0.05926, 4, 48, 73.47, 27.54, 0.26795, 50, -5.75, -51.71, 0.4738, 49, 112.99, -11.41, 0.12255, 66, 143.5, -66.13, 0.1357, 4, 48, 38.23, 10.99, 0.6831, 50, -41.01, -35.22, 0.07866, 49, 92.73, -44.66, 0.04872, 66, 108.65, -83.49, 0.18952, 2, 48, 73.35, 10.89, 0.8455, 66, 143.77, -82.78, 0.1545, 2, 48, 58.59, -10.38, 0.91607, 66, 129.5, -104.39, 0.08393, 3, 46, 195.82, -119.82, 0.104, 47, 75.49, -4.55, 0.09191, 48, 14.36, -24.8, 0.80409, 4, 46, 178.62, -113.98, 0.19022, 47, 59.82, -13.72, 0.33409, 48, -2.7, -18.57, 0.46643, 66, 68.41, -113.98, 0.00926, 4, 46, 163.06, -108.69, 0.18724, 47, 45.64, -22.03, 0.3133, 48, -18.14, -12.93, 0.47469, 66, 52.84, -108.69, 0.02477, 2, 46, 151.52, -95.05, 0.91122, 66, 41.31, -95.05, 0.08878, 2, 46, 110.61, -87.69, 0.70564, 66, 0.4, -87.69, 0.29436, 2, 46, 81.05, -86.58, 0.63951, 66, -29.16, -86.58, 0.36049, 2, 46, 89.82, -114.32, 0.57, 66, -20.39, -114.32, 0.43, 2, 46, 68.72, -120.91, 0.57, 66, -41.49, -120.91, 0.43, 2, 46, 58.1, -115.9, 0.57, 66, -52.11, -115.9, 0.43, 2, 46, 51.03, -100.63, 0.64242, 66, -59.18, -100.63, 0.35758, 2, 46, 38.79, -106.76, 0.81659, 66, -71.43, -106.76, 0.18341, 2, 46, 2.68, -89.7, 0.77801, 66, -107.53, -89.7, 0.22199, 2, 46, -22.07, -19.3, 0.823, 66, -132.28, -19.3, 0.177, 2, 46, 1.2, 45.63, 0.51204, 66, -109.01, 45.63, 0.48796, 2, 46, 8.07, 64.81, 0.60869, 66, -102.14, 64.81, 0.39131, 2, 46, 35.44, 93.73, 0.80009, 66, -74.77, 93.73, 0.19991, 2, 46, 59.98, 119.66, 0.93554, 66, -50.23, 119.66, 0.06446, 2, 46, 109.26, 136.99, 0.99895, 66, -0.95, 136.99, 0.00105, 1, 46, 174.07, 135.27, 1, 3, 46, 205.59, 101.22, 0.80778, 49, -16.84, 104.63, 0.15658, 66, 95.38, 101.22, 0.03564, 3, 50, 58.94, 30.5, 0.43491, 49, 38.36, 61.89, 0.28116, 66, 119.35, 35.65, 0.28393, 2, 50, 75.56, 19.01, 0.92164, 66, 138.68, 41.52, 0.07836, 1, 50, 106.7, 26.9, 1, 1, 50, 83.79, -9.51, 1, 5, 47, 44.51, 27.24, 0.15139, 48, 19.12, 19.33, 0.44847, 50, -46.82, -15.19, 0.05757, 49, 72.19, -48.24, 0.1149, 66, 89.35, -75.58, 0.22767, 3, 47, 7.42, 19.08, 0.37772, 49, 34.32, -45.24, 0.09918, 66, 58.9, -52.89, 0.52311, 2, 49, 45.94, -9.07, 0.4826, 66, 87.99, -28.45, 0.5174, 2, 50, 20.62, -16.35, 0.7435, 66, 132.21, -23.49, 0.2565, 2, 50, 75.74, 0.94, 0.97172, 66, 152.95, 30.42, 0.02828, 4, 46, 200.45, 40.46, 0.18809, 50, 44.6, 56.29, 0.05831, 49, 11.15, 50.46, 0.14366, 66, 90.24, 40.46, 0.60994, 2, 46, 171.41, 90.12, 0.48644, 66, 61.2, 90.12, 0.51356, 2, 46, 164.84, -48.18, 0.43217, 66, 54.62, -48.18, 0.56783, 4, 46, 168.13, -6.02, 0.01949, 47, -28.65, 49.02, 0.02229, 49, 8.54, -6.09, 0.12791, 66, 57.92, -6.02, 0.83031, 2, 46, 167.84, 37.87, 0.15, 66, 57.63, 37.87, 0.85, 2, 46, 162.36, 71.5, 0.24107, 66, 52.15, 71.5, 0.75893, 2, 46, 163.11, -47.44, 0.41951, 66, 52.9, -47.44, 0.58049, 2, 46, 165.94, -5.87, 0.16355, 66, 55.73, -5.87, 0.83645, 2, 46, 165.14, 37.38, 0.15, 66, 54.93, 37.38, 0.85, 2, 46, 157.6, 71.4, 0.21735, 66, 47.39, 71.4, 0.78265, 3, 46, 163.5, -99.54, 0.61812, 47, 39.01, -15.71, 0.30445, 66, 53.29, -99.54, 0.07744, 2, 46, 45.38, 27.24, 0.16741, 66, -64.83, 27.24, 0.83259, 2, 46, 63.74, 44.98, 0.15, 66, -46.47, 44.98, 0.85, 2, 46, 70.7, 61.92, 0.22175, 66, -39.51, 61.92, 0.77825, 2, 46, 62.88, 78.71, 0.38, 66, -47.34, 78.71, 0.62, 2, 46, 46.53, 85.3, 0.51, 66, -63.68, 85.3, 0.49, 2, 46, 29.92, 79.34, 0.388, 66, -80.29, 79.34, 0.612, 2, 46, 15.08, 62.21, 0.38, 66, -95.13, 62.21, 0.62, 2, 46, 14.09, 45.32, 0.41, 66, -96.12, 45.32, 0.59, 2, 46, 24.3, 27.06, 0.192, 66, -85.91, 27.06, 0.808, 1, 66, -61.57, 15.3, 1, 2, 46, 84.87, 62.14, 0.16757, 66, -25.34, 62.14, 0.83243, 2, 46, 61.9, 94.84, 0.68145, 66, -48.31, 94.84, 0.31855, 2, 46, 22.54, 21.88, 0.16, 66, -87.67, 21.88, 0.84, 2, 46, 43.15, -95.95, 0.73445, 66, -67.06, -95.95, 0.26555, 2, 46, 41.77, -87.24, 0.67858, 66, -68.44, -87.24, 0.32142, 2, 46, 60.05, -70.36, 0.50195, 66, -50.16, -70.36, 0.49805, 2, 46, 48.49, 51.09, 0.25, 66, -61.72, 51.09, 0.75, 2, 46, 48.17, 73.71, 0.15634, 66, -62.04, 73.71, 0.84366 ], + "hull": 29, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 56, 54, 56, 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 42, 44, 32, 34, 4, 58, 58, 60, 62, 64, 64, 66, 66, 54, 50, 68, 68, 70, 70, 44, 60, 72, 62, 74, 72, 74, 74, 76, 76, 78, 78, 44, 16, 80, 80, 82, 82, 84, 84, 86, 86, 44, 14, 88, 88, 72, 14, 16, 10, 12, 12, 14, 12, 60, 90, 92, 92, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 90, 108, 110, 110, 112, 38, 40, 40, 42, 112, 40, 34, 36, 36, 38, 36, 114, 114, 108, 30, 32, 30, 28, 24, 26, 28, 26, 22, 24, 22, 20, 20, 18, 18, 16, 28, 116, 116, 118, 118, 120, 120, 20 ], + "width": 271, + "height": 298 + } + }, + "head-bb": { + "head": { + "type": "boundingbox", + "vertexCount": 6, + "vertices": [ -19.14, -70.3, 40.8, -118.08, 257.78, -115.62, 285.17, 57.18, 120.77, 164.95, -5.07, 76.95 ] + } + }, + "hoverboard-board": { + "hoverboard-board": { + "type": "mesh", + "uvs": [ 0.13865, 0.56624, 0.11428, 0.51461, 0.07619, 0.52107, 0.02364, 0.52998, 0.01281, 0.53182, 0, 0.37979, 0, 0.2206, 0.00519, 0.10825, 0.01038, 0.10726, 0.03834, 0.10194, 0.05091, 0, 0.08326, 0, 0.10933, 0.04206, 0.1382, 0.08865, 0.18916, 0.24067, 0.22234, 0.4063, 0.23886, 0.44063, 0.83412, 0.44034, 0.88444, 0.38296, 0.92591, 0.32639, 0.95996, 0.28841, 0.98612, 0.28542, 1, 0.38675, 0.99494, 0.47104, 0.97883, 0.53251, 0.94409, 0.62135, 0.90206, 0.69492, 0.86569, 0.71094, 0.82822, 0.70791, 0.81286, 0.77127, 0.62931, 0.77266, 0.61364, 0.70645, 0.47166, 0.70664, 0.45901, 0.77827, 0.27747, 0.76986, 0.2658, 0.70372, 0.24976, 0.71381, 0.24601, 0.77827, 0.23042, 0.84931, 0.20926, 0.90956, 0.17299, 1, 0.15077, 0.99967, 0.12906, 0.90192, 0.10369, 0.73693, 0.10198, 0.62482, 0.09131, 0.47272, 0.09133, 0.41325, 0.15082, 0.41868, 0.21991, 0.51856, 0.06331, 0.10816, 0.08383, 0.21696, 0.08905, 0.37532, 0.15903, 0.58726, 0.17538, 0.65706, 0.20118, 0.8029, 0.17918, 0.55644, 0.22166, 0.5802, 0.86259, 0.57962, 0.92346, 0.48534, 0.96691, 0.36881, 0.0945, 0.13259, 0.12688, 0.17831, 0.15986, 0.24682, 0.18036, 0.31268, 0.20607, 0.4235, 0.16074, 0.85403, 0.13624, 0.70122, 0.12096, 0.64049, 0.02396, 0.21811, 0.02732, 0.37839, 0.02557, 0.4972, 0.14476, 0.45736, 0.18019, 0.51689, 0.19692, 0.56636 ], + "triangles": [ 10, 11, 12, 9, 10, 12, 49, 9, 12, 60, 49, 12, 13, 60, 12, 61, 60, 13, 50, 49, 60, 50, 60, 61, 68, 8, 9, 68, 9, 49, 68, 49, 50, 7, 8, 68, 6, 7, 68, 61, 13, 14, 62, 61, 14, 50, 61, 62, 63, 62, 14, 59, 20, 21, 19, 20, 59, 51, 50, 62, 51, 62, 63, 51, 69, 68, 51, 68, 50, 6, 68, 69, 5, 6, 69, 18, 19, 59, 15, 63, 14, 59, 21, 22, 47, 51, 63, 47, 46, 51, 47, 63, 64, 15, 64, 63, 64, 15, 16, 71, 46, 47, 23, 59, 22, 69, 51, 70, 45, 46, 71, 70, 51, 2, 58, 18, 59, 58, 59, 23, 17, 18, 58, 70, 5, 69, 2, 51, 46, 1, 45, 71, 47, 48, 71, 47, 64, 48, 48, 72, 71, 1, 71, 72, 16, 48, 64, 45, 2, 46, 2, 45, 1, 70, 4, 5, 3, 70, 2, 3, 4, 70, 24, 58, 23, 72, 0, 1, 73, 55, 72, 55, 0, 72, 48, 73, 72, 57, 17, 58, 25, 57, 58, 56, 48, 16, 73, 48, 56, 56, 16, 17, 56, 17, 57, 52, 0, 55, 24, 25, 58, 44, 0, 52, 67, 44, 52, 52, 56, 53, 73, 52, 55, 56, 52, 73, 67, 52, 53, 26, 57, 25, 66, 67, 53, 56, 32, 35, 53, 56, 35, 56, 57, 32, 28, 31, 57, 57, 31, 32, 57, 27, 28, 26, 27, 57, 36, 53, 35, 43, 44, 67, 43, 67, 66, 34, 35, 32, 29, 31, 28, 30, 31, 29, 53, 54, 66, 53, 36, 54, 33, 34, 32, 37, 54, 36, 65, 43, 66, 38, 54, 37, 54, 65, 66, 39, 65, 54, 42, 43, 65, 38, 39, 54, 40, 42, 65, 40, 41, 42, 65, 39, 40 ], + "vertices": [ -189.36, 15.62, -201.35, 23.47, -220.09, 22.49, -245.95, 21.13, -251.28, 20.86, -257.58, 43.96, -257.57, 68.16, -255.02, 85.24, -252.47, 85.39, -238.71, 86.2, -232.52, 101.69, -216.61, 101.69, -203.78, 95.3, -189.58, 88.21, -164.51, 65.1, -148.19, 39.93, -140.06, 34.71, 152.82, 34.73, 177.57, 43.45, 197.97, 52.05, 214.72, 57.82, 227.6, 58.27, 234.42, 42.87, 231.94, 30.06, 224.01, 20.72, 206.91, 7.21, 186.23, -3.97, 168.34, -6.4, 149.9, -5.94, 142.35, -15.57, 52.04, -15.77, 44.33, -5.71, -25.52, -5.73, -31.75, -16.62, -121.07, -15.34, -126.81, -5.28, -134.7, -6.81, -136.54, -16.61, -144.22, -27.41, -154.63, -36.57, -172.47, -50.31, -183.41, -50.26, -194.09, -35.4, -206.56, -10.32, -207.4, 6.72, -212.65, 29.84, -212.64, 38.88, -183.37, 38.05, -149.38, 22.86, -226.43, 85.25, -216.33, 68.71, -213.76, 44.64, -179.34, 12.42, -171.29, 1.81, -158.6, -20.36, -169.42, 17.11, -148.52, 13.49, 166.82, 13.56, 196.76, 27.89, 218.14, 45.6, -211.08, 81.54, -195.15, 74.59, -178.93, 64.17, -168.84, 54.16, -156.19, 37.31, -178.5, -28.13, -190.55, -4.9, -198.07, 4.33, -245.79, 68.54, -244.14, 44.18, -245, 26.12, -186.36, 32.17, -168.92, 23.12, -160.69, 15.6 ], + "hull": 45, + "edges": [ 0, 2, 8, 10, 10, 12, 12, 14, 18, 20, 20, 22, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 70, 72, 72, 74, 80, 82, 82, 84, 84, 86, 86, 88, 0, 88, 2, 90, 90, 92, 92, 94, 94, 96, 96, 32, 18, 98, 98, 100, 100, 102, 2, 4, 102, 4, 92, 102, 0, 104, 104, 106, 106, 108, 78, 80, 108, 78, 74, 76, 76, 78, 62, 56, 64, 70, 0, 110, 112, 114, 114, 116, 116, 118, 118, 42, 50, 116, 114, 34, 98, 120, 120, 122, 22, 24, 24, 26, 120, 24, 122, 124, 124, 126, 126, 128, 128, 96, 80, 130, 130, 132, 132, 134, 134, 88, 14, 16, 16, 18, 136, 16, 136, 138, 138, 140, 4, 6, 6, 8, 140, 6, 96, 112, 92, 142, 142, 144, 110, 146, 146, 112, 144, 146 ], + "width": 492, + "height": 152 + } + }, + "hoverboard-thruster-front": { + "hoverboard-thruster": { "x": 0.02, "y": -7.08, "rotation": 0.17, "width": 60, "height": 64 } + }, + "hoverboard-thruster-rear": { + "hoverboard-thruster": { "x": 1.1, "y": -6.29, "rotation": 0.17, "width": 60, "height": 64 } + }, + "hoverglow-front": { + "hoverglow-small": { + "x": 2.13, + "y": -2, + "scaleX": 0.303, + "scaleY": 0.495, + "rotation": 0.15, + "width": 274, + "height": 75 + } + }, + "hoverglow-rear": { + "hoverglow-small": { + "x": 1.39, + "y": -2.09, + "scaleX": 0.303, + "scaleY": 0.495, + "rotation": 0.61, + "width": 274, + "height": 75 + } + }, + "mouth": { + "mouth-grind": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 66, -98.93, -85.88, 0.22, 46, 11.28, -85.88, 0.78, 2, 66, -129.77, 1.84, 0.6, 46, -19.56, 1.84, 0.4, 2, 66, -74.12, 21.41, 0.6, 46, 36.09, 21.41, 0.4, 2, 66, -43.28, -66.32, 0.4, 46, 66.93, -66.32, 0.6 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth-oooo": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 46, 11.28, -85.89, 0.22, 66, -98.93, -85.89, 0.78, 2, 46, -19.56, 1.85, 0.6, 66, -129.78, 1.85, 0.4, 2, 46, 36.1, 21.42, 0.6, 66, -74.12, 21.42, 0.4, 2, 46, 66.94, -66.32, 0.4, 66, -43.27, -66.32, 0.6 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth-smile": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 66, -98.93, -85.89, 0.21075, 46, 11.28, -85.89, 0.78925, 2, 66, -129.77, 1.85, 0.6, 46, -19.56, 1.85, 0.4, 2, 66, -74.11, 21.42, 0.6, 46, 36.1, 21.42, 0.4, 2, 66, -43.27, -66.32, 0.40772, 46, 66.94, -66.32, 0.59228 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + } + }, + "muzzle": { + "muzzle01": { + "x": 151.97, + "y": 5.81, + "scaleX": 3.7361, + "scaleY": 3.7361, + "rotation": 0.15, + "width": 133, + "height": 79 + }, + "muzzle02": { + "x": 187.25, + "y": 5.9, + "scaleX": 4.0623, + "scaleY": 4.0623, + "rotation": 0.15, + "width": 135, + "height": 84 + }, + "muzzle03": { + "x": 231.96, + "y": 6.02, + "scaleX": 4.1325, + "scaleY": 4.1325, + "rotation": 0.15, + "width": 166, + "height": 106 + }, + "muzzle04": { + "x": 231.96, + "y": 6.02, + "scaleX": 4.0046, + "scaleY": 4.0046, + "rotation": 0.15, + "width": 149, + "height": 90 + }, + "muzzle05": { + "x": 293.8, + "y": 6.19, + "scaleX": 4.4673, + "scaleY": 4.4673, + "rotation": 0.15, + "width": 135, + "height": 75 + } + }, + "muzzle-glow": { + "muzzle-glow": { "width": 50, "height": 50 } + }, + "muzzle-ring": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "muzzle-ring2": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "muzzle-ring3": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "muzzle-ring4": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "neck": { + "neck": { "x": 9.77, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 } + }, + "portal-bg": { + "portal-bg": { "x": -3.1, "y": 7.25, "scaleX": 1.0492, "scaleY": 1.0492, "width": 266, "height": 266 } + }, + "portal-flare1": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare2": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare3": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare4": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare5": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare6": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare7": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare8": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare9": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare10": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-shade": { + "portal-shade": { "width": 266, "height": 266 } + }, + "portal-streaks1": { + "portal-streaks1": { "scaleX": 0.9774, "scaleY": 0.9774, "width": 252, "height": 256 } + }, + "portal-streaks2": { + "portal-streaks2": { "x": -1.64, "y": 2.79, "width": 250, "height": 249 } + }, + "rear-bracer": { + "rear-bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 } + }, + "rear-foot": { + "rear-foot": { + "type": "mesh", + "uvs": [ 0.48368, 0.1387, 0.51991, 0.21424, 0.551, 0.27907, 0.58838, 0.29816, 0.63489, 0.32191, 0.77342, 0.39267, 1, 0.73347, 1, 1, 0.54831, 0.99883, 0.31161, 1, 0, 1, 0, 0.41397, 0.13631, 0, 0.41717, 0 ], + "triangles": [ 8, 3, 4, 8, 4, 5, 8, 5, 6, 8, 6, 7, 11, 1, 10, 3, 9, 2, 2, 10, 1, 12, 13, 0, 0, 11, 12, 1, 11, 0, 2, 9, 10, 3, 8, 9 ], + "vertices": [ 2, 8, 10.45, 29.41, 0.90802, 9, -6.74, 49.62, 0.09198, 2, 8, 16.56, 29.27, 0.84259, 9, -2.65, 45.09, 0.15741, 2, 8, 21.8, 29.15, 0.69807, 9, 0.85, 41.2, 0.30193, 2, 8, 25.53, 31.43, 0.52955, 9, 5.08, 40.05, 0.47045, 2, 8, 30.18, 34.27, 0.39303, 9, 10.33, 38.62, 0.60697, 2, 8, 44.02, 42.73, 0.27525, 9, 25.98, 34.36, 0.72475, 2, 8, 76.47, 47.28, 0.21597, 9, 51.56, 13.9, 0.78403, 2, 8, 88.09, 36.29, 0.28719, 9, 51.55, -2.09, 0.71281, 2, 8, 52.94, -0.73, 0.47576, 9, 0.52, -1.98, 0.52424, 2, 8, 34.63, -20.23, 0.68757, 9, -26.23, -2.03, 0.31243, 2, 8, 10.44, -45.81, 0.84141, 9, -61.43, -2, 0.15859, 2, 8, -15.11, -21.64, 0.93283, 9, -61.4, 33.15, 0.06717, 1, 8, -22.57, 6.61, 1, 1, 8, -0.76, 29.67, 1 ], + "hull": 14, + "edges": [ 14, 12, 10, 12, 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 24, 26, 22, 24, 4, 2, 2, 20, 4, 6, 6, 16, 6, 8, 8, 10, 2, 0, 0, 26 ], + "width": 113, + "height": 60 + } + }, + "rear-shin": { + "rear-shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 } + }, + "rear-thigh": { + "rear-thigh": { "x": 33.11, "y": -4.11, "rotation": 72.54, "width": 55, "height": 94 } + }, + "rear-upper-arm": { + "rear-upper-arm": { "x": 21.13, "y": 4.09, "rotation": 89.33, "width": 40, "height": 87 } + }, + "side-glow1": { + "hoverglow-small": { "x": 2.09, "scaleX": 0.2353, "scaleY": 0.4132, "width": 274, "height": 75 } + }, + "side-glow2": { + "hoverglow-small": { "x": 2.09, "scaleX": 0.2353, "scaleY": 0.4132, "width": 274, "height": 75 } + }, + "side-glow3": { + "hoverglow-small": { "x": 2.09, "scaleX": 0.3586, "scaleY": 0.6297, "width": 274, "height": 75 } + }, + "torso": { + "torso": { + "type": "mesh", + "uvs": [ 0.6251, 0.12672, 1, 0.26361, 1, 0.28871, 1, 0.66021, 1, 0.68245, 0.92324, 0.69259, 0.95116, 0.84965, 0.77124, 1, 0.49655, 1, 0.27181, 1, 0.13842, 0.77196, 0.09886, 0.6817, 0.05635, 0.58471, 0, 0.45614, 0, 0.33778, 0, 0.19436, 0.14463, 0, 0.27802, 0, 0.72525, 0.27835, 0.76091, 0.46216, 0.84888, 0.67963, 0.68257, 0.63249, 0.53986, 0.3847, 0.25443, 0.3217, 0.30063, 0.55174, 0.39553, 0.79507, 0.26389, 0.17007, 0.5241, 0.18674, 0.71492, 0.76655, 0.82151, 0.72956, 0.27626, 0.4304, 0.62327, 0.52952, 0.3455, 0.66679, 0.53243, 0.2914 ], + "triangles": [ 18, 1, 2, 19, 2, 3, 18, 0, 1, 23, 15, 26, 27, 26, 16, 14, 15, 23, 15, 16, 26, 17, 27, 16, 13, 14, 23, 0, 27, 17, 13, 23, 30, 11, 12, 24, 21, 31, 19, 12, 13, 30, 24, 22, 31, 31, 22, 19, 12, 30, 24, 32, 24, 31, 24, 30, 22, 3, 20, 19, 32, 31, 21, 11, 24, 32, 4, 5, 3, 8, 28, 7, 7, 29, 6, 7, 28, 29, 9, 25, 8, 8, 25, 28, 9, 10, 25, 29, 5, 6, 10, 32, 25, 25, 21, 28, 25, 32, 21, 10, 11, 32, 28, 21, 29, 29, 20, 5, 29, 21, 20, 5, 20, 3, 20, 21, 19, 33, 26, 27, 22, 18, 19, 19, 18, 2, 33, 27, 18, 30, 23, 22, 22, 33, 18, 23, 33, 22, 33, 23, 26, 27, 0, 18 ], + "vertices": [ 2, 29, 44.59, -10.39, 0.88, 40, -17.65, 33.99, 0.12, 3, 28, 59.65, -45.08, 0.12189, 29, 17.13, -45.08, 0.26811, 40, 22.68, 15.82, 0.61, 3, 28, 55.15, -44.72, 0.1345, 29, 12.63, -44.72, 0.2555, 40, 23.43, 11.37, 0.61, 3, 27, 31.01, -39.45, 0.51133, 28, -11.51, -39.45, 0.30867, 40, 34.58, -54.57, 0.18, 3, 27, 27.01, -39.14, 0.53492, 28, -15.5, -39.14, 0.28508, 40, 35.25, -58.52, 0.18, 2, 27, 25.79, -31.5, 0.75532, 28, -16.73, -31.5, 0.24468, 1, 27, -2.61, -32, 1, 1, 27, -28.2, -12.29, 1, 1, 27, -26.08, 14.55, 1, 1, 27, -24.35, 36.5, 1, 2, 27, 17.6, 46.3, 0.8332, 28, -24.92, 46.3, 0.1668, 2, 27, 34.1, 48.89, 0.59943, 28, -8.42, 48.89, 0.40058, 3, 27, 51.83, 51.67, 0.29262, 28, 9.32, 51.67, 0.63181, 29, -33.2, 51.67, 0.07557, 3, 27, 75.34, 55.35, 0.06656, 28, 32.82, 55.35, 0.62298, 29, -9.7, 55.35, 0.31046, 2, 28, 54.06, 53.67, 0.37296, 29, 11.54, 53.67, 0.62704, 2, 28, 79.79, 51.64, 0.10373, 29, 37.27, 51.64, 0.89627, 1, 29, 71.04, 34.76, 1, 1, 29, 70.01, 21.72, 1, 1, 30, 36.74, 7.06, 1, 3, 30, 45.7, -24.98, 0.67, 28, 25.87, -18.9, 0.3012, 29, -16.65, -18.9, 0.0288, 2, 27, 28.69, -24.42, 0.77602, 28, -13.83, -24.42, 0.22398, 3, 30, 43.24, -56.49, 0.064, 27, 38.43, -8.84, 0.67897, 28, -4.09, -8.84, 0.25703, 3, 30, 22.02, -14.85, 0.29, 28, 41.48, 1.59, 0.53368, 29, -1.04, 1.59, 0.17632, 3, 30, -7.45, -8.33, 0.76, 28, 54.98, 28.59, 0.06693, 29, 12.46, 28.59, 0.17307, 3, 30, 3.91, -48.4, 0.25, 27, 55.87, 27.33, 0.15843, 28, 13.35, 27.33, 0.59157, 1, 27, 11.47, 21.51, 1, 2, 30, -11.09, 18.74, 0.416, 29, 39.6, 25.51, 0.584, 2, 30, 14.56, 20.03, 0.53, 29, 34.6, 0.33, 0.47, 1, 27, 14.12, -10.1, 1, 2, 27, 19.94, -21.03, 0.92029, 28, -22.58, -21.03, 0.07971, 3, 30, -2.08, -27.26, 0.29, 28, 35.31, 27.99, 0.49582, 29, -7.21, 27.99, 0.21418, 2, 30, 34.42, -39.19, 0.25, 28, 14.84, -4.5, 0.75, 2, 27, 34.87, 24.58, 0.67349, 28, -7.64, 24.58, 0.32651, 2, 30, 18.5, 1.59, 0.76, 29, 15.76, 1, 0.24 ], + "hull": 18, + "edges": [ 14, 12, 12, 10, 10, 8, 18, 20, 32, 34, 30, 32, 2, 4, 36, 4, 36, 38, 38, 40, 4, 6, 6, 8, 40, 6, 40, 42, 14, 16, 16, 18, 50, 16, 46, 52, 54, 36, 2, 0, 0, 34, 54, 0, 54, 32, 20, 50, 14, 56, 56, 42, 50, 56, 56, 58, 58, 40, 58, 10, 46, 60, 60, 48, 26, 60, 60, 44, 24, 26, 24, 48, 42, 62, 62, 44, 48, 62, 48, 64, 64, 50, 42, 64, 20, 22, 22, 24, 64, 22, 26, 28, 28, 30, 28, 46, 44, 66, 66, 54, 46, 66, 66, 36, 62, 38 ], + "width": 98, + "height": 180 + } + } + } + } +], +"events": { + "footstep": {} +}, +"animations": { + "aim": { + "slots": { + "crosshair": { + "attachment": [ + { "name": "crosshair" } + ] + } + }, + "bones": { + "front-fist": { + "rotate": [ + { "value": 36.08 } + ] + }, + "rear-bracer": { + "rotate": [ + { "value": -26.55 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { "value": 62.31 } + ] + }, + "front-bracer": { + "rotate": [ + { "value": 9.11 } + ] + }, + "gun": { + "rotate": [ + { "value": -0.31 } + ] + } + }, + "ik": { + "aim-ik": [ + { "mix": 0.995 } + ] + }, + "transform": { + "aim-front-arm-transform": [ + { "mixRotate": 0.784, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ], + "aim-head-transform": [ + { "mixRotate": 0.659, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ], + "aim-torso-transform": [ + { "mixRotate": 0.423, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ] + } + }, + "death": { + "slots": { + "eye": { + "attachment": [ + { "name": "eye-surprised" }, + { "time": 0.5333, "name": "eye-indifferent" }, + { "time": 2.2, "name": "eye-surprised" }, + { "time": 4.6, "name": "eye-indifferent" } + ] + }, + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + }, + "mouth": { + "attachment": [ + { "name": "mouth-oooo" }, + { "time": 0.5333, "name": "mouth-grind" }, + { "time": 1.4, "name": "mouth-oooo" }, + { "time": 2.1667, "name": "mouth-grind" }, + { "time": 4.5333, "name": "mouth-oooo" } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { + "value": -2.83, + "curve": [ 0.015, -2.83, 0.036, 12.72 ] + }, + { + "time": 0.0667, + "value": 12.19, + "curve": [ 0.096, 11.68, 0.119, -1.14 ] + }, + { + "time": 0.1333, + "value": -6.86, + "curve": [ 0.149, -13.27, 0.21, -37.28 ] + }, + { + "time": 0.3, + "value": -36.86, + "curve": [ 0.354, -36.61, 0.412, -32.35 ] + }, + { + "time": 0.4667, + "value": -23.49, + "curve": [ 0.49, -19.87, 0.512, -3.29 ] + }, + { + "time": 0.5333, + "value": -3.24, + "curve": [ 0.56, -3.39, 0.614, -67.25 ] + }, + { + "time": 0.6333, + "value": -74.4, + "curve": [ 0.652, -81.58, 0.702, -88.94 ] + }, + { + "time": 0.7333, + "value": -88.93, + "curve": [ 0.805, -88.91, 0.838, -80.87 ] + }, + { + "time": 0.8667, + "value": -81.03, + "curve": [ 0.922, -81.32, 0.976, -85.29 ] + }, + { "time": 1, "value": -85.29, "curve": "stepped" }, + { + "time": 2.2333, + "value": -85.29, + "curve": [ 2.314, -85.29, 2.382, -68.06 ] + }, + { + "time": 2.4667, + "value": -63.48, + "curve": [ 2.57, -57.87, 2.916, -55.24 ] + }, + { + "time": 3.2, + "value": -55.1, + "curve": [ 3.447, -54.98, 4.135, -56.61 ] + }, + { + "time": 4.2667, + "value": -58.23, + "curve": [ 4.672, -63.24, 4.646, -82.69 ] + }, + { "time": 4.9333, "value": -85.29 } + ], + "scale": [ + { + "time": 0.4667, + "curve": [ 0.469, 1.005, 0.492, 1.065, 0.475, 1.018, 0.492, 0.94 ] + }, + { + "time": 0.5, + "x": 1.065, + "y": 0.94, + "curve": [ 0.517, 1.065, 0.541, 0.991, 0.517, 0.94, 0.542, 1.026 ] + }, + { + "time": 0.5667, + "x": 0.99, + "y": 1.025, + "curve": [ 0.593, 0.988, 0.609, 1.002, 0.595, 1.024, 0.607, 1.001 ] + }, + { "time": 0.6333 } + ] + }, + "neck": { + "rotate": [ + { + "value": -2.83, + "curve": [ 0.114, 1.33, 0.195, 4.13 ] + }, + { + "time": 0.2667, + "value": 4.13, + "curve": [ 0.351, 4.14, 0.444, -24.5 ] + }, + { + "time": 0.5, + "value": -24.69, + "curve": [ 0.571, -23.89, 0.55, 34.22 ] + }, + { + "time": 0.6667, + "value": 35.13, + "curve": [ 0.713, 34.81, 0.756, 22.76 ] + }, + { + "time": 0.8333, + "value": 22.82, + "curve": [ 0.868, 22.84, 0.916, 47.95 ] + }, + { "time": 0.9667, "value": 47.95, "curve": "stepped" }, + { + "time": 2.2333, + "value": 47.95, + "curve": [ 2.3, 47.95, 2.617, 18.72 ] + }, + { + "time": 2.6667, + "value": 18.51, + "curve": [ 3.172, 16.58, 4.06, 16.79 ] + }, + { + "time": 4.5333, + "value": 18.51, + "curve": [ 4.707, 19.13, 4.776, 41.11 ] + }, + { "time": 4.8, "value": 47.95 } + ] + }, + "torso": { + "rotate": [ + { + "value": -8.62, + "curve": [ 0.01, -16.71, 0.032, -33.6 ] + }, + { + "time": 0.0667, + "value": -33.37, + "curve": [ 0.182, -32.61, 0.298, 123.07 ] + }, + { + "time": 0.4667, + "value": 122.77, + "curve": [ 0.511, 122.69, 0.52, 100.2 ] + }, + { + "time": 0.5667, + "value": 88.96, + "curve": [ 0.588, 83.89, 0.667, 75.34 ] + }, + { + "time": 0.7, + "value": 75.34, + "curve": [ 0.767, 75.34, 0.9, 76.03 ] + }, + { "time": 0.9667, "value": 76.03 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -38.86, + "curve": [ 0.022, -40.38, 0.096, -41.92 ] + }, + { + "time": 0.1333, + "value": -41.92, + "curve": [ 0.176, -41.92, 0.216, -16.92 ] + }, + { + "time": 0.2333, + "value": -4.35, + "curve": [ 0.258, 13.69, 0.308, 60.35 ] + }, + { + "time": 0.4, + "value": 60.17, + "curve": [ 0.496, 59.98, 0.539, 33.63 ] + }, + { + "time": 0.5667, + "value": 23.06, + "curve": [ 0.595, 32.71, 0.675, 53.71 ] + }, + { + "time": 0.7333, + "value": 53.61, + "curve": [ 0.797, 53.51, 0.926, 30.98 ] + }, + { "time": 0.9333, "value": 19.57, "curve": "stepped" }, + { + "time": 1.9667, + "value": 19.57, + "curve": [ 2.245, 19.57, 2.702, 77.03 ] + }, + { + "time": 3.0667, + "value": 77.06, + "curve": [ 3.209, 77.33, 3.291, 67.99 ] + }, + { + "time": 3.4333, + "value": 67.96, + "curve": [ 3.608, 68.34, 3.729, 73.88 ] + }, + { + "time": 3.8333, + "value": 73.42, + "curve": [ 4.152, 73.91, 4.46, 71.98 ] + }, + { + "time": 4.6333, + "value": 64.77, + "curve": [ 4.688, 62.5, 4.847, 26.42 ] + }, + { "time": 4.8667, "value": 10.94 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": -44.7, + "curve": [ 0.033, -44.7, 0.12, 54.89 ] + }, + { + "time": 0.1333, + "value": 64.62, + "curve": [ 0.154, 79.18, 0.214, 79.42 ] + }, + { + "time": 0.2667, + "value": 63.4, + "curve": [ 0.293, 55.19, 0.332, 30.13 ] + }, + { + "time": 0.3667, + "value": 30.13, + "curve": [ 0.4, 30.13, 0.441, 39.87 ] + }, + { + "time": 0.4667, + "value": 55.13, + "curve": [ 0.488, 68.18, 0.52, 100.72 ] + }, + { + "time": 0.5333, + "value": 111.96, + "curve": [ 0.551, 126.88, 0.627, 185.97 ] + }, + { + "time": 0.6667, + "value": 185.97, + "curve": [ 0.692, 185.97, 0.736, 162.43 ] + }, + { + "time": 0.8, + "value": 158.01, + "curve": [ 0.9, 151.12, 1.017, 144.01 ] + }, + { "time": 1.1, "value": 144.01, "curve": "stepped" }, + { + "time": 2.3667, + "value": 144.01, + "curve": [ 2.492, 144.01, 2.742, 138.63 ] + }, + { + "time": 2.8667, + "value": 138.63, + "curve": [ 3.067, 138.63, 3.467, 138.63 ] + }, + { + "time": 3.6667, + "value": 138.63, + "curve": [ 3.883, 138.63, 4.317, 135.18 ] + }, + { + "time": 4.5333, + "value": 135.18, + "curve": [ 4.575, 135.18, 4.692, 131.59 ] + }, + { + "time": 4.7333, + "value": 131.59, + "curve": [ 4.758, 131.59, 4.517, 144.01 ] + }, + { "time": 4.8333, "value": 144.01 } + ], + "translate": [ + { + "time": 0.4667, + "curve": [ 0.517, 0, 0.617, -34.96, 0.517, 0, 0.617, -16.59 ] + }, + { "time": 0.6667, "x": -35.02, "y": -16.62 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 21.88, + "curve": [ 0.033, 21.88, 0.099, 20.44 ] + }, + { + "time": 0.1333, + "value": 9.43, + "curve": [ 0.164, -0.29, 0.162, -38.26 ] + }, + { + "time": 0.2, + "value": -38.05, + "curve": [ 0.24, -37.96, 0.228, -17.82 ] + }, + { + "time": 0.3333, + "value": -9.73, + "curve": [ 0.372, -6.76, 0.431, -0.74 ] + }, + { + "time": 0.4667, + "value": 6.47, + "curve": [ 0.489, 11.05, 0.503, 19.09 ] + }, + { + "time": 0.5333, + "value": 19.09, + "curve": [ 0.571, 19.09, 0.554, -42.67 ] + }, + { + "time": 0.6, + "value": -42.67, + "curve": [ 0.653, -42.67, 0.691, -13.8 ] + }, + { + "time": 0.7, + "value": -3.54, + "curve": [ 0.707, 3.8, 0.719, 24.94 ] + }, + { + "time": 0.8, + "value": 25.31, + "curve": [ 0.902, 24.75, 0.992, -0.34 ] + }, + { "time": 1, "value": -32.16, "curve": "stepped" }, + { + "time": 2.2333, + "value": -32.16, + "curve": [ 2.6, -32.16, 2.638, -5.3 ] + }, + { + "time": 2.7, + "value": -1.96, + "curve": [ 2.707, -1.56, 2.775, 1.67 ] + }, + { + "time": 2.8, + "value": 1.67, + "curve": [ 2.825, 1.67, 2.875, -0.39 ] + }, + { + "time": 2.9, + "value": -0.39, + "curve": [ 2.925, -0.39, 2.975, 0.26 ] + }, + { + "time": 3, + "value": 0.26, + "curve": [ 3.025, 0.26, 3.075, -1.81 ] + }, + { + "time": 3.1, + "value": -1.81, + "curve": [ 3.125, -1.81, 3.175, -0.52 ] + }, + { + "time": 3.2, + "value": -0.52, + "curve": [ 3.225, -0.52, 3.275, -2.41 ] + }, + { + "time": 3.3, + "value": -2.41, + "curve": [ 3.333, -2.41, 3.4, -0.38 ] + }, + { + "time": 3.4333, + "value": -0.38, + "curve": [ 3.467, -0.38, 3.533, -2.25 ] + }, + { + "time": 3.5667, + "value": -2.25, + "curve": [ 3.592, -2.25, 3.642, -0.33 ] + }, + { + "time": 3.6667, + "value": -0.33, + "curve": [ 3.7, -0.33, 3.767, -1.34 ] + }, + { + "time": 3.8, + "value": -1.34, + "curve": [ 3.825, -1.34, 3.862, -0.77 ] + }, + { + "time": 3.9, + "value": -0.77, + "curve": [ 3.942, -0.77, 3.991, -1.48 ] + }, + { + "time": 4, + "value": -1.87, + "curve": [ 4.167, -1.87, 4.5, -1.96 ] + }, + { + "time": 4.6667, + "value": -1.96, + "curve": [ 4.709, 18.05, 4.767, 34.55 ] + }, + { + "time": 4.8, + "value": 34.55, + "curve": [ 4.84, 34.24, 4.902, 12.03 ] + }, + { "time": 4.9333, "value": -18.75 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -2.33, + "curve": [ 0.019, 4.43, 0.069, 10.82 ] + }, + { + "time": 0.1, + "value": 10.6, + "curve": [ 0.148, 10.6, 0.123, -15.24 ] + }, + { + "time": 0.2, + "value": -15.35, + "curve": [ 0.266, -15.44, 0.316, -6.48 ] + }, + { + "time": 0.3333, + "value": -3.9, + "curve": [ 0.362, 0.43, 0.479, 22.36 ] + }, + { + "time": 0.5667, + "value": 22.01, + "curve": [ 0.61, 21.84, 0.627, 12.85 ] + }, + { + "time": 0.6333, + "value": 9.05, + "curve": [ 0.643, 2.77, 0.622, -39.43 ] + }, + { + "time": 0.7, + "value": -39.5, + "curve": [ 0.773, -39.57, 0.814, 14.77 ] + }, + { + "time": 0.8667, + "value": 14.81, + "curve": [ 0.965, 14.88, 1.1, 5.64 ] + }, + { "time": 1.1, "value": -6.08, "curve": "stepped" }, + { + "time": 2.2333, + "value": -6.08, + "curve": [ 2.307, -6.08, 2.427, -25.89 ] + }, + { + "time": 2.5333, + "value": -22.42, + "curve": [ 2.598, -20.38, 2.657, 5.73 ] + }, + { + "time": 2.7, + "value": 5.73, + "curve": [ 2.77, 5.73, 2.851, -5.38 ] + }, + { + "time": 2.9333, + "value": -5.38, + "curve": [ 3.008, -5.38, 3.087, -4.54 ] + }, + { + "time": 3.1667, + "value": -4.17, + "curve": [ 3.223, -3.91, 4.486, 5.73 ] + }, + { + "time": 4.6667, + "value": 5.73, + "curve": [ 4.733, 5.73, 4.886, -2.47 ] + }, + { "time": 4.9333, "value": -6.52 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 10.36, + "curve": [ 0.033, 10.36, 0.1, -32.89 ] + }, + { + "time": 0.1333, + "value": -32.89, + "curve": [ 0.183, -32.89, 0.283, -4.45 ] + }, + { + "time": 0.3333, + "value": -4.45, + "curve": [ 0.367, -4.45, 0.438, -6.86 ] + }, + { + "time": 0.4667, + "value": -8.99, + "curve": [ 0.529, -13.62, 0.605, -20.58 ] + }, + { + "time": 0.6333, + "value": -23.2, + "curve": [ 0.708, -30.18, 0.758, -35.56 ] + }, + { + "time": 0.8, + "value": -35.56, + "curve": [ 0.875, -35.56, 1.025, -23.2 ] + }, + { "time": 1.1, "value": -23.2 } + ] + }, + "gun": { + "rotate": [ + { + "value": -2.79, + "curve": [ 0.033, -2.79, 0.12, -7.22 ] + }, + { + "time": 0.1333, + "value": -8.52, + "curve": [ 0.168, -11.87, 0.29, -23.71 ] + }, + { + "time": 0.3333, + "value": -26.24, + "curve": [ 0.369, -28.31, 0.436, -29.75 ] + }, + { + "time": 0.5, + "value": -29.66, + "curve": [ 0.552, -29.58, 0.611, -25.47 ] + }, + { + "time": 0.6333, + "value": -22.68, + "curve": [ 0.656, -19.76, 0.68, -10.02 ] + }, + { + "time": 0.7, + "value": -6.49, + "curve": [ 0.722, -2.6, 0.75, -1.22 ] + }, + { + "time": 0.7667, + "value": -1.35, + "curve": [ 0.792, -1.55, 0.842, -19.74 ] + }, + { "time": 0.8667, "value": -19.8 } + ] + }, + "hip": { + "translate": [ + { + "curve": [ 0.098, -42.62, 0.166, -79.85, 0.029, 84.97, 0.109, 155.93 ] + }, + { + "time": 0.2667, + "x": -133.79, + "y": 152.44, + "curve": [ 0.361, -184.63, 0.392, -203.69, 0.42, 149.12, 0.467, -15.7 ] + }, + { + "time": 0.4667, + "x": -230.02, + "y": -113.87, + "curve": [ 0.523, -249.86, 0.565, -261.7, 0.473, -133.1, 0.583, -203.43 ] + }, + { + "time": 0.6, + "x": -268.57, + "y": -203.43, + "curve": [ 0.663, -280.98, 0.816, -290.05, 0.708, -203.43, 0.892, -203.5 ] + }, + { "time": 1, "x": -290.42, "y": -203.5 } + ] + }, + "front-thigh": { + "rotate": [ + { + "curve": [ 0.06, 1.02, 0.151, 45.23 ] + }, + { + "time": 0.1667, + "value": 54.01, + "curve": [ 0.19, 66.85, 0.358, 169.85 ] + }, + { + "time": 0.5, + "value": 169.51, + "curve": [ 0.628, 169.85, 0.692, 108.85 ] + }, + { + "time": 0.7, + "value": 97.74, + "curve": [ 0.723, 102.6, 0.805, 111.6 ] + }, + { + "time": 0.8667, + "value": 111.69, + "curve": [ 0.899, 111.83, 1.015, 109.15 ] + }, + { "time": 1.0667, "value": 95.8 } + ] + }, + "front-shin": { + "rotate": [ + { + "curve": [ 0.086, -0.02, 0.191, -24.25 ] + }, + { + "time": 0.2, + "value": -26.5, + "curve": [ 0.214, -29.92, 0.249, -40.51 ] + }, + { + "time": 0.3333, + "value": -40.57, + "curve": [ 0.431, -40.7, 0.459, -11.34 ] + }, + { + "time": 0.4667, + "value": -8.71, + "curve": [ 0.477, -5.16, 0.524, 17.13 ] + }, + { + "time": 0.6, + "value": 16.98, + "curve": [ 0.632, 17.09, 0.625, 2.76 ] + }, + { + "time": 0.6333, + "value": 2.76, + "curve": [ 0.648, 2.76, 0.653, 2.75 ] + }, + { + "time": 0.6667, + "value": 2.59, + "curve": [ 0.678, 2.39, 0.733, 2.53 ] + }, + { + "time": 0.7333, + "value": -9.43, + "curve": [ 0.745, -2.48, 0.782, 3.12 ] + }, + { + "time": 0.8, + "value": 4.28, + "curve": [ 0.832, 6.32, 0.895, 8.46 ] + }, + { + "time": 0.9333, + "value": 8.49, + "curve": [ 0.986, 8.53, 1.051, 6.38 ] + }, + { + "time": 1.0667, + "value": 2.28, + "curve": [ 1.078, 4.17, 1.103, 5.86 ] + }, + { + "time": 1.1333, + "value": 5.88, + "curve": [ 1.191, 5.93, 1.209, 4.56 ] + }, + { "time": 1.2333, "value": 2.52 } + ] + }, + "rear-thigh": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.12, 50.26 ] + }, + { + "time": 0.1333, + "value": 57.3, + "curve": [ 0.164, 73.34, 0.274, 147.18 ] + }, + { + "time": 0.3333, + "value": 147.1, + "curve": [ 0.475, 146.45, 0.583, 95.72 ] + }, + { + "time": 0.6, + "value": 79.66, + "curve": [ 0.62, 94.74, 0.732, 103.15 ] + }, + { + "time": 0.7667, + "value": 103.02, + "curve": [ 0.812, 102.85, 0.897, 95.75 ] + }, + { "time": 0.9333, "value": 83.01 } + ] + }, + "rear-shin": { + "rotate": [ + { + "curve": [ 0.021, -16.65, 0.091, -54.82 ] + }, + { + "time": 0.1667, + "value": -55.29, + "curve": [ 0.187, -55.42, 0.213, -52.52 ] + }, + { + "time": 0.2333, + "value": -45.98, + "curve": [ 0.242, -43.1, 0.311, -12.73 ] + }, + { + "time": 0.3333, + "value": -6.32, + "curve": [ 0.356, 0.13, 0.467, 24.5 ] + }, + { + "time": 0.5, + "value": 24.5, + "curve": [ 0.543, 24.5, 0.56, 3.78 ] + }, + { + "time": 0.5667, + "value": -3.53, + "curve": [ 0.585, 3.86, 0.659, 16.63 ] + }, + { + "time": 0.7, + "value": 16.56, + "curve": [ 0.782, 16.43, 0.896, 8.44 ] + }, + { + "time": 0.9333, + "value": 4.04, + "curve": [ 0.956, 6.84, 1.008, 8.41 ] + }, + { + "time": 1.0333, + "value": 8.41, + "curve": [ 1.067, 8.41, 1.122, 8.14 ] + }, + { "time": 1.1667, "value": 5.8 } + ] + }, + "rear-foot": { + "rotate": [ + { + "value": -0.28, + "curve": [ 0.033, -0.28, 0.256, -66.71 ] + }, + { + "time": 0.3667, + "value": -66.84, + "curve": [ 0.418, -66.91, 0.499, -21.79 ] + }, + { + "time": 0.6, + "value": -21.52, + "curve": [ 0.652, -21.38, 0.665, -53.96 ] + }, + { + "time": 0.7, + "value": -54.26, + "curve": [ 0.757, -53.96, 0.843, -2.07 ] + }, + { + "time": 0.9333, + "value": -1.47, + "curve": [ 0.968, -2.07, 0.975, -19.96 ] + }, + { + "time": 1, + "value": -19.96, + "curve": [ 1.025, -19.96, 1.075, -12.42 ] + }, + { + "time": 1.1, + "value": -12.42, + "curve": [ 1.133, -12.42, 1.2, -18.34 ] + }, + { "time": 1.2333, "value": -18.34 } + ] + }, + "front-foot": { + "rotate": [ + { + "curve": [ 0.008, -11.33, 0.108, -57.71 ] + }, + { + "time": 0.1333, + "value": -57.71, + "curve": [ 0.175, -57.71, 0.229, 19.73 ] + }, + { + "time": 0.3, + "value": 19.34, + "curve": [ 0.354, 19.34, 0.4, -57.76 ] + }, + { + "time": 0.4333, + "value": -57.76, + "curve": [ 0.458, -57.76, 0.511, -3.56 ] + }, + { + "time": 0.5333, + "value": 3.7, + "curve": [ 0.563, 13.29, 0.633, 15.79 ] + }, + { + "time": 0.6667, + "value": 15.79, + "curve": [ 0.7, 15.79, 0.767, -48.75 ] + }, + { + "time": 0.8, + "value": -48.75, + "curve": [ 0.842, -48.75, 0.925, 4.7 ] + }, + { + "time": 0.9667, + "value": 4.7, + "curve": [ 1, 4.7, 1.067, -22.9 ] + }, + { + "time": 1.1, + "value": -22.9, + "curve": [ 1.142, -22.9, 1.225, -13.28 ] + }, + { "time": 1.2667, "value": -13.28 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "value": -0.28 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": -0.28, + "curve": [ 0.008, -0.28, 0.003, -66.62 ] + }, + { + "time": 0.0667, + "value": -65.75, + "curve": [ 0.166, -64.42, 0.234, 14.35 ] + }, + { + "time": 0.2667, + "value": 38.25, + "curve": [ 0.294, 57.91, 0.392, 89.79 ] + }, + { + "time": 0.4667, + "value": 90.73, + "curve": [ 0.483, 90.73, 0.55, 177.66 ] + }, + { + "time": 0.5667, + "value": 177.66, + "curve": [ 0.733, 176.24, 0.75, 11.35 ] + }, + { + "time": 0.8, + "value": 11.35, + "curve": [ 0.886, 12.29, 0.911, 47.88 ] + }, + { + "time": 0.9333, + "value": 56.77, + "curve": [ 0.967, 70.59, 1.05, 86.46 ] + }, + { + "time": 1.1, + "value": 86.46, + "curve": [ 1.187, 86.46, 1.214, 66.44 ] + }, + { "time": 1.3333, "value": 64.55 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "value": -0.28, + "curve": [ 0, -7.97, 0.027, -18.69 ] + }, + { + "time": 0.0667, + "value": -19, + "curve": [ 0.166, -19.3, 0.208, 15.58 ] + }, + { + "time": 0.2667, + "value": 45.95, + "curve": [ 0.306, 66.24, 0.378, 99.08 ] + }, + { + "time": 0.4333, + "value": 99.08, + "curve": [ 0.497, 98.62, 0.488, -1.2 ] + }, + { + "time": 0.5667, + "value": -1.32, + "curve": [ 0.637, -0.84, 0.687, 94.41 ] + }, + { + "time": 0.7333, + "value": 94.33, + "curve": [ 0.832, 94.16, 0.895, 29.6 ] + }, + { + "time": 0.9667, + "value": 28.67, + "curve": [ 1.026, 28.67, 1.045, 53.14 ] + }, + { "time": 1.1, "value": 53.38 } + ] + }, + "hair4": { + "rotate": [ + { + "curve": [ 0.011, 4.5, 0.05, 11.42 ] + }, + { + "time": 0.0667, + "value": 11.42, + "curve": [ 0.1, 11.42, 0.136, -5.92 ] + }, + { + "time": 0.1667, + "value": -10.54, + "curve": [ 0.206, -16.51, 0.327, -22 ] + }, + { + "time": 0.3667, + "value": -24.47, + "curve": [ 0.413, -27.37, 0.467, -43.99 ] + }, + { + "time": 0.5, + "value": -43.99, + "curve": [ 0.533, -43.99, 0.552, 12.12 ] + }, + { + "time": 0.6333, + "value": 11.85, + "curve": [ 0.714, 11.59, 0.758, -34.13 ] + }, + { + "time": 0.8, + "value": -34.13, + "curve": [ 0.858, -34.13, 1.015, -12.47 ] + }, + { + "time": 1.0667, + "value": -8.85, + "curve": [ 1.121, -5.07, 1.219, -0.02 ] + }, + { + "time": 1.3333, + "value": 1.29, + "curve": [ 1.509, 3.3, 1.763, 2.75 ] + }, + { + "time": 1.8667, + "value": 2.78, + "curve": [ 1.974, 2.81, 2.108, 2.81 ] + }, + { + "time": 2.2, + "value": 2.78, + "curve": [ 2.315, 2.74, 2.374, 1.22 ] + }, + { + "time": 2.4667, + "value": 1.18, + "curve": [ 2.525, 1.18, 2.608, 10.79 ] + }, + { + "time": 2.6667, + "value": 10.79, + "curve": [ 2.725, 10.79, 2.893, 4.72 ] + }, + { + "time": 3.0333, + "value": 4.72, + "curve": [ 3.117, 4.72, 3.283, 7.93 ] + }, + { + "time": 3.3667, + "value": 7.93, + "curve": [ 3.492, 7.93, 3.775, 6.93 ] + }, + { + "time": 3.9, + "value": 6.93, + "curve": [ 3.981, 6.93, 4.094, 6.9 ] + }, + { + "time": 4.2, + "value": 8.44, + "curve": [ 4.267, 9.42, 4.401, 16.61 ] + }, + { + "time": 4.5, + "value": 16.33, + "curve": [ 4.582, 16.12, 4.709, 9.94 ] + }, + { + "time": 4.7333, + "value": 6.51, + "curve": [ 4.747, 4.57, 4.779, -1.76 ] + }, + { + "time": 4.8, + "value": -1.75, + "curve": [ 4.823, -1.73, 4.82, 4.47 ] + }, + { + "time": 4.8667, + "value": 6.04, + "curve": [ 4.899, 7.14, 4.913, 6.93 ] + }, + { "time": 4.9333, "value": 6.93 } + ] + }, + "hair2": { + "rotate": [ + { + "value": 10.61, + "curve": [ 0.075, 10.61, 0.05, 12.67 ] + }, + { + "time": 0.0667, + "value": 12.67, + "curve": [ 0.123, 12.67, 0.194, -16.51 ] + }, + { + "time": 0.2, + "value": -19.87, + "curve": [ 0.207, -23.48, 0.236, -31.68 ] + }, + { + "time": 0.3, + "value": -31.8, + "curve": [ 0.356, -31.9, 0.437, -25.61 ] + }, + { + "time": 0.4667, + "value": -19.29, + "curve": [ 0.485, -15.33, 0.529, 6.48 ] + }, + { + "time": 0.5667, + "value": 6.67, + "curve": [ 0.628, 6.97, 0.65, -46.39 ] + }, + { + "time": 0.7333, + "value": -46.3, + "curve": [ 0.843, -46.17, 0.941, -33.37 ] + }, + { + "time": 0.9667, + "value": -23.17, + "curve": [ 0.972, -20.98, 1.047, 15.21 ] + }, + { + "time": 1.1, + "value": 15.21, + "curve": [ 1.142, 15.21, 1.183, 10.73 ] + }, + { + "time": 1.2667, + "value": 10.61, + "curve": [ 1.45, 10.34, 1.817, 10.61 ] + }, + { + "time": 2, + "value": 10.61, + "curve": [ 2.075, 10.61, 2.225, 16.9 ] + }, + { + "time": 2.3, + "value": 16.9, + "curve": [ 2.327, 16.9, 2.347, 6.81 ] + }, + { + "time": 2.4, + "value": 6.83, + "curve": [ 2.492, 6.87, 2.602, 17.39 ] + }, + { + "time": 2.6667, + "value": 17.39, + "curve": [ 2.742, 17.39, 2.892, 10.67 ] + }, + { + "time": 2.9667, + "value": 10.64, + "curve": [ 3.187, 10.57, 3.344, 10.73 ] + }, + { + "time": 3.6, + "value": 11.4, + "curve": [ 3.766, 11.83, 3.874, 14.87 ] + }, + { + "time": 3.9333, + "value": 14.83, + "curve": [ 4.022, 14.76, 4.208, 9.49 ] + }, + { + "time": 4.3, + "value": 9.54, + "curve": [ 4.391, 9.58, 4.441, 14.82 ] + }, + { + "time": 4.5333, + "value": 14.84, + "curve": [ 4.642, 14.88, 4.692, 1.17 ] + }, + { + "time": 4.7667, + "value": 1.24, + "curve": [ 4.823, 1.3, 4.818, 18.35 ] + }, + { + "time": 4.8667, + "value": 18.38, + "curve": [ 4.905, 18.41, 4.901, 10.61 ] + }, + { "time": 4.9333, "value": 10.61 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.048, 0, 0.129, -12.73 ] + }, + { + "time": 0.1667, + "value": -15.95, + "curve": [ 0.221, -20.66, 0.254, -21.62 ] + }, + { + "time": 0.3, + "value": -21.59, + "curve": [ 0.458, -21.46, 0.46, -1.67 ] + }, + { + "time": 0.6333, + "value": -1.71, + "curve": [ 0.71, -1.73, 0.715, -4 ] + }, + { + "time": 0.7667, + "value": -3.97, + "curve": [ 0.866, -3.92, 0.84, 0.02 ] + }, + { "time": 1, "curve": "stepped" }, + { + "time": 2, + "curve": [ 2.275, 0, 2.867, -5.8 ] + }, + { + "time": 3.1, + "value": -6.44, + "curve": [ 3.327, -7.06, 3.71, -6.23 ] + }, + { + "time": 3.9333, + "value": -5.41, + "curve": [ 4.168, -4.53, 4.488, -2.83 ] + }, + { "time": 4.8 } + ] + }, + "torso3": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.09, -3.66 ] + }, + { + "time": 0.1, + "value": -4.55, + "curve": [ 0.143, -8.4, 0.223, -17.07 ] + }, + { + "time": 0.2333, + "value": -18.31, + "curve": [ 0.282, -24.44, 0.35, -29 ] + }, + { + "time": 0.3667, + "value": -30.07, + "curve": [ 0.405, -32.58, 0.442, -33.03 ] + }, + { + "time": 0.4667, + "value": -32.99, + "curve": [ 0.491, -33.04, 0.505, -23.56 ] + }, + { + "time": 0.5333, + "value": -23.55, + "curve": [ 0.571, -23.67, 0.599, -27.21 ] + }, + { + "time": 0.6333, + "value": -27.21, + "curve": [ 0.669, -27.2, 0.742, -10.43 ] + }, + { + "time": 0.7667, + "value": -7.79, + "curve": [ 0.788, -5.53, 0.796, -4.42 ] + }, + { + "time": 0.8333, + "value": -2.9, + "curve": [ 0.875, -1.21, 0.933, 0 ] + }, + { "time": 0.9667, "curve": "stepped" }, + { + "time": 2.4333, + "curve": [ 2.517, 0, 2.683, 4.63 ] + }, + { + "time": 2.7667, + "value": 4.66, + "curve": [ 3.084, 4.76, 3.248, 4.37 ] + }, + { + "time": 3.4, + "value": 3.74, + "curve": [ 3.596, 2.92, 3.755, 2.18 ] + }, + { + "time": 3.8667, + "value": 1.72, + "curve": [ 4.136, 0.59, 4.471, 0 ] + }, + { "time": 4.8 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0, 0, 0.041, 10.74 ] + }, + { + "time": 0.0667, + "value": 14.16, + "curve": [ 0.075, 15.22, 0.148, 18.04 ] + }, + { + "time": 0.2, + "value": 18.13, + "curve": [ 0.251, 18.23, 0.307, -4.75 ] + }, + { + "time": 0.3667, + "value": -5.06, + "curve": [ 0.412, -5.3, 0.47, -0.96 ] + }, + { + "time": 0.5, + "value": 2.21, + "curve": [ 0.512, 3.48, 0.595, 20.31 ] + }, + { + "time": 0.6333, + "value": 24.87, + "curve": [ 0.647, 26.53, 0.719, 29.33 ] + }, + { + "time": 0.8, + "value": 29.22, + "curve": [ 0.859, 29.14, 0.9, 28.48 ] + }, + { + "time": 0.9333, + "value": 26.11, + "curve": [ 0.981, 22.72, 0.998, 2.06 ] + }, + { "time": 1.1, "value": 2.21 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.047, -0.21, 0.048, 7.86 ] + }, + { + "time": 0.0667, + "value": 13.27, + "curve": [ 0.083, 18.05, 0.135, 24.44 ] + }, + { + "time": 0.2, + "value": 24.02, + "curve": [ 0.225, 24.02, 0.28, 6.32 ] + }, + { + "time": 0.3, + "value": 3.1, + "curve": [ 0.323, -0.58, 0.382, -7.12 ] + }, + { + "time": 0.4667, + "value": -7.45, + "curve": [ 0.512, -7.66, 0.538, 12.13 ] + }, + { + "time": 0.5667, + "value": 16.46, + "curve": [ 0.609, 22.72, 0.672, 27.4 ] + }, + { + "time": 0.7333, + "value": 27.55, + "curve": [ 0.827, 27.4, 0.933, 23.23 ] + }, + { + "time": 0.9667, + "value": 19.11, + "curve": [ 0.998, 15.27, 1.092, -2.53 ] + }, + { + "time": 1.1333, + "value": -2.53, + "curve": [ 1.158, -2.53, 1.208, 0 ] + }, + { "time": 1.2333, "curve": "stepped" }, + { + "time": 2, + "curve": [ 2.075, 0, 2.248, 0.35 ] + }, + { + "time": 2.3333, + "value": 0.78, + "curve": [ 2.585, 2.06, 2.805, 3.46 ] + }, + { + "time": 3.2, + "value": 3.5, + "curve": [ 3.593, 3.54, 3.979, 2.36 ] + }, + { + "time": 4.1667, + "value": 1.55, + "curve": [ 4.391, 0.59, 4.447, 0.04 ] + }, + { + "time": 4.6, + "value": 0.04, + "curve": [ 4.642, 0.04, 4.742, 0 ] + }, + { "time": 4.9333 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.025, 0, 0.09, 1.43, 0.025, 0, 0.075, -34.76 ] + }, + { + "time": 0.1, + "x": 1.59, + "y": -34.76, + "curve": [ 0.214, 3.33, 0.375, 5.34, 0.192, -34.76, 0.441, -21.17 ] + }, + { + "time": 0.4667, + "x": 5.34, + "y": -12.57, + "curve": [ 0.492, 5.34, 0.55, 5.24, 0.482, -7.36, 0.504, 4.03 ] + }, + { + "time": 0.5667, + "x": 5.11, + "y": 4.01, + "curve": [ 0.658, 4.45, 0.679, 3.19, 0.649, 3.98, 0.642, -16.84 ] + }, + { + "time": 0.7, + "x": 2.8, + "y": -16.74, + "curve": [ 0.787, 1.15, 0.881, -1.29, 0.772, -16.62, 0.82, 8.95 ] + }, + { + "time": 0.9, + "x": -1.72, + "y": 8.91, + "curve": [ 0.961, -3.06, 1.025, -3.58, 0.975, 8.87, 0.951, -1.37 ] + }, + { + "time": 1.1, + "x": -3.58, + "y": -1.45, + "curve": [ 1.292, -3.58, 2.002, -2.4, 1.292, -1.56, 1.975, -1.45 ] + }, + { + "time": 2.1667, + "x": -1.39, + "y": -1.45, + "curve": [ 2.25, -0.88, 2.503, 1.38, 2.283, -1.45, 2.603, -12.44 ] + }, + { + "time": 2.6667, + "x": 2.13, + "y": -14.45, + "curve": [ 2.766, 2.59, 2.999, 2.81, 2.835, -19.73, 3.003, -25.2 ] + }, + { + "time": 3.1333, + "x": 2.91, + "y": -26.08, + "curve": [ 3.392, 3.1, 4.199, 4.05, 3.483, -28.44, 4.129, -27.23 ] + }, + { + "time": 4.3667, + "x": 4.81, + "y": -19.59, + "curve": [ 4.429, 5.1, 4.594, 8.54, 4.538, -14.08, 4.583, -7.88 ] + }, + { + "time": 4.6667, + "x": 8.65, + "y": -4.56, + "curve": [ 4.794, 8.86, 4.806, 5.93, 4.691, -3.59, 4.8, -1.61 ] + }, + { "time": 4.9333, "x": 5.8, "y": -1.99 } + ] + } + }, + "ik": { + "front-foot-ik": [ + { "mix": 0 } + ], + "front-leg-ik": [ + { "mix": 0, "bendPositive": false } + ], + "rear-foot-ik": [ + { "mix": 0.005 } + ], + "rear-leg-ik": [ + { "mix": 0.005, "bendPositive": false } + ] + } + }, + "hoverboard": { + "slots": { + "exhaust1": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "exhaust2": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "exhaust3": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + }, + "hoverboard-board": { + "attachment": [ + { "name": "hoverboard-board" } + ] + }, + "hoverboard-thruster-front": { + "attachment": [ + { "name": "hoverboard-thruster" } + ] + }, + "hoverboard-thruster-rear": { + "attachment": [ + { "name": "hoverboard-thruster" } + ] + }, + "hoverglow-front": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "hoverglow-rear": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "side-glow1": { + "attachment": [ + { "name": "hoverglow-small" }, + { "time": 0.9667 } + ] + }, + "side-glow2": { + "attachment": [ + { "time": 0.0667, "name": "hoverglow-small" }, + { "time": 1 } + ] + }, + "side-glow3": { + "attachment": [ + { "name": "hoverglow-small" }, + { "time": 0.9667 } + ] + } + }, + "bones": { + "hoverboard-controller": { + "translate": [ + { + "x": 319.55, + "y": -1.59, + "curve": [ 0.064, 319.55, 0.2, 347.85, 0.058, -1.2, 0.2, 23.11 ] + }, + { + "time": 0.2667, + "x": 347.66, + "y": 39.62, + "curve": [ 0.35, 347.41, 0.476, 341.47, 0.323, 53.58, 0.44, 85.82 ] + }, + { + "time": 0.5333, + "x": 338.47, + "y": 85.72, + "curve": [ 0.603, 334.83, 0.913, 319.65, 0.621, 85.62, 0.88, -1.53 ] + }, + { "time": 1, "x": 319.55, "y": -1.59 } + ] + }, + "hip": { + "translate": [ + { + "x": -53.49, + "y": 32.14, + "curve": [ 0.061, -53.77, 0.093, -51.81, 0.044, 16.34, 0.063, 9.67 ] + }, + { + "time": 0.1333, + "x": -49.31, + "y": 7.01, + "curve": [ 0.3, -35.27, 0.461, -20.06, 0.314, 9.52, 0.408, 121.09 ] + }, + { + "time": 0.5667, + "x": -20.06, + "y": 122.72, + "curve": [ 0.716, -20.09, 0.912, -53.29, 0.753, 121.8, 0.946, 51.85 ] + }, + { "time": 1, "x": -53.49, "y": 32.14 } + ] + }, + "exhaust1": { + "scale": [ + { + "x": 1.593, + "y": 0.964, + "curve": [ 0.033, 1.593, 0.1, 1, 0.033, 0.964, 0.1, 0.713 ] + }, + { + "time": 0.1333, + "y": 0.713, + "curve": [ 0.15, 1, 0.183, 1.774, 0.15, 0.713, 0.183, 0.883 ] + }, + { + "time": 0.2, + "x": 1.774, + "y": 0.883, + "curve": [ 0.242, 1.774, 0.325, 1.181, 0.242, 0.883, 0.325, 0.649 ] + }, + { + "time": 0.3667, + "x": 1.181, + "y": 0.649, + "curve": [ 0.408, 1.181, 0.492, 1.893, 0.408, 0.649, 0.492, 0.819 ] + }, + { + "time": 0.5333, + "x": 1.893, + "y": 0.819, + "curve": [ 0.558, 1.893, 0.608, 1.18, 0.558, 0.819, 0.608, 0.686 ] + }, + { + "time": 0.6333, + "x": 1.18, + "y": 0.686, + "curve": [ 0.658, 1.18, 0.708, 1.903, 0.658, 0.686, 0.708, 0.855 ] + }, + { + "time": 0.7333, + "x": 1.903, + "y": 0.855, + "curve": [ 0.767, 1.903, 0.833, 1.311, 0.767, 0.855, 0.833, 0.622 ] + }, + { + "time": 0.8667, + "x": 1.311, + "y": 0.622, + "curve": [ 0.9, 1.311, 0.967, 1.593, 0.9, 0.622, 0.967, 0.964 ] + }, + { "time": 1, "x": 1.593, "y": 0.964 } + ] + }, + "exhaust2": { + "scale": [ + { + "x": 1.88, + "y": 0.832, + "curve": [ 0.025, 1.88, 0.075, 1.311, 0.025, 0.832, 0.075, 0.686 ] + }, + { + "time": 0.1, + "x": 1.311, + "y": 0.686, + "curve": [ 0.133, 1.311, 0.2, 2.01, 0.133, 0.686, 0.208, 0.736 ] + }, + { + "time": 0.2333, + "x": 2.01, + "y": 0.769, + "curve": [ 0.267, 2.01, 0.333, 1, 0.282, 0.831, 0.333, 0.91 ] + }, + { + "time": 0.3667, + "y": 0.91, + "curve": [ 0.4, 1, 0.467, 1.699, 0.4, 0.91, 0.474, 0.891 ] + }, + { + "time": 0.5, + "x": 1.699, + "y": 0.86, + "curve": [ 0.517, 1.699, 0.55, 1.181, 0.54, 0.813, 0.55, 0.713 ] + }, + { + "time": 0.5667, + "x": 1.181, + "y": 0.713, + "curve": [ 0.617, 1.181, 0.717, 1.881, 0.617, 0.713, 0.717, 0.796 ] + }, + { + "time": 0.7667, + "x": 1.881, + "y": 0.796, + "curve": [ 0.8, 1.881, 0.867, 1.3, 0.8, 0.796, 0.867, 0.649 ] + }, + { + "time": 0.9, + "x": 1.3, + "y": 0.649, + "curve": [ 0.925, 1.3, 0.975, 1.88, 0.925, 0.649, 0.975, 0.832 ] + }, + { "time": 1, "x": 1.88, "y": 0.832 } + ] + }, + "hoverboard-thruster-front": { + "rotate": [ + { + "curve": [ 0.125, 0, 0.375, 24.06 ] + }, + { + "time": 0.5, + "value": 24.06, + "curve": [ 0.625, 24.06, 0.875, 0 ] + }, + { "time": 1 } + ] + }, + "hoverglow-front": { + "scale": [ + { + "x": 0.849, + "y": 1.764, + "curve": [ 0.017, 0.849, 0.05, 0.835, 0.017, 1.764, 0.05, 2.033 ] + }, + { + "time": 0.0667, + "x": 0.835, + "y": 2.033, + "curve": [ 0.092, 0.835, 0.142, 0.752, 0.092, 2.033, 0.142, 1.584 ] + }, + { + "time": 0.1667, + "x": 0.752, + "y": 1.584, + "curve": [ 0.183, 0.752, 0.217, 0.809, 0.183, 1.584, 0.217, 1.71 ] + }, + { + "time": 0.2333, + "x": 0.809, + "y": 1.71, + "curve": [ 0.25, 0.809, 0.283, 0.717, 0.25, 1.71, 0.283, 1.45 ] + }, + { + "time": 0.3, + "x": 0.717, + "y": 1.45, + "curve": [ 0.317, 0.717, 0.35, 0.777, 0.317, 1.45, 0.35, 1.698 ] + }, + { + "time": 0.3667, + "x": 0.777, + "y": 1.698, + "curve": [ 0.4, 0.781, 0.45, 0.685, 0.375, 1.698, 0.45, 1.173 ] + }, + { + "time": 0.4667, + "x": 0.685, + "y": 1.173, + "curve": [ 0.492, 0.685, 0.542, 0.825, 0.492, 1.173, 0.542, 1.572 ] + }, + { + "time": 0.5667, + "x": 0.825, + "y": 1.572, + "curve": [ 0.611, 0.816, 0.63, 0.727, 0.611, 1.577, 0.606, 1.255 ] + }, + { + "time": 0.6667, + "x": 0.725, + "y": 1.241, + "curve": [ 0.692, 0.725, 0.742, 0.895, 0.692, 1.241, 0.749, 1.799 ] + }, + { + "time": 0.7667, + "x": 0.895, + "y": 1.857, + "curve": [ 0.783, 0.895, 0.796, 0.892, 0.796, 1.955, 0.817, 1.962 ] + }, + { + "time": 0.8333, + "x": 0.845, + "y": 1.962, + "curve": [ 0.845, 0.831, 0.883, 0.802, 0.85, 1.962, 0.872, 1.704 ] + }, + { + "time": 0.9, + "x": 0.802, + "y": 1.491, + "curve": [ 0.917, 0.802, 0.95, 0.845, 0.907, 1.441, 0.936, 1.508 ] + }, + { + "time": 0.9667, + "x": 0.845, + "y": 1.627, + "curve": [ 0.975, 0.845, 0.992, 0.849, 0.973, 1.652, 0.992, 1.764 ] + }, + { "time": 1, "x": 0.849, "y": 1.764 } + ] + }, + "hoverboard-thruster-rear": { + "rotate": [ + { + "curve": [ 0.125, 0, 0.375, 24.06 ] + }, + { + "time": 0.5, + "value": 24.06, + "curve": [ 0.625, 24.06, 0.875, 0 ] + }, + { "time": 1 } + ] + }, + "hoverglow-rear": { + "scale": [ + { + "x": 0.845, + "y": 1.31, + "curve": [ 0.017, 0.845, 0.117, 0.899, 0.017, 1.31, 0.117, 2.033 ] + }, + { + "time": 0.1333, + "x": 0.899, + "y": 2.033, + "curve": [ 0.15, 0.899, 0.183, 0.752, 0.15, 2.033, 0.183, 1.574 ] + }, + { + "time": 0.2, + "x": 0.752, + "y": 1.574, + "curve": [ 0.225, 0.752, 0.275, 0.809, 0.225, 1.574, 0.275, 1.71 ] + }, + { + "time": 0.3, + "x": 0.809, + "y": 1.71, + "curve": [ 0.317, 0.809, 0.35, 0.717, 0.317, 1.71, 0.35, 1.397 ] + }, + { + "time": 0.3667, + "x": 0.717, + "y": 1.397, + "curve": [ 0.383, 0.717, 0.417, 0.777, 0.383, 1.397, 0.417, 1.45 ] + }, + { + "time": 0.4333, + "x": 0.777, + "y": 1.45, + "curve": [ 0.45, 0.777, 0.496, 0.689, 0.45, 1.45, 0.481, 1.168 ] + }, + { + "time": 0.5333, + "x": 0.685, + "y": 1.173, + "curve": [ 0.565, 0.682, 0.617, 0.758, 0.575, 1.177, 0.617, 1.297 ] + }, + { + "time": 0.6333, + "x": 0.758, + "y": 1.297, + "curve": [ 0.658, 0.758, 0.708, 0.725, 0.658, 1.297, 0.708, 1.241 ] + }, + { + "time": 0.7333, + "x": 0.725, + "y": 1.241, + "curve": [ 0.772, 0.732, 0.796, 0.893, 0.782, 1.238, 0.778, 1.854 ] + }, + { + "time": 0.8333, + "x": 0.895, + "y": 1.857, + "curve": [ 0.878, 0.9, 0.992, 0.845, 0.88, 1.86, 0.992, 1.31 ] + }, + { "time": 1, "x": 0.845, "y": 1.31 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -85.92, + "curve": [ 0.08, -85.59, 0.284, -62.7 ] + }, + { + "time": 0.3667, + "value": -55.14, + "curve": [ 0.438, -48.65, 0.551, -43.21 ] + }, + { + "time": 0.6333, + "value": -43.21, + "curve": [ 0.716, -43.22, 0.908, -85.92 ] + }, + { "time": 1, "value": -85.92 } + ], + "translate": [ + { + "x": -0.59, + "y": -2.94, + "curve": [ 0.1, -1.21, 0.275, -1.74, 0.092, -2.94, 0.275, -6.39 ] + }, + { + "time": 0.3667, + "x": -1.74, + "y": -6.39, + "curve": [ 0.433, -1.74, 0.567, 0.72, 0.433, -6.39, 0.587, -4.48 ] + }, + { + "time": 0.6333, + "x": 0.72, + "y": -4.21, + "curve": [ 0.725, 0.72, 0.908, -0.08, 0.743, -3.57, 0.908, -2.94 ] + }, + { "time": 1, "x": -0.59, "y": -2.94 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": 7.61, + "curve": [ 0.143, 7.62, 0.247, -23.17 ] + }, + { + "time": 0.2667, + "value": -26.56, + "curve": [ 0.281, -29.08, 0.351, -37.36 ] + }, + { + "time": 0.4333, + "value": -37.2, + "curve": [ 0.513, -37.05, 0.562, -29.88 ] + }, + { + "time": 0.6, + "value": -25.18, + "curve": [ 0.621, -22.58, 0.694, -3.98 ] + }, + { + "time": 0.8, + "value": 3.63, + "curve": [ 0.861, 8.03, 0.946, 7.57 ] + }, + { "time": 1, "value": 7.61 } + ], + "translate": [ + { + "curve": [ 0.117, 0, 0.35, 0.52, 0.117, 0, 0.35, -3.27 ] + }, + { + "time": 0.4667, + "x": 0.52, + "y": -3.27, + "curve": [ 0.6, 0.52, 0.867, 0, 0.6, -3.27, 0.867, 0 ] + }, + { "time": 1 } + ], + "shear": [ + { + "y": 19.83, + "curve": [ 0.117, 0, 0.35, 15.28, 0.117, 19.83, 0.35, 28.31 ] + }, + { + "time": 0.4667, + "x": 15.28, + "y": 28.31, + "curve": [ 0.6, 15.28, 0.867, 0, 0.6, 28.31, 0.867, 19.83 ] + }, + { "time": 1, "y": 19.83 } + ] + }, + "board-ik": { + "translate": [ + { + "x": 393.62, + "curve": [ 0.083, 393.62, 0.25, 393.48, 0.083, 0, 0.25, 117.69 ] + }, + { + "time": 0.3333, + "x": 393.48, + "y": 117.69, + "curve": [ 0.375, 393.48, 0.458, 393.62, 0.375, 117.69, 0.458, 83.82 ] + }, + { "time": 0.5, "x": 393.62, "y": 83.82 }, + { "time": 0.6667, "x": 393.62, "y": 30.15 }, + { "time": 1, "x": 393.62 } + ] + }, + "front-thigh": { + "translate": [ + { "x": -7.49, "y": 8.51 } + ] + }, + "front-leg-target": { + "translate": [ + { + "time": 0.3667, + "curve": [ 0.428, 10.83, 0.567, 12.78, 0.414, 7.29, 0.567, 8.79 ] + }, + { + "time": 0.6, + "x": 12.78, + "y": 8.79, + "curve": [ 0.692, 12.78, 0.772, 11.27, 0.692, 8.79, 0.766, 8.62 ] + }, + { "time": 0.8667 } + ] + }, + "rear-leg-target": { + "translate": [ + { + "time": 0.4667, + "curve": [ 0.492, 0, 0.534, 4.47, 0.492, 0, 0.542, 1.63 ] + }, + { + "time": 0.5667, + "x": 4.53, + "y": 1.77, + "curve": [ 0.622, 4.64, 0.717, 3.31, 0.615, 2.06, 0.71, 2.1 ] + }, + { "time": 0.8 } + ] + }, + "exhaust3": { + "scale": [ + { + "x": 1.882, + "y": 0.81, + "curve": [ 0.017, 1.882, 0.167, 1.3, 0.017, 0.81, 0.167, 0.649 ] + }, + { + "time": 0.2, + "x": 1.3, + "y": 0.649, + "curve": [ 0.225, 1.3, 0.275, 2.051, 0.225, 0.649, 0.275, 0.984 ] + }, + { + "time": 0.3, + "x": 2.051, + "y": 0.984, + "curve": [ 0.325, 2.051, 0.375, 1.311, 0.325, 0.984, 0.384, 0.715 ] + }, + { + "time": 0.4, + "x": 1.311, + "y": 0.686, + "curve": [ 0.433, 1.311, 0.5, 1.86, 0.426, 0.638, 0.5, 0.537 ] + }, + { + "time": 0.5333, + "x": 1.86, + "y": 0.537, + "curve": [ 0.567, 1.86, 0.633, 1.187, 0.567, 0.537, 0.604, 0.854 ] + }, + { + "time": 0.6667, + "x": 1.187, + "y": 0.854, + "curve": [ 0.7, 1.187, 0.767, 1.549, 0.707, 0.854, 0.774, 0.775 ] + }, + { + "time": 0.8, + "x": 1.549, + "y": 0.746, + "curve": [ 0.817, 1.549, 0.85, 1.181, 0.815, 0.729, 0.85, 0.713 ] + }, + { + "time": 0.8667, + "x": 1.181, + "y": 0.713, + "curve": [ 0.9, 1.181, 0.967, 1.882, 0.9, 0.713, 0.967, 0.81 ] + }, + { "time": 1, "x": 1.882, "y": 0.81 } + ] + }, + "side-glow1": { + "rotate": [ + { "value": 51.12, "curve": "stepped" }, + { "time": 0.0667, "value": 43.82, "curve": "stepped" }, + { "time": 0.1, "value": 40.95, "curve": "stepped" }, + { "time": 0.1667, "value": 27.78, "curve": "stepped" }, + { "time": 0.2, "value": 10.24, "curve": "stepped" }, + { "time": 0.2667, "curve": "stepped" }, + { "time": 0.8, "value": -25.81 } + ], + "translate": [ + { "x": 338.28, "y": 40.22, "curve": "stepped" }, + { "time": 0.0667, "x": 331.2, "y": 30.39, "curve": "stepped" }, + { "time": 0.1, "x": 318.63, "y": 20.59, "curve": "stepped" }, + { "time": 0.1667, "x": 302.45, "y": 9.64, "curve": "stepped" }, + { "time": 0.2, "x": 276.87, "y": 1.13, "curve": "stepped" }, + { "time": 0.2667, "x": 248.16, "curve": "stepped" }, + { "time": 0.3, "x": 221.36, "curve": "stepped" }, + { "time": 0.3667, "x": 195.69, "curve": "stepped" }, + { "time": 0.4, "x": 171.08, "curve": "stepped" }, + { "time": 0.4667, "x": 144.84, "curve": "stepped" }, + { "time": 0.5, "x": 121.22, "curve": "stepped" }, + { "time": 0.5667, "x": 91.98, "curve": "stepped" }, + { "time": 0.6, "x": 62.63, "curve": "stepped" }, + { "time": 0.6667, "x": 30.78, "curve": "stepped" }, + { "time": 0.7, "curve": "stepped" }, + { "time": 0.7667, "x": -28.45, "curve": "stepped" }, + { "time": 0.8, "x": -67.49, "y": 16.82, "curve": "stepped" }, + { "time": 0.8667, "x": -83.07, "y": 24.36, "curve": "stepped" }, + { "time": 0.9, "x": -93.81, "y": 29.55 } + ], + "scale": [ + { "x": 0.535, "curve": "stepped" }, + { "time": 0.0667, "x": 0.594, "curve": "stepped" }, + { "time": 0.1, "x": 0.844, "curve": "stepped" }, + { "time": 0.1667, "curve": "stepped" }, + { "time": 0.8, "x": 0.534, "curve": "stepped" }, + { "time": 0.8667, "x": 0.428, "y": 0.801, "curve": "stepped" }, + { "time": 0.9, "x": 0.349, "y": 0.654 } + ] + }, + "side-glow2": { + "rotate": [ + { "time": 0.0667, "value": 51.12, "curve": "stepped" }, + { "time": 0.1, "value": 43.82, "curve": "stepped" }, + { "time": 0.1667, "value": 40.95, "curve": "stepped" }, + { "time": 0.2, "value": 27.78, "curve": "stepped" }, + { "time": 0.2667, "value": 10.24, "curve": "stepped" }, + { "time": 0.3, "curve": "stepped" }, + { "time": 0.8667, "value": -25.81 } + ], + "translate": [ + { "time": 0.0667, "x": 338.28, "y": 40.22, "curve": "stepped" }, + { "time": 0.1, "x": 331.2, "y": 30.39, "curve": "stepped" }, + { "time": 0.1667, "x": 318.63, "y": 20.59, "curve": "stepped" }, + { "time": 0.2, "x": 302.45, "y": 9.64, "curve": "stepped" }, + { "time": 0.2667, "x": 276.87, "y": 1.13, "curve": "stepped" }, + { "time": 0.3, "x": 248.16, "curve": "stepped" }, + { "time": 0.3667, "x": 221.36, "curve": "stepped" }, + { "time": 0.4, "x": 195.69, "curve": "stepped" }, + { "time": 0.4667, "x": 171.08, "curve": "stepped" }, + { "time": 0.5, "x": 144.84, "curve": "stepped" }, + { "time": 0.5667, "x": 121.22, "curve": "stepped" }, + { "time": 0.6, "x": 91.98, "curve": "stepped" }, + { "time": 0.6667, "x": 62.63, "curve": "stepped" }, + { "time": 0.7, "x": 30.78, "curve": "stepped" }, + { "time": 0.7667, "curve": "stepped" }, + { "time": 0.8, "x": -28.45, "curve": "stepped" }, + { "time": 0.8667, "x": -67.49, "y": 16.82, "curve": "stepped" }, + { "time": 0.9, "x": -83.07, "y": 24.36, "curve": "stepped" }, + { "time": 0.9667, "x": -93.81, "y": 29.55 } + ], + "scale": [ + { "time": 0.0667, "x": 0.535, "curve": "stepped" }, + { "time": 0.1, "x": 0.594, "curve": "stepped" }, + { "time": 0.1667, "x": 0.844, "curve": "stepped" }, + { "time": 0.2, "curve": "stepped" }, + { "time": 0.8667, "x": 0.534, "curve": "stepped" }, + { "time": 0.9, "x": 0.428, "y": 0.801, "curve": "stepped" }, + { "time": 0.9667, "x": 0.349, "y": 0.654 } + ] + }, + "torso": { + "rotate": [ + { + "value": -34.73, + "curve": [ 0.034, -36.31, 0.162, -39.33 ] + }, + { + "time": 0.2667, + "value": -39.37, + "curve": [ 0.384, -39.37, 0.491, -29.52 ] + }, + { + "time": 0.5, + "value": -28.86, + "curve": [ 0.525, -26.95, 0.571, -21.01 ] + }, + { + "time": 0.6333, + "value": -21.01, + "curve": [ 0.725, -21.01, 0.969, -33.35 ] + }, + { "time": 1, "value": -34.73 } + ] + }, + "neck": { + "rotate": [ + { + "value": 10.2, + "curve": [ 0.07, 12.09, 0.189, 16.03 ] + }, + { + "time": 0.2667, + "value": 16.14, + "curve": [ 0.333, 16.14, 0.449, 8.03 ] + }, + { + "time": 0.5, + "value": 5.83, + "curve": [ 0.542, 4.02, 0.6, 2.68 ] + }, + { + "time": 0.6333, + "value": 2.68, + "curve": [ 0.725, 2.68, 0.943, 8.57 ] + }, + { "time": 1, "value": 10.2 } + ] + }, + "head": { + "rotate": [ + { + "value": 10.2, + "curve": [ 0.044, 11.52, 0.2, 16.12 ] + }, + { + "time": 0.2667, + "value": 16.14, + "curve": [ 0.375, 16.17, 0.492, 2.65 ] + }, + { + "time": 0.6333, + "value": 2.68, + "curve": [ 0.725, 2.7, 0.963, 9.26 ] + }, + { "time": 1, "value": 10.2 } + ], + "translate": [ + { + "curve": [ 0.03, -0.24, 0.2, -4.22, 0.051, -1.06, 0.2, -3.62 ] + }, + { + "time": 0.2667, + "x": -4.22, + "y": -3.62, + "curve": [ 0.358, -4.22, 0.542, 0.84, 0.358, -3.62, 0.542, 6.01 ] + }, + { + "time": 0.6333, + "x": 0.84, + "y": 6.01, + "curve": [ 0.725, 0.84, 0.939, 0.32, 0.725, 6.01, 0.945, 1.14 ] + }, + { "time": 1 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": -11.18, + "curve": [ 0.064, -14.82, 0.25, -20.01 ] + }, + { + "time": 0.3333, + "value": -20.01, + "curve": [ 0.429, -20.12, 0.58, 5.12 ] + }, + { + "time": 0.6, + "value": 8.67, + "curve": [ 0.617, 11.72, 0.687, 20.52 ] + }, + { + "time": 0.7667, + "value": 20.55, + "curve": [ 0.848, 20.7, 0.963, -9.43 ] + }, + { "time": 1, "value": -11.18 } + ] + }, + "hair3": { + "rotate": [ + { + "value": 9.61, + "curve": [ 0.014, 8.51, 0.075, 2.63 ] + }, + { + "time": 0.1, + "value": 2.63, + "curve": [ 0.15, 2.63, 0.25, 13.52 ] + }, + { + "time": 0.3, + "value": 13.52, + "curve": [ 0.35, 13.52, 0.45, 11.28 ] + }, + { + "time": 0.5, + "value": 11.28, + "curve": [ 0.575, 11.28, 0.725, 18.13 ] + }, + { + "time": 0.8, + "value": 18.13, + "curve": [ 0.85, 18.13, 0.978, 11.07 ] + }, + { "time": 1, "value": 9.61 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -17.7, + "curve": [ 0.008, -17.7, 0.025, -23.73 ] + }, + { + "time": 0.0333, + "value": -23.73, + "curve": [ 0.067, -23.73, 0.154, -4.4 ] + }, + { + "time": 0.1667, + "value": -1.92, + "curve": [ 0.197, 4.09, 0.236, 12.91 ] + }, + { + "time": 0.2667, + "value": 17.56, + "curve": [ 0.301, 22.68, 0.342, 27.97 ] + }, + { + "time": 0.3667, + "value": 27.97, + "curve": [ 0.4, 27.97, 0.467, -1.45 ] + }, + { + "time": 0.5, + "value": -1.45, + "curve": [ 0.517, -1.45, 0.55, 3.16 ] + }, + { + "time": 0.5667, + "value": 3.16, + "curve": [ 0.583, 3.16, 0.617, -8.9 ] + }, + { + "time": 0.6333, + "value": -8.9, + "curve": [ 0.642, -8.9, 0.658, -5.4 ] + }, + { + "time": 0.6667, + "value": -5.4, + "curve": [ 0.683, -5.4, 0.717, -15.32 ] + }, + { + "time": 0.7333, + "value": -15.32, + "curve": [ 0.75, -15.32, 0.783, -9.19 ] + }, + { + "time": 0.8, + "value": -9.19, + "curve": [ 0.817, -9.19, 0.85, -23.6 ] + }, + { + "time": 0.8667, + "value": -23.6, + "curve": [ 0.883, -23.6, 0.917, -17.38 ] + }, + { + "time": 0.9333, + "value": -17.38, + "curve": [ 0.942, -17.38, 0.958, -20.46 ] + }, + { + "time": 0.9667, + "value": -20.46, + "curve": [ 0.975, -20.46, 0.992, -17.7 ] + }, + { "time": 1, "value": -17.7 } + ] + }, + "hair1": { + "rotate": [ + { + "value": 9.61, + "curve": [ 0.06, 9.04, 0.25, 8.9 ] + }, + { + "time": 0.3333, + "value": 8.9, + "curve": [ 0.392, 8.9, 0.508, 14.58 ] + }, + { + "time": 0.5667, + "value": 14.58, + "curve": [ 0.675, 14.58, 0.956, 10.28 ] + }, + { "time": 1, "value": 9.61 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -3.82, + "curve": [ 0.017, -3.82, 0.064, -9.16 ] + }, + { + "time": 0.1333, + "value": -9.09, + "curve": [ 0.178, -9.04, 0.234, 1.29 ] + }, + { + "time": 0.2667, + "value": 5.98, + "curve": [ 0.276, 7.27, 0.336, 17.1 ] + }, + { + "time": 0.3667, + "value": 17.1, + "curve": [ 0.413, 17.1, 0.467, 1.59 ] + }, + { + "time": 0.5, + "value": 1.59, + "curve": [ 0.533, 1.59, 0.567, 13.63 ] + }, + { + "time": 0.6, + "value": 13.63, + "curve": [ 0.617, 13.63, 0.683, 0.78 ] + }, + { + "time": 0.7, + "value": 0.78, + "curve": [ 0.717, 0.78, 0.75, 12.01 ] + }, + { + "time": 0.7667, + "value": 11.9, + "curve": [ 0.792, 11.73, 0.817, -0.85 ] + }, + { + "time": 0.8333, + "value": -0.85, + "curve": [ 0.85, -0.85, 0.88, 1.99 ] + }, + { + "time": 0.9, + "value": 1.82, + "curve": [ 0.916, 1.68, 0.95, -6.9 ] + }, + { + "time": 0.9667, + "value": -6.9, + "curve": [ 0.975, -6.9, 0.992, -3.82 ] + }, + { "time": 1, "value": -3.82 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 31.65, + "curve": [ 0.108, 31.65, 0.325, 13.01 ] + }, + { + "time": 0.4333, + "value": 13.01, + "curve": [ 0.71, 13.01, 0.917, 31.65 ] + }, + { "time": 1, "value": 31.65 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 31, + "curve": [ 0.108, 31, 0.325, 12.76 ] + }, + { + "time": 0.4333, + "value": 12.79, + "curve": [ 0.587, 12.82, 0.917, 31 ] + }, + { "time": 1, "value": 31 } + ] + }, + "gun": { + "rotate": [ + { + "value": 1.95, + "curve": [ 0.083, 1.95, 0.245, 36.73 ] + }, + { + "time": 0.3333, + "value": 36.71, + "curve": [ 0.439, 36.69, 0.589, 10.68 ] + }, + { + "time": 0.6333, + "value": 8.75, + "curve": [ 0.701, 5.81, 0.917, 1.95 ] + }, + { "time": 1, "value": 1.95 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 2.35 ] + }, + { + "time": 0.1333, + "value": 2.35, + "curve": [ 0.225, 2.35, 0.408, -2.4 ] + }, + { + "time": 0.5, + "value": -2.4, + "curve": [ 0.567, -2.4, 0.7, 1.44 ] + }, + { + "time": 0.7667, + "value": 1.44, + "curve": [ 0.825, 1.44, 0.942, 0 ] + }, + { "time": 1 } + ] + }, + "torso3": { + "rotate": [ + { + "curve": [ 0.063, 0.77, 0.106, 1.42 ] + }, + { + "time": 0.1667, + "value": 1.42, + "curve": [ 0.259, 1.42, 0.344, -1.25 ] + }, + { + "time": 0.4667, + "value": -1.26, + "curve": [ 0.656, -1.26, 0.917, -0.78 ] + }, + { "time": 1 } + ] + }, + "head-control": { + "translate": [ + { + "x": 0.37, + "y": -11.17, + "curve": [ 0.133, 0.37, 0.335, -10.23, 0.133, -11.17, 0.335, 3.15 ] + }, + { + "time": 0.5333, + "x": -10.23, + "y": 3.15, + "curve": [ 0.71, -10.23, 0.883, 0.37, 0.71, 3.15, 0.883, -11.17 ] + }, + { "time": 1, "x": 0.37, "y": -11.17 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": 1.46, + "y": 10.15, + "curve": [ 0.103, 1.46, 0.249, 1.36, 0.103, 10.15, 0.249, -4.39 ] + }, + { + "time": 0.4, + "x": 1.36, + "y": -4.39, + "curve": [ 0.621, 1.36, 0.85, 1.46, 0.621, -4.39, 0.85, 10.15 ] + }, + { "time": 1, "x": 1.46, "y": 10.15 } + ] + }, + "back-shoulder": { + "translate": [ + { + "x": 1.4, + "y": 0.44, + "curve": [ 0.088, 1.4, 0.208, -2.47, 0.088, 0.44, 0.208, 8.61 ] + }, + { + "time": 0.3333, + "x": -2.47, + "y": 8.61, + "curve": [ 0.572, -2.47, 0.833, 1.4, 0.572, 8.61, 0.833, 0.44 ] + }, + { "time": 1, "x": 1.4, "y": 0.44 } + ] + } + }, + "transform": { + "front-foot-board-transform": [ + { "mixRotate": 0.997 } + ], + "rear-foot-board-transform": [ + {} + ], + "toes-board": [ + { "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ] + }, + "attachments": { + "default": { + "front-foot": { + "front-foot": { + "deform": [ + { + "offset": 26, + "vertices": [ -0.02832, -5.37024, -0.02832, -5.37024, 3.8188, -3.7757, -0.02832, -5.37024, -3.82159, 3.77847 ] + } + ] + } + }, + "front-shin": { + "front-shin": { + "deform": [ + { + "offset": 14, + "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ] + }, + { + "time": 0.3667, + "offset": 14, + "vertices": [ 0.5298, -1.12677, -11.66571, -9.07211, -25.65866, -17.53735, -25.53217, -16.50978, -11.78232, -11.26097, 0, 0, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -2.64522, -7.35739, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -10.06873, -12.0999 ] + }, + { + "time": 0.5333, + "offset": 14, + "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -7.00775, -8.24771, -6.45482, -6.49312, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ] + }, + { + "time": 1, + "offset": 14, + "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ] + } + ] + } + }, + "hoverboard-board": { + "hoverboard-board": { + "deform": [ + { + "curve": [ 0.067, 0, 0.2, 1 ] + }, + { + "time": 0.2667, + "offset": 1, + "vertices": [ 2.45856, 0, 0, 0, 0, 0, 0, 0, 0, 3.55673, -3.0E-4, 3.55673, -3.0E-4, 0, 0, 0, 0, 0, 0, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, 0, 0, 0, 0, 0, 0, 0, 0, -4.90558, 0.11214, -9.40706, 6.2E-4, -6.34871, 4.3E-4, -6.34925, -6.57018, -6.34925, -6.57018, -6.34871, 4.3E-4, -2.3308, 1.7E-4, -2.33133, -6.57045, -2.33133, -6.57045, -2.3308, 1.7E-4, 0, 0, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 3.3297, 4.44005, 3.3297, 4.44005, 3.3297, 4.44005, 1.2E-4, 2.45856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.46227, 1.7E-4, -2.46227, 1.7E-4, -2.52316, 1.1313, -2.52316, 1.1313, -2.52316, 1.1313, 1.2E-4, 2.45856, 1.2E-4, 2.45856, -9.40694, 2.45918, 1.88063, 0.44197, -2.9E-4, -3.54808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.52316, 1.1313, -2.52316, 1.1313, -2.52316, 1.1313, -2.46227, 1.7E-4, -2.46227, 1.7E-4, -2.46227, 1.7E-4, 0, 0, 0, 0, 1.2E-4, 2.45856 ], + "curve": [ 0.45, 0, 0.817, 1 ] + }, + { "time": 1 } + ] + } + }, + "rear-foot": { + "rear-foot": { + "deform": [ + { + "offset": 28, + "vertices": [ -1.93078, 1.34782, -0.31417, 2.33363, 3.05122, 0.33946, 2.31472, -2.01678, 2.17583, -2.05795, -0.04277, -2.99459, 1.15429, 0.26328, 0.97501, -0.67169 ] + } + ] + } + } + } + } + }, + "idle": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-foot-target": { + "translate": [ + { "x": -69.06 } + ] + }, + "hip": { + "rotate": [ + { + "curve": [ 0.073, 0.35, 0.303, 1.27 ] + }, + { + "time": 0.4, + "value": 1.28, + "curve": [ 0.615, 1.3, 0.847, -1.41 ] + }, + { + "time": 1.2, + "value": -1.38, + "curve": [ 1.344, -1.37, 1.602, -0.28 ] + }, + { "time": 1.6667 } + ], + "translate": [ + { + "x": -11.97, + "y": -23.15, + "curve": [ 0.059, -12.96, 0.258, -15.19, 0.142, -23.15, 0.341, -24.89 ] + }, + { + "time": 0.4667, + "x": -15.14, + "y": -26.74, + "curve": [ 0.62, -15.1, 0.788, -13.28, 0.597, -28.66, 0.75, -30.01 ] + }, + { + "time": 0.9, + "x": -12.02, + "y": -30.01, + "curve": [ 0.978, -11.13, 1.175, -9.05, 1.036, -29.94, 1.234, -28.08 ] + }, + { + "time": 1.3333, + "x": -9.06, + "y": -26.64, + "curve": [ 1.501, -9.06, 1.614, -10.95, 1.454, -24.89, 1.609, -23.15 ] + }, + { "time": 1.6667, "x": -11.97, "y": -23.15 } + ] + }, + "rear-foot-target": { + "translate": [ + { "x": 48.87 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -60.87, + "curve": [ 0.154, -60.85, 0.452, -68.65 ] + }, + { + "time": 0.8333, + "value": -68.65, + "curve": [ 1.221, -68.65, 1.542, -60.87 ] + }, + { "time": 1.6667, "value": -60.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 42.46, + "curve": [ 0.029, 42.97, 0.134, 45.28 ] + }, + { + "time": 0.3333, + "value": 45.27, + "curve": [ 0.578, 45.26, 0.798, 40.07 ] + }, + { + "time": 0.8333, + "value": 39.74, + "curve": [ 0.878, 39.32, 1.019, 38.23 ] + }, + { + "time": 1.2, + "value": 38.22, + "curve": [ 1.377, 38.22, 1.619, 41.68 ] + }, + { "time": 1.6667, "value": 42.46 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 39.2, + "curve": [ 0.185, 39.22, 0.5, 29.37 ] + }, + { + "time": 0.6667, + "value": 29.37, + "curve": [ 0.917, 29.37, 1.417, 39.2 ] + }, + { "time": 1.6667, "value": 39.2 } + ] + }, + "head": { + "rotate": [ + { + "value": -6.75, + "curve": [ 0.176, -7.88, 0.349, -8.95 ] + }, + { + "time": 0.4667, + "value": -8.95, + "curve": [ 0.55, -8.95, 0.697, -6.77 ] + }, + { + "time": 0.8333, + "value": -5.44, + "curve": [ 0.88, -4.98, 1.05, -4.12 ] + }, + { + "time": 1.1333, + "value": -4.12, + "curve": [ 1.266, -4.12, 1.469, -5.48 ] + }, + { "time": 1.6667, "value": -6.75 } + ] + }, + "front-fist": { + "rotate": [ + { + "curve": [ 0.086, 0, 0.233, 2.48 ] + }, + { + "time": 0.3333, + "value": 4.13, + "curve": [ 0.429, 5.7, 0.711, 10.06 ] + }, + { + "time": 0.8333, + "value": 10.06, + "curve": [ 0.926, 10.06, 1.092, 4.21 ] + }, + { + "time": 1.2, + "value": 2.78, + "curve": [ 1.349, 0.8, 1.551, 0 ] + }, + { "time": 1.6667 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "curve": [ 0.063, 0.54, 0.367, 3.39 ] + }, + { + "time": 0.5333, + "value": 3.39, + "curve": [ 0.696, 3.39, 0.939, -1.63 ] + }, + { + "time": 1.2, + "value": -1.61, + "curve": [ 1.42, -1.59, 1.574, -0.67 ] + }, + { "time": 1.6667 } + ] + }, + "gun": { + "rotate": [ + { + "curve": [ 0.099, 0.27, 0.367, 1.23 ] + }, + { + "time": 0.5333, + "value": 1.23, + "curve": [ 0.665, 1.23, 0.937, -0.56 ] + }, + { + "time": 1.1333, + "value": -0.55, + "curve": [ 1.316, -0.55, 1.582, -0.21 ] + }, + { "time": 1.6667 } + ] + }, + "torso": { + "rotate": [ + { + "value": -22.88, + "curve": [ 0.099, -23.45, 0.363, -24.74 ] + }, + { + "time": 0.5333, + "value": -24.74, + "curve": [ 0.706, -24.74, 0.961, -20.97 ] + }, + { + "time": 1.1333, + "value": -20.97, + "curve": [ 1.355, -20.97, 1.567, -22.28 ] + }, + { "time": 1.6667, "value": -22.88 } + ] + }, + "neck": { + "rotate": [ + { + "value": 3.78, + "curve": [ 0.167, 3.78, 0.5, 5.45 ] + }, + { + "time": 0.6667, + "value": 5.45, + "curve": [ 0.917, 5.45, 1.417, 3.78 ] + }, + { "time": 1.6667, "value": 3.78 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.067, 0.33, 0.341, 2.54 ] + }, + { + "time": 0.5333, + "value": 2.54, + "curve": [ 0.734, 2.55, 0.982, -0.94 ] + }, + { + "time": 1.1333, + "value": -0.93, + "curve": [ 1.365, -0.91, 1.549, -0.56 ] + }, + { "time": 1.6667 } + ] + }, + "torso3": { + "rotate": [ + { + "value": -2.15, + "curve": [ 0.052, -1.9, 0.384, -0.15 ] + }, + { + "time": 0.5333, + "value": -0.14, + "curve": [ 0.762, -0.13, 0.895, -3.1 ] + }, + { + "time": 1.1333, + "value": -3.1, + "curve": [ 1.348, -3.1, 1.592, -2.46 ] + }, + { "time": 1.6667, "value": -2.15 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.067, 0, 0.213, 2.86 ] + }, + { + "time": 0.2667, + "value": 3.65, + "curve": [ 0.358, 4.99, 0.535, 7.92 ] + }, + { + "time": 0.6667, + "value": 7.92, + "curve": [ 0.809, 7.92, 1.067, 5.49 ] + }, + { + "time": 1.1333, + "value": 4.7, + "curve": [ 1.245, 3.34, 1.525, 0 ] + }, + { "time": 1.6667 } + ] + }, + "hair2": { + "rotate": [ + { + "curve": [ 0.067, 0, 0.225, -7.97 ] + }, + { + "time": 0.2667, + "value": -9.75, + "curve": [ 0.316, -11.84, 0.519, -16.66 ] + }, + { + "time": 0.6667, + "value": -16.66, + "curve": [ 0.817, -16.66, 1.029, -11.43 ] + }, + { + "time": 1.1333, + "value": -9.14, + "curve": [ 1.25, -6.56, 1.525, 0 ] + }, + { "time": 1.6667 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0.1, 0, 0.3, 1.32 ] + }, + { + "time": 0.4, + "value": 1.32, + "curve": [ 0.55, 1.32, 0.866, 0.93 ] + }, + { + "time": 1, + "value": 0.73, + "curve": [ 1.189, 0.46, 1.5, 0 ] + }, + { "time": 1.6667 } + ] + }, + "hair4": { + "rotate": [ + { + "curve": [ 0.118, -0.44, 0.3, -8.52 ] + }, + { + "time": 0.4, + "value": -8.52, + "curve": [ 0.55, -8.52, 0.85, 1.96 ] + }, + { + "time": 1, + "value": 1.96, + "curve": [ 1.167, 1.96, 1.577, 0.38 ] + }, + { "time": 1.6667 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.098, 1.46, 0.3, 4.49, 0.17, 0.13, 0.316, -3.28 ] + }, + { + "time": 0.4, + "x": 4.55, + "y": -5.95, + "curve": [ 0.53, 4.64, 0.776, 2.59, 0.492, -8.89, 0.668, -14.21 ] + }, + { + "time": 0.8667, + "x": 1.42, + "y": -14.26, + "curve": [ 0.966, 0.15, 1.109, -2.91, 0.994, -14.26, 1.144, -10.58 ] + }, + { + "time": 1.2333, + "x": -3.02, + "y": -8.26, + "curve": [ 1.342, -3.02, 1.568, -1.48, 1.317, -6.1, 1.558, 0 ] + }, + { "time": 1.6667 } + ] + }, + "front-shoulder": { + "translate": [ + { + "curve": [ 0.21, 0, 0.525, -1.72, 0.21, 0, 0.525, 4.08 ] + }, + { + "time": 0.8333, + "x": -1.72, + "y": 4.08, + "curve": [ 1.15, -1.72, 1.46, 0, 1.15, 4.08, 1.46, 0 ] + }, + { "time": 1.6667 } + ] + } + } + }, + "idle-turn": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-upper-arm": { + "rotate": [ + { + "value": -302.77, + "curve": [ 0, -406.9, 0.125, -420.87 ] + }, + { "time": 0.2667, "value": -420.87 } + ], + "translate": [ + { + "x": 2.24, + "y": -4.98, + "curve": [ 0.067, 2.24, 0.111, 0, 0.067, -4.98, 0.111, 0 ] + }, + { "time": 0.2667 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 248.56, + "curve": [ 0, 371.28, 0.062, 399.2 ] + }, + { "time": 0.1333, "value": 399.2 } + ], + "translate": [ + { + "x": -2.84, + "y": 37.28, + "curve": [ 0.033, -2.84, 0.069, 0, 0.033, 37.28, 0.069, 0 ] + }, + { "time": 0.1333 } + ] + }, + "gun": { + "rotate": [ + { + "value": -3.95, + "curve": [ 0, -10.4, 0.019, -20.43 ] + }, + { + "time": 0.0333, + "value": -20.45, + "curve": [ 0.044, -20.47, 0.125, 0 ] + }, + { "time": 0.2 } + ] + }, + "neck": { + "rotate": [ + { + "value": 17.2, + "curve": [ 0, 6.27, 0.125, 3.78 ] + }, + { "time": 0.2667, "value": 3.78 } + ] + }, + "hip": { + "translate": [ + { + "x": -2.69, + "y": -6.79, + "curve": [ 0.067, -2.69, 0.2, -11.97, 0.067, -6.79, 0.2, -23.15 ] + }, + { "time": 0.2667, "x": -11.97, "y": -23.15 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -15.54, + "curve": [ 0, -3.08, 0.034, 18.44 ] + }, + { + "time": 0.0667, + "value": 19.02, + "curve": [ 0.108, 19.75, 0.169, 0 ] + }, + { "time": 0.2667 } + ], + "scale": [ + { + "x": 0.94, + "curve": [ 0, 0.962, 0.024, 1.237, 0, 1, 0.026, 0.947 ] + }, + { + "time": 0.0667, + "x": 1.236, + "y": 0.947, + "curve": [ 0.117, 1.235, 0.189, 1, 0.117, 0.947, 0.189, 1 ] + }, + { "time": 0.2667 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 11.75, + "curve": [ 0, -7.97, 0.017, -33.4 ] + }, + { + "time": 0.0333, + "value": -33.39, + "curve": [ 0.049, -33.37, 0.131, 0 ] + }, + { "time": 0.2 } + ] + }, + "torso": { + "rotate": [ + { + "value": -18.25, + "curve": [ 0, -10.59, 0.125, -22.88 ] + }, + { "time": 0.2667, "value": -22.88 } + ], + "scale": [ + { + "y": 1.03, + "curve": [ 0.067, 1, 0.132, 1, 0.067, 1.03, 0.132, 1 ] + }, + { "time": 0.2667 } + ] + }, + "head": { + "rotate": [ + { + "value": 5.12, + "curve": [ 0, -6.34, 0.125, -6.75 ] + }, + { "time": 0.2667, "value": -6.75 } + ], + "scale": [ + { + "y": 1.03, + "curve": [ 0.067, 1, 0.107, 1, 0.067, 1.03, 0.107, 1 ] + }, + { "time": 0.2667 } + ] + }, + "rear-foot-target": { + "translate": [ + { + "x": -58.39, + "y": 30.48, + "curve": [ 0, -7.15, 0.047, 16.62, 0, 12.71, 0.039, 0.22 ] + }, + { + "time": 0.1, + "x": 34.14, + "y": -0.19, + "curve": [ 0.136, 45.79, 0.163, 48.87, 0.133, -0.41, 0.163, 0 ] + }, + { "time": 0.2, "x": 48.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 6.69, + "curve": [ 0, 19.76, 0.039, 56.53 ] + }, + { + "time": 0.0667, + "value": 56.63, + "curve": [ 0.114, 56.79, 0.189, 42.46 ] + }, + { "time": 0.2667, "value": 42.46 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "value": -1.85, + "curve": [ 0.014, -8.91, 0.047, -28.4 ] + }, + { + "time": 0.1, + "value": -28.89, + "curve": [ 0.144, -29.29, 0.262, -21.77 ] + }, + { "time": 0.2667 } + ], + "translate": [ + { + "x": 9.97, + "y": 0.82, + "curve": [ 0, -54.41, 0.078, -69.06, 0, 0.15, 0.078, 0 ] + }, + { "time": 0.1667, "x": -69.06 } + ] + }, + "hair3": { + "rotate": [ + { + "value": -9.01, + "curve": [ 0.044, -9.01, 0.072, 7.41 ] + }, + { + "time": 0.1333, + "value": 10.08, + "curve": [ 0.166, 11.47, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -16.49, + "curve": [ 0.044, -16.49, 0.101, -5.98 ] + }, + { + "time": 0.1333, + "value": -2.95, + "curve": [ 0.162, -0.34, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair1": { + "rotate": [ + { + "value": -3.85, + "curve": [ 0.044, -3.85, 0.072, 6.91 ] + }, + { + "time": 0.1333, + "value": 8.05, + "curve": [ 0.166, 8.65, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair2": { + "rotate": [ + { + "value": 1.25, + "curve": [ 0.044, 1.25, 0.072, 8.97 ] + }, + { + "time": 0.1333, + "value": 8.6, + "curve": [ 0.166, 8.4, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "front-thigh": { + "translate": [ + { + "x": 12.21, + "y": 1.89, + "curve": [ 0.033, 12.21, 0.1, 0, 0.033, 1.89, 0.1, 0 ] + }, + { "time": 0.1333 } + ] + }, + "rear-thigh": { + "translate": [ + { + "x": -16.11, + "y": -1.38, + "curve": [ 0.033, -16.11, 0.1, 0, 0.033, -1.38, 0.1, 0 ] + }, + { "time": 0.1333 } + ] + }, + "torso3": { + "rotate": [ + { "time": 0.2667, "value": -2.15 } + ] + }, + "head-control": { + "translate": [ + { + "x": -13.72, + "y": -34.7, + "curve": [ 0.067, -13.72, 0.2, 0, 0.067, -34.7, 0.2, 0 ] + }, + { "time": 0.2667 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": 1.13, + "y": -14.31, + "curve": [ 0.067, 1.13, 0.2, 0, 0.067, -14.31, 0.2, 0 ] + }, + { "time": 0.2667 } + ] + } + } + }, + "jump": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" }, + { "time": 0.1, "name": "front-fist-closed" }, + { "time": 0.8333, "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-thigh": { + "rotate": [ + { + "value": 55.08, + "curve": [ 0.007, 46.66, 0.043, 26.3 ] + }, + { + "time": 0.0667, + "value": 22.84, + "curve": [ 0.1, 17.99, 0.165, 15.78 ] + }, + { + "time": 0.2333, + "value": 15.71, + "curve": [ 0.309, 15.63, 0.408, 46.67 ] + }, + { + "time": 0.5, + "value": 63.6, + "curve": [ 0.56, 74.72, 0.762, 91.48 ] + }, + { + "time": 0.9667, + "value": 91.81, + "curve": [ 1.068, 92.01, 1.096, 22.05 ] + }, + { + "time": 1.1667, + "value": 22.25, + "curve": [ 1.18, 22.29, 1.176, 56.17 ] + }, + { + "time": 1.2, + "value": 56.16, + "curve": [ 1.246, 56.15, 1.263, 54.94 ] + }, + { "time": 1.3333, "value": 55.08 } + ], + "translate": [ + { "x": -5.13, "y": 11.55 } + ] + }, + "torso": { + "rotate": [ + { + "value": -45.57, + "curve": [ 0.022, -44.61, 0.03, -39.06 ] + }, + { + "time": 0.0667, + "value": -35.29, + "curve": [ 0.12, -29.77, 0.28, -19.95 ] + }, + { + "time": 0.4333, + "value": -19.95, + "curve": [ 0.673, -19.95, 0.871, -22.38 ] + }, + { + "time": 0.9667, + "value": -27.08, + "curve": [ 1.094, -33.33, 1.176, -44.93 ] + }, + { "time": 1.3333, "value": -45.57 } + ], + "translate": [ + { "x": -3.79, "y": -0.77 } + ] + }, + "rear-thigh": { + "rotate": [ + { + "value": 12.81, + "curve": [ 0.067, 12.81, 0.242, 67.88 ] + }, + { + "time": 0.2667, + "value": 74.11, + "curve": [ 0.314, 86.02, 0.454, 92.23 ] + }, + { + "time": 0.5667, + "value": 92.24, + "curve": [ 0.753, 92.26, 0.966, 67.94 ] + }, + { + "time": 1, + "value": 61.32, + "curve": [ 1.039, 53.75, 1.218, 12.68 ] + }, + { "time": 1.3333, "value": 12.81 } + ] + }, + "rear-shin": { + "rotate": [ + { + "value": -115.64, + "curve": [ 0.067, -117.17, 0.125, -117.15 ] + }, + { + "time": 0.1667, + "value": -117.15, + "curve": [ 0.225, -117.15, 0.332, -108.76 ] + }, + { + "time": 0.4, + "value": -107.15, + "curve": [ 0.48, -105.26, 0.685, -103.49 ] + }, + { + "time": 0.7667, + "value": -101.97, + "curve": [ 0.826, -100.87, 0.919, -92.3 ] + }, + { + "time": 1, + "value": -92.28, + "curve": [ 1.113, -92.26, 1.297, -114.22 ] + }, + { "time": 1.3333, "value": -115.64 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -40.21, + "curve": [ 0.054, -35.46, 0.15, -31.12 ] + }, + { + "time": 0.2, + "value": -31.12, + "curve": [ 0.308, -31.12, 0.547, -80.12 ] + }, + { + "time": 0.6333, + "value": -96.56, + "curve": [ 0.697, -108.56, 0.797, -112.54 ] + }, + { + "time": 0.8667, + "value": -112.6, + "curve": [ 1.137, -112.84, 1.274, -49.19 ] + }, + { "time": 1.3333, "value": -40.21 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 20.54, + "curve": [ 0.054, 32.23, 0.192, 55.84 ] + }, + { + "time": 0.2333, + "value": 62.58, + "curve": [ 0.29, 71.87, 0.375, 79.28 ] + }, + { + "time": 0.4333, + "value": 79.18, + "curve": [ 0.555, 78.98, 0.684, 27.54 ] + }, + { + "time": 0.7333, + "value": 13.28, + "curve": [ 0.786, -1.85, 0.874, -24.76 ] + }, + { + "time": 1, + "value": -25.45, + "curve": [ 1.165, -26.36, 1.303, 9.1 ] + }, + { "time": 1.3333, "value": 20.54 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -36.16, + "curve": [ 0.114, -39.59, 0.3, -45.61 ] + }, + { + "time": 0.4, + "value": -45.61, + "curve": [ 0.442, -45.61, 0.537, -21.54 ] + }, + { + "time": 0.5667, + "value": -15.4, + "curve": [ 0.592, -10.23, 0.692, 11.89 ] + }, + { + "time": 0.7333, + "value": 11.73, + "curve": [ 0.783, 11.54, 0.831, 1.8 ] + }, + { + "time": 0.8667, + "value": -5.78, + "curve": [ 0.897, -12.22, 0.901, -14.22 ] + }, + { + "time": 0.9333, + "value": -14.51, + "curve": [ 0.974, -14.89, 0.976, 10.38 ] + }, + { + "time": 1, + "value": 10.55, + "curve": [ 1.027, 10.74, 1.023, -8.44 ] + }, + { + "time": 1.0333, + "value": -8.42, + "curve": [ 1.059, -8.36, 1.074, 10.12 ] + }, + { + "time": 1.1, + "value": 10.22, + "curve": [ 1.168, 10.48, 1.27, -36.07 ] + }, + { "time": 1.3333, "value": -36.16 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 40.5, + "curve": [ 0.048, 36.1, 0.168, 20.45 ] + }, + { + "time": 0.3, + "value": 20.45, + "curve": [ 0.476, 20.45, 0.571, 33.76 ] + }, + { + "time": 0.6, + "value": 38.67, + "curve": [ 0.642, 45.8, 0.681, 57.44 ] + }, + { + "time": 0.7333, + "value": 62.91, + "curve": [ 0.829, 72.8, 0.996, 77.61 ] + }, + { + "time": 1.0333, + "value": 80.37, + "curve": [ 1.082, 83.94, 1.148, 90.6 ] + }, + { + "time": 1.2, + "value": 90.6, + "curve": [ 1.248, 90.46, 1.317, 53.07 ] + }, + { "time": 1.3333, "value": 49.06 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 28.28, + "curve": [ 0.022, 25.12, 0.187, -0.89 ] + }, + { + "time": 0.2, + "value": -2.52, + "curve": [ 0.257, -9.92, 0.372, -17.38 ] + }, + { + "time": 0.4333, + "value": -17.41, + "curve": [ 0.54, -17.47, 0.659, -16.91 ] + }, + { + "time": 0.7667, + "value": -12.1, + "curve": [ 0.907, -5.79, 1.025, 14.58 ] + }, + { + "time": 1.1, + "value": 20.58, + "curve": [ 1.191, 27.85, 1.283, 29.67 ] + }, + { "time": 1.3333, "value": 29.67 } + ] + }, + "neck": { + "rotate": [ + { + "value": 11.88, + "curve": [ 0.104, 11.82, 0.179, 11.15 ] + }, + { + "time": 0.2, + "value": 10.08, + "curve": [ 0.255, 7.29, 0.405, -8.15 ] + }, + { + "time": 0.4333, + "value": -9.35, + "curve": [ 0.508, -12.48, 0.595, -13.14 ] + }, + { + "time": 0.6667, + "value": -12.61, + "curve": [ 0.714, -12.26, 0.815, -5.57 ] + }, + { + "time": 0.8333, + "value": -4.08, + "curve": [ 0.883, -0.07, 1.045, 12.77 ] + }, + { + "time": 1.1, + "value": 15.06, + "curve": [ 1.208, 19.6, 1.279, 20.64 ] + }, + { "time": 1.3333, "value": 20.73 } + ] + }, + "head": { + "rotate": [ + { + "value": 13.14, + "curve": [ 0.008, 12.19, 0.197, -23.53 ] + }, + { + "time": 0.3333, + "value": -23.95, + "curve": [ 0.509, -23.95, 0.667, -2.66 ] + }, + { + "time": 0.7333, + "value": -2.66, + "curve": [ 0.792, -2.66, 0.908, -13.32 ] + }, + { + "time": 0.9667, + "value": -13.32, + "curve": [ 1.158, -13.11, 1.241, -1.58 ] + }, + { "time": 1.3333, "value": -1.58 } + ], + "scale": [ + { + "curve": [ 0.041, 1, 0.052, 0.962, 0.041, 1, 0.052, 1.137 ] + }, + { + "time": 0.1, + "x": 0.954, + "y": 1.137, + "curve": [ 0.202, 0.962, 0.318, 1, 0.202, 1.137, 0.252, 1.002 ] + }, + { "time": 0.4667 }, + { + "time": 1.0667, + "x": 1.002, + "curve": [ 1.092, 1.002, 1.126, 1.143, 1.092, 1, 1.128, 0.975 ] + }, + { + "time": 1.1667, + "x": 1.144, + "y": 0.973, + "curve": [ 1.204, 1.145, 1.233, 0.959, 1.206, 0.972, 1.227, 1.062 ] + }, + { + "time": 1.2667, + "x": 0.958, + "y": 1.063, + "curve": [ 1.284, 0.958, 1.292, 1.001, 1.288, 1.063, 1.288, 1.001 ] + }, + { "time": 1.3333 } + ] + }, + "hip": { + "translate": [ + { + "y": -45.46, + "curve": [ 0.042, -0.09, 0.15, 15.22, 0.031, 44.98, 0.123, 289.73 ] + }, + { + "time": 0.2, + "x": 15.22, + "y": 415.85, + "curve": [ 0.332, 15.22, 0.539, -34.52, 0.271, 532.93, 0.483, 720.5 ] + }, + { + "time": 0.7667, + "x": -34.52, + "y": 721.6, + "curve": [ 0.888, -34.52, 1.057, -21.95, 1.049, 721.17, 1.098, 379.84 ] + }, + { + "time": 1.1333, + "x": -15.67, + "y": 266.77, + "curve": [ 1.144, -14.77, 1.188, -10.53, 1.15, 213.72, 1.172, -61.32 ] + }, + { + "time": 1.2333, + "x": -6.53, + "y": -61.34, + "curve": [ 1.272, -3.22, 1.311, 0.05, 1.291, -61.36, 1.296, -44.8 ] + }, + { "time": 1.3333, "y": -45.46 } + ] + }, + "front-shin": { + "rotate": [ + { + "value": -74.19, + "curve": [ 0, -51.14, 0.042, -12.54 ] + }, + { + "time": 0.1667, + "value": -12.28, + "curve": [ 0.285, -12.32, 0.37, -74.44 ] + }, + { + "time": 0.4333, + "value": -92.92, + "curve": [ 0.498, -111.86, 0.617, -140.28 ] + }, + { + "time": 0.9, + "value": -140.84, + "curve": [ 1.004, -141.04, 1.09, -47.87 ] + }, + { + "time": 1.1, + "value": -37.44, + "curve": [ 1.108, -29.83, 1.14, -21.18 ] + }, + { + "time": 1.1667, + "value": -21.08, + "curve": [ 1.18, -21.03, 1.191, -50.65 ] + }, + { + "time": 1.2, + "value": -53.17, + "curve": [ 1.22, -58.53, 1.271, -73.38 ] + }, + { "time": 1.3333, "value": -74.19 } + ] + }, + "front-foot": { + "rotate": [ + { + "value": 7.35, + "curve": [ 0, 4.8, 0.05, -26.64 ] + }, + { + "time": 0.0667, + "value": -26.64, + "curve": [ 0.192, -26.64, 0.442, -11.77 ] + }, + { + "time": 0.5667, + "value": -11.77, + "curve": [ 0.692, -11.77, 0.942, -19.36 ] + }, + { + "time": 1.0667, + "value": -19.36, + "curve": [ 1.133, -19.36, 1.32, 3.82 ] + }, + { "time": 1.3333, "value": 7.35 } + ] + }, + "rear-foot": { + "rotate": [ + { "value": -7.14 } + ] + }, + "gun": { + "rotate": [ + { + "value": 12.36, + "curve": [ 0.022, 16.28, 0.15, 30.81 ] + }, + { + "time": 0.2, + "value": 30.81, + "curve": [ 0.258, 30.81, 0.375, 13.26 ] + }, + { + "time": 0.4333, + "value": 13.26, + "curve": [ 0.508, 13.26, 0.658, 15.05 ] + }, + { + "time": 0.7333, + "value": 14.98, + "curve": [ 0.789, 14.94, 0.828, 13.62 ] + }, + { + "time": 0.8667, + "value": 12.72, + "curve": [ 0.887, 12.25, 0.984, 9.83 ] + }, + { + "time": 1.0333, + "value": 8.6, + "curve": [ 1.045, 8.31, 1.083, 7.55 ] + }, + { + "time": 1.1333, + "value": 7.13, + "curve": [ 1.175, 6.78, 1.283, 6.18 ] + }, + { "time": 1.3333, "value": 6.18 } + ] + }, + "front-leg-target": { + "translate": [ + { "x": -13.95, "y": -30.34 } + ] + }, + "rear-leg-target": { + "rotate": [ + { "value": -38.43 } + ], + "translate": [ + { "x": 85, "y": -33.59 } + ] + }, + "front-foot-target": { + "rotate": [ + { "value": -62.54 } + ], + "translate": [ + { "x": 16.34, "y": 0.18 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "value": 18.55 } + ], + "translate": [ + { "x": -176.39, "y": 134.12 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "value": -143.73, + "curve": [ 0.083, -144.24, 0.167, -74.26 ] + }, + { + "time": 0.2667, + "value": -52.76, + "curve": [ 0.342, -36.57, 0.513, -36.57 ] + }, + { + "time": 0.6333, + "value": -30.97, + "curve": [ 0.724, -26.78, 0.848, -17.06 ] + }, + { + "time": 0.9667, + "value": -16.74, + "curve": [ 1.167, -16.2, 1.272, -144.17 ] + }, + { "time": 1.3333, "value": -143.73 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": -1.57, + "curve": [ 0, -24.71, 0.162, -60.88 ] + }, + { + "time": 0.2667, + "value": -60.83, + "curve": [ 0.342, -60.8, 0.582, -43.5 ] + }, + { + "time": 0.7, + "value": -39.45, + "curve": [ 0.773, -36.94, 0.832, -36.78 ] + }, + { + "time": 0.9667, + "value": -36.6, + "curve": [ 1.054, -36.49, 1.092, -37.37 ] + }, + { + "time": 1.1667, + "value": -33.26, + "curve": [ 1.237, -29.37, 1.147, -1.41 ] + }, + { "time": 1.2, "value": -1.57 } + ] + }, + "hair3": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0, 13.59, 0.117, 18.21 ] + }, + { + "time": 0.1333, + "value": 18.21, + "curve": [ 0.167, 18.21, 0.26, 12.95 ] + }, + { + "time": 0.3, + "value": 11.56, + "curve": [ 0.382, 8.7, 0.55, 9.43 ] + }, + { + "time": 0.6667, + "value": 9.32, + "curve": [ 0.843, 9.15, 0.918, -7.34 ] + }, + { "time": 1.3333, "value": -6.81 } + ], + "translate": [ + { + "time": 0.6667, + "curve": [ 0.781, 0, 0.972, 16.03, 0.781, 0, 0.972, 0.92 ] + }, + { + "time": 1.1333, + "x": 16.03, + "y": 0.92, + "curve": [ 1.211, 16.03, 1.281, 0, 1.211, 0.92, 1.281, 0 ] + }, + { "time": 1.3333 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.001, -3.88, 0.063, 16.18 ] + }, + { + "time": 0.1667, + "value": 16.14, + "curve": [ 0.242, 16.1, 0.249, 16.07 ] + }, + { + "time": 0.3333, + "value": 13.46, + "curve": [ 0.442, 10.09, 0.573, -2.2 ] + }, + { + "time": 0.6, + "value": -6.04, + "curve": [ 0.614, -8.05, 0.717, -33.44 ] + }, + { + "time": 0.7667, + "value": -33.44, + "curve": [ 0.809, -33.44, 0.835, -31.32 ] + }, + { + "time": 0.8667, + "value": -27.36, + "curve": [ 0.874, -26.47, 0.903, -14.28 ] + }, + { + "time": 0.9333, + "value": -14.47, + "curve": [ 0.956, -14.62, 0.944, -25.91 ] + }, + { + "time": 1, + "value": -25.96, + "curve": [ 1.062, -26.02, 1.051, -1.87 ] + }, + { + "time": 1.0667, + "value": -1.87, + "curve": [ 1.096, -1.87, 1.096, -16.09 ] + }, + { + "time": 1.1333, + "value": -16.08, + "curve": [ 1.169, -16.08, 1.153, -3.38 ] + }, + { + "time": 1.2, + "value": -3.38, + "curve": [ 1.234, -3.38, 1.271, -6.07 ] + }, + { "time": 1.3333, "value": -6.07 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0, -3.17, 0.042, 16.33 ] + }, + { + "time": 0.0667, + "value": 16.33, + "curve": [ 0.21, 15.74, 0.208, -12.06 ] + }, + { + "time": 0.3333, + "value": -12.21, + "curve": [ 0.417, -12.3, 0.552, -3.98 ] + }, + { + "time": 0.6667, + "value": 1.52, + "curve": [ 0.726, 4.35, 0.817, 4.99 ] + }, + { + "time": 0.8667, + "value": 4.99, + "curve": [ 0.901, 4.99, 0.912, -29.05 ] + }, + { + "time": 0.9667, + "value": -27.45, + "curve": [ 0.987, -26.83, 1.018, -5.42 ] + }, + { + "time": 1.0667, + "value": -5.46, + "curve": [ 1.107, -5.22, 1.095, -33.51 ] + }, + { + "time": 1.1333, + "value": -33.28, + "curve": [ 1.162, -33.57, 1.192, 8.04 ] + }, + { + "time": 1.2667, + "value": 7.86, + "curve": [ 1.302, 7.77, 1.313, 2.7 ] + }, + { "time": 1.3333, "value": 2.7 } + ] + }, + "hair1": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.001, -3.12, 0.074, 14.66 ] + }, + { + "time": 0.1333, + "value": 14.66, + "curve": [ 0.188, 14.8, 0.293, 9.56 ] + }, + { + "time": 0.3333, + "value": 5.99, + "curve": [ 0.381, 1.72, 0.55, -11.11 ] + }, + { + "time": 0.6667, + "value": -11.11, + "curve": [ 0.833, -11.11, 0.933, 22.54 ] + }, + { + "time": 1.1, + "value": 22.54, + "curve": [ 1.158, 22.54, 1.275, -6.81 ] + }, + { "time": 1.3333, "value": -6.81 } + ] + }, + "torso2": { + "rotate": [ + { + "value": 4.52, + "curve": [ 0.013, 2.33, 0.092, -9.75 ] + }, + { + "time": 0.1333, + "value": -9.75, + "curve": [ 0.175, -9.75, 0.291, -1.26 ] + }, + { + "time": 0.3333, + "value": 0.96, + "curve": [ 0.359, 2.3, 0.543, 4.25 ] + }, + { + "time": 0.6, + "value": 4.68, + "curve": [ 0.683, 5.3, 0.771, 5.92 ] + }, + { + "time": 0.8333, + "value": 6.48, + "curve": [ 0.871, 6.82, 1.083, 11.37 ] + }, + { + "time": 1.1667, + "value": 11.37, + "curve": [ 1.208, 11.37, 1.317, 6.18 ] + }, + { "time": 1.3333, "value": 4.52 } + ], + "translate": [ + { + "curve": [ 0, 0, 0.082, -2.24, 0, 0, 0.082, -0.42 ] + }, + { + "time": 0.1667, + "x": -2.98, + "y": -0.56, + "curve": [ 0.232, -2.24, 0.298, 0, 0.232, -0.42, 0.298, 0 ] + }, + { "time": 0.3333, "curve": "stepped" }, + { + "time": 0.8667, + "curve": [ 0.889, 0, 0.912, 0.26, 0.889, 0, 0.912, 0.06 ] + }, + { + "time": 0.9333, + "x": 0.68, + "y": 0.23, + "curve": [ 1.016, 2.22, 1.095, 5.9, 1.023, 0.97, 1.095, 1.99 ] + }, + { + "time": 1.1667, + "x": 6.47, + "y": 2.18, + "curve": [ 1.23, 5.75, 1.286, 0, 1.23, 1.94, 1.286, 0 ] + }, + { "time": 1.3333 } + ] + }, + "torso3": { + "rotate": [ + { + "value": 4.52, + "curve": [ 0.025, 4.52, 0.075, -6.17 ] + }, + { + "time": 0.1, + "value": -6.17, + "curve": [ 0.175, -6.17, 0.381, -0.71 ] + }, + { + "time": 0.4, + "value": -0.25, + "curve": [ 0.447, 0.87, 0.775, 4.84 ] + }, + { + "time": 0.9, + "value": 4.84, + "curve": [ 1.008, 4.84, 1.225, 4.52 ] + }, + { "time": 1.3333, "value": 4.52 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.138, -2.4, 0.227, -10.44, 0.123, 1.05, 0.227, 2.7 ] + }, + { + "time": 0.3667, + "x": -10.44, + "y": 2.7, + "curve": [ 0.484, -10.44, 0.585, -5.63, 0.484, 2.7, 0.629, -23.62 ] + }, + { + "time": 0.7333, + "x": -2.29, + "y": -26.61, + "curve": [ 0.818, -0.39, 0.962, 1.21, 0.858, -30.17, 0.972, -28.75 ] + }, + { + "time": 1.1, + "x": 1.25, + "y": -28.75, + "curve": [ 1.192, 1.28, 1.234, 0.98, 1.224, -28.75, 1.235, -2.15 ] + }, + { "time": 1.3333 } + ] + }, + "front-shoulder": { + "translate": [ + { + "curve": [ 0.031, -2.22, 0.065, -3.73, 0.02, -3.25, 0.065, -14.74 ] + }, + { + "time": 0.1, + "x": -3.73, + "y": -14.74, + "curve": [ 0.216, -3.73, 0.384, -0.17, 0.216, -14.74, 0.402, -12.51 ] + }, + { + "time": 0.5, + "x": 1.63, + "y": -9.51, + "curve": [ 0.632, 3.69, 0.935, 7.41, 0.585, -6.91, 0.909, 10.86 ] + }, + { + "time": 1.1, + "x": 7.45, + "y": 10.99, + "curve": [ 1.18, 7.46, 1.265, 2.86, 1.193, 11.05, 1.294, 3.38 ] + }, + { "time": 1.3333 } + ] + } + }, + "ik": { + "front-foot-ik": [ + { + "mix": 0, + "curve": [ 0.3, 0, 0.9, 1, 0.3, 0, 0.9, 0 ] + }, + { "time": 1.2 } + ], + "front-leg-ik": [ + { + "mix": 0, + "bendPositive": false, + "curve": [ 0.3, 0, 0.9, 1, 0.3, 0, 0.9, 0 ] + }, + { "time": 1.2, "bendPositive": false } + ], + "rear-foot-ik": [ + { "mix": 0 } + ], + "rear-leg-ik": [ + { "mix": 0, "bendPositive": false } + ] + }, + "events": [ + { "time": 1.2, "name": "footstep" } + ] + }, + "portal": { + "slots": { + "clipping": { + "attachment": [ + { "name": "clipping" } + ] + }, + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0.9, "name": "mouth-grind" }, + { "time": 2.2667, "name": "mouth-smile" } + ] + }, + "portal-bg": { + "attachment": [ + { "name": "portal-bg" }, + { "time": 3 } + ] + }, + "portal-flare1": { + "attachment": [ + { "time": 1.1, "name": "portal-flare1" }, + { "time": 1.1333, "name": "portal-flare2" }, + { "time": 1.1667, "name": "portal-flare3" }, + { "time": 1.2, "name": "portal-flare1" }, + { "time": 1.2333, "name": "portal-flare2" }, + { "time": 1.2667, "name": "portal-flare1" }, + { "time": 1.3333 } + ] + }, + "portal-flare2": { + "attachment": [ + { "time": 1.1, "name": "portal-flare2" }, + { "time": 1.1333, "name": "portal-flare3" }, + { "time": 1.1667, "name": "portal-flare1" }, + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare3" }, + { "time": 1.2667 } + ] + }, + "portal-flare3": { + "attachment": [ + { "time": 1.2, "name": "portal-flare3" }, + { "time": 1.2333, "name": "portal-flare2" }, + { "time": 1.2667 } + ] + }, + "portal-flare4": { + "attachment": [ + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare1" }, + { "time": 1.2667, "name": "portal-flare2" }, + { "time": 1.3333 } + ] + }, + "portal-flare5": { + "attachment": [ + { "time": 1.2333, "name": "portal-flare3" }, + { "time": 1.2667, "name": "portal-flare1" }, + { "time": 1.3333 } + ] + }, + "portal-flare6": { + "attachment": [ + { "time": 1.2667, "name": "portal-flare3" }, + { "time": 1.3333 } + ] + }, + "portal-flare7": { + "attachment": [ + { "time": 1.1333, "name": "portal-flare2" }, + { "time": 1.1667 } + ] + }, + "portal-flare8": { + "attachment": [ + { "time": 1.2, "name": "portal-flare3" }, + { "time": 1.2333, "name": "portal-flare2" }, + { "time": 1.2667 } + ] + }, + "portal-flare9": { + "attachment": [ + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare3" }, + { "time": 1.2667, "name": "portal-flare1" }, + { "time": 1.3 } + ] + }, + "portal-flare10": { + "attachment": [ + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare1" }, + { "time": 1.2667, "name": "portal-flare3" }, + { "time": 1.3 } + ] + }, + "portal-shade": { + "attachment": [ + { "name": "portal-shade" }, + { "time": 3 } + ] + }, + "portal-streaks1": { + "attachment": [ + { "name": "portal-streaks1" }, + { "time": 3 } + ] + }, + "portal-streaks2": { + "attachment": [ + { "name": "portal-streaks2" }, + { "time": 3 } + ] + } + }, + "bones": { + "portal-root": { + "translate": [ + { + "x": -458.35, + "y": 105.19, + "curve": [ 0.333, -458.22, 0.669, -457.86, 0.934, 105.19, 0.671, 105.19 ] + }, + { + "time": 1, + "x": -456.02, + "y": 105.19, + "curve": [ 1.339, -454.14, 2.208, -447.28, 1.35, 105.19, 2.05, 105.19 ] + }, + { + "time": 2.4, + "x": -439.12, + "y": 105.19, + "curve": [ 2.463, -436.44, 2.502, -432.92, 2.487, 105.19, 2.512, 105.09 ] + }, + { + "time": 2.6, + "x": -432.58, + "y": 105.09, + "curve": [ 2.784, -431.94, 2.978, -446.6, 2.772, 105.09, 2.933, 105.19 ] + }, + { "time": 3.0333, "x": -457.42, "y": 105.19 } + ], + "scale": [ + { + "x": 0.003, + "y": 0.006, + "curve": [ 0.329, 0.044, 0.347, 0.117, 0.329, 0.097, 0.37, 0.249 ] + }, + { + "time": 0.4, + "x": 0.175, + "y": 0.387, + "curve": [ 0.63, 0.619, 0.663, 0.723, 0.609, 1.338, 0.645, 1.524 ] + }, + { + "time": 0.7333, + "x": 0.724, + "y": 1.52, + "curve": [ 0.798, 0.725, 0.907, 0.647, 0.797, 1.517, 0.895, 1.424 ] + }, + { + "time": 1, + "x": 0.645, + "y": 1.426, + "curve": [ 1.095, 0.643, 1.139, 0.688, 1.089, 1.428, 1.115, 1.513 ] + }, + { + "time": 1.2333, + "x": 0.685, + "y": 1.516, + "curve": [ 1.325, 0.683, 1.508, 0.636, 1.343, 1.518, 1.467, 1.4 ] + }, + { + "time": 1.6, + "x": 0.634, + "y": 1.401, + "curve": [ 1.728, 0.631, 1.946, 0.687, 1.722, 1.402, 1.924, 1.522 ] + }, + { + "time": 2.0667, + "x": 0.688, + "y": 1.522, + "curve": [ 2.189, 0.69, 2.289, 0.649, 2.142, 1.522, 2.265, 1.417 ] + }, + { + "time": 2.4, + "x": 0.65, + "y": 1.426, + "curve": [ 2.494, 0.651, 2.504, 0.766, 2.508, 1.434, 2.543, 1.566 ] + }, + { + "time": 2.6, + "x": 0.766, + "y": 1.568, + "curve": [ 2.73, 0.765, 3.006, 0.098, 2.767, 1.564, 2.997, 0.1 ] + }, + { "time": 3.0333, "x": 0.007, "y": 0.015 } + ] + }, + "portal-streaks1": { + "rotate": [ + {}, + { "time": 3.1667, "value": 1200 } + ], + "translate": [ + { + "x": 15.15, + "curve": [ 0.162, 15.15, 0.432, 12.6, 0.162, 0, 0.432, -3.86 ] + }, + { + "time": 0.6667, + "x": 10.9, + "y": -6.44, + "curve": [ 0.794, 9.93, 0.912, 9.21, 0.794, -7.71, 0.912, -8.66 ] + }, + { + "time": 1, + "x": 9.21, + "y": -8.66, + "curve": [ 1.083, 9.21, 1.25, 21.53, 1.083, -8.66, 1.265, -4.9 ] + }, + { + "time": 1.3333, + "x": 21.53, + "y": -3.19, + "curve": [ 1.5, 21.53, 1.939, 12.3, 1.446, -0.37, 1.9, 6.26 ] + }, + { + "time": 2.0667, + "x": 11.26, + "y": 6.26, + "curve": [ 2.239, 9.85, 2.389, 9.68, 2.208, 6.26, 2.523, 0.51 ] + }, + { + "time": 2.5667, + "x": 9.39, + "y": -0.8, + "curve": [ 2.657, 9.24, 2.842, 9.21, 2.646, -3.2, 2.842, -8.91 ] + }, + { "time": 2.9333, "x": 9.21, "y": -8.91 } + ], + "scale": [ + { + "curve": [ 0.167, 1, 0.5, 1.053, 0.167, 1, 0.5, 1.053 ] + }, + { + "time": 0.6667, + "x": 1.053, + "y": 1.053, + "curve": [ 0.833, 1.053, 1.167, 0.986, 0.833, 1.053, 1.167, 0.986 ] + }, + { + "time": 1.3333, + "x": 0.986, + "y": 0.986, + "curve": [ 1.5, 0.986, 1.833, 1.053, 1.5, 0.986, 1.833, 1.053 ] + }, + { "time": 2, "x": 1.053, "y": 1.053 } + ] + }, + "portal-streaks2": { + "rotate": [ + {}, + { "time": 3.1667, "value": 600 } + ], + "translate": [ + { "x": -2.11 }, + { "time": 1, "x": -2.11, "y": 6.63 }, + { "time": 1.9333, "x": -2.11 } + ], + "scale": [ + { + "x": 1.014, + "y": 1.014, + "curve": [ 0.229, 0.909, 0.501, 0.755, 0.242, 0.892, 0.502, 0.768 ] + }, + { + "time": 0.8667, + "x": 0.745, + "y": 0.745, + "curve": [ 1.282, 0.733, 2.021, 0.699, 1.27, 0.719, 2.071, 0.709 ] + }, + { + "time": 2.2, + "x": 0.7, + "y": 0.704, + "curve": [ 2.315, 0.7, 2.421, 0.794, 2.311, 0.701, 2.485, 0.797 ] + }, + { + "time": 2.5667, + "x": 0.794, + "y": 0.794, + "curve": [ 2.734, 0.794, 2.99, 0.323, 2.714, 0.789, 3.019, 0.341 ] + }, + { "time": 3.1667, "x": 0, "y": 0 } + ] + }, + "portal-shade": { + "translate": [ + { "x": -29.68 } + ], + "scale": [ + { "x": 0.714, "y": 0.714 } + ] + }, + "portal": { + "rotate": [ + {}, + { "time": 3.1667, "value": 600 } + ] + }, + "clipping": { + "translate": [ + { "x": -476.55, "y": 2.27 } + ], + "scale": [ + { "x": 0.983, "y": 1.197 } + ] + }, + "hip": { + "rotate": [ + { + "time": 1.0667, + "value": 22.74, + "curve": [ 1.163, 18.84, 1.77, 8.77 ] + }, + { + "time": 1.9, + "value": 7.82, + "curve": [ 2.271, 5.1, 2.89, 0 ] + }, + { "time": 3.1667 } + ], + "translate": [ + { "x": -899.41, "y": 4.47, "curve": "stepped" }, + { + "time": 1.0667, + "x": -694.16, + "y": 183.28, + "curve": [ 1.091, -602.08, 1.138, -427.59, 1.115, 185.6, 1.171, 133.18 ] + }, + { + "time": 1.2333, + "x": -316.97, + "y": 55.29, + "curve": [ 1.317, -220.27, 1.512, -123.21, 1.271, 8.68, 1.461, -83.18 ] + }, + { + "time": 1.6, + "x": -95.53, + "y": -112.23, + "curve": [ 1.718, -58.25, 2.037, -22.54, 1.858, -166.17, 2.109, -31.4 ] + }, + { + "time": 2.1667, + "x": -14.82, + "y": -31.12, + "curve": [ 2.294, -7.28, 2.442, -7.2, 2.274, -30.6, 2.393, -36.76 ] + }, + { + "time": 2.6, + "x": -7.2, + "y": -36.96, + "curve": [ 2.854, -7.2, 3.071, -11.87, 2.786, -36.27, 3.082, -22.98 ] + }, + { "time": 3.1667, "x": -11.97, "y": -23.15 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "time": 1.0667, "value": 41.6, "curve": "stepped" }, + { + "time": 1.2333, + "value": 41.6, + "curve": [ 1.258, 41.6, 1.379, 35.46 ] + }, + { + "time": 1.4, + "value": 30.09, + "curve": [ 1.412, 27.04, 1.433, 10.65 ] + }, + { "time": 1.4333, "value": -0.28 }, + { "time": 1.6, "value": 2.44 } + ], + "translate": [ + { "x": -899.41, "y": 4.47, "curve": "stepped" }, + { + "time": 1.0667, + "x": -591.13, + "y": 438.46, + "curve": [ 1.076, -539.77, 1.206, -268.1, 1.117, 418.44, 1.21, 333.18 ] + }, + { + "time": 1.2333, + "x": -225.28, + "y": 304.53, + "curve": [ 1.265, -175.22, 1.393, -74.21, 1.296, 226.52, 1.401, 49.61 ] + }, + { + "time": 1.4333, + "x": -52.32, + "y": 0.2, + "curve": [ 1.454, -40.85, 1.616, 40.87, 1.466, 0.17, 1.614, 0.04 ] + }, + { "time": 1.6667, "x": 45.87, "y": 0.01 }, + { "time": 1.9333, "x": 48.87 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "time": 1.0667, + "value": 32.08, + "curve": [ 1.108, 32.08, 1.192, 35.16 ] + }, + { + "time": 1.2333, + "value": 35.16, + "curve": [ 1.258, 35.16, 1.317, 2.23 ] + }, + { + "time": 1.3333, + "value": -4.74, + "curve": [ 1.351, -12.14, 1.429, -34.96 ] + }, + { + "time": 1.6, + "value": -34.77, + "curve": [ 1.765, -34.58, 1.897, -17.25 ] + }, + { "time": 1.9333 } + ], + "translate": [ + { "x": -899.41, "y": 4.47, "curve": "stepped" }, + { + "time": 1.0667, + "x": -533.93, + "y": 363.75, + "curve": [ 1.074, -480.85, 1.18, -261.31, 1.094, 362.3, 1.195, 267.77 ] + }, + { + "time": 1.2333, + "x": -201.23, + "y": 199.93, + "curve": [ 1.269, -161.38, 1.294, -140.32, 1.274, 126.67, 1.308, 77.12 ] + }, + { + "time": 1.3333, + "x": -124.08, + "y": 0.2, + "curve": [ 1.426, -85.6, 1.633, -69.06, 1.45, 0.48, 1.633, 0 ] + }, + { "time": 1.7333, "x": -69.06 } + ] + }, + "torso": { + "rotate": [ + { + "time": 1.0667, + "value": 27.02, + "curve": [ 1.187, 26.86, 1.291, 7.81 ] + }, + { + "time": 1.3333, + "value": -2.62, + "curve": [ 1.402, -19.72, 1.429, -48.64 ] + }, + { + "time": 1.4667, + "value": -56.31, + "curve": [ 1.509, -64.87, 1.62, -77.14 ] + }, + { + "time": 1.7333, + "value": -77.34, + "curve": [ 1.837, -76.89, 1.895, -71.32 ] + }, + { + "time": 2, + "value": -57.52, + "curve": [ 2.104, -43.83, 2.189, -28.59 ] + }, + { + "time": 2.3, + "value": -29.03, + "curve": [ 2.413, -29.48, 2.513, -36.79 ] + }, + { + "time": 2.6667, + "value": -36.79, + "curve": [ 2.814, -36.95, 2.947, -22.88 ] + }, + { "time": 3.1667, "value": -22.88 } + ] + }, + "neck": { + "rotate": [ + { + "time": 1.0667, + "value": -3.57, + "curve": [ 1.146, -3.66, 1.15, -13.5 ] + }, + { + "time": 1.2333, + "value": -13.5, + "curve": [ 1.428, -13.5, 1.443, 11.58 ] + }, + { + "time": 1.5667, + "value": 11.42, + "curve": [ 1.658, 11.3, 1.775, 3.78 ] + }, + { + "time": 1.8667, + "value": 3.78, + "curve": [ 1.92, 3.78, 2.036, 8.01 ] + }, + { + "time": 2.1, + "value": 7.93, + "curve": [ 2.266, 7.72, 2.42, 3.86 ] + }, + { + "time": 2.5333, + "value": 3.86, + "curve": [ 2.783, 3.86, 3.004, 3.78 ] + }, + { "time": 3.1667, "value": 3.78 } + ] + }, + "head": { + "rotate": [ + { + "time": 1.0667, + "value": 16.4, + "curve": [ 1.133, 9.9, 1.207, 1.87 ] + }, + { + "time": 1.3333, + "value": 1.67, + "curve": [ 1.46, 1.56, 1.547, 47.54 ] + }, + { + "time": 1.7333, + "value": 47.55, + "curve": [ 1.897, 47.56, 2.042, 5.68 ] + }, + { + "time": 2.0667, + "value": 0.86, + "curve": [ 2.074, -0.61, 2.086, -2.81 ] + }, + { + "time": 2.1, + "value": -5.31, + "curve": [ 2.145, -13.07, 2.216, -23.65 ] + }, + { + "time": 2.2667, + "value": -23.71, + "curve": [ 2.334, -23.79, 2.426, -13.43 ] + }, + { + "time": 2.4667, + "value": -9.18, + "curve": [ 2.498, -5.91, 2.604, 2.53 ] + }, + { + "time": 2.6667, + "value": 2.52, + "curve": [ 2.738, 2.24, 2.85, -8.76 ] + }, + { + "time": 2.9333, + "value": -8.67, + "curve": [ 3.036, -8.55, 3.09, -7.09 ] + }, + { "time": 3.1667, "value": -6.75 } + ], + "scale": [ + { + "time": 1.3333, + "curve": [ 1.392, 1, 1.526, 1, 1.392, 1, 1.508, 1.043 ] + }, + { + "time": 1.5667, + "x": 0.992, + "y": 1.043, + "curve": [ 1.598, 0.985, 1.676, 0.955, 1.584, 1.043, 1.672, 1.04 ] + }, + { + "time": 1.7333, + "x": 0.954, + "y": 1.029, + "curve": [ 1.843, 0.954, 1.933, 1, 1.825, 1.013, 1.933, 1 ] + }, + { "time": 2 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "time": 0.9, + "value": 39.24, + "curve": [ 0.968, 39.93, 1.267, 85.31 ] + }, + { + "time": 1.4667, + "value": 112.27, + "curve": [ 1.555, 124.24, 1.576, 126.44 ] + }, + { + "time": 1.6333, + "value": 126.44, + "curve": [ 1.782, 126.44, 1.992, 94.55 ] + }, + { + "time": 2.1, + "value": 79.96, + "curve": [ 2.216, 64.26, 2.407, 34.36 ] + }, + { + "time": 2.5667, + "value": 33.38, + "curve": [ 2.815, 31.87, 3.1, 39.2 ] + }, + { "time": 3.1667, "value": 39.2 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "time": 1.0667, + "value": 56.07, + "curve": [ 1.138, 59.21, 1.192, 59.65 ] + }, + { + "time": 1.2333, + "value": 59.46, + "curve": [ 1.295, 59.17, 1.45, 22.54 ] + }, + { "time": 1.4667, "value": -0.84 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "time": 1.0667, + "value": 118.03, + "curve": [ 1.075, 93.64, 1.358, -34.03 ] + }, + { + "time": 1.6667, + "value": -33.94, + "curve": [ 1.808, -33.89, 1.879, -25 ] + }, + { + "time": 1.9667, + "value": -25.19, + "curve": [ 2.09, -25.46, 2.312, -34.58 ] + }, + { + "time": 2.3667, + "value": -38.36, + "curve": [ 2.465, -45.18, 2.557, -60.1 ] + }, + { + "time": 2.8333, + "value": -61.1, + "curve": [ 2.843, -61.06, 3.16, -60.87 ] + }, + { "time": 3.1667, "value": -60.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "time": 1.0667, + "value": 0.66, + "curve": [ 1.108, 0.66, 1.221, 44.95 ] + }, + { + "time": 1.2333, + "value": 49.25, + "curve": [ 1.263, 59.42, 1.342, 68.06 ] + }, + { + "time": 1.3667, + "value": 68.34, + "curve": [ 1.409, 68.8, 1.476, 4.9 ] + }, + { + "time": 1.5, + "value": -2.05, + "curve": [ 1.529, -10.3, 1.695, -15.95 ] + }, + { + "time": 1.7333, + "value": -17.38, + "curve": [ 1.807, -20.1, 1.878, -21.19 ] + }, + { + "time": 1.9333, + "value": -21.08, + "curve": [ 2.073, -20.8, 2.146, -7.63 ] + }, + { + "time": 2.1667, + "value": -3.64, + "curve": [ 2.186, 0.12, 2.275, 15.28 ] + }, + { + "time": 2.3333, + "value": 21.78, + "curve": [ 2.392, 28.31, 2.575, 37.66 ] + }, + { + "time": 2.7, + "value": 39.43, + "curve": [ 2.947, 42.93, 3.02, 42.46 ] + }, + { "time": 3.1667, "value": 42.46 } + ] + }, + "front-thigh": { + "translate": [ + { "time": 1.1, "x": -6.41, "y": 18.23, "curve": "stepped" }, + { "time": 1.1333, "x": -6.41, "y": 18.23 }, + { "time": 1.2, "x": 1.61, "y": 3.66 }, + { "time": 1.2333, "x": 4.5, "y": -3.15 }, + { "time": 1.3667, "x": -3.79, "y": 2.94 }, + { "time": 1.4, "x": -8.37, "y": 8.72 }, + { "time": 1.4333, "x": -11.26, "y": 16.99 }, + { "time": 1.4667, "x": -9.89, "y": 24.73, "curve": "stepped" }, + { "time": 1.8667, "x": -9.89, "y": 24.73 }, + { "time": 2.1 } + ] + }, + "front-foot-tip": { + "rotate": [ + { "time": 1.0667, "value": 42.55, "curve": "stepped" }, + { "time": 1.1333, "value": 42.55 }, + { "time": 1.2333, "value": 17.71 }, + { "time": 1.3667, "value": 3.63 }, + { "time": 1.4333 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "time": 1.0667, + "value": 108.71, + "curve": [ 1.082, 108.29, 1.437, 50.73 ] + }, + { + "time": 1.5667, + "value": 24.87, + "curve": [ 1.62, 14.2, 1.66, -11.74 ] + }, + { + "time": 1.7333, + "value": -11.74, + "curve": [ 1.961, -11.73, 2.172, 1.66 ] + }, + { + "time": 2.2667, + "value": 7.88, + "curve": [ 2.331, 12.13, 2.439, 18.65 ] + }, + { + "time": 2.5333, + "value": 18.72, + "curve": [ 2.788, 18.91, 3.145, -0.3 ] + }, + { "time": 3.1667 } + ] + }, + "front-fist": { + "rotate": [ + { + "time": 1.1, + "value": 6.32, + "curve": [ 1.11, 3.31, 1.153, -5.07 ] + }, + { + "time": 1.2333, + "value": -5.13, + "curve": [ 1.311, -5.19, 1.364, 34.65 ] + }, + { + "time": 1.4667, + "value": 34.53, + "curve": [ 1.574, 34.41, 1.547, -55.78 ] + }, + { + "time": 1.8667, + "value": -54.7, + "curve": [ 1.947, -54.7, 2.03, -53.94 ] + }, + { + "time": 2.1333, + "value": -42.44, + "curve": [ 2.215, -33.42, 2.358, -4.43 ] + }, + { + "time": 2.4, + "value": 0.03, + "curve": [ 2.444, 4.66, 2.536, 8.2 ] + }, + { + "time": 2.6333, + "value": 8.2, + "curve": [ 2.733, 8.19, 2.804, -0.67 ] + }, + { + "time": 2.9, + "value": -0.82, + "curve": [ 3.127, -1.16, 3.093, 0 ] + }, + { "time": 3.1667 } + ] + }, + "gun": { + "rotate": [ + { + "time": 1.2667, + "curve": [ 1.35, 0, 1.549, 7.49 ] + }, + { + "time": 1.6, + "value": 9.5, + "curve": [ 1.663, 12.02, 1.846, 19.58 ] + }, + { + "time": 1.9333, + "value": 19.43, + "curve": [ 1.985, 19.4, 2.057, 2.98 ] + }, + { + "time": 2.2, + "value": 2.95, + "curve": [ 2.304, 3.55, 2.458, 10.8 ] + }, + { + "time": 2.5, + "value": 10.8, + "curve": [ 2.642, 10.8, 2.873, -2.54 ] + }, + { + "time": 2.9333, + "value": -2.55, + "curve": [ 3.09, -2.57, 3.08, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair2": { + "rotate": [ + { + "time": 1.0667, + "value": 26.19, + "curve": [ 1.158, 26.19, 1.368, 26 ] + }, + { + "time": 1.4333, + "value": 24.43, + "curve": [ 1.534, 22.03, 2, -29.14 ] + }, + { + "time": 2.2, + "value": -29.14, + "curve": [ 2.292, -29.14, 2.475, 6.71 ] + }, + { + "time": 2.5667, + "value": 6.71, + "curve": [ 2.675, 6.71, 2.814, -5.06 ] + }, + { + "time": 2.9, + "value": -5.06, + "curve": [ 2.973, -5.06, 3.123, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair4": { + "rotate": [ + { + "time": 1.0667, + "value": 5.21, + "curve": [ 1.108, 5.21, 1.192, 26.19 ] + }, + { + "time": 1.2333, + "value": 26.19, + "curve": [ 1.317, 26.19, 1.483, 10.63 ] + }, + { + "time": 1.5667, + "value": 10.63, + "curve": [ 1.627, 10.63, 1.642, 17.91 ] + }, + { + "time": 1.7, + "value": 17.94, + "curve": [ 1.761, 17.97, 1.774, 8.22 ] + }, + { + "time": 1.8, + "value": 3.33, + "curve": [ 1.839, -4.21, 1.95, -22.67 ] + }, + { + "time": 2, + "value": -22.67, + "curve": [ 2.025, -22.67, 2.123, -21.86 ] + }, + { + "time": 2.1667, + "value": -18.71, + "curve": [ 2.228, -14.31, 2.294, -0.3 ] + }, + { + "time": 2.3667, + "value": 6.36, + "curve": [ 2.433, 12.45, 2.494, 19.21 ] + }, + { + "time": 2.6, + "value": 19.21, + "curve": [ 2.729, 19.21, 2.854, 6.75 ] + }, + { + "time": 2.9333, + "value": 4.62, + "curve": [ 3.09, 0.45, 3.062, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair3": { + "rotate": [ + { + "time": 1.4333, + "curve": [ 1.45, 0, 1.452, 11.29 ] + }, + { + "time": 1.5, + "value": 11.21, + "curve": [ 1.596, 11.06, 1.573, -14.17 ] + }, + { + "time": 1.7333, + "value": -20.4, + "curve": [ 1.851, -24.98, 1.943, -28.45 ] + }, + { + "time": 2.2, + "value": -28.75, + "curve": [ 2.317, -28.75, 2.55, 7.04 ] + }, + { + "time": 2.6667, + "value": 7.04, + "curve": [ 2.792, 7.04, 2.885, -5.19 ] + }, + { + "time": 2.9667, + "value": -5.19, + "curve": [ 3.037, -5.19, 3.096, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair1": { + "rotate": [ + { + "time": 1.2333, + "curve": [ 1.283, 0, 1.349, 3.99 ] + }, + { + "time": 1.4333, + "value": 6.58, + "curve": [ 1.497, 8.54, 1.683, 9.35 ] + }, + { + "time": 1.7667, + "value": 9.35, + "curve": [ 1.825, 9.35, 1.945, -8.71 ] + }, + { + "time": 2, + "value": -11.15, + "curve": [ 2.058, -13.71, 2.2, -14.97 ] + }, + { + "time": 2.2667, + "value": -14.97, + "curve": [ 2.367, -14.97, 2.567, 18.77 ] + }, + { + "time": 2.6667, + "value": 18.77, + "curve": [ 2.733, 18.77, 2.817, 8.29 ] + }, + { + "time": 2.8667, + "value": 6.51, + "curve": [ 2.988, 2.17, 3.058, 0 ] + }, + { "time": 3.1667 } + ] + }, + "flare1": { + "rotate": [ + { "time": 1.1, "value": 8.2 } + ], + "translate": [ + { "time": 1.1, "x": -19.97, "y": 149.68 }, + { "time": 1.2, "x": 3.85, "y": 152.43 }, + { "time": 1.2333, "x": -15.42, "y": 152.29 } + ], + "scale": [ + { + "time": 1.1, + "x": 0.805, + "y": 0.805, + "curve": [ 1.119, 0.763, 1.16, 1.162, 1.117, 0.805, 1.15, 0.605 ] + }, + { + "time": 1.1667, + "x": 1.279, + "y": 0.605, + "curve": [ 1.177, 1.47, 1.192, 2.151, 1.175, 0.605, 1.192, 0.911 ] + }, + { + "time": 1.2, + "x": 2.151, + "y": 0.911, + "curve": [ 1.208, 2.151, 1.231, 1.668, 1.208, 0.911, 1.227, 0.844 ] + }, + { + "time": 1.2333, + "x": 1.608, + "y": 0.805, + "curve": [ 1.249, 1.205, 1.283, 0.547, 1.254, 0.685, 1.283, 0.416 ] + }, + { "time": 1.3, "x": 0.547, "y": 0.416 } + ], + "shear": [ + { "time": 1.1, "y": 4.63 }, + { "time": 1.2333, "x": -5.74, "y": 4.63 } + ] + }, + "flare2": { + "rotate": [ + { "time": 1.1, "value": 12.29 } + ], + "translate": [ + { "time": 1.1, "x": -8.63, "y": 132.96 }, + { "time": 1.2, "x": 4.35, "y": 132.93 } + ], + "scale": [ + { "time": 1.1, "x": 0.864, "y": 0.864 }, + { "time": 1.1667, "x": 0.945, "y": 0.945 }, + { "time": 1.2, "x": 1.511, "y": 1.081 } + ], + "shear": [ + { "time": 1.1, "y": 24.03 } + ] + }, + "flare3": { + "rotate": [ + { "time": 1.1667, "value": 2.88 } + ], + "translate": [ + { "time": 1.1667, "x": 3.24, "y": 114.81 } + ], + "scale": [ + { "time": 1.1667, "x": 0.668, "y": 0.668 } + ], + "shear": [ + { "time": 1.1667, "y": 38.59 } + ] + }, + "flare4": { + "rotate": [ + { "time": 1.1667, "value": -8.64 } + ], + "translate": [ + { "time": 1.1667, "x": -3.82, "y": 194.06 }, + { "time": 1.2667, "x": -1.82, "y": 198.47, "curve": "stepped" }, + { "time": 1.3, "x": -1.94, "y": 187.81 } + ], + "scale": [ + { "time": 1.1667, "x": 0.545, "y": 0.545 }, + { "time": 1.2667, "x": 0.757, "y": 0.757 } + ], + "shear": [ + { "time": 1.1667, "x": 7.42, "y": -22.04 } + ] + }, + "flare5": { + "translate": [ + { "time": 1.2, "x": -11.17, "y": 176.42 }, + { "time": 1.2333, "x": -8.56, "y": 179.04, "curve": "stepped" }, + { "time": 1.3, "x": -14.57, "y": 168.69 } + ], + "scale": [ + { "time": 1.2333, "x": 1.146 }, + { "time": 1.3, "x": 0.703, "y": 0.61 } + ], + "shear": [ + { "time": 1.2, "x": 6.9 } + ] + }, + "flare6": { + "rotate": [ + { "time": 1.2333, "value": -5.36 }, + { "time": 1.2667, "value": -0.54 } + ], + "translate": [ + { "time": 1.2333, "x": 14.52, "y": 204.67 }, + { "time": 1.2667, "x": 19.16, "y": 212.9, "curve": "stepped" }, + { "time": 1.3, "x": 9.23, "y": 202.85 } + ], + "scale": [ + { "time": 1.2333, "x": 0.777, "y": 0.49 }, + { "time": 1.2667, "x": 0.777, "y": 0.657 }, + { "time": 1.3, "x": 0.475, "y": 0.401 } + ] + }, + "flare7": { + "rotate": [ + { "time": 1.1, "value": 5.98 }, + { "time": 1.1333, "value": 32.82 } + ], + "translate": [ + { "time": 1.1, "x": -6.34, "y": 112.98 }, + { "time": 1.1333, "x": 2.66, "y": 111.6 } + ], + "scale": [ + { "time": 1.1, "x": 0.588, "y": 0.588 } + ], + "shear": [ + { "time": 1.1333, "x": -19.93 } + ] + }, + "flare8": { + "rotate": [ + { "time": 1.2333, "value": -6.85 } + ], + "translate": [ + { "time": 1.1667, "x": 66.67, "y": 125.52, "curve": "stepped" }, + { "time": 1.2, "x": 58.24, "y": 113.53, "curve": "stepped" }, + { "time": 1.2333, "x": 40.15, "y": 114.69 } + ], + "scale": [ + { "time": 1.1667, "x": 1.313, "y": 1.203 }, + { "time": 1.2333, "x": 1.038, "y": 0.95 } + ], + "shear": [ + { "time": 1.2, "y": -13.01 } + ] + }, + "flare9": { + "rotate": [ + { "time": 1.1667, "value": 2.9 } + ], + "translate": [ + { "time": 1.1667, "x": 28.45, "y": 151.35, "curve": "stepped" }, + { "time": 1.2, "x": 48.8, "y": 191.09, "curve": "stepped" }, + { "time": 1.2333, "x": 52, "y": 182.52, "curve": "stepped" }, + { "time": 1.2667, "x": 77.01, "y": 195.96 } + ], + "scale": [ + { "time": 1.1667, "x": 0.871, "y": 1.073 }, + { "time": 1.2, "x": 0.927, "y": 0.944 }, + { "time": 1.2333, "x": 1.165, "y": 1.336 } + ], + "shear": [ + { "time": 1.1667, "x": 7.95, "y": 25.48 } + ] + }, + "flare10": { + "rotate": [ + { "time": 1.1667, "value": 2.18 } + ], + "translate": [ + { "time": 1.1667, "x": 55.64, "y": 137.64, "curve": "stepped" }, + { "time": 1.2, "x": 90.49, "y": 151.07, "curve": "stepped" }, + { "time": 1.2333, "x": 114.06, "y": 153.05, "curve": "stepped" }, + { "time": 1.2667, "x": 90.44, "y": 164.61 } + ], + "scale": [ + { "time": 1.1667, "x": 2.657, "y": 0.891 }, + { "time": 1.2, "x": 3.314, "y": 1.425 }, + { "time": 1.2333, "x": 2.871, "y": 0.924 }, + { "time": 1.2667, "x": 2.317, "y": 0.775 } + ], + "shear": [ + { "time": 1.1667, "x": -1.35 } + ] + }, + "torso2": { + "rotate": [ + { + "time": 1, + "curve": [ 1.117, 0, 1.255, 24.94 ] + }, + { + "time": 1.4, + "value": 24.94, + "curve": [ 1.477, 24.94, 1.59, -17.62 ] + }, + { + "time": 1.6333, + "value": -19.48, + "curve": [ 1.717, -23.1, 1.784, -26.12 ] + }, + { + "time": 1.9333, + "value": -26.14, + "curve": [ 2.067, -26.15, 2.158, 4.3 ] + }, + { + "time": 2.3, + "value": 4.22, + "curve": [ 2.45, 4.13, 2.579, -1.76 ] + }, + { + "time": 2.7333, + "value": -1.8, + "curve": [ 2.816, -1.82, 2.857, -2.94 ] + }, + { + "time": 2.9333, + "value": -2.99, + "curve": [ 3.056, -3.08, 3.09, 0 ] + }, + { "time": 3.1667 } + ] + }, + "torso3": { + "rotate": [ + { + "time": 1.3, + "curve": [ 1.352, 0, 1.408, 6.47 ] + }, + { + "time": 1.4667, + "value": 6.43, + "curve": [ 1.55, 6.39, 1.723, -5.05 ] + }, + { + "time": 1.7333, + "value": -5.53, + "curve": [ 1.782, -7.72, 1.843, -16.94 ] + }, + { + "time": 1.9667, + "value": -16.86, + "curve": [ 2.111, -16.78, 2.259, -3.97 ] + }, + { + "time": 2.4, + "value": -2.43, + "curve": [ 2.525, -1.12, 2.639, -0.5 ] + }, + { + "time": 2.7333, + "value": -0.49, + "curve": [ 2.931, -0.47, 2.999, -2.15 ] + }, + { "time": 3.1667, "value": -2.15 } + ] + }, + "head-control": { + "translate": [ + { + "time": 1.2333, + "curve": [ 1.25, 0, 1.474, 6.89, 1.25, 0, 1.496, 0.98 ] + }, + { + "time": 1.6667, + "x": 11.99, + "y": -6.42, + "curve": [ 1.743, 14.01, 1.86, 14.33, 1.785, -11.55, 1.86, -27.1 ] + }, + { + "time": 1.9667, + "x": 13.91, + "y": -26.88, + "curve": [ 2.074, 13.49, 2.244, 8.13, 2.074, -26.65, 2.215, -21.78 ] + }, + { + "time": 2.3, + "x": 6.07, + "y": -16.64, + "curve": [ 2.416, 1.84, 2.497, -1.41, 2.417, -9.57, 2.526, -1.72 ] + }, + { + "time": 2.5667, + "x": -3.78, + "y": -1.71, + "curve": [ 2.661, -6.98, 2.76, -8.76, 2.692, -1.68, 2.821, -15.75 ] + }, + { + "time": 2.9, + "x": -8.32, + "y": -16.7, + "curve": [ 2.962, -8.12, 3.082, -0.04, 2.958, -17.39, 3.089, 0 ] + }, + { "time": 3.1667 } + ] + }, + "front-shoulder": { + "translate": [ + { + "time": 1.3333, + "curve": [ 1.488, 0, 1.717, 0.21, 1.488, 0, 1.688, -30.29 ] + }, + { + "time": 1.9, + "x": 0.83, + "y": -30.29, + "curve": [ 2.078, 1.43, 2.274, 2.88, 2.071, -30.29, 2.289, 4.48 ] + }, + { + "time": 2.4333, + "x": 2.89, + "y": 4.59, + "curve": [ 2.604, 2.89, 2.677, -0.68, 2.57, 4.7, 2.694, -2.43 ] + }, + { + "time": 2.7667, + "x": -0.67, + "y": -2.47, + "curve": [ 2.866, -0.67, 2.986, -0.07, 2.882, -2.47, 3.036, -0.06 ] + }, + { "time": 3.1667 } + ] + } + }, + "ik": { + "rear-leg-ik": [ + { "time": 3.1667, "softness": 10, "bendPositive": false } + ] + } + }, + "run": { + "slots": { + "mouth": { + "attachment": [ + { "name": "mouth-grind" } + ] + } + }, + "bones": { + "front-thigh": { + "translate": [ + { + "x": -5.14, + "y": 11.13, + "curve": [ 0.033, -7.77, 0.112, -9.03, 0.034, 11.13, 0.108, 9.74 ] + }, + { + "time": 0.1667, + "x": -9.03, + "y": 7.99, + "curve": [ 0.23, -9.05, 0.314, -1.34, 0.236, 5.93, 0.28, 3.22 ] + }, + { + "time": 0.3333, + "x": 0.41, + "y": 3.19, + "curve": [ 0.352, 2.09, 0.449, 11.16, 0.384, 3.16, 0.449, 4.98 ] + }, + { + "time": 0.5, + "x": 11.17, + "y": 6.76, + "curve": [ 0.571, 10.79, 0.621, -1.83, 0.542, 8.21, 0.625, 11.13 ] + }, + { "time": 0.6667, "x": -5.14, "y": 11.13 } + ] + }, + "torso": { + "rotate": [ + { + "value": -37.66, + "curve": [ 0.034, -37.14, 0.107, -36.21 ] + }, + { + "time": 0.1333, + "value": -36.21, + "curve": [ 0.158, -36.21, 0.209, -38.8 ] + }, + { + "time": 0.2333, + "value": -38.79, + "curve": [ 0.259, -38.78, 0.313, -38.03 ] + }, + { + "time": 0.3333, + "value": -37.66, + "curve": [ 0.357, -37.21, 0.4, -36.21 ] + }, + { + "time": 0.4333, + "value": -36.21, + "curve": [ 0.458, -36.21, 0.539, -38.8 ] + }, + { + "time": 0.5667, + "value": -38.8, + "curve": [ 0.592, -38.8, 0.645, -38 ] + }, + { "time": 0.6667, "value": -37.66 } + ] + }, + "rear-thigh": { + "translate": [ + { + "x": -16.41, + "y": 1.55, + "curve": [ 0.013, -15.67, 0.183, -8.55, 0.03, 2.39, 0.183, 6.17 ] + }, + { + "time": 0.2333, + "x": -8.55, + "y": 6.17, + "curve": [ 0.308, -8.55, 0.492, -19.75, 0.308, 6.17, 0.492, 0.61 ] + }, + { + "time": 0.5667, + "x": -19.75, + "y": 0.61, + "curve": [ 0.592, -19.75, 0.641, -18.06, 0.592, 0.61, 0.632, 0.78 ] + }, + { "time": 0.6667, "x": -16.41, "y": 1.55 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -39.03, + "curve": [ 0.051, -0.1, 0.145, 88.36 ] + }, + { + "time": 0.2333, + "value": 88.36, + "curve": [ 0.28, 88.76, 0.324, 59.52 ] + }, + { + "time": 0.3333, + "value": 51.13, + "curve": [ 0.358, 30.2, 0.445, -74.91 ] + }, + { + "time": 0.5667, + "value": -75.82, + "curve": [ 0.599, -76.06, 0.642, -55.72 ] + }, + { "time": 0.6667, "value": -39.03 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 20.54, + "curve": [ 0.052, 11.42, 0.089, 0.13 ] + }, + { + "time": 0.1333, + "value": 0.15, + "curve": [ 0.186, 0.17, 0.221, 26.29 ] + }, + { + "time": 0.2333, + "value": 32.37, + "curve": [ 0.247, 39.19, 0.286, 61.45 ] + }, + { + "time": 0.3333, + "value": 61.58, + "curve": [ 0.371, 61.69, 0.42, 55.79 ] + }, + { "time": 0.4667, "value": 49.68 }, + { "time": 0.6667, "value": 20.54 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -36.16, + "curve": [ 0.014, -38.8, 0.036, -43.27 ] + }, + { + "time": 0.0667, + "value": -43.37, + "curve": [ 0.102, -43.49, 0.182, -28.46 ] + }, + { + "time": 0.2, + "value": -23.04, + "curve": [ 0.23, -13.87, 0.264, 3.86 ] + }, + { + "time": 0.3333, + "value": 3.7, + "curve": [ 0.38, 3.64, 0.535, -16.22 ] + }, + { "time": 0.5667, "value": -21.29 }, + { "time": 0.6667, "value": -36.16 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 40.5, + "curve": [ 0.028, 23.74, 0.128, -79.86 ] + }, + { + "time": 0.2333, + "value": -79.87, + "curve": [ 0.38, -79.88, 0.403, 63.25 ] + }, + { + "time": 0.5667, + "value": 64.13, + "curve": [ 0.607, 64.35, 0.644, 53.1 ] + }, + { "time": 0.6667, "value": 40.5 } + ], + "translate": [ + { + "x": -3.79, + "y": -0.77, + "curve": [ 0.044, -4.58, 0.169, -5.48, 0.044, 0.93, 0.169, 2.85 ] + }, + { + "time": 0.2333, + "x": -5.48, + "y": 2.85, + "curve": [ 0.346, -5.48, 0.475, -2.68, 0.346, 2.85, 0.475, -3.13 ] + }, + { + "time": 0.5667, + "x": -2.68, + "y": -3.13, + "curve": [ 0.611, -2.68, 0.642, -3.34, 0.611, -3.13, 0.642, -1.73 ] + }, + { "time": 0.6667, "x": -3.79, "y": -0.77 } + ] + }, + "rear-bracer": { + "rotate": [ + { "value": 28.28 }, + { + "time": 0.2333, + "value": -11.12, + "curve": [ 0.252, -14.12, 0.297, -19.37 ] + }, + { + "time": 0.3333, + "value": -19.38, + "curve": [ 0.435, -19.41, 0.522, 38.96 ] + }, + { + "time": 0.5667, + "value": 38.87, + "curve": [ 0.619, 38.76, 0.644, 32.01 ] + }, + { "time": 0.6667, "value": 28.28 } + ] + }, + "neck": { + "rotate": [ + { + "value": 11.88, + "curve": [ 0.024, 11.4, 0.075, 9.74 ] + }, + { + "time": 0.1, + "value": 9.74, + "curve": [ 0.125, 9.74, 0.208, 13.36 ] + }, + { + "time": 0.2333, + "value": 13.36, + "curve": [ 0.258, 13.36, 0.321, 12.2 ] + }, + { + "time": 0.3333, + "value": 11.88, + "curve": [ 0.365, 11.06, 0.408, 9.72 ] + }, + { + "time": 0.4333, + "value": 9.72, + "curve": [ 0.458, 9.72, 0.542, 13.36 ] + }, + { + "time": 0.5667, + "value": 13.36, + "curve": [ 0.592, 13.36, 0.636, 12.48 ] + }, + { "time": 0.6667, "value": 11.88 } + ] + }, + "head": { + "rotate": [ + { + "value": 13.14, + "curve": [ 0.02, 11.99, 0.039, 8.94 ] + }, + { + "time": 0.0667, + "value": 8.93, + "curve": [ 0.122, 8.9, 0.232, 15.8 ] + }, + { + "time": 0.2667, + "value": 15.81, + "curve": [ 0.325, 15.82, 0.357, 8.95 ] + }, + { + "time": 0.4, + "value": 8.93, + "curve": [ 0.444, 8.91, 0.568, 15.8 ] + }, + { + "time": 0.6, + "value": 15.77, + "curve": [ 0.632, 15.74, 0.649, 14.05 ] + }, + { "time": 0.6667, "value": 13.14 } + ], + "scale": [ + { + "curve": [ 0.014, 0.996, 0.068, 0.991, 0.027, 1.005, 0.083, 1.012 ] + }, + { + "time": 0.1, + "x": 0.991, + "y": 1.012, + "curve": [ 0.128, 0.991, 0.205, 1.018, 0.128, 1.012, 0.197, 0.988 ] + }, + { + "time": 0.2333, + "x": 1.018, + "y": 0.988, + "curve": [ 0.272, 1.018, 0.305, 1.008, 0.262, 0.988, 0.311, 0.995 ] + }, + { + "time": 0.3333, + "curve": [ 0.351, 0.995, 0.417, 0.987, 0.359, 1.006, 0.417, 1.013 ] + }, + { + "time": 0.4333, + "x": 0.987, + "y": 1.013, + "curve": [ 0.467, 0.987, 0.533, 1.02, 0.467, 1.013, 0.533, 0.989 ] + }, + { + "time": 0.5667, + "x": 1.02, + "y": 0.989, + "curve": [ 0.592, 1.02, 0.652, 1.004, 0.592, 0.989, 0.644, 0.996 ] + }, + { "time": 0.6667 } + ] + }, + "gun": { + "rotate": [ + { + "value": 12.36, + "curve": [ 0.022, 16.28, 0.087, 20.25 ] + }, + { + "time": 0.1333, + "value": 20.19, + "curve": [ 0.168, 20.32, 0.254, -8.82 ] + }, + { + "time": 0.2667, + "value": -11.88, + "curve": [ 0.291, -17.91, 0.344, -24.11 ] + }, + { + "time": 0.4, + "value": -23.88, + "curve": [ 0.448, -23.69, 0.533, -15.47 ] + }, + { "time": 0.5667, "value": -8.69 }, + { "time": 0.6667, "value": 12.36 } + ] + }, + "hip": { + "rotate": [ + { "value": -8.24 } + ], + "translate": [ + { + "x": -3.6, + "y": -34.1, + "curve": [ 0.042, -3.84, 0.118, 7.62, 0.042, -33.74, 0.112, 20.55 ] + }, + { + "time": 0.1667, + "x": 7.61, + "y": 20.36, + "curve": [ 0.194, 7.6, 0.21, 5.06, 0.204, 20.65, 0.217, -8.69 ] + }, + { + "time": 0.2333, + "x": 1.68, + "y": -18.48, + "curve": [ 0.279, -4.99, 0.297, -5.64, 0.254, -31.08, 0.292, -34.55 ] + }, + { + "time": 0.3333, + "x": -5.76, + "y": -35, + "curve": [ 0.379, -5.9, 0.451, 6.8, 0.384, -35.56, 0.428, 17.6 ] + }, + { + "time": 0.5, + "x": 6.61, + "y": 17.01, + "curve": [ 0.536, 6.47, 0.545, 3.56, 0.533, 16.75, 0.548, -8.71 ] + }, + { + "time": 0.5667, + "x": 0.35, + "y": -18.81, + "curve": [ 0.597, -4.07, 0.642, -3.45, 0.584, -28.58, 0.642, -34.32 ] + }, + { "time": 0.6667, "x": -3.6, "y": -34.1 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "value": -62.54, + "curve": [ 0.015, -74.19, 0.056, -103.19 ] + }, + { + "time": 0.0667, + "value": -111.08, + "curve": [ 0.092, -129.44, 0.189, -146.55 ] + }, + { + "time": 0.2333, + "value": -146.32, + "curve": [ 0.285, -146.06, 0.32, -125.1 ] + }, + { "time": 0.3333, "value": -117.24 }, + { + "time": 0.5, + "value": -35.07, + "curve": [ 0.522, -28.64, 0.546, -24.84 ] + }, + { + "time": 0.5667, + "value": -24.9, + "curve": [ 0.595, -25, 0.623, -40.82 ] + }, + { "time": 0.6667, "value": -62.54 } + ], + "translate": [ + { "x": 16.34, "y": 0.18 }, + { + "time": 0.0667, + "x": -101.43, + "y": 8.04, + "curve": [ 0.085, -131.35, 0.129, -207.69, 0.08, 14.9, 0.124, 113.28 ] + }, + { + "time": 0.1667, + "x": -207.92, + "y": 145.81, + "curve": [ 0.196, -208.13, 0.21, -202.91, 0.186, 160.26, 0.206, 163.48 ] + }, + { + "time": 0.2333, + "x": -189.94, + "y": 163.85, + "curve": [ 0.27, -169.94, 0.31, -126.19, 0.269, 164.35, 0.316, 85.97 ] + }, + { + "time": 0.3333, + "x": -90.56, + "y": 78.57, + "curve": [ 0.355, -57.99, 0.376, -29.14, 0.35, 71.55, 0.376, 66.4 ] + }, + { + "time": 0.4, + "x": 2.87, + "y": 66.38, + "curve": [ 0.412, 19.24, 0.469, 90.73, 0.429, 66.37, 0.469, 70.66 ] + }, + { + "time": 0.5, + "x": 117.18, + "y": 70.46, + "curve": [ 0.522, 136.24, 0.542, 151.33, 0.539, 70.2, 0.555, 38.25 ] + }, + { + "time": 0.5667, + "x": 151.49, + "y": 25.29, + "curve": [ 0.578, 146.76, 0.586, 133.13, 0.572, 19.7, 0.582, 12.23 ] + }, + { "time": 0.6, "x": 115.02, "y": 0.1 }, + { "time": 0.6667, "x": 16.34, "y": 0.18 } + ] + }, + "front-leg-target": { + "translate": [ + { "x": -13.95, "y": -30.34 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "value": 18.55 }, + { + "time": 0.2333, + "value": 167.84, + "curve": [ 0.246, 153.66, 0.256, 129.74 ] + }, + { + "time": 0.2667, + "value": 124.32, + "curve": [ 0.296, 124.43, 0.313, 129.93 ] + }, + { + "time": 0.3667, + "value": 129.87, + "curve": [ 0.421, 128.32, 0.519, 0.98 ] + }, + { + "time": 0.5667, + "curve": [ 0.6, 0.27, 0.642, 4.73 ] + }, + { "time": 0.6667, "value": 18.55 } + ], + "translate": [ + { + "x": -176.39, + "y": 134.12, + "curve": [ 0.018, -142.26, 0.054, -94.41, 0.01, 120.96, 0.044, 84.08 ] + }, + { + "time": 0.0667, + "x": -73.56, + "y": 76.68, + "curve": [ 0.086, -42.82, 0.194, 101.2, 0.098, 66.73, 0.198, 60.88 ] + }, + { "time": 0.2333, "x": 98.32, "y": 32.17 }, + { "time": 0.2667, "x": 49.13, "y": -0.63 }, + { + "time": 0.4, + "x": -147.9, + "y": 0.32, + "curve": [ 0.414, -168.78, 0.478, -284.76, 0.43, 30.09, 0.478, 129.14 ] + }, + { + "time": 0.5, + "x": -283.37, + "y": 167.12, + "curve": [ 0.526, -285.66, 0.548, -280.54, 0.516, 194.84, 0.55, 216.53 ] + }, + { + "time": 0.5667, + "x": -266.98, + "y": 216.12, + "curve": [ 0.581, -256.27, 0.643, -206.54, 0.61, 214.82, 0.65, 145.33 ] + }, + { "time": 0.6667, "x": -176.39, "y": 134.12 } + ] + }, + "rear-leg-target": { + "translate": [ + { "x": 85, "y": -33.59 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "value": -147.04, + "curve": [ 0.033, -113.4, 0.161, 44.34 ] + }, + { + "time": 0.2333, + "value": 43.48, + "curve": [ 0.24, 43.41, 0.282, 35.72 ] + }, + { + "time": 0.3, + "value": 0.29, + "curve": [ 0.347, 0.28, 0.396, 4.27 ] + }, + { + "time": 0.4, + "curve": [ 0.424, -23.8, 0.525, -181.39 ] + }, + { + "time": 0.5667, + "value": -181.39, + "curve": [ 0.592, -181.39, 0.642, -169.09 ] + }, + { "time": 0.6667, "value": -147.04 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": -0.25, + "curve": [ 0.008, -0.25, 0.056, 1.73 ] + }, + { + "time": 0.0667, + "value": -7.68, + "curve": [ 0.075, -43.13, 0.15, -130.44 ] + }, + { + "time": 0.2, + "value": -130.08, + "curve": [ 0.239, -129.79, 0.272, -126.8 ] + }, + { + "time": 0.3, + "value": -116.24, + "curve": [ 0.333, -103.91, 0.348, -86.1 ] + }, + { + "time": 0.3667, + "value": -71.08, + "curve": [ 0.386, -55.25, 0.415, -32.44 ] + }, + { + "time": 0.4333, + "value": -21.63, + "curve": [ 0.47, -0.01, 0.542, 33.42 ] + }, + { + "time": 0.5667, + "value": 33.2, + "curve": [ 0.622, 32.7, 0.569, 0.64 ] + }, + { "time": 0.6667, "value": -0.25 } + ] + }, + "hair1": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.087, -6.81, 0.143, -5.75 ] + }, + { + "time": 0.1667, + "value": -4.3, + "curve": [ 0.183, -3.28, 0.209, 2.79 ] + }, + { + "time": 0.2333, + "value": 2.78, + "curve": [ 0.262, 2.77, 0.305, -6.63 ] + }, + { + "time": 0.3333, + "value": -6.64, + "curve": [ 0.419, -6.68, 0.49, -4.84 ] + }, + { + "time": 0.5, + "value": -4.38, + "curve": [ 0.518, -3.56, 0.574, 2.32 ] + }, + { + "time": 0.6, + "value": 2.33, + "curve": [ 0.643, 2.35, 0.633, -6.81 ] + }, + { "time": 0.6667, "value": -6.81 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.014, -3.17, 0.109, 43.93 ] + }, + { + "time": 0.1333, + "value": 43.95, + "curve": [ 0.177, 43.97, 0.192, -13.76 ] + }, + { + "time": 0.2667, + "value": -13.83, + "curve": [ 0.302, -13.72, 0.322, -8.86 ] + }, + { + "time": 0.3333, + "value": -6.6, + "curve": [ 0.349, -3.5, 0.436, 41.1 ] + }, + { + "time": 0.4667, + "value": 41.05, + "curve": [ 0.51, 40.99, 0.549, -14.06 ] + }, + { + "time": 0.6, + "value": -14.18, + "curve": [ 0.63, -14.26, 0.656, -9.04 ] + }, + { "time": 0.6667, "value": -6.81 } + ] + }, + "hair3": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.079, -6.83, 0.108, 0.3 ] + }, + { + "time": 0.1333, + "value": 1.96, + "curve": [ 0.177, 4.89, 0.208, 6.28 ] + }, + { + "time": 0.2333, + "value": 6.29, + "curve": [ 0.313, 6.31, 0.383, 3.49 ] + }, + { + "time": 0.4, + "value": 2.58, + "curve": [ 0.442, 0.28, 0.523, -6.81 ] + }, + { "time": 0.6, "value": -6.81 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.011, -4.06, 0.108, 24.92 ] + }, + { + "time": 0.1333, + "value": 24.92, + "curve": [ 0.158, 24.92, 0.208, -10.62 ] + }, + { + "time": 0.2333, + "value": -10.62, + "curve": [ 0.254, -10.62, 0.312, -9.73 ] + }, + { + "time": 0.3333, + "value": -6.4, + "curve": [ 0.356, -2.95, 0.438, 24.93 ] + }, + { + "time": 0.4667, + "value": 24.93, + "curve": [ 0.492, 24.93, 0.575, -9.78 ] + }, + { + "time": 0.6, + "value": -9.78, + "curve": [ 0.617, -9.78, 0.655, -8.63 ] + }, + { "time": 0.6667, "value": -6.81 } + ] + }, + "torso2": { + "rotate": [ + { + "value": 3.5, + "curve": [ 0.07, 3.51, 0.075, 8.69 ] + }, + { + "time": 0.1, + "value": 8.69, + "curve": [ 0.139, 8.69, 0.214, 6.9 ] + }, + { + "time": 0.2333, + "value": 6.33, + "curve": [ 0.266, 5.34, 0.285, 3.48 ] + }, + { + "time": 0.3333, + "value": 3.48, + "curve": [ 0.398, 3.48, 0.408, 8.68 ] + }, + { + "time": 0.4333, + "value": 8.68, + "curve": [ 0.458, 8.68, 0.551, 6.8 ] + }, + { + "time": 0.5667, + "value": 6.26, + "curve": [ 0.598, 5.17, 0.642, 3.49 ] + }, + { "time": 0.6667, "value": 3.5 } + ] + }, + "torso3": { + "rotate": [ + { + "value": 4.52, + "curve": [ 0.067, 4.54, 0.075, -7.27 ] + }, + { + "time": 0.1, + "value": -7.27, + "curve": [ 0.125, -7.27, 0.227, 0.84 ] + }, + { + "time": 0.2333, + "value": 1.24, + "curve": [ 0.254, 2.5, 0.301, 4.51 ] + }, + { + "time": 0.3333, + "value": 4.52, + "curve": [ 0.386, 4.54, 0.408, -7.35 ] + }, + { + "time": 0.4333, + "value": -7.35, + "curve": [ 0.458, -7.35, 0.549, -0.14 ] + }, + { + "time": 0.5667, + "value": 0.95, + "curve": [ 0.586, 2.18, 0.632, 4.54 ] + }, + { "time": 0.6667, "value": 4.52 } + ] + }, + "aim-constraint-target": { + "rotate": [ + { "value": 30.57 } + ] + }, + "rear-foot": { + "rotate": [ + { "value": -6.5 } + ] + }, + "front-foot": { + "rotate": [ + { "value": 4.5 } + ] + }, + "head-control": { + "translate": [ + { + "y": -9.94, + "curve": [ 0.058, 0, 0.175, -15.32, 0.044, -4.19, 0.175, 5 ] + }, + { + "time": 0.2333, + "x": -15.32, + "y": 5, + "curve": [ 0.317, -15.32, 0.429, -9.74, 0.317, 5, 0.382, -31.71 ] + }, + { + "time": 0.4667, + "x": -7.81, + "y": -31.59, + "curve": [ 0.507, -5.76, 0.617, 0, 0.549, -31.47, 0.628, -13.33 ] + }, + { "time": 0.6667, "y": -9.94 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": -0.74, + "y": 11.22, + "curve": [ 0.061, -0.74, 0.144, 1.17, 0.061, 11.22, 0.143, -17.93 ] + }, + { + "time": 0.2333, + "x": 1.19, + "y": -17.9, + "curve": [ 0.54, 1.25, 0.558, -0.74, 0.545, -17.8, 0.558, 11.22 ] + }, + { "time": 0.6667, "x": -0.74, "y": 11.22 } + ] + }, + "back-shoulder": { + "translate": [ + { + "curve": [ 0.083, 0, 0.25, 0, 0.083, 0, 0.25, 8.93 ] + }, + { + "time": 0.3333, + "y": 8.93, + "curve": [ 0.417, 0, 0.583, 0, 0.417, 8.93, 0.583, 0 ] + }, + { "time": 0.6667 } + ] + } + }, + "ik": { + "front-leg-ik": [ + { "softness": 10, "bendPositive": false }, + { "time": 0.5667, "softness": 14.8, "bendPositive": false }, + { "time": 0.6, "softness": 48.2, "bendPositive": false }, + { "time": 0.6667, "softness": 10, "bendPositive": false } + ], + "rear-leg-ik": [ + { "bendPositive": false }, + { "time": 0.1667, "softness": 22.5, "bendPositive": false }, + { "time": 0.3, "softness": 61.4, "bendPositive": false }, + { "time": 0.6667, "bendPositive": false } + ] + }, + "events": [ + { "time": 0.2333, "name": "footstep" }, + { "time": 0.5667, "name": "footstep" } + ] + }, + "run-to-idle": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-foot-target": { + "translate": [ + { + "x": -16.5, + "y": 3.41, + "curve": [ 0.033, -16.5, 0.1, -69.06, 0.033, 3.41, 0.1, 0 ] + }, + { "time": 0.1333, "x": -69.06 } + ] + }, + "hip": { + "translate": [ + { + "x": -28.78, + "y": -72.96, + "curve": [ 0.036, -28.63, 0.2, -10.85, 0.135, -62.35, 0.2, -23.15 ] + }, + { "time": 0.2667, "x": -11.97, "y": -23.15 } + ] + }, + "rear-foot-target": { + "translate": [ + { + "x": 33.15, + "y": 31.61, + "curve": [ 0.017, 33.15, 0.05, 24.41, 0.017, 31.61, 0.041, 20.73 ] + }, + { + "time": 0.0667, + "x": 24.41, + "y": 0.19, + "curve": [ 0.117, 24.41, 0.217, 48.87, 0.117, 0.19, 0.217, 0 ] + }, + { "time": 0.2667, "x": 48.87 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -80.61, + "curve": [ 0.067, -80.61, 0.2, -60.87 ] + }, + { "time": 0.2667, "value": -60.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 8.79, + "curve": [ 0.041, 8.79, 0.115, 6.3 ] + }, + { + "time": 0.1667, + "value": 6.41, + "curve": [ 0.201, 6.48, 0.241, 42.46 ] + }, + { "time": 0.2667, "value": 42.46 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 55.3, + "curve": [ 0.067, 55.3, 0.2, 39.2 ] + }, + { "time": 0.2667, "value": 39.2 } + ] + }, + "head": { + "rotate": [ + { + "curve": [ 0.05, 0, 0.083, 2.67 ] + }, + { + "time": 0.1333, + "value": 2.67, + "curve": [ 0.15, 2.67, 0.25, -6.75 ] + }, + { "time": 0.2667, "value": -6.75 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": 38.26, + "curve": [ 0.041, 38.26, 0.127, -2.19 ] + }, + { + "time": 0.1667, + "value": -3, + "curve": [ 0.209, -3.84, 0.241, 0 ] + }, + { "time": 0.2667 } + ], + "scale": [ + { + "x": 0.844, + "curve": [ 0.067, 0.844, 0.2, 1, 0.067, 1, 0.2, 1 ] + }, + { "time": 0.2667 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 57.24, + "curve": [ 0.067, 57.24, 0.2, 0 ] + }, + { "time": 0.2667 } + ] + }, + "gun": { + "rotate": [ + { + "value": 2.28, + "curve": [ 0.041, 2.28, 0.105, 15.34 ] + }, + { + "time": 0.1667, + "value": 15.32, + "curve": [ 0.205, 15.31, 0.241, 0 ] + }, + { "time": 0.2667 } + ] + }, + "torso": { + "rotate": [ + { + "value": -12.98, + "curve": [ 0.033, -12.98, 0.103, -14.81 ] + }, + { + "time": 0.1333, + "value": -16.63, + "curve": [ 0.168, -18.69, 0.233, -22.88 ] + }, + { "time": 0.2667, "value": -22.88 } + ], + "scale": [ + { + "x": 0.963, + "y": 1.074, + "curve": [ 0.067, 0.963, 0.132, 1, 0.067, 1.074, 0.132, 1 ] + }, + { "time": 0.2667 } + ] + }, + "neck": { + "rotate": [ + {}, + { "time": 0.2667, "value": 3.78 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 0.88 ] + }, + { + "time": 0.1333, + "value": 0.88, + "curve": [ 0.167, 0.88, 0.233, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair4": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 15.97 ] + }, + { + "time": 0.1333, + "value": 15.97, + "curve": [ 0.167, 15.97, 0.233, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 10.76 ] + }, + { + "time": 0.1333, + "value": 10.76, + "curve": [ 0.167, 10.76, 0.233, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair2": { + "rotate": [ + { + "curve": [ 0.014, -2.28, 0.042, -7.84 ] + }, + { + "time": 0.0667, + "value": -7.82, + "curve": [ 0.108, -7.79, 0.166, 6.57 ] + }, + { + "time": 0.2, + "value": 6.67, + "curve": [ 0.222, 6.73, 0.255, 1.98 ] + }, + { "time": 0.2667 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.041, 0, 0.107, 3.03 ] + }, + { + "time": 0.1667, + "value": 3.03, + "curve": [ 0.205, 3.03, 0.241, 0 ] + }, + { "time": 0.2667 } + ] + }, + "torso3": { + "rotate": [ + { + "curve": [ 0.049, 0, 0.166, 0.66 ] + }, + { + "time": 0.2, + "value": 0.66, + "curve": [ 0.232, 0.65, 0.249, -2.15 ] + }, + { "time": 0.2667, "value": -2.15 } + ] + }, + "head-control": { + "translate": [ + { "x": -10.12, "y": 8.71 }, + { "time": 0.2667 } + ] + }, + "front-shoulder": { + "translate": [ + { "x": 4.91, "y": 11.54 }, + { "time": 0.2667 } + ] + } + } + }, + "shoot": { + "slots": { + "muzzle": { + "rgba": [ + { "time": 0.1333, "color": "ffffffff" }, + { "time": 0.2, "color": "ffffff62" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle01" }, + { "time": 0.0667, "name": "muzzle02" }, + { "time": 0.1, "name": "muzzle03" }, + { "time": 0.1333, "name": "muzzle04" }, + { "time": 0.1667, "name": "muzzle05" }, + { "time": 0.2 } + ] + }, + "muzzle-glow": { + "rgba": [ + { "color": "ff0c0c00" }, + { + "time": 0.0333, + "color": "ffc9adff", + "curve": [ 0.255, 1, 0.273, 1, 0.255, 0.76, 0.273, 0.4, 0.255, 0.65, 0.273, 0.22, 0.255, 1, 0.273, 1 ] + }, + { "time": 0.3, "color": "ff400cff" }, + { "time": 0.6333, "color": "ff0c0c00" } + ], + "attachment": [ + { "name": "muzzle-glow" } + ] + }, + "muzzle-ring": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.202, 0.85, 0.214, 0.84, 0.202, 0.73, 0.214, 0.73, 0.202, 1, 0.214, 1, 0.202, 1, 0.214, 0.21 ] + }, + { "time": 0.2333, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2333 } + ] + }, + "muzzle-ring2": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.174, 0.85, 0.184, 0.84, 0.174, 0.73, 0.184, 0.73, 0.174, 1, 0.184, 1, 0.174, 1, 0.184, 0.21 ] + }, + { "time": 0.2, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2 } + ] + }, + "muzzle-ring3": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.174, 0.85, 0.184, 0.84, 0.174, 0.73, 0.184, 0.73, 0.174, 1, 0.184, 1, 0.174, 1, 0.184, 0.21 ] + }, + { "time": 0.2, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2 } + ] + }, + "muzzle-ring4": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.174, 0.85, 0.184, 0.84, 0.174, 0.73, 0.184, 0.73, 0.174, 1, 0.184, 1, 0.174, 1, 0.184, 0.21 ] + }, + { "time": 0.2, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2 } + ] + } + }, + "bones": { + "gun": { + "rotate": [ + { + "time": 0.0667, + "curve": [ 0.094, 25.89, 0.112, 45.27 ] + }, + { + "time": 0.1333, + "value": 45.35, + "curve": [ 0.192, 45.28, 0.18, -0.09 ] + }, + { "time": 0.6333 } + ] + }, + "muzzle": { + "translate": [ + { "x": -11.02, "y": 25.16 } + ] + }, + "rear-upper-arm": { + "translate": [ + { + "time": 0.0333, + "curve": [ 0.045, 0.91, 0.083, 3.46, 0.044, 0.86, 0.083, 3.32 ] + }, + { + "time": 0.1, + "x": 3.46, + "y": 3.32, + "curve": [ 0.133, 3.46, 0.176, -0.1, 0.133, 3.32, 0.169, 0 ] + }, + { "time": 0.2333 } + ] + }, + "rear-bracer": { + "translate": [ + { + "time": 0.0333, + "curve": [ 0.075, -3.78, 0.083, -4.36, 0.08, -2.7, 0.083, -2.88 ] + }, + { + "time": 0.1, + "x": -4.36, + "y": -2.88, + "curve": [ 0.133, -4.36, 0.168, 0.18, 0.133, -2.88, 0.167, 0 ] + }, + { "time": 0.2333 } + ] + }, + "gun-tip": { + "translate": [ + {}, + { "time": 0.3, "x": 3.15, "y": 0.39 } + ], + "scale": [ + { "x": 0.366, "y": 0.366 }, + { "time": 0.0333, "x": 1.453, "y": 1.453 }, + { "time": 0.3, "x": 0.366, "y": 0.366 } + ] + }, + "muzzle-ring": { + "translate": [ + { "time": 0.0333 }, + { "time": 0.2333, "x": 64.47 } + ], + "scale": [ + { "time": 0.0333 }, + { "time": 0.2333, "x": 5.951, "y": 5.951 } + ] + }, + "muzzle-ring2": { + "translate": [ + { "time": 0.0333 }, + { "time": 0.2, "x": 172.57 } + ], + "scale": [ + { "time": 0.0333 }, + { "time": 0.2, "x": 4, "y": 4 } + ] + }, + "muzzle-ring3": { + "translate": [ + { "time": 0.0333 }, + { "time": 0.2, "x": 277.17 } + ], + "scale": [ + { "time": 0.0333 }, + { "time": 0.2, "x": 2, "y": 2 } + ] + }, + "muzzle-ring4": { + "translate": [ + { "time": 0.0333 }, + { "time": 0.2, "x": 392.06 } + ] + } + } + }, + "walk": { + "bones": { + "rear-foot-target": { + "rotate": [ + { + "value": -32.82, + "curve": [ 0.035, -42.69, 0.057, -70.49 ] + }, + { + "time": 0.1, + "value": -70.59, + "curve": [ 0.236, -70.78, 0.335, -9.87 ] + }, + { + "time": 0.3667, + "value": -1.56, + "curve": [ 0.393, 5.5, 0.477, 13.96 ] + }, + { + "time": 0.5, + "value": 13.96, + "curve": [ 0.519, 13.96, 0.508, 0.13 ] + }, + { "time": 0.5667, "value": -0.28 }, + { + "time": 0.7333, + "value": -0.28, + "curve": [ 0.827, -0.06, 0.958, -21.07 ] + }, + { "time": 1, "value": -32.82 } + ], + "translate": [ + { + "x": -167.32, + "y": 0.58, + "curve": [ 0.022, -180.55, 0.075, -235.51, 0.045, 0.58, 0.075, 30.12 ] + }, + { + "time": 0.1, + "x": -235.51, + "y": 39.92, + "curve": [ 0.142, -235.51, 0.208, -201.73, 0.138, 54.94, 0.18, 60.78 ] + }, + { + "time": 0.2333, + "x": -176.33, + "y": 61.48, + "curve": [ 0.272, -136.61, 0.321, -45.18, 0.275, 62.02, 0.321, 56.6 ] + }, + { + "time": 0.3667, + "x": 8.44, + "y": 49.67, + "curve": [ 0.403, 51.03, 0.486, 66.86, 0.401, 44.37, 0.48, 23.11 ] + }, + { "time": 0.5, "x": 66.57, "y": 14.22 }, + { "time": 0.5333, "x": 52.58, "y": 0.6 }, + { "time": 1, "x": -167.32, "y": 0.58 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "value": 18.19, + "curve": [ 0.01, 11.17, 0.043, 1.37 ] + }, + { "time": 0.1, "value": 0.47 }, + { + "time": 0.2333, + "value": 0.55, + "curve": [ 0.364, 0.3, 0.515, -80.48 ] + }, + { + "time": 0.7333, + "value": -80.78, + "curve": [ 0.788, -80.38, 0.921, 17.42 ] + }, + { "time": 1, "value": 18.19 } + ], + "translate": [ + { + "x": 139.21, + "y": 22.94, + "curve": [ 0.025, 139.21, 0.069, 111.46, 0.031, 3.25, 0.075, 0.06 ] + }, + { "time": 0.1, "x": 96.69, "y": 0.06 }, + { + "time": 0.5, + "x": -94.87, + "y": -0.03, + "curve": [ 0.518, -106.82, 0.575, -152.56, 0.534, 5.42, 0.557, 38.46 ] + }, + { + "time": 0.6, + "x": -152.56, + "y": 57.05, + "curve": [ 0.633, -152.56, 0.688, -128.05, 0.643, 75.61, 0.7, 84.14 ] + }, + { + "time": 0.7333, + "x": -109.42, + "y": 84.14, + "curve": [ 0.771, -93.91, 0.832, -30.64, 0.787, 84.14, 0.799, 89.65 ] + }, + { + "time": 0.8667, + "x": 17, + "y": 75.25, + "curve": [ 0.903, 66.18, 0.967, 139.21, 0.932, 61.53, 0.967, 44.02 ] + }, + { "time": 1, "x": 139.21, "y": 22.94 } + ] + }, + "hip": { + "rotate": [ + { "value": -4.35 } + ], + "translate": [ + { + "x": -2.86, + "y": -13.86, + "curve": [ 0.025, -2.84, 0.067, -2.82, 0.028, -19.14, 0.054, -24.02 ] + }, + { + "time": 0.1, + "x": -2.61, + "y": -24.19, + "curve": [ 0.143, -2.34, 0.202, -1.79, 0.152, -23.98, 0.213, -14.81 ] + }, + { + "time": 0.2667, + "x": -1.21, + "y": -7.12, + "curve": [ 0.308, -0.86, 0.345, -0.51, 0.306, -1.63, 0.341, 3.15 ] + }, + { + "time": 0.3667, + "x": -0.33, + "y": 3.15, + "curve": [ 0.41, 0.02, 0.458, 0.26, 0.427, 3.3, 0.481, -6.75 ] + }, + { + "time": 0.5, + "x": 0.26, + "y": -10.59, + "curve": [ 0.553, 0.26, 0.559, 0.2, 0.519, -14.41, 0.548, -23.88 ] + }, + { + "time": 0.6, + "x": -0.17, + "y": -23.71, + "curve": [ 0.663, -0.72, 0.798, -2.09, 0.702, -23.36, 0.802, 3.53 ] + }, + { + "time": 0.8667, + "x": -2.46, + "y": 3.48, + "curve": [ 0.901, -2.63, 0.967, -2.87, 0.913, 3.45, 0.967, -7.64 ] + }, + { "time": 1, "x": -2.86, "y": -13.86 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": 28.96, + "curve": [ 0.056, 28.74, 0.049, 19.6 ] + }, + { "time": 0.0667, "value": 1.68 }, + { + "time": 0.5, + "value": -10, + "curve": [ 0.525, -10, 0.592, -54.69 ] + }, + { + "time": 0.6, + "value": -59.66, + "curve": [ 0.623, -74.54, 0.674, -101.78 ] + }, + { + "time": 0.7333, + "value": -101.78, + "curve": [ 0.812, -101.78, 0.855, -84.67 ] + }, + { + "time": 0.8667, + "value": -63.53, + "curve": [ 0.869, -58.38, 0.975, 28.96 ] + }, + { "time": 1, "value": 28.96 } + ] + }, + "torso": { + "rotate": [ + { + "value": -20.72, + "curve": [ 0.025, -20.57, 0.071, -20.04 ] + }, + { + "time": 0.1333, + "value": -20.04, + "curve": [ 0.187, -20.04, 0.285, -21.16 ] + }, + { + "time": 0.3667, + "value": -21.16, + "curve": [ 0.405, -21.16, 0.47, -20.9 ] + }, + { + "time": 0.5, + "value": -20.71, + "curve": [ 0.518, -20.6, 0.582, -20.03 ] + }, + { + "time": 0.6333, + "value": -20.04, + "curve": [ 0.709, -20.05, 0.815, -21.18 ] + }, + { + "time": 0.8667, + "value": -21.18, + "curve": [ 0.908, -21.18, 0.971, -20.93 ] + }, + { "time": 1, "value": -20.72 } + ] + }, + "neck": { + "rotate": [ + { + "value": 17.78, + "curve": [ 0.025, 17.93, 0.071, 18.46 ] + }, + { + "time": 0.1333, + "value": 18.46, + "curve": [ 0.187, 18.46, 0.285, 17.34 ] + }, + { + "time": 0.3667, + "value": 17.34, + "curve": [ 0.405, 17.34, 0.47, 17.6 ] + }, + { + "time": 0.5, + "value": 17.79, + "curve": [ 0.518, 17.9, 0.582, 18.47 ] + }, + { + "time": 0.6333, + "value": 18.46, + "curve": [ 0.709, 18.45, 0.815, 17.32 ] + }, + { + "time": 0.8667, + "value": 17.32, + "curve": [ 0.908, 17.32, 0.971, 17.57 ] + }, + { "time": 1, "value": 17.78 } + ] + }, + "head": { + "rotate": [ + { + "value": -12.23, + "curve": [ 0.061, -12.23, 0.191, -7.45 ] + }, + { + "time": 0.2667, + "value": -7.43, + "curve": [ 0.341, -7.42, 0.421, -12.23 ] + }, + { + "time": 0.5, + "value": -12.23, + "curve": [ 0.567, -12.26, 0.694, -7.46 ] + }, + { + "time": 0.7667, + "value": -7.47, + "curve": [ 0.853, -7.49, 0.943, -12.23 ] + }, + { "time": 1, "value": -12.23 } + ], + "scale": [ + { + "curve": [ 0.039, 1, 0.084, 0.991, 0.039, 1, 0.084, 1.019 ] + }, + { + "time": 0.1333, + "x": 0.991, + "y": 1.019, + "curve": [ 0.205, 0.991, 0.318, 1.019, 0.205, 1.019, 0.337, 0.992 ] + }, + { + "time": 0.4, + "x": 1.019, + "y": 0.992, + "curve": [ 0.456, 1.019, 0.494, 1.001, 0.483, 0.991, 0.493, 0.999 ] + }, + { + "time": 0.5, + "curve": [ 0.508, 0.998, 0.584, 0.991, 0.51, 1.002, 0.584, 1.019 ] + }, + { + "time": 0.6333, + "x": 0.991, + "y": 1.019, + "curve": [ 0.705, 0.991, 0.818, 1.019, 0.705, 1.019, 0.837, 0.992 ] + }, + { + "time": 0.9, + "x": 1.019, + "y": 0.992, + "curve": [ 0.956, 1.019, 0.955, 1, 0.983, 0.991, 0.955, 1 ] + }, + { "time": 1 } + ] + }, + "back-foot-tip": { + "rotate": [ + { "value": 4.09 }, + { "time": 0.0333, "value": 3.05 }, + { + "time": 0.1, + "value": -59.01, + "curve": [ 0.124, -72.97, 0.169, -100.05 ] + }, + { + "time": 0.2333, + "value": -99.71, + "curve": [ 0.326, -99.21, 0.349, -37.4 ] + }, + { + "time": 0.3667, + "value": -17.85, + "curve": [ 0.388, 4.74, 0.451, 32.35 ] + }, + { + "time": 0.5, + "value": 32.4, + "curve": [ 0.537, 32.44, 0.566, 6.43 ] + }, + { "time": 0.5667, "value": 2 }, + { "time": 1, "value": 4.09 } + ] + }, + "front-thigh": { + "translate": [ + { + "x": 17.15, + "y": -0.09, + "curve": [ 0.178, 17.14, 0.295, -4.26, 0.009, -0.09, 0.475, 0.02 ] + }, + { + "time": 0.5, + "x": -4.26, + "y": 0.02, + "curve": [ 0.705, -4.27, 0.848, 17.15, 0.525, 0.02, 0.975, -0.09 ] + }, + { "time": 1, "x": 17.15, "y": -0.09 } + ] + }, + "rear-thigh": { + "translate": [ + { + "x": -17.71, + "y": -4.63, + "curve": [ 0.036, -19.81, 0.043, -20.86, 0.036, -4.63, 0.05, -7.03 ] + }, + { + "time": 0.1, + "x": -20.95, + "y": -7.06, + "curve": [ 0.162, -21.05, 0.4, 7.79, 0.2, -7.13, 0.4, -1.9 ] + }, + { + "time": 0.5, + "x": 7.79, + "y": -1.94, + "curve": [ 0.612, 7.69, 0.875, -10.49, 0.592, -1.97, 0.917, -3.25 ] + }, + { "time": 1, "x": -17.71, "y": -4.63 } + ] + }, + "torso2": { + "rotate": [ + { + "value": 1, + "curve": [ 0.006, 1.2, 0.084, 2.88 ] + }, + { + "time": 0.1333, + "value": 2.88, + "curve": [ 0.205, 2.88, 0.284, -1.17 ] + }, + { + "time": 0.3667, + "value": -1.17, + "curve": [ 0.411, -1.17, 0.481, 0.57 ] + }, + { + "time": 0.5, + "value": 1, + "curve": [ 0.515, 1.33, 0.59, 2.83 ] + }, + { + "time": 0.6333, + "value": 2.85, + "curve": [ 0.683, 2.86, 0.796, -1.2 ] + }, + { + "time": 0.8667, + "value": -1.2, + "curve": [ 0.916, -1.2, 0.984, 0.62 ] + }, + { "time": 1, "value": 1 } + ] + }, + "torso3": { + "rotate": [ + { "value": -1.81 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -9.51, + "curve": [ 0.021, -13.32, 0.058, -19.4 ] + }, + { + "time": 0.1, + "value": -19.4, + "curve": [ 0.238, -19.69, 0.337, 7.78 ] + }, + { + "time": 0.3667, + "value": 16.2, + "curve": [ 0.399, 25.42, 0.497, 60.19 ] + }, + { + "time": 0.6, + "value": 60.26, + "curve": [ 0.719, 60.13, 0.845, 27.61 ] + }, + { + "time": 0.8667, + "value": 22.45, + "curve": [ 0.892, 16.38, 0.979, -3.27 ] + }, + { "time": 1, "value": -9.51 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 13.57, + "curve": [ 0.022, 9.71, 0.147, -3.78 ] + }, + { + "time": 0.3667, + "value": -3.69, + "curve": [ 0.457, -3.66, 0.479, 0.83 ] + }, + { + "time": 0.5, + "value": 4.05, + "curve": [ 0.513, 6.08, 0.635, 30.8 ] + }, + { + "time": 0.8, + "value": 30.92, + "curve": [ 0.974, 31, 0.98, 18.35 ] + }, + { "time": 1, "value": 13.57 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -28.72, + "curve": [ 0.024, -31.74, 0.176, -43.4 ] + }, + { + "time": 0.3667, + "value": -43.6, + "curve": [ 0.403, -43.65, 0.47, -40.15 ] + }, + { + "time": 0.5, + "value": -35.63, + "curve": [ 0.547, -28.59, 0.624, -4.57 ] + }, + { + "time": 0.7333, + "value": -4.59, + "curve": [ 0.891, -4.62, 0.954, -24.28 ] + }, + { "time": 1, "value": -28.48 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 28.28, + "curve": [ 0.034, 30.94, 0.068, 32.05 ] + }, + { + "time": 0.1, + "value": 31.88, + "curve": [ 0.194, 31.01, 0.336, -0.11 ] + }, + { + "time": 0.3667, + "value": -7.11, + "curve": [ 0.421, -19.73, 0.53, -46.21 ] + }, + { + "time": 0.6, + "value": -45.75, + "curve": [ 0.708, -45.03, 0.844, -13.56 ] + }, + { + "time": 0.8667, + "value": -6.48, + "curve": [ 0.909, 6.59, 0.958, 24.21 ] + }, + { "time": 1, "value": 28.28 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -2.79, + "curve": [ 0.074, -2.84, 0.121, 25.08 ] + }, + { + "time": 0.2333, + "value": 24.99, + "curve": [ 0.35, 24.89, 0.427, -2.86 ] + }, + { + "time": 0.5, + "value": -2.8, + "curve": [ 0.575, -2.73, 0.652, 24.5 ] + }, + { + "time": 0.7333, + "value": 24.55, + "curve": [ 0.828, 24.6, 0.932, -2.69 ] + }, + { "time": 1, "value": -2.79 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -6.01, + "curve": [ 0.106, -5.97, 0.151, 18.62 ] + }, + { + "time": 0.2333, + "value": 18.72, + "curve": [ 0.336, 18.7, 0.405, -11.37 ] + }, + { + "time": 0.5, + "value": -11.45, + "curve": [ 0.626, -11.46, 0.629, 18.94 ] + }, + { + "time": 0.7333, + "value": 18.92, + "curve": [ 0.833, 18.92, 0.913, -6.06 ] + }, + { "time": 1, "value": -6.01 } + ], + "translate": [ + { "x": 0.03, "y": 1.35 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 10.06, + "curve": [ 0.044, 11.16, 0.063, 11.49 ] + }, + { + "time": 0.1, + "value": 11.49, + "curve": [ 0.215, 11.49, 0.336, 2.92 ] + }, + { + "time": 0.3667, + "value": 0.84, + "curve": [ 0.416, -2.52, 0.498, -10.84 ] + }, + { + "time": 0.6, + "value": -10.83, + "curve": [ 0.762, -10.71, 0.845, -3.05 ] + }, + { + "time": 0.8667, + "value": -1.34, + "curve": [ 0.917, 2.54, 0.977, 8.81 ] + }, + { "time": 1, "value": 10.06 } + ] + }, + "gun": { + "rotate": [ + { + "value": -14.67, + "curve": [ 0.086, -14.67, 0.202, 8.31 ] + }, + { + "time": 0.2333, + "value": 12.14, + "curve": [ 0.279, 17.71, 0.391, 25.79 ] + }, + { + "time": 0.5, + "value": 25.77, + "curve": [ 0.631, 25.74, 0.694, 4.53 ] + }, + { + "time": 0.7333, + "value": -0.65, + "curve": [ 0.768, -5.21, 0.902, -14.4 ] + }, + { "time": 1, "value": -14.67 } + ] + }, + "front-leg-target": { + "translate": [ + { + "x": -2.83, + "y": -8.48, + "curve": [ 0.008, -2.83, 0.058, 0.09, 0.001, 4.97, 0.058, 6.68 ] + }, + { + "time": 0.0667, + "x": 0.09, + "y": 6.68, + "curve": [ 0.3, 0.09, 0.767, -2.83, 0.3, 6.68, 0.767, -8.48 ] + }, + { "time": 1, "x": -2.83, "y": -8.48 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.028, 1.24, 0.016, 3.46 ] + }, + { + "time": 0.1, + "value": 3.45, + "curve": [ 0.159, 3.45, 0.189, 0.23 ] + }, + { + "time": 0.2333, + "value": -2.29, + "curve": [ 0.265, -4.32, 0.305, -5.92 ] + }, + { + "time": 0.3667, + "value": -5.94, + "curve": [ 0.446, -5.96, 0.52, 3.41 ] + }, + { + "time": 0.6, + "value": 3.42, + "curve": [ 0.717, 3.42, 0.772, -5.93 ] + }, + { + "time": 0.8667, + "value": -5.97, + "curve": [ 0.933, -5.99, 0.982, -0.94 ] + }, + { "time": 1 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0.067, 0, 0.159, -10.48 ] + }, + { + "time": 0.2333, + "value": -10.49, + "curve": [ 0.334, -10.5, 0.439, -0.09 ] + }, + { + "time": 0.5, + "value": -0.09, + "curve": [ 0.569, -0.09, 0.658, -10.75 ] + }, + { + "time": 0.7333, + "value": -10.7, + "curve": [ 0.833, -10.63, 0.947, 0 ] + }, + { "time": 1 } + ] + }, + "gun-tip": { + "rotate": [ + { "time": 0.2333, "value": 0.11 } + ] + }, + "muzzle-ring": { + "rotate": [ + { "time": 0.2333, "value": 0.11 } + ] + }, + "muzzle-ring2": { + "rotate": [ + { "time": 0.2667, "value": 0.11 } + ] + }, + "muzzle-ring3": { + "rotate": [ + { "time": 0.2667, "value": 0.11 } + ] + }, + "muzzle-ring4": { + "rotate": [ + { "time": 0.2667, "value": 0.11 } + ] + }, + "back-shoulder": { + "translate": [ + { + "x": -0.18, + "y": -4.49, + "curve": [ 0.133, -0.18, 0.333, 7.69, 0.133, -4.49, 0.333, 2.77 ] + }, + { + "time": 0.4667, + "x": 7.69, + "y": 2.77, + "curve": [ 0.6, 7.69, 0.858, -0.18, 0.6, 2.77, 0.858, -4.49 ] + }, + { "time": 1, "x": -0.18, "y": -4.49 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": 1.46, + "y": 9.37, + "curve": [ 0.162, 1.41, 0.333, -1.66, 0.162, 9.37, 0.301, -7.23 ] + }, + { + "time": 0.5, + "x": -1.6, + "y": -7.27, + "curve": [ 0.735, -1.5, 0.847, 1.46, 0.723, -7.31, 0.838, 9.32 ] + }, + { "time": 1, "x": 1.46, "y": 9.37 } + ] + }, + "head-control": { + "translate": [ + { + "x": -6.46, + "y": -8.4, + "curve": [ 0.053, -5.31, 0.167, -3.64, 0.093, -8.4, 0.196, -3.81 ] + }, + { + "time": 0.2333, + "x": -3.64, + "y": -1.32, + "curve": [ 0.309, -3.64, 0.436, -5.84, 0.275, 1.43, 0.38, 10.3 ] + }, + { + "time": 0.5, + "x": -7.03, + "y": 10.29, + "curve": [ 0.538, -7.75, 0.66, -10.54, 0.598, 10.27, 0.694, 1.56 ] + }, + { + "time": 0.7333, + "x": -10.54, + "y": -1.26, + "curve": [ 0.797, -10.54, 0.933, -7.91, 0.768, -3.79, 0.875, -8.4 ] + }, + { "time": 1, "x": -6.46, "y": -8.4 } + ] + } + }, + "ik": { + "front-leg-ik": [ + { + "softness": 25.7, + "bendPositive": false, + "curve": [ 0.008, 1, 0.025, 1, 0.008, 25.7, 0.025, 9.9 ] + }, + { + "time": 0.0333, + "softness": 9.9, + "bendPositive": false, + "curve": [ 0.15, 1, 0.383, 1, 0.15, 9.9, 0.383, 43.2 ] + }, + { + "time": 0.5, + "softness": 43.2, + "bendPositive": false, + "curve": [ 0.625, 1, 0.875, 1, 0.625, 43.2, 0.846, 45.57 ] + }, + { "time": 1, "softness": 25.7, "bendPositive": false } + ], + "rear-leg-ik": [ + { "softness": 5, "bendPositive": false }, + { "time": 0.4333, "softness": 4.9, "bendPositive": false }, + { "time": 0.5, "softness": 28.81, "bendPositive": false }, + { "time": 0.6, "softness": 43.8, "bendPositive": false }, + { "time": 1, "softness": 5, "bendPositive": false } + ] + }, + "events": [ + { "name": "footstep" }, + { "time": 0.5, "name": "footstep" } + ] + } +} +} \ No newline at end of file diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy-pro.skel b/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy-pro.skel new file mode 100644 index 000000000..199839b49 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy-pro.skel differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy.atlas b/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy.atlas new file mode 100644 index 000000000..b07ccc3bf --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy.atlas @@ -0,0 +1,101 @@ +spineboy.png + size: 1024, 256 + filter: Linear, Linear + scale: 0.5 +crosshair + bounds: 813, 160, 45, 45 +eye-indifferent + bounds: 569, 2, 47, 45 +eye-surprised + bounds: 643, 7, 47, 45 + rotate: 90 +front-bracer + bounds: 811, 51, 29, 40 +front-fist-closed + bounds: 807, 93, 38, 41 +front-fist-open + bounds: 815, 210, 43, 44 +front-foot + bounds: 706, 64, 63, 35 + rotate: 90 +front-shin + bounds: 80, 11, 41, 92 +front-thigh + bounds: 754, 12, 23, 56 +front-upper-arm + bounds: 618, 5, 23, 49 +goggles + bounds: 214, 20, 131, 83 +gun + bounds: 347, 14, 105, 102 + rotate: 90 +head + bounds: 80, 105, 136, 149 +hoverboard-board + bounds: 2, 8, 246, 76 + rotate: 90 +hoverboard-thruster + bounds: 478, 2, 30, 32 +hoverglow-small + bounds: 218, 117, 137, 38 + rotate: 90 +mouth-grind + bounds: 775, 80, 47, 30 + rotate: 90 +mouth-oooo + bounds: 779, 31, 47, 30 + rotate: 90 +mouth-smile + bounds: 783, 207, 47, 30 + rotate: 90 +muzzle-glow + bounds: 779, 4, 25, 25 +muzzle-ring + bounds: 451, 14, 25, 105 +muzzle01 + bounds: 664, 60, 67, 40 + rotate: 90 +muzzle02 + bounds: 580, 56, 68, 42 + rotate: 90 +muzzle03 + bounds: 478, 36, 83, 53 + rotate: 90 +muzzle04 + bounds: 533, 49, 75, 45 + rotate: 90 +muzzle05 + bounds: 624, 56, 68, 38 + rotate: 90 +neck + bounds: 806, 8, 18, 21 +portal-bg + bounds: 258, 121, 133, 133 +portal-flare1 + bounds: 690, 2, 56, 30 + rotate: 90 +portal-flare2 + bounds: 510, 3, 57, 31 +portal-flare3 + bounds: 722, 4, 58, 30 + rotate: 90 +portal-shade + bounds: 393, 121, 133, 133 +portal-streaks1 + bounds: 528, 126, 126, 128 +portal-streaks2 + bounds: 656, 129, 125, 125 +rear-bracer + bounds: 826, 13, 28, 36 +rear-foot + bounds: 743, 70, 57, 30 + rotate: 90 +rear-shin + bounds: 174, 14, 38, 89 +rear-thigh + bounds: 783, 158, 28, 47 +rear-upper-arm + bounds: 783, 136, 20, 44 + rotate: 90 +torso + bounds: 123, 13, 49, 90 diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy.png b/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy.png new file mode 100644 index 000000000..9c145a23d Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/assets/spine/spineboy.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/svgs/checkerboard.svg b/docs/1.18.0/_static/apps/examples/assets/assets/svgs/checkerboard.svg new file mode 100644 index 000000000..774f6b280 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/svgs/checkerboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/svgs/green_balloons.svg b/docs/1.18.0/_static/apps/examples/assets/assets/svgs/green_balloons.svg new file mode 100644 index 000000000..c337bbe28 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/svgs/green_balloons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/svgs/happy_player.svg b/docs/1.18.0/_static/apps/examples/assets/assets/svgs/happy_player.svg new file mode 100644 index 000000000..afd64fc88 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/svgs/happy_player.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/svgs/red_balloons.svg b/docs/1.18.0/_static/apps/examples/assets/assets/svgs/red_balloons.svg new file mode 100644 index 000000000..9fb5ee344 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/svgs/red_balloons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/tiles/0x72_DungeonTilesetII_v1.4.tsx b/docs/1.18.0/_static/apps/examples/assets/assets/tiles/0x72_DungeonTilesetII_v1.4.tsx new file mode 100644 index 000000000..3a0156ac2 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/tiles/0x72_DungeonTilesetII_v1.4.tsx @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/tiles/dungeon.tmx b/docs/1.18.0/_static/apps/examples/assets/assets/tiles/dungeon.tmx new file mode 100644 index 000000000..69bf48788 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/tiles/dungeon.tmx @@ -0,0 +1,19 @@ + + + + + + H4sIAAAAAAAACmNgoAw0Y6FHMfkYAK7z31GQAQAA + + + + + H4sIAAAAAAAACp3Q7QmDMBSF4ZuELFIVF9FNdBQXae0i4scegnYNXzDgKfSH9MJDksPh/og3My+i0Dw4s4ddiqTVjI6HTp10krkfPZ3xZu/uvn97Zeo+OV/o8XbfvQzBTgP3GQsmyaP8XYOV944PNuRkFTIcCfCt35ABAAA= + + + + + H4sIAAAAAAAACmNgoA0oYaKNuamMuOW2IqmBYRgwQ2JfxWHeFKCbw/CYTw8AANEJHwqQAQAA + + + diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/yarn/advanced.yarn b/docs/1.18.0/_static/apps/examples/assets/assets/yarn/advanced.yarn new file mode 100644 index 000000000..7012d8008 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/yarn/advanced.yarn @@ -0,0 +1,21 @@ +<> +<> +title: gamble +--- +Jenny: Hello {$playerName}. This is a game of chance. +Jenny: You can win or lose up to 10 coins. Do you want to play? +-> No + Jenny: No bids made. +-> Yes + <> // returns a random value from -10 to 10 + <> + Jenny: Too bad, you did not win anything. + <> + Jenny: Bad luck. You lost {$winnings} coins. + Jenny: Play again to change your fortunes. + <> + Jenny: Congratulations! You won {$winnings} coins. + Jenny: Play again to win even more. + <> + <> +=== \ No newline at end of file diff --git a/docs/1.18.0/_static/apps/examples/assets/assets/yarn/simple.yarn b/docs/1.18.0/_static/apps/examples/assets/assets/yarn/simple.yarn new file mode 100644 index 000000000..f312b2362 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/assets/yarn/simple.yarn @@ -0,0 +1,6 @@ +<> +title: hello_world +--- +Jenny: Hello world. My name is Jenny. +Jenny: Thanks for using Flame! +=== \ No newline at end of file diff --git a/docs/1.18.0/_static/apps/examples/assets/fonts/MaterialIcons-Regular.otf b/docs/1.18.0/_static/apps/examples/assets/fonts/MaterialIcons-Regular.otf new file mode 100644 index 000000000..6def0f61c Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/fonts/MaterialIcons-Regular.otf differ diff --git a/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/bullet.png b/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/bullet.png new file mode 100644 index 000000000..f173be7fe Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/bullet.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/enemy.png b/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/enemy.png new file mode 100644 index 000000000..b388f6da4 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/enemy.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/explosion.png b/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/explosion.png new file mode 100644 index 000000000..40f607942 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/explosion.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/player.png b/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/player.png new file mode 100644 index 000000000..46fd9bc65 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/player.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/stars.png b/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/stars.png new file mode 100644 index 000000000..bcf3da2f8 Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/packages/rogue_shooter/assets/images/rogue_shooter/stars.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/packages/spine_flutter/lib/assets/libspine_flutter.js b/docs/1.18.0/_static/apps/examples/assets/packages/spine_flutter/lib/assets/libspine_flutter.js new file mode 100644 index 000000000..b35516558 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/packages/spine_flutter/lib/assets/libspine_flutter.js @@ -0,0 +1,306 @@ +const module = {}; + +var libspine_flutter = (() => { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(libspine_flutter) { + libspine_flutter = libspine_flutter || {}; + + +var a;a||(a=typeof libspine_flutter !== 'undefined' ? libspine_flutter : {});var h,k;a.ready=new Promise(function(b,c){h=b;k=c});var l=Object.assign({},a),m="object"==typeof window,n="function"==typeof importScripts,p="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,q="",r,t,u; +if(p){q=n?require("path").dirname(q)+"/":__dirname+"/";var fs,v;"function"===typeof require&&(fs=require("fs"),v=require("path"));r=(b,c)=>{b=v.normalize(b);return fs.readFileSync(b,c?void 0:"utf8")};u=b=>{b=r(b,!0);b.buffer||(b=new Uint8Array(b));return b};t=(b,c,d)=>{b=v.normalize(b);fs.readFile(b,function(e,f){e?d(e):c(f.buffer)})};1{var c=new XMLHttpRequest;c.open("GET",b,!1);c.send(null);return c.responseText},n&&(u=b=>{var c=new XMLHttpRequest;c.open("GET",b,!1);c.responseType="arraybuffer";c.send(null);return new Uint8Array(c.response)}), +t=(b,c,d)=>{var e=new XMLHttpRequest;e.open("GET",b,!0);e.responseType="arraybuffer";e.onload=()=>{200==e.status||0==e.status&&e.response?c(e.response):d()};e.onerror=d;e.send(null)};var aa=a.print||console.log.bind(console),x=a.printErr||console.warn.bind(console);Object.assign(a,l);l=null;var y;a.wasmBinary&&(y=a.wasmBinary);var noExitRuntime=a.noExitRuntime||!0;"object"!=typeof WebAssembly&&z("no native wasm support detected"); +var A,B=!1,D="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0; +function E(b,c){for(var d=c+NaN,e=c;b[e]&&!(e>=d);)++e;if(16f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d}var F,G,H,I,J,K,L,M; +function N(){var b=A.buffer;F=b;a.HEAP8=G=new Int8Array(b);a.HEAP16=I=new Int16Array(b);a.HEAP32=J=new Int32Array(b);a.HEAPU8=H=new Uint8Array(b);a.HEAPU16=new Uint16Array(b);a.HEAPU32=K=new Uint32Array(b);a.HEAPF32=L=new Float32Array(b);a.HEAPF64=M=new Float64Array(b)}var ba=[],ca=[],da=[];function ea(){var b=a.preRun.shift();ba.unshift(b)}var O=0,P=null,R=null; +function z(b){if(a.onAbort)a.onAbort(b);b="Aborted("+b+")";x(b);B=!0;b=new WebAssembly.RuntimeError(b+". Build with -sASSERTIONS for more info.");k(b);throw b;}function fa(){return S.startsWith("data:application/octet-stream;base64,")}var S;S="libspine_flutter.wasm";if(!fa()){var ha=S;S=a.locateFile?a.locateFile(ha,q):q+ha}function ia(){var b=S;try{if(b==S&&y)return new Uint8Array(y);if(u)return u(b);throw"both async and sync fetching of the wasm failed";}catch(c){z(c)}} +function ja(){if(!y&&(m||n)){if("function"==typeof fetch&&!S.startsWith("file://"))return fetch(S,{credentials:"same-origin"}).then(function(b){if(!b.ok)throw"failed to load wasm binary file at '"+S+"'";return b.arrayBuffer()}).catch(function(){return ia()});if(t)return new Promise(function(b,c){t(S,function(d){b(new Uint8Array(d))},c)})}return Promise.resolve().then(function(){return ia()})}var T,U; +function w(b){this.name="ExitStatus";this.message="Program terminated with exit("+b+")";this.status=b}a.ExitStatus=w;function V(b){for(;0>0];case "i8":return G[b>>0];case "i16":return I[b>>1];case "i32":return J[b>>2];case "i64":return J[b>>2];case "float":return L[b>>2];case "double":return M[b>>3];case "*":return K[b>>2];default:z("invalid type for getValue: "+c)}return null}; +a.setValue=function(b,c,d="i8"){d.endsWith("*")&&(d="*");switch(d){case "i1":G[b>>0]=c;break;case "i8":G[b>>0]=c;break;case "i16":I[b>>1]=c;break;case "i32":J[b>>2]=c;break;case "i64":U=[c>>>0,(T=c,1<=+Math.abs(T)?0>>0:~~+Math.ceil((T-+(~~T>>>0))/4294967296)>>>0:0)];J[b>>2]=U[0];J[b+4>>2]=U[1];break;case "float":L[b>>2]=c;break;case "double":M[b>>3]=c;break;case "*":K[b>>2]=c;break;default:z("invalid type for setValue: "+d)}}; +function ka(b,c,d,e){z("Assertion failed: "+(b?E(H,b):"")+", at: "+[c?c?E(H,c):"":"unknown filename",d,e?e?E(H,e):"":"unknown function"])}a.___assert_fail=ka;function la(){z("")}a._abort=la;function ma(b,c,d){H.copyWithin(b,c,c+d)}a._emscripten_memcpy_big=ma;a.getHeapMax=function(){return 2147483648};function oa(b){try{return A.grow(b-F.byteLength+65535>>>16),N(),1}catch(c){}}a.emscripten_realloc_buffer=oa; +function pa(b){var c=H.length;b>>>=0;if(2147483648=d;d*=2){var e=c*(1+.2/d);e=Math.min(e,b+100663296);var f=Math;e=Math.max(b,e);if(oa(f.min.call(f,2147483648,e+(65536-e%65536)%65536)))return!0}return!1}a._emscripten_resize_heap=pa;var W=[null,[],[]];a.printCharBuffers=W;function X(b,c){var d=W[b];0===c||10===c?((1===b?aa:x)(E(d,0)),d.length=0):d.push(c)}a.printChar=X;a.flush_NO_FILESYSTEM=function(){W[1].length&&X(1,10);W[2].length&&X(2,10)}; +var Y={g:void 0,get:function(){Y.g+=4;return J[Y.g-4>>2]},h:function(b){return b?E(H,b):""}};a.SYSCALLS=Y;function qa(b,c,d,e){for(var f=0,g=0;g>2],na=K[c+4>>2];c+=8;for(var Q=0;Q>2]=f;return 0}a._fd_write=qa;var ra={__assert_fail:ka,abort:la,emscripten_memcpy_big:ma,emscripten_resize_heap:pa,fd_write:qa}; +(function(){function b(f){a.asm=f.exports;A=a.asm.memory;N();ca.unshift(a.asm.__wasm_call_ctors);O--;a.monitorRunDependencies&&a.monitorRunDependencies(O);0==O&&(null!==P&&(clearInterval(P),P=null),R&&(f=R,R=null,f()))}function c(f){b(f.instance)}function d(f){return ja().then(function(g){return WebAssembly.instantiate(g,e)}).then(function(g){return g}).then(f,function(g){x("failed to asynchronously prepare wasm: "+g);z(g)})}var e={env:ra,wasi_snapshot_preview1:ra};O++;a.monitorRunDependencies&&a.monitorRunDependencies(O); +if(a.instantiateWasm)try{return a.instantiateWasm(e,b)}catch(f){x("Module.instantiateWasm callback failed with error: "+f),k(f)}(function(){return y||"function"!=typeof WebAssembly.instantiateStreaming||fa()||S.startsWith("file://")||p||"function"!=typeof fetch?d(c):fetch(S,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(c,function(g){x("wasm streaming compile failed: "+g);x("falling back to ArrayBuffer instantiation");return d(c)})})})().catch(k);return{}})(); +a.___wasm_call_ctors=function(){return(a.___wasm_call_ctors=a.asm.__wasm_call_ctors).apply(null,arguments)};a._spine_enable_debug_extension=function(){return(a._spine_enable_debug_extension=a.asm.spine_enable_debug_extension).apply(null,arguments)};a._spine_major_version=function(){return(a._spine_major_version=a.asm.spine_major_version).apply(null,arguments)};a._spine_minor_version=function(){return(a._spine_minor_version=a.asm.spine_minor_version).apply(null,arguments)}; +a._spine_report_leaks=function(){return(a._spine_report_leaks=a.asm.spine_report_leaks).apply(null,arguments)};a._spine_color_get_r=function(){return(a._spine_color_get_r=a.asm.spine_color_get_r).apply(null,arguments)};a._spine_color_get_g=function(){return(a._spine_color_get_g=a.asm.spine_color_get_g).apply(null,arguments)};a._spine_color_get_b=function(){return(a._spine_color_get_b=a.asm.spine_color_get_b).apply(null,arguments)}; +a._spine_color_get_a=function(){return(a._spine_color_get_a=a.asm.spine_color_get_a).apply(null,arguments)};a._spine_bounds_get_x=function(){return(a._spine_bounds_get_x=a.asm.spine_bounds_get_x).apply(null,arguments)};a._spine_bounds_get_y=function(){return(a._spine_bounds_get_y=a.asm.spine_bounds_get_y).apply(null,arguments)};a._spine_bounds_get_width=function(){return(a._spine_bounds_get_width=a.asm.spine_bounds_get_width).apply(null,arguments)}; +a._spine_bounds_get_height=function(){return(a._spine_bounds_get_height=a.asm.spine_bounds_get_height).apply(null,arguments)};a._spine_vector_get_x=function(){return(a._spine_vector_get_x=a.asm.spine_vector_get_x).apply(null,arguments)};a._spine_vector_get_y=function(){return(a._spine_vector_get_y=a.asm.spine_vector_get_y).apply(null,arguments)};a._spine_atlas_load=function(){return(a._spine_atlas_load=a.asm.spine_atlas_load).apply(null,arguments)}; +a._spine_atlas_get_num_image_paths=function(){return(a._spine_atlas_get_num_image_paths=a.asm.spine_atlas_get_num_image_paths).apply(null,arguments)};a._spine_atlas_get_image_path=function(){return(a._spine_atlas_get_image_path=a.asm.spine_atlas_get_image_path).apply(null,arguments)};a._spine_atlas_get_error=function(){return(a._spine_atlas_get_error=a.asm.spine_atlas_get_error).apply(null,arguments)}; +a._spine_atlas_dispose=function(){return(a._spine_atlas_dispose=a.asm.spine_atlas_dispose).apply(null,arguments)};a._free=function(){return(a._free=a.asm.free).apply(null,arguments)};a._spine_skeleton_data_load_json=function(){return(a._spine_skeleton_data_load_json=a.asm.spine_skeleton_data_load_json).apply(null,arguments)};a._spine_skeleton_data_load_binary=function(){return(a._spine_skeleton_data_load_binary=a.asm.spine_skeleton_data_load_binary).apply(null,arguments)}; +a._spine_skeleton_data_result_get_error=function(){return(a._spine_skeleton_data_result_get_error=a.asm.spine_skeleton_data_result_get_error).apply(null,arguments)};a._spine_skeleton_data_result_get_data=function(){return(a._spine_skeleton_data_result_get_data=a.asm.spine_skeleton_data_result_get_data).apply(null,arguments)};a._spine_skeleton_data_result_dispose=function(){return(a._spine_skeleton_data_result_dispose=a.asm.spine_skeleton_data_result_dispose).apply(null,arguments)}; +a._spine_skeleton_data_find_bone=function(){return(a._spine_skeleton_data_find_bone=a.asm.spine_skeleton_data_find_bone).apply(null,arguments)};a._spine_skeleton_data_find_slot=function(){return(a._spine_skeleton_data_find_slot=a.asm.spine_skeleton_data_find_slot).apply(null,arguments)};a._spine_skeleton_data_find_skin=function(){return(a._spine_skeleton_data_find_skin=a.asm.spine_skeleton_data_find_skin).apply(null,arguments)}; +a._spine_skeleton_data_find_event=function(){return(a._spine_skeleton_data_find_event=a.asm.spine_skeleton_data_find_event).apply(null,arguments)};a._spine_skeleton_data_find_animation=function(){return(a._spine_skeleton_data_find_animation=a.asm.spine_skeleton_data_find_animation).apply(null,arguments)};a._spine_skeleton_data_find_ik_constraint=function(){return(a._spine_skeleton_data_find_ik_constraint=a.asm.spine_skeleton_data_find_ik_constraint).apply(null,arguments)}; +a._spine_skeleton_data_find_transform_constraint=function(){return(a._spine_skeleton_data_find_transform_constraint=a.asm.spine_skeleton_data_find_transform_constraint).apply(null,arguments)};a._spine_skeleton_data_find_path_constraint=function(){return(a._spine_skeleton_data_find_path_constraint=a.asm.spine_skeleton_data_find_path_constraint).apply(null,arguments)}; +a._spine_skeleton_data_find_physics_constraint=function(){return(a._spine_skeleton_data_find_physics_constraint=a.asm.spine_skeleton_data_find_physics_constraint).apply(null,arguments)};a._spine_skeleton_data_get_name=function(){return(a._spine_skeleton_data_get_name=a.asm.spine_skeleton_data_get_name).apply(null,arguments)};a._spine_skeleton_data_get_num_bones=function(){return(a._spine_skeleton_data_get_num_bones=a.asm.spine_skeleton_data_get_num_bones).apply(null,arguments)}; +a._spine_skeleton_data_get_bones=function(){return(a._spine_skeleton_data_get_bones=a.asm.spine_skeleton_data_get_bones).apply(null,arguments)};a._spine_skeleton_data_get_num_slots=function(){return(a._spine_skeleton_data_get_num_slots=a.asm.spine_skeleton_data_get_num_slots).apply(null,arguments)};a._spine_skeleton_data_get_slots=function(){return(a._spine_skeleton_data_get_slots=a.asm.spine_skeleton_data_get_slots).apply(null,arguments)}; +a._spine_skeleton_data_get_num_skins=function(){return(a._spine_skeleton_data_get_num_skins=a.asm.spine_skeleton_data_get_num_skins).apply(null,arguments)};a._spine_skeleton_data_get_skins=function(){return(a._spine_skeleton_data_get_skins=a.asm.spine_skeleton_data_get_skins).apply(null,arguments)};a._spine_skeleton_data_get_default_skin=function(){return(a._spine_skeleton_data_get_default_skin=a.asm.spine_skeleton_data_get_default_skin).apply(null,arguments)}; +a._spine_skeleton_data_set_default_skin=function(){return(a._spine_skeleton_data_set_default_skin=a.asm.spine_skeleton_data_set_default_skin).apply(null,arguments)};a._spine_skeleton_data_get_num_events=function(){return(a._spine_skeleton_data_get_num_events=a.asm.spine_skeleton_data_get_num_events).apply(null,arguments)};a._spine_skeleton_data_get_events=function(){return(a._spine_skeleton_data_get_events=a.asm.spine_skeleton_data_get_events).apply(null,arguments)}; +a._spine_skeleton_data_get_num_animations=function(){return(a._spine_skeleton_data_get_num_animations=a.asm.spine_skeleton_data_get_num_animations).apply(null,arguments)};a._spine_skeleton_data_get_animations=function(){return(a._spine_skeleton_data_get_animations=a.asm.spine_skeleton_data_get_animations).apply(null,arguments)}; +a._spine_skeleton_data_get_num_ik_constraints=function(){return(a._spine_skeleton_data_get_num_ik_constraints=a.asm.spine_skeleton_data_get_num_ik_constraints).apply(null,arguments)};a._spine_skeleton_data_get_ik_constraints=function(){return(a._spine_skeleton_data_get_ik_constraints=a.asm.spine_skeleton_data_get_ik_constraints).apply(null,arguments)}; +a._spine_skeleton_data_get_num_transform_constraints=function(){return(a._spine_skeleton_data_get_num_transform_constraints=a.asm.spine_skeleton_data_get_num_transform_constraints).apply(null,arguments)};a._spine_skeleton_data_get_transform_constraints=function(){return(a._spine_skeleton_data_get_transform_constraints=a.asm.spine_skeleton_data_get_transform_constraints).apply(null,arguments)}; +a._spine_skeleton_data_get_num_path_constraints=function(){return(a._spine_skeleton_data_get_num_path_constraints=a.asm.spine_skeleton_data_get_num_path_constraints).apply(null,arguments)};a._spine_skeleton_data_get_path_constraints=function(){return(a._spine_skeleton_data_get_path_constraints=a.asm.spine_skeleton_data_get_path_constraints).apply(null,arguments)}; +a._spine_skeleton_data_get_num_physics_constraints=function(){return(a._spine_skeleton_data_get_num_physics_constraints=a.asm.spine_skeleton_data_get_num_physics_constraints).apply(null,arguments)};a._spine_skeleton_data_get_physics_constraints=function(){return(a._spine_skeleton_data_get_physics_constraints=a.asm.spine_skeleton_data_get_physics_constraints).apply(null,arguments)}; +a._spine_skeleton_data_get_x=function(){return(a._spine_skeleton_data_get_x=a.asm.spine_skeleton_data_get_x).apply(null,arguments)};a._spine_skeleton_data_set_x=function(){return(a._spine_skeleton_data_set_x=a.asm.spine_skeleton_data_set_x).apply(null,arguments)};a._spine_skeleton_data_get_y=function(){return(a._spine_skeleton_data_get_y=a.asm.spine_skeleton_data_get_y).apply(null,arguments)}; +a._spine_skeleton_data_set_y=function(){return(a._spine_skeleton_data_set_y=a.asm.spine_skeleton_data_set_y).apply(null,arguments)};a._spine_skeleton_data_get_width=function(){return(a._spine_skeleton_data_get_width=a.asm.spine_skeleton_data_get_width).apply(null,arguments)};a._spine_skeleton_data_set_width=function(){return(a._spine_skeleton_data_set_width=a.asm.spine_skeleton_data_set_width).apply(null,arguments)}; +a._spine_skeleton_data_get_height=function(){return(a._spine_skeleton_data_get_height=a.asm.spine_skeleton_data_get_height).apply(null,arguments)};a._spine_skeleton_data_set_height=function(){return(a._spine_skeleton_data_set_height=a.asm.spine_skeleton_data_set_height).apply(null,arguments)};a._spine_skeleton_data_get_version=function(){return(a._spine_skeleton_data_get_version=a.asm.spine_skeleton_data_get_version).apply(null,arguments)}; +a._spine_skeleton_data_get_hash=function(){return(a._spine_skeleton_data_get_hash=a.asm.spine_skeleton_data_get_hash).apply(null,arguments)};a._spine_skeleton_data_get_images_path=function(){return(a._spine_skeleton_data_get_images_path=a.asm.spine_skeleton_data_get_images_path).apply(null,arguments)};a._spine_skeleton_data_get_audio_path=function(){return(a._spine_skeleton_data_get_audio_path=a.asm.spine_skeleton_data_get_audio_path).apply(null,arguments)}; +a._spine_skeleton_data_get_fps=function(){return(a._spine_skeleton_data_get_fps=a.asm.spine_skeleton_data_get_fps).apply(null,arguments)};a._spine_skeleton_data_get_reference_scale=function(){return(a._spine_skeleton_data_get_reference_scale=a.asm.spine_skeleton_data_get_reference_scale).apply(null,arguments)};a._spine_skeleton_data_dispose=function(){return(a._spine_skeleton_data_dispose=a.asm.spine_skeleton_data_dispose).apply(null,arguments)}; +a._spine_skeleton_drawable_create=function(){return(a._spine_skeleton_drawable_create=a.asm.spine_skeleton_drawable_create).apply(null,arguments)};a._spine_skeleton_drawable_dispose=function(){return(a._spine_skeleton_drawable_dispose=a.asm.spine_skeleton_drawable_dispose).apply(null,arguments)};a._spine_skeleton_drawable_render=function(){return(a._spine_skeleton_drawable_render=a.asm.spine_skeleton_drawable_render).apply(null,arguments)}; +a._spine_skeleton_drawable_get_skeleton=function(){return(a._spine_skeleton_drawable_get_skeleton=a.asm.spine_skeleton_drawable_get_skeleton).apply(null,arguments)};a._spine_skeleton_drawable_get_animation_state=function(){return(a._spine_skeleton_drawable_get_animation_state=a.asm.spine_skeleton_drawable_get_animation_state).apply(null,arguments)}; +a._spine_skeleton_drawable_get_animation_state_data=function(){return(a._spine_skeleton_drawable_get_animation_state_data=a.asm.spine_skeleton_drawable_get_animation_state_data).apply(null,arguments)};a._spine_skeleton_drawable_get_animation_state_events=function(){return(a._spine_skeleton_drawable_get_animation_state_events=a.asm.spine_skeleton_drawable_get_animation_state_events).apply(null,arguments)}; +a._spine_render_command_get_positions=function(){return(a._spine_render_command_get_positions=a.asm.spine_render_command_get_positions).apply(null,arguments)};a._spine_render_command_get_uvs=function(){return(a._spine_render_command_get_uvs=a.asm.spine_render_command_get_uvs).apply(null,arguments)};a._spine_render_command_get_colors=function(){return(a._spine_render_command_get_colors=a.asm.spine_render_command_get_colors).apply(null,arguments)}; +a._spine_render_command_get_num_vertices=function(){return(a._spine_render_command_get_num_vertices=a.asm.spine_render_command_get_num_vertices).apply(null,arguments)};a._spine_render_command_get_indices=function(){return(a._spine_render_command_get_indices=a.asm.spine_render_command_get_indices).apply(null,arguments)};a._spine_render_command_get_num_indices=function(){return(a._spine_render_command_get_num_indices=a.asm.spine_render_command_get_num_indices).apply(null,arguments)}; +a._spine_render_command_get_atlas_page=function(){return(a._spine_render_command_get_atlas_page=a.asm.spine_render_command_get_atlas_page).apply(null,arguments)};a._spine_render_command_get_blend_mode=function(){return(a._spine_render_command_get_blend_mode=a.asm.spine_render_command_get_blend_mode).apply(null,arguments)};a._spine_render_command_get_next=function(){return(a._spine_render_command_get_next=a.asm.spine_render_command_get_next).apply(null,arguments)}; +a._spine_animation_get_name=function(){return(a._spine_animation_get_name=a.asm.spine_animation_get_name).apply(null,arguments)};a._spine_animation_get_duration=function(){return(a._spine_animation_get_duration=a.asm.spine_animation_get_duration).apply(null,arguments)};a._spine_animation_state_data_get_skeleton_data=function(){return(a._spine_animation_state_data_get_skeleton_data=a.asm.spine_animation_state_data_get_skeleton_data).apply(null,arguments)}; +a._spine_animation_state_data_get_default_mix=function(){return(a._spine_animation_state_data_get_default_mix=a.asm.spine_animation_state_data_get_default_mix).apply(null,arguments)};a._spine_animation_state_data_set_default_mix=function(){return(a._spine_animation_state_data_set_default_mix=a.asm.spine_animation_state_data_set_default_mix).apply(null,arguments)}; +a._spine_animation_state_data_set_mix=function(){return(a._spine_animation_state_data_set_mix=a.asm.spine_animation_state_data_set_mix).apply(null,arguments)};a._spine_animation_state_data_get_mix=function(){return(a._spine_animation_state_data_get_mix=a.asm.spine_animation_state_data_get_mix).apply(null,arguments)};a._spine_animation_state_data_set_mix_by_name=function(){return(a._spine_animation_state_data_set_mix_by_name=a.asm.spine_animation_state_data_set_mix_by_name).apply(null,arguments)}; +a._spine_animation_state_data_get_mix_by_name=function(){return(a._spine_animation_state_data_get_mix_by_name=a.asm.spine_animation_state_data_get_mix_by_name).apply(null,arguments)};a._spine_animation_state_data_clear=function(){return(a._spine_animation_state_data_clear=a.asm.spine_animation_state_data_clear).apply(null,arguments)};a._spine_animation_state_update=function(){return(a._spine_animation_state_update=a.asm.spine_animation_state_update).apply(null,arguments)}; +a._spine_animation_state_dispose_track_entry=function(){return(a._spine_animation_state_dispose_track_entry=a.asm.spine_animation_state_dispose_track_entry).apply(null,arguments)};a._spine_animation_state_apply=function(){return(a._spine_animation_state_apply=a.asm.spine_animation_state_apply).apply(null,arguments)};a._spine_animation_state_clear_tracks=function(){return(a._spine_animation_state_clear_tracks=a.asm.spine_animation_state_clear_tracks).apply(null,arguments)}; +a._spine_animation_state_get_num_tracks=function(){return(a._spine_animation_state_get_num_tracks=a.asm.spine_animation_state_get_num_tracks).apply(null,arguments)};a._spine_animation_state_clear_track=function(){return(a._spine_animation_state_clear_track=a.asm.spine_animation_state_clear_track).apply(null,arguments)};a._spine_animation_state_set_animation_by_name=function(){return(a._spine_animation_state_set_animation_by_name=a.asm.spine_animation_state_set_animation_by_name).apply(null,arguments)}; +a._spine_animation_state_set_animation=function(){return(a._spine_animation_state_set_animation=a.asm.spine_animation_state_set_animation).apply(null,arguments)};a._spine_animation_state_add_animation_by_name=function(){return(a._spine_animation_state_add_animation_by_name=a.asm.spine_animation_state_add_animation_by_name).apply(null,arguments)};a._spine_animation_state_add_animation=function(){return(a._spine_animation_state_add_animation=a.asm.spine_animation_state_add_animation).apply(null,arguments)}; +a._spine_animation_state_set_empty_animation=function(){return(a._spine_animation_state_set_empty_animation=a.asm.spine_animation_state_set_empty_animation).apply(null,arguments)};a._spine_animation_state_add_empty_animation=function(){return(a._spine_animation_state_add_empty_animation=a.asm.spine_animation_state_add_empty_animation).apply(null,arguments)}; +a._spine_animation_state_set_empty_animations=function(){return(a._spine_animation_state_set_empty_animations=a.asm.spine_animation_state_set_empty_animations).apply(null,arguments)};a._spine_animation_state_get_current=function(){return(a._spine_animation_state_get_current=a.asm.spine_animation_state_get_current).apply(null,arguments)};a._spine_animation_state_get_data=function(){return(a._spine_animation_state_get_data=a.asm.spine_animation_state_get_data).apply(null,arguments)}; +a._spine_animation_state_get_time_scale=function(){return(a._spine_animation_state_get_time_scale=a.asm.spine_animation_state_get_time_scale).apply(null,arguments)};a._spine_animation_state_set_time_scale=function(){return(a._spine_animation_state_set_time_scale=a.asm.spine_animation_state_set_time_scale).apply(null,arguments)}; +a._spine_animation_state_events_get_num_events=function(){return(a._spine_animation_state_events_get_num_events=a.asm.spine_animation_state_events_get_num_events).apply(null,arguments)};a._spine_animation_state_events_get_event_type=function(){return(a._spine_animation_state_events_get_event_type=a.asm.spine_animation_state_events_get_event_type).apply(null,arguments)}; +a._spine_animation_state_events_get_track_entry=function(){return(a._spine_animation_state_events_get_track_entry=a.asm.spine_animation_state_events_get_track_entry).apply(null,arguments)};a._spine_animation_state_events_get_event=function(){return(a._spine_animation_state_events_get_event=a.asm.spine_animation_state_events_get_event).apply(null,arguments)}; +a._spine_animation_state_events_reset=function(){return(a._spine_animation_state_events_reset=a.asm.spine_animation_state_events_reset).apply(null,arguments)};a._spine_track_entry_get_track_index=function(){return(a._spine_track_entry_get_track_index=a.asm.spine_track_entry_get_track_index).apply(null,arguments)};a._spine_track_entry_get_animation=function(){return(a._spine_track_entry_get_animation=a.asm.spine_track_entry_get_animation).apply(null,arguments)}; +a._spine_track_entry_get_previous=function(){return(a._spine_track_entry_get_previous=a.asm.spine_track_entry_get_previous).apply(null,arguments)};a._spine_track_entry_get_loop=function(){return(a._spine_track_entry_get_loop=a.asm.spine_track_entry_get_loop).apply(null,arguments)};a._spine_track_entry_set_loop=function(){return(a._spine_track_entry_set_loop=a.asm.spine_track_entry_set_loop).apply(null,arguments)}; +a._spine_track_entry_get_hold_previous=function(){return(a._spine_track_entry_get_hold_previous=a.asm.spine_track_entry_get_hold_previous).apply(null,arguments)};a._spine_track_entry_set_hold_previous=function(){return(a._spine_track_entry_set_hold_previous=a.asm.spine_track_entry_set_hold_previous).apply(null,arguments)};a._spine_track_entry_get_reverse=function(){return(a._spine_track_entry_get_reverse=a.asm.spine_track_entry_get_reverse).apply(null,arguments)}; +a._spine_track_entry_set_reverse=function(){return(a._spine_track_entry_set_reverse=a.asm.spine_track_entry_set_reverse).apply(null,arguments)};a._spine_track_entry_get_shortest_rotation=function(){return(a._spine_track_entry_get_shortest_rotation=a.asm.spine_track_entry_get_shortest_rotation).apply(null,arguments)};a._spine_track_entry_set_shortest_rotation=function(){return(a._spine_track_entry_set_shortest_rotation=a.asm.spine_track_entry_set_shortest_rotation).apply(null,arguments)}; +a._spine_track_entry_get_delay=function(){return(a._spine_track_entry_get_delay=a.asm.spine_track_entry_get_delay).apply(null,arguments)};a._spine_track_entry_set_delay=function(){return(a._spine_track_entry_set_delay=a.asm.spine_track_entry_set_delay).apply(null,arguments)};a._spine_track_entry_get_track_time=function(){return(a._spine_track_entry_get_track_time=a.asm.spine_track_entry_get_track_time).apply(null,arguments)}; +a._spine_track_entry_set_track_time=function(){return(a._spine_track_entry_set_track_time=a.asm.spine_track_entry_set_track_time).apply(null,arguments)};a._spine_track_entry_get_track_end=function(){return(a._spine_track_entry_get_track_end=a.asm.spine_track_entry_get_track_end).apply(null,arguments)};a._spine_track_entry_set_track_end=function(){return(a._spine_track_entry_set_track_end=a.asm.spine_track_entry_set_track_end).apply(null,arguments)}; +a._spine_track_entry_get_animation_start=function(){return(a._spine_track_entry_get_animation_start=a.asm.spine_track_entry_get_animation_start).apply(null,arguments)};a._spine_track_entry_set_animation_start=function(){return(a._spine_track_entry_set_animation_start=a.asm.spine_track_entry_set_animation_start).apply(null,arguments)};a._spine_track_entry_get_animation_end=function(){return(a._spine_track_entry_get_animation_end=a.asm.spine_track_entry_get_animation_end).apply(null,arguments)}; +a._spine_track_entry_set_animation_end=function(){return(a._spine_track_entry_set_animation_end=a.asm.spine_track_entry_set_animation_end).apply(null,arguments)};a._spine_track_entry_get_animation_last=function(){return(a._spine_track_entry_get_animation_last=a.asm.spine_track_entry_get_animation_last).apply(null,arguments)};a._spine_track_entry_set_animation_last=function(){return(a._spine_track_entry_set_animation_last=a.asm.spine_track_entry_set_animation_last).apply(null,arguments)}; +a._spine_track_entry_get_animation_time=function(){return(a._spine_track_entry_get_animation_time=a.asm.spine_track_entry_get_animation_time).apply(null,arguments)};a._spine_track_entry_get_time_scale=function(){return(a._spine_track_entry_get_time_scale=a.asm.spine_track_entry_get_time_scale).apply(null,arguments)};a._spine_track_entry_set_time_scale=function(){return(a._spine_track_entry_set_time_scale=a.asm.spine_track_entry_set_time_scale).apply(null,arguments)}; +a._spine_track_entry_get_alpha=function(){return(a._spine_track_entry_get_alpha=a.asm.spine_track_entry_get_alpha).apply(null,arguments)};a._spine_track_entry_set_alpha=function(){return(a._spine_track_entry_set_alpha=a.asm.spine_track_entry_set_alpha).apply(null,arguments)};a._spine_track_entry_get_event_threshold=function(){return(a._spine_track_entry_get_event_threshold=a.asm.spine_track_entry_get_event_threshold).apply(null,arguments)}; +a._spine_track_entry_set_event_threshold=function(){return(a._spine_track_entry_set_event_threshold=a.asm.spine_track_entry_set_event_threshold).apply(null,arguments)};a._spine_track_entry_get_alpha_attachment_threshold=function(){return(a._spine_track_entry_get_alpha_attachment_threshold=a.asm.spine_track_entry_get_alpha_attachment_threshold).apply(null,arguments)}; +a._spine_track_entry_set_alpha_attachment_threshold=function(){return(a._spine_track_entry_set_alpha_attachment_threshold=a.asm.spine_track_entry_set_alpha_attachment_threshold).apply(null,arguments)};a._spine_track_entry_get_mix_attachment_threshold=function(){return(a._spine_track_entry_get_mix_attachment_threshold=a.asm.spine_track_entry_get_mix_attachment_threshold).apply(null,arguments)}; +a._spine_track_entry_set_mix_attachment_threshold=function(){return(a._spine_track_entry_set_mix_attachment_threshold=a.asm.spine_track_entry_set_mix_attachment_threshold).apply(null,arguments)};a._spine_track_entry_get_mix_draw_order_threshold=function(){return(a._spine_track_entry_get_mix_draw_order_threshold=a.asm.spine_track_entry_get_mix_draw_order_threshold).apply(null,arguments)}; +a._spine_track_entry_set_mix_draw_order_threshold=function(){return(a._spine_track_entry_set_mix_draw_order_threshold=a.asm.spine_track_entry_set_mix_draw_order_threshold).apply(null,arguments)};a._spine_track_entry_get_next=function(){return(a._spine_track_entry_get_next=a.asm.spine_track_entry_get_next).apply(null,arguments)};a._spine_track_entry_is_complete=function(){return(a._spine_track_entry_is_complete=a.asm.spine_track_entry_is_complete).apply(null,arguments)}; +a._spine_track_entry_get_mix_time=function(){return(a._spine_track_entry_get_mix_time=a.asm.spine_track_entry_get_mix_time).apply(null,arguments)};a._spine_track_entry_set_mix_time=function(){return(a._spine_track_entry_set_mix_time=a.asm.spine_track_entry_set_mix_time).apply(null,arguments)};a._spine_track_entry_get_mix_duration=function(){return(a._spine_track_entry_get_mix_duration=a.asm.spine_track_entry_get_mix_duration).apply(null,arguments)}; +a._spine_track_entry_set_mix_duration=function(){return(a._spine_track_entry_set_mix_duration=a.asm.spine_track_entry_set_mix_duration).apply(null,arguments)};a._spine_track_entry_get_mix_blend=function(){return(a._spine_track_entry_get_mix_blend=a.asm.spine_track_entry_get_mix_blend).apply(null,arguments)};a._spine_track_entry_set_mix_blend=function(){return(a._spine_track_entry_set_mix_blend=a.asm.spine_track_entry_set_mix_blend).apply(null,arguments)}; +a._spine_track_entry_get_mixing_from=function(){return(a._spine_track_entry_get_mixing_from=a.asm.spine_track_entry_get_mixing_from).apply(null,arguments)};a._spine_track_entry_get_mixing_to=function(){return(a._spine_track_entry_get_mixing_to=a.asm.spine_track_entry_get_mixing_to).apply(null,arguments)};a._spine_track_entry_reset_rotation_directions=function(){return(a._spine_track_entry_reset_rotation_directions=a.asm.spine_track_entry_reset_rotation_directions).apply(null,arguments)}; +a._spine_track_entry_get_track_complete=function(){return(a._spine_track_entry_get_track_complete=a.asm.spine_track_entry_get_track_complete).apply(null,arguments)};a._spine_skeleton_update_cache=function(){return(a._spine_skeleton_update_cache=a.asm.spine_skeleton_update_cache).apply(null,arguments)};a._spine_skeleton_update_world_transform=function(){return(a._spine_skeleton_update_world_transform=a.asm.spine_skeleton_update_world_transform).apply(null,arguments)}; +a._spine_skeleton_update_world_transform_bone=function(){return(a._spine_skeleton_update_world_transform_bone=a.asm.spine_skeleton_update_world_transform_bone).apply(null,arguments)};a._spine_skeleton_set_to_setup_pose=function(){return(a._spine_skeleton_set_to_setup_pose=a.asm.spine_skeleton_set_to_setup_pose).apply(null,arguments)};a._spine_skeleton_set_bones_to_setup_pose=function(){return(a._spine_skeleton_set_bones_to_setup_pose=a.asm.spine_skeleton_set_bones_to_setup_pose).apply(null,arguments)}; +a._spine_skeleton_set_slots_to_setup_pose=function(){return(a._spine_skeleton_set_slots_to_setup_pose=a.asm.spine_skeleton_set_slots_to_setup_pose).apply(null,arguments)};a._spine_skeleton_find_bone=function(){return(a._spine_skeleton_find_bone=a.asm.spine_skeleton_find_bone).apply(null,arguments)};a._spine_skeleton_find_slot=function(){return(a._spine_skeleton_find_slot=a.asm.spine_skeleton_find_slot).apply(null,arguments)}; +a._spine_skeleton_set_skin_by_name=function(){return(a._spine_skeleton_set_skin_by_name=a.asm.spine_skeleton_set_skin_by_name).apply(null,arguments)};a._spine_skeleton_set_skin=function(){return(a._spine_skeleton_set_skin=a.asm.spine_skeleton_set_skin).apply(null,arguments)};a._spine_skeleton_get_attachment_by_name=function(){return(a._spine_skeleton_get_attachment_by_name=a.asm.spine_skeleton_get_attachment_by_name).apply(null,arguments)}; +a._spine_skeleton_get_attachment=function(){return(a._spine_skeleton_get_attachment=a.asm.spine_skeleton_get_attachment).apply(null,arguments)};a._spine_skeleton_set_attachment=function(){return(a._spine_skeleton_set_attachment=a.asm.spine_skeleton_set_attachment).apply(null,arguments)};a._spine_skeleton_find_ik_constraint=function(){return(a._spine_skeleton_find_ik_constraint=a.asm.spine_skeleton_find_ik_constraint).apply(null,arguments)}; +a._spine_skeleton_find_transform_constraint=function(){return(a._spine_skeleton_find_transform_constraint=a.asm.spine_skeleton_find_transform_constraint).apply(null,arguments)};a._spine_skeleton_find_path_constraint=function(){return(a._spine_skeleton_find_path_constraint=a.asm.spine_skeleton_find_path_constraint).apply(null,arguments)};a._spine_skeleton_find_physics_constraint=function(){return(a._spine_skeleton_find_physics_constraint=a.asm.spine_skeleton_find_physics_constraint).apply(null,arguments)}; +a._spine_skeleton_get_bounds=function(){return(a._spine_skeleton_get_bounds=a.asm.spine_skeleton_get_bounds).apply(null,arguments)};a._spine_skeleton_get_root_bone=function(){return(a._spine_skeleton_get_root_bone=a.asm.spine_skeleton_get_root_bone).apply(null,arguments)};a._spine_skeleton_get_data=function(){return(a._spine_skeleton_get_data=a.asm.spine_skeleton_get_data).apply(null,arguments)}; +a._spine_skeleton_get_num_bones=function(){return(a._spine_skeleton_get_num_bones=a.asm.spine_skeleton_get_num_bones).apply(null,arguments)};a._spine_skeleton_get_bones=function(){return(a._spine_skeleton_get_bones=a.asm.spine_skeleton_get_bones).apply(null,arguments)};a._spine_skeleton_get_num_slots=function(){return(a._spine_skeleton_get_num_slots=a.asm.spine_skeleton_get_num_slots).apply(null,arguments)}; +a._spine_skeleton_get_slots=function(){return(a._spine_skeleton_get_slots=a.asm.spine_skeleton_get_slots).apply(null,arguments)};a._spine_skeleton_get_num_draw_order=function(){return(a._spine_skeleton_get_num_draw_order=a.asm.spine_skeleton_get_num_draw_order).apply(null,arguments)};a._spine_skeleton_get_draw_order=function(){return(a._spine_skeleton_get_draw_order=a.asm.spine_skeleton_get_draw_order).apply(null,arguments)}; +a._spine_skeleton_get_num_ik_constraints=function(){return(a._spine_skeleton_get_num_ik_constraints=a.asm.spine_skeleton_get_num_ik_constraints).apply(null,arguments)};a._spine_skeleton_get_ik_constraints=function(){return(a._spine_skeleton_get_ik_constraints=a.asm.spine_skeleton_get_ik_constraints).apply(null,arguments)}; +a._spine_skeleton_get_num_transform_constraints=function(){return(a._spine_skeleton_get_num_transform_constraints=a.asm.spine_skeleton_get_num_transform_constraints).apply(null,arguments)};a._spine_skeleton_get_transform_constraints=function(){return(a._spine_skeleton_get_transform_constraints=a.asm.spine_skeleton_get_transform_constraints).apply(null,arguments)}; +a._spine_skeleton_get_num_path_constraints=function(){return(a._spine_skeleton_get_num_path_constraints=a.asm.spine_skeleton_get_num_path_constraints).apply(null,arguments)};a._spine_skeleton_get_path_constraints=function(){return(a._spine_skeleton_get_path_constraints=a.asm.spine_skeleton_get_path_constraints).apply(null,arguments)}; +a._spine_skeleton_get_num_physics_constraints=function(){return(a._spine_skeleton_get_num_physics_constraints=a.asm.spine_skeleton_get_num_physics_constraints).apply(null,arguments)};a._spine_skeleton_get_physics_constraints=function(){return(a._spine_skeleton_get_physics_constraints=a.asm.spine_skeleton_get_physics_constraints).apply(null,arguments)};a._spine_skeleton_get_skin=function(){return(a._spine_skeleton_get_skin=a.asm.spine_skeleton_get_skin).apply(null,arguments)}; +a._spine_skeleton_get_color=function(){return(a._spine_skeleton_get_color=a.asm.spine_skeleton_get_color).apply(null,arguments)};a._spine_skeleton_set_color=function(){return(a._spine_skeleton_set_color=a.asm.spine_skeleton_set_color).apply(null,arguments)};a._spine_skeleton_set_position=function(){return(a._spine_skeleton_set_position=a.asm.spine_skeleton_set_position).apply(null,arguments)}; +a._spine_skeleton_get_x=function(){return(a._spine_skeleton_get_x=a.asm.spine_skeleton_get_x).apply(null,arguments)};a._spine_skeleton_set_x=function(){return(a._spine_skeleton_set_x=a.asm.spine_skeleton_set_x).apply(null,arguments)};a._spine_skeleton_get_y=function(){return(a._spine_skeleton_get_y=a.asm.spine_skeleton_get_y).apply(null,arguments)};a._spine_skeleton_set_y=function(){return(a._spine_skeleton_set_y=a.asm.spine_skeleton_set_y).apply(null,arguments)}; +a._spine_skeleton_get_scale_x=function(){return(a._spine_skeleton_get_scale_x=a.asm.spine_skeleton_get_scale_x).apply(null,arguments)};a._spine_skeleton_set_scale_x=function(){return(a._spine_skeleton_set_scale_x=a.asm.spine_skeleton_set_scale_x).apply(null,arguments)};a._spine_skeleton_get_scale_y=function(){return(a._spine_skeleton_get_scale_y=a.asm.spine_skeleton_get_scale_y).apply(null,arguments)}; +a._spine_skeleton_set_scale_y=function(){return(a._spine_skeleton_set_scale_y=a.asm.spine_skeleton_set_scale_y).apply(null,arguments)};a._spine_skeleton_get_time=function(){return(a._spine_skeleton_get_time=a.asm.spine_skeleton_get_time).apply(null,arguments)};a._spine_skeleton_set_time=function(){return(a._spine_skeleton_set_time=a.asm.spine_skeleton_set_time).apply(null,arguments)};a._spine_skeleton_update=function(){return(a._spine_skeleton_update=a.asm.spine_skeleton_update).apply(null,arguments)}; +a._spine_event_data_get_name=function(){return(a._spine_event_data_get_name=a.asm.spine_event_data_get_name).apply(null,arguments)};a._spine_event_data_get_int_value=function(){return(a._spine_event_data_get_int_value=a.asm.spine_event_data_get_int_value).apply(null,arguments)};a._spine_event_data_set_int_value=function(){return(a._spine_event_data_set_int_value=a.asm.spine_event_data_set_int_value).apply(null,arguments)}; +a._spine_event_data_get_float_value=function(){return(a._spine_event_data_get_float_value=a.asm.spine_event_data_get_float_value).apply(null,arguments)};a._spine_event_data_set_float_value=function(){return(a._spine_event_data_set_float_value=a.asm.spine_event_data_set_float_value).apply(null,arguments)};a._spine_event_data_get_string_value=function(){return(a._spine_event_data_get_string_value=a.asm.spine_event_data_get_string_value).apply(null,arguments)}; +a._spine_event_data_set_string_value=function(){return(a._spine_event_data_set_string_value=a.asm.spine_event_data_set_string_value).apply(null,arguments)};a._spine_event_data_get_audio_path=function(){return(a._spine_event_data_get_audio_path=a.asm.spine_event_data_get_audio_path).apply(null,arguments)};a._spine_event_data_get_volume=function(){return(a._spine_event_data_get_volume=a.asm.spine_event_data_get_volume).apply(null,arguments)}; +a._spine_event_data_set_volume=function(){return(a._spine_event_data_set_volume=a.asm.spine_event_data_set_volume).apply(null,arguments)};a._spine_event_data_get_balance=function(){return(a._spine_event_data_get_balance=a.asm.spine_event_data_get_balance).apply(null,arguments)};a._spine_event_data_set_balance=function(){return(a._spine_event_data_set_balance=a.asm.spine_event_data_set_balance).apply(null,arguments)}; +a._spine_event_get_data=function(){return(a._spine_event_get_data=a.asm.spine_event_get_data).apply(null,arguments)};a._spine_event_get_time=function(){return(a._spine_event_get_time=a.asm.spine_event_get_time).apply(null,arguments)};a._spine_event_get_int_value=function(){return(a._spine_event_get_int_value=a.asm.spine_event_get_int_value).apply(null,arguments)};a._spine_event_set_int_value=function(){return(a._spine_event_set_int_value=a.asm.spine_event_set_int_value).apply(null,arguments)}; +a._spine_event_get_float_value=function(){return(a._spine_event_get_float_value=a.asm.spine_event_get_float_value).apply(null,arguments)};a._spine_event_set_float_value=function(){return(a._spine_event_set_float_value=a.asm.spine_event_set_float_value).apply(null,arguments)};a._spine_event_get_string_value=function(){return(a._spine_event_get_string_value=a.asm.spine_event_get_string_value).apply(null,arguments)}; +a._spine_event_set_string_value=function(){return(a._spine_event_set_string_value=a.asm.spine_event_set_string_value).apply(null,arguments)};a._spine_event_get_volume=function(){return(a._spine_event_get_volume=a.asm.spine_event_get_volume).apply(null,arguments)};a._spine_event_set_volume=function(){return(a._spine_event_set_volume=a.asm.spine_event_set_volume).apply(null,arguments)}; +a._spine_event_get_balance=function(){return(a._spine_event_get_balance=a.asm.spine_event_get_balance).apply(null,arguments)};a._spine_event_set_balance=function(){return(a._spine_event_set_balance=a.asm.spine_event_set_balance).apply(null,arguments)};a._spine_slot_data_get_index=function(){return(a._spine_slot_data_get_index=a.asm.spine_slot_data_get_index).apply(null,arguments)}; +a._spine_slot_data_get_name=function(){return(a._spine_slot_data_get_name=a.asm.spine_slot_data_get_name).apply(null,arguments)};a._spine_slot_data_get_bone_data=function(){return(a._spine_slot_data_get_bone_data=a.asm.spine_slot_data_get_bone_data).apply(null,arguments)};a._spine_slot_data_get_color=function(){return(a._spine_slot_data_get_color=a.asm.spine_slot_data_get_color).apply(null,arguments)}; +a._spine_slot_data_set_color=function(){return(a._spine_slot_data_set_color=a.asm.spine_slot_data_set_color).apply(null,arguments)};a._spine_slot_data_get_dark_color=function(){return(a._spine_slot_data_get_dark_color=a.asm.spine_slot_data_get_dark_color).apply(null,arguments)};a._spine_slot_data_set_dark_color=function(){return(a._spine_slot_data_set_dark_color=a.asm.spine_slot_data_set_dark_color).apply(null,arguments)}; +a._spine_slot_data_has_dark_color=function(){return(a._spine_slot_data_has_dark_color=a.asm.spine_slot_data_has_dark_color).apply(null,arguments)};a._spine_slot_data_set_has_dark_color=function(){return(a._spine_slot_data_set_has_dark_color=a.asm.spine_slot_data_set_has_dark_color).apply(null,arguments)};a._spine_slot_data_get_attachment_name=function(){return(a._spine_slot_data_get_attachment_name=a.asm.spine_slot_data_get_attachment_name).apply(null,arguments)}; +a._spine_slot_data_set_attachment_name=function(){return(a._spine_slot_data_set_attachment_name=a.asm.spine_slot_data_set_attachment_name).apply(null,arguments)};a._spine_slot_data_get_blend_mode=function(){return(a._spine_slot_data_get_blend_mode=a.asm.spine_slot_data_get_blend_mode).apply(null,arguments)};a._spine_slot_data_set_blend_mode=function(){return(a._spine_slot_data_set_blend_mode=a.asm.spine_slot_data_set_blend_mode).apply(null,arguments)}; +a._spine_slot_data_is_visible=function(){return(a._spine_slot_data_is_visible=a.asm.spine_slot_data_is_visible).apply(null,arguments)};a._spine_slot_data_set_visible=function(){return(a._spine_slot_data_set_visible=a.asm.spine_slot_data_set_visible).apply(null,arguments)};a._spine_slot_set_to_setup_pose=function(){return(a._spine_slot_set_to_setup_pose=a.asm.spine_slot_set_to_setup_pose).apply(null,arguments)}; +a._spine_slot_get_data=function(){return(a._spine_slot_get_data=a.asm.spine_slot_get_data).apply(null,arguments)};a._spine_slot_get_bone=function(){return(a._spine_slot_get_bone=a.asm.spine_slot_get_bone).apply(null,arguments)};a._spine_slot_get_skeleton=function(){return(a._spine_slot_get_skeleton=a.asm.spine_slot_get_skeleton).apply(null,arguments)};a._spine_slot_get_color=function(){return(a._spine_slot_get_color=a.asm.spine_slot_get_color).apply(null,arguments)}; +a._spine_slot_set_color=function(){return(a._spine_slot_set_color=a.asm.spine_slot_set_color).apply(null,arguments)};a._spine_slot_get_dark_color=function(){return(a._spine_slot_get_dark_color=a.asm.spine_slot_get_dark_color).apply(null,arguments)};a._spine_slot_set_dark_color=function(){return(a._spine_slot_set_dark_color=a.asm.spine_slot_set_dark_color).apply(null,arguments)}; +a._spine_slot_has_dark_color=function(){return(a._spine_slot_has_dark_color=a.asm.spine_slot_has_dark_color).apply(null,arguments)};a._spine_slot_get_attachment=function(){return(a._spine_slot_get_attachment=a.asm.spine_slot_get_attachment).apply(null,arguments)};a._spine_slot_set_attachment=function(){return(a._spine_slot_set_attachment=a.asm.spine_slot_set_attachment).apply(null,arguments)}; +a._spine_slot_get_sequence_index=function(){return(a._spine_slot_get_sequence_index=a.asm.spine_slot_get_sequence_index).apply(null,arguments)};a._spine_slot_set_sequence_index=function(){return(a._spine_slot_set_sequence_index=a.asm.spine_slot_set_sequence_index).apply(null,arguments)};a._spine_bone_data_get_index=function(){return(a._spine_bone_data_get_index=a.asm.spine_bone_data_get_index).apply(null,arguments)}; +a._spine_bone_data_get_name=function(){return(a._spine_bone_data_get_name=a.asm.spine_bone_data_get_name).apply(null,arguments)};a._spine_bone_data_get_parent=function(){return(a._spine_bone_data_get_parent=a.asm.spine_bone_data_get_parent).apply(null,arguments)};a._spine_bone_data_get_length=function(){return(a._spine_bone_data_get_length=a.asm.spine_bone_data_get_length).apply(null,arguments)}; +a._spine_bone_data_set_length=function(){return(a._spine_bone_data_set_length=a.asm.spine_bone_data_set_length).apply(null,arguments)};a._spine_bone_data_get_x=function(){return(a._spine_bone_data_get_x=a.asm.spine_bone_data_get_x).apply(null,arguments)};a._spine_bone_data_set_x=function(){return(a._spine_bone_data_set_x=a.asm.spine_bone_data_set_x).apply(null,arguments)};a._spine_bone_data_get_y=function(){return(a._spine_bone_data_get_y=a.asm.spine_bone_data_get_y).apply(null,arguments)}; +a._spine_bone_data_set_y=function(){return(a._spine_bone_data_set_y=a.asm.spine_bone_data_set_y).apply(null,arguments)};a._spine_bone_data_get_rotation=function(){return(a._spine_bone_data_get_rotation=a.asm.spine_bone_data_get_rotation).apply(null,arguments)};a._spine_bone_data_set_rotation=function(){return(a._spine_bone_data_set_rotation=a.asm.spine_bone_data_set_rotation).apply(null,arguments)}; +a._spine_bone_data_get_scale_x=function(){return(a._spine_bone_data_get_scale_x=a.asm.spine_bone_data_get_scale_x).apply(null,arguments)};a._spine_bone_data_set_scale_x=function(){return(a._spine_bone_data_set_scale_x=a.asm.spine_bone_data_set_scale_x).apply(null,arguments)};a._spine_bone_data_get_scale_y=function(){return(a._spine_bone_data_get_scale_y=a.asm.spine_bone_data_get_scale_y).apply(null,arguments)}; +a._spine_bone_data_set_scale_y=function(){return(a._spine_bone_data_set_scale_y=a.asm.spine_bone_data_set_scale_y).apply(null,arguments)};a._spine_bone_data_get_shear_x=function(){return(a._spine_bone_data_get_shear_x=a.asm.spine_bone_data_get_shear_x).apply(null,arguments)};a._spine_bone_data_set_shear_x=function(){return(a._spine_bone_data_set_shear_x=a.asm.spine_bone_data_set_shear_x).apply(null,arguments)}; +a._spine_bone_data_get_shear_y=function(){return(a._spine_bone_data_get_shear_y=a.asm.spine_bone_data_get_shear_y).apply(null,arguments)};a._spine_bone_data_set_shear_y=function(){return(a._spine_bone_data_set_shear_y=a.asm.spine_bone_data_set_shear_y).apply(null,arguments)};a._spine_bone_data_get_inherit=function(){return(a._spine_bone_data_get_inherit=a.asm.spine_bone_data_get_inherit).apply(null,arguments)}; +a._spine_bone_data_set_inherit=function(){return(a._spine_bone_data_set_inherit=a.asm.spine_bone_data_set_inherit).apply(null,arguments)};a._spine_bone_data_is_skin_required=function(){return(a._spine_bone_data_is_skin_required=a.asm.spine_bone_data_is_skin_required).apply(null,arguments)};a._spine_bone_data_set_is_skin_required=function(){return(a._spine_bone_data_set_is_skin_required=a.asm.spine_bone_data_set_is_skin_required).apply(null,arguments)}; +a._spine_bone_data_get_color=function(){return(a._spine_bone_data_get_color=a.asm.spine_bone_data_get_color).apply(null,arguments)};a._spine_bone_data_set_color=function(){return(a._spine_bone_data_set_color=a.asm.spine_bone_data_set_color).apply(null,arguments)};a._spine_bone_data_is_visible=function(){return(a._spine_bone_data_is_visible=a.asm.spine_bone_data_is_visible).apply(null,arguments)}; +a._spine_bone_data_set_visible=function(){return(a._spine_bone_data_set_visible=a.asm.spine_bone_data_set_visible).apply(null,arguments)};a._spine_bone_set_is_y_down=function(){return(a._spine_bone_set_is_y_down=a.asm.spine_bone_set_is_y_down).apply(null,arguments)};a._spine_bone_get_is_y_down=function(){return(a._spine_bone_get_is_y_down=a.asm.spine_bone_get_is_y_down).apply(null,arguments)};a._spine_bone_update=function(){return(a._spine_bone_update=a.asm.spine_bone_update).apply(null,arguments)}; +a._spine_bone_update_world_transform=function(){return(a._spine_bone_update_world_transform=a.asm.spine_bone_update_world_transform).apply(null,arguments)};a._spine_bone_update_world_transform_with=function(){return(a._spine_bone_update_world_transform_with=a.asm.spine_bone_update_world_transform_with).apply(null,arguments)};a._spine_bone_update_applied_transform=function(){return(a._spine_bone_update_applied_transform=a.asm.spine_bone_update_applied_transform).apply(null,arguments)}; +a._spine_bone_set_to_setup_pose=function(){return(a._spine_bone_set_to_setup_pose=a.asm.spine_bone_set_to_setup_pose).apply(null,arguments)};a._spine_bone_world_to_local=function(){return(a._spine_bone_world_to_local=a.asm.spine_bone_world_to_local).apply(null,arguments)};a._spine_bone_world_to_parent=function(){return(a._spine_bone_world_to_parent=a.asm.spine_bone_world_to_parent).apply(null,arguments)}; +a._spine_bone_local_to_world=function(){return(a._spine_bone_local_to_world=a.asm.spine_bone_local_to_world).apply(null,arguments)};a._spine_bone_parent_to_world=function(){return(a._spine_bone_parent_to_world=a.asm.spine_bone_parent_to_world).apply(null,arguments)};a._spine_bone_world_to_local_rotation=function(){return(a._spine_bone_world_to_local_rotation=a.asm.spine_bone_world_to_local_rotation).apply(null,arguments)}; +a._spine_bone_local_to_world_rotation=function(){return(a._spine_bone_local_to_world_rotation=a.asm.spine_bone_local_to_world_rotation).apply(null,arguments)};a._spine_bone_rotate_world=function(){return(a._spine_bone_rotate_world=a.asm.spine_bone_rotate_world).apply(null,arguments)};a._spine_bone_get_world_to_local_rotation_x=function(){return(a._spine_bone_get_world_to_local_rotation_x=a.asm.spine_bone_get_world_to_local_rotation_x).apply(null,arguments)}; +a._spine_bone_get_world_to_local_rotation_y=function(){return(a._spine_bone_get_world_to_local_rotation_y=a.asm.spine_bone_get_world_to_local_rotation_y).apply(null,arguments)};a._spine_bone_get_data=function(){return(a._spine_bone_get_data=a.asm.spine_bone_get_data).apply(null,arguments)};a._spine_bone_get_skeleton=function(){return(a._spine_bone_get_skeleton=a.asm.spine_bone_get_skeleton).apply(null,arguments)}; +a._spine_bone_get_parent=function(){return(a._spine_bone_get_parent=a.asm.spine_bone_get_parent).apply(null,arguments)};a._spine_bone_get_num_children=function(){return(a._spine_bone_get_num_children=a.asm.spine_bone_get_num_children).apply(null,arguments)};a._spine_bone_get_children=function(){return(a._spine_bone_get_children=a.asm.spine_bone_get_children).apply(null,arguments)};a._spine_bone_get_x=function(){return(a._spine_bone_get_x=a.asm.spine_bone_get_x).apply(null,arguments)}; +a._spine_bone_set_x=function(){return(a._spine_bone_set_x=a.asm.spine_bone_set_x).apply(null,arguments)};a._spine_bone_get_y=function(){return(a._spine_bone_get_y=a.asm.spine_bone_get_y).apply(null,arguments)};a._spine_bone_set_y=function(){return(a._spine_bone_set_y=a.asm.spine_bone_set_y).apply(null,arguments)};a._spine_bone_get_rotation=function(){return(a._spine_bone_get_rotation=a.asm.spine_bone_get_rotation).apply(null,arguments)}; +a._spine_bone_set_rotation=function(){return(a._spine_bone_set_rotation=a.asm.spine_bone_set_rotation).apply(null,arguments)};a._spine_bone_get_scale_x=function(){return(a._spine_bone_get_scale_x=a.asm.spine_bone_get_scale_x).apply(null,arguments)};a._spine_bone_set_scale_x=function(){return(a._spine_bone_set_scale_x=a.asm.spine_bone_set_scale_x).apply(null,arguments)};a._spine_bone_get_scale_y=function(){return(a._spine_bone_get_scale_y=a.asm.spine_bone_get_scale_y).apply(null,arguments)}; +a._spine_bone_set_scale_y=function(){return(a._spine_bone_set_scale_y=a.asm.spine_bone_set_scale_y).apply(null,arguments)};a._spine_bone_get_shear_x=function(){return(a._spine_bone_get_shear_x=a.asm.spine_bone_get_shear_x).apply(null,arguments)};a._spine_bone_set_shear_x=function(){return(a._spine_bone_set_shear_x=a.asm.spine_bone_set_shear_x).apply(null,arguments)};a._spine_bone_get_shear_y=function(){return(a._spine_bone_get_shear_y=a.asm.spine_bone_get_shear_y).apply(null,arguments)}; +a._spine_bone_set_shear_y=function(){return(a._spine_bone_set_shear_y=a.asm.spine_bone_set_shear_y).apply(null,arguments)};a._spine_bone_get_applied_rotation=function(){return(a._spine_bone_get_applied_rotation=a.asm.spine_bone_get_applied_rotation).apply(null,arguments)};a._spine_bone_set_applied_rotation=function(){return(a._spine_bone_set_applied_rotation=a.asm.spine_bone_set_applied_rotation).apply(null,arguments)}; +a._spine_bone_get_a_x=function(){return(a._spine_bone_get_a_x=a.asm.spine_bone_get_a_x).apply(null,arguments)};a._spine_bone_set_a_x=function(){return(a._spine_bone_set_a_x=a.asm.spine_bone_set_a_x).apply(null,arguments)};a._spine_bone_get_a_y=function(){return(a._spine_bone_get_a_y=a.asm.spine_bone_get_a_y).apply(null,arguments)};a._spine_bone_set_a_y=function(){return(a._spine_bone_set_a_y=a.asm.spine_bone_set_a_y).apply(null,arguments)}; +a._spine_bone_get_a_scale_x=function(){return(a._spine_bone_get_a_scale_x=a.asm.spine_bone_get_a_scale_x).apply(null,arguments)};a._spine_bone_set_a_scale_x=function(){return(a._spine_bone_set_a_scale_x=a.asm.spine_bone_set_a_scale_x).apply(null,arguments)};a._spine_bone_get_a_scale_y=function(){return(a._spine_bone_get_a_scale_y=a.asm.spine_bone_get_a_scale_y).apply(null,arguments)}; +a._spine_bone_set_a_scale_y=function(){return(a._spine_bone_set_a_scale_y=a.asm.spine_bone_set_a_scale_y).apply(null,arguments)};a._spine_bone_get_a_shear_x=function(){return(a._spine_bone_get_a_shear_x=a.asm.spine_bone_get_a_shear_x).apply(null,arguments)};a._spine_bone_set_a_shear_x=function(){return(a._spine_bone_set_a_shear_x=a.asm.spine_bone_set_a_shear_x).apply(null,arguments)}; +a._spine_bone_get_a_shear_y=function(){return(a._spine_bone_get_a_shear_y=a.asm.spine_bone_get_a_shear_y).apply(null,arguments)};a._spine_bone_get_a=function(){return(a._spine_bone_get_a=a.asm.spine_bone_get_a).apply(null,arguments)};a._spine_bone_set_a=function(){return(a._spine_bone_set_a=a.asm.spine_bone_set_a).apply(null,arguments)};a._spine_bone_get_b=function(){return(a._spine_bone_get_b=a.asm.spine_bone_get_b).apply(null,arguments)}; +a._spine_bone_set_b=function(){return(a._spine_bone_set_b=a.asm.spine_bone_set_b).apply(null,arguments)};a._spine_bone_get_c=function(){return(a._spine_bone_get_c=a.asm.spine_bone_get_c).apply(null,arguments)};a._spine_bone_set_c=function(){return(a._spine_bone_set_c=a.asm.spine_bone_set_c).apply(null,arguments)};a._spine_bone_get_d=function(){return(a._spine_bone_get_d=a.asm.spine_bone_get_d).apply(null,arguments)}; +a._spine_bone_set_d=function(){return(a._spine_bone_set_d=a.asm.spine_bone_set_d).apply(null,arguments)};a._spine_bone_get_world_x=function(){return(a._spine_bone_get_world_x=a.asm.spine_bone_get_world_x).apply(null,arguments)};a._spine_bone_set_world_x=function(){return(a._spine_bone_set_world_x=a.asm.spine_bone_set_world_x).apply(null,arguments)};a._spine_bone_get_world_y=function(){return(a._spine_bone_get_world_y=a.asm.spine_bone_get_world_y).apply(null,arguments)}; +a._spine_bone_set_world_y=function(){return(a._spine_bone_set_world_y=a.asm.spine_bone_set_world_y).apply(null,arguments)};a._spine_bone_get_world_rotation_x=function(){return(a._spine_bone_get_world_rotation_x=a.asm.spine_bone_get_world_rotation_x).apply(null,arguments)};a._spine_bone_get_world_rotation_y=function(){return(a._spine_bone_get_world_rotation_y=a.asm.spine_bone_get_world_rotation_y).apply(null,arguments)}; +a._spine_bone_get_world_scale_x=function(){return(a._spine_bone_get_world_scale_x=a.asm.spine_bone_get_world_scale_x).apply(null,arguments)};a._spine_bone_get_world_scale_y=function(){return(a._spine_bone_get_world_scale_y=a.asm.spine_bone_get_world_scale_y).apply(null,arguments)};a._spine_bone_get_is_active=function(){return(a._spine_bone_get_is_active=a.asm.spine_bone_get_is_active).apply(null,arguments)}; +a._spine_bone_set_is_active=function(){return(a._spine_bone_set_is_active=a.asm.spine_bone_set_is_active).apply(null,arguments)};a._spine_bone_get_inherit=function(){return(a._spine_bone_get_inherit=a.asm.spine_bone_get_inherit).apply(null,arguments)};a._spine_bone_set_inherit=function(){return(a._spine_bone_set_inherit=a.asm.spine_bone_set_inherit).apply(null,arguments)};a._spine_attachment_get_name=function(){return(a._spine_attachment_get_name=a.asm.spine_attachment_get_name).apply(null,arguments)}; +a._spine_attachment_get_type=function(){return(a._spine_attachment_get_type=a.asm.spine_attachment_get_type).apply(null,arguments)};a._spine_attachment_copy=function(){return(a._spine_attachment_copy=a.asm.spine_attachment_copy).apply(null,arguments)};a._spine_attachment_dispose=function(){return(a._spine_attachment_dispose=a.asm.spine_attachment_dispose).apply(null,arguments)}; +a._spine_point_attachment_compute_world_position=function(){return(a._spine_point_attachment_compute_world_position=a.asm.spine_point_attachment_compute_world_position).apply(null,arguments)};a._spine_point_attachment_compute_world_rotation=function(){return(a._spine_point_attachment_compute_world_rotation=a.asm.spine_point_attachment_compute_world_rotation).apply(null,arguments)}; +a._spine_point_attachment_get_x=function(){return(a._spine_point_attachment_get_x=a.asm.spine_point_attachment_get_x).apply(null,arguments)};a._spine_point_attachment_set_x=function(){return(a._spine_point_attachment_set_x=a.asm.spine_point_attachment_set_x).apply(null,arguments)};a._spine_point_attachment_get_y=function(){return(a._spine_point_attachment_get_y=a.asm.spine_point_attachment_get_y).apply(null,arguments)}; +a._spine_point_attachment_set_y=function(){return(a._spine_point_attachment_set_y=a.asm.spine_point_attachment_set_y).apply(null,arguments)};a._spine_point_attachment_get_rotation=function(){return(a._spine_point_attachment_get_rotation=a.asm.spine_point_attachment_get_rotation).apply(null,arguments)};a._spine_point_attachment_set_rotation=function(){return(a._spine_point_attachment_set_rotation=a.asm.spine_point_attachment_set_rotation).apply(null,arguments)}; +a._spine_point_attachment_get_color=function(){return(a._spine_point_attachment_get_color=a.asm.spine_point_attachment_get_color).apply(null,arguments)};a._spine_point_attachment_set_color=function(){return(a._spine_point_attachment_set_color=a.asm.spine_point_attachment_set_color).apply(null,arguments)};a._spine_region_attachment_update_region=function(){return(a._spine_region_attachment_update_region=a.asm.spine_region_attachment_update_region).apply(null,arguments)}; +a._spine_region_attachment_compute_world_vertices=function(){return(a._spine_region_attachment_compute_world_vertices=a.asm.spine_region_attachment_compute_world_vertices).apply(null,arguments)};a._spine_region_attachment_get_x=function(){return(a._spine_region_attachment_get_x=a.asm.spine_region_attachment_get_x).apply(null,arguments)};a._spine_region_attachment_set_x=function(){return(a._spine_region_attachment_set_x=a.asm.spine_region_attachment_set_x).apply(null,arguments)}; +a._spine_region_attachment_get_y=function(){return(a._spine_region_attachment_get_y=a.asm.spine_region_attachment_get_y).apply(null,arguments)};a._spine_region_attachment_set_y=function(){return(a._spine_region_attachment_set_y=a.asm.spine_region_attachment_set_y).apply(null,arguments)};a._spine_region_attachment_get_rotation=function(){return(a._spine_region_attachment_get_rotation=a.asm.spine_region_attachment_get_rotation).apply(null,arguments)}; +a._spine_region_attachment_set_rotation=function(){return(a._spine_region_attachment_set_rotation=a.asm.spine_region_attachment_set_rotation).apply(null,arguments)};a._spine_region_attachment_get_scale_x=function(){return(a._spine_region_attachment_get_scale_x=a.asm.spine_region_attachment_get_scale_x).apply(null,arguments)};a._spine_region_attachment_set_scale_x=function(){return(a._spine_region_attachment_set_scale_x=a.asm.spine_region_attachment_set_scale_x).apply(null,arguments)}; +a._spine_region_attachment_get_scale_y=function(){return(a._spine_region_attachment_get_scale_y=a.asm.spine_region_attachment_get_scale_y).apply(null,arguments)};a._spine_region_attachment_set_scale_y=function(){return(a._spine_region_attachment_set_scale_y=a.asm.spine_region_attachment_set_scale_y).apply(null,arguments)};a._spine_region_attachment_get_width=function(){return(a._spine_region_attachment_get_width=a.asm.spine_region_attachment_get_width).apply(null,arguments)}; +a._spine_region_attachment_set_width=function(){return(a._spine_region_attachment_set_width=a.asm.spine_region_attachment_set_width).apply(null,arguments)};a._spine_region_attachment_get_height=function(){return(a._spine_region_attachment_get_height=a.asm.spine_region_attachment_get_height).apply(null,arguments)};a._spine_region_attachment_set_height=function(){return(a._spine_region_attachment_set_height=a.asm.spine_region_attachment_set_height).apply(null,arguments)}; +a._spine_region_attachment_get_color=function(){return(a._spine_region_attachment_get_color=a.asm.spine_region_attachment_get_color).apply(null,arguments)};a._spine_region_attachment_set_color=function(){return(a._spine_region_attachment_set_color=a.asm.spine_region_attachment_set_color).apply(null,arguments)};a._spine_region_attachment_get_path=function(){return(a._spine_region_attachment_get_path=a.asm.spine_region_attachment_get_path).apply(null,arguments)}; +a._spine_region_attachment_get_region=function(){return(a._spine_region_attachment_get_region=a.asm.spine_region_attachment_get_region).apply(null,arguments)};a._spine_region_attachment_get_sequence=function(){return(a._spine_region_attachment_get_sequence=a.asm.spine_region_attachment_get_sequence).apply(null,arguments)};a._spine_region_attachment_get_num_offset=function(){return(a._spine_region_attachment_get_num_offset=a.asm.spine_region_attachment_get_num_offset).apply(null,arguments)}; +a._spine_region_attachment_get_offset=function(){return(a._spine_region_attachment_get_offset=a.asm.spine_region_attachment_get_offset).apply(null,arguments)};a._spine_region_attachment_get_num_uvs=function(){return(a._spine_region_attachment_get_num_uvs=a.asm.spine_region_attachment_get_num_uvs).apply(null,arguments)};a._spine_region_attachment_get_uvs=function(){return(a._spine_region_attachment_get_uvs=a.asm.spine_region_attachment_get_uvs).apply(null,arguments)}; +a._spine_vertex_attachment_get_world_vertices_length=function(){return(a._spine_vertex_attachment_get_world_vertices_length=a.asm.spine_vertex_attachment_get_world_vertices_length).apply(null,arguments)};a._spine_vertex_attachment_compute_world_vertices=function(){return(a._spine_vertex_attachment_compute_world_vertices=a.asm.spine_vertex_attachment_compute_world_vertices).apply(null,arguments)}; +a._spine_vertex_attachment_get_num_bones=function(){return(a._spine_vertex_attachment_get_num_bones=a.asm.spine_vertex_attachment_get_num_bones).apply(null,arguments)};a._spine_vertex_attachment_get_bones=function(){return(a._spine_vertex_attachment_get_bones=a.asm.spine_vertex_attachment_get_bones).apply(null,arguments)};a._spine_vertex_attachment_get_num_vertices=function(){return(a._spine_vertex_attachment_get_num_vertices=a.asm.spine_vertex_attachment_get_num_vertices).apply(null,arguments)}; +a._spine_vertex_attachment_get_vertices=function(){return(a._spine_vertex_attachment_get_vertices=a.asm.spine_vertex_attachment_get_vertices).apply(null,arguments)};a._spine_vertex_attachment_get_timeline_attachment=function(){return(a._spine_vertex_attachment_get_timeline_attachment=a.asm.spine_vertex_attachment_get_timeline_attachment).apply(null,arguments)}; +a._spine_vertex_attachment_set_timeline_attachment=function(){return(a._spine_vertex_attachment_set_timeline_attachment=a.asm.spine_vertex_attachment_set_timeline_attachment).apply(null,arguments)};a._spine_mesh_attachment_update_region=function(){return(a._spine_mesh_attachment_update_region=a.asm.spine_mesh_attachment_update_region).apply(null,arguments)}; +a._spine_mesh_attachment_get_hull_length=function(){return(a._spine_mesh_attachment_get_hull_length=a.asm.spine_mesh_attachment_get_hull_length).apply(null,arguments)};a._spine_mesh_attachment_set_hull_length=function(){return(a._spine_mesh_attachment_set_hull_length=a.asm.spine_mesh_attachment_set_hull_length).apply(null,arguments)}; +a._spine_mesh_attachment_get_num_region_uvs=function(){return(a._spine_mesh_attachment_get_num_region_uvs=a.asm.spine_mesh_attachment_get_num_region_uvs).apply(null,arguments)};a._spine_mesh_attachment_get_region_uvs=function(){return(a._spine_mesh_attachment_get_region_uvs=a.asm.spine_mesh_attachment_get_region_uvs).apply(null,arguments)};a._spine_mesh_attachment_get_num_uvs=function(){return(a._spine_mesh_attachment_get_num_uvs=a.asm.spine_mesh_attachment_get_num_uvs).apply(null,arguments)}; +a._spine_mesh_attachment_get_uvs=function(){return(a._spine_mesh_attachment_get_uvs=a.asm.spine_mesh_attachment_get_uvs).apply(null,arguments)};a._spine_mesh_attachment_get_num_triangles=function(){return(a._spine_mesh_attachment_get_num_triangles=a.asm.spine_mesh_attachment_get_num_triangles).apply(null,arguments)};a._spine_mesh_attachment_get_triangles=function(){return(a._spine_mesh_attachment_get_triangles=a.asm.spine_mesh_attachment_get_triangles).apply(null,arguments)}; +a._spine_mesh_attachment_get_color=function(){return(a._spine_mesh_attachment_get_color=a.asm.spine_mesh_attachment_get_color).apply(null,arguments)};a._spine_mesh_attachment_set_color=function(){return(a._spine_mesh_attachment_set_color=a.asm.spine_mesh_attachment_set_color).apply(null,arguments)};a._spine_mesh_attachment_get_path=function(){return(a._spine_mesh_attachment_get_path=a.asm.spine_mesh_attachment_get_path).apply(null,arguments)}; +a._spine_mesh_attachment_get_region=function(){return(a._spine_mesh_attachment_get_region=a.asm.spine_mesh_attachment_get_region).apply(null,arguments)};a._spine_mesh_attachment_get_sequence=function(){return(a._spine_mesh_attachment_get_sequence=a.asm.spine_mesh_attachment_get_sequence).apply(null,arguments)};a._spine_mesh_attachment_get_parent_mesh=function(){return(a._spine_mesh_attachment_get_parent_mesh=a.asm.spine_mesh_attachment_get_parent_mesh).apply(null,arguments)}; +a._spine_mesh_attachment_set_parent_mesh=function(){return(a._spine_mesh_attachment_set_parent_mesh=a.asm.spine_mesh_attachment_set_parent_mesh).apply(null,arguments)};a._spine_mesh_attachment_get_num_edges=function(){return(a._spine_mesh_attachment_get_num_edges=a.asm.spine_mesh_attachment_get_num_edges).apply(null,arguments)};a._spine_mesh_attachment_get_edges=function(){return(a._spine_mesh_attachment_get_edges=a.asm.spine_mesh_attachment_get_edges).apply(null,arguments)}; +a._spine_mesh_attachment_get_width=function(){return(a._spine_mesh_attachment_get_width=a.asm.spine_mesh_attachment_get_width).apply(null,arguments)};a._spine_mesh_attachment_set_width=function(){return(a._spine_mesh_attachment_set_width=a.asm.spine_mesh_attachment_set_width).apply(null,arguments)};a._spine_mesh_attachment_get_height=function(){return(a._spine_mesh_attachment_get_height=a.asm.spine_mesh_attachment_get_height).apply(null,arguments)}; +a._spine_mesh_attachment_set_height=function(){return(a._spine_mesh_attachment_set_height=a.asm.spine_mesh_attachment_set_height).apply(null,arguments)};a._spine_clipping_attachment_get_end_slot=function(){return(a._spine_clipping_attachment_get_end_slot=a.asm.spine_clipping_attachment_get_end_slot).apply(null,arguments)};a._spine_clipping_attachment_set_end_slot=function(){return(a._spine_clipping_attachment_set_end_slot=a.asm.spine_clipping_attachment_set_end_slot).apply(null,arguments)}; +a._spine_clipping_attachment_get_color=function(){return(a._spine_clipping_attachment_get_color=a.asm.spine_clipping_attachment_get_color).apply(null,arguments)};a._spine_clipping_attachment_set_color=function(){return(a._spine_clipping_attachment_set_color=a.asm.spine_clipping_attachment_set_color).apply(null,arguments)};a._spine_bounding_box_attachment_get_color=function(){return(a._spine_bounding_box_attachment_get_color=a.asm.spine_bounding_box_attachment_get_color).apply(null,arguments)}; +a._spine_bounding_box_attachment_set_color=function(){return(a._spine_bounding_box_attachment_set_color=a.asm.spine_bounding_box_attachment_set_color).apply(null,arguments)};a._spine_path_attachment_get_num_lengths=function(){return(a._spine_path_attachment_get_num_lengths=a.asm.spine_path_attachment_get_num_lengths).apply(null,arguments)};a._spine_path_attachment_get_lengths=function(){return(a._spine_path_attachment_get_lengths=a.asm.spine_path_attachment_get_lengths).apply(null,arguments)}; +a._spine_path_attachment_get_is_closed=function(){return(a._spine_path_attachment_get_is_closed=a.asm.spine_path_attachment_get_is_closed).apply(null,arguments)};a._spine_path_attachment_set_is_closed=function(){return(a._spine_path_attachment_set_is_closed=a.asm.spine_path_attachment_set_is_closed).apply(null,arguments)};a._spine_path_attachment_get_is_constant_speed=function(){return(a._spine_path_attachment_get_is_constant_speed=a.asm.spine_path_attachment_get_is_constant_speed).apply(null,arguments)}; +a._spine_path_attachment_set_is_constant_speed=function(){return(a._spine_path_attachment_set_is_constant_speed=a.asm.spine_path_attachment_set_is_constant_speed).apply(null,arguments)};a._spine_path_attachment_get_color=function(){return(a._spine_path_attachment_get_color=a.asm.spine_path_attachment_get_color).apply(null,arguments)};a._spine_path_attachment_set_color=function(){return(a._spine_path_attachment_set_color=a.asm.spine_path_attachment_set_color).apply(null,arguments)}; +a._spine_skin_set_attachment=function(){return(a._spine_skin_set_attachment=a.asm.spine_skin_set_attachment).apply(null,arguments)};a._spine_skin_get_attachment=function(){return(a._spine_skin_get_attachment=a.asm.spine_skin_get_attachment).apply(null,arguments)};a._spine_skin_remove_attachment=function(){return(a._spine_skin_remove_attachment=a.asm.spine_skin_remove_attachment).apply(null,arguments)}; +a._spine_skin_get_name=function(){return(a._spine_skin_get_name=a.asm.spine_skin_get_name).apply(null,arguments)};a._spine_skin_add_skin=function(){return(a._spine_skin_add_skin=a.asm.spine_skin_add_skin).apply(null,arguments)};a._spine_skin_copy_skin=function(){return(a._spine_skin_copy_skin=a.asm.spine_skin_copy_skin).apply(null,arguments)};a._spine_skin_get_entries=function(){return(a._spine_skin_get_entries=a.asm.spine_skin_get_entries).apply(null,arguments)}; +a._spine_skin_entries_get_num_entries=function(){return(a._spine_skin_entries_get_num_entries=a.asm.spine_skin_entries_get_num_entries).apply(null,arguments)};a._spine_skin_entries_get_entry=function(){return(a._spine_skin_entries_get_entry=a.asm.spine_skin_entries_get_entry).apply(null,arguments)};a._spine_skin_entries_dispose=function(){return(a._spine_skin_entries_dispose=a.asm.spine_skin_entries_dispose).apply(null,arguments)}; +a._spine_skin_entry_get_slot_index=function(){return(a._spine_skin_entry_get_slot_index=a.asm.spine_skin_entry_get_slot_index).apply(null,arguments)};a._spine_skin_entry_get_name=function(){return(a._spine_skin_entry_get_name=a.asm.spine_skin_entry_get_name).apply(null,arguments)};a._spine_skin_entry_get_attachment=function(){return(a._spine_skin_entry_get_attachment=a.asm.spine_skin_entry_get_attachment).apply(null,arguments)}; +a._spine_skin_get_num_bones=function(){return(a._spine_skin_get_num_bones=a.asm.spine_skin_get_num_bones).apply(null,arguments)};a._spine_skin_get_bones=function(){return(a._spine_skin_get_bones=a.asm.spine_skin_get_bones).apply(null,arguments)};a._spine_skin_get_num_constraints=function(){return(a._spine_skin_get_num_constraints=a.asm.spine_skin_get_num_constraints).apply(null,arguments)}; +a._spine_skin_get_constraints=function(){return(a._spine_skin_get_constraints=a.asm.spine_skin_get_constraints).apply(null,arguments)};a._spine_skin_create=function(){return(a._spine_skin_create=a.asm.spine_skin_create).apply(null,arguments)};a._spine_skin_dispose=function(){return(a._spine_skin_dispose=a.asm.spine_skin_dispose).apply(null,arguments)};a._spine_constraint_data_get_type=function(){return(a._spine_constraint_data_get_type=a.asm.spine_constraint_data_get_type).apply(null,arguments)}; +a._spine_constraint_data_get_name=function(){return(a._spine_constraint_data_get_name=a.asm.spine_constraint_data_get_name).apply(null,arguments)};a._spine_constraint_data_get_order=function(){return(a._spine_constraint_data_get_order=a.asm.spine_constraint_data_get_order).apply(null,arguments)};a._spine_constraint_data_set_order=function(){return(a._spine_constraint_data_set_order=a.asm.spine_constraint_data_set_order).apply(null,arguments)}; +a._spine_constraint_data_get_is_skin_required=function(){return(a._spine_constraint_data_get_is_skin_required=a.asm.spine_constraint_data_get_is_skin_required).apply(null,arguments)};a._spine_constraint_data_set_is_skin_required=function(){return(a._spine_constraint_data_set_is_skin_required=a.asm.spine_constraint_data_set_is_skin_required).apply(null,arguments)}; +a._spine_ik_constraint_data_get_num_bones=function(){return(a._spine_ik_constraint_data_get_num_bones=a.asm.spine_ik_constraint_data_get_num_bones).apply(null,arguments)};a._spine_ik_constraint_data_get_bones=function(){return(a._spine_ik_constraint_data_get_bones=a.asm.spine_ik_constraint_data_get_bones).apply(null,arguments)};a._spine_ik_constraint_data_get_target=function(){return(a._spine_ik_constraint_data_get_target=a.asm.spine_ik_constraint_data_get_target).apply(null,arguments)}; +a._spine_ik_constraint_data_set_target=function(){return(a._spine_ik_constraint_data_set_target=a.asm.spine_ik_constraint_data_set_target).apply(null,arguments)};a._spine_ik_constraint_data_get_bend_direction=function(){return(a._spine_ik_constraint_data_get_bend_direction=a.asm.spine_ik_constraint_data_get_bend_direction).apply(null,arguments)}; +a._spine_ik_constraint_data_set_bend_direction=function(){return(a._spine_ik_constraint_data_set_bend_direction=a.asm.spine_ik_constraint_data_set_bend_direction).apply(null,arguments)};a._spine_ik_constraint_data_get_compress=function(){return(a._spine_ik_constraint_data_get_compress=a.asm.spine_ik_constraint_data_get_compress).apply(null,arguments)}; +a._spine_ik_constraint_data_set_compress=function(){return(a._spine_ik_constraint_data_set_compress=a.asm.spine_ik_constraint_data_set_compress).apply(null,arguments)};a._spine_ik_constraint_data_get_stretch=function(){return(a._spine_ik_constraint_data_get_stretch=a.asm.spine_ik_constraint_data_get_stretch).apply(null,arguments)};a._spine_ik_constraint_data_set_stretch=function(){return(a._spine_ik_constraint_data_set_stretch=a.asm.spine_ik_constraint_data_set_stretch).apply(null,arguments)}; +a._spine_ik_constraint_data_get_uniform=function(){return(a._spine_ik_constraint_data_get_uniform=a.asm.spine_ik_constraint_data_get_uniform).apply(null,arguments)};a._spine_ik_constraint_data_get_mix=function(){return(a._spine_ik_constraint_data_get_mix=a.asm.spine_ik_constraint_data_get_mix).apply(null,arguments)};a._spine_ik_constraint_data_set_mix=function(){return(a._spine_ik_constraint_data_set_mix=a.asm.spine_ik_constraint_data_set_mix).apply(null,arguments)}; +a._spine_ik_constraint_data_get_softness=function(){return(a._spine_ik_constraint_data_get_softness=a.asm.spine_ik_constraint_data_get_softness).apply(null,arguments)};a._spine_ik_constraint_data_set_softness=function(){return(a._spine_ik_constraint_data_set_softness=a.asm.spine_ik_constraint_data_set_softness).apply(null,arguments)};a._spine_ik_constraint_update=function(){return(a._spine_ik_constraint_update=a.asm.spine_ik_constraint_update).apply(null,arguments)}; +a._spine_ik_constraint_get_order=function(){return(a._spine_ik_constraint_get_order=a.asm.spine_ik_constraint_get_order).apply(null,arguments)};a._spine_ik_constraint_get_data=function(){return(a._spine_ik_constraint_get_data=a.asm.spine_ik_constraint_get_data).apply(null,arguments)};a._spine_ik_constraint_get_num_bones=function(){return(a._spine_ik_constraint_get_num_bones=a.asm.spine_ik_constraint_get_num_bones).apply(null,arguments)}; +a._spine_ik_constraint_get_bones=function(){return(a._spine_ik_constraint_get_bones=a.asm.spine_ik_constraint_get_bones).apply(null,arguments)};a._spine_ik_constraint_get_target=function(){return(a._spine_ik_constraint_get_target=a.asm.spine_ik_constraint_get_target).apply(null,arguments)};a._spine_ik_constraint_set_target=function(){return(a._spine_ik_constraint_set_target=a.asm.spine_ik_constraint_set_target).apply(null,arguments)}; +a._spine_ik_constraint_get_bend_direction=function(){return(a._spine_ik_constraint_get_bend_direction=a.asm.spine_ik_constraint_get_bend_direction).apply(null,arguments)};a._spine_ik_constraint_set_bend_direction=function(){return(a._spine_ik_constraint_set_bend_direction=a.asm.spine_ik_constraint_set_bend_direction).apply(null,arguments)};a._spine_ik_constraint_get_compress=function(){return(a._spine_ik_constraint_get_compress=a.asm.spine_ik_constraint_get_compress).apply(null,arguments)}; +a._spine_ik_constraint_set_compress=function(){return(a._spine_ik_constraint_set_compress=a.asm.spine_ik_constraint_set_compress).apply(null,arguments)};a._spine_ik_constraint_get_stretch=function(){return(a._spine_ik_constraint_get_stretch=a.asm.spine_ik_constraint_get_stretch).apply(null,arguments)};a._spine_ik_constraint_set_stretch=function(){return(a._spine_ik_constraint_set_stretch=a.asm.spine_ik_constraint_set_stretch).apply(null,arguments)}; +a._spine_ik_constraint_get_mix=function(){return(a._spine_ik_constraint_get_mix=a.asm.spine_ik_constraint_get_mix).apply(null,arguments)};a._spine_ik_constraint_set_mix=function(){return(a._spine_ik_constraint_set_mix=a.asm.spine_ik_constraint_set_mix).apply(null,arguments)};a._spine_ik_constraint_get_softness=function(){return(a._spine_ik_constraint_get_softness=a.asm.spine_ik_constraint_get_softness).apply(null,arguments)}; +a._spine_ik_constraint_set_softness=function(){return(a._spine_ik_constraint_set_softness=a.asm.spine_ik_constraint_set_softness).apply(null,arguments)};a._spine_ik_constraint_get_is_active=function(){return(a._spine_ik_constraint_get_is_active=a.asm.spine_ik_constraint_get_is_active).apply(null,arguments)};a._spine_ik_constraint_set_is_active=function(){return(a._spine_ik_constraint_set_is_active=a.asm.spine_ik_constraint_set_is_active).apply(null,arguments)}; +a._spine_transform_constraint_data_get_num_bones=function(){return(a._spine_transform_constraint_data_get_num_bones=a.asm.spine_transform_constraint_data_get_num_bones).apply(null,arguments)};a._spine_transform_constraint_data_get_bones=function(){return(a._spine_transform_constraint_data_get_bones=a.asm.spine_transform_constraint_data_get_bones).apply(null,arguments)}; +a._spine_transform_constraint_data_get_target=function(){return(a._spine_transform_constraint_data_get_target=a.asm.spine_transform_constraint_data_get_target).apply(null,arguments)};a._spine_transform_constraint_data_set_target=function(){return(a._spine_transform_constraint_data_set_target=a.asm.spine_transform_constraint_data_set_target).apply(null,arguments)}; +a._spine_transform_constraint_data_get_mix_rotate=function(){return(a._spine_transform_constraint_data_get_mix_rotate=a.asm.spine_transform_constraint_data_get_mix_rotate).apply(null,arguments)};a._spine_transform_constraint_data_set_mix_rotate=function(){return(a._spine_transform_constraint_data_set_mix_rotate=a.asm.spine_transform_constraint_data_set_mix_rotate).apply(null,arguments)}; +a._spine_transform_constraint_data_get_mix_x=function(){return(a._spine_transform_constraint_data_get_mix_x=a.asm.spine_transform_constraint_data_get_mix_x).apply(null,arguments)};a._spine_transform_constraint_data_set_mix_x=function(){return(a._spine_transform_constraint_data_set_mix_x=a.asm.spine_transform_constraint_data_set_mix_x).apply(null,arguments)}; +a._spine_transform_constraint_data_get_mix_y=function(){return(a._spine_transform_constraint_data_get_mix_y=a.asm.spine_transform_constraint_data_get_mix_y).apply(null,arguments)};a._spine_transform_constraint_data_set_mix_y=function(){return(a._spine_transform_constraint_data_set_mix_y=a.asm.spine_transform_constraint_data_set_mix_y).apply(null,arguments)}; +a._spine_transform_constraint_data_get_mix_scale_x=function(){return(a._spine_transform_constraint_data_get_mix_scale_x=a.asm.spine_transform_constraint_data_get_mix_scale_x).apply(null,arguments)};a._spine_transform_constraint_data_set_mix_scale_x=function(){return(a._spine_transform_constraint_data_set_mix_scale_x=a.asm.spine_transform_constraint_data_set_mix_scale_x).apply(null,arguments)}; +a._spine_transform_constraint_data_get_mix_scale_y=function(){return(a._spine_transform_constraint_data_get_mix_scale_y=a.asm.spine_transform_constraint_data_get_mix_scale_y).apply(null,arguments)};a._spine_transform_constraint_data_set_mix_scale_y=function(){return(a._spine_transform_constraint_data_set_mix_scale_y=a.asm.spine_transform_constraint_data_set_mix_scale_y).apply(null,arguments)}; +a._spine_transform_constraint_data_get_mix_shear_y=function(){return(a._spine_transform_constraint_data_get_mix_shear_y=a.asm.spine_transform_constraint_data_get_mix_shear_y).apply(null,arguments)};a._spine_transform_constraint_data_set_mix_shear_y=function(){return(a._spine_transform_constraint_data_set_mix_shear_y=a.asm.spine_transform_constraint_data_set_mix_shear_y).apply(null,arguments)}; +a._spine_transform_constraint_data_get_offset_rotation=function(){return(a._spine_transform_constraint_data_get_offset_rotation=a.asm.spine_transform_constraint_data_get_offset_rotation).apply(null,arguments)};a._spine_transform_constraint_data_set_offset_rotation=function(){return(a._spine_transform_constraint_data_set_offset_rotation=a.asm.spine_transform_constraint_data_set_offset_rotation).apply(null,arguments)}; +a._spine_transform_constraint_data_get_offset_x=function(){return(a._spine_transform_constraint_data_get_offset_x=a.asm.spine_transform_constraint_data_get_offset_x).apply(null,arguments)};a._spine_transform_constraint_data_set_offset_x=function(){return(a._spine_transform_constraint_data_set_offset_x=a.asm.spine_transform_constraint_data_set_offset_x).apply(null,arguments)}; +a._spine_transform_constraint_data_get_offset_y=function(){return(a._spine_transform_constraint_data_get_offset_y=a.asm.spine_transform_constraint_data_get_offset_y).apply(null,arguments)};a._spine_transform_constraint_data_set_offset_y=function(){return(a._spine_transform_constraint_data_set_offset_y=a.asm.spine_transform_constraint_data_set_offset_y).apply(null,arguments)}; +a._spine_transform_constraint_data_get_offset_scale_x=function(){return(a._spine_transform_constraint_data_get_offset_scale_x=a.asm.spine_transform_constraint_data_get_offset_scale_x).apply(null,arguments)};a._spine_transform_constraint_data_set_offset_scale_x=function(){return(a._spine_transform_constraint_data_set_offset_scale_x=a.asm.spine_transform_constraint_data_set_offset_scale_x).apply(null,arguments)}; +a._spine_transform_constraint_data_get_offset_scale_y=function(){return(a._spine_transform_constraint_data_get_offset_scale_y=a.asm.spine_transform_constraint_data_get_offset_scale_y).apply(null,arguments)};a._spine_transform_constraint_data_set_offset_scale_y=function(){return(a._spine_transform_constraint_data_set_offset_scale_y=a.asm.spine_transform_constraint_data_set_offset_scale_y).apply(null,arguments)}; +a._spine_transform_constraint_data_get_offset_shear_y=function(){return(a._spine_transform_constraint_data_get_offset_shear_y=a.asm.spine_transform_constraint_data_get_offset_shear_y).apply(null,arguments)};a._spine_transform_constraint_data_set_offset_shear_y=function(){return(a._spine_transform_constraint_data_set_offset_shear_y=a.asm.spine_transform_constraint_data_set_offset_shear_y).apply(null,arguments)}; +a._spine_transform_constraint_data_get_is_relative=function(){return(a._spine_transform_constraint_data_get_is_relative=a.asm.spine_transform_constraint_data_get_is_relative).apply(null,arguments)};a._spine_transform_constraint_data_set_is_relative=function(){return(a._spine_transform_constraint_data_set_is_relative=a.asm.spine_transform_constraint_data_set_is_relative).apply(null,arguments)}; +a._spine_transform_constraint_data_get_is_local=function(){return(a._spine_transform_constraint_data_get_is_local=a.asm.spine_transform_constraint_data_get_is_local).apply(null,arguments)};a._spine_transform_constraint_data_set_is_local=function(){return(a._spine_transform_constraint_data_set_is_local=a.asm.spine_transform_constraint_data_set_is_local).apply(null,arguments)}; +a._spine_transform_constraint_update=function(){return(a._spine_transform_constraint_update=a.asm.spine_transform_constraint_update).apply(null,arguments)};a._spine_transform_constraint_get_order=function(){return(a._spine_transform_constraint_get_order=a.asm.spine_transform_constraint_get_order).apply(null,arguments)};a._spine_transform_constraint_get_data=function(){return(a._spine_transform_constraint_get_data=a.asm.spine_transform_constraint_get_data).apply(null,arguments)}; +a._spine_transform_constraint_get_num_bones=function(){return(a._spine_transform_constraint_get_num_bones=a.asm.spine_transform_constraint_get_num_bones).apply(null,arguments)};a._spine_transform_constraint_get_bones=function(){return(a._spine_transform_constraint_get_bones=a.asm.spine_transform_constraint_get_bones).apply(null,arguments)};a._spine_transform_constraint_get_target=function(){return(a._spine_transform_constraint_get_target=a.asm.spine_transform_constraint_get_target).apply(null,arguments)}; +a._spine_transform_constraint_set_target=function(){return(a._spine_transform_constraint_set_target=a.asm.spine_transform_constraint_set_target).apply(null,arguments)};a._spine_transform_constraint_get_mix_rotate=function(){return(a._spine_transform_constraint_get_mix_rotate=a.asm.spine_transform_constraint_get_mix_rotate).apply(null,arguments)}; +a._spine_transform_constraint_set_mix_rotate=function(){return(a._spine_transform_constraint_set_mix_rotate=a.asm.spine_transform_constraint_set_mix_rotate).apply(null,arguments)};a._spine_transform_constraint_get_mix_x=function(){return(a._spine_transform_constraint_get_mix_x=a.asm.spine_transform_constraint_get_mix_x).apply(null,arguments)};a._spine_transform_constraint_set_mix_x=function(){return(a._spine_transform_constraint_set_mix_x=a.asm.spine_transform_constraint_set_mix_x).apply(null,arguments)}; +a._spine_transform_constraint_get_mix_y=function(){return(a._spine_transform_constraint_get_mix_y=a.asm.spine_transform_constraint_get_mix_y).apply(null,arguments)};a._spine_transform_constraint_set_mix_y=function(){return(a._spine_transform_constraint_set_mix_y=a.asm.spine_transform_constraint_set_mix_y).apply(null,arguments)}; +a._spine_transform_constraint_get_mix_scale_x=function(){return(a._spine_transform_constraint_get_mix_scale_x=a.asm.spine_transform_constraint_get_mix_scale_x).apply(null,arguments)};a._spine_transform_constraint_set_mix_scale_x=function(){return(a._spine_transform_constraint_set_mix_scale_x=a.asm.spine_transform_constraint_set_mix_scale_x).apply(null,arguments)}; +a._spine_transform_constraint_get_mix_scale_y=function(){return(a._spine_transform_constraint_get_mix_scale_y=a.asm.spine_transform_constraint_get_mix_scale_y).apply(null,arguments)};a._spine_transform_constraint_set_mix_scale_y=function(){return(a._spine_transform_constraint_set_mix_scale_y=a.asm.spine_transform_constraint_set_mix_scale_y).apply(null,arguments)}; +a._spine_transform_constraint_get_mix_shear_y=function(){return(a._spine_transform_constraint_get_mix_shear_y=a.asm.spine_transform_constraint_get_mix_shear_y).apply(null,arguments)};a._spine_transform_constraint_set_mix_shear_y=function(){return(a._spine_transform_constraint_set_mix_shear_y=a.asm.spine_transform_constraint_set_mix_shear_y).apply(null,arguments)}; +a._spine_transform_constraint_get_is_active=function(){return(a._spine_transform_constraint_get_is_active=a.asm.spine_transform_constraint_get_is_active).apply(null,arguments)};a._spine_transform_constraint_set_is_active=function(){return(a._spine_transform_constraint_set_is_active=a.asm.spine_transform_constraint_set_is_active).apply(null,arguments)}; +a._spine_path_constraint_data_get_num_bones=function(){return(a._spine_path_constraint_data_get_num_bones=a.asm.spine_path_constraint_data_get_num_bones).apply(null,arguments)};a._spine_path_constraint_data_get_bones=function(){return(a._spine_path_constraint_data_get_bones=a.asm.spine_path_constraint_data_get_bones).apply(null,arguments)};a._spine_path_constraint_data_get_target=function(){return(a._spine_path_constraint_data_get_target=a.asm.spine_path_constraint_data_get_target).apply(null,arguments)}; +a._spine_path_constraint_data_set_target=function(){return(a._spine_path_constraint_data_set_target=a.asm.spine_path_constraint_data_set_target).apply(null,arguments)};a._spine_path_constraint_data_get_position_mode=function(){return(a._spine_path_constraint_data_get_position_mode=a.asm.spine_path_constraint_data_get_position_mode).apply(null,arguments)}; +a._spine_path_constraint_data_set_position_mode=function(){return(a._spine_path_constraint_data_set_position_mode=a.asm.spine_path_constraint_data_set_position_mode).apply(null,arguments)};a._spine_path_constraint_data_get_spacing_mode=function(){return(a._spine_path_constraint_data_get_spacing_mode=a.asm.spine_path_constraint_data_get_spacing_mode).apply(null,arguments)}; +a._spine_path_constraint_data_set_spacing_mode=function(){return(a._spine_path_constraint_data_set_spacing_mode=a.asm.spine_path_constraint_data_set_spacing_mode).apply(null,arguments)};a._spine_path_constraint_data_get_rotate_mode=function(){return(a._spine_path_constraint_data_get_rotate_mode=a.asm.spine_path_constraint_data_get_rotate_mode).apply(null,arguments)}; +a._spine_path_constraint_data_set_rotate_mode=function(){return(a._spine_path_constraint_data_set_rotate_mode=a.asm.spine_path_constraint_data_set_rotate_mode).apply(null,arguments)};a._spine_path_constraint_data_get_offset_rotation=function(){return(a._spine_path_constraint_data_get_offset_rotation=a.asm.spine_path_constraint_data_get_offset_rotation).apply(null,arguments)}; +a._spine_path_constraint_data_set_offset_rotation=function(){return(a._spine_path_constraint_data_set_offset_rotation=a.asm.spine_path_constraint_data_set_offset_rotation).apply(null,arguments)};a._spine_path_constraint_data_get_position=function(){return(a._spine_path_constraint_data_get_position=a.asm.spine_path_constraint_data_get_position).apply(null,arguments)}; +a._spine_path_constraint_data_set_position=function(){return(a._spine_path_constraint_data_set_position=a.asm.spine_path_constraint_data_set_position).apply(null,arguments)};a._spine_path_constraint_data_get_spacing=function(){return(a._spine_path_constraint_data_get_spacing=a.asm.spine_path_constraint_data_get_spacing).apply(null,arguments)}; +a._spine_path_constraint_data_set_spacing=function(){return(a._spine_path_constraint_data_set_spacing=a.asm.spine_path_constraint_data_set_spacing).apply(null,arguments)};a._spine_path_constraint_data_get_mix_rotate=function(){return(a._spine_path_constraint_data_get_mix_rotate=a.asm.spine_path_constraint_data_get_mix_rotate).apply(null,arguments)}; +a._spine_path_constraint_data_set_mix_rotate=function(){return(a._spine_path_constraint_data_set_mix_rotate=a.asm.spine_path_constraint_data_set_mix_rotate).apply(null,arguments)};a._spine_path_constraint_data_get_mix_x=function(){return(a._spine_path_constraint_data_get_mix_x=a.asm.spine_path_constraint_data_get_mix_x).apply(null,arguments)};a._spine_path_constraint_data_set_mix_x=function(){return(a._spine_path_constraint_data_set_mix_x=a.asm.spine_path_constraint_data_set_mix_x).apply(null,arguments)}; +a._spine_path_constraint_data_get_mix_y=function(){return(a._spine_path_constraint_data_get_mix_y=a.asm.spine_path_constraint_data_get_mix_y).apply(null,arguments)};a._spine_path_constraint_data_set_mix_y=function(){return(a._spine_path_constraint_data_set_mix_y=a.asm.spine_path_constraint_data_set_mix_y).apply(null,arguments)};a._spine_path_constraint_update=function(){return(a._spine_path_constraint_update=a.asm.spine_path_constraint_update).apply(null,arguments)}; +a._spine_path_constraint_get_order=function(){return(a._spine_path_constraint_get_order=a.asm.spine_path_constraint_get_order).apply(null,arguments)};a._spine_path_constraint_get_data=function(){return(a._spine_path_constraint_get_data=a.asm.spine_path_constraint_get_data).apply(null,arguments)};a._spine_path_constraint_get_num_bones=function(){return(a._spine_path_constraint_get_num_bones=a.asm.spine_path_constraint_get_num_bones).apply(null,arguments)}; +a._spine_path_constraint_get_bones=function(){return(a._spine_path_constraint_get_bones=a.asm.spine_path_constraint_get_bones).apply(null,arguments)};a._spine_path_constraint_get_target=function(){return(a._spine_path_constraint_get_target=a.asm.spine_path_constraint_get_target).apply(null,arguments)};a._spine_path_constraint_set_target=function(){return(a._spine_path_constraint_set_target=a.asm.spine_path_constraint_set_target).apply(null,arguments)}; +a._spine_path_constraint_get_position=function(){return(a._spine_path_constraint_get_position=a.asm.spine_path_constraint_get_position).apply(null,arguments)};a._spine_path_constraint_set_position=function(){return(a._spine_path_constraint_set_position=a.asm.spine_path_constraint_set_position).apply(null,arguments)};a._spine_path_constraint_get_spacing=function(){return(a._spine_path_constraint_get_spacing=a.asm.spine_path_constraint_get_spacing).apply(null,arguments)}; +a._spine_path_constraint_set_spacing=function(){return(a._spine_path_constraint_set_spacing=a.asm.spine_path_constraint_set_spacing).apply(null,arguments)};a._spine_path_constraint_get_mix_rotate=function(){return(a._spine_path_constraint_get_mix_rotate=a.asm.spine_path_constraint_get_mix_rotate).apply(null,arguments)};a._spine_path_constraint_set_mix_rotate=function(){return(a._spine_path_constraint_set_mix_rotate=a.asm.spine_path_constraint_set_mix_rotate).apply(null,arguments)}; +a._spine_path_constraint_get_mix_x=function(){return(a._spine_path_constraint_get_mix_x=a.asm.spine_path_constraint_get_mix_x).apply(null,arguments)};a._spine_path_constraint_set_mix_x=function(){return(a._spine_path_constraint_set_mix_x=a.asm.spine_path_constraint_set_mix_x).apply(null,arguments)};a._spine_path_constraint_get_mix_y=function(){return(a._spine_path_constraint_get_mix_y=a.asm.spine_path_constraint_get_mix_y).apply(null,arguments)}; +a._spine_path_constraint_set_mix_y=function(){return(a._spine_path_constraint_set_mix_y=a.asm.spine_path_constraint_set_mix_y).apply(null,arguments)};a._spine_path_constraint_get_is_active=function(){return(a._spine_path_constraint_get_is_active=a.asm.spine_path_constraint_get_is_active).apply(null,arguments)};a._spine_path_constraint_set_is_active=function(){return(a._spine_path_constraint_set_is_active=a.asm.spine_path_constraint_set_is_active).apply(null,arguments)}; +a._spine_physics_constraint_data_set_bone=function(){return(a._spine_physics_constraint_data_set_bone=a.asm.spine_physics_constraint_data_set_bone).apply(null,arguments)};a._spine_physics_constraint_data_get_bone=function(){return(a._spine_physics_constraint_data_get_bone=a.asm.spine_physics_constraint_data_get_bone).apply(null,arguments)};a._spine_physics_constraint_data_set_x=function(){return(a._spine_physics_constraint_data_set_x=a.asm.spine_physics_constraint_data_set_x).apply(null,arguments)}; +a._spine_physics_constraint_data_get_x=function(){return(a._spine_physics_constraint_data_get_x=a.asm.spine_physics_constraint_data_get_x).apply(null,arguments)};a._spine_physics_constraint_data_set_y=function(){return(a._spine_physics_constraint_data_set_y=a.asm.spine_physics_constraint_data_set_y).apply(null,arguments)};a._spine_physics_constraint_data_get_y=function(){return(a._spine_physics_constraint_data_get_y=a.asm.spine_physics_constraint_data_get_y).apply(null,arguments)}; +a._spine_physics_constraint_data_set_rotate=function(){return(a._spine_physics_constraint_data_set_rotate=a.asm.spine_physics_constraint_data_set_rotate).apply(null,arguments)};a._spine_physics_constraint_data_get_rotate=function(){return(a._spine_physics_constraint_data_get_rotate=a.asm.spine_physics_constraint_data_get_rotate).apply(null,arguments)}; +a._spine_physics_constraint_data_set_scale_x=function(){return(a._spine_physics_constraint_data_set_scale_x=a.asm.spine_physics_constraint_data_set_scale_x).apply(null,arguments)};a._spine_physics_constraint_data_get_scale_x=function(){return(a._spine_physics_constraint_data_get_scale_x=a.asm.spine_physics_constraint_data_get_scale_x).apply(null,arguments)}; +a._spine_physics_constraint_data_set_shear_x=function(){return(a._spine_physics_constraint_data_set_shear_x=a.asm.spine_physics_constraint_data_set_shear_x).apply(null,arguments)};a._spine_physics_constraint_data_get_shear_x=function(){return(a._spine_physics_constraint_data_get_shear_x=a.asm.spine_physics_constraint_data_get_shear_x).apply(null,arguments)}; +a._spine_physics_constraint_data_set_limit=function(){return(a._spine_physics_constraint_data_set_limit=a.asm.spine_physics_constraint_data_set_limit).apply(null,arguments)};a._spine_physics_constraint_data_get_limit=function(){return(a._spine_physics_constraint_data_get_limit=a.asm.spine_physics_constraint_data_get_limit).apply(null,arguments)}; +a._spine_physics_constraint_data_set_step=function(){return(a._spine_physics_constraint_data_set_step=a.asm.spine_physics_constraint_data_set_step).apply(null,arguments)};a._spine_physics_constraint_data_get_step=function(){return(a._spine_physics_constraint_data_get_step=a.asm.spine_physics_constraint_data_get_step).apply(null,arguments)}; +a._spine_physics_constraint_data_set_inertia=function(){return(a._spine_physics_constraint_data_set_inertia=a.asm.spine_physics_constraint_data_set_inertia).apply(null,arguments)};a._spine_physics_constraint_data_get_inertia=function(){return(a._spine_physics_constraint_data_get_inertia=a.asm.spine_physics_constraint_data_get_inertia).apply(null,arguments)}; +a._spine_physics_constraint_data_set_strength=function(){return(a._spine_physics_constraint_data_set_strength=a.asm.spine_physics_constraint_data_set_strength).apply(null,arguments)};a._spine_physics_constraint_data_get_strength=function(){return(a._spine_physics_constraint_data_get_strength=a.asm.spine_physics_constraint_data_get_strength).apply(null,arguments)}; +a._spine_physics_constraint_data_set_damping=function(){return(a._spine_physics_constraint_data_set_damping=a.asm.spine_physics_constraint_data_set_damping).apply(null,arguments)};a._spine_physics_constraint_data_get_damping=function(){return(a._spine_physics_constraint_data_get_damping=a.asm.spine_physics_constraint_data_get_damping).apply(null,arguments)}; +a._spine_physics_constraint_data_set_mass_inverse=function(){return(a._spine_physics_constraint_data_set_mass_inverse=a.asm.spine_physics_constraint_data_set_mass_inverse).apply(null,arguments)};a._spine_physics_constraint_data_get_mass_inverse=function(){return(a._spine_physics_constraint_data_get_mass_inverse=a.asm.spine_physics_constraint_data_get_mass_inverse).apply(null,arguments)}; +a._spine_physics_constraint_data_set_wind=function(){return(a._spine_physics_constraint_data_set_wind=a.asm.spine_physics_constraint_data_set_wind).apply(null,arguments)};a._spine_physics_constraint_data_get_wind=function(){return(a._spine_physics_constraint_data_get_wind=a.asm.spine_physics_constraint_data_get_wind).apply(null,arguments)}; +a._spine_physics_constraint_data_set_gravity=function(){return(a._spine_physics_constraint_data_set_gravity=a.asm.spine_physics_constraint_data_set_gravity).apply(null,arguments)};a._spine_physics_constraint_data_get_gravity=function(){return(a._spine_physics_constraint_data_get_gravity=a.asm.spine_physics_constraint_data_get_gravity).apply(null,arguments)}; +a._spine_physics_constraint_data_set_mix=function(){return(a._spine_physics_constraint_data_set_mix=a.asm.spine_physics_constraint_data_set_mix).apply(null,arguments)};a._spine_physics_constraint_data_get_mix=function(){return(a._spine_physics_constraint_data_get_mix=a.asm.spine_physics_constraint_data_get_mix).apply(null,arguments)}; +a._spine_physics_constraint_data_set_inertia_global=function(){return(a._spine_physics_constraint_data_set_inertia_global=a.asm.spine_physics_constraint_data_set_inertia_global).apply(null,arguments)};a._spine_physics_constraint_data_is_inertia_global=function(){return(a._spine_physics_constraint_data_is_inertia_global=a.asm.spine_physics_constraint_data_is_inertia_global).apply(null,arguments)}; +a._spine_physics_constraint_data_set_strength_global=function(){return(a._spine_physics_constraint_data_set_strength_global=a.asm.spine_physics_constraint_data_set_strength_global).apply(null,arguments)};a._spine_physics_constraint_data_is_strength_global=function(){return(a._spine_physics_constraint_data_is_strength_global=a.asm.spine_physics_constraint_data_is_strength_global).apply(null,arguments)}; +a._spine_physics_constraint_data_set_damping_global=function(){return(a._spine_physics_constraint_data_set_damping_global=a.asm.spine_physics_constraint_data_set_damping_global).apply(null,arguments)};a._spine_physics_constraint_data_is_damping_global=function(){return(a._spine_physics_constraint_data_is_damping_global=a.asm.spine_physics_constraint_data_is_damping_global).apply(null,arguments)}; +a._spine_physics_constraint_data_set_mass_global=function(){return(a._spine_physics_constraint_data_set_mass_global=a.asm.spine_physics_constraint_data_set_mass_global).apply(null,arguments)};a._spine_physics_constraint_data_is_mass_global=function(){return(a._spine_physics_constraint_data_is_mass_global=a.asm.spine_physics_constraint_data_is_mass_global).apply(null,arguments)}; +a._spine_physics_constraint_data_set_wind_global=function(){return(a._spine_physics_constraint_data_set_wind_global=a.asm.spine_physics_constraint_data_set_wind_global).apply(null,arguments)};a._spine_physics_constraint_data_is_wind_global=function(){return(a._spine_physics_constraint_data_is_wind_global=a.asm.spine_physics_constraint_data_is_wind_global).apply(null,arguments)}; +a._spine_physics_constraint_data_set_gravity_global=function(){return(a._spine_physics_constraint_data_set_gravity_global=a.asm.spine_physics_constraint_data_set_gravity_global).apply(null,arguments)};a._spine_physics_constraint_data_is_gravity_global=function(){return(a._spine_physics_constraint_data_is_gravity_global=a.asm.spine_physics_constraint_data_is_gravity_global).apply(null,arguments)}; +a._spine_physics_constraint_data_set_mix_global=function(){return(a._spine_physics_constraint_data_set_mix_global=a.asm.spine_physics_constraint_data_set_mix_global).apply(null,arguments)};a._spine_physics_constraint_data_is_mix_global=function(){return(a._spine_physics_constraint_data_is_mix_global=a.asm.spine_physics_constraint_data_is_mix_global).apply(null,arguments)}; +a._spine_physics_constraint_set_bone=function(){return(a._spine_physics_constraint_set_bone=a.asm.spine_physics_constraint_set_bone).apply(null,arguments)};a._spine_physics_constraint_get_bone=function(){return(a._spine_physics_constraint_get_bone=a.asm.spine_physics_constraint_get_bone).apply(null,arguments)};a._spine_physics_constraint_set_inertia=function(){return(a._spine_physics_constraint_set_inertia=a.asm.spine_physics_constraint_set_inertia).apply(null,arguments)}; +a._spine_physics_constraint_get_inertia=function(){return(a._spine_physics_constraint_get_inertia=a.asm.spine_physics_constraint_get_inertia).apply(null,arguments)};a._spine_physics_constraint_set_strength=function(){return(a._spine_physics_constraint_set_strength=a.asm.spine_physics_constraint_set_strength).apply(null,arguments)};a._spine_physics_constraint_get_strength=function(){return(a._spine_physics_constraint_get_strength=a.asm.spine_physics_constraint_get_strength).apply(null,arguments)}; +a._spine_physics_constraint_set_damping=function(){return(a._spine_physics_constraint_set_damping=a.asm.spine_physics_constraint_set_damping).apply(null,arguments)};a._spine_physics_constraint_get_damping=function(){return(a._spine_physics_constraint_get_damping=a.asm.spine_physics_constraint_get_damping).apply(null,arguments)};a._spine_physics_constraint_set_mass_inverse=function(){return(a._spine_physics_constraint_set_mass_inverse=a.asm.spine_physics_constraint_set_mass_inverse).apply(null,arguments)}; +a._spine_physics_constraint_get_mass_inverse=function(){return(a._spine_physics_constraint_get_mass_inverse=a.asm.spine_physics_constraint_get_mass_inverse).apply(null,arguments)};a._spine_physics_constraint_set_wind=function(){return(a._spine_physics_constraint_set_wind=a.asm.spine_physics_constraint_set_wind).apply(null,arguments)};a._spine_physics_constraint_get_wind=function(){return(a._spine_physics_constraint_get_wind=a.asm.spine_physics_constraint_get_wind).apply(null,arguments)}; +a._spine_physics_constraint_set_gravity=function(){return(a._spine_physics_constraint_set_gravity=a.asm.spine_physics_constraint_set_gravity).apply(null,arguments)};a._spine_physics_constraint_get_gravity=function(){return(a._spine_physics_constraint_get_gravity=a.asm.spine_physics_constraint_get_gravity).apply(null,arguments)};a._spine_physics_constraint_set_mix=function(){return(a._spine_physics_constraint_set_mix=a.asm.spine_physics_constraint_set_mix).apply(null,arguments)}; +a._spine_physics_constraint_get_mix=function(){return(a._spine_physics_constraint_get_mix=a.asm.spine_physics_constraint_get_mix).apply(null,arguments)};a._spine_physics_constraint_set_reset=function(){return(a._spine_physics_constraint_set_reset=a.asm.spine_physics_constraint_set_reset).apply(null,arguments)};a._spine_physics_constraint_get_reset=function(){return(a._spine_physics_constraint_get_reset=a.asm.spine_physics_constraint_get_reset).apply(null,arguments)}; +a._spine_physics_constraint_set_ux=function(){return(a._spine_physics_constraint_set_ux=a.asm.spine_physics_constraint_set_ux).apply(null,arguments)};a._spine_physics_constraint_get_ux=function(){return(a._spine_physics_constraint_get_ux=a.asm.spine_physics_constraint_get_ux).apply(null,arguments)};a._spine_physics_constraint_set_uy=function(){return(a._spine_physics_constraint_set_uy=a.asm.spine_physics_constraint_set_uy).apply(null,arguments)}; +a._spine_physics_constraint_get_uy=function(){return(a._spine_physics_constraint_get_uy=a.asm.spine_physics_constraint_get_uy).apply(null,arguments)};a._spine_physics_constraint_set_cx=function(){return(a._spine_physics_constraint_set_cx=a.asm.spine_physics_constraint_set_cx).apply(null,arguments)};a._spine_physics_constraint_get_cx=function(){return(a._spine_physics_constraint_get_cx=a.asm.spine_physics_constraint_get_cx).apply(null,arguments)}; +a._spine_physics_constraint_set_cy=function(){return(a._spine_physics_constraint_set_cy=a.asm.spine_physics_constraint_set_cy).apply(null,arguments)};a._spine_physics_constraint_get_cy=function(){return(a._spine_physics_constraint_get_cy=a.asm.spine_physics_constraint_get_cy).apply(null,arguments)};a._spine_physics_constraint_set_tx=function(){return(a._spine_physics_constraint_set_tx=a.asm.spine_physics_constraint_set_tx).apply(null,arguments)}; +a._spine_physics_constraint_get_tx=function(){return(a._spine_physics_constraint_get_tx=a.asm.spine_physics_constraint_get_tx).apply(null,arguments)};a._spine_physics_constraint_set_ty=function(){return(a._spine_physics_constraint_set_ty=a.asm.spine_physics_constraint_set_ty).apply(null,arguments)};a._spine_physics_constraint_get_ty=function(){return(a._spine_physics_constraint_get_ty=a.asm.spine_physics_constraint_get_ty).apply(null,arguments)}; +a._spine_physics_constraint_set_x_offset=function(){return(a._spine_physics_constraint_set_x_offset=a.asm.spine_physics_constraint_set_x_offset).apply(null,arguments)};a._spine_physics_constraint_get_x_offset=function(){return(a._spine_physics_constraint_get_x_offset=a.asm.spine_physics_constraint_get_x_offset).apply(null,arguments)};a._spine_physics_constraint_set_x_velocity=function(){return(a._spine_physics_constraint_set_x_velocity=a.asm.spine_physics_constraint_set_x_velocity).apply(null,arguments)}; +a._spine_physics_constraint_get_x_velocity=function(){return(a._spine_physics_constraint_get_x_velocity=a.asm.spine_physics_constraint_get_x_velocity).apply(null,arguments)};a._spine_physics_constraint_set_y_offset=function(){return(a._spine_physics_constraint_set_y_offset=a.asm.spine_physics_constraint_set_y_offset).apply(null,arguments)};a._spine_physics_constraint_get_y_offset=function(){return(a._spine_physics_constraint_get_y_offset=a.asm.spine_physics_constraint_get_y_offset).apply(null,arguments)}; +a._spine_physics_constraint_set_y_velocity=function(){return(a._spine_physics_constraint_set_y_velocity=a.asm.spine_physics_constraint_set_y_velocity).apply(null,arguments)};a._spine_physics_constraint_get_y_velocity=function(){return(a._spine_physics_constraint_get_y_velocity=a.asm.spine_physics_constraint_get_y_velocity).apply(null,arguments)}; +a._spine_physics_constraint_set_rotate_offset=function(){return(a._spine_physics_constraint_set_rotate_offset=a.asm.spine_physics_constraint_set_rotate_offset).apply(null,arguments)};a._spine_physics_constraint_get_rotate_offset=function(){return(a._spine_physics_constraint_get_rotate_offset=a.asm.spine_physics_constraint_get_rotate_offset).apply(null,arguments)}; +a._spine_physics_constraint_set_rotate_velocity=function(){return(a._spine_physics_constraint_set_rotate_velocity=a.asm.spine_physics_constraint_set_rotate_velocity).apply(null,arguments)};a._spine_physics_constraint_get_rotate_velocity=function(){return(a._spine_physics_constraint_get_rotate_velocity=a.asm.spine_physics_constraint_get_rotate_velocity).apply(null,arguments)}; +a._spine_physics_constraint_set_scale_offset=function(){return(a._spine_physics_constraint_set_scale_offset=a.asm.spine_physics_constraint_set_scale_offset).apply(null,arguments)};a._spine_physics_constraint_get_scale_offset=function(){return(a._spine_physics_constraint_get_scale_offset=a.asm.spine_physics_constraint_get_scale_offset).apply(null,arguments)}; +a._spine_physics_constraint_set_scale_velocity=function(){return(a._spine_physics_constraint_set_scale_velocity=a.asm.spine_physics_constraint_set_scale_velocity).apply(null,arguments)};a._spine_physics_constraint_get_scale_velocity=function(){return(a._spine_physics_constraint_get_scale_velocity=a.asm.spine_physics_constraint_get_scale_velocity).apply(null,arguments)}; +a._spine_physics_constraint_set_active=function(){return(a._spine_physics_constraint_set_active=a.asm.spine_physics_constraint_set_active).apply(null,arguments)};a._spine_physics_constraint_is_active=function(){return(a._spine_physics_constraint_is_active=a.asm.spine_physics_constraint_is_active).apply(null,arguments)};a._spine_physics_constraint_set_remaining=function(){return(a._spine_physics_constraint_set_remaining=a.asm.spine_physics_constraint_set_remaining).apply(null,arguments)}; +a._spine_physics_constraint_get_remaining=function(){return(a._spine_physics_constraint_get_remaining=a.asm.spine_physics_constraint_get_remaining).apply(null,arguments)};a._spine_physics_constraint_set_last_time=function(){return(a._spine_physics_constraint_set_last_time=a.asm.spine_physics_constraint_set_last_time).apply(null,arguments)}; +a._spine_physics_constraint_get_last_time=function(){return(a._spine_physics_constraint_get_last_time=a.asm.spine_physics_constraint_get_last_time).apply(null,arguments)};a._spine_physics_constraint_reset=function(){return(a._spine_physics_constraint_reset=a.asm.spine_physics_constraint_reset).apply(null,arguments)};a._spine_physics_constraint_update=function(){return(a._spine_physics_constraint_update=a.asm.spine_physics_constraint_update).apply(null,arguments)}; +a._spine_physics_constraint_translate=function(){return(a._spine_physics_constraint_translate=a.asm.spine_physics_constraint_translate).apply(null,arguments)};a._spine_physics_constraint_rotate=function(){return(a._spine_physics_constraint_rotate=a.asm.spine_physics_constraint_rotate).apply(null,arguments)};a._spine_sequence_apply=function(){return(a._spine_sequence_apply=a.asm.spine_sequence_apply).apply(null,arguments)}; +a._spine_sequence_get_path=function(){return(a._spine_sequence_get_path=a.asm.spine_sequence_get_path).apply(null,arguments)};a._spine_sequence_get_id=function(){return(a._spine_sequence_get_id=a.asm.spine_sequence_get_id).apply(null,arguments)};a._spine_sequence_set_id=function(){return(a._spine_sequence_set_id=a.asm.spine_sequence_set_id).apply(null,arguments)};a._spine_sequence_get_start=function(){return(a._spine_sequence_get_start=a.asm.spine_sequence_get_start).apply(null,arguments)}; +a._spine_sequence_set_start=function(){return(a._spine_sequence_set_start=a.asm.spine_sequence_set_start).apply(null,arguments)};a._spine_sequence_get_digits=function(){return(a._spine_sequence_get_digits=a.asm.spine_sequence_get_digits).apply(null,arguments)};a._spine_sequence_set_digits=function(){return(a._spine_sequence_set_digits=a.asm.spine_sequence_set_digits).apply(null,arguments)}; +a._spine_sequence_get_setup_index=function(){return(a._spine_sequence_get_setup_index=a.asm.spine_sequence_get_setup_index).apply(null,arguments)};a._spine_sequence_set_setup_index=function(){return(a._spine_sequence_set_setup_index=a.asm.spine_sequence_set_setup_index).apply(null,arguments)};a._spine_sequence_get_num_regions=function(){return(a._spine_sequence_get_num_regions=a.asm.spine_sequence_get_num_regions).apply(null,arguments)}; +a._spine_sequence_get_regions=function(){return(a._spine_sequence_get_regions=a.asm.spine_sequence_get_regions).apply(null,arguments)};a._spine_texture_region_get_texture=function(){return(a._spine_texture_region_get_texture=a.asm.spine_texture_region_get_texture).apply(null,arguments)};a._spine_texture_region_set_texture=function(){return(a._spine_texture_region_set_texture=a.asm.spine_texture_region_set_texture).apply(null,arguments)}; +a._spine_texture_region_get_u=function(){return(a._spine_texture_region_get_u=a.asm.spine_texture_region_get_u).apply(null,arguments)};a._spine_texture_region_set_u=function(){return(a._spine_texture_region_set_u=a.asm.spine_texture_region_set_u).apply(null,arguments)};a._spine_texture_region_get_v=function(){return(a._spine_texture_region_get_v=a.asm.spine_texture_region_get_v).apply(null,arguments)}; +a._spine_texture_region_set_v=function(){return(a._spine_texture_region_set_v=a.asm.spine_texture_region_set_v).apply(null,arguments)};a._spine_texture_region_get_u2=function(){return(a._spine_texture_region_get_u2=a.asm.spine_texture_region_get_u2).apply(null,arguments)};a._spine_texture_region_set_u2=function(){return(a._spine_texture_region_set_u2=a.asm.spine_texture_region_set_u2).apply(null,arguments)}; +a._spine_texture_region_get_v2=function(){return(a._spine_texture_region_get_v2=a.asm.spine_texture_region_get_v2).apply(null,arguments)};a._spine_texture_region_set_v2=function(){return(a._spine_texture_region_set_v2=a.asm.spine_texture_region_set_v2).apply(null,arguments)};a._spine_texture_region_get_degrees=function(){return(a._spine_texture_region_get_degrees=a.asm.spine_texture_region_get_degrees).apply(null,arguments)}; +a._spine_texture_region_set_degrees=function(){return(a._spine_texture_region_set_degrees=a.asm.spine_texture_region_set_degrees).apply(null,arguments)};a._spine_texture_region_get_offset_x=function(){return(a._spine_texture_region_get_offset_x=a.asm.spine_texture_region_get_offset_x).apply(null,arguments)};a._spine_texture_region_set_offset_x=function(){return(a._spine_texture_region_set_offset_x=a.asm.spine_texture_region_set_offset_x).apply(null,arguments)}; +a._spine_texture_region_get_offset_y=function(){return(a._spine_texture_region_get_offset_y=a.asm.spine_texture_region_get_offset_y).apply(null,arguments)};a._spine_texture_region_set_offset_y=function(){return(a._spine_texture_region_set_offset_y=a.asm.spine_texture_region_set_offset_y).apply(null,arguments)};a._spine_texture_region_get_width=function(){return(a._spine_texture_region_get_width=a.asm.spine_texture_region_get_width).apply(null,arguments)}; +a._spine_texture_region_set_width=function(){return(a._spine_texture_region_set_width=a.asm.spine_texture_region_set_width).apply(null,arguments)};a._spine_texture_region_get_height=function(){return(a._spine_texture_region_get_height=a.asm.spine_texture_region_get_height).apply(null,arguments)};a._spine_texture_region_set_height=function(){return(a._spine_texture_region_set_height=a.asm.spine_texture_region_set_height).apply(null,arguments)}; +a._spine_texture_region_get_original_width=function(){return(a._spine_texture_region_get_original_width=a.asm.spine_texture_region_get_original_width).apply(null,arguments)};a._spine_texture_region_set_original_width=function(){return(a._spine_texture_region_set_original_width=a.asm.spine_texture_region_set_original_width).apply(null,arguments)}; +a._spine_texture_region_get_original_height=function(){return(a._spine_texture_region_get_original_height=a.asm.spine_texture_region_get_original_height).apply(null,arguments)};a._spine_texture_region_set_original_height=function(){return(a._spine_texture_region_set_original_height=a.asm.spine_texture_region_set_original_height).apply(null,arguments)};a._malloc=function(){return(a._malloc=a.asm.malloc).apply(null,arguments)}; +a.___errno_location=function(){return(a.___errno_location=a.asm.__errno_location).apply(null,arguments)};a.stackSave=function(){return(a.stackSave=a.asm.stackSave).apply(null,arguments)};a.stackRestore=function(){return(a.stackRestore=a.asm.stackRestore).apply(null,arguments)};a.stackAlloc=function(){return(a.stackAlloc=a.asm.stackAlloc).apply(null,arguments)};a.dynCall_jiji=function(){return(a.dynCall_jiji=a.asm.dynCall_jiji).apply(null,arguments)};var Z;R=function sa(){Z||ta();Z||(R=sa)}; +function ta(){function b(){if(!Z&&(Z=!0,a.calledRun=!0,!B)){V(ca);h(a);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;){var c=a.postRun.shift();da.unshift(c)}V(da)}}if(!(0 +#include +#include + +using namespace spine; + +struct Block { + int size; + int allocated; + uint8_t *memory; + + int free() { + return size - allocated; + } + + bool canFit(int numBytes) { + return free() >= numBytes; + } + + uint8_t *allocate(int numBytes) { + uint8_t *ptr = memory + allocated; + allocated += numBytes; + return ptr; + } +}; + +class BlockAllocator : public SpineObject { + int initialBlockSize; + Vector blocks; + +public: + BlockAllocator(int initialBlockSize) : initialBlockSize(initialBlockSize) { + blocks.add(newBlock(initialBlockSize)); + } + + ~BlockAllocator() { + for (int i = 0, n = (int) blocks.size(); i < n; i++) { + SpineExtension::free(blocks[i].memory, __FILE__, __LINE__); + } + } + + Block newBlock(int numBytes) { + Block block = {MathUtil::max(initialBlockSize, numBytes), 0, nullptr}; + block.memory = SpineExtension::alloc(block.size, __FILE__, __LINE__); + return block; + } + + template + T *allocate(size_t num) { + return (T *) _allocate((int) (sizeof(T) * num)); + } + + void compress() { + int totalSize = 0; + for (int i = 0, n = blocks.size(); i < n; i++) { + totalSize += blocks[i].size; + SpineExtension::free(blocks[i].memory, __FILE__, __LINE__); + } + blocks.clear(); + blocks.add(newBlock(totalSize)); + } + +private: + void *_allocate(int numBytes) { + // 16-byte align allocations + int alignedNumBytes = numBytes + (numBytes % 16 != 0 ? 16 - (numBytes % 16) : 0); + Block *block = &blocks[blocks.size() - 1]; + if (!block->canFit(alignedNumBytes)) { + blocks.add(newBlock(MathUtil::max(initialBlockSize, alignedNumBytes))); + block = &blocks[blocks.size() - 1]; + } + return block->allocate(alignedNumBytes); + } +}; + +struct AnimationStateEvent { + EventType type; + TrackEntry *entry; + Event *event; + AnimationStateEvent(EventType type, TrackEntry *entry, Event *event) : type(type), entry(entry), event(event){}; +}; + +struct EventListener : public AnimationStateListenerObject { + Vector events; + + void callback(AnimationState *state, EventType type, TrackEntry *entry, Event *event) { + events.add(AnimationStateEvent(type, entry, event)); + SP_UNUSED(state); + } +}; + +typedef struct _spine_atlas { + void *atlas; + utf8 **imagePaths; + int32_t numImagePaths; + utf8 *error; +} _spine_atlas; + +typedef struct _spine_skeleton_data_result { + spine_skeleton_data skeletonData; + utf8 *error; +} _spine_skeleton_data_result; + +typedef struct _spine_render_command { + float *positions; + float *uvs; + int32_t *colors; + int32_t numVertices; + uint16_t *indices; + int32_t numIndices; + int32_t atlasPage; + spine_blend_mode blendMode; + struct _spine_render_command *next; +} _spine_render_command; + +typedef struct _spine_bounds { + float x, y, width, height; +} _spine_bounds; + +typedef struct _spine_vector { + float x, y; +} _spine_vector; + +typedef struct _spine_skeleton_drawable : public SpineObject { + spine_skeleton skeleton; + spine_animation_state animationState; + spine_animation_state_data animationStateData; + spine_animation_state_events animationStateEvents; + void *clipping; + BlockAllocator *allocator; + Vector worldVertices; + Vector quadIndices; + Vector<_spine_render_command *> renderCommands; + + _spine_skeleton_drawable() { + quadIndices.add(0); + quadIndices.add(1); + quadIndices.add(2); + quadIndices.add(2); + quadIndices.add(3); + quadIndices.add(0); + } +} _spine_skeleton_drawable; + +typedef struct _spine_skin_entry { + int32_t slotIndex; + utf8 *name; + spine_attachment attachment; +} _spine_skin_entry; + +typedef struct _spine_skin_entries { + int32_t numEntries; + _spine_skin_entry *entries; +} _spine_skin_entries; + +static Color NULL_COLOR(0, 0, 0, 0); + +static SpineExtension *defaultExtension = nullptr; +static DebugExtension *debugExtension = nullptr; + +static void initExtensions() { + if (defaultExtension == nullptr) { + defaultExtension = new DefaultSpineExtension(); + debugExtension = new DebugExtension(defaultExtension); + } +} + +spine::SpineExtension *spine::getDefaultExtension() { + initExtensions(); + return defaultExtension; +} + +void spine_enable_debug_extension(spine_bool enable) { + initExtensions(); + SpineExtension::setInstance(enable ? debugExtension : defaultExtension); +} + +int32_t spine_major_version() { + return SPINE_MAJOR_VERSION; +} + +int32_t spine_minor_version() { + return SPINE_MINOR_VERSION; +} + +void spine_report_leaks() { + initExtensions(); + debugExtension->reportLeaks(); + fflush(stdout); +} + +// Color + +float spine_color_get_r(spine_color color) { + if (!color) return 0; + return ((Color *) color)->r; +} + +float spine_color_get_g(spine_color color) { + if (!color) return 0; + return ((Color *) color)->g; +} + +float spine_color_get_b(spine_color color) { + if (!color) return 0; + return ((Color *) color)->b; +} + +float spine_color_get_a(spine_color color) { + if (!color) return 0; + return ((Color *) color)->a; +} + +// Bounds + +float spine_bounds_get_x(spine_bounds bounds) { + if (!bounds) return 0; + return ((_spine_bounds *) bounds)->x; +} + +float spine_bounds_get_y(spine_bounds bounds) { + if (!bounds) return 0; + return ((_spine_bounds *) bounds)->y; +} + +float spine_bounds_get_width(spine_bounds bounds) { + if (!bounds) return 0; + return ((_spine_bounds *) bounds)->width; +} + +float spine_bounds_get_height(spine_bounds bounds) { + if (!bounds) return 0; + return ((_spine_bounds *) bounds)->height; +} + +// Vector +float spine_vector_get_x(spine_vector vector) { + if (!vector) return 0; + return ((_spine_vector *) vector)->x; +} + +float spine_vector_get_y(spine_vector vector) { + if (!vector) return 0; + return ((_spine_vector *) vector)->y; +} + +// Atlas + +spine_atlas spine_atlas_load(const utf8 *atlasData) { + if (!atlasData) return nullptr; + int32_t length = (int32_t) strlen(atlasData); + auto atlas = new (__FILE__, __LINE__) Atlas(atlasData, length, "", (TextureLoader *) nullptr, false); + _spine_atlas *result = SpineExtension::calloc<_spine_atlas>(1, __FILE__, __LINE__); + result->atlas = atlas; + result->numImagePaths = (int32_t) atlas->getPages().size(); + result->imagePaths = SpineExtension::calloc(result->numImagePaths, __FILE__, __LINE__); + for (int i = 0; i < result->numImagePaths; i++) { + result->imagePaths[i] = (utf8 *) strdup(atlas->getPages()[i]->texturePath.buffer()); + } + return (spine_atlas) result; +} + +int32_t spine_atlas_get_num_image_paths(spine_atlas atlas) { + if (!atlas) return 0; + return ((_spine_atlas *) atlas)->numImagePaths; +} + +utf8 *spine_atlas_get_image_path(spine_atlas atlas, int32_t index) { + if (!atlas) return nullptr; + return ((_spine_atlas *) atlas)->imagePaths[index]; +} + +utf8 *spine_atlas_get_error(spine_atlas atlas) { + if (!atlas) return nullptr; + return ((_spine_atlas *) atlas)->error; +} + +void spine_atlas_dispose(spine_atlas atlas) { + if (!atlas) return; + _spine_atlas *_atlas = (_spine_atlas *) atlas; + if (_atlas->atlas) delete (Atlas *) _atlas->atlas; + if (_atlas->error) free(_atlas->error); + for (int i = 0; i < _atlas->numImagePaths; i++) { + free(_atlas->imagePaths[i]); + } + SpineExtension::free(_atlas->imagePaths, __FILE__, __LINE__); + SpineExtension::free(_atlas, __FILE__, __LINE__); +} + +// SkeletonData + +spine_skeleton_data_result spine_skeleton_data_load_json(spine_atlas atlas, const utf8 *skeletonData) { + _spine_skeleton_data_result *result = SpineExtension::calloc<_spine_skeleton_data_result>(1, __FILE__, __LINE__); + _spine_atlas *_atlas = (_spine_atlas *) atlas; + Bone::setYDown(true); + if (!_atlas) return (spine_skeleton_data_result) result; + if (!_atlas->atlas) return (spine_skeleton_data_result) result; + if (!skeletonData) return (spine_skeleton_data_result) result; + SkeletonJson json((Atlas *) _atlas->atlas); + SkeletonData *data = json.readSkeletonData(skeletonData); + result->skeletonData = (spine_skeleton_data) data; + if (!json.getError().isEmpty()) { + result->error = (utf8 *) strdup(json.getError().buffer()); + } + return (spine_skeleton_data_result) result; +} + +spine_skeleton_data_result spine_skeleton_data_load_binary(spine_atlas atlas, const uint8_t *skeletonData, int32_t length) { + _spine_skeleton_data_result *result = SpineExtension::calloc<_spine_skeleton_data_result>(1, __FILE__, __LINE__); + _spine_atlas *_atlas = (_spine_atlas *) atlas; + Bone::setYDown(true); + if (!_atlas) return (spine_skeleton_data_result) result; + if (!_atlas->atlas) return (spine_skeleton_data_result) result; + if (!skeletonData) return (spine_skeleton_data_result) result; + if (length <= 0) return (spine_skeleton_data_result) result; + SkeletonBinary binary((Atlas *) _atlas->atlas); + SkeletonData *data = binary.readSkeletonData(skeletonData, length); + result->skeletonData = (spine_skeleton_data) data; + if (!binary.getError().isEmpty()) { + result->error = (utf8 *) strdup(binary.getError().buffer()); + } + return (spine_skeleton_data_result) result; +} + +utf8 *spine_skeleton_data_result_get_error(spine_skeleton_data_result result) { + if (!result) return nullptr; + return ((_spine_skeleton_data_result *) result)->error; +} +spine_skeleton_data spine_skeleton_data_result_get_data(spine_skeleton_data_result result) { + if (!result) return nullptr; + return ((_spine_skeleton_data_result *) result)->skeletonData; +} + +void spine_skeleton_data_result_dispose(spine_skeleton_data_result result) { + if (!result) return; + _spine_skeleton_data_result *_result = (_spine_skeleton_data_result *) result; + if (_result->error) SpineExtension::free(_result->error, __FILE__, __LINE__); + SpineExtension::free(_result, __FILE__, __LINE__); +} + +spine_bone_data spine_skeleton_data_find_bone(spine_skeleton_data data, const utf8 *name) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_bone_data) _data->findBone(name); +} + +spine_slot_data spine_skeleton_data_find_slot(spine_skeleton_data data, const utf8 *name) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_slot_data) _data->findSlot(name); +} + +spine_skin spine_skeleton_data_find_skin(spine_skeleton_data data, const utf8 *name) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_skin) _data->findSkin(name); +} + +spine_event_data spine_skeleton_data_find_event(spine_skeleton_data data, const utf8 *name) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_event_data) _data->findEvent(name); +} + +spine_animation spine_skeleton_data_find_animation(spine_skeleton_data data, const utf8 *name) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_animation) _data->findAnimation(name); +} + +spine_ik_constraint_data spine_skeleton_data_find_ik_constraint(spine_skeleton_data data, const utf8 *name) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_ik_constraint_data) _data->findIkConstraint(name); +} + +spine_transform_constraint_data spine_skeleton_data_find_transform_constraint(spine_skeleton_data data, const utf8 *name) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_transform_constraint_data) _data->findTransformConstraint(name); +} + +spine_path_constraint_data spine_skeleton_data_find_path_constraint(spine_skeleton_data data, const utf8 *name) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_path_constraint_data) _data->findPathConstraint(name); +} + +spine_physics_constraint_data spine_skeleton_data_find_physics_constraint(spine_skeleton_data data, const utf8 *name) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_physics_constraint_data) _data->findPhysicsConstraint(name); +} + +const utf8 *spine_skeleton_data_get_name(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (utf8 *) _data->getName().buffer(); +} + +int32_t spine_skeleton_data_get_num_bones(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return (int32_t) _data->getBones().size(); +} + +spine_bone_data *spine_skeleton_data_get_bones(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_bone_data *) _data->getBones().buffer(); +} + +int32_t spine_skeleton_data_get_num_slots(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return (int32_t) _data->getSlots().size(); +} + +spine_slot_data *spine_skeleton_data_get_slots(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_slot_data *) _data->getSlots().buffer(); +} + +int32_t spine_skeleton_data_get_num_skins(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return (int32_t) _data->getSkins().size(); +} + +spine_skin *spine_skeleton_data_get_skins(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_skin *) _data->getSkins().buffer(); +} + +spine_skin spine_skeleton_data_get_default_skin(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_skin) _data->getDefaultSkin(); +} + +void spine_skeleton_data_set_default_skin(spine_skeleton_data data, spine_skin skin) { + if (data == nullptr) return; + SkeletonData *_data = (SkeletonData *) data; + _data->setDefaultSkin((Skin *) skin); +} + +int32_t spine_skeleton_data_get_num_events(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return (int32_t) _data->getEvents().size(); +} + +spine_event_data *spine_skeleton_data_get_events(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_event_data *) _data->getEvents().buffer(); +} + +int32_t spine_skeleton_data_get_num_animations(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return (int32_t) _data->getAnimations().size(); +} + +spine_animation *spine_skeleton_data_get_animations(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_animation *) _data->getAnimations().buffer(); +} + +int32_t spine_skeleton_data_get_num_ik_constraints(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return (int32_t) _data->getIkConstraints().size(); +} + +spine_ik_constraint_data *spine_skeleton_data_get_ik_constraints(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_ik_constraint_data *) _data->getIkConstraints().buffer(); +} + +int32_t spine_skeleton_data_get_num_transform_constraints(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return (int32_t) _data->getTransformConstraints().size(); +} + +spine_transform_constraint_data *spine_skeleton_data_get_transform_constraints(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_transform_constraint_data *) _data->getTransformConstraints().buffer(); +} + +int32_t spine_skeleton_data_get_num_path_constraints(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return (int32_t) _data->getPathConstraints().size(); +} + +spine_path_constraint_data *spine_skeleton_data_get_path_constraints(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_path_constraint_data *) _data->getPathConstraints().buffer(); +} + +int32_t spine_skeleton_data_get_num_physics_constraints(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return (int32_t) _data->getPhysicsConstraints().size(); +} + +spine_physics_constraint_data *spine_skeleton_data_get_physics_constraints(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (spine_physics_constraint_data *) _data->getPhysicsConstraints().buffer(); +} + +float spine_skeleton_data_get_x(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return _data->getX(); +} + +void spine_skeleton_data_set_x(spine_skeleton_data data, float x) { + if (data == nullptr) return; + SkeletonData *_data = (SkeletonData *) data; + _data->setX(x); +} + +float spine_skeleton_data_get_y(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return _data->getY(); +} + +void spine_skeleton_data_set_y(spine_skeleton_data data, float y) { + if (data == nullptr) return; + SkeletonData *_data = (SkeletonData *) data; + _data->setY(y); +} + +float spine_skeleton_data_get_width(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return _data->getWidth(); +} + +void spine_skeleton_data_set_width(spine_skeleton_data data, float width) { + if (data == nullptr) return; + SkeletonData *_data = (SkeletonData *) data; + _data->setWidth(width); +} + +float spine_skeleton_data_get_height(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return _data->getHeight(); +} + +void spine_skeleton_data_set_height(spine_skeleton_data data, float height) { + if (data == nullptr) return; + SkeletonData *_data = (SkeletonData *) data; + _data->setHeight(height); +} + +const utf8 *spine_skeleton_data_get_version(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (utf8 *) _data->getVersion().buffer(); +} + +const utf8 *spine_skeleton_data_get_hash(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (utf8 *) _data->getHash().buffer(); +} + +const utf8 *spine_skeleton_data_get_images_path(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (utf8 *) _data->getImagesPath().buffer(); +} + +const utf8 *spine_skeleton_data_get_audio_path(spine_skeleton_data data) { + if (data == nullptr) return nullptr; + SkeletonData *_data = (SkeletonData *) data; + return (utf8 *) _data->getAudioPath().buffer(); +} + +float spine_skeleton_data_get_fps(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return _data->getFps(); +} + +float spine_skeleton_data_get_reference_scale(spine_skeleton_data data) { + if (data == nullptr) return 0; + SkeletonData *_data = (SkeletonData *) data; + return _data->getReferenceScale(); +} + +void spine_skeleton_data_dispose(spine_skeleton_data data) { + if (!data) return; + delete (SkeletonData *) data; +} + +// RenderCommand +static _spine_render_command *spine_render_command_create(BlockAllocator &allocator, int numVertices, int32_t numIndices, spine_blend_mode blendMode, int32_t pageIndex) { + _spine_render_command *cmd = allocator.allocate<_spine_render_command>(1); + cmd->positions = allocator.allocate(numVertices << 1); + cmd->uvs = allocator.allocate(numVertices << 1); + cmd->colors = allocator.allocate(numVertices); + cmd->numVertices = numVertices; + cmd->indices = allocator.allocate(numIndices); + cmd->numIndices = numIndices; + cmd->blendMode = blendMode; + cmd->atlasPage = pageIndex; + cmd->next = nullptr; + return cmd; +} + +// SkeletonDrawable + +spine_skeleton_drawable spine_skeleton_drawable_create(spine_skeleton_data skeletonData) { + _spine_skeleton_drawable *drawable = new (__FILE__, __LINE__) _spine_skeleton_drawable(); + drawable->skeleton = (spine_skeleton) new (__FILE__, __LINE__) Skeleton((SkeletonData *) skeletonData); + AnimationStateData *stateData = new (__FILE__, __LINE__) AnimationStateData((SkeletonData *) skeletonData); + drawable->animationStateData = (spine_animation_state_data) stateData; + AnimationState *state = new (__FILE__, __LINE__) AnimationState(stateData); + drawable->animationState = (spine_animation_state) state; + state->setManualTrackEntryDisposal(true); + EventListener *listener = new EventListener(); + drawable->animationStateEvents = (spine_animation_state_events) listener; + state->setListener(listener); + drawable->clipping = new (__FILE__, __LINE__) SkeletonClipping(); + drawable->allocator = new (__FILE__, __LINE__) BlockAllocator(2048); + return (spine_skeleton_drawable) drawable; +} + +void spine_skeleton_drawable_dispose(spine_skeleton_drawable drawable) { + _spine_skeleton_drawable *_drawable = (_spine_skeleton_drawable *) drawable; + if (!_drawable) return; + if (_drawable->skeleton) delete (Skeleton *) _drawable->skeleton; + if (_drawable->animationState) delete (AnimationState *) _drawable->animationState; + if (_drawable->animationStateData) delete (AnimationStateData *) _drawable->animationStateData; + if (_drawable->animationStateEvents) delete (Vector *) (_drawable->animationStateEvents); + if (_drawable->clipping) delete (SkeletonClipping *) _drawable->clipping; + if (_drawable->allocator) delete (BlockAllocator *) _drawable->allocator; + SpineExtension::free(drawable, __FILE__, __LINE__); +} + +static _spine_render_command *batch_sub_commands(BlockAllocator &allocator, Vector<_spine_render_command *> &commands, int first, int last, int numVertices, int numIndices) { + _spine_render_command *batched = spine_render_command_create(allocator, numVertices, numIndices, commands[first]->blendMode, commands[first]->atlasPage); + float *positions = batched->positions; + float *uvs = batched->uvs; + int32_t *colors = batched->colors; + uint16_t *indices = batched->indices; + int indicesOffset = 0; + for (int i = first; i <= last; i++) { + _spine_render_command *cmd = commands[i]; + memcpy(positions, cmd->positions, sizeof(float) * 2 * cmd->numVertices); + memcpy(uvs, cmd->uvs, sizeof(float) * 2 * cmd->numVertices); + memcpy(colors, cmd->colors, sizeof(int32_t) * cmd->numVertices); + for (int ii = 0; ii < cmd->numIndices; ii++) + indices[ii] = cmd->indices[ii] + indicesOffset; + indicesOffset += cmd->numVertices; + positions += 2 * cmd->numVertices; + uvs += 2 * cmd->numVertices; + colors += cmd->numVertices; + indices += cmd->numIndices; + } + return batched; +} + +static _spine_render_command *batch_commands(BlockAllocator &allocator, Vector<_spine_render_command *> &commands) { + if (commands.size() == 0) return nullptr; + + _spine_render_command *root = nullptr; + _spine_render_command *last = nullptr; + + _spine_render_command *first = commands[0]; + int startIndex = 0; + int i = 1; + int numVertices = first->numVertices; + int numIndices = first->numIndices; + while (i <= (int) commands.size()) { + _spine_render_command *cmd = i < (int) commands.size() ? commands[i] : nullptr; + if (cmd != nullptr && cmd->atlasPage == first->atlasPage && + cmd->blendMode == first->blendMode && + cmd->colors[0] == first->colors[0] && + numIndices + cmd->numIndices < 0xffff) { + numVertices += cmd->numVertices; + numIndices += cmd->numIndices; + } else { + _spine_render_command *batched = batch_sub_commands(allocator, commands, startIndex, i - 1, numVertices, numIndices); + if (!last) { + root = last = batched; + } else { + last->next = batched; + last = batched; + } + if (i == (int) commands.size()) break; + first = commands[i]; + startIndex = i; + numVertices = first->numVertices; + numIndices = first->numIndices; + } + i++; + } + return root; +} + +spine_render_command spine_skeleton_drawable_render(spine_skeleton_drawable drawable) { + _spine_skeleton_drawable *_drawable = (_spine_skeleton_drawable *) drawable; + if (!_drawable) return nullptr; + if (!_drawable->skeleton) return nullptr; + + _drawable->allocator->compress(); + _drawable->renderCommands.clear(); + + SkeletonClipping &clipper = *(SkeletonClipping *) _drawable->clipping; + Skeleton *skeleton = (Skeleton *) _drawable->skeleton; + + for (unsigned i = 0; i < skeleton->getSlots().size(); ++i) { + Slot &slot = *skeleton->getDrawOrder()[i]; + Attachment *attachment = slot.getAttachment(); + if (!attachment) { + clipper.clipEnd(slot); + continue; + } + + // Early out if the slot color is 0 or the bone is not active + if (slot.getColor().a == 0 || !slot.getBone().isActive()) { + clipper.clipEnd(slot); + continue; + } + + Vector *worldVertices = &_drawable->worldVertices; + Vector *quadIndices = &_drawable->quadIndices; + Vector *vertices = worldVertices; + int32_t verticesCount; + Vector *uvs; + Vector *indices; + int32_t indicesCount; + Color *attachmentColor; + int32_t pageIndex; + + if (attachment->getRTTI().isExactly(RegionAttachment::rtti)) { + RegionAttachment *regionAttachment = (RegionAttachment *) attachment; + attachmentColor = ®ionAttachment->getColor(); + + // Early out if the slot color is 0 + if (attachmentColor->a == 0) { + clipper.clipEnd(slot); + continue; + } + + worldVertices->setSize(8, 0); + regionAttachment->computeWorldVertices(slot, *worldVertices, 0, 2); + verticesCount = 4; + uvs = ®ionAttachment->getUVs(); + indices = quadIndices; + indicesCount = 6; + pageIndex = ((AtlasRegion *) regionAttachment->getRegion())->page->index; + + } else if (attachment->getRTTI().isExactly(MeshAttachment::rtti)) { + MeshAttachment *mesh = (MeshAttachment *) attachment; + attachmentColor = &mesh->getColor(); + + // Early out if the slot color is 0 + if (attachmentColor->a == 0) { + clipper.clipEnd(slot); + continue; + } + + worldVertices->setSize(mesh->getWorldVerticesLength(), 0); + mesh->computeWorldVertices(slot, 0, mesh->getWorldVerticesLength(), worldVertices->buffer(), 0, 2); + verticesCount = (int32_t) (mesh->getWorldVerticesLength() >> 1); + uvs = &mesh->getUVs(); + indices = &mesh->getTriangles(); + indicesCount = (int32_t) indices->size(); + pageIndex = ((AtlasRegion *) mesh->getRegion())->page->index; + + } else if (attachment->getRTTI().isExactly(ClippingAttachment::rtti)) { + ClippingAttachment *clip = (ClippingAttachment *) slot.getAttachment(); + clipper.clipStart(slot, clip); + continue; + } else + continue; + + uint8_t r = static_cast(skeleton->getColor().r * slot.getColor().r * attachmentColor->r * 255); + uint8_t g = static_cast(skeleton->getColor().g * slot.getColor().g * attachmentColor->g * 255); + uint8_t b = static_cast(skeleton->getColor().b * slot.getColor().b * attachmentColor->b * 255); + uint8_t a = static_cast(skeleton->getColor().a * slot.getColor().a * attachmentColor->a * 255); + uint32_t color = (a << 24) | (r << 16) | (g << 8) | b; + + if (clipper.isClipping()) { + clipper.clipTriangles(*worldVertices, *indices, *uvs, 2); + vertices = &clipper.getClippedVertices(); + verticesCount = (int32_t) (clipper.getClippedVertices().size() >> 1); + uvs = &clipper.getClippedUVs(); + indices = &clipper.getClippedTriangles(); + indicesCount = (int32_t) (clipper.getClippedTriangles().size()); + } + + _spine_render_command *cmd = spine_render_command_create(*_drawable->allocator, verticesCount, indicesCount, (spine_blend_mode) slot.getData().getBlendMode(), pageIndex); + _drawable->renderCommands.add(cmd); + memcpy(cmd->positions, vertices->buffer(), (verticesCount << 1) * sizeof(float)); + memcpy(cmd->uvs, uvs->buffer(), (verticesCount << 1) * sizeof(float)); + for (int ii = 0; ii < verticesCount; ii++) cmd->colors[ii] = color; + memcpy(cmd->indices, indices->buffer(), indices->size() * sizeof(uint16_t)); + clipper.clipEnd(slot); + } + clipper.clipEnd(); + + return (spine_render_command) batch_commands(*_drawable->allocator, _drawable->renderCommands); +} + +spine_skeleton spine_skeleton_drawable_get_skeleton(spine_skeleton_drawable drawable) { + if (!drawable) return nullptr; + return ((_spine_skeleton_drawable *) drawable)->skeleton; +} + +spine_animation_state spine_skeleton_drawable_get_animation_state(spine_skeleton_drawable drawable) { + if (!drawable) return nullptr; + return ((_spine_skeleton_drawable *) drawable)->animationState; +} + +spine_animation_state_data spine_skeleton_drawable_get_animation_state_data(spine_skeleton_drawable drawable) { + if (!drawable) return nullptr; + return ((_spine_skeleton_drawable *) drawable)->animationStateData; +} + +spine_animation_state_events spine_skeleton_drawable_get_animation_state_events(spine_skeleton_drawable drawable) { + if (!drawable) return nullptr; + return ((_spine_skeleton_drawable *) drawable)->animationStateEvents; +} + +// Render command +float *spine_render_command_get_positions(spine_render_command command) { + if (!command) return nullptr; + return ((_spine_render_command *) command)->positions; +} + +float *spine_render_command_get_uvs(spine_render_command command) { + if (!command) return nullptr; + return ((_spine_render_command *) command)->uvs; +} + +int32_t *spine_render_command_get_colors(spine_render_command command) { + if (!command) return nullptr; + return ((_spine_render_command *) command)->colors; +} + +int32_t spine_render_command_get_num_vertices(spine_render_command command) { + if (!command) return 0; + return ((_spine_render_command *) command)->numVertices; +} + +uint16_t *spine_render_command_get_indices(spine_render_command command) { + if (!command) return nullptr; + return ((_spine_render_command *) command)->indices; +} + +int32_t spine_render_command_get_num_indices(spine_render_command command) { + if (!command) return 0; + return ((_spine_render_command *) command)->numIndices; +} + +int32_t spine_render_command_get_atlas_page(spine_render_command command) { + if (!command) return 0; + return ((_spine_render_command *) command)->atlasPage; +} + +spine_blend_mode spine_render_command_get_blend_mode(spine_render_command command) { + if (!command) return SPINE_BLEND_MODE_NORMAL; + return ((_spine_render_command *) command)->blendMode; +} + +spine_render_command spine_render_command_get_next(spine_render_command command) { + if (!command) return nullptr; + return (spine_render_command) ((_spine_render_command *) command)->next; +} + +// Animation + +const utf8 *spine_animation_get_name(spine_animation animation) { + if (animation == nullptr) return nullptr; + Animation *_animation = (Animation *) animation; + return (utf8 *) _animation->getName().buffer(); +} + +float spine_animation_get_duration(spine_animation animation) { + if (animation == nullptr) return 0; + Animation *_animation = (Animation *) animation; + return _animation->getDuration(); +} + +// AnimationStateData +spine_skeleton_data spine_animation_state_data_get_skeleton_data(spine_animation_state_data stateData) { + if (stateData == nullptr) return nullptr; + AnimationStateData *_stateData = (AnimationStateData *) stateData; + return (spine_skeleton_data) _stateData->getSkeletonData(); +} + +float spine_animation_state_data_get_default_mix(spine_animation_state_data stateData) { + if (stateData == nullptr) return 0; + AnimationStateData *_stateData = (AnimationStateData *) stateData; + return _stateData->getDefaultMix(); +} + +void spine_animation_state_data_set_default_mix(spine_animation_state_data stateData, float defaultMix) { + if (stateData == nullptr) return; + AnimationStateData *_stateData = (AnimationStateData *) stateData; + _stateData->setDefaultMix(defaultMix); +} + +void spine_animation_state_data_set_mix(spine_animation_state_data stateData, spine_animation from, spine_animation to, float duration) { + if (stateData == nullptr) return; + if (from == nullptr || to == nullptr) return; + AnimationStateData *_stateData = (AnimationStateData *) stateData; + _stateData->setMix((Animation *) from, (Animation *) to, duration); +} + +float spine_animation_state_data_get_mix(spine_animation_state_data stateData, spine_animation from, spine_animation to) { + if (stateData == nullptr) return 0; + if (from == nullptr || to == nullptr) return 0; + AnimationStateData *_stateData = (AnimationStateData *) stateData; + return _stateData->getMix((Animation *) from, (Animation *) to); +} + +void spine_animation_state_data_set_mix_by_name(spine_animation_state_data stateData, const utf8 *fromName, const utf8 *toName, float duration) { + if (stateData == nullptr) return; + if (fromName == nullptr || toName == nullptr) return; + AnimationStateData *_stateData = (AnimationStateData *) stateData; + _stateData->setMix(fromName, toName, duration); +} + +float spine_animation_state_data_get_mix_by_name(spine_animation_state_data stateData, const utf8 *fromName, const utf8 *toName) { + if (stateData == nullptr) return 0; + AnimationStateData *_stateData = (AnimationStateData *) stateData; + Animation *from = _stateData->getSkeletonData()->findAnimation(fromName); + Animation *to = _stateData->getSkeletonData()->findAnimation(toName); + if (from == nullptr || to == nullptr) return 0; + return _stateData->getMix(from, to); +} + +void spine_animation_state_data_clear(spine_animation_state_data stateData) { + if (stateData == nullptr) return; + AnimationStateData *_stateData = (AnimationStateData *) stateData; + _stateData->clear(); +} + +// AnimationState +void spine_animation_state_update(spine_animation_state state, float delta) { + if (state == nullptr) return; + AnimationState *_state = (AnimationState *) state; + _state->update(delta); +} + +void spine_animation_state_dispose_track_entry(spine_animation_state state, spine_track_entry entry) { + if (state == nullptr) return; + if (entry == nullptr) return; + AnimationState *_state = (AnimationState *) state; + _state->disposeTrackEntry((TrackEntry *) entry); +} + +void spine_animation_state_apply(spine_animation_state state, spine_skeleton skeleton) { + if (state == nullptr) return; + AnimationState *_state = (AnimationState *) state; + _state->apply(*(Skeleton *) skeleton); +} + +void spine_animation_state_clear_tracks(spine_animation_state state) { + if (state == nullptr) return; + AnimationState *_state = (AnimationState *) state; + _state->clearTracks(); +} + +int32_t spine_animation_state_get_num_tracks(spine_animation_state state) { + if (state == nullptr) return 0; + AnimationState *_state = (AnimationState *) state; + return (int32_t) _state->getTracks().size(); +} + +void spine_animation_state_clear_track(spine_animation_state state, int32_t trackIndex) { + if (state == nullptr) return; + AnimationState *_state = (AnimationState *) state; + _state->clearTrack(trackIndex); +} + +spine_track_entry spine_animation_state_set_animation_by_name(spine_animation_state state, int32_t trackIndex, const utf8 *animationName, spine_bool loop) { + if (state == nullptr) return nullptr; + AnimationState *_state = (AnimationState *) state; + return (spine_track_entry) _state->setAnimation(trackIndex, animationName, loop); +} + +spine_track_entry spine_animation_state_set_animation(spine_animation_state state, int32_t trackIndex, spine_animation animation, spine_bool loop) { + if (state == nullptr) return nullptr; + AnimationState *_state = (AnimationState *) state; + return (spine_track_entry) _state->setAnimation(trackIndex, (Animation *) animation, loop); +} + +spine_track_entry spine_animation_state_add_animation_by_name(spine_animation_state state, int32_t trackIndex, const utf8 *animationName, spine_bool loop, float delay) { + if (state == nullptr) return nullptr; + AnimationState *_state = (AnimationState *) state; + return (spine_track_entry) _state->addAnimation(trackIndex, animationName, loop, delay); +} + +spine_track_entry spine_animation_state_add_animation(spine_animation_state state, int32_t trackIndex, spine_animation animation, spine_bool loop, float delay) { + if (state == nullptr) return nullptr; + AnimationState *_state = (AnimationState *) state; + return (spine_track_entry) _state->addAnimation(trackIndex, (Animation *) animation, loop, delay); +} + +spine_track_entry spine_animation_state_set_empty_animation(spine_animation_state state, int32_t trackIndex, float mixDuration) { + if (state == nullptr) return nullptr; + AnimationState *_state = (AnimationState *) state; + return (spine_track_entry) _state->setEmptyAnimation(trackIndex, mixDuration); +} + +spine_track_entry spine_animation_state_add_empty_animation(spine_animation_state state, int32_t trackIndex, float mixDuration, float delay) { + if (state == nullptr) return nullptr; + AnimationState *_state = (AnimationState *) state; + return (spine_track_entry) _state->addEmptyAnimation(trackIndex, mixDuration, delay); +} + +void spine_animation_state_set_empty_animations(spine_animation_state state, float mixDuration) { + if (state == nullptr) return; + AnimationState *_state = (AnimationState *) state; + _state->setEmptyAnimations(mixDuration); +} + +spine_track_entry spine_animation_state_get_current(spine_animation_state state, int32_t trackIndex) { + if (state == nullptr) return nullptr; + AnimationState *_state = (AnimationState *) state; + return (spine_track_entry) _state->getCurrent(trackIndex); +} + +spine_animation_state_data spine_animation_state_get_data(spine_animation_state state) { + if (state == nullptr) return nullptr; + AnimationState *_state = (AnimationState *) state; + return (spine_animation_state_data) _state->getData(); +} + +float spine_animation_state_get_time_scale(spine_animation_state state) { + if (state == nullptr) return 0; + AnimationState *_state = (AnimationState *) state; + return _state->getTimeScale(); +} + +void spine_animation_state_set_time_scale(spine_animation_state state, float timeScale) { + if (state == nullptr) return; + AnimationState *_state = (AnimationState *) state; + _state->setTimeScale(timeScale); +} + +int32_t spine_animation_state_events_get_num_events(spine_animation_state_events events) { + if (events == nullptr) return 0; + EventListener *_events = (EventListener *) events; + return (int32_t) _events->events.size(); +} + +spine_event_type spine_animation_state_events_get_event_type(spine_animation_state_events events, int32_t index) { + if (events == nullptr) return SPINE_EVENT_TYPE_DISPOSE; + if (index < 0) return SPINE_EVENT_TYPE_DISPOSE; + EventListener *_events = (EventListener *) events; + if (index >= (int) _events->events.size()) return SPINE_EVENT_TYPE_DISPOSE; + return (spine_event_type) _events->events[index].type; +} + +spine_track_entry spine_animation_state_events_get_track_entry(spine_animation_state_events events, int32_t index) { + if (events == nullptr) return nullptr; + EventListener *_events = (EventListener *) events; + if (index >= (int) _events->events.size()) return nullptr; + return (spine_track_entry) _events->events[index].entry; +} + +spine_event spine_animation_state_events_get_event(spine_animation_state_events events, int32_t index) { + if (events == nullptr) return nullptr; + EventListener *_events = (EventListener *) events; + if (index >= (int) _events->events.size()) return nullptr; + return (spine_event) _events->events[index].event; +} + +void spine_animation_state_events_reset(spine_animation_state_events events) { + if (events == nullptr) return; + EventListener *_events = (EventListener *) events; + _events->events.clear(); +} + +// TrackEntry + +int32_t spine_track_entry_get_track_index(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getTrackIndex(); +} + +spine_animation spine_track_entry_get_animation(spine_track_entry entry) { + if (entry == nullptr) return nullptr; + TrackEntry *_entry = (TrackEntry *) entry; + return (spine_animation) _entry->getAnimation(); +} + +spine_track_entry spine_track_entry_get_previous(spine_track_entry entry) { + if (entry == nullptr) return nullptr; + TrackEntry *_entry = (TrackEntry *) entry; + return (spine_track_entry) _entry->getPrevious(); +} + +spine_bool spine_track_entry_get_loop(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getLoop() ? -1 : 0; +} + +void spine_track_entry_set_loop(spine_track_entry entry, spine_bool loop) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setLoop(loop); +} + +spine_bool spine_track_entry_get_hold_previous(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getHoldPrevious() ? -1 : 0; +} + +void spine_track_entry_set_hold_previous(spine_track_entry entry, spine_bool holdPrevious) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setHoldPrevious(holdPrevious); +} + +spine_bool spine_track_entry_get_reverse(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getReverse() ? -1 : 0; +} + +void spine_track_entry_set_reverse(spine_track_entry entry, spine_bool reverse) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setReverse(reverse); +} + +spine_bool spine_track_entry_get_shortest_rotation(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getShortestRotation() ? -1 : 0; +} + +void spine_track_entry_set_shortest_rotation(spine_track_entry entry, spine_bool shortestRotation) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setShortestRotation(shortestRotation); +} + +float spine_track_entry_get_delay(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getDelay(); +} + +void spine_track_entry_set_delay(spine_track_entry entry, float delay) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setDelay(delay); +} + +float spine_track_entry_get_track_time(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getTrackTime(); +} + +void spine_track_entry_set_track_time(spine_track_entry entry, float trackTime) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setTrackTime(trackTime); +} + +float spine_track_entry_get_track_end(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getTrackEnd(); +} + +void spine_track_entry_set_track_end(spine_track_entry entry, float trackEnd) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setTrackEnd(trackEnd); +} + +float spine_track_entry_get_animation_start(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getAnimationStart(); +} + +void spine_track_entry_set_animation_start(spine_track_entry entry, float animationStart) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setAnimationStart(animationStart); +} + +float spine_track_entry_get_animation_end(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getAnimationEnd(); +} + +void spine_track_entry_set_animation_end(spine_track_entry entry, float animationEnd) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setAnimationEnd(animationEnd); +} + +float spine_track_entry_get_animation_last(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getAnimationLast(); +} + +void spine_track_entry_set_animation_last(spine_track_entry entry, float animationLast) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setAnimationLast(animationLast); +} + +float spine_track_entry_get_animation_time(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getAnimationTime(); +} + +float spine_track_entry_get_time_scale(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getTimeScale(); +} + +void spine_track_entry_set_time_scale(spine_track_entry entry, float timeScale) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setTimeScale(timeScale); +} + +float spine_track_entry_get_alpha(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getAlpha(); +} + +void spine_track_entry_set_alpha(spine_track_entry entry, float alpha) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setAlpha(alpha); +} + +float spine_track_entry_get_event_threshold(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getEventThreshold(); +} + +void spine_track_entry_set_event_threshold(spine_track_entry entry, float eventThreshold) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setEventThreshold(eventThreshold); +} + +float spine_track_entry_get_alpha_attachment_threshold(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getAlphaAttachmentThreshold(); +} + +void spine_track_entry_set_alpha_attachment_threshold(spine_track_entry entry, float attachmentThreshold) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setAlphaAttachmentThreshold(attachmentThreshold); +} + +float spine_track_entry_get_mix_attachment_threshold(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getMixAttachmentThreshold(); +} + +void spine_track_entry_set_mix_attachment_threshold(spine_track_entry entry, float attachmentThreshold) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setMixAttachmentThreshold(attachmentThreshold); +} + +float spine_track_entry_get_mix_draw_order_threshold(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getMixDrawOrderThreshold(); +} + +void spine_track_entry_set_mix_draw_order_threshold(spine_track_entry entry, float drawOrderThreshold) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setMixDrawOrderThreshold(drawOrderThreshold); +} + +spine_track_entry spine_track_entry_get_next(spine_track_entry entry) { + if (entry == nullptr) return nullptr; + TrackEntry *_entry = (TrackEntry *) entry; + return (spine_track_entry) _entry->getNext(); +} + +spine_bool spine_track_entry_is_complete(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->isComplete() ? -1 : 0; +} + +float spine_track_entry_get_mix_time(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getMixTime(); +} + +void spine_track_entry_set_mix_time(spine_track_entry entry, float mixTime) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setMixTime(mixTime); +} + +float spine_track_entry_get_mix_duration(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getMixDuration(); +} + +void spine_track_entry_set_mix_duration(spine_track_entry entry, float mixDuration) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setMixDuration(mixDuration); +} + +spine_mix_blend spine_track_entry_get_mix_blend(spine_track_entry entry) { + if (entry == nullptr) return SPINE_MIX_BLEND_SETUP; + TrackEntry *_entry = (TrackEntry *) entry; + return (spine_mix_blend) _entry->getMixBlend(); +} + +void spine_track_entry_set_mix_blend(spine_track_entry entry, spine_mix_blend mixBlend) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->setMixBlend((MixBlend) mixBlend); +} + +spine_track_entry spine_track_entry_get_mixing_from(spine_track_entry entry) { + if (entry == nullptr) return nullptr; + TrackEntry *_entry = (TrackEntry *) entry; + return (spine_track_entry) _entry->getMixingFrom(); +} + +spine_track_entry spine_track_entry_get_mixing_to(spine_track_entry entry) { + if (entry == nullptr) return nullptr; + TrackEntry *_entry = (TrackEntry *) entry; + return (spine_track_entry) _entry->getMixingTo(); +} + +void spine_track_entry_reset_rotation_directions(spine_track_entry entry) { + if (entry == nullptr) return; + TrackEntry *_entry = (TrackEntry *) entry; + _entry->resetRotationDirections(); +} + +float spine_track_entry_get_track_complete(spine_track_entry entry) { + if (entry == nullptr) return 0; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->getTrackComplete(); +} + +// Skeleton + +void spine_skeleton_update_cache(spine_skeleton skeleton) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->updateCache(); +} + +void spine_skeleton_update_world_transform(spine_skeleton skeleton, spine_physics physics) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->updateWorldTransform((spine::Physics) physics); +} + +void spine_skeleton_update_world_transform_bone(spine_skeleton skeleton, spine_physics physics, spine_bone parent) { + if (skeleton == nullptr) return; + if (parent == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + Bone *_bone = (Bone *) parent; + _skeleton->updateWorldTransform((spine::Physics) physics, _bone); +} + +void spine_skeleton_set_to_setup_pose(spine_skeleton skeleton) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->setToSetupPose(); +} + +void spine_skeleton_set_bones_to_setup_pose(spine_skeleton skeleton) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->setBonesToSetupPose(); +} + +void spine_skeleton_set_slots_to_setup_pose(spine_skeleton skeleton) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->setSlotsToSetupPose(); +} + +spine_bone spine_skeleton_find_bone(spine_skeleton skeleton, const utf8 *boneName) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_bone) _skeleton->findBone(boneName); +} + +spine_slot spine_skeleton_find_slot(spine_skeleton skeleton, const utf8 *slotName) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_slot) _skeleton->findSlot(slotName); +} + +void spine_skeleton_set_skin_by_name(spine_skeleton skeleton, const utf8 *skinName) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->setSkin(skinName); +} + +void spine_skeleton_set_skin(spine_skeleton skeleton, spine_skin skin) { + if (skeleton == nullptr) return; + if (skin == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->setSkin((Skin *) skin); +} + +spine_attachment spine_skeleton_get_attachment_by_name(spine_skeleton skeleton, const utf8 *slotName, const utf8 *attachmentName) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_attachment) _skeleton->getAttachment(slotName, attachmentName); +} + +spine_attachment spine_skeleton_get_attachment(spine_skeleton skeleton, int32_t slotIndex, const utf8 *attachmentName) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_attachment) _skeleton->getAttachment(slotIndex, attachmentName); +} + +void spine_skeleton_set_attachment(spine_skeleton skeleton, const utf8 *slotName, const utf8 *attachmentName) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + return _skeleton->setAttachment(slotName, attachmentName); +} + +spine_ik_constraint spine_skeleton_find_ik_constraint(spine_skeleton skeleton, const utf8 *constraintName) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_ik_constraint) _skeleton->findIkConstraint(constraintName); +} + +spine_transform_constraint spine_skeleton_find_transform_constraint(spine_skeleton skeleton, const utf8 *constraintName) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_transform_constraint) _skeleton->findTransformConstraint(constraintName); +} + +spine_path_constraint spine_skeleton_find_path_constraint(spine_skeleton skeleton, const utf8 *constraintName) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_path_constraint) _skeleton->findPathConstraint(constraintName); +} + +spine_physics_constraint spine_skeleton_find_physics_constraint(spine_skeleton skeleton, const utf8 *constraintName) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_physics_constraint) _skeleton->findPhysicsConstraint(constraintName); +} + +_spine_bounds tmp_bounds; +spine_bounds spine_skeleton_get_bounds(spine_skeleton skeleton) { + _spine_bounds *bounds = &tmp_bounds; + if (skeleton == nullptr) return (spine_bounds) bounds; + Skeleton *_skeleton = (Skeleton *) skeleton; + Vector vertices; + SkeletonClipping clipper; + + _skeleton->getBounds(bounds->x, bounds->y, bounds->width, bounds->height, vertices, &clipper); + return (spine_bounds) bounds; +} + +spine_bone spine_skeleton_get_root_bone(spine_skeleton skeleton) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_bone) _skeleton->getRootBone(); +} + +spine_skeleton_data spine_skeleton_get_data(spine_skeleton skeleton) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_skeleton_data) _skeleton->getData(); +} + +int32_t spine_skeleton_get_num_bones(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (int32_t) _skeleton->getBones().size(); +} + +spine_bone *spine_skeleton_get_bones(spine_skeleton skeleton) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_bone *) _skeleton->getBones().buffer(); +} + +int32_t spine_skeleton_get_num_slots(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (int32_t) _skeleton->getSlots().size(); +} + +spine_slot *spine_skeleton_get_slots(spine_skeleton skeleton) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_slot *) _skeleton->getSlots().buffer(); +} + +int32_t spine_skeleton_get_num_draw_order(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (int32_t) _skeleton->getDrawOrder().size(); +} + +spine_slot *spine_skeleton_get_draw_order(spine_skeleton skeleton) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_slot *) _skeleton->getDrawOrder().buffer(); +} + +int32_t spine_skeleton_get_num_ik_constraints(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (int32_t) _skeleton->getIkConstraints().size(); +} + +spine_ik_constraint *spine_skeleton_get_ik_constraints(spine_skeleton skeleton) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_ik_constraint *) _skeleton->getIkConstraints().buffer(); +} + +int32_t spine_skeleton_get_num_transform_constraints(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (int32_t) _skeleton->getTransformConstraints().size(); +} + +spine_transform_constraint *spine_skeleton_get_transform_constraints(spine_skeleton skeleton) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_transform_constraint *) _skeleton->getTransformConstraints().buffer(); +} + +int32_t spine_skeleton_get_num_path_constraints(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (int32_t) _skeleton->getPathConstraints().size(); +} + +spine_path_constraint *spine_skeleton_get_path_constraints(spine_skeleton skeleton) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_path_constraint *) _skeleton->getPathConstraints().buffer(); +} + +int32_t spine_skeleton_get_num_physics_constraints(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (int32_t) _skeleton->getPhysicsConstraints().size(); +} + +spine_physics_constraint *spine_skeleton_get_physics_constraints(spine_skeleton skeleton) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_physics_constraint *) _skeleton->getPhysicsConstraints().buffer(); +} + +spine_skin spine_skeleton_get_skin(spine_skeleton skeleton) { + if (skeleton == nullptr) return nullptr; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_skin) _skeleton->getSkin(); +} + +spine_color spine_skeleton_get_color(spine_skeleton skeleton) { + if (skeleton == nullptr) return (spine_color) &NULL_COLOR; + Skeleton *_skeleton = (Skeleton *) skeleton; + return (spine_color) &_skeleton->getColor(); +} + +void spine_skeleton_set_color(spine_skeleton skeleton, float r, float g, float b, float a) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->getColor().set(r, g, b, a); +} + +void spine_skeleton_set_position(spine_skeleton skeleton, float x, float y) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->setPosition(x, y); +} + +float spine_skeleton_get_x(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return _skeleton->getX(); +} + +void spine_skeleton_set_x(spine_skeleton skeleton, float x) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->setX(x); +} + +float spine_skeleton_get_y(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return _skeleton->getY(); +} + +void spine_skeleton_set_y(spine_skeleton skeleton, float y) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->setY(y); +} + +float spine_skeleton_get_scale_x(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return _skeleton->getScaleX(); +} + +void spine_skeleton_set_scale_x(spine_skeleton skeleton, float scaleX) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->setScaleX(scaleX); +} + +float spine_skeleton_get_scale_y(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return _skeleton->getScaleY(); +} + +void spine_skeleton_set_scale_y(spine_skeleton skeleton, float scaleY) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->setScaleY(scaleY); +} + +float spine_skeleton_get_time(spine_skeleton skeleton) { + if (skeleton == nullptr) return 0; + Skeleton *_skeleton = (Skeleton *) skeleton; + return _skeleton->getTime(); +} + +void spine_skeleton_set_time(spine_skeleton skeleton, float time) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->setTime(time); +} + +void spine_skeleton_update(spine_skeleton skeleton, float delta) { + if (skeleton == nullptr) return; + Skeleton *_skeleton = (Skeleton *) skeleton; + _skeleton->update(delta); +} + +// EventData +const utf8 *spine_event_data_get_name(spine_event_data event) { + if (event == nullptr) return nullptr; + EventData *_event = (EventData *) event; + return (utf8 *) _event->getName().buffer(); +} + +int32_t spine_event_data_get_int_value(spine_event_data event) { + if (event == nullptr) return 0; + EventData *_event = (EventData *) event; + return _event->getIntValue(); +} + +void spine_event_data_set_int_value(spine_event_data event, int32_t value) { + if (event == nullptr) return; + EventData *_event = (EventData *) event; + _event->setIntValue(value); +} + +float spine_event_data_get_float_value(spine_event_data event) { + if (event == nullptr) return 0; + EventData *_event = (EventData *) event; + return _event->getFloatValue(); +} + +void spine_event_data_set_float_value(spine_event_data event, float value) { + if (event == nullptr) return; + EventData *_event = (EventData *) event; + _event->setFloatValue(value); +} + +const utf8 *spine_event_data_get_string_value(spine_event_data event) { + if (event == nullptr) return nullptr; + EventData *_event = (EventData *) event; + return (utf8 *) _event->getStringValue().buffer(); +} + +void spine_event_data_set_string_value(spine_event_data event, const utf8 *value) { + if (event == nullptr) return; + EventData *_event = (EventData *) event; + _event->setStringValue(value); +} + +const utf8 *spine_event_data_get_audio_path(spine_event_data event) { + if (event == nullptr) return nullptr; + EventData *_event = (EventData *) event; + return (utf8 *) _event->getAudioPath().buffer(); +} + +float spine_event_data_get_volume(spine_event_data event) { + if (event == nullptr) return 0; + EventData *_event = (EventData *) event; + return _event->getVolume(); +} + +void spine_event_data_set_volume(spine_event_data event, float volume) { + if (event == nullptr) return; + EventData *_event = (EventData *) event; + _event->setVolume(volume); +} + +float spine_event_data_get_balance(spine_event_data event) { + if (event == nullptr) return 0; + EventData *_event = (EventData *) event; + return _event->getBalance(); +} + +void spine_event_data_set_balance(spine_event_data event, float balance) { + if (event == nullptr) return; + EventData *_event = (EventData *) event; + _event->setBalance(balance); +} + +// Event + +spine_event_data spine_event_get_data(spine_event event) { + if (event == nullptr) return nullptr; + Event *_event = (Event *) event; + return (spine_event_data) &_event->getData(); +} + +float spine_event_get_time(spine_event event) { + if (event == nullptr) return 0; + Event *_event = (Event *) event; + return _event->getTime(); +} + +int32_t spine_event_get_int_value(spine_event event) { + if (event == nullptr) return 0; + Event *_event = (Event *) event; + return _event->getIntValue(); +} + +void spine_event_set_int_value(spine_event event, int32_t value) { + if (event == nullptr) return; + Event *_event = (Event *) event; + _event->setIntValue(value); +} + +float spine_event_get_float_value(spine_event event) { + if (event == nullptr) return 0; + Event *_event = (Event *) event; + return _event->getFloatValue(); +} + +void spine_event_set_float_value(spine_event event, float value) { + if (event == nullptr) return; + Event *_event = (Event *) event; + _event->setFloatValue(value); +} + +const utf8 *spine_event_get_string_value(spine_event event) { + if (event == nullptr) return nullptr; + Event *_event = (Event *) event; + return (utf8 *) _event->getStringValue().buffer(); +} + +void spine_event_set_string_value(spine_event event, const utf8 *value) { + if (event == nullptr) return; + Event *_event = (Event *) event; + _event->setStringValue(value); +} + +float spine_event_get_volume(spine_event event) { + if (event == nullptr) return 0; + Event *_event = (Event *) event; + return _event->getVolume(); +} + +void spine_event_set_volume(spine_event event, float volume) { + if (event == nullptr) return; + Event *_event = (Event *) event; + _event->setVolume(volume); +} + +float spine_event_get_balance(spine_event event) { + if (event == nullptr) return 0; + Event *_event = (Event *) event; + return _event->getBalance(); +} + +void spine_event_set_balance(spine_event event, float balance) { + if (event == nullptr) return; + Event *_event = (Event *) event; + _event->setBalance(balance); +} + +// SlotData +int32_t spine_slot_data_get_index(spine_slot_data slot) { + if (slot == nullptr) return 0; + SlotData *_slot = (SlotData *) slot; + return _slot->getIndex(); +} + +const utf8 *spine_slot_data_get_name(spine_slot_data slot) { + if (slot == nullptr) return nullptr; + SlotData *_slot = (SlotData *) slot; + return (utf8 *) _slot->getName().buffer(); +} + +spine_bone_data spine_slot_data_get_bone_data(spine_slot_data slot) { + if (slot == nullptr) return nullptr; + SlotData *_slot = (SlotData *) slot; + return (spine_bone_data) &_slot->getBoneData(); +} + +spine_color spine_slot_data_get_color(spine_slot_data slot) { + if (slot == nullptr) return (spine_color) &NULL_COLOR; + SlotData *_slot = (SlotData *) slot; + return (spine_color) &_slot->getColor(); +} + +void spine_slot_data_set_color(spine_slot_data slot, float r, float g, float b, float a) { + if (slot == nullptr) return; + SlotData *_slot = (SlotData *) slot; + _slot->getColor().set(r, g, b, a); +} + +spine_color spine_slot_data_get_dark_color(spine_slot_data slot) { + if (slot == nullptr) return (spine_color) &NULL_COLOR; + SlotData *_slot = (SlotData *) slot; + return (spine_color) &_slot->getDarkColor(); +} + +void spine_slot_data_set_dark_color(spine_slot_data slot, float r, float g, float b, float a) { + if (slot == nullptr) return; + SlotData *_slot = (SlotData *) slot; + _slot->getDarkColor().set(r, g, b, a); +} + +spine_bool spine_slot_data_has_dark_color(spine_slot_data slot) { + if (slot == nullptr) return 0; + SlotData *_slot = (SlotData *) slot; + return _slot->hasDarkColor() ? -1 : 0; +} + +void spine_slot_data_set_has_dark_color(spine_slot_data slot, spine_bool hasDarkColor) { + if (slot == nullptr) return; + SlotData *_slot = (SlotData *) slot; + _slot->setHasDarkColor(hasDarkColor); +} + +const utf8 *spine_slot_data_get_attachment_name(spine_slot_data slot) { + if (slot == nullptr) return nullptr; + SlotData *_slot = (SlotData *) slot; + return (utf8 *) _slot->getAttachmentName().buffer(); +} + +void spine_slot_data_set_attachment_name(spine_slot_data slot, const utf8 *attachmentName) { + if (slot == nullptr) return; + SlotData *_slot = (SlotData *) slot; + _slot->setAttachmentName(attachmentName); +} + +spine_blend_mode spine_slot_data_get_blend_mode(spine_slot_data slot) { + if (slot == nullptr) return SPINE_BLEND_MODE_NORMAL; + SlotData *_slot = (SlotData *) slot; + return (spine_blend_mode) _slot->getBlendMode(); +} + +void spine_slot_data_set_blend_mode(spine_slot_data slot, spine_blend_mode blendMode) { + if (slot == nullptr) return; + SlotData *_slot = (SlotData *) slot; + _slot->setBlendMode((BlendMode) blendMode); +} + +spine_bool spine_slot_data_is_visible(spine_slot_data slot) { + if (slot == nullptr) return false; + SlotData *_slot = (SlotData *) slot; + return _slot->isVisible(); +} + +void spine_slot_data_set_visible(spine_slot_data slot, spine_bool visible) { + if (slot == nullptr) return; + SlotData *_slot = (SlotData *) slot; + _slot->setVisible(visible); +} + +// Slot +void spine_slot_set_to_setup_pose(spine_slot slot) { + if (slot == nullptr) return; + Slot *_slot = (Slot *) slot; + _slot->setToSetupPose(); +} + +spine_slot_data spine_slot_get_data(spine_slot slot) { + if (slot == nullptr) return nullptr; + Slot *_slot = (Slot *) slot; + return (spine_slot_data) &_slot->getData(); +} + +spine_bone spine_slot_get_bone(spine_slot slot) { + if (slot == nullptr) return nullptr; + Slot *_slot = (Slot *) slot; + return (spine_bone) &_slot->getBone(); +} + +spine_skeleton spine_slot_get_skeleton(spine_slot slot) { + if (slot == nullptr) return nullptr; + Slot *_slot = (Slot *) slot; + return (spine_skeleton) &_slot->getSkeleton(); +} + +spine_color spine_slot_get_color(spine_slot slot) { + if (slot == nullptr) return (spine_color) &NULL_COLOR; + Slot *_slot = (Slot *) slot; + return (spine_color) &_slot->getColor(); +} + +void spine_slot_set_color(spine_slot slot, float r, float g, float b, float a) { + if (slot == nullptr) return; + Slot *_slot = (Slot *) slot; + _slot->getColor().set(r, g, b, a); +} + +spine_color spine_slot_get_dark_color(spine_slot slot) { + if (slot == nullptr) return (spine_color) &NULL_COLOR; + Slot *_slot = (Slot *) slot; + return (spine_color) &_slot->getDarkColor(); +} + +void spine_slot_set_dark_color(spine_slot slot, float r, float g, float b, float a) { + if (slot == nullptr) return; + Slot *_slot = (Slot *) slot; + _slot->getDarkColor().set(r, g, b, a); +} + +spine_bool spine_slot_has_dark_color(spine_slot slot) { + if (slot == nullptr) return 0; + Slot *_slot = (Slot *) slot; + return _slot->hasDarkColor() ? -1 : 0; +} + +spine_attachment spine_slot_get_attachment(spine_slot slot) { + if (slot == nullptr) return nullptr; + Slot *_slot = (Slot *) slot; + return (spine_attachment) _slot->getAttachment(); +} + +void spine_slot_set_attachment(spine_slot slot, spine_attachment attachment) { + if (slot == nullptr) return; + Slot *_slot = (Slot *) slot; + _slot->setAttachment((Attachment *) attachment); +} + +int32_t spine_slot_get_sequence_index(spine_slot slot) { + if (slot == nullptr) return 0; + Slot *_slot = (Slot *) slot; + return _slot->getSequenceIndex(); +} + +void spine_slot_set_sequence_index(spine_slot slot, int32_t sequenceIndex) { + if (slot == nullptr) return; + Slot *_slot = (Slot *) slot; + _slot->setSequenceIndex(sequenceIndex); +} + +// BoneData +int32_t spine_bone_data_get_index(spine_bone_data data) { + if (data == nullptr) return 0; + BoneData *_data = (BoneData *) data; + return _data->getIndex(); +} + +const utf8 *spine_bone_data_get_name(spine_bone_data data) { + if (data == nullptr) return nullptr; + BoneData *_data = (BoneData *) data; + return (utf8 *) _data->getName().buffer(); +} + +spine_bone_data spine_bone_data_get_parent(spine_bone_data data) { + if (data == nullptr) return nullptr; + BoneData *_data = (BoneData *) data; + return (spine_bone_data) _data->getParent(); +} + +float spine_bone_data_get_length(spine_bone_data data) { + if (data == nullptr) return 0; + BoneData *_data = (BoneData *) data; + return _data->getLength(); +} + +void spine_bone_data_set_length(spine_bone_data data, float length) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->setLength(length); +} + +float spine_bone_data_get_x(spine_bone_data data) { + if (data == nullptr) return 0; + BoneData *_data = (BoneData *) data; + return _data->getX(); +} + +void spine_bone_data_set_x(spine_bone_data data, float x) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->setX(x); +} + +float spine_bone_data_get_y(spine_bone_data data) { + if (data == nullptr) return 0; + BoneData *_data = (BoneData *) data; + return _data->getY(); +} + +void spine_bone_data_set_y(spine_bone_data data, float y) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->setY(y); +} + +float spine_bone_data_get_rotation(spine_bone_data data) { + if (data == nullptr) return 0; + BoneData *_data = (BoneData *) data; + return _data->getRotation(); +} + +void spine_bone_data_set_rotation(spine_bone_data data, float rotation) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->setRotation(rotation); +} + +float spine_bone_data_get_scale_x(spine_bone_data data) { + if (data == nullptr) return 0; + BoneData *_data = (BoneData *) data; + return _data->getScaleX(); +} + +void spine_bone_data_set_scale_x(spine_bone_data data, float scaleX) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->setScaleX(scaleX); +} + +float spine_bone_data_get_scale_y(spine_bone_data data) { + if (data == nullptr) return 0; + BoneData *_data = (BoneData *) data; + return _data->getScaleY(); +} + +void spine_bone_data_set_scale_y(spine_bone_data data, float scaleY) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->setScaleY(scaleY); +} + +float spine_bone_data_get_shear_x(spine_bone_data data) { + if (data == nullptr) return 0; + BoneData *_data = (BoneData *) data; + return _data->getShearX(); +} + +void spine_bone_data_set_shear_x(spine_bone_data data, float shearX) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->setShearX(shearX); +} + +float spine_bone_data_get_shear_y(spine_bone_data data) { + if (data == nullptr) return 0; + BoneData *_data = (BoneData *) data; + return _data->getShearY(); +} + +void spine_bone_data_set_shear_y(spine_bone_data data, float y) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->setShearY(y); +} + +spine_inherit spine_bone_data_get_inherit(spine_bone_data data) { + if (data == nullptr) return SPINE_INHERIT_NORMAL; + BoneData *_data = (BoneData *) data; + return (spine_inherit) _data->getInherit(); +} + +void spine_bone_data_set_inherit(spine_bone_data data, spine_inherit inherit) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->setInherit((Inherit) inherit); +} + +spine_bool spine_bone_data_is_skin_required(spine_bone_data data) { + if (data == nullptr) return 0; + BoneData *_data = (BoneData *) data; + return _data->isSkinRequired() ? -1 : 0; +} + +void spine_bone_data_set_is_skin_required(spine_bone_data data, spine_bool isSkinRequired) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->setSkinRequired(isSkinRequired); +} + +spine_color spine_bone_data_get_color(spine_bone_data data) { + if (data == nullptr) return (spine_color) &NULL_COLOR; + BoneData *_data = (BoneData *) data; + return (spine_color) &_data->getColor(); +} + +void spine_bone_data_set_color(spine_bone_data data, float r, float g, float b, float a) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->getColor().set(r, g, b, a); +} + +spine_bool spine_bone_data_is_visible(spine_bone_data data) { + if (data == nullptr) return false; + BoneData *_data = (BoneData *) data; + return _data->isVisible(); +} + +void spine_bone_data_set_visible(spine_bone_data data, spine_bool isVisible) { + if (data == nullptr) return; + BoneData *_data = (BoneData *) data; + _data->setVisible(isVisible); +} + +// Bone +void spine_bone_set_is_y_down(spine_bool yDown) { + Bone::setYDown(yDown); +} + +spine_bool spine_bone_get_is_y_down() { + return Bone::isYDown() ? -1 : 0; +} + +void spine_bone_update(spine_bone bone) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->update(spine::Physics_Update); +} + +void spine_bone_update_world_transform(spine_bone bone) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->updateWorldTransform(); +} + +void spine_bone_update_world_transform_with(spine_bone bone, float x, float y, float rotation, float scaleX, float scaleY, float shearX, float shearY) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->updateWorldTransform(x, y, rotation, scaleX, scaleY, shearX, shearY); +} + +void spine_bone_update_applied_transform(spine_bone bone) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->updateAppliedTransform(); +} + +void spine_bone_set_to_setup_pose(spine_bone bone) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setToSetupPose(); +} + +_spine_vector tmp_vector; +spine_vector spine_bone_world_to_local(spine_bone bone, float worldX, float worldY) { + _spine_vector *coords = &tmp_vector; + if (bone == nullptr) return (spine_vector) coords; + Bone *_bone = (Bone *) bone; + _bone->worldToLocal(worldX, worldY, coords->x, coords->y); + return (spine_vector) coords; +} + +spine_vector spine_bone_world_to_parent(spine_bone bone, float worldX, float worldY) { + _spine_vector *coords = &tmp_vector; + if (bone == nullptr) return (spine_vector) coords; + Bone *_bone = (Bone *) bone; + _bone->worldToParent(worldX, worldY, coords->x, coords->y); + return (spine_vector) coords; +} + +spine_vector spine_bone_local_to_world(spine_bone bone, float localX, float localY) { + _spine_vector *coords = &tmp_vector; + if (bone == nullptr) return (spine_vector) coords; + Bone *_bone = (Bone *) bone; + _bone->localToWorld(localX, localY, coords->x, coords->y); + return (spine_vector) coords; +} + +spine_vector spine_bone_parent_to_world(spine_bone bone, float localX, float localY) { + _spine_vector *coords = &tmp_vector; + if (bone == nullptr) return (spine_vector) coords; + Bone *_bone = (Bone *) bone; + _bone->parentToWorld(localX, localY, coords->x, coords->y); + return (spine_vector) coords; +} + +float spine_bone_world_to_local_rotation(spine_bone bone, float worldRotation) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->worldToLocalRotation(worldRotation); +} + +float spine_bone_local_to_world_rotation(spine_bone bone, float localRotation) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->localToWorldRotation(localRotation); +} + +void spine_bone_rotate_world(spine_bone bone, float degrees) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->rotateWorld(degrees); +} + +float spine_bone_get_world_to_local_rotation_x(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getWorldToLocalRotationX(); +} + +float spine_bone_get_world_to_local_rotation_y(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getWorldToLocalRotationY(); +} + +spine_bone_data spine_bone_get_data(spine_bone bone) { + if (bone == nullptr) return nullptr; + Bone *_bone = (Bone *) bone; + return (spine_bone_data) &_bone->getData(); +} + +spine_skeleton spine_bone_get_skeleton(spine_bone bone) { + if (bone == nullptr) return nullptr; + Bone *_bone = (Bone *) bone; + return (spine_skeleton) &_bone->getSkeleton(); +} + +spine_bone spine_bone_get_parent(spine_bone bone) { + if (bone == nullptr) return nullptr; + Bone *_bone = (Bone *) bone; + return (spine_bone) _bone->getParent(); +} + +int32_t spine_bone_get_num_children(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return (int32_t) _bone->getChildren().size(); +} + +spine_bone *spine_bone_get_children(spine_bone bone) { + if (bone == nullptr) return nullptr; + Bone *_bone = (Bone *) bone; + return (spine_bone *) _bone->getChildren().buffer(); +} + +float spine_bone_get_x(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getX(); +} + +void spine_bone_set_x(spine_bone bone, float x) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setX(x); +} + +float spine_bone_get_y(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getY(); +} + +void spine_bone_set_y(spine_bone bone, float y) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setY(y); +} + +float spine_bone_get_rotation(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getRotation(); +} + +void spine_bone_set_rotation(spine_bone bone, float rotation) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setRotation(rotation); +} + +float spine_bone_get_scale_x(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getScaleX(); +} + +void spine_bone_set_scale_x(spine_bone bone, float scaleX) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setScaleX(scaleX); +} + +float spine_bone_get_scale_y(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getScaleY(); +} + +void spine_bone_set_scale_y(spine_bone bone, float scaleY) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setScaleY(scaleY); +} + +float spine_bone_get_shear_x(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getShearX(); +} + +void spine_bone_set_shear_x(spine_bone bone, float shearX) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setShearX(shearX); +} + +float spine_bone_get_shear_y(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getShearY(); +} + +void spine_bone_set_shear_y(spine_bone bone, float shearY) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setShearY(shearY); +} + +float spine_bone_get_applied_rotation(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getAppliedRotation(); +} + +void spine_bone_set_applied_rotation(spine_bone bone, float rotation) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setAppliedRotation(rotation); +} + +float spine_bone_get_a_x(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getAX(); +} + +void spine_bone_set_a_x(spine_bone bone, float x) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setAX(x); +} + +float spine_bone_get_a_y(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getAY(); +} + +void spine_bone_set_a_y(spine_bone bone, float y) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setAY(y); +} + +float spine_bone_get_a_scale_x(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getAScaleX(); +} + +void spine_bone_set_a_scale_x(spine_bone bone, float scaleX) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setAScaleX(scaleX); +} + +float spine_bone_get_a_scale_y(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getAScaleY(); +} + +void spine_bone_set_a_scale_y(spine_bone bone, float scaleY) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setAScaleY(scaleY); +} + +float spine_bone_get_a_shear_x(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getAShearX(); +} + +void spine_bone_set_a_shear_x(spine_bone bone, float shearX) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setAShearX(shearX); +} + +float spine_bone_get_a_shear_y(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getAShearY(); +} + +void spine_bone_set_shear_a_y(spine_bone bone, float shearY) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setAShearY(shearY); +} + +float spine_bone_get_a(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getA(); +} + +void spine_bone_set_a(spine_bone bone, float a) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setA(a); +} + +float spine_bone_get_b(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getB(); +} + +void spine_bone_set_b(spine_bone bone, float b) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setB(b); +} + +float spine_bone_get_c(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getC(); +} + +void spine_bone_set_c(spine_bone bone, float c) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setC(c); +} + +float spine_bone_get_d(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getD(); +} + +void spine_bone_set_d(spine_bone bone, float d) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setD(d); +} + +float spine_bone_get_world_x(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getWorldX(); +} + +void spine_bone_set_world_x(spine_bone bone, float worldX) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setWorldX(worldX); +} + +float spine_bone_get_world_y(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getWorldY(); +} + +void spine_bone_set_world_y(spine_bone bone, float worldY) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setWorldY(worldY); +} + +float spine_bone_get_world_rotation_x(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getWorldRotationX(); +} + +float spine_bone_get_world_rotation_y(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getWorldToLocalRotationY(); +} + +float spine_bone_get_world_scale_x(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getWorldScaleX(); +} + +float spine_bone_get_world_scale_y(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->getWorldScaleY(); +} + +spine_bool spine_bone_get_is_active(spine_bone bone) { + if (bone == nullptr) return 0; + Bone *_bone = (Bone *) bone; + return _bone->isActive() ? -1 : 0; +} + +void spine_bone_set_is_active(spine_bone bone, spine_bool isActive) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setActive(isActive); +} + +spine_inherit spine_bone_get_inherit(spine_bone bone) { + if (bone == nullptr) return SPINE_INHERIT_NORMAL; + Bone *_bone = (Bone *) bone; + return (spine_inherit) _bone->getInherit(); +} + +void spine_bone_set_inherit(spine_bone bone, spine_inherit inherit) { + if (bone == nullptr) return; + Bone *_bone = (Bone *) bone; + _bone->setInherit((spine::Inherit) inherit); +} + +// Attachment +const utf8 *spine_attachment_get_name(spine_attachment attachment) { + if (attachment == nullptr) return nullptr; + Attachment *_attachment = (Attachment *) attachment; + return (utf8 *) _attachment->getName().buffer(); +} + +spine_attachment_type spine_attachment_get_type(spine_attachment attachment) { + if (attachment == nullptr) return SPINE_ATTACHMENT_REGION; + Attachment *_attachment = (Attachment *) attachment; + if (_attachment->getRTTI().isExactly(RegionAttachment::rtti)) { + return SPINE_ATTACHMENT_REGION; + } else if (_attachment->getRTTI().isExactly(MeshAttachment::rtti)) { + return SPINE_ATTACHMENT_MESH; + } else if (_attachment->getRTTI().isExactly(ClippingAttachment::rtti)) { + return SPINE_ATTACHMENT_CLIPPING; + } else if (_attachment->getRTTI().isExactly(BoundingBoxAttachment::rtti)) { + return SPINE_ATTACHMENT_BOUNDING_BOX; + } else if (_attachment->getRTTI().isExactly(PathAttachment::rtti)) { + return SPINE_ATTACHMENT_PATH; + } else if (_attachment->getRTTI().isExactly(PointAttachment::rtti)) { + return SPINE_ATTACHMENT_POINT; + } else { + return SPINE_ATTACHMENT_REGION; + } +} + +spine_attachment spine_attachment_copy(spine_attachment attachment) { + if (attachment == nullptr) return nullptr; + Attachment *_attachment = (Attachment *) attachment; + return (spine_attachment) _attachment->copy(); +} + +void spine_attachment_dispose(spine_attachment attachment) { + if (attachment == nullptr) return; + Attachment *_attachment = (Attachment *) attachment; + delete _attachment; +} + +// PointAttachment +spine_vector spine_point_attachment_compute_world_position(spine_point_attachment attachment, spine_bone bone) { + _spine_vector *result = &tmp_vector; + if (attachment == nullptr) return (spine_vector) result; + PointAttachment *_attachment = (PointAttachment *) attachment; + _attachment->computeWorldPosition(*(Bone *) bone, result->x, result->y); + return (spine_vector) result; +} + +float spine_point_attachment_compute_world_rotation(spine_point_attachment attachment, spine_bone bone) { + if (attachment == nullptr) return 0; + PointAttachment *_attachment = (PointAttachment *) attachment; + return _attachment->computeWorldRotation(*(Bone *) bone); +} + +float spine_point_attachment_get_x(spine_point_attachment attachment) { + if (attachment == nullptr) return 0; + PointAttachment *_attachment = (PointAttachment *) attachment; + return _attachment->getX(); +} + +void spine_point_attachment_set_x(spine_point_attachment attachment, float x) { + if (attachment == nullptr) return; + PointAttachment *_attachment = (PointAttachment *) attachment; + _attachment->setX(x); +} + +float spine_point_attachment_get_y(spine_point_attachment attachment) { + if (attachment == nullptr) return 0; + PointAttachment *_attachment = (PointAttachment *) attachment; + return _attachment->getY(); +} + +void spine_point_attachment_set_y(spine_point_attachment attachment, float y) { + if (attachment == nullptr) return; + PointAttachment *_attachment = (PointAttachment *) attachment; + _attachment->setY(y); +} + +float spine_point_attachment_get_rotation(spine_point_attachment attachment) { + if (attachment == nullptr) return 0; + PointAttachment *_attachment = (PointAttachment *) attachment; + return _attachment->getRotation(); +} + +void spine_point_attachment_set_rotation(spine_point_attachment attachment, float rotation) { + if (attachment == nullptr) return; + PointAttachment *_attachment = (PointAttachment *) attachment; + _attachment->setRotation(rotation); +} + +spine_color spine_point_attachment_get_color(spine_point_attachment attachment) { + if (attachment == nullptr) return (spine_color) &NULL_COLOR; + PointAttachment *_attachment = (PointAttachment *) attachment; + return (spine_color) &_attachment->getColor(); +} + +void spine_point_attachment_set_color(spine_point_attachment attachment, float r, float g, float b, float a) { + if (attachment == nullptr) return; + PointAttachment *_attachment = (PointAttachment *) attachment; + _attachment->getColor().set(r, g, b, a); +} + +// RegionAttachment +void spine_region_attachment_update_region(spine_region_attachment attachment) { + if (attachment == nullptr) return; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + _attachment->updateRegion(); +} + +void spine_region_attachment_compute_world_vertices(spine_region_attachment attachment, spine_slot slot, float *worldVertices) { + if (attachment == nullptr) return; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + _attachment->computeWorldVertices(*(Slot *) slot, worldVertices, 0); +} + +float spine_region_attachment_get_x(spine_region_attachment attachment) { + if (attachment == nullptr) return 0; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return _attachment->getX(); +} + +void spine_region_attachment_set_x(spine_region_attachment attachment, float x) { + if (attachment == nullptr) return; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + _attachment->setX(x); +} + +float spine_region_attachment_get_y(spine_region_attachment attachment) { + if (attachment == nullptr) return 0; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return _attachment->getY(); +} + +void spine_region_attachment_set_y(spine_region_attachment attachment, float y) { + if (attachment == nullptr) return; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + _attachment->setY(y); +} + +float spine_region_attachment_get_rotation(spine_region_attachment attachment) { + if (attachment == nullptr) return 0; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return _attachment->getRotation(); +} + +void spine_region_attachment_set_rotation(spine_region_attachment attachment, float rotation) { + if (attachment == nullptr) return; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + _attachment->setRotation(rotation); +} + +float spine_region_attachment_get_scale_x(spine_region_attachment attachment) { + if (attachment == nullptr) return 0; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return _attachment->getScaleX(); +} + +void spine_region_attachment_set_scale_x(spine_region_attachment attachment, float scaleX) { + if (attachment == nullptr) return; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + _attachment->setScaleX(scaleX); +} + +float spine_region_attachment_get_scale_y(spine_region_attachment attachment) { + if (attachment == nullptr) return 0; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return _attachment->getScaleY(); +} + +void spine_region_attachment_set_scale_y(spine_region_attachment attachment, float scaleY) { + if (attachment == nullptr) return; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + _attachment->setScaleY(scaleY); +} + +float spine_region_attachment_get_width(spine_region_attachment attachment) { + if (attachment == nullptr) return 0; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return _attachment->getWidth(); +} + +void spine_region_attachment_set_width(spine_region_attachment attachment, float width) { + if (attachment == nullptr) return; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + _attachment->setWidth(width); +} + +float spine_region_attachment_get_height(spine_region_attachment attachment) { + if (attachment == nullptr) return 0; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return _attachment->getHeight(); +} + +void spine_region_attachment_set_height(spine_region_attachment attachment, float height) { + if (attachment == nullptr) return; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + _attachment->setHeight(height); +} + +spine_color spine_region_attachment_get_color(spine_region_attachment attachment) { + if (attachment == nullptr) return (spine_color) &NULL_COLOR; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return (spine_color) &_attachment->getColor(); +} + +void spine_region_attachment_set_color(spine_region_attachment attachment, float r, float g, float b, float a) { + if (attachment == nullptr) return; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + _attachment->getColor().set(r, g, b, a); +} + +const utf8 *spine_region_attachment_get_path(spine_region_attachment attachment) { + if (attachment == nullptr) return nullptr; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return (utf8 *) _attachment->getPath().buffer(); +} + +spine_texture_region spine_region_attachment_get_region(spine_region_attachment attachment) { + if (attachment == nullptr) return nullptr; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return (spine_texture_region) _attachment->getRegion(); +} + +spine_sequence spine_region_attachment_get_sequence(spine_region_attachment attachment) { + if (attachment == nullptr) return nullptr; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return (spine_sequence) _attachment->getSequence(); +} + +int32_t spine_region_attachment_get_num_offset(spine_region_attachment attachment) { + if (attachment == nullptr) return 0; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return (int32_t) _attachment->getOffset().size(); +} + +float *spine_region_attachment_get_offset(spine_region_attachment attachment) { + if (attachment == nullptr) return nullptr; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return _attachment->getOffset().buffer(); +} + +int32_t spine_region_attachment_get_num_uvs(spine_region_attachment attachment) { + if (attachment == nullptr) return 0; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return (int32_t) _attachment->getUVs().size(); +} + +float *spine_region_attachment_get_uvs(spine_region_attachment attachment) { + if (attachment == nullptr) return nullptr; + RegionAttachment *_attachment = (RegionAttachment *) attachment; + return _attachment->getUVs().buffer(); +} + +// VertexAttachment +int32_t spine_vertex_attachment_get_world_vertices_length(spine_vertex_attachment attachment) { + if (attachment == nullptr) return 0; + VertexAttachment *_attachment = (VertexAttachment *) attachment; + return (int32_t) _attachment->getWorldVerticesLength(); +} + +void spine_vertex_attachment_compute_world_vertices(spine_vertex_attachment attachment, spine_slot slot, float *worldVertices) { + if (attachment == nullptr) return; + VertexAttachment *_attachment = (VertexAttachment *) attachment; + _attachment->computeWorldVertices(*(Slot *) slot, worldVertices); +} + +int32_t spine_vertex_attachment_get_num_bones(spine_vertex_attachment attachment) { + if (attachment == nullptr) return 0; + VertexAttachment *_attachment = (VertexAttachment *) attachment; + return (int32_t) _attachment->getBones().size(); +} + +int32_t *spine_vertex_attachment_get_bones(spine_vertex_attachment attachment) { + if (attachment == nullptr) return nullptr; + VertexAttachment *_attachment = (VertexAttachment *) attachment; + return _attachment->getBones().buffer(); +} + +// VertexAttachment +int32_t spine_vertex_attachment_get_num_vertices(spine_vertex_attachment attachment) { + if (attachment == nullptr) return 0; + VertexAttachment *_attachment = (VertexAttachment *) attachment; + return (int32_t) _attachment->getVertices().size(); +} + +float *spine_vertex_attachment_get_vertices(spine_vertex_attachment attachment) { + if (attachment == nullptr) return nullptr; + VertexAttachment *_attachment = (VertexAttachment *) attachment; + return _attachment->getVertices().buffer(); +} + +spine_attachment spine_vertex_attachment_get_timeline_attachment(spine_vertex_attachment attachment) { + if (attachment == nullptr) return nullptr; + VertexAttachment *_attachment = (VertexAttachment *) attachment; + return (spine_attachment) _attachment->getTimelineAttachment(); +} + +void spine_vertex_attachment_set_timeline_attachment(spine_vertex_attachment attachment, spine_attachment timelineAttachment) { + if (attachment == nullptr) return; + VertexAttachment *_attachment = (VertexAttachment *) attachment; + _attachment->setTimelineAttachment((Attachment *) timelineAttachment); +} + +// MeshAttachment +void spine_mesh_attachment_update_region(spine_mesh_attachment attachment) { + if (attachment == nullptr) return; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + _attachment->updateRegion(); +} + +int32_t spine_mesh_attachment_get_hull_length(spine_mesh_attachment attachment) { + if (attachment == nullptr) return 0; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return _attachment->getHullLength(); +} + +void spine_mesh_attachment_set_hull_length(spine_mesh_attachment attachment, int32_t hullLength) { + if (attachment == nullptr) return; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + _attachment->setHullLength(hullLength); +} + +int32_t spine_mesh_attachment_get_num_region_uvs(spine_mesh_attachment attachment) { + if (attachment == nullptr) return 0; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return (int32_t) _attachment->getRegionUVs().size(); +} + +float *spine_mesh_attachment_get_region_uvs(spine_mesh_attachment attachment) { + if (attachment == nullptr) return nullptr; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return _attachment->getRegionUVs().buffer(); +} + +int32_t spine_mesh_attachment_get_num_uvs(spine_mesh_attachment attachment) { + if (attachment == nullptr) return 0; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return (int32_t) _attachment->getUVs().size(); +} + +float *spine_mesh_attachment_get_uvs(spine_mesh_attachment attachment) { + if (attachment == nullptr) return 0; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return _attachment->getUVs().buffer(); +} + +int32_t spine_mesh_attachment_get_num_triangles(spine_mesh_attachment attachment) { + if (attachment == nullptr) return 0; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return (int32_t) _attachment->getTriangles().size(); +} + +uint16_t *spine_mesh_attachment_get_triangles(spine_mesh_attachment attachment) { + if (attachment == nullptr) return nullptr; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return _attachment->getTriangles().buffer(); +} + +spine_color spine_mesh_attachment_get_color(spine_mesh_attachment attachment) { + if (attachment == nullptr) return (spine_color) &NULL_COLOR; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return (spine_color) &_attachment->getColor(); +} + +void spine_mesh_attachment_set_color(spine_mesh_attachment attachment, float r, float g, float b, float a) { + if (attachment == nullptr) return; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + _attachment->getColor().set(r, g, b, a); +} + +const utf8 *spine_mesh_attachment_get_path(spine_mesh_attachment attachment) { + if (attachment == nullptr) return nullptr; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return (utf8 *) _attachment->getPath().buffer(); +} + +spine_texture_region spine_mesh_attachment_get_region(spine_mesh_attachment attachment) { + if (attachment == nullptr) return nullptr; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return (spine_texture_region) _attachment->getRegion(); +} + +spine_sequence spine_mesh_attachment_get_sequence(spine_mesh_attachment attachment) { + if (attachment == nullptr) return nullptr; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return (spine_sequence) _attachment->getSequence(); +} + +spine_mesh_attachment spine_mesh_attachment_get_parent_mesh(spine_mesh_attachment attachment) { + if (attachment == nullptr) return nullptr; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return (spine_mesh_attachment) _attachment->getParentMesh(); +} + +void spine_mesh_attachment_set_parent_mesh(spine_mesh_attachment attachment, spine_mesh_attachment parentMesh) { + if (attachment == nullptr) return; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + _attachment->setParentMesh((MeshAttachment *) parentMesh); +} + +int32_t spine_mesh_attachment_get_num_edges(spine_mesh_attachment attachment) { + if (attachment == nullptr) return 0; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return (int32_t) _attachment->getEdges().size(); +} + +unsigned short *spine_mesh_attachment_get_edges(spine_mesh_attachment attachment) { + if (attachment == nullptr) return nullptr; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return _attachment->getEdges().buffer(); +} + +float spine_mesh_attachment_get_width(spine_mesh_attachment attachment) { + if (attachment == nullptr) return 0; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return _attachment->getWidth(); +} + +void spine_mesh_attachment_set_width(spine_mesh_attachment attachment, float width) { + if (attachment == nullptr) return; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + _attachment->setWidth(width); +} + +float spine_mesh_attachment_get_height(spine_mesh_attachment attachment) { + if (attachment == nullptr) return 0; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + return _attachment->getHeight(); +} + +void spine_mesh_attachment_set_height(spine_mesh_attachment attachment, float height) { + if (attachment == nullptr) return; + MeshAttachment *_attachment = (MeshAttachment *) attachment; + _attachment->setHeight(height); +} + +// ClippingAttachment +spine_slot_data spine_clipping_attachment_get_end_slot(spine_clipping_attachment attachment) { + if (attachment == nullptr) return nullptr; + ClippingAttachment *_attachment = (ClippingAttachment *) attachment; + return (spine_slot_data) _attachment->getEndSlot(); +} + +void spine_clipping_attachment_set_end_slot(spine_clipping_attachment attachment, spine_slot_data endSlot) { + if (attachment == nullptr) return; + ClippingAttachment *_attachment = (ClippingAttachment *) attachment; + _attachment->setEndSlot((SlotData *) endSlot); +} + +spine_color spine_clipping_attachment_get_color(spine_clipping_attachment attachment) { + if (attachment == nullptr) return (spine_color) &NULL_COLOR; + ClippingAttachment *_attachment = (ClippingAttachment *) attachment; + return (spine_color) &_attachment->getColor(); +} + +void spine_clipping_attachment_set_color(spine_clipping_attachment attachment, float r, float g, float b, float a) { + if (attachment == nullptr) return; + ClippingAttachment *_attachment = (ClippingAttachment *) attachment; + _attachment->getColor().set(r, g, b, a); +} + +// BoundingBoxAttachment +spine_color spine_bounding_box_attachment_get_color(spine_bounding_box_attachment attachment) { + if (attachment == nullptr) return (spine_color) &NULL_COLOR; + BoundingBoxAttachment *_attachment = (BoundingBoxAttachment *) attachment; + return (spine_color) &_attachment->getColor(); +} + +void spine_bounding_box_attachment_set_color(spine_bounding_box_attachment attachment, float r, float g, float b, float a) { + if (attachment == nullptr) return; + BoundingBoxAttachment *_attachment = (BoundingBoxAttachment *) attachment; + _attachment->getColor().set(r, g, b, a); +} + +// PathAttachment +int32_t spine_path_attachment_get_num_lengths(spine_path_attachment attachment) { + if (attachment == nullptr) return 0; + PathAttachment *_attachment = (PathAttachment *) attachment; + return (int32_t) _attachment->getLengths().size(); +} + +float *spine_path_attachment_get_lengths(spine_path_attachment attachment) { + if (attachment == nullptr) return nullptr; + PathAttachment *_attachment = (PathAttachment *) attachment; + return _attachment->getLengths().buffer(); +} + +spine_bool spine_path_attachment_get_is_closed(spine_path_attachment attachment) { + if (attachment == nullptr) return 0; + PathAttachment *_attachment = (PathAttachment *) attachment; + return _attachment->isClosed() ? -1 : 0; +} + +void spine_path_attachment_set_is_closed(spine_path_attachment attachment, spine_bool isClosed) { + if (attachment == nullptr) return; + PathAttachment *_attachment = (PathAttachment *) attachment; + _attachment->setClosed(isClosed); +} + +spine_bool spine_path_attachment_get_is_constant_speed(spine_path_attachment attachment) { + if (attachment == nullptr) return 0; + PathAttachment *_attachment = (PathAttachment *) attachment; + return _attachment->isConstantSpeed() ? -1 : 0; +} + +void spine_path_attachment_set_is_constant_speed(spine_path_attachment attachment, spine_bool isConstantSpeed) { + if (attachment == nullptr) return; + PathAttachment *_attachment = (PathAttachment *) attachment; + _attachment->setConstantSpeed(isConstantSpeed); +} + +spine_color spine_path_attachment_get_color(spine_path_attachment attachment) { + if (attachment == nullptr) return (spine_color) &NULL_COLOR; + PathAttachment *_attachment = (PathAttachment *) attachment; + return (spine_color) &_attachment->getColor(); +} + +void spine_path_attachment_set_color(spine_path_attachment attachment, float r, float g, float b, float a) { + if (attachment == nullptr) return; + PathAttachment *_attachment = (PathAttachment *) attachment; + _attachment->getColor().set(r, g, b, a); +} + +// Skin +void spine_skin_set_attachment(spine_skin skin, int32_t slotIndex, const utf8 *name, spine_attachment attachment) { + if (skin == nullptr) return; + Skin *_skin = (Skin *) skin; + _skin->setAttachment(slotIndex, name, (Attachment *) attachment); +} + +spine_attachment spine_skin_get_attachment(spine_skin skin, int32_t slotIndex, const utf8 *name) { + if (skin == nullptr) return nullptr; + Skin *_skin = (Skin *) skin; + return (spine_attachment) _skin->getAttachment(slotIndex, name); +} + +void spine_skin_remove_attachment(spine_skin skin, int32_t slotIndex, const utf8 *name) { + if (skin == nullptr) return; + Skin *_skin = (Skin *) skin; + _skin->removeAttachment(slotIndex, name); +} + +const utf8 *spine_skin_get_name(spine_skin skin) { + if (skin == nullptr) return nullptr; + Skin *_skin = (Skin *) skin; + return (utf8 *) _skin->getName().buffer(); +} + +void spine_skin_add_skin(spine_skin skin, spine_skin other) { + if (skin == nullptr) return; + if (other == nullptr) return; + Skin *_skin = (Skin *) skin; + _skin->addSkin((Skin *) other); +} + +void spine_skin_copy_skin(spine_skin skin, spine_skin other) { + if (skin == nullptr) return; + if (other == nullptr) return; + Skin *_skin = (Skin *) skin; + _skin->copySkin((Skin *) other); +} + +spine_skin_entries spine_skin_get_entries(spine_skin skin) { + if (skin == nullptr) return nullptr; + Skin *_skin = (Skin *) skin; + _spine_skin_entries *entries = SpineExtension::getInstance()->calloc<_spine_skin_entries>(1, __FILE__, __LINE__); + { + Skin::AttachmentMap::Entries mapEntries = _skin->getAttachments(); + while (mapEntries.hasNext()) entries->numEntries++; + } + { + entries->entries = SpineExtension::getInstance()->calloc<_spine_skin_entry>(entries->numEntries, __FILE__, __LINE__); + Skin::AttachmentMap::Entries mapEntries = _skin->getAttachments(); + int32_t i = 0; + while (mapEntries.hasNext()) { + Skin::AttachmentMap::Entry entry = mapEntries.next(); + entries->entries[i++] = {(int32_t) entry._slotIndex, (utf8 *) entry._name.buffer(), (spine_attachment) entry._attachment}; + } + } + return (spine_skin_entries) entries; +} + +int32_t spine_skin_entries_get_num_entries(spine_skin_entries entries) { + if (!entries) return 0; + return ((_spine_skin_entries *) entries)->numEntries; +} + +spine_skin_entry spine_skin_entries_get_entry(spine_skin_entries entries, int32_t index) { + if (!entries) return 0; + return (spine_skin_entry) & ((_spine_skin_entries *) entries)->entries[index]; +} + +void spine_skin_entries_dispose(spine_skin_entries entries) { + if (entries == nullptr) return; + SpineExtension::getInstance()->free(((_spine_skin_entries *) entries)->entries, __FILE__, __LINE__); + SpineExtension::getInstance()->free(entries, __FILE__, __LINE__); +} + +int32_t spine_skin_entry_get_slot_index(spine_skin_entry entry) { + if (!entry) return 0; + return ((_spine_skin_entry *) entry)->slotIndex; +} + +utf8 *spine_skin_entry_get_name(spine_skin_entry entry) { + if (!entry) return nullptr; + return ((_spine_skin_entry *) entry)->name; +} + +spine_attachment spine_skin_entry_get_attachment(spine_skin_entry entry) { + if (!entry) return nullptr; + return ((_spine_skin_entry *) entry)->attachment; +} + +int32_t spine_skin_get_num_bones(spine_skin skin) { + if (skin == nullptr) return 0; + Skin *_skin = (Skin *) skin; + return (int32_t) _skin->getBones().size(); +} + +spine_bone_data *spine_skin_get_bones(spine_skin skin) { + if (skin == nullptr) return nullptr; + Skin *_skin = (Skin *) skin; + return (spine_bone_data *) _skin->getBones().buffer(); +} + +int32_t spine_skin_get_num_constraints(spine_skin skin) { + if (skin == nullptr) return 0; + Skin *_skin = (Skin *) skin; + return (int32_t) _skin->getConstraints().size(); +} + +spine_constraint_data *spine_skin_get_constraints(spine_skin skin) { + if (skin == nullptr) return nullptr; + Skin *_skin = (Skin *) skin; + return (spine_constraint_data *) _skin->getConstraints().buffer(); +} + +spine_skin spine_skin_create(const utf8 *name) { + if (name == nullptr) return nullptr; + return (spine_skin) new (__FILE__, __LINE__) Skin(name); +} + +void spine_skin_dispose(spine_skin skin) { + if (skin == nullptr) return; + Skin *_skin = (Skin *) skin; + delete _skin; +} + +// ConstraintData +spine_constraint_type spine_constraint_data_get_type(spine_constraint_data data) { + if (data == nullptr) return SPINE_CONSTRAINT_IK; + ConstraintData *_data = (ConstraintData *) data; + if (_data->getRTTI().isExactly(IkConstraintData::rtti)) { + return SPINE_CONSTRAINT_IK; + } else if (_data->getRTTI().isExactly(TransformConstraintData::rtti)) { + return SPINE_CONSTRAINT_TRANSFORM; + } else if (_data->getRTTI().isExactly(PathConstraintData::rtti)) { + return SPINE_CONSTRAINT_PATH; + } else { + return SPINE_CONSTRAINT_IK; + } +} + +const utf8 *spine_constraint_data_get_name(spine_constraint_data data) { + if (data == nullptr) return nullptr; + ConstraintData *_data = (ConstraintData *) data; + return (utf8 *) _data->getName().buffer(); +} + +uint64_t spine_constraint_data_get_order(spine_constraint_data data) { + if (data == nullptr) return 0; + ConstraintData *_data = (ConstraintData *) data; + return (uint64_t) _data->getOrder(); +} + +void spine_constraint_data_set_order(spine_constraint_data data, uint64_t order) { + if (data == nullptr) return; + ConstraintData *_data = (ConstraintData *) data; + _data->setOrder((size_t) order); +} + +spine_bool spine_constraint_data_get_is_skin_required(spine_constraint_data data) { + if (data == nullptr) return 0; + ConstraintData *_data = (ConstraintData *) data; + return _data->isSkinRequired() ? -1 : 0; +} + +void spine_constraint_data_set_is_skin_required(spine_constraint_data data, spine_bool isSkinRequired) { + if (data == nullptr) return; + ConstraintData *_data = (ConstraintData *) data; + _data->setSkinRequired(isSkinRequired); +} + +// IkConstraintData +int32_t spine_ik_constraint_data_get_num_bones(spine_ik_constraint_data data) { + if (data == nullptr) return 0; + IkConstraintData *_data = (IkConstraintData *) data; + return (int32_t) _data->getBones().size(); +} + +spine_bone_data *spine_ik_constraint_data_get_bones(spine_ik_constraint_data data) { + if (data == nullptr) return nullptr; + IkConstraintData *_data = (IkConstraintData *) data; + return (spine_bone_data *) _data->getBones().buffer(); +} + +spine_bone_data spine_ik_constraint_data_get_target(spine_ik_constraint_data data) { + if (data == nullptr) return nullptr; + IkConstraintData *_data = (IkConstraintData *) data; + return (spine_bone_data) _data->getTarget(); +} + +void spine_ik_constraint_data_set_target(spine_ik_constraint_data data, spine_bone_data target) { + if (data == nullptr) return; + IkConstraintData *_data = (IkConstraintData *) data; + _data->setTarget((BoneData *) target); +} + +int32_t spine_ik_constraint_data_get_bend_direction(spine_ik_constraint_data data) { + if (data == nullptr) return 1; + IkConstraintData *_data = (IkConstraintData *) data; + return _data->getBendDirection(); +} + +void spine_ik_constraint_data_set_bend_direction(spine_ik_constraint_data data, int32_t bendDirection) { + if (data == nullptr) return; + IkConstraintData *_data = (IkConstraintData *) data; + _data->setBendDirection(bendDirection); +} + +spine_bool spine_ik_constraint_data_get_compress(spine_ik_constraint_data data) { + if (data == nullptr) return 0; + IkConstraintData *_data = (IkConstraintData *) data; + return _data->getCompress() ? -1 : 0; +} + +void spine_ik_constraint_data_set_compress(spine_ik_constraint_data data, spine_bool compress) { + if (data == nullptr) return; + IkConstraintData *_data = (IkConstraintData *) data; + _data->setCompress(compress); +} + +spine_bool spine_ik_constraint_data_get_stretch(spine_ik_constraint_data data) { + if (data == nullptr) return 0; + IkConstraintData *_data = (IkConstraintData *) data; + return _data->getStretch() ? -1 : 0; +} + +void spine_ik_constraint_data_set_stretch(spine_ik_constraint_data data, spine_bool stretch) { + if (data == nullptr) return; + IkConstraintData *_data = (IkConstraintData *) data; + _data->setStretch(stretch); +} + +spine_bool spine_ik_constraint_data_get_uniform(spine_ik_constraint_data data) { + if (data == nullptr) return 0; + IkConstraintData *_data = (IkConstraintData *) data; + return _data->getUniform() ? -1 : 0; +} + +float spine_ik_constraint_data_get_mix(spine_ik_constraint_data data) { + if (data == nullptr) return 0; + IkConstraintData *_data = (IkConstraintData *) data; + return _data->getMix(); +} + +void spine_ik_constraint_data_set_mix(spine_ik_constraint_data data, float mix) { + if (data == nullptr) return; + IkConstraintData *_data = (IkConstraintData *) data; + _data->setMix(mix); +} + +float spine_ik_constraint_data_get_softness(spine_ik_constraint_data data) { + if (data == nullptr) return 0; + IkConstraintData *_data = (IkConstraintData *) data; + return _data->getSoftness(); +} + +void spine_ik_constraint_data_set_softness(spine_ik_constraint_data data, float softness) { + if (data == nullptr) return; + IkConstraintData *_data = (IkConstraintData *) data; + _data->setSoftness(softness); +} + +// IKConstraint +void spine_ik_constraint_update(spine_ik_constraint constraint) { + if (constraint == nullptr) return; + IkConstraint *_constraint = (IkConstraint *) constraint; + _constraint->update(spine::Physics_Update); +} + +int32_t spine_ik_constraint_get_order(spine_ik_constraint constraint) { + if (constraint == nullptr) return 0; + IkConstraint *_constraint = (IkConstraint *) constraint; + return _constraint->getOrder(); +} + +spine_ik_constraint_data spine_ik_constraint_get_data(spine_ik_constraint constraint) { + if (constraint == nullptr) return nullptr; + IkConstraint *_constraint = (IkConstraint *) constraint; + return (spine_ik_constraint_data) &_constraint->getData(); +} + +int32_t spine_ik_constraint_get_num_bones(spine_ik_constraint constraint) { + if (constraint == nullptr) return 0; + IkConstraint *_constraint = (IkConstraint *) constraint; + return (int32_t) _constraint->getBones().size(); +} + +spine_bone *spine_ik_constraint_get_bones(spine_ik_constraint constraint) { + if (constraint == nullptr) return nullptr; + IkConstraint *_constraint = (IkConstraint *) constraint; + return (spine_bone *) _constraint->getBones().buffer(); +} + +spine_bone spine_ik_constraint_get_target(spine_ik_constraint constraint) { + if (constraint == nullptr) return nullptr; + IkConstraint *_constraint = (IkConstraint *) constraint; + return (spine_bone) _constraint->getTarget(); +} + +void spine_ik_constraint_set_target(spine_ik_constraint constraint, spine_bone target) { + if (constraint == nullptr) return; + IkConstraint *_constraint = (IkConstraint *) constraint; + _constraint->setTarget((Bone *) target); +} + +int32_t spine_ik_constraint_get_bend_direction(spine_ik_constraint constraint) { + if (constraint == nullptr) return 1; + IkConstraint *_constraint = (IkConstraint *) constraint; + return _constraint->getBendDirection(); +} + +void spine_ik_constraint_set_bend_direction(spine_ik_constraint constraint, int32_t bendDirection) { + if (constraint == nullptr) return; + IkConstraint *_constraint = (IkConstraint *) constraint; + _constraint->setBendDirection(bendDirection); +} + +spine_bool spine_ik_constraint_get_compress(spine_ik_constraint constraint) { + if (constraint == nullptr) return 0; + IkConstraint *_constraint = (IkConstraint *) constraint; + return _constraint->getCompress() ? -1 : 0; +} + +void spine_ik_constraint_set_compress(spine_ik_constraint constraint, spine_bool compress) { + if (constraint == nullptr) return; + IkConstraint *_constraint = (IkConstraint *) constraint; + _constraint->setCompress(compress); +} + +spine_bool spine_ik_constraint_get_stretch(spine_ik_constraint constraint) { + if (constraint == nullptr) return 0; + IkConstraint *_constraint = (IkConstraint *) constraint; + return _constraint->getStretch() ? -1 : 0; +} + +void spine_ik_constraint_set_stretch(spine_ik_constraint constraint, spine_bool stretch) { + if (constraint == nullptr) return; + IkConstraint *_constraint = (IkConstraint *) constraint; + _constraint->setStretch(stretch); +} + +float spine_ik_constraint_get_mix(spine_ik_constraint constraint) { + if (constraint == nullptr) return 0; + IkConstraint *_constraint = (IkConstraint *) constraint; + return _constraint->getMix(); +} + +void spine_ik_constraint_set_mix(spine_ik_constraint constraint, float mix) { + if (constraint == nullptr) return; + IkConstraint *_constraint = (IkConstraint *) constraint; + _constraint->setMix(mix); +} + +float spine_ik_constraint_get_softness(spine_ik_constraint constraint) { + if (constraint == nullptr) return 0; + IkConstraint *_constraint = (IkConstraint *) constraint; + return _constraint->getSoftness(); +} + +void spine_ik_constraint_set_softness(spine_ik_constraint constraint, float softness) { + if (constraint == nullptr) return; + IkConstraint *_constraint = (IkConstraint *) constraint; + _constraint->setSoftness(softness); +} + +spine_bool spine_ik_constraint_get_is_active(spine_ik_constraint constraint) { + if (constraint == nullptr) return 0; + IkConstraint *_constraint = (IkConstraint *) constraint; + return _constraint->isActive() ? -1 : 0; +} + +void spine_ik_constraint_set_is_active(spine_ik_constraint constraint, spine_bool isActive) { + if (constraint == nullptr) return; + IkConstraint *_constraint = (IkConstraint *) constraint; + _constraint->setActive(isActive); +} + +// TransformConstraintData +int32_t spine_transform_constraint_data_get_num_bones(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return (int32_t) _data->getBones().size(); +} + +spine_bone_data *spine_transform_constraint_data_get_bones(spine_transform_constraint_data data) { + if (data == nullptr) return nullptr; + TransformConstraintData *_data = (TransformConstraintData *) data; + return (spine_bone_data *) _data->getBones().buffer(); +} + +spine_bone_data spine_transform_constraint_data_get_target(spine_transform_constraint_data data) { + if (data == nullptr) return nullptr; + TransformConstraintData *_data = (TransformConstraintData *) data; + return (spine_bone_data) _data->getTarget(); +} + +void spine_transform_constraint_data_set_target(spine_transform_constraint_data data, spine_bone_data target) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setTarget((BoneData *) target); +} + +float spine_transform_constraint_data_get_mix_rotate(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getMixRotate(); +} + +void spine_transform_constraint_data_set_mix_rotate(spine_transform_constraint_data data, float mixRotate) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setMixRotate(mixRotate); +} + +float spine_transform_constraint_data_get_mix_x(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getMixX(); +} + +void spine_transform_constraint_data_set_mix_x(spine_transform_constraint_data data, float mixX) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setMixX(mixX); +} + +float spine_transform_constraint_data_get_mix_y(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getMixY(); +} + +void spine_transform_constraint_data_set_mix_y(spine_transform_constraint_data data, float mixY) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setMixY(mixY); +} + +float spine_transform_constraint_data_get_mix_scale_x(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getMixScaleX(); +} + +void spine_transform_constraint_data_set_mix_scale_x(spine_transform_constraint_data data, float mixScaleX) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setMixScaleX(mixScaleX); +} + +float spine_transform_constraint_data_get_mix_scale_y(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getMixScaleY(); +} + +void spine_transform_constraint_data_set_mix_scale_y(spine_transform_constraint_data data, float mixScaleY) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setMixScaleY(mixScaleY); +} + +float spine_transform_constraint_data_get_mix_shear_y(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getMixShearY(); +} + +void spine_transform_constraint_data_set_mix_shear_y(spine_transform_constraint_data data, float mixShearY) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setMixShearY(mixShearY); +} + +float spine_transform_constraint_data_get_offset_rotation(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getOffsetRotation(); +} + +void spine_transform_constraint_data_set_offset_rotation(spine_transform_constraint_data data, float offsetRotation) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setOffsetRotation(offsetRotation); +} + +float spine_transform_constraint_data_get_offset_x(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getOffsetX(); +} + +void spine_transform_constraint_data_set_offset_x(spine_transform_constraint_data data, float offsetX) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setOffsetX(offsetX); +} + +float spine_transform_constraint_data_get_offset_y(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getOffsetY(); +} + +void spine_transform_constraint_data_set_offset_y(spine_transform_constraint_data data, float offsetY) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setOffsetY(offsetY); +} + +float spine_transform_constraint_data_get_offset_scale_x(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getOffsetScaleX(); +} + +void spine_transform_constraint_data_set_offset_scale_x(spine_transform_constraint_data data, float offsetScaleX) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setOffsetScaleX(offsetScaleX); +} + +float spine_transform_constraint_data_get_offset_scale_y(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getOffsetScaleY(); +} + +void spine_transform_constraint_data_set_offset_scale_y(spine_transform_constraint_data data, float offsetScaleY) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setOffsetScaleY(offsetScaleY); +} + +float spine_transform_constraint_data_get_offset_shear_y(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->getOffsetShearY(); +} + +void spine_transform_constraint_data_set_offset_shear_y(spine_transform_constraint_data data, float offsetShearY) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setOffsetShearY(offsetShearY); +} + +spine_bool spine_transform_constraint_data_get_is_relative(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->isRelative() ? -1 : 0; +} + +void spine_transform_constraint_data_set_is_relative(spine_transform_constraint_data data, spine_bool isRelative) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setRelative(isRelative); +} + +spine_bool spine_transform_constraint_data_get_is_local(spine_transform_constraint_data data) { + if (data == nullptr) return 0; + TransformConstraintData *_data = (TransformConstraintData *) data; + return _data->isLocal() ? -1 : 0; +} + +void spine_transform_constraint_data_set_is_local(spine_transform_constraint_data data, spine_bool isLocal) { + if (data == nullptr) return; + TransformConstraintData *_data = (TransformConstraintData *) data; + _data->setLocal(isLocal); +} + +// TransformConstraint +void spine_transform_constraint_update(spine_transform_constraint constraint) { + if (constraint == nullptr) return; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + _constraint->update(spine::Physics_Update); +} + +int32_t spine_transform_constraint_get_order(spine_transform_constraint constraint) { + if (constraint == nullptr) return 0; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return _constraint->getOrder(); +} + +spine_transform_constraint_data spine_transform_constraint_get_data(spine_transform_constraint constraint) { + if (constraint == nullptr) return nullptr; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return (spine_transform_constraint_data) &_constraint->getData(); +} + +int32_t spine_transform_constraint_get_num_bones(spine_transform_constraint constraint) { + if (constraint == nullptr) return 0; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return (int32_t) _constraint->getBones().size(); +} + +spine_bone *spine_transform_constraint_get_bones(spine_transform_constraint constraint) { + if (constraint == nullptr) return nullptr; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return (spine_bone *) _constraint->getBones().buffer(); +} + +spine_bone spine_transform_constraint_get_target(spine_transform_constraint constraint) { + if (constraint == nullptr) return nullptr; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return (spine_bone) _constraint->getTarget(); +} + +void spine_transform_constraint_set_target(spine_transform_constraint constraint, spine_bone target) { + if (constraint == nullptr) return; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + _constraint->setTarget((Bone *) target); +} + +float spine_transform_constraint_get_mix_rotate(spine_transform_constraint constraint) { + if (constraint == nullptr) return 0; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return _constraint->getMixRotate(); +} + +void spine_transform_constraint_set_mix_rotate(spine_transform_constraint constraint, float mixRotate) { + if (constraint == nullptr) return; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + _constraint->setMixRotate(mixRotate); +} + +float spine_transform_constraint_get_mix_x(spine_transform_constraint constraint) { + if (constraint == nullptr) return 0; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return _constraint->getMixX(); +} + +void spine_transform_constraint_set_mix_x(spine_transform_constraint constraint, float mixX) { + if (constraint == nullptr) return; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + _constraint->setMixX(mixX); +} + +float spine_transform_constraint_get_mix_y(spine_transform_constraint constraint) { + if (constraint == nullptr) return 0; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return _constraint->getMixY(); +} + +void spine_transform_constraint_set_mix_y(spine_transform_constraint constraint, float mixY) { + if (constraint == nullptr) return; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + _constraint->setMixY(mixY); +} + +float spine_transform_constraint_get_mix_scale_x(spine_transform_constraint constraint) { + if (constraint == nullptr) return 0; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return _constraint->getMixScaleX(); +} + +void spine_transform_constraint_set_mix_scale_x(spine_transform_constraint constraint, float mixScaleX) { + if (constraint == nullptr) return; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + _constraint->setMixScaleX(mixScaleX); +} + +float spine_transform_constraint_get_mix_scale_y(spine_transform_constraint constraint) { + if (constraint == nullptr) return 0; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return _constraint->getMixScaleY(); +} + +void spine_transform_constraint_set_mix_scale_y(spine_transform_constraint constraint, float mixScaleY) { + if (constraint == nullptr) return; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + _constraint->setMixScaleY(mixScaleY); +} + +float spine_transform_constraint_get_mix_shear_y(spine_transform_constraint constraint) { + if (constraint == nullptr) return 0; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return _constraint->getMixShearY(); +} + +void spine_transform_constraint_set_mix_shear_y(spine_transform_constraint constraint, float mixShearY) { + if (constraint == nullptr) return; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + _constraint->setMixShearY(mixShearY); +} + +spine_bool spine_transform_constraint_get_is_active(spine_transform_constraint constraint) { + if (constraint == nullptr) return 0; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + return _constraint->isActive() ? -1 : 0; +} + +void spine_transform_constraint_set_is_active(spine_transform_constraint constraint, spine_bool isActive) { + if (constraint == nullptr) return; + TransformConstraint *_constraint = (TransformConstraint *) constraint; + _constraint->setActive(isActive); +} + +// PathConstraintData +int32_t spine_path_constraint_data_get_num_bones(spine_path_constraint_data data) { + if (data == nullptr) return 0; + PathConstraintData *_data = (PathConstraintData *) data; + return (int32_t) _data->getBones().size(); +} + +spine_bone_data *spine_path_constraint_data_get_bones(spine_path_constraint_data data) { + if (data == nullptr) return nullptr; + PathConstraintData *_data = (PathConstraintData *) data; + return (spine_bone_data *) _data->getBones().buffer(); +} + +spine_slot_data spine_path_constraint_data_get_target(spine_path_constraint_data data) { + if (data == nullptr) return nullptr; + PathConstraintData *_data = (PathConstraintData *) data; + return (spine_slot_data) _data->getTarget(); +} + +void spine_path_constraint_data_set_target(spine_path_constraint_data data, spine_slot_data target) { + if (data == nullptr) return; + PathConstraintData *_data = (PathConstraintData *) data; + _data->setTarget((SlotData *) target); +} + +spine_position_mode spine_path_constraint_data_get_position_mode(spine_path_constraint_data data) { + if (data == nullptr) return SPINE_POSITION_MODE_FIXED; + PathConstraintData *_data = (PathConstraintData *) data; + return (spine_position_mode) _data->getPositionMode(); +} + +void spine_path_constraint_data_set_position_mode(spine_path_constraint_data data, spine_position_mode positionMode) { + if (data == nullptr) return; + PathConstraintData *_data = (PathConstraintData *) data; + _data->setPositionMode((PositionMode) positionMode); +} + +spine_spacing_mode spine_path_constraint_data_get_spacing_mode(spine_path_constraint_data data) { + if (data == nullptr) return SPINE_SPACING_MODE_LENGTH; + PathConstraintData *_data = (PathConstraintData *) data; + return (spine_spacing_mode) _data->getSpacingMode(); +} + +void spine_path_constraint_data_set_spacing_mode(spine_path_constraint_data data, spine_spacing_mode spacingMode) { + if (data == nullptr) return; + PathConstraintData *_data = (PathConstraintData *) data; + _data->setSpacingMode((SpacingMode) spacingMode); +} + +spine_rotate_mode spine_path_constraint_data_get_rotate_mode(spine_path_constraint_data data) { + if (data == nullptr) return SPINE_ROTATE_MODE_TANGENT; + PathConstraintData *_data = (PathConstraintData *) data; + return (spine_rotate_mode) _data->getRotateMode(); +} + +void spine_path_constraint_data_set_rotate_mode(spine_path_constraint_data data, spine_rotate_mode rotateMode) { + if (data == nullptr) return; + PathConstraintData *_data = (PathConstraintData *) data; + _data->setRotateMode((RotateMode) rotateMode); +} + +float spine_path_constraint_data_get_offset_rotation(spine_path_constraint_data data) { + if (data == nullptr) return 0; + PathConstraintData *_data = (PathConstraintData *) data; + return _data->getOffsetRotation(); +} + +void spine_path_constraint_data_set_offset_rotation(spine_path_constraint_data data, float offsetRotation) { + if (data == nullptr) return; + PathConstraintData *_data = (PathConstraintData *) data; + _data->setOffsetRotation(offsetRotation); +} + +float spine_path_constraint_data_get_position(spine_path_constraint_data data) { + if (data == nullptr) return 0; + PathConstraintData *_data = (PathConstraintData *) data; + return _data->getPosition(); +} + +void spine_path_constraint_data_set_position(spine_path_constraint_data data, float position) { + if (data == nullptr) return; + PathConstraintData *_data = (PathConstraintData *) data; + _data->setPosition(position); +} + +float spine_path_constraint_data_get_spacing(spine_path_constraint_data data) { + if (data == nullptr) return 0; + PathConstraintData *_data = (PathConstraintData *) data; + return _data->getSpacing(); +} + +void spine_path_constraint_data_set_spacing(spine_path_constraint_data data, float spacing) { + if (data == nullptr) return; + PathConstraintData *_data = (PathConstraintData *) data; + _data->setSpacing(spacing); +} + +float spine_path_constraint_data_get_mix_rotate(spine_path_constraint_data data) { + if (data == nullptr) return 0; + PathConstraintData *_data = (PathConstraintData *) data; + return _data->getMixRotate(); +} + +void spine_path_constraint_data_set_mix_rotate(spine_path_constraint_data data, float mixRotate) { + if (data == nullptr) return; + PathConstraintData *_data = (PathConstraintData *) data; + _data->setMixRotate(mixRotate); +} + +float spine_path_constraint_data_get_mix_x(spine_path_constraint_data data) { + if (data == nullptr) return 0; + PathConstraintData *_data = (PathConstraintData *) data; + return _data->getMixX(); +} + +void spine_path_constraint_data_set_mix_x(spine_path_constraint_data data, float mixX) { + if (data == nullptr) return; + PathConstraintData *_data = (PathConstraintData *) data; + _data->setMixX(mixX); +} + +float spine_path_constraint_data_get_mix_y(spine_path_constraint_data data) { + if (data == nullptr) return 0; + PathConstraintData *_data = (PathConstraintData *) data; + return _data->getMixY(); +} + +void spine_path_constraint_data_set_mix_y(spine_path_constraint_data data, float mixY) { + if (data == nullptr) return; + PathConstraintData *_data = (PathConstraintData *) data; + _data->setMixY(mixY); +} + +// PathConstraint +void spine_path_constraint_update(spine_path_constraint constraint) { + if (constraint == nullptr) return; + PathConstraint *_constraint = (PathConstraint *) constraint; + _constraint->update(spine::Physics_Update); +} + +int32_t spine_path_constraint_get_order(spine_path_constraint constraint) { + if (constraint == nullptr) return 0; + PathConstraint *_constraint = (PathConstraint *) constraint; + return _constraint->getOrder(); +} + +spine_path_constraint_data spine_path_constraint_get_data(spine_path_constraint constraint) { + if (constraint == nullptr) return nullptr; + PathConstraint *_constraint = (PathConstraint *) constraint; + return (spine_path_constraint_data) &_constraint->getData(); +} + +int32_t spine_path_constraint_get_num_bones(spine_path_constraint constraint) { + if (constraint == nullptr) return 0; + PathConstraint *_constraint = (PathConstraint *) constraint; + return (int32_t) _constraint->getBones().size(); +} + +spine_bone *spine_path_constraint_get_bones(spine_path_constraint constraint) { + if (constraint == nullptr) return nullptr; + PathConstraint *_constraint = (PathConstraint *) constraint; + return (spine_bone *) _constraint->getBones().buffer(); +} + +spine_slot spine_path_constraint_get_target(spine_path_constraint constraint) { + if (constraint == nullptr) return nullptr; + PathConstraint *_constraint = (PathConstraint *) constraint; + return (spine_slot) _constraint->getTarget(); +} + +void spine_path_constraint_set_target(spine_path_constraint constraint, spine_slot target) { + if (constraint == nullptr) return; + PathConstraint *_constraint = (PathConstraint *) constraint; + _constraint->setTarget((Slot *) target); +} + +float spine_path_constraint_get_position(spine_path_constraint constraint) { + if (constraint == nullptr) return 0; + PathConstraint *_constraint = (PathConstraint *) constraint; + return _constraint->getPosition(); +} + +void spine_path_constraint_set_position(spine_path_constraint constraint, float position) { + if (constraint == nullptr) return; + PathConstraint *_constraint = (PathConstraint *) constraint; + _constraint->setPosition(position); +} + +float spine_path_constraint_get_spacing(spine_path_constraint constraint) { + if (constraint == nullptr) return 0; + PathConstraint *_constraint = (PathConstraint *) constraint; + return _constraint->getSpacing(); +} + +void spine_path_constraint_set_spacing(spine_path_constraint constraint, float spacing) { + if (constraint == nullptr) return; + PathConstraint *_constraint = (PathConstraint *) constraint; + _constraint->setSpacing(spacing); +} + +float spine_path_constraint_get_mix_rotate(spine_path_constraint constraint) { + if (constraint == nullptr) return 0; + PathConstraint *_constraint = (PathConstraint *) constraint; + return _constraint->getMixRotate(); +} + +void spine_path_constraint_set_mix_rotate(spine_path_constraint constraint, float mixRotate) { + if (constraint == nullptr) return; + PathConstraint *_constraint = (PathConstraint *) constraint; + _constraint->setMixRotate(mixRotate); +} + +float spine_path_constraint_get_mix_x(spine_path_constraint constraint) { + if (constraint == nullptr) return 0; + PathConstraint *_constraint = (PathConstraint *) constraint; + return _constraint->getMixX(); +} + +void spine_path_constraint_set_mix_x(spine_path_constraint constraint, float mixX) { + if (constraint == nullptr) return; + PathConstraint *_constraint = (PathConstraint *) constraint; + _constraint->setMixX(mixX); +} + +float spine_path_constraint_get_mix_y(spine_path_constraint constraint) { + if (constraint == nullptr) return 0; + PathConstraint *_constraint = (PathConstraint *) constraint; + return _constraint->getMixY(); +} + +void spine_path_constraint_set_mix_y(spine_path_constraint constraint, float mixY) { + if (constraint == nullptr) return; + PathConstraint *_constraint = (PathConstraint *) constraint; + _constraint->setMixY(mixY); +} + +spine_bool spine_path_constraint_get_is_active(spine_path_constraint constraint) { + if (constraint == nullptr) return 0; + PathConstraint *_constraint = (PathConstraint *) constraint; + return _constraint->isActive() ? -1 : 0; +} + +void spine_path_constraint_set_is_active(spine_path_constraint constraint, spine_bool isActive) { + if (constraint == nullptr) return; + PathConstraint *_constraint = (PathConstraint *) constraint; + _constraint->setActive(isActive); +} + +// PhysicsConstraintData +void spine_physics_constraint_data_set_bone(spine_physics_constraint_data data, spine_bone_data bone) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setBone((BoneData *) bone); +} + +spine_bone_data spine_physics_constraint_data_get_bone(spine_physics_constraint_data data) { + if (data == nullptr) return nullptr; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return (spine_bone_data) _data->getBone(); +} + +void spine_physics_constraint_data_set_x(spine_physics_constraint_data data, float x) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setX(x); +} + +float spine_physics_constraint_data_get_x(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getX(); +} + +void spine_physics_constraint_data_set_y(spine_physics_constraint_data data, float y) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setY(y); +} + +float spine_physics_constraint_data_get_y(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getY(); +} + +void spine_physics_constraint_data_set_rotate(spine_physics_constraint_data data, float rotate) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setRotate(rotate); +} + +float spine_physics_constraint_data_get_rotate(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getRotate(); +} + +void spine_physics_constraint_data_set_scale_x(spine_physics_constraint_data data, float scaleX) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setScaleX(scaleX); +} + +float spine_physics_constraint_data_get_scale_x(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getScaleX(); +} + +void spine_physics_constraint_data_set_shear_x(spine_physics_constraint_data data, float shearX) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setShearX(shearX); +} + +float spine_physics_constraint_data_get_shear_x(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getShearX(); +} + +void spine_physics_constraint_data_set_limit(spine_physics_constraint_data data, float limit) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setLimit(limit); +} + +float spine_physics_constraint_data_get_limit(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getLimit(); +} + +void spine_physics_constraint_data_set_step(spine_physics_constraint_data data, float step) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setStep(step); +} + +float spine_physics_constraint_data_get_step(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getStep(); +} + +void spine_physics_constraint_data_set_inertia(spine_physics_constraint_data data, float inertia) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setInertia(inertia); +} + +float spine_physics_constraint_data_get_inertia(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getInertia(); +} + +void spine_physics_constraint_data_set_strength(spine_physics_constraint_data data, float strength) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setStrength(strength); +} + +float spine_physics_constraint_data_get_strength(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getStrength(); +} + +void spine_physics_constraint_data_set_damping(spine_physics_constraint_data data, float damping) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setDamping(damping); +} + +float spine_physics_constraint_data_get_damping(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getDamping(); +} + +void spine_physics_constraint_data_set_mass_inverse(spine_physics_constraint_data data, float massInverse) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setMassInverse(massInverse); +} + +float spine_physics_constraint_data_get_mass_inverse(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getMassInverse(); +} + +void spine_physics_constraint_data_set_wind(spine_physics_constraint_data data, float wind) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setWind(wind); +} + +float spine_physics_constraint_data_get_wind(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getWind(); +} + +void spine_physics_constraint_data_set_gravity(spine_physics_constraint_data data, float gravity) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setGravity(gravity); +} + +float spine_physics_constraint_data_get_gravity(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getGravity(); +} + +void spine_physics_constraint_data_set_mix(spine_physics_constraint_data data, float mix) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setMix(mix); +} + +float spine_physics_constraint_data_get_mix(spine_physics_constraint_data data) { + if (data == nullptr) return 0.0f; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->getMix(); +} + +void spine_physics_constraint_data_set_inertia_global(spine_physics_constraint_data data, int32_t inertiaGlobal) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setInertiaGlobal(inertiaGlobal); +} + +spine_bool spine_physics_constraint_data_is_inertia_global(spine_physics_constraint_data data) { + if (data == nullptr) return false; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->isInertiaGlobal(); +} + +void spine_physics_constraint_data_set_strength_global(spine_physics_constraint_data data, spine_bool strengthGlobal) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setStrengthGlobal(strengthGlobal); +} + +spine_bool spine_physics_constraint_data_is_strength_global(spine_physics_constraint_data data) { + if (data == nullptr) return false; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->isStrengthGlobal(); +} + +void spine_physics_constraint_data_set_damping_global(spine_physics_constraint_data data, spine_bool dampingGlobal) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setDampingGlobal(dampingGlobal); +} + +spine_bool spine_physics_constraint_data_is_damping_global(spine_physics_constraint_data data) { + if (data == nullptr) return false; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->isDampingGlobal(); +} + +void spine_physics_constraint_data_set_mass_global(spine_physics_constraint_data data, spine_bool massGlobal) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setMassGlobal(massGlobal); +} + +spine_bool spine_physics_constraint_data_is_mass_global(spine_physics_constraint_data data) { + if (data == nullptr) return false; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->isMassGlobal(); +} + +void spine_physics_constraint_data_set_wind_global(spine_physics_constraint_data data, spine_bool windGlobal) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setWindGlobal(windGlobal); +} + +spine_bool spine_physics_constraint_data_is_wind_global(spine_physics_constraint_data data) { + if (data == nullptr) return false; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->isWindGlobal(); +} + +void spine_physics_constraint_data_set_gravity_global(spine_physics_constraint_data data, spine_bool gravityGlobal) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setGravityGlobal(gravityGlobal); +} + +spine_bool spine_physics_constraint_data_is_gravity_global(spine_physics_constraint_data data) { + if (data == nullptr) return false; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->isGravityGlobal(); +} + +void spine_physics_constraint_data_set_mix_global(spine_physics_constraint_data data, spine_bool mixGlobal) { + if (data == nullptr) return; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + _data->setMixGlobal(mixGlobal); +} + +spine_bool spine_physics_constraint_data_is_mix_global(spine_physics_constraint_data data) { + if (data == nullptr) return false; + PhysicsConstraintData *_data = (PhysicsConstraintData *) data; + return _data->isMixGlobal(); +} + +// PhysicsConstraint +void spine_physics_constraint_set_bone(spine_physics_constraint constraint, spine_bone bone) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setBone((Bone *) bone); +} + +spine_bone spine_physics_constraint_get_bone(spine_physics_constraint constraint) { + if (constraint == nullptr) return nullptr; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return (spine_bone) _constraint->getBone(); +} + +void spine_physics_constraint_set_inertia(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setInertia(value); +} + +float spine_physics_constraint_get_inertia(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getInertia(); +} + +void spine_physics_constraint_set_strength(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setStrength(value); +} + +float spine_physics_constraint_get_strength(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getStrength(); +} + +void spine_physics_constraint_set_damping(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setDamping(value); +} + +float spine_physics_constraint_get_damping(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getDamping(); +} + +void spine_physics_constraint_set_mass_inverse(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setMassInverse(value); +} + +float spine_physics_constraint_get_mass_inverse(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getMassInverse(); +} + +void spine_physics_constraint_set_wind(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setWind(value); +} + +float spine_physics_constraint_get_wind(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getWind(); +} + +void spine_physics_constraint_set_gravity(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setGravity(value); +} + +float spine_physics_constraint_get_gravity(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getGravity(); +} + +void spine_physics_constraint_set_mix(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setMix(value); +} + +float spine_physics_constraint_get_mix(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getMix(); +} + +void spine_physics_constraint_set_reset(spine_physics_constraint constraint, spine_bool value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setReset(value); +} + +spine_bool spine_physics_constraint_get_reset(spine_physics_constraint constraint) { + if (constraint == nullptr) return false; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getReset(); +} + +void spine_physics_constraint_set_ux(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setUx(value); +} + +float spine_physics_constraint_get_ux(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getUx(); +} + +void spine_physics_constraint_set_uy(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setUy(value); +} + +float spine_physics_constraint_get_uy(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getUy(); +} + +void spine_physics_constraint_set_cx(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setCx(value); +} + +float spine_physics_constraint_get_cx(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getCx(); +} + +void spine_physics_constraint_set_cy(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setCy(value); +} + +float spine_physics_constraint_get_cy(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getCy(); +} + +void spine_physics_constraint_set_tx(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setTx(value); +} + +float spine_physics_constraint_get_tx(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getTx(); +} + +void spine_physics_constraint_set_ty(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setTy(value); +} + +float spine_physics_constraint_get_ty(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getTy(); +} + +void spine_physics_constraint_set_x_offset(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setXOffset(value); +} + +float spine_physics_constraint_get_x_offset(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getXOffset(); +} + +void spine_physics_constraint_set_x_velocity(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setXVelocity(value); +} + +float spine_physics_constraint_get_x_velocity(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getXVelocity(); +} + +void spine_physics_constraint_set_y_offset(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setYOffset(value); +} + +float spine_physics_constraint_get_y_offset(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getYOffset(); +} + +void spine_physics_constraint_set_y_velocity(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setYVelocity(value); +} + +float spine_physics_constraint_get_y_velocity(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getYVelocity(); +} + +void spine_physics_constraint_set_rotate_offset(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setRotateOffset(value); +} + +float spine_physics_constraint_get_rotate_offset(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getRotateOffset(); +} + +void spine_physics_constraint_set_rotate_velocity(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setRotateVelocity(value); +} + +float spine_physics_constraint_get_rotate_velocity(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getRotateVelocity(); +} + +void spine_physics_constraint_set_scale_offset(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setScaleOffset(value); +} + +float spine_physics_constraint_get_scale_offset(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getScaleOffset(); +} + +void spine_physics_constraint_set_scale_velocity(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setScaleVelocity(value); +} + +float spine_physics_constraint_get_scale_velocity(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getScaleVelocity(); +} + +void spine_physics_constraint_set_active(spine_physics_constraint constraint, spine_bool value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setActive(value); +} + +spine_bool spine_physics_constraint_is_active(spine_physics_constraint constraint) { + if (constraint == nullptr) return false; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->isActive(); +} + +void spine_physics_constraint_set_remaining(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setRemaining(value); +} + +float spine_physics_constraint_get_remaining(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getRemaining(); +} + +void spine_physics_constraint_set_last_time(spine_physics_constraint constraint, float value) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->setLastTime(value); +} + +float spine_physics_constraint_get_last_time(spine_physics_constraint constraint) { + if (constraint == nullptr) return 0.0f; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + return _constraint->getLastTime(); +} + +void spine_physics_constraint_reset(spine_physics_constraint constraint) { + if (constraint == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) constraint; + _constraint->reset(); +} + +void spine_physics_constraint_update(spine_physics_constraint data, spine_physics physics) { + if (data == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) data; + _constraint->update((spine::Physics) physics); +} + +void spine_physics_constraint_translate(spine_physics_constraint data, float x, float y) { + if (data == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) data; + _constraint->translate(x, y); +} + +void spine_physics_constraint_rotate(spine_physics_constraint data, float x, float y, float degrees) { + if (data == nullptr) return; + PhysicsConstraint *_constraint = (PhysicsConstraint *) data; + _constraint->rotate(x, y, degrees); +} + +// Sequence +void spine_sequence_apply(spine_sequence sequence, spine_slot slot, spine_attachment attachment) { + if (sequence == nullptr) return; + Sequence *_sequence = (Sequence *) sequence; + _sequence->apply((Slot *) slot, (Attachment *) attachment); +} + +const utf8 *spine_sequence_get_path(spine_sequence sequence, const utf8 *basePath, int32_t index) { + if (sequence == nullptr) return nullptr; + Sequence *_sequence = (Sequence *) sequence; + return (utf8 *) strdup(_sequence->getPath(basePath, index).buffer()); +} + +int32_t spine_sequence_get_id(spine_sequence sequence) { + if (sequence == nullptr) return 0; + Sequence *_sequence = (Sequence *) sequence; + return _sequence->getId(); +} + +void spine_sequence_set_id(spine_sequence sequence, int32_t id) { + if (sequence == nullptr) return; + Sequence *_sequence = (Sequence *) sequence; + _sequence->setId(id); +} + +int32_t spine_sequence_get_start(spine_sequence sequence) { + if (sequence == nullptr) return 0; + Sequence *_sequence = (Sequence *) sequence; + return _sequence->getStart(); +} + +void spine_sequence_set_start(spine_sequence sequence, int32_t start) { + if (sequence == nullptr) return; + Sequence *_sequence = (Sequence *) sequence; + _sequence->setStart(start); +} + +int32_t spine_sequence_get_digits(spine_sequence sequence) { + if (sequence == nullptr) return 0; + Sequence *_sequence = (Sequence *) sequence; + return _sequence->getDigits(); +} + +void spine_sequence_set_digits(spine_sequence sequence, int32_t digits) { + if (sequence == nullptr) return; + Sequence *_sequence = (Sequence *) sequence; + _sequence->setDigits(digits); +} + +int32_t spine_sequence_get_setup_index(spine_sequence sequence) { + if (sequence == nullptr) return 0; + Sequence *_sequence = (Sequence *) sequence; + return _sequence->getSetupIndex(); +} + +void spine_sequence_set_setup_index(spine_sequence sequence, int32_t setupIndex) { + if (sequence == nullptr) return; + Sequence *_sequence = (Sequence *) sequence; + _sequence->setSetupIndex(setupIndex); +} + +int32_t spine_sequence_get_num_regions(spine_sequence sequence) { + if (sequence == nullptr) return 0; + Sequence *_sequence = (Sequence *) sequence; + return (int32_t) _sequence->getRegions().size(); +} + +spine_texture_region *spine_sequence_get_regions(spine_sequence sequence) { + if (sequence == nullptr) return nullptr; + Sequence *_sequence = (Sequence *) sequence; + return (spine_texture_region *) _sequence->getRegions().buffer(); +} + +// TextureRegion +void *spine_texture_region_get_texture(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return nullptr; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->rendererObject; +} + +void spine_texture_region_set_texture(spine_texture_region textureRegion, void *texture) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->rendererObject = texture; +} + +float spine_texture_region_get_u(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return 0; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->u; +} + +void spine_texture_region_set_u(spine_texture_region textureRegion, float u) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->u = u; +} + +float spine_texture_region_get_v(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return 0; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->v; +} +void spine_texture_region_set_v(spine_texture_region textureRegion, float v) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->v = v; +} +float spine_texture_region_get_u2(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return 0; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->u2; +} + +void spine_texture_region_set_u2(spine_texture_region textureRegion, float u2) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->u2 = u2; +} + +float spine_texture_region_get_v2(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return 0; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->v2; +} + +void spine_texture_region_set_v2(spine_texture_region textureRegion, float v2) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->v2 = v2; +} + +int32_t spine_texture_region_get_degrees(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return 0; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->degrees; +} + +void spine_texture_region_set_degrees(spine_texture_region textureRegion, int32_t degrees) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->degrees = degrees; +} + +float spine_texture_region_get_offset_x(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return 0; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->offsetX; +} + +void spine_texture_region_set_offset_x(spine_texture_region textureRegion, float offsetX) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->offsetX = offsetX; +} + +float spine_texture_region_get_offset_y(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return 0; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->offsetY; +} + +void spine_texture_region_set_offset_y(spine_texture_region textureRegion, float offsetY) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->offsetY = offsetY; +} + +int32_t spine_texture_region_get_width(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return 0; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->width; +} + +void spine_texture_region_set_width(spine_texture_region textureRegion, int32_t width) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->width = width; +} + +int32_t spine_texture_region_get_height(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return 0; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->height; +} + +void spine_texture_region_set_height(spine_texture_region textureRegion, int32_t height) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->height = height; +} + +int32_t spine_texture_region_get_original_width(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return 0; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->originalWidth; +} + +void spine_texture_region_set_original_width(spine_texture_region textureRegion, int32_t originalWidth) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->originalWidth = originalWidth; +} + +int32_t spine_texture_region_get_original_height(spine_texture_region textureRegion) { + if (textureRegion == nullptr) return 0; + TextureRegion *_region = (TextureRegion *) textureRegion; + return _region->originalHeight; +} + +void spine_texture_region_set_original_height(spine_texture_region textureRegion, int32_t originalHeight) { + if (textureRegion == nullptr) return; + TextureRegion *_region = (TextureRegion *) textureRegion; + _region->originalHeight = originalHeight; +} diff --git a/docs/1.18.0/_static/apps/examples/assets/packages/spine_flutter/src/spine-cpp-lite/spine-cpp-lite.h b/docs/1.18.0/_static/apps/examples/assets/packages/spine_flutter/src/spine-cpp-lite/spine-cpp-lite.h new file mode 100644 index 000000000..91ba5f11c --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/packages/spine_flutter/src/spine-cpp-lite/spine-cpp-lite.h @@ -0,0 +1,998 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software or + * otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "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 ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) 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 THE + * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#ifndef SPINE_CPP_LITE +#define SPINE_CPP_LITE + +#include + +#ifdef __cplusplus +#if _WIN32 +#define SPINE_CPP_LITE_EXPORT extern "C" __declspec(dllexport) +#else +#ifdef __EMSCRIPTEN__ +#define SPINE_CPP_LITE_EXPORT extern "C" __attribute__((used)) +#else +#define SPINE_CPP_LITE_EXPORT extern "C" +#endif +#endif +#else +#if _WIN32 +#define SPINE_CPP_LITE_EXPORT __declspec(dllexport) +#else +#ifdef __EMSCRIPTEN__ +#define SPINE_CPP_LITE_EXPORT __attribute__((used)) +#else +#define SPINE_CPP_LITE_EXPORT +#endif +#endif +#endif + +#define SPINE_OPAQUE_TYPE(name) \ + typedef struct name##_wrapper { \ + } name##_wrapper; \ + typedef name##_wrapper *name; + +SPINE_OPAQUE_TYPE(spine_skeleton) +SPINE_OPAQUE_TYPE(spine_skeleton_data) +SPINE_OPAQUE_TYPE(spine_bone) +SPINE_OPAQUE_TYPE(spine_bone_data) +SPINE_OPAQUE_TYPE(spine_slot) +SPINE_OPAQUE_TYPE(spine_slot_data) +SPINE_OPAQUE_TYPE(spine_skin) +SPINE_OPAQUE_TYPE(spine_attachment) +SPINE_OPAQUE_TYPE(spine_region_attachment) +SPINE_OPAQUE_TYPE(spine_vertex_attachment) +SPINE_OPAQUE_TYPE(spine_mesh_attachment) +SPINE_OPAQUE_TYPE(spine_clipping_attachment) +SPINE_OPAQUE_TYPE(spine_bounding_box_attachment) +SPINE_OPAQUE_TYPE(spine_path_attachment) +SPINE_OPAQUE_TYPE(spine_point_attachment) +SPINE_OPAQUE_TYPE(spine_texture_region) +SPINE_OPAQUE_TYPE(spine_sequence) +SPINE_OPAQUE_TYPE(spine_constraint) +SPINE_OPAQUE_TYPE(spine_constraint_data) +SPINE_OPAQUE_TYPE(spine_ik_constraint) +SPINE_OPAQUE_TYPE(spine_ik_constraint_data) +SPINE_OPAQUE_TYPE(spine_transform_constraint) +SPINE_OPAQUE_TYPE(spine_transform_constraint_data) +SPINE_OPAQUE_TYPE(spine_path_constraint) +SPINE_OPAQUE_TYPE(spine_path_constraint_data) +SPINE_OPAQUE_TYPE(spine_physics_constraint) +SPINE_OPAQUE_TYPE(spine_physics_constraint_data) +SPINE_OPAQUE_TYPE(spine_animation_state) +SPINE_OPAQUE_TYPE(spine_animation_state_data) +SPINE_OPAQUE_TYPE(spine_animation_state_events) +SPINE_OPAQUE_TYPE(spine_event) +SPINE_OPAQUE_TYPE(spine_event_data) +SPINE_OPAQUE_TYPE(spine_track_entry) +SPINE_OPAQUE_TYPE(spine_animation) +SPINE_OPAQUE_TYPE(spine_atlas) +SPINE_OPAQUE_TYPE(spine_skeleton_data_result) +SPINE_OPAQUE_TYPE(spine_render_command) +SPINE_OPAQUE_TYPE(spine_bounds) +SPINE_OPAQUE_TYPE(spine_color) +SPINE_OPAQUE_TYPE(spine_vector) +SPINE_OPAQUE_TYPE(spine_skeleton_drawable) +SPINE_OPAQUE_TYPE(spine_skin_entry) +SPINE_OPAQUE_TYPE(spine_skin_entries) + +typedef char utf8; + +typedef enum spine_blend_mode { + SPINE_BLEND_MODE_NORMAL = 0, + SPINE_BLEND_MODE_ADDITIVE, + SPINE_BLEND_MODE_MULTIPLY, + SPINE_BLEND_MODE_SCREEN +} spine_blend_mode; + +typedef enum spine_mix_blend { + SPINE_MIX_BLEND_SETUP = 0, + SPINE_MIX_BLEND_FIRST, + SPINE_MIX_BLEND_REPLACE, + SPINE_MIX_BLEND_ADD +} spine_mix_blend; + +typedef enum spine_event_type { + SPINE_EVENT_TYPE_START = 0, + SPINE_EVENT_TYPE_INTERRUPT, + SPINE_EVENT_TYPE_END, + SPINE_EVENT_TYPE_COMPLETE, + SPINE_EVENT_TYPE_DISPOSE, + SPINE_EVENT_TYPE_EVENT +} spine_event_type; + +typedef enum spine_attachment_type { + SPINE_ATTACHMENT_REGION = 0, + SPINE_ATTACHMENT_MESH, + SPINE_ATTACHMENT_CLIPPING, + SPINE_ATTACHMENT_BOUNDING_BOX, + SPINE_ATTACHMENT_PATH, + SPINE_ATTACHMENT_POINT, +} spine_attachment_type; + +typedef enum spine_constraint_type { + SPINE_CONSTRAINT_IK, + SPINE_CONSTRAINT_TRANSFORM, + SPINE_CONSTRAINT_PATH +} spine_constraint_type; + +typedef enum spine_inherit { + SPINE_INHERIT_NORMAL = 0, + SPINE_INHERIT_ONLY_TRANSLATION, + SPINE_INHERIT_NO_ROTATION_OR_REFLECTION, + SPINE_INHERIT_NO_SCALE, + SPINE_INHERIT_NO_SCALE_OR_REFLECTION +} spine_inherit; + +typedef enum spine_position_mode { + SPINE_POSITION_MODE_FIXED = 0, + SPINE_POSITION_MODE_PERCENT +} spine_position_mode; + +typedef enum spine_spacing_mode { + SPINE_SPACING_MODE_LENGTH = 0, + SPINE_SPACING_MODE_FIXED, + SPINE_SPACING_MODE_PERCENT, + SPINE_SPACING_MODE_PROPORTIONAL +} spine_spacing_mode; + +typedef enum spine_rotate_mode { + SPINE_ROTATE_MODE_TANGENT = 0, + SPINE_ROTATE_MODE_CHAIN, + SPINE_ROTATE_MODE_CHAIN_SCALE +} spine_rotate_mode; + +typedef enum spine_physics { + SPINE_PHYSICS_NONE = 0, + SPINE_PHYSICS_RESET, + SPINE_PHYSICS_UPDATE, + SPINE_PHYSICS_POSE + +} spine_physics; + +typedef int32_t spine_bool; + +SPINE_CPP_LITE_EXPORT int32_t spine_major_version(); +SPINE_CPP_LITE_EXPORT int32_t spine_minor_version(); +SPINE_CPP_LITE_EXPORT void spine_enable_debug_extension(spine_bool enable); +SPINE_CPP_LITE_EXPORT void spine_report_leaks(); + +SPINE_CPP_LITE_EXPORT float spine_color_get_r(spine_color color); +SPINE_CPP_LITE_EXPORT float spine_color_get_g(spine_color color); +SPINE_CPP_LITE_EXPORT float spine_color_get_b(spine_color color); +SPINE_CPP_LITE_EXPORT float spine_color_get_a(spine_color color); + +SPINE_CPP_LITE_EXPORT float spine_bounds_get_x(spine_bounds bounds); +SPINE_CPP_LITE_EXPORT float spine_bounds_get_y(spine_bounds bounds); +SPINE_CPP_LITE_EXPORT float spine_bounds_get_width(spine_bounds bounds); +SPINE_CPP_LITE_EXPORT float spine_bounds_get_height(spine_bounds bounds); + +SPINE_CPP_LITE_EXPORT float spine_vector_get_x(spine_vector vector); +SPINE_CPP_LITE_EXPORT float spine_vector_get_y(spine_vector vector); + +SPINE_CPP_LITE_EXPORT spine_atlas spine_atlas_load(const utf8 *atlasData); +SPINE_CPP_LITE_EXPORT int32_t spine_atlas_get_num_image_paths(spine_atlas atlas); +SPINE_CPP_LITE_EXPORT utf8 *spine_atlas_get_image_path(spine_atlas atlas, int32_t index); +SPINE_CPP_LITE_EXPORT utf8 *spine_atlas_get_error(spine_atlas atlas); +SPINE_CPP_LITE_EXPORT void spine_atlas_dispose(spine_atlas atlas); + +SPINE_CPP_LITE_EXPORT spine_skeleton_data_result spine_skeleton_data_load_json(spine_atlas atlas, const utf8 *skeletonData); +SPINE_CPP_LITE_EXPORT spine_skeleton_data_result spine_skeleton_data_load_binary(spine_atlas atlas, const uint8_t *skeletonData, int32_t length); +SPINE_CPP_LITE_EXPORT utf8 *spine_skeleton_data_result_get_error(spine_skeleton_data_result result); +SPINE_CPP_LITE_EXPORT spine_skeleton_data spine_skeleton_data_result_get_data(spine_skeleton_data_result result); +SPINE_CPP_LITE_EXPORT void spine_skeleton_data_result_dispose(spine_skeleton_data_result result); +SPINE_CPP_LITE_EXPORT spine_bone_data spine_skeleton_data_find_bone(spine_skeleton_data data, const utf8 *name); +SPINE_CPP_LITE_EXPORT spine_slot_data spine_skeleton_data_find_slot(spine_skeleton_data data, const utf8 *name); +SPINE_CPP_LITE_EXPORT spine_skin spine_skeleton_data_find_skin(spine_skeleton_data data, const utf8 *name); +SPINE_CPP_LITE_EXPORT spine_event_data spine_skeleton_data_find_event(spine_skeleton_data data, const utf8 *name); +SPINE_CPP_LITE_EXPORT spine_animation spine_skeleton_data_find_animation(spine_skeleton_data data, const utf8 *name); +SPINE_CPP_LITE_EXPORT spine_ik_constraint_data spine_skeleton_data_find_ik_constraint(spine_skeleton_data data, const utf8 *name); +SPINE_CPP_LITE_EXPORT spine_transform_constraint_data spine_skeleton_data_find_transform_constraint(spine_skeleton_data data, const utf8 *name); +SPINE_CPP_LITE_EXPORT spine_path_constraint_data spine_skeleton_data_find_path_constraint(spine_skeleton_data data, const utf8 *name); +SPINE_CPP_LITE_EXPORT spine_physics_constraint_data spine_skeleton_data_find_physics_constraint(spine_skeleton_data data, const utf8 *name); +SPINE_CPP_LITE_EXPORT const utf8 *spine_skeleton_data_get_name(spine_skeleton_data data); +// OMITTED setName() +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_data_get_num_bones(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT spine_bone_data *spine_skeleton_data_get_bones(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_data_get_num_slots(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT spine_slot_data *spine_skeleton_data_get_slots(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_data_get_num_skins(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT spine_skin *spine_skeleton_data_get_skins(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT spine_skin spine_skeleton_data_get_default_skin(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT void spine_skeleton_data_set_default_skin(spine_skeleton_data data, spine_skin skin); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_data_get_num_events(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT spine_event_data *spine_skeleton_data_get_events(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_data_get_num_animations(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT spine_animation *spine_skeleton_data_get_animations(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_data_get_num_ik_constraints(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT spine_ik_constraint_data *spine_skeleton_data_get_ik_constraints(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_data_get_num_transform_constraints(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT spine_transform_constraint_data *spine_skeleton_data_get_transform_constraints(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_data_get_num_path_constraints(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT spine_path_constraint_data *spine_skeleton_data_get_path_constraints(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_data_get_num_physics_constraints(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT spine_physics_constraint_data *spine_skeleton_data_get_physics_constraints(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT float spine_skeleton_data_get_x(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT void spine_skeleton_data_set_x(spine_skeleton_data data, float x); +SPINE_CPP_LITE_EXPORT float spine_skeleton_data_get_y(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT void spine_skeleton_data_set_y(spine_skeleton_data data, float y); +SPINE_CPP_LITE_EXPORT float spine_skeleton_data_get_width(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT void spine_skeleton_data_set_width(spine_skeleton_data data, float width); +SPINE_CPP_LITE_EXPORT float spine_skeleton_data_get_height(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT void spine_skeleton_data_set_height(spine_skeleton_data data, float height); +SPINE_CPP_LITE_EXPORT const utf8 *spine_skeleton_data_get_version(spine_skeleton_data data); +// OMITTED setVersion() +SPINE_CPP_LITE_EXPORT const utf8 *spine_skeleton_data_get_hash(spine_skeleton_data data); +// OMITTED setHash() +SPINE_CPP_LITE_EXPORT const utf8 *spine_skeleton_data_get_images_path(spine_skeleton_data data); +// OMITTED setImagesPath() +SPINE_CPP_LITE_EXPORT const utf8 *spine_skeleton_data_get_audio_path(spine_skeleton_data data); +// OMITTED setAudioPath() +SPINE_CPP_LITE_EXPORT float spine_skeleton_data_get_fps(spine_skeleton_data data); +// OMITTED setFps() +SPINE_CPP_LITE_EXPORT float spine_skeleton_data_get_reference_scale(spine_skeleton_data data); +SPINE_CPP_LITE_EXPORT void spine_skeleton_data_dispose(spine_skeleton_data data); + +SPINE_CPP_LITE_EXPORT spine_skeleton_drawable spine_skeleton_drawable_create(spine_skeleton_data skeletonData); +SPINE_CPP_LITE_EXPORT spine_render_command spine_skeleton_drawable_render(spine_skeleton_drawable drawable); +SPINE_CPP_LITE_EXPORT void spine_skeleton_drawable_dispose(spine_skeleton_drawable drawable); +SPINE_CPP_LITE_EXPORT spine_skeleton spine_skeleton_drawable_get_skeleton(spine_skeleton_drawable drawable); +SPINE_CPP_LITE_EXPORT spine_animation_state spine_skeleton_drawable_get_animation_state(spine_skeleton_drawable drawable); +SPINE_CPP_LITE_EXPORT spine_animation_state_data spine_skeleton_drawable_get_animation_state_data(spine_skeleton_drawable drawable); +SPINE_CPP_LITE_EXPORT spine_animation_state_events spine_skeleton_drawable_get_animation_state_events(spine_skeleton_drawable drawable); + +SPINE_CPP_LITE_EXPORT float *spine_render_command_get_positions(spine_render_command command); +SPINE_CPP_LITE_EXPORT float *spine_render_command_get_uvs(spine_render_command command); +SPINE_CPP_LITE_EXPORT int32_t *spine_render_command_get_colors(spine_render_command command); +SPINE_CPP_LITE_EXPORT int32_t spine_render_command_get_num_vertices(spine_render_command command); +SPINE_CPP_LITE_EXPORT uint16_t *spine_render_command_get_indices(spine_render_command command); +SPINE_CPP_LITE_EXPORT int32_t spine_render_command_get_num_indices(spine_render_command command); +SPINE_CPP_LITE_EXPORT int32_t spine_render_command_get_atlas_page(spine_render_command command); +SPINE_CPP_LITE_EXPORT spine_blend_mode spine_render_command_get_blend_mode(spine_render_command command); +SPINE_CPP_LITE_EXPORT spine_render_command spine_render_command_get_next(spine_render_command command); + +SPINE_CPP_LITE_EXPORT const utf8 *spine_animation_get_name(spine_animation animation); +// OMITTED getTimelines() +// OMITTED hasTimeline() +SPINE_CPP_LITE_EXPORT float spine_animation_get_duration(spine_animation animation); +// OMITTED setDuration() + +SPINE_CPP_LITE_EXPORT spine_skeleton_data spine_animation_state_data_get_skeleton_data(spine_animation_state_data stateData); +SPINE_CPP_LITE_EXPORT float spine_animation_state_data_get_default_mix(spine_animation_state_data stateData); +SPINE_CPP_LITE_EXPORT void spine_animation_state_data_set_default_mix(spine_animation_state_data stateData, float defaultMix); +SPINE_CPP_LITE_EXPORT void spine_animation_state_data_set_mix(spine_animation_state_data stateData, spine_animation from, spine_animation to, float duration); +SPINE_CPP_LITE_EXPORT float spine_animation_state_data_get_mix(spine_animation_state_data stateData, spine_animation from, spine_animation to); +SPINE_CPP_LITE_EXPORT void spine_animation_state_data_set_mix_by_name(spine_animation_state_data stateData, const utf8 *fromName, const utf8 *toName, float duration); +SPINE_CPP_LITE_EXPORT float spine_animation_state_data_get_mix_by_name(spine_animation_state_data stateData, const utf8 *fromName, const utf8 *toName); +SPINE_CPP_LITE_EXPORT void spine_animation_state_data_clear(spine_animation_state_data stateData); + +SPINE_CPP_LITE_EXPORT void spine_animation_state_update(spine_animation_state state, float delta); +SPINE_CPP_LITE_EXPORT void spine_animation_state_apply(spine_animation_state state, spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT void spine_animation_state_clear_tracks(spine_animation_state state); +SPINE_CPP_LITE_EXPORT void spine_animation_state_clear_track(spine_animation_state state, int32_t trackIndex); +SPINE_CPP_LITE_EXPORT int32_t spine_animation_state_get_num_tracks(spine_animation_state state); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_animation_state_set_animation_by_name(spine_animation_state state, int32_t trackIndex, const utf8 *animationName, spine_bool loop); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_animation_state_set_animation(spine_animation_state state, int32_t trackIndex, spine_animation animation, spine_bool loop); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_animation_state_add_animation_by_name(spine_animation_state state, int32_t trackIndex, const utf8 *animationName, spine_bool loop, float delay); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_animation_state_add_animation(spine_animation_state state, int32_t trackIndex, spine_animation animation, spine_bool loop, float delay); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_animation_state_set_empty_animation(spine_animation_state state, int32_t trackIndex, float mixDuration); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_animation_state_add_empty_animation(spine_animation_state state, int32_t trackIndex, float mixDuration, float delay); +SPINE_CPP_LITE_EXPORT void spine_animation_state_set_empty_animations(spine_animation_state state, float mixDuration); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_animation_state_get_current(spine_animation_state state, int32_t trackIndex); +SPINE_CPP_LITE_EXPORT spine_animation_state_data spine_animation_state_get_data(spine_animation_state state); +SPINE_CPP_LITE_EXPORT float spine_animation_state_get_time_scale(spine_animation_state state); +SPINE_CPP_LITE_EXPORT void spine_animation_state_set_time_scale(spine_animation_state state, float timeScale); +// OMITTED setListener() +// OMITTED setListener() +// OMITTED disableQueue() +// OMITTED enableQueue() +// OMITTED setManualTrackEntryDisposal() +// OMITTED getManualTrackEntryDisposal() +SPINE_CPP_LITE_EXPORT void spine_animation_state_dispose_track_entry(spine_animation_state state, spine_track_entry entry); + +SPINE_CPP_LITE_EXPORT int32_t spine_animation_state_events_get_num_events(spine_animation_state_events events); +SPINE_CPP_LITE_EXPORT spine_event_type spine_animation_state_events_get_event_type(spine_animation_state_events events, int32_t index); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_animation_state_events_get_track_entry(spine_animation_state_events events, int32_t index); +SPINE_CPP_LITE_EXPORT spine_event spine_animation_state_events_get_event(spine_animation_state_events events, int32_t index); +SPINE_CPP_LITE_EXPORT void spine_animation_state_events_reset(spine_animation_state_events events); + +SPINE_CPP_LITE_EXPORT int32_t spine_track_entry_get_track_index(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT spine_animation spine_track_entry_get_animation(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_track_entry_get_previous(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT spine_bool spine_track_entry_get_loop(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_loop(spine_track_entry entry, spine_bool loop); +SPINE_CPP_LITE_EXPORT spine_bool spine_track_entry_get_hold_previous(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_hold_previous(spine_track_entry entry, spine_bool holdPrevious); +SPINE_CPP_LITE_EXPORT spine_bool spine_track_entry_get_reverse(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_reverse(spine_track_entry entry, spine_bool reverse); +SPINE_CPP_LITE_EXPORT spine_bool spine_track_entry_get_shortest_rotation(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_shortest_rotation(spine_track_entry entry, spine_bool shortestRotation); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_delay(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_delay(spine_track_entry entry, float delay); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_track_time(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_track_time(spine_track_entry entry, float trackTime); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_track_end(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_track_end(spine_track_entry entry, float trackEnd); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_animation_start(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_animation_start(spine_track_entry entry, float animationStart); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_animation_end(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_animation_end(spine_track_entry entry, float animationEnd); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_animation_last(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_animation_last(spine_track_entry entry, float animationLast); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_animation_time(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_time_scale(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_time_scale(spine_track_entry entry, float timeScale); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_alpha(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_alpha(spine_track_entry entry, float alpha); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_event_threshold(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_event_threshold(spine_track_entry entry, float eventThreshold); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_alpha_attachment_threshold(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_alpha_attachment_threshold(spine_track_entry entry, float attachmentThreshold); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_mix_attachment_threshold(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_mix_attachment_threshold(spine_track_entry entry, float attachmentThreshold); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_mix_draw_order_threshold(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_mix_draw_order_threshold(spine_track_entry entry, float drawOrderThreshold); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_track_entry_get_next(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT spine_bool spine_track_entry_is_complete(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_mix_time(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_mix_time(spine_track_entry entry, float mixTime); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_mix_duration(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_mix_duration(spine_track_entry entry, float mixDuration); +SPINE_CPP_LITE_EXPORT spine_mix_blend spine_track_entry_get_mix_blend(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_set_mix_blend(spine_track_entry entry, spine_mix_blend mixBlend); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_track_entry_get_mixing_from(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT spine_track_entry spine_track_entry_get_mixing_to(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT void spine_track_entry_reset_rotation_directions(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT float spine_track_entry_get_track_complete(spine_track_entry entry); +// OMITTED setListener() +// OMITTED setListener() + +SPINE_CPP_LITE_EXPORT void spine_skeleton_update_cache(spine_skeleton skeleton); +// OMITTED printUpdateCache() +SPINE_CPP_LITE_EXPORT void spine_skeleton_update_world_transform(spine_skeleton skeleton, spine_physics physics); +SPINE_CPP_LITE_EXPORT void spine_skeleton_update_world_transform_bone(spine_skeleton skeleton, spine_physics physics, spine_bone parent); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_to_setup_pose(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_bones_to_setup_pose(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_slots_to_setup_pose(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_bone spine_skeleton_find_bone(spine_skeleton skeleton, const utf8 *boneName); +SPINE_CPP_LITE_EXPORT spine_slot spine_skeleton_find_slot(spine_skeleton skeleton, const utf8 *slotName); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_skin_by_name(spine_skeleton skeleton, const utf8 *skinName); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_skin(spine_skeleton skeleton, spine_skin skin); +SPINE_CPP_LITE_EXPORT spine_attachment spine_skeleton_get_attachment_by_name(spine_skeleton skeleton, const utf8 *slotName, const utf8 *attachmentName); +SPINE_CPP_LITE_EXPORT spine_attachment spine_skeleton_get_attachment(spine_skeleton skeleton, int32_t slotIndex, const utf8 *attachmentName); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_attachment(spine_skeleton skeleton, const utf8 *slotName, const utf8 *attachmentName); +SPINE_CPP_LITE_EXPORT spine_ik_constraint spine_skeleton_find_ik_constraint(spine_skeleton skeleton, const utf8 *constraintName); +SPINE_CPP_LITE_EXPORT spine_transform_constraint spine_skeleton_find_transform_constraint(spine_skeleton skeleton, const utf8 *constraintName); +SPINE_CPP_LITE_EXPORT spine_path_constraint spine_skeleton_find_path_constraint(spine_skeleton skeleton, const utf8 *constraintName); +SPINE_CPP_LITE_EXPORT spine_physics_constraint spine_skeleton_find_physics_constraint(spine_skeleton skeleton, const utf8 *constraintName); +SPINE_CPP_LITE_EXPORT spine_bounds spine_skeleton_get_bounds(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_bone spine_skeleton_get_root_bone(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_skeleton_data spine_skeleton_get_data(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_get_num_bones(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_bone *spine_skeleton_get_bones(spine_skeleton skeleton); +// OMITTED getUpdateCacheList() +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_get_num_slots(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_slot *spine_skeleton_get_slots(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_get_num_draw_order(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_slot *spine_skeleton_get_draw_order(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_get_num_ik_constraints(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_ik_constraint *spine_skeleton_get_ik_constraints(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_get_num_transform_constraints(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_transform_constraint *spine_skeleton_get_transform_constraints(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_get_num_path_constraints(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_path_constraint *spine_skeleton_get_path_constraints(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT int32_t spine_skeleton_get_num_physics_constraints(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_physics_constraint *spine_skeleton_get_physics_constraints(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_skin spine_skeleton_get_skin(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT spine_color spine_skeleton_get_color(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_color(spine_skeleton skeleton, float r, float g, float b, float a); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_position(spine_skeleton skeleton, float x, float y); +SPINE_CPP_LITE_EXPORT float spine_skeleton_get_x(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_x(spine_skeleton skeleton, float x); +SPINE_CPP_LITE_EXPORT float spine_skeleton_get_y(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_y(spine_skeleton skeleton, float y); +SPINE_CPP_LITE_EXPORT float spine_skeleton_get_scale_x(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_scale_x(spine_skeleton skeleton, float scaleX); +SPINE_CPP_LITE_EXPORT float spine_skeleton_get_scale_y(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_scale_y(spine_skeleton skeleton, float scaleY); +SPINE_CPP_LITE_EXPORT float spine_skeleton_get_time(spine_skeleton skeleton); +SPINE_CPP_LITE_EXPORT void spine_skeleton_set_time(spine_skeleton skeleton, float time); +SPINE_CPP_LITE_EXPORT void spine_skeleton_update(spine_skeleton skeleton, float delta); + +SPINE_CPP_LITE_EXPORT const utf8 *spine_event_data_get_name(spine_event_data event); +SPINE_CPP_LITE_EXPORT int32_t spine_event_data_get_int_value(spine_event_data event); +SPINE_CPP_LITE_EXPORT void spine_event_data_set_int_value(spine_event_data event, int32_t value); +SPINE_CPP_LITE_EXPORT float spine_event_data_get_float_value(spine_event_data event); +SPINE_CPP_LITE_EXPORT void spine_event_data_set_float_value(spine_event_data event, float value); +SPINE_CPP_LITE_EXPORT const utf8 *spine_event_data_get_string_value(spine_event_data event); +SPINE_CPP_LITE_EXPORT void spine_event_data_set_string_value(spine_event_data event, const utf8 *value); +SPINE_CPP_LITE_EXPORT const utf8 *spine_event_data_get_audio_path(spine_event_data event); +// OMITTED setAudioPath() +SPINE_CPP_LITE_EXPORT float spine_event_data_get_volume(spine_event_data event); +SPINE_CPP_LITE_EXPORT void spine_event_data_set_volume(spine_event_data event, float volume); +SPINE_CPP_LITE_EXPORT float spine_event_data_get_balance(spine_event_data event); +SPINE_CPP_LITE_EXPORT void spine_event_data_set_balance(spine_event_data event, float balance); + +SPINE_CPP_LITE_EXPORT spine_event_data spine_event_get_data(spine_event event); +SPINE_CPP_LITE_EXPORT float spine_event_get_time(spine_event event); +SPINE_CPP_LITE_EXPORT int32_t spine_event_get_int_value(spine_event event); +SPINE_CPP_LITE_EXPORT void spine_event_set_int_value(spine_event event, int32_t value); +SPINE_CPP_LITE_EXPORT float spine_event_get_float_value(spine_event event); +SPINE_CPP_LITE_EXPORT void spine_event_set_float_value(spine_event event, float value); +SPINE_CPP_LITE_EXPORT const utf8 *spine_event_get_string_value(spine_event event); +SPINE_CPP_LITE_EXPORT void spine_event_set_string_value(spine_event event, const utf8 *value); +SPINE_CPP_LITE_EXPORT float spine_event_get_volume(spine_event event); +SPINE_CPP_LITE_EXPORT void spine_event_set_volume(spine_event event, float volume); +SPINE_CPP_LITE_EXPORT float spine_event_get_balance(spine_event event); +SPINE_CPP_LITE_EXPORT void spine_event_set_balance(spine_event event, float balance); + +SPINE_CPP_LITE_EXPORT int32_t spine_slot_data_get_index(spine_slot_data slot); +SPINE_CPP_LITE_EXPORT const utf8 *spine_slot_data_get_name(spine_slot_data slot); +SPINE_CPP_LITE_EXPORT spine_bone_data spine_slot_data_get_bone_data(spine_slot_data slot); +SPINE_CPP_LITE_EXPORT spine_color spine_slot_data_get_color(spine_slot_data slot); +SPINE_CPP_LITE_EXPORT void spine_slot_data_set_color(spine_slot_data slot, float r, float g, float b, float a); +SPINE_CPP_LITE_EXPORT spine_color spine_slot_data_get_dark_color(spine_slot_data slot); +SPINE_CPP_LITE_EXPORT void spine_slot_data_set_dark_color(spine_slot_data slot, float r, float g, float b, float a); +SPINE_CPP_LITE_EXPORT spine_bool spine_slot_data_has_dark_color(spine_slot_data slot); +SPINE_CPP_LITE_EXPORT void spine_slot_data_set_has_dark_color(spine_slot_data slot, spine_bool hasDarkColor); +SPINE_CPP_LITE_EXPORT const utf8 *spine_slot_data_get_attachment_name(spine_slot_data slot); +SPINE_CPP_LITE_EXPORT void spine_slot_data_set_attachment_name(spine_slot_data slot, const utf8 *attachmentName); +SPINE_CPP_LITE_EXPORT spine_blend_mode spine_slot_data_get_blend_mode(spine_slot_data slot); +SPINE_CPP_LITE_EXPORT void spine_slot_data_set_blend_mode(spine_slot_data slot, spine_blend_mode blendMode); +SPINE_CPP_LITE_EXPORT spine_bool spine_slot_data_is_visible(spine_slot_data slot); +SPINE_CPP_LITE_EXPORT void spine_slot_data_set_visible(spine_slot_data slot, spine_bool visible); +// OMITTED getPath()/setPath() + +SPINE_CPP_LITE_EXPORT void spine_slot_set_to_setup_pose(spine_slot slot); +SPINE_CPP_LITE_EXPORT spine_slot_data spine_slot_get_data(spine_slot slot); +SPINE_CPP_LITE_EXPORT spine_bone spine_slot_get_bone(spine_slot slot); +SPINE_CPP_LITE_EXPORT spine_skeleton spine_slot_get_skeleton(spine_slot slot); +SPINE_CPP_LITE_EXPORT spine_color spine_slot_get_color(spine_slot slot); +SPINE_CPP_LITE_EXPORT void spine_slot_set_color(spine_slot slot, float r, float g, float b, float a); +SPINE_CPP_LITE_EXPORT spine_color spine_slot_get_dark_color(spine_slot slot); +SPINE_CPP_LITE_EXPORT void spine_slot_set_dark_color(spine_slot slot, float r, float g, float b, float a); +SPINE_CPP_LITE_EXPORT spine_bool spine_slot_has_dark_color(spine_slot slot); +SPINE_CPP_LITE_EXPORT spine_attachment spine_slot_get_attachment(spine_slot slot); +SPINE_CPP_LITE_EXPORT void spine_slot_set_attachment(spine_slot slot, spine_attachment attachment); +// OMITTED getDeform() +SPINE_CPP_LITE_EXPORT int32_t spine_slot_get_sequence_index(spine_slot slot); +SPINE_CPP_LITE_EXPORT void spine_slot_set_sequence_index(spine_slot slot, int32_t sequenceIndex); + +SPINE_CPP_LITE_EXPORT int32_t spine_bone_data_get_index(spine_bone_data data); +SPINE_CPP_LITE_EXPORT const utf8 *spine_bone_data_get_name(spine_bone_data data); +SPINE_CPP_LITE_EXPORT spine_bone_data spine_bone_data_get_parent(spine_bone_data data); +SPINE_CPP_LITE_EXPORT float spine_bone_data_get_length(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_length(spine_bone_data data, float length); +SPINE_CPP_LITE_EXPORT float spine_bone_data_get_x(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_x(spine_bone_data data, float x); +SPINE_CPP_LITE_EXPORT float spine_bone_data_get_y(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_y(spine_bone_data data, float y); +SPINE_CPP_LITE_EXPORT float spine_bone_data_get_rotation(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_rotation(spine_bone_data data, float rotation); +SPINE_CPP_LITE_EXPORT float spine_bone_data_get_scale_x(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_scale_x(spine_bone_data data, float scaleX); +SPINE_CPP_LITE_EXPORT float spine_bone_data_get_scale_y(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_scale_y(spine_bone_data data, float scaleY); +SPINE_CPP_LITE_EXPORT float spine_bone_data_get_shear_x(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_shear_x(spine_bone_data data, float shearx); +SPINE_CPP_LITE_EXPORT float spine_bone_data_get_shear_y(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_shear_y(spine_bone_data data, float shearY); +SPINE_CPP_LITE_EXPORT spine_inherit spine_bone_data_get_inherit(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_inherit(spine_bone_data data, spine_inherit inherit); +SPINE_CPP_LITE_EXPORT spine_bool spine_bone_data_is_skin_required(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_is_skin_required(spine_bone_data data, spine_bool isSkinRequired); +SPINE_CPP_LITE_EXPORT spine_color spine_bone_data_get_color(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_color(spine_bone_data data, float r, float g, float b, float a); +SPINE_CPP_LITE_EXPORT spine_bool spine_bone_data_is_visible(spine_bone_data data); +SPINE_CPP_LITE_EXPORT void spine_bone_data_set_visible(spine_bone_data data, spine_bool isVisible); +// Omitted getIcon()/setIcon() + +SPINE_CPP_LITE_EXPORT void spine_bone_set_is_y_down(spine_bool yDown); +SPINE_CPP_LITE_EXPORT spine_bool spine_bone_get_is_y_down(); +SPINE_CPP_LITE_EXPORT void spine_bone_update(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_update_world_transform(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_update_world_transform_with(spine_bone bone, float x, float y, float rotation, float scaleX, float scaleY, float shearX, float shearY); +SPINE_CPP_LITE_EXPORT void spine_bone_update_applied_transform(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_to_setup_pose(spine_bone bone); +SPINE_CPP_LITE_EXPORT spine_vector spine_bone_world_to_local(spine_bone bone, float worldX, float worldY); +SPINE_CPP_LITE_EXPORT spine_vector spine_bone_world_to_parent(spine_bone bone, float worldX, float worldY); +SPINE_CPP_LITE_EXPORT spine_vector spine_bone_local_to_world(spine_bone bone, float localX, float localY); +SPINE_CPP_LITE_EXPORT spine_vector spine_bone_parent_to_world(spine_bone bone, float localX, float localY); +SPINE_CPP_LITE_EXPORT float spine_bone_world_to_local_rotation(spine_bone bone, float worldRotation); +SPINE_CPP_LITE_EXPORT float spine_bone_local_to_world_rotation(spine_bone bone, float localRotation); +SPINE_CPP_LITE_EXPORT void spine_bone_rotate_world(spine_bone bone, float degrees); +SPINE_CPP_LITE_EXPORT float spine_bone_get_world_to_local_rotation_x(spine_bone bone); +SPINE_CPP_LITE_EXPORT float spine_bone_get_world_to_local_rotation_y(spine_bone bone); +SPINE_CPP_LITE_EXPORT spine_bone_data spine_bone_get_data(spine_bone bone); +SPINE_CPP_LITE_EXPORT spine_skeleton spine_bone_get_skeleton(spine_bone bone); +SPINE_CPP_LITE_EXPORT spine_bone spine_bone_get_parent(spine_bone bone); +SPINE_CPP_LITE_EXPORT int32_t spine_bone_get_num_children(spine_bone bone); +SPINE_CPP_LITE_EXPORT spine_bone *spine_bone_get_children(spine_bone bone); +SPINE_CPP_LITE_EXPORT float spine_bone_get_x(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_x(spine_bone bone, float x); +SPINE_CPP_LITE_EXPORT float spine_bone_get_y(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_y(spine_bone bone, float y); +SPINE_CPP_LITE_EXPORT float spine_bone_get_rotation(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_rotation(spine_bone bone, float rotation); +SPINE_CPP_LITE_EXPORT float spine_bone_get_scale_x(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_scale_x(spine_bone bone, float scaleX); +SPINE_CPP_LITE_EXPORT float spine_bone_get_scale_y(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_scale_y(spine_bone bone, float scaleY); +SPINE_CPP_LITE_EXPORT float spine_bone_get_shear_x(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_shear_x(spine_bone bone, float shearX); +SPINE_CPP_LITE_EXPORT float spine_bone_get_shear_y(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_shear_y(spine_bone bone, float shearY); +SPINE_CPP_LITE_EXPORT float spine_bone_get_applied_rotation(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_applied_rotation(spine_bone bone, float rotation); +SPINE_CPP_LITE_EXPORT float spine_bone_get_a_x(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_a_x(spine_bone bone, float x); +SPINE_CPP_LITE_EXPORT float spine_bone_get_a_y(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_a_y(spine_bone bone, float y); +SPINE_CPP_LITE_EXPORT float spine_bone_get_a_scale_x(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_a_scale_x(spine_bone bone, float scaleX); +SPINE_CPP_LITE_EXPORT float spine_bone_get_a_scale_y(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_a_scale_y(spine_bone bone, float scaleY); +SPINE_CPP_LITE_EXPORT float spine_bone_get_a_shear_x(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_a_shear_x(spine_bone bone, float shearX); +SPINE_CPP_LITE_EXPORT float spine_bone_get_a_shear_y(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_a_shear_y(spine_bone bone, float shearY); +SPINE_CPP_LITE_EXPORT float spine_bone_get_a(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_a(spine_bone bone, float a); +SPINE_CPP_LITE_EXPORT float spine_bone_get_b(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_b(spine_bone bone, float b); +SPINE_CPP_LITE_EXPORT float spine_bone_get_c(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_c(spine_bone bone, float c); +SPINE_CPP_LITE_EXPORT float spine_bone_get_d(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_d(spine_bone bone, float d); +SPINE_CPP_LITE_EXPORT float spine_bone_get_world_x(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_world_x(spine_bone bone, float worldX); +SPINE_CPP_LITE_EXPORT float spine_bone_get_world_y(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_world_y(spine_bone bone, float worldY); +SPINE_CPP_LITE_EXPORT float spine_bone_get_world_rotation_x(spine_bone bone); +SPINE_CPP_LITE_EXPORT float spine_bone_get_world_rotation_y(spine_bone bone); +SPINE_CPP_LITE_EXPORT float spine_bone_get_world_scale_x(spine_bone bone); +SPINE_CPP_LITE_EXPORT float spine_bone_get_world_scale_y(spine_bone bone); +SPINE_CPP_LITE_EXPORT spine_bool spine_bone_get_is_active(spine_bone bone); +SPINE_CPP_LITE_EXPORT void spine_bone_set_is_active(spine_bone bone, spine_bool isActive); +SPINE_CPP_LITE_EXPORT spine_inherit spine_bone_get_inherit(spine_bone data); +SPINE_CPP_LITE_EXPORT void spine_bone_set_inherit(spine_bone data, spine_inherit inherit); + +SPINE_CPP_LITE_EXPORT const utf8 *spine_attachment_get_name(spine_attachment attachment); +SPINE_CPP_LITE_EXPORT spine_attachment_type spine_attachment_get_type(spine_attachment attachment); +SPINE_CPP_LITE_EXPORT spine_attachment spine_attachment_copy(spine_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_attachment_dispose(spine_attachment attachment); + +SPINE_CPP_LITE_EXPORT spine_vector spine_point_attachment_compute_world_position(spine_point_attachment attachment, spine_bone bone); +SPINE_CPP_LITE_EXPORT float spine_point_attachment_compute_world_rotation(spine_point_attachment attachment, spine_bone bone); +SPINE_CPP_LITE_EXPORT float spine_point_attachment_get_x(spine_point_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_point_attachment_set_x(spine_point_attachment attachment, float x); +SPINE_CPP_LITE_EXPORT float spine_point_attachment_get_y(spine_point_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_point_attachment_set_y(spine_point_attachment attachment, float y); +SPINE_CPP_LITE_EXPORT float spine_point_attachment_get_rotation(spine_point_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_point_attachment_set_rotation(spine_point_attachment attachment, float rotation); +SPINE_CPP_LITE_EXPORT spine_color spine_point_attachment_get_color(spine_point_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_point_attachment_set_color(spine_point_attachment attachment, float r, float g, float b, float a); + +SPINE_CPP_LITE_EXPORT void spine_region_attachment_update_region(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_region_attachment_compute_world_vertices(spine_region_attachment attachment, spine_slot slot, float *worldVertices); +SPINE_CPP_LITE_EXPORT float spine_region_attachment_get_x(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_region_attachment_set_x(spine_region_attachment attachment, float x); +SPINE_CPP_LITE_EXPORT float spine_region_attachment_get_y(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_region_attachment_set_y(spine_region_attachment attachment, float y); +SPINE_CPP_LITE_EXPORT float spine_region_attachment_get_rotation(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_region_attachment_set_rotation(spine_region_attachment attachment, float rotation); +SPINE_CPP_LITE_EXPORT float spine_region_attachment_get_scale_x(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_region_attachment_set_scale_x(spine_region_attachment attachment, float scaleX); +SPINE_CPP_LITE_EXPORT float spine_region_attachment_get_scale_y(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_region_attachment_set_scale_y(spine_region_attachment attachment, float scaleY); +SPINE_CPP_LITE_EXPORT float spine_region_attachment_get_width(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_region_attachment_set_width(spine_region_attachment attachment, float width); +SPINE_CPP_LITE_EXPORT float spine_region_attachment_get_height(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_region_attachment_set_height(spine_region_attachment attachment, float height); +SPINE_CPP_LITE_EXPORT spine_color spine_region_attachment_get_color(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_region_attachment_set_color(spine_region_attachment attachment, float r, float g, float b, float a); +SPINE_CPP_LITE_EXPORT const utf8 *spine_region_attachment_get_path(spine_region_attachment attachment); +// OMITTED setPath() +SPINE_CPP_LITE_EXPORT spine_texture_region spine_region_attachment_get_region(spine_region_attachment attachment); +// OMITTED setRegion() +SPINE_CPP_LITE_EXPORT spine_sequence spine_region_attachment_get_sequence(spine_region_attachment attachment); +// OMITTED setSequence() +SPINE_CPP_LITE_EXPORT int32_t spine_region_attachment_get_num_offset(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT float *spine_region_attachment_get_offset(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT int32_t spine_region_attachment_get_num_uvs(spine_region_attachment attachment); +SPINE_CPP_LITE_EXPORT float *spine_region_attachment_get_uvs(spine_region_attachment attachment); + +SPINE_CPP_LITE_EXPORT int32_t spine_vertex_attachment_get_world_vertices_length(spine_vertex_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_vertex_attachment_compute_world_vertices(spine_vertex_attachment attachment, spine_slot slot, float *worldVertices); +// OMITTED getId() +SPINE_CPP_LITE_EXPORT int32_t spine_vertex_attachment_get_num_bones(spine_vertex_attachment attachment); +SPINE_CPP_LITE_EXPORT int32_t *spine_vertex_attachment_get_bones(spine_vertex_attachment attachment); +SPINE_CPP_LITE_EXPORT int32_t spine_vertex_attachment_get_num_vertices(spine_vertex_attachment attachment); +SPINE_CPP_LITE_EXPORT float *spine_vertex_attachment_get_vertices(spine_vertex_attachment attachment); +SPINE_CPP_LITE_EXPORT spine_attachment spine_vertex_attachment_get_timeline_attachment(spine_vertex_attachment timelineAttachment); +SPINE_CPP_LITE_EXPORT void spine_vertex_attachment_set_timeline_attachment(spine_vertex_attachment attachment, spine_attachment timelineAttachment); +// OMITTED copyTo() + +SPINE_CPP_LITE_EXPORT void spine_mesh_attachment_update_region(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT int32_t spine_mesh_attachment_get_hull_length(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_mesh_attachment_set_hull_length(spine_mesh_attachment attachment, int32_t hullLength); +SPINE_CPP_LITE_EXPORT int32_t spine_mesh_attachment_get_num_region_uvs(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT float *spine_mesh_attachment_get_region_uvs(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT int32_t spine_mesh_attachment_get_num_uvs(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT float *spine_mesh_attachment_get_uvs(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT int32_t spine_mesh_attachment_get_num_triangles(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT uint16_t *spine_mesh_attachment_get_triangles(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT spine_color spine_mesh_attachment_get_color(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_mesh_attachment_set_color(spine_mesh_attachment attachment, float r, float g, float b, float a); +SPINE_CPP_LITE_EXPORT const utf8 *spine_mesh_attachment_get_path(spine_mesh_attachment attachment); +// OMITTED setPath() +SPINE_CPP_LITE_EXPORT spine_texture_region spine_mesh_attachment_get_region(spine_mesh_attachment attachment); +// OMITTED setRegion() +SPINE_CPP_LITE_EXPORT spine_sequence spine_mesh_attachment_get_sequence(spine_mesh_attachment attachment); +// OMITTED setSequence() +SPINE_CPP_LITE_EXPORT spine_mesh_attachment spine_mesh_attachment_get_parent_mesh(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_mesh_attachment_set_parent_mesh(spine_mesh_attachment attachment, spine_mesh_attachment parentMesh); +SPINE_CPP_LITE_EXPORT int32_t spine_mesh_attachment_get_num_edges(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT uint16_t *spine_mesh_attachment_get_edges(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT float spine_mesh_attachment_get_width(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_mesh_attachment_set_width(spine_mesh_attachment attachment, float width); +SPINE_CPP_LITE_EXPORT float spine_mesh_attachment_get_height(spine_mesh_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_mesh_attachment_set_height(spine_mesh_attachment attachment, float height); +// OMITTED newLinkedMesh() + +SPINE_CPP_LITE_EXPORT spine_slot_data spine_clipping_attachment_get_end_slot(spine_clipping_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_clipping_attachment_set_end_slot(spine_clipping_attachment attachment, spine_slot_data endSlot); +SPINE_CPP_LITE_EXPORT spine_color spine_clipping_attachment_get_color(spine_clipping_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_clipping_attachment_set_color(spine_clipping_attachment attachment, float r, float g, float b, float a); + +SPINE_CPP_LITE_EXPORT spine_color spine_bounding_box_attachment_get_color(spine_bounding_box_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_bounding_box_attachment_set_color(spine_bounding_box_attachment attachment, float r, float g, float b, float a); + +SPINE_CPP_LITE_EXPORT int32_t spine_path_attachment_get_num_lengths(spine_path_attachment attachment); +SPINE_CPP_LITE_EXPORT float *spine_path_attachment_get_lengths(spine_path_attachment attachment); +SPINE_CPP_LITE_EXPORT spine_bool spine_path_attachment_get_is_closed(spine_path_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_path_attachment_set_is_closed(spine_path_attachment attachment, spine_bool isClosed); +SPINE_CPP_LITE_EXPORT spine_bool spine_path_attachment_get_is_constant_speed(spine_path_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_path_attachment_set_is_constant_speed(spine_path_attachment attachment, spine_bool isConstantSpeed); +SPINE_CPP_LITE_EXPORT spine_color spine_path_attachment_get_color(spine_path_attachment attachment); +SPINE_CPP_LITE_EXPORT void spine_path_attachment_set_color(spine_path_attachment attachment, float r, float g, float b, float a); + +SPINE_CPP_LITE_EXPORT void spine_skin_set_attachment(spine_skin skin, int32_t slotIndex, const utf8 *name, spine_attachment attachment); +SPINE_CPP_LITE_EXPORT spine_attachment spine_skin_get_attachment(spine_skin skin, int32_t slotIndex, const utf8 *name); +SPINE_CPP_LITE_EXPORT void spine_skin_remove_attachment(spine_skin skin, int32_t slotIndex, const utf8 *name); +// OMITTED findNamesForSlot() +// OMITTED findAttachmentsForSlot() +// OMITTED getColor() +SPINE_CPP_LITE_EXPORT const utf8 *spine_skin_get_name(spine_skin skin); +SPINE_CPP_LITE_EXPORT void spine_skin_add_skin(spine_skin skin, spine_skin other); +SPINE_CPP_LITE_EXPORT void spine_skin_copy_skin(spine_skin skin, spine_skin other); +SPINE_CPP_LITE_EXPORT spine_skin_entries spine_skin_get_entries(spine_skin skin); +SPINE_CPP_LITE_EXPORT int32_t spine_skin_entries_get_num_entries(spine_skin_entries entries); +SPINE_CPP_LITE_EXPORT spine_skin_entry spine_skin_entries_get_entry(spine_skin_entries entries, int32_t index); +SPINE_CPP_LITE_EXPORT void spine_skin_entries_dispose(spine_skin_entries entries); +SPINE_CPP_LITE_EXPORT int32_t spine_skin_entry_get_slot_index(spine_skin_entry entry); +SPINE_CPP_LITE_EXPORT utf8 *spine_skin_entry_get_name(spine_skin_entry entry); +SPINE_CPP_LITE_EXPORT spine_attachment spine_skin_entry_get_attachment(spine_skin_entry entry); +SPINE_CPP_LITE_EXPORT int32_t spine_skin_get_num_bones(spine_skin skin); +SPINE_CPP_LITE_EXPORT spine_bone_data *spine_skin_get_bones(spine_skin skin); +SPINE_CPP_LITE_EXPORT int32_t spine_skin_get_num_constraints(spine_skin skin); +SPINE_CPP_LITE_EXPORT spine_constraint_data *spine_skin_get_constraints(spine_skin skin); +SPINE_CPP_LITE_EXPORT spine_skin spine_skin_create(const utf8 *name); +SPINE_CPP_LITE_EXPORT void spine_skin_dispose(spine_skin skin); + +SPINE_CPP_LITE_EXPORT spine_constraint_type spine_constraint_data_get_type(spine_constraint_data data); +SPINE_CPP_LITE_EXPORT const utf8 *spine_constraint_data_get_name(spine_constraint_data data); +SPINE_CPP_LITE_EXPORT uint64_t spine_constraint_data_get_order(spine_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_constraint_data_set_order(spine_constraint_data data, uint64_t order); +SPINE_CPP_LITE_EXPORT spine_bool spine_constraint_data_get_is_skin_required(spine_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_constraint_data_set_is_skin_required(spine_constraint_data data, spine_bool isSkinRequired); + +SPINE_CPP_LITE_EXPORT int32_t spine_ik_constraint_data_get_num_bones(spine_ik_constraint_data data); +SPINE_CPP_LITE_EXPORT spine_bone_data *spine_ik_constraint_data_get_bones(spine_ik_constraint_data data); +SPINE_CPP_LITE_EXPORT spine_bone_data spine_ik_constraint_data_get_target(spine_ik_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_data_set_target(spine_ik_constraint_data data, spine_bone_data target); +SPINE_CPP_LITE_EXPORT int32_t spine_ik_constraint_data_get_bend_direction(spine_ik_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_data_set_bend_direction(spine_ik_constraint_data data, int32_t bendDirection); +SPINE_CPP_LITE_EXPORT spine_bool spine_ik_constraint_data_get_compress(spine_ik_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_data_set_compress(spine_ik_constraint_data data, spine_bool compress); +SPINE_CPP_LITE_EXPORT spine_bool spine_ik_constraint_data_get_stretch(spine_ik_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_data_set_stretch(spine_ik_constraint_data data, spine_bool stretch); +SPINE_CPP_LITE_EXPORT spine_bool spine_ik_constraint_data_get_uniform(spine_ik_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_data_set_uniform(spine_ik_constraint_data data, spine_bool uniform); +SPINE_CPP_LITE_EXPORT float spine_ik_constraint_data_get_mix(spine_ik_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_data_set_mix(spine_ik_constraint_data data, float mix); +SPINE_CPP_LITE_EXPORT float spine_ik_constraint_data_get_softness(spine_ik_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_data_set_softness(spine_ik_constraint_data data, float softness); + +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_update(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT int32_t spine_ik_constraint_get_order(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT spine_ik_constraint_data spine_ik_constraint_get_data(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT int32_t spine_ik_constraint_get_num_bones(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT spine_bone *spine_ik_constraint_get_bones(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT spine_bone spine_ik_constraint_get_target(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_set_target(spine_ik_constraint constraint, spine_bone target); +SPINE_CPP_LITE_EXPORT int32_t spine_ik_constraint_get_bend_direction(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_set_bend_direction(spine_ik_constraint constraint, int32_t bendDirection); +SPINE_CPP_LITE_EXPORT spine_bool spine_ik_constraint_get_compress(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_set_compress(spine_ik_constraint constraint, spine_bool compress); +SPINE_CPP_LITE_EXPORT spine_bool spine_ik_constraint_get_stretch(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_set_stretch(spine_ik_constraint constraint, spine_bool stretch); +SPINE_CPP_LITE_EXPORT float spine_ik_constraint_get_mix(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_set_mix(spine_ik_constraint constraint, float mix); +SPINE_CPP_LITE_EXPORT float spine_ik_constraint_get_softness(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_set_softness(spine_ik_constraint constraint, float softness); +SPINE_CPP_LITE_EXPORT spine_bool spine_ik_constraint_get_is_active(spine_ik_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_ik_constraint_set_is_active(spine_ik_constraint constraint, spine_bool isActive); +// OMITTED setToSetupPose() + +SPINE_CPP_LITE_EXPORT int32_t spine_transform_constraint_data_get_num_bones(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT spine_bone_data *spine_transform_constraint_data_get_bones(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT spine_bone_data spine_transform_constraint_data_get_target(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_target(spine_transform_constraint_data data, spine_bone_data target); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_mix_rotate(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_mix_rotate(spine_transform_constraint_data data, float mixRotate); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_mix_x(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_mix_x(spine_transform_constraint_data data, float mixX); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_mix_y(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_mix_y(spine_transform_constraint_data data, float mixY); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_mix_scale_x(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_mix_scale_x(spine_transform_constraint_data data, float mixScaleX); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_mix_scale_y(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_mix_scale_y(spine_transform_constraint_data data, float mixScaleY); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_mix_shear_y(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_mix_shear_y(spine_transform_constraint_data data, float mixShearY); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_offset_rotation(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_offset_rotation(spine_transform_constraint_data data, float offsetRotation); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_offset_x(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_offset_x(spine_transform_constraint_data data, float offsetX); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_offset_y(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_offset_y(spine_transform_constraint_data data, float offsetY); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_offset_scale_x(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_offset_scale_x(spine_transform_constraint_data data, float offsetScaleX); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_offset_scale_y(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_offset_scale_y(spine_transform_constraint_data data, float offsetScaleY); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_data_get_offset_shear_y(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_offset_shear_y(spine_transform_constraint_data data, float offsetShearY); +SPINE_CPP_LITE_EXPORT spine_bool spine_transform_constraint_data_get_is_relative(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_is_relative(spine_transform_constraint_data data, spine_bool isRelative); +SPINE_CPP_LITE_EXPORT spine_bool spine_transform_constraint_data_get_is_local(spine_transform_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_data_set_is_local(spine_transform_constraint_data data, spine_bool isLocal); + +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_update(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT int32_t spine_transform_constraint_get_order(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT spine_transform_constraint_data spine_transform_constraint_get_data(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT int32_t spine_transform_constraint_get_num_bones(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT spine_bone *spine_transform_constraint_get_bones(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT spine_bone spine_transform_constraint_get_target(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_set_target(spine_transform_constraint constraint, spine_bone target); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_get_mix_rotate(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_set_mix_rotate(spine_transform_constraint constraint, float mixRotate); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_get_mix_x(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_set_mix_x(spine_transform_constraint constraint, float mixX); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_get_mix_y(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_set_mix_y(spine_transform_constraint constraint, float mixY); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_get_mix_scale_x(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_set_mix_scale_x(spine_transform_constraint constraint, float mixScaleX); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_get_mix_scale_y(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_set_mix_scale_y(spine_transform_constraint constraint, float mixScaleY); +SPINE_CPP_LITE_EXPORT float spine_transform_constraint_get_mix_shear_y(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_set_mix_shear_y(spine_transform_constraint constraint, float mixShearY); +SPINE_CPP_LITE_EXPORT spine_bool spine_transform_constraint_get_is_active(spine_transform_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_transform_constraint_set_is_active(spine_transform_constraint constraint, spine_bool isActive); +// OMITTED setToSetupPose() + +SPINE_CPP_LITE_EXPORT int32_t spine_path_constraint_data_get_num_bones(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT spine_bone_data *spine_path_constraint_data_get_bones(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT spine_slot_data spine_path_constraint_data_get_target(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_data_set_target(spine_path_constraint_data data, spine_slot_data target); +SPINE_CPP_LITE_EXPORT spine_position_mode spine_path_constraint_data_get_position_mode(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_data_set_position_mode(spine_path_constraint_data data, spine_position_mode positionMode); +SPINE_CPP_LITE_EXPORT spine_spacing_mode spine_path_constraint_data_get_spacing_mode(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_data_set_spacing_mode(spine_path_constraint_data data, spine_spacing_mode spacingMode); +SPINE_CPP_LITE_EXPORT spine_rotate_mode spine_path_constraint_data_get_rotate_mode(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_data_set_rotate_mode(spine_path_constraint_data data, spine_rotate_mode rotateMode); +SPINE_CPP_LITE_EXPORT float spine_path_constraint_data_get_offset_rotation(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_data_set_offset_rotation(spine_path_constraint_data data, float offsetRotation); +SPINE_CPP_LITE_EXPORT float spine_path_constraint_data_get_position(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_data_set_position(spine_path_constraint_data data, float position); +SPINE_CPP_LITE_EXPORT float spine_path_constraint_data_get_spacing(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_data_set_spacing(spine_path_constraint_data data, float spacing); +SPINE_CPP_LITE_EXPORT float spine_path_constraint_data_get_mix_rotate(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_data_set_mix_rotate(spine_path_constraint_data data, float mixRotate); +SPINE_CPP_LITE_EXPORT float spine_path_constraint_data_get_mix_x(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_data_set_mix_x(spine_path_constraint_data data, float mixX); +SPINE_CPP_LITE_EXPORT float spine_path_constraint_data_get_mix_y(spine_path_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_data_set_mix_y(spine_path_constraint_data data, float mixY); + +SPINE_CPP_LITE_EXPORT void spine_path_constraint_update(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT int32_t spine_path_constraint_get_order(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT spine_path_constraint_data spine_path_constraint_get_data(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT int32_t spine_path_constraint_get_num_bones(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT spine_bone *spine_path_constraint_get_bones(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT spine_slot spine_path_constraint_get_target(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_set_target(spine_path_constraint constraint, spine_slot target); +SPINE_CPP_LITE_EXPORT float spine_path_constraint_get_position(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_set_position(spine_path_constraint constraint, float position); +SPINE_CPP_LITE_EXPORT float spine_path_constraint_get_spacing(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_set_spacing(spine_path_constraint constraint, float spacing); +SPINE_CPP_LITE_EXPORT float spine_path_constraint_get_mix_rotate(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_set_mix_rotate(spine_path_constraint constraint, float mixRotate); +SPINE_CPP_LITE_EXPORT float spine_path_constraint_get_mix_x(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_set_mix_x(spine_path_constraint constraint, float mixX); +SPINE_CPP_LITE_EXPORT float spine_path_constraint_get_mix_y(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_set_mix_y(spine_path_constraint constraint, float mixY); +SPINE_CPP_LITE_EXPORT spine_bool spine_path_constraint_get_is_active(spine_path_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_path_constraint_set_is_active(spine_path_constraint constraint, spine_bool isActive); +// OMITTED setToSetupPose() + +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_bone(spine_physics_constraint_data data, spine_bone_data bone); +SPINE_CPP_LITE_EXPORT spine_bone_data spine_physics_constraint_data_get_bone(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_x(spine_physics_constraint_data data, float x); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_x(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_y(spine_physics_constraint_data data, float y); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_y(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_rotate(spine_physics_constraint_data data, float rotate); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_rotate(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_scale_x(spine_physics_constraint_data data, float scaleX); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_scale_x(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_shear_x(spine_physics_constraint_data data, float shearX); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_shear_x(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_limit(spine_physics_constraint_data data, float limit); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_limit(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_step(spine_physics_constraint_data data, float step); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_step(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_inertia(spine_physics_constraint_data data, float inertia); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_inertia(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_strength(spine_physics_constraint_data data, float strength); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_strength(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_damping(spine_physics_constraint_data data, float damping); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_damping(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_mass_inverse(spine_physics_constraint_data data, float massInverse); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_mass_inverse(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_wind(spine_physics_constraint_data data, float wind); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_wind(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_gravity(spine_physics_constraint_data data, float gravity); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_gravity(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_mix(spine_physics_constraint_data data, float mix); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_data_get_mix(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_inertia_global(spine_physics_constraint_data data, spine_bool inertiaGlobal); +SPINE_CPP_LITE_EXPORT spine_bool spine_physics_constraint_data_is_inertia_global(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_strength_global(spine_physics_constraint_data data, spine_bool strengthGlobal); +SPINE_CPP_LITE_EXPORT spine_bool spine_physics_constraint_data_is_strength_global(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_damping_global(spine_physics_constraint_data data, spine_bool dampingGlobal); +SPINE_CPP_LITE_EXPORT spine_bool spine_physics_constraint_data_is_damping_global(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_mass_global(spine_physics_constraint_data data, spine_bool massGlobal); +SPINE_CPP_LITE_EXPORT spine_bool spine_physics_constraint_data_is_mass_global(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_wind_global(spine_physics_constraint_data data, spine_bool windGlobal); +SPINE_CPP_LITE_EXPORT spine_bool spine_physics_constraint_data_is_wind_global(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_gravity_global(spine_physics_constraint_data data, spine_bool gravityGlobal); +SPINE_CPP_LITE_EXPORT spine_bool spine_physics_constraint_data_is_gravity_global(spine_physics_constraint_data data); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_data_set_mix_global(spine_physics_constraint_data data, spine_bool mixGlobal); +SPINE_CPP_LITE_EXPORT spine_bool spine_physics_constraint_data_is_mix_global(spine_physics_constraint_data data); + +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_bone(spine_physics_constraint constraint, spine_bone bone); +SPINE_CPP_LITE_EXPORT spine_bone spine_physics_constraint_get_bone(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_inertia(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_inertia(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_strength(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_strength(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_damping(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_damping(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_mass_inverse(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_mass_inverse(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_wind(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_wind(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_gravity(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_gravity(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_mix(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_mix(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_reset(spine_physics_constraint constraint, spine_bool value); +SPINE_CPP_LITE_EXPORT spine_bool spine_physics_constraint_get_reset(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_ux(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_ux(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_uy(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_uy(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_cx(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_cx(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_cy(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_cy(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_tx(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_tx(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_ty(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_ty(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_x_offset(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_x_offset(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_x_velocity(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_x_velocity(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_y_offset(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_y_offset(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_y_velocity(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_y_velocity(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_rotate_offset(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_rotate_offset(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_rotate_velocity(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_rotate_velocity(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_scale_offset(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_scale_offset(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_scale_velocity(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_scale_velocity(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_active(spine_physics_constraint constraint, spine_bool value); +SPINE_CPP_LITE_EXPORT spine_bool spine_physics_constraint_is_active(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_remaining(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_remaining(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_set_last_time(spine_physics_constraint constraint, float value); +SPINE_CPP_LITE_EXPORT float spine_physics_constraint_get_last_time(spine_physics_constraint constraint); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_reset(spine_physics_constraint constraint); +// Omitted setToSetupPose() +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_update(spine_physics_constraint data, spine_physics physics); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_translate(spine_physics_constraint data, float x, float y); +SPINE_CPP_LITE_EXPORT void spine_physics_constraint_rotate(spine_physics_constraint data, float x, float y, float degrees); + + +// OMITTED copy() +SPINE_CPP_LITE_EXPORT void spine_sequence_apply(spine_sequence sequence, spine_slot slot, spine_attachment attachment); +SPINE_CPP_LITE_EXPORT const utf8 *spine_sequence_get_path(spine_sequence sequence, const utf8 *basePath, int32_t index); +SPINE_CPP_LITE_EXPORT int32_t spine_sequence_get_id(spine_sequence sequence); +SPINE_CPP_LITE_EXPORT void spine_sequence_set_id(spine_sequence sequence, int32_t id); +SPINE_CPP_LITE_EXPORT int32_t spine_sequence_get_start(spine_sequence sequence); +SPINE_CPP_LITE_EXPORT void spine_sequence_set_start(spine_sequence sequence, int32_t start); +SPINE_CPP_LITE_EXPORT int32_t spine_sequence_get_digits(spine_sequence sequence); +SPINE_CPP_LITE_EXPORT void spine_sequence_set_digits(spine_sequence sequence, int32_t digits); +SPINE_CPP_LITE_EXPORT int32_t spine_sequence_get_setup_index(spine_sequence sequence); +SPINE_CPP_LITE_EXPORT void spine_sequence_set_setup_index(spine_sequence sequence, int32_t setupIndex); +SPINE_CPP_LITE_EXPORT int32_t spine_sequence_get_num_regions(spine_sequence sequence); +SPINE_CPP_LITE_EXPORT spine_texture_region *spine_sequence_get_regions(spine_sequence sequence); + +SPINE_CPP_LITE_EXPORT void *spine_texture_region_get_texture(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_texture(spine_texture_region textureRegion, void *texture); +SPINE_CPP_LITE_EXPORT float spine_texture_region_get_u(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_u(spine_texture_region textureRegion, float u); +SPINE_CPP_LITE_EXPORT float spine_texture_region_get_v(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_v(spine_texture_region textureRegion, float v); +SPINE_CPP_LITE_EXPORT float spine_texture_region_get_u2(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_u2(spine_texture_region textureRegion, float u2); +SPINE_CPP_LITE_EXPORT float spine_texture_region_get_v2(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_v2(spine_texture_region textureRegion, float v2); +SPINE_CPP_LITE_EXPORT int32_t spine_texture_region_get_degrees(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_degrees(spine_texture_region textureRegion, int32_t degrees); +SPINE_CPP_LITE_EXPORT float spine_texture_region_get_offset_x(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_offset_x(spine_texture_region textureRegion, float offsetX); +SPINE_CPP_LITE_EXPORT float spine_texture_region_get_offset_y(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_offset_y(spine_texture_region textureRegion, float offsetY); +SPINE_CPP_LITE_EXPORT int32_t spine_texture_region_get_width(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_width(spine_texture_region textureRegion, int32_t width); +SPINE_CPP_LITE_EXPORT int32_t spine_texture_region_get_height(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_height(spine_texture_region textureRegion, int32_t height); +SPINE_CPP_LITE_EXPORT int32_t spine_texture_region_get_original_width(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_original_width(spine_texture_region textureRegion, int32_t originalWidth); +SPINE_CPP_LITE_EXPORT int32_t spine_texture_region_get_original_height(spine_texture_region textureRegion); +SPINE_CPP_LITE_EXPORT void spine_texture_region_set_original_height(spine_texture_region textureRegion, int32_t originalHeight); + +#endif diff --git a/docs/1.18.0/_static/apps/examples/assets/packages/trex_game/assets/images/trex.png b/docs/1.18.0/_static/apps/examples/assets/packages/trex_game/assets/images/trex.png new file mode 100644 index 000000000..e35c8acbe Binary files /dev/null and b/docs/1.18.0/_static/apps/examples/assets/packages/trex_game/assets/images/trex.png differ diff --git a/docs/1.18.0/_static/apps/examples/assets/shaders/ink_sparkle.frag b/docs/1.18.0/_static/apps/examples/assets/shaders/ink_sparkle.frag new file mode 100644 index 000000000..d43532a23 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/assets/shaders/ink_sparkle.frag @@ -0,0 +1,126 @@ +{ + "sksl": { + "entrypoint": "ink_sparkle_fragment_main", + "shader": "// This SkSL shader is autogenerated by spirv-cross.\n\nfloat4 flutter_FragCoord;\n\nuniform vec4 u_color;\nuniform vec4 u_composite_1;\nuniform vec2 u_center;\nuniform float u_max_radius;\nuniform vec2 u_resolution_scale;\nuniform vec2 u_noise_scale;\nuniform float u_noise_phase;\nuniform vec2 u_circle1;\nuniform vec2 u_circle2;\nuniform vec2 u_circle3;\nuniform vec2 u_rotation1;\nuniform vec2 u_rotation2;\nuniform vec2 u_rotation3;\n\nvec4 fragColor;\n\nfloat u_alpha;\nfloat u_sparkle_alpha;\nfloat u_blur;\nfloat u_radius_scale;\n\nvec2 FLT_flutter_local_FlutterFragCoord()\n{\n return flutter_FragCoord.xy;\n}\n\nmat2 FLT_flutter_local_rotate2d(vec2 rad)\n{\n return mat2(vec2(rad.x, -rad.y), vec2(rad.y, rad.x));\n}\n\nfloat FLT_flutter_local_soft_circle(vec2 uv, vec2 xy, float radius, float blur)\n{\n float blur_half = blur * 0.5;\n float d = distance(uv, xy);\n return 1.0 - smoothstep(1.0 - blur_half, 1.0 + blur_half, d / radius);\n}\n\nfloat FLT_flutter_local_circle_grid(vec2 resolution, inout vec2 p, vec2 xy, vec2 rotation, float cell_diameter)\n{\n vec2 param = rotation;\n p = (FLT_flutter_local_rotate2d(param) * (xy - p)) + xy;\n p = mod(p, vec2(cell_diameter)) / resolution;\n float cell_uv = (cell_diameter / resolution.y) * 0.5;\n float r = 0.64999997615814208984375 * cell_uv;\n vec2 param_1 = p;\n vec2 param_2 = vec2(cell_uv);\n float param_3 = r;\n float param_4 = r * 50.0;\n return FLT_flutter_local_soft_circle(param_1, param_2, param_3, param_4);\n}\n\nfloat FLT_flutter_local_turbulence(vec2 uv)\n{\n vec2 uv_scale = uv * vec2(0.800000011920928955078125);\n vec2 param = vec2(0.800000011920928955078125);\n vec2 param_1 = uv_scale;\n vec2 param_2 = u_circle1;\n vec2 param_3 = u_rotation1;\n float param_4 = 0.17000000178813934326171875;\n float _319 = FLT_flutter_local_circle_grid(param, param_1, param_2, param_3, param_4);\n float g1 = _319;\n vec2 param_5 = vec2(0.800000011920928955078125);\n vec2 param_6 = uv_scale;\n vec2 param_7 = u_circle2;\n vec2 param_8 = u_rotation2;\n float param_9 = 0.20000000298023223876953125;\n float _331 = FLT_flutter_local_circle_grid(param_5, param_6, param_7, param_8, param_9);\n float g2 = _331;\n vec2 param_10 = vec2(0.800000011920928955078125);\n vec2 param_11 = uv_scale;\n vec2 param_12 = u_circle3;\n vec2 param_13 = u_rotation3;\n float param_14 = 0.2750000059604644775390625;\n float _344 = FLT_flutter_local_circle_grid(param_10, param_11, param_12, param_13, param_14);\n float g3 = _344;\n float v = (((g1 * g1) + g2) - g3) * 0.5;\n return clamp(0.449999988079071044921875 + (0.800000011920928955078125 * v), 0.0, 1.0);\n}\n\nfloat FLT_flutter_local_soft_ring(vec2 uv, vec2 xy, float radius, float thickness, float blur)\n{\n vec2 param = uv;\n vec2 param_1 = xy;\n float param_2 = radius + thickness;\n float param_3 = blur;\n float circle_outer = FLT_flutter_local_soft_circle(param, param_1, param_2, param_3);\n vec2 param_4 = uv;\n vec2 param_5 = xy;\n float param_6 = max(radius - thickness, 0.0);\n float param_7 = blur;\n float circle_inner = FLT_flutter_local_soft_circle(param_4, param_5, param_6, param_7);\n return clamp(circle_outer - circle_inner, 0.0, 1.0);\n}\n\nfloat FLT_flutter_local_triangle_noise(inout vec2 n)\n{\n n = fract(n * vec2(5.398700237274169921875, 5.442100048065185546875));\n n += vec2(dot(n.yx, n + vec2(21.5351009368896484375, 14.3136997222900390625)));\n float xy = n.x * n.y;\n return (fract(xy * 95.43070220947265625) + fract(xy * 75.0496063232421875)) - 1.0;\n}\n\nfloat FLT_flutter_local_threshold(float v, float l, float h)\n{\n return step(l, v) * (1.0 - step(h, v));\n}\n\nfloat FLT_flutter_local_sparkle(vec2 uv, float t)\n{\n vec2 param = uv;\n float _242 = FLT_flutter_local_triangle_noise(param);\n float n = _242;\n float param_1 = n;\n float param_2 = 0.0;\n float param_3 = 0.0500000007450580596923828125;\n float s = FLT_flutter_local_threshold(param_1, param_2, param_3);\n float param_4 = n + sin(3.1415927410125732421875 * (t + 0.3499999940395355224609375));\n float param_5 = 0.100000001490116119384765625;\n float param_6 = 0.1500000059604644775390625;\n s += FLT_flutter_local_threshold(param_4, param_5, param_6);\n float param_7 = n + sin(3.1415927410125732421875 * (t + 0.699999988079071044921875));\n float param_8 = 0.20000000298023223876953125;\n float param_9 = 0.25;\n s += FLT_flutter_local_threshold(param_7, param_8, param_9);\n float param_10 = n + sin(3.1415927410125732421875 * (t + 1.0499999523162841796875));\n float param_11 = 0.300000011920928955078125;\n float param_12 = 0.3499999940395355224609375;\n s += FLT_flutter_local_threshold(param_10, param_11, param_12);\n return clamp(s, 0.0, 1.0) * 0.550000011920928955078125;\n}\n\nvoid FLT_main()\n{\n u_alpha = u_composite_1.x;\n u_sparkle_alpha = u_composite_1.y;\n u_blur = u_composite_1.z;\n u_radius_scale = u_composite_1.w;\n vec2 p = FLT_flutter_local_FlutterFragCoord();\n vec2 uv_1 = p * u_resolution_scale;\n vec2 density_uv = uv_1 - mod(p, u_noise_scale);\n float radius = u_max_radius * u_radius_scale;\n vec2 param_13 = uv_1;\n float turbulence = FLT_flutter_local_turbulence(param_13);\n vec2 param_14 = p;\n vec2 param_15 = u_center;\n float param_16 = radius;\n float param_17 = 0.0500000007450580596923828125 * u_max_radius;\n float param_18 = u_blur;\n float ring = FLT_flutter_local_soft_ring(param_14, param_15, param_16, param_17, param_18);\n vec2 param_19 = density_uv;\n float param_20 = u_noise_phase;\n float sparkle = ((FLT_flutter_local_sparkle(param_19, param_20) * ring) * turbulence) * u_sparkle_alpha;\n vec2 param_21 = p;\n vec2 param_22 = u_center;\n float param_23 = radius;\n float param_24 = u_blur;\n float wave_alpha = (FLT_flutter_local_soft_circle(param_21, param_22, param_23, param_24) * u_alpha) * u_color.w;\n vec4 wave_color = vec4(u_color.xyz * wave_alpha, wave_alpha);\n fragColor = mix(wave_color, vec4(1.0), vec4(sparkle));\n}\n\nhalf4 main(float2 iFragCoord)\n{\n flutter_FragCoord = float4(iFragCoord, 0, 0);\n FLT_main();\n return fragColor;\n}\n", + "stage": 1, + "uniforms": [ + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 0, + "name": "u_color", + "rows": 4, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 1, + "name": "u_composite_1", + "rows": 4, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 2, + "name": "u_center", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 3, + "name": "u_max_radius", + "rows": 1, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 4, + "name": "u_resolution_scale", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 5, + "name": "u_noise_scale", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 6, + "name": "u_noise_phase", + "rows": 1, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 7, + "name": "u_circle1", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 8, + "name": "u_circle2", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 9, + "name": "u_circle3", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 10, + "name": "u_rotation1", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 11, + "name": "u_rotation2", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 12, + "name": "u_rotation3", + "rows": 2, + "type": 10 + } + ] + } +} \ No newline at end of file diff --git a/docs/1.18.0/_static/apps/examples/index.html b/docs/1.18.0/_static/apps/examples/index.html new file mode 100644 index 000000000..ee5c9b697 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/index.html @@ -0,0 +1,12 @@ + + + + + +examples + + + + + + diff --git a/docs/1.18.0/_static/apps/examples/main.dart.js b/docs/1.18.0/_static/apps/examples/main.dart.js new file mode 100644 index 000000000..5e190f586 --- /dev/null +++ b/docs/1.18.0/_static/apps/examples/main.dart.js @@ -0,0 +1,170560 @@ +(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.d(A.du(a,0,4294967295,"length",null)) +return J.na(new Array(a),b)}, +vs(a,b){if(a<0||a>4294967295)throw A.d(A.du(a,0,4294967295,"length",null)) +return J.na(new Array(a),b)}, +FA(a,b){if(a<0)throw A.d(A.c3("Length must be a non-negative integer: "+a,null)) +return A.b(new Array(a),b.h("v<0>"))}, +el(a,b){if(a<0)throw A.d(A.c3("Length must be a non-negative integer: "+a,null)) +return A.b(new Array(a),b.h("v<0>"))}, +na(a,b){return J.aI3(A.b(a,b.h("v<0>")))}, +aI3(a){a.fixed$length=Array +return a}, +bnm(a){a.fixed$length=Array +a.immutable$list=Array +return a}, +bGd(a,b){return J.Dn(a,b)}, +bnn(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}}, +bno(a,b){var s,r +for(s=a.length;b0;b=s){s=b-1 +r=a.charCodeAt(s) +if(r!==32&&r!==13&&!J.bnn(r))break}return b}, +nO(a){if(typeof a=="number"){if(Math.floor(a)==a)return J.FB.prototype +return J.O6.prototype}if(typeof a=="string")return J.px.prototype +if(a==null)return J.O5.prototype +if(typeof a=="boolean")return J.O4.prototype +if(Array.isArray(a))return J.v.prototype +if(typeof a!="object"){if(typeof a=="function")return J.ln.prototype +if(typeof a=="symbol")return J.zO.prototype +if(typeof a=="bigint")return J.zN.prototype +return a}if(a instanceof A.B)return a +return J.av2(a)}, +bSZ(a){if(typeof a=="number")return J.vt.prototype +if(typeof a=="string")return J.px.prototype +if(a==null)return a +if(Array.isArray(a))return J.v.prototype +if(typeof a!="object"){if(typeof a=="function")return J.ln.prototype +if(typeof a=="symbol")return J.zO.prototype +if(typeof a=="bigint")return J.zN.prototype +return a}if(a instanceof A.B)return a +return J.av2(a)}, +al(a){if(typeof a=="string")return J.px.prototype +if(a==null)return a +if(Array.isArray(a))return J.v.prototype +if(typeof a!="object"){if(typeof a=="function")return J.ln.prototype +if(typeof a=="symbol")return J.zO.prototype +if(typeof a=="bigint")return J.zN.prototype +return a}if(a instanceof A.B)return a +return J.av2(a)}, +cV(a){if(a==null)return a +if(Array.isArray(a))return J.v.prototype +if(typeof a!="object"){if(typeof a=="function")return J.ln.prototype +if(typeof a=="symbol")return J.zO.prototype +if(typeof a=="bigint")return J.zN.prototype +return a}if(a instanceof A.B)return a +return J.av2(a)}, +btS(a){if(typeof a=="number"){if(Math.floor(a)==a)return J.FB.prototype +return J.O6.prototype}if(a==null)return a +if(!(a instanceof A.B))return J.qi.prototype +return a}, +Ze(a){if(typeof a=="number")return J.vt.prototype +if(a==null)return a +if(!(a instanceof A.B))return J.qi.prototype +return a}, +btT(a){if(typeof a=="number")return J.vt.prototype +if(typeof a=="string")return J.px.prototype +if(a==null)return a +if(!(a instanceof A.B))return J.qi.prototype +return a}, +ui(a){if(typeof a=="string")return J.px.prototype +if(a==null)return a +if(!(a instanceof A.B))return J.qi.prototype +return a}, +bS(a){if(a==null)return a +if(typeof a!="object"){if(typeof a=="function")return J.ln.prototype +if(typeof a=="symbol")return J.zO.prototype +if(typeof a=="bigint")return J.zN.prototype +return a}if(a instanceof A.B)return a +return J.av2(a)}, +f9(a){if(a==null)return a +if(!(a instanceof A.B))return J.qi.prototype +return a}, +bAU(a,b){if(typeof a=="number"&&typeof b=="number")return a+b +return J.bSZ(a).X(a,b)}, +f(a,b){if(a==null)return b==null +if(typeof a!="object")return b!=null&&a===b +return J.nO(a).k(a,b)}, +bAV(a,b){if(typeof a=="number"&&typeof b=="number")return a*b +return J.btT(a).a2(a,b)}, +bk6(a){if(typeof a=="number")return-a +return J.btS(a).fv(a)}, +bAW(a,b){if(typeof a=="number"&&typeof b=="number")return a-b +return J.Ze(a).Y(a,b)}, +bG(a,b){if(typeof b==="number")if(Array.isArray(a)||typeof a=="string"||A.bu_(a,a[v.dispatchPropertyName]))if(b>>>0===b&&b>>0===b&&b0?1:a<0?-1:a +return J.btS(a).gAF(a)}, +bBf(a){return J.f9(a).gcz(a)}, +bkf(a){return J.f9(a).ga0s(a)}, +bBg(a){return J.f9(a).gaid(a)}, +bkg(a){return J.bS(a).gaj(a)}, +bdJ(a){return J.bS(a).gbg(a)}, +l5(a){return J.f9(a).gm(a)}, +bdK(a){return J.bS(a).gbm(a)}, +bBh(a,b,c){return J.bS(a).a_h(a,b,c)}, +bBi(a,b,c){return J.bS(a).a_k(a,b,c)}, +bBj(a,b,c){return J.bS(a).G0(a,b,c)}, +bBk(a,b){return J.bS(a).a_m(a,b)}, +bBl(a,b,c){return J.cV(a).nO(a,b,c)}, +bdL(a,b){return J.f9(a).cW(a,b)}, +bkh(a,b,c){return J.bS(a).ez(a,b,c)}, +bdM(a,b,c){return J.bS(a).ec(a,b,c)}, +bdN(a,b){return J.bS(a).j5(a,b)}, +bdO(a,b){return J.al(a).f7(a,b)}, +bki(a){return J.f9(a).oy(a)}, +bkj(a,b,c){return J.cV(a).hc(a,b,c)}, +bBm(a,b,c){return J.cV(a).hO(a,b,c)}, +bkk(a,b,c){return J.bS(a).aTG(a,b,c)}, +bBn(a){return J.f9(a).Ek(a)}, +bkl(a){return J.cV(a).mq(a)}, +bBo(a,b){return J.cV(a).cj(a,b)}, +bBp(a,b){return J.f9(a).aUw(a,b)}, +mU(a,b,c){return J.cV(a).jo(a,b,c)}, +bBq(a,b,c,d){return J.cV(a).Ey(a,b,c,d)}, +bBr(a,b,c){return J.ui(a).u_(a,b,c)}, +bBs(a,b){return J.nO(a).a6(a,b)}, +bBt(a){return J.f9(a).e0(a)}, +bBu(a,b){return J.f9(a).l1(a,b)}, +bBv(a,b,c,d,e){return J.f9(a).q4(a,b,c,d,e)}, +ZA(a,b,c){return J.bS(a).cU(a,b,c)}, +avI(a){return J.cV(a).hW(a)}, +up(a,b){return J.cV(a).P(a,b)}, +bBw(a,b){return J.cV(a).di(a,b)}, +bBx(a){return J.cV(a).eQ(a)}, +bBy(a,b){return J.bS(a).ad(a,b)}, +bBz(a,b,c){return J.cV(a).hX(a,b,c)}, +bBA(a,b,c){return J.ui(a).nE(a,b,c)}, +bBB(a,b){return J.bS(a).aYQ(a,b)}, +avJ(a){return J.Ze(a).ai(a)}, +bkm(a,b){return J.f9(a).au(a,b)}, +bBC(a,b){return J.al(a).sF(a,b)}, +bkn(a,b,c){return J.cV(a).jC(a,b,c)}, +avK(a,b,c,d,e){return J.cV(a).c3(a,b,c,d,e)}, +xH(a,b){return J.cV(a).fz(a,b)}, +bko(a,b){return J.cV(a).i1(a,b)}, +bdP(a,b){return J.ui(a).x0(a,b)}, +ZB(a,b){return J.cV(a).bE(a,b)}, +bkp(a){return J.Ze(a).aw(a)}, +xI(a){return J.cV(a).eT(a)}, +bBD(a,b){return J.Ze(a).hZ(a,b)}, +bBE(a){return J.cV(a).kD(a)}, +i1(a){return J.nO(a).j(a)}, +bdQ(a){return J.ui(a).eC(a)}, +bBF(a){return J.ui(a).aZL(a)}, +bBG(a,b){return J.bS(a).a8(a,b)}, +bBH(a,b,c){return J.bS(a).ey(a,b,c)}, +bBI(a,b){return J.f9(a).ZO(a,b)}, +ZC(a,b){return J.cV(a).mz(a,b)}, +Fx:function Fx(){}, +O4:function O4(){}, +O5:function O5(){}, +l:function l(){}, +rE:function rE(){}, +a8O:function a8O(){}, +qi:function qi(){}, +ln:function ln(){}, +zN:function zN(){}, +zO:function zO(){}, +v:function v(a){this.$ti=a}, +aI8:function aI8(a){this.$ti=a}, +cA:function cA(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +vt:function vt(){}, +FB:function FB(){}, +O6:function O6(){}, +px:function px(){}},A={ +bSh(){return self.window.navigator.userAgent}, +bRr(){var s=$.eb() +return s}, +bSn(a,b){if(a==="Google Inc.")return B.ec +else if(a==="Apple Computer, Inc.")return B.au +else if(B.d.G(b,"Edg/"))return B.ec +else if(a===""&&B.d.G(b,"firefox"))return B.cP +A.xA("WARNING: failed to detect current browser engine. Assuming this is a Chromium-compatible browser.") +return B.ec}, +bSp(){var s,r,q,p=null,o=self.window +o=o.navigator.platform +if(o==null)o=p +o.toString +s=o +r=A.bSh() +if(B.d.c4(s,"Mac")){o=self.window +o=o.navigator.maxTouchPoints +if(o==null)o=p +o=o==null?p:B.c.aw(o) +q=o +if((q==null?0:q)>2)return B.bx +return B.cZ}else if(B.d.G(s.toLowerCase(),"iphone")||B.d.G(s.toLowerCase(),"ipad")||B.d.G(s.toLowerCase(),"ipod"))return B.bx +else if(B.d.G(r,"Android"))return B.kC +else if(B.d.c4(s,"Linux"))return B.oZ +else if(B.d.c4(s,"Win"))return B.Dj +else return B.a3R}, +bTs(){var s=$.hj() +return B.ru.G(0,s)}, +bTt(){var s=$.hj() +return s===B.bx&&B.d.G(self.window.navigator.userAgent,"OS 15_")}, +bTp(){var s,r=$.bhQ +if(r!=null)return r +s=A.bw("Chrom(e|ium)\\/([0-9]+)\\.",!0,!1,!1).iU(self.window.navigator.userAgent) +if(s!=null){r=s.b[2] +r.toString +return $.bhQ=A.et(r,null,null)<=110}return $.bhQ=!1}, +kY(){var s,r=A.Da(1,1) +if(A.lZ(r,"webgl2",null)!=null){s=$.hj() +if(s===B.bx)return 1 +return 2}if(A.lZ(r,"webgl",null)!=null)return 1 +return-1}, +btk(){return self.Intl.v8BreakIterator!=null&&self.Intl.Segmenter!=null}, +b4(){return $.cp.bb()}, +bdc(a){return a===B.av?$.cp.bb().FilterMode.Nearest:$.cp.bb().FilterMode.Linear}, +biP(a){return a===B.jP?$.cp.bb().MipmapMode.Linear:$.cp.bb().MipmapMode.None}, +bK8(a){var s=a.encodeToBytes() +return s==null?null:s}, +bKa(a,b){return a.setColorInt(b)}, +buT(a){var s,r,q,p=new Float32Array(16) +for(s=0;s<4;++s)for(r=s*4,q=0;q<4;++q)p[q*4+s]=a[r+q] +return p}, +Zo(a){var s,r,q,p=new Float32Array(9) +for(s=a.length,r=0;r<9;++r){q=B.xk[r] +if(q>>16&255)/255 +s[1]=(r>>>8&255)/255 +s[2]=(r&255)/255 +s[3]=(r>>>24&255)/255 +return s}, +bpH(a,b,c,d,e,f,g,h,i,j){return A.a3(a,"transform",[b,c,d,e,f,g,h,i,j])}, +iY(a){var s=new Float32Array(4) +s[0]=a.gae(a) +s[1]=a.gaj(a) +s[2]=a.gaH(a) +s[3]=a.gaQ(a) +return s}, +bce(a){return new A.A(a[0],a[1],a[2],a[3])}, +Zp(a){var s=new Float32Array(12) +s[0]=a.a +s[1]=a.b +s[2]=a.c +s[3]=a.d +s[4]=a.e +s[5]=a.f +s[6]=a.r +s[7]=a.w +s[8]=a.x +s[9]=a.y +s[10]=a.z +s[11]=a.Q +return s}, +buS(a){var s,r,q=a.length,p=t.e.a(self.window.flutterCanvasKit.Malloc(self.Float32Array,q*2)),o=p.toTypedArray() +for(s=0;s"))}, +bRu(a,b){return b+a}, +auZ(){var s=0,r=A.r(t.e),q,p,o +var $async$auZ=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:s=3 +return A.x(A.b91(A.bOv()),$async$auZ) +case 3:p=t.e +s=4 +return A.x(A.ka(self.window.CanvasKitInit(p.a({locateFile:t.L.a(A.cd(A.bP2()))})),p),$async$auZ) +case 4:o=b +if(A.bpG(o.ParagraphBuilder)&&!A.btk())throw A.d(A.c1("The CanvasKit variant you are using only works on Chromium browsers. Please use a different CanvasKit variant, or use a Chromium browser.")) +q=o +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$auZ,r)}, +b91(a){var s=0,r=A.r(t.H),q,p,o,n +var $async$b91=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=a.$ti,o=new A.cR(a,a.gF(0),p.h("cR")),p=p.h("aI.E") +case 3:if(!o.H()){s=4 +break}n=o.d +s=5 +return A.x(A.bOW(n==null?p.a(n):n),$async$b91) +case 5:if(c){s=1 +break}s=3 +break +case 4:throw A.d(A.c1("Failed to download any of the following CanvasKit URLs: "+a.j(0))) +case 1:return A.p(q,r)}}) +return A.q($async$b91,r)}, +bOW(a){var s,r,q,p,o,n=A.hh().b +n=n==null?null:A.a5I(n) +s=A.c8(self.document,"script") +if(n!=null)s.nonce=n +s.src=A.bS6(a) +n=new A.aM($.aK,t.tt) +r=new A.bH(n,t.VY) +q=A.bn("loadCallback") +p=A.bn("errorCallback") +o=t.L +q.shb(o.a(A.cd(new A.b90(s,r)))) +p.shb(o.a(A.cd(new A.b9_(s,r)))) +A.dc(s,"load",q.bl(),null) +A.dc(s,"error",p.bl(),null) +self.document.head.appendChild(s) +return n}, +aK0(a){var s="ColorFilter",r=new A.a6w(a),q=new A.hY(s,t.gA) +q.kH(r,a.By(),s,t.e) +r.b!==$&&A.aj() +r.b=q +return r}, +bOD(){var s,r=new Float32Array(20) +for(s=0;s<4;++s)r[B.Xo[s]]=1 +return $.bPs=r}, +bS5(a,b){var s=$.cp.bb().ColorFilter.MakeBlend(A.b9r($.avt(),a),$.Ks()[b.a]) +if(s==null)return $.cp.bb().ColorFilter.MakeMatrix($.byV()) +return s}, +bCI(a){return new A.DT(a)}, +bRW(a){var s,r +switch(a.d.a){case 0:s=a.a +if(s==null||a.b==null)return null +s.toString +r=a.b +r.toString +return new A.Lt(s,r) +case 1:s=a.c +if(s==null)return null +return new A.DT(s) +case 2:return B.K8 +case 3:return B.Ka +default:throw A.d(A.ad("Unknown mode "+a.j(0)+".type for ColorFilter."))}}, +blC(a,b){var s=b.h("v<0>") +return new A.a2v(a,A.b([],s),A.b([],s),b.h("a2v<0>"))}, +bfU(a){var s=null +return new A.op(B.D7,s,s,s,a,s)}, +bgp(a,b,c){var s=new self.window.flutterCanvasKit.Font(c),r=A.b([0],t.t) +A.a3(s,"getGlyphBounds",[r,null,null]) +return new A.Ba(b,a,c)}, +bV6(a,b,c){var s="encoded image bytes" +if($.bjS()&&b==null&&c==null)return A.a0C(a,s) +else return A.bl7(a,s,c,b)}, +vg(a){return new A.a55(a)}, +bd4(a,b){var s=0,r=A.r(t.hP),q,p +var $async$bd4=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:s=3 +return A.x(A.av0(a,b),$async$bd4) +case 3:p=d +if($.bjS()){q=A.a0C(p,a) +s=1 +break}else{q=A.bl7(p,a,null,null) +s=1 +break}case 1:return A.p(q,r)}}) +return A.q($async$bd4,r)}, +av0(a,b){return A.bSI(a,b)}, +bSI(a,b){var s=0,r=A.r(t.H3),q,p=2,o,n,m,l,k,j +var $async$av0=A.t(function(c,d){if(c===1){o=d +s=p}while(true)switch(s){case 0:p=4 +s=7 +return A.x(A.Db(a),$async$av0) +case 7:n=d +m=n.gaOg() +if(!n.gLa()){l=A.vg(u.O+a+"\nServer response code: "+J.bBf(n)) +throw A.d(l)}s=m!=null?8:10 +break +case 8:l=A.bcW(n.gzM(),m,b) +q=l +s=1 +break +s=9 +break +case 10:s=11 +return A.x(A.aGU(n),$async$av0) +case 11:l=d +q=l +s=1 +break +case 9:p=2 +s=6 +break +case 4:p=3 +j=o +if(A.b2(j) instanceof A.NM)throw A.d(A.vg(u.O+a+"\nTrying to load an image from another domain? Find answers at:\nhttps://flutter.dev/docs/development/platform-integration/web-images")) +else throw j +s=6 +break +case 3:s=2 +break +case 6:case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$av0,r)}, +bcW(a,b,c){return A.bUN(a,b,c)}, +bUN(a,b,c){var s=0,r=A.r(t.H3),q,p,o,n +var $async$bcW=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:p={} +o=t.zd +n=o.a(new self.Uint8Array(b)) +p.a=p.b=0 +s=3 +return A.x(a.Fb(0,new A.bcX(p,c,b,n),o),$async$bcW) +case 3:q=n +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$bcW,r)}, +ayF(a,b){var s=new A.yh($,b),r=A.bD9(a,s,"SkImage",t.XY,t.e) +s.b!==$&&A.aj() +s.b=r +s.a5E() +return s}, +bl7(a,b,c,d){var s,r,q,p,o,n,m,l,k=new A.a0B(b,a,d,c),j=$.cp.bb().MakeAnimatedImageFromEncoded(t.zd.a(a)) +if(j==null)A.X(A.vg("Failed to decode image data.\nImage source: "+b)) +s=d==null +if(!s||c!=null)if(j.getFrameCount()>1)$.fK().$1("targetWidth and targetHeight for multi-frame images not supported") +else{r=j.makeImageAtCurrentFrame() +if(!s&&d<=0)d=null +if(c!=null&&c<=0)c=null +s=d==null +if(s&&c!=null)d=B.c.ai(c*(r.width()/r.height())) +else if(c==null&&!s)c=B.f.eY(d,r.width()/r.height()) +q=new A.qU() +p=q.yB(B.eP) +o=A.a0N() +s=A.ayF(r,null) +n=r.width() +m=r.height() +d.toString +c.toString +p.i6(s,new A.A(0,0,0+n,0+m),new A.A(0,0,d,c),o) +m=o.b +m===$&&A.c() +m.t() +m=q.jT().FA(d,c).b +m===$&&A.c() +m=m.a +m===$&&A.c() +m=m.a +m.toString +l=A.bK8(m) +if(l==null)A.X(A.vg("Failed to re-size image")) +j=$.cp.bb().MakeAnimatedImageFromEncoded(l) +if(j==null)A.X(A.vg("Failed to decode re-sized image data.\nImage source: "+b))}k.d=B.c.aw(j.getFrameCount()) +k.e=B.c.aw(j.getRepetitionCount()) +s=new A.hY("Codec",t.gA) +s.kH(k,j,"Codec",t.e) +k.a!==$&&A.aj() +k.a=s +return k}, +bCH(a,b,c){return new A.Lu(a,b,c,new A.Ku(new A.axR()))}, +a0C(a,b){var s=0,r=A.r(t.Lh),q,p,o,n +var $async$a0C=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:n=A.bSo(a) +if(n==null){p=J.al(a) +throw A.d(A.vg("Failed to detect image file format using the file header.\nFile header was "+(!p.gaA(a)?"["+A.bRt(p.cI(a,0,Math.min(10,p.gF(a))))+"]":"empty")+".\nImage source: "+b))}o=A.bCH(n,t.zd.a(a),b) +s=3 +return A.x(o.xK(),$async$a0C) +case 3:q=o +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$a0C,r)}, +bHt(a,b){return new A.Ao(A.blC(new A.aLo(),t.NU),a,new A.aad(),B.x,new A.a1q())}, +bD9(a,b,c,d,e){var s=new A.a1A(A.C(d),d.h("@<0>").ak(e).h("a1A<1,2>")),r=new A.hY(c,e.h("hY<0>")) +r.kH(s,a,c,e) +s.a!==$&&A.aj() +s.a=r +return s}, +bHP(a,b){return new A.AE(b,A.blC(new A.aM6(),t.vB),a,new A.aad(),B.x,new A.a1q())}, +bRJ(a){var s,r,q,p,o,n,m,l=A.fu() +$label0$1:for(s=a.gb0c(),s=s.gZe(s),s=s.gar(s),r=B.eP;s.H();){q=s.ga1(s) +switch(q.gbg(q)){case B.D4:r=r.fp(A.Dh(l,q.gcg(q))) +break +case B.D5:r=r.fp(A.Dh(l,q.gb0r().gb0g())) +break +case B.D6:r.fp(A.Dh(l,q.ghg(q).hB(0))) +break +case B.D7:p=q.gb0b(q) +o=new A.cL(new Float32Array(16)) +o.v(l) +o.bL(0,p) +l=o +break +case B.D8:continue $label0$1}}s=a.gl0(a) +s=s.gKs(s) +p=a.gl0(a) +p=p.gb00(p) +n=a.gC(a) +n=n.gbW(n) +m=a.gC(a) +m=m.gb9(m) +return A.Dh(l,new A.A(s,p,s.X(0,n),p.X(0,m))).fp(r)}, +bS2(a,b,c){var s,r,q,p,o,n,m,l=A.b([],t.RX),k=t.H0,j=A.b([],k),i=new A.hU(j),h=a[0].a +h===$&&A.c() +if(!A.bce(h.a.cullRect()).gaA(0))j.push(a[0]) +for(s=0;s=m||o>=j))i.a.push(a[s])}if(i.a.length!==0)l.push(i) +return new A.Hb(l)}, +a0N(){var s,r=new self.window.flutterCanvasKit.Paint(),q=new A.DU(r,B.bF,B.i,B.eR,B.fQ,B.av) +r.setAntiAlias(!0) +r.setColorInt(4278190080) +s=new A.hY("Paint",t.gA) +s.kH(q,r,"Paint",t.e) +q.b!==$&&A.aj() +q.b=s +return q}, +ayJ(a,b){var s=new A.Lx(b),r=new A.hY("Path",t.gA) +r.kH(s,a,"Path",t.e) +s.a!==$&&A.aj() +s.a=r +return s}, +bCr(){var s,r=$.eb() +if(r!==B.au)s=r===B.cP +else s=!0 +if(s)return new A.aLl(A.D(t.lz,t.Es)) +s=A.c8(self.document,"flt-canvas-container") +if($.bdz())r=r!==B.au +else r=!1 +return new A.aM4(new A.oF(r,!1,s),A.D(t.lz,t.pw))}, +bKJ(a){var s,r=A.c8(self.document,"flt-canvas-container") +if($.bdz()){s=$.eb() +s=s!==B.au}else s=!1 +return new A.oF(s&&!a,a,r)}, +bCJ(a,b){var s,r,q,p=null +t.S3.a(a) +s=t.e.a({}) +r=A.bhT(a.a,a.b) +s.fontFamilies=r +r=a.c +if(r!=null)s.fontSize=r +r=a.d +if(r!=null)s.heightMultiplier=r +q=a.x +if(q==null)q=b==null?p:b.c +switch(q){case null:case void 0:break +case B.U:A.bpI(s,!0) +break +case B.t0:A.bpI(s,!1) +break}r=a.f +if(r!=null||a.r!=null)s.fontStyle=A.biO(r,a.r) +r=a.w +if(r!=null)s.forceStrutHeight=r +s.strutEnabled=!0 +return s}, +be9(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){return new A.DV(b,c,d,e,f,m,k,a2,s,g,a0,h,j,q,a3,o,p,r,a,n,a1,i,l)}, +biO(a,b){var s=t.e.a({}) +if(a!=null)s.weight=$.bzQ()[a.a] +if(b!=null)s.slant=$.bzP()[b.a] +return s}, +bhT(a,b){var s=A.b([],t.T) +if(a!=null)s.push(a) +if(b!=null&&!B.b.h8(b,new A.b8N(a)))B.b.I(s,b) +B.b.I(s,$.G().gzj().gWP().as) +return s}, +bJG(a,b){var s=b.length +if(s<=B.Fd.b)return a.c +if(s<=B.Fe.b)return a.b +if(s<=B.Ff.b)return a.a +return null}, +btP(a,b){var s,r=A.bma($.byX().i(0,b).segment(a)),q=A.b([],t.t) +for(;r.H();){s=r.b +s===$&&A.c() +q.push(B.c.aw(s.index))}q.push(a.length) +return new Uint32Array(A.eG(q))}, +bST(a){var s,r,q,p,o=A.btj(a,a,$.bAa()),n=o.length,m=new Uint32Array((n+1)*2) +m[0]=0 +m[1]=0 +for(s=0;s>>16&255)/255 +s[1]=(a.gm(a)>>>8&255)/255 +s[2]=(a.gm(a)&255)/255 +s[3]=(a.gm(a)>>>24&255)/255 +return s}, +bCK(a,b,c,d,e){var s,r,q,p,o,n,m,l=null,k="Vertices",j=e==null +if(!j&&e.length!==J.bo(b))throw A.d(A.c3('"positions" and "textureCoordinates" lengths must match.',l)) +s=c!=null +if(s&&c.length*2!==J.bo(b))throw A.d(A.c3('"positions" and "colors" lengths must match.',l)) +r=d==null +if(!r&&J.bk7(d,new A.ayM(b)))throw A.d(A.c3('"indices" values must be valid indices in the positions list.',l)) +q=s?A.bHF(c.buffer,c.byteOffset,c.length):l +s=$.bA1()[a.a] +p=new A.a0S(s,b,e,q,d) +o=$.cp.bb() +t.Ml.a(b) +j=j?l:e +n=q==null?l:q +m=new A.hY(k,t.gA) +m.kH(p,A.a3(o,"MakeVertices",[s,b,j,n,r?l:t.UE.a(d)]),k,t.e) +p.f!==$&&A.aj() +p.f=m +return p}, +bem(){return self.window.navigator.clipboard!=null?new A.az2():new A.aDP()}, +bga(){var s=$.eb() +return s===B.cP||self.window.navigator.clipboard==null?new A.aDQ():new A.az3()}, +hh(){var s=$.bsi +return s==null?$.bsi=A.bF5(self.window.flutterConfiguration):s}, +bF5(a){var s=new A.aEm() +if(a!=null){s.a=!0 +s.b=a}return s}, +a5I(a){var s=a.nonce +return s==null?null:s}, +bJu(a){switch(a){case"DeviceOrientation.portraitUp":return"portrait-primary" +case"DeviceOrientation.portraitDown":return"portrait-secondary" +case"DeviceOrientation.landscapeLeft":return"landscape-primary" +case"DeviceOrientation.landscapeRight":return"landscape-secondary" +default:return null}}, +bme(a){var s=a.innerHeight +return s==null?null:s}, +beI(a,b){return a.matchMedia(b)}, +beH(a,b){return a.getComputedStyle(b)}, +bE6(a){return new A.aBI(a)}, +bEb(a){return a.userAgent}, +bEa(a){var s=a.languages +if(s==null)s=null +else{s=B.b.jo(s,new A.aBL(),t.N) +s=A.ab(s,!0,s.$ti.h("aI.E"))}return s}, +c8(a,b){return a.createElement(b)}, +dc(a,b,c,d){if(c!=null)if(d==null)a.addEventListener(b,c) +else a.addEventListener(b,c,d)}, +eQ(a,b,c,d){if(c!=null)if(d==null)a.removeEventListener(b,c) +else a.removeEventListener(b,c,d)}, +bRZ(a){return t.L.a(A.cd(a))}, +o6(a){var s=a.timeStamp +return s==null?null:s}, +bm3(a){if(a.parentNode!=null)a.parentNode.removeChild(a)}, +bm4(a,b){a.textContent=b +return b}, +aBM(a,b){return a.cloneNode(b)}, +bRY(a){return A.c8(self.document,a)}, +bE8(a){return a.tagName}, +blS(a,b,c){var s=A.bf(c) +return A.a3(a,"setAttribute",[b,s==null?t.K.a(s):s])}, +blT(a,b){a.tabIndex=b +return b}, +bE7(a){var s +for(;a.firstChild!=null;){s=a.firstChild +s.toString +a.removeChild(s)}}, +bE2(a,b){return A.M(a,"width",b)}, +bDY(a,b){return A.M(a,"height",b)}, +blN(a,b){return A.M(a,"position",b)}, +bE0(a,b){return A.M(a,"top",b)}, +bDZ(a,b){return A.M(a,"left",b)}, +bE1(a,b){return A.M(a,"visibility",b)}, +bE_(a,b){return A.M(a,"overflow",b)}, +M(a,b,c){a.setProperty(b,c,"")}, +aBJ(a){var s=a.src +return s==null?null:s}, +beD(a,b){a.src=b +return b}, +Da(a,b){var s +$.btC=$.btC+1 +s=A.c8(self.window.document,"canvas") +if(b!=null)A.yP(s,b) +if(a!=null)A.yO(s,a) +return s}, +yP(a,b){a.width=b +return b}, +yO(a,b){a.height=b +return b}, +lZ(a,b,c){var s +if(c==null)return a.getContext(b) +else{s=A.bf(c) +return A.a3(a,"getContext",[b,s==null?t.K.a(s):s])}}, +bE4(a){var s=A.lZ(a,"2d",null) +s.toString +return t.e.a(s)}, +bE3(a,b){var s +if(b===1){s=A.lZ(a,"webgl",null) +s.toString +return t.e.a(s)}s=A.lZ(a,"webgl2",null) +s.toString +return t.e.a(s)}, +aBG(a,b){var s=b==null?null:b +a.fillStyle=s +return s}, +bez(a,b){a.lineWidth=b +return b}, +aBH(a,b){var s=b +a.strokeStyle=s +return s}, +blO(a,b,c,d,e,f,g,h,i,j){if(e==null)return a.drawImage(b,c,d) +else{f.toString +g.toString +h.toString +i.toString +j.toString +return A.a3(a,"drawImage",[b,c,d,e,f,g,h,i,j])}}, +aBF(a,b){if(b==null)a.fill() +else A.a3(a,"fill",[b])}, +blP(a,b,c,d){a.fillText(b,c,d)}, +blQ(a,b,c,d,e,f,g){return A.a3(a,"setTransform",[b,c,d,e,f,g])}, +blR(a,b,c,d,e,f,g){return A.a3(a,"transform",[b,c,d,e,f,g])}, +aBE(a,b){if(b==null)a.clip() +else A.a3(a,"clip",[b])}, +bE5(a,b,c,d,e,f,g){return A.a3(a,"arc",[b,c,d,e,f,g])}, +bey(a,b){a.filter=b +return b}, +beB(a,b){a.shadowOffsetX=b +return b}, +beC(a,b){a.shadowOffsetY=b +return b}, +beA(a,b){a.shadowColor=b +return b}, +Db(a){return A.bT6(a)}, +bT6(a){var s=0,r=A.r(t.Lk),q,p=2,o,n,m,l,k +var $async$Db=A.t(function(b,c){if(b===1){o=c +s=p}while(true)switch(s){case 0:p=4 +s=7 +return A.x(A.ka(self.window.fetch(a),t.e),$async$Db) +case 7:n=c +q=new A.a51(a,n) +s=1 +break +p=2 +s=6 +break +case 4:p=3 +k=o +m=A.b2(k) +throw A.d(new A.NM(a,m)) +s=6 +break +case 3:s=2 +break +case 6:case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$Db,r)}, +bcm(a){var s=0,r=A.r(t.pI),q +var $async$bcm=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=3 +return A.x(A.Db(a),$async$bcm) +case 3:q=c.gzM().vk() +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$bcm,r)}, +aGU(a){var s=0,r=A.r(t.H3),q,p +var $async$aGU=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=J +s=3 +return A.x(a.gzM().vk(),$async$aGU) +case 3:q=p.xF(c) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$aGU,r)}, +btx(a,b,c){var s,r +if(c==null)return A.bbR(self.FontFace,[a,b]) +else{s=self.FontFace +r=A.bf(c) +return A.bbR(s,[a,b,r==null?t.K.a(r):r])}}, +bmb(a){var s=a.height +return s==null?null:s}, +bm0(a,b){var s=b==null?null:b +a.value=s +return s}, +blZ(a){var s=a.selectionStart +return s==null?null:s}, +blY(a){var s=a.selectionEnd +return s==null?null:s}, +bm_(a){var s=a.value +return s==null?null:s}, +r7(a){var s=a.code +return s==null?null:s}, +n5(a){var s=a.key +return s==null?null:s}, +bm1(a){var s=a.state +if(s==null)s=null +else{s=A.bim(s) +s.toString}return s}, +bRX(a){var s=self +return new s.Blob(a)}, +bm2(a){var s=a.matches +return s==null?null:s}, +Mq(a){var s=a.buttons +return s==null?null:s}, +bm7(a){var s=a.pointerId +return s==null?null:s}, +beG(a){var s=a.pointerType +return s==null?null:s}, +bm8(a){var s=a.tiltX +return s==null?null:s}, +bm9(a){var s=a.tiltY +return s==null?null:s}, +bmc(a){var s=a.wheelDeltaX +return s==null?null:s}, +bmd(a){var s=a.wheelDeltaY +return s==null?null:s}, +aBK(a,b){a.type=b +return b}, +blX(a,b){var s=b==null?null:b +a.value=s +return s}, +beF(a){var s=a.value +return s==null?null:s}, +beE(a){var s=a.disabled +return s==null?null:s}, +blW(a,b){a.disabled=b +return b}, +blV(a){var s=a.selectionStart +return s==null?null:s}, +blU(a){var s=a.selectionEnd +return s==null?null:s}, +bm5(a,b){a.height=b +return b}, +bm6(a,b){a.width=b +return b}, +aBN(a,b,c){var s +if(c==null)return a.getContext(b) +else{s=A.bf(c) +return A.a3(a,"getContext",[b,s==null?t.K.a(s):s])}}, +bEc(a,b){var s +if(b===1){s=A.aBN(a,"webgl",null) +s.toString +return t.e.a(s)}s=A.aBN(a,"webgl2",null) +s.toString +return t.e.a(s)}, +f_(a,b,c){var s=t.L.a(A.cd(c)) +a.addEventListener(b,s) +return new A.a2G(b,a,s)}, +bS_(a){return new self.ResizeObserver(t.L.a(A.cd(new A.bbY(a))))}, +bS6(a){if(self.window.trustedTypes!=null)return $.bA9().createScriptURL(a) +return a}, +bma(a){return new A.a2D(t.e.a(a[self.Symbol.iterator]()),t.yN)}, +bil(a){var s,r +if(self.Intl.Segmenter==null)throw A.d(A.d_("Intl.Segmenter() is not supported.")) +s=self.Intl.Segmenter +r=t.N +r=A.bf(A.b3(["granularity",a],r,r)) +if(r==null)r=t.K.a(r) +return A.bbR(s,[[],r])}, +btA(){var s,r +if(self.Intl.v8BreakIterator==null)throw A.d(A.d_("v8BreakIterator is not supported.")) +s=self.Intl.v8BreakIterator +r=A.bf(B.a1N) +if(r==null)r=t.K.a(r) +return A.bbR(s,[[],r])}, +avg(a,b){var s +if(b.k(0,B.h))return a +s=new A.cL(new Float32Array(16)) +s.v(a) +s.aJ(0,b.a,b.b) +return s}, +btG(a,b,c){var s=a.aZp() +if(c!=null)A.biI(s,A.avg(c,b).a) +return s}, +bcZ(){var s=0,r=A.r(t.H) +var $async$bcZ=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:if(!$.bhW){$.bhW=!0 +self.window.requestAnimationFrame(t.L.a(A.cd(new A.bd0())))}return A.p(null,r)}}) +return A.q($async$bcZ,r)}, +bFg(a,b){var s=t.S,r=A.e5(null,t.H),q=A.b(["Roboto"],t.T) +s=new A.aEK(a,A.C(s),A.C(s),b,B.b.p0(b,new A.aEL()),B.b.p0(b,new A.aEM()),B.b.p0(b,new A.aEN()),B.b.p0(b,new A.aEO()),B.b.p0(b,new A.aEP()),B.b.p0(b,new A.aEQ()),r,q,A.C(s)) +q=t.Te +s.b=new A.a3t(s,A.C(q),A.D(t.N,q)) +return s}, +bNR(a,b,c){var s,r,q,p,o,n,m,l=A.b([],t.t),k=A.b([],c.h("v<0>")) +for(s=a.length,r=0,q=0,p=1,o=0;o"))}, +av_(a){return A.bSH(a)}, +bSH(a){var s=0,r=A.r(t.jV),q,p,o,n,m,l +var $async$av_=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:n={} +l=t.Lk +s=3 +return A.x(A.Db(a.FR("FontManifest.json")),$async$av_) +case 3:m=l.a(c) +if(!m.gLa()){$.fK().$1("Font manifest does not exist at `"+m.a+"` - ignoring.") +q=new A.Nj(A.b([],t.z8)) +s=1 +break}p=B.tj.an5(B.x1,t.X) +n.a=null +o=p.kh(new A.apJ(new A.bca(n),[],t.kS)) +s=4 +return A.x(m.gzM().Fb(0,new A.bcb(o),t.zd),$async$av_) +case 4:o.T(0) +n=n.a +if(n==null)throw A.d(A.kg(u.u)) +n=J.mU(t.j.a(n),new A.bcc(),t.BK) +q=new A.Nj(A.ab(n,!0,n.$ti.h("aI.E"))) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$av_,r)}, +bFf(a,b){return new A.Ng()}, +F3(){return B.c.aw(self.window.performance.now()*1000)}, +bkH(a,b,c){var s,r,q,p,o,n,m,l=A.c8(self.document,"flt-canvas"),k=A.b([],t.A) +$.cF() +s=self.window.devicePixelRatio +if(s===0)s=1 +r=a.a +q=a.c-r +p=A.axn(q) +o=a.b +n=a.d-o +m=A.axm(n) +n=new A.ayj(A.axn(q),A.axm(n),c,A.b([],t.vj),A.fu()) +s=new A.qI(a,l,n,k,p,m,s,c,b) +A.M(l.style,"position","absolute") +s.z=B.c.bK(r)-1 +s.Q=B.c.bK(o)-1 +s.aab() +n.z=l +s.a8l() +return s}, +axn(a){var s +$.cF() +s=self.window.devicePixelRatio +if(s===0)s=1 +return B.c.d0((a+1)*s)+2}, +axm(a){var s +$.cF() +s=self.window.devicePixelRatio +if(s===0)s=1 +return B.c.d0((a+1)*s)+2}, +bCa(a){a.remove()}, +bbL(a){if(a==null)return null +switch(a.a){case 3:return"source-over" +case 5:return"source-in" +case 7:return"source-out" +case 9:return"source-atop" +case 4:return"destination-over" +case 6:return"destination-in" +case 8:return"destination-out" +case 10:return"destination-atop" +case 12:return"lighten" +case 1:return"copy" +case 11:return"xor" +case 24:case 13:return"multiply" +case 14:return"screen" +case 15:return"overlay" +case 16:return"darken" +case 17:return"lighten" +case 18:return"color-dodge" +case 19:return"color-burn" +case 20:return"hard-light" +case 21:return"soft-light" +case 22:return"difference" +case 23:return"exclusion" +case 25:return"hue" +case 26:return"saturation" +case 27:return"color" +case 28:return"luminosity" +default:throw A.d(A.d_("Flutter Web does not support the blend mode: "+a.j(0)))}}, +bti(a){switch(a.a){case 0:return B.a8Z +case 3:return B.a9_ +case 5:return B.a90 +case 7:return B.a92 +case 9:return B.a93 +case 4:return B.a94 +case 6:return B.a95 +case 8:return B.a96 +case 10:return B.a97 +case 12:return B.a98 +case 1:return B.a99 +case 11:return B.a91 +case 24:case 13:return B.a9i +case 14:return B.a9j +case 15:return B.a9m +case 16:return B.a9k +case 17:return B.a9l +case 18:return B.a9n +case 19:return B.a9o +case 20:return B.a9p +case 21:return B.a9b +case 22:return B.a9c +case 23:return B.a9d +case 25:return B.a9e +case 26:return B.a9f +case 27:return B.a9g +case 28:return B.a9h +default:return B.a9a}}, +buJ(a){if(a==null)return null +switch(a.a){case 0:return"butt" +case 1:return"round" +case 2:default:return"square"}}, +bVK(a){switch(a.a){case 1:return"round" +case 2:return"bevel" +case 0:default:return"miter"}}, +bhS(a4,a5,a6,a7){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=t.A,a2=A.b([],a1),a3=a4.length +for(s=null,r=null,q=0;q>>16&255)/255,0,0,0,0,(r>>>8&255)/255,0,0,0,0,(r&255)/255,0,0,0,1,0],t.n),"recolor") +s.Gh("recolor",m,1,0,0,0,6,n) +q=s.cY() +break +case 15:r=A.bti(B.mv) +r.toString +q=A.bsc(a,r,!0) +break +case 26:case 18:case 19:case 25:case 27:case 28:case 24:case 14:case 16:case 17:case 20:case 21:case 22:case 23:r=A.bti(b) +r.toString +q=A.bsc(a,r,!1) +break +case 1:case 2:case 6:case 8:case 4:case 0:case 3:throw A.d(A.d_("Blend mode not supported in HTML renderer: "+b.j(0))) +default:q=null}return q}, +BY(){var s,r=A.aBM($.bk0(),!1),q=self.document.createElementNS("http://www.w3.org/2000/svg","filter"),p=$.bq0+1 +$.bq0=p +p="_fcf"+p +q.id=p +s=q.filterUnits +s.toString +A.aQR(s,2) +s=q.x.baseVal +s.toString +A.aQT(s,"0%") +s=q.y.baseVal +s.toString +A.aQT(s,"0%") +s=q.width.baseVal +s.toString +A.aQT(s,"100%") +s=q.height.baseVal +s.toString +A.aQT(s,"100%") +return new A.aUw(p,r,q)}, +bVS(a){var s=A.BY() +s.NZ(a,"comp") +return s.cY()}, +bsc(a,b,c){var s="flood",r="SourceGraphic",q=A.BY(),p=A.eX(a.a) +q.wT(p,"1",s) +p=b.b +if(c)q.a02(r,s,p) +else q.a02(s,r,p) +return q.cY()}, +Za(a,b){var s=Math.min(a.gae(a),a.gaH(a)),r=Math.min(a.gaj(a),a.gaQ(a)),q=Math.abs(a.gaH(a)-a.gae(a)),p=Math.abs(a.gaQ(a)-a.gaj(a)),o=b.b,n=b.c +if(n==null)n=0 +if(o===B.u&&n>0){o=n/2 +s-=o +r-=o +q=Math.max(0,q-n) +p=Math.max(0,p-n)}if(s!==a.gae(a)||r!==a.gaj(a)||q!==a.gaH(a)-a.gae(a)||p!==a.gaQ(a)-a.gaj(a))return new A.A(s,r,s+q,r+p) +return a}, +Zb(a,b,c,d){var s,r,q,p,o,n,m,l=A.c8(self.document,c),k=b.b===B.u,j=b.c +if(j==null)j=0 +if(d.Ek(0))s="translate("+A.j(a.gae(a))+"px, "+A.j(a.gaj(a))+"px)" +else{r=new Float32Array(16) +q=new A.cL(r) +q.v(d) +q.aJ(0,a.gae(a),a.gaj(a)) +s=A.nN(r)}p=l.style +A.M(p,"position","absolute") +A.M(p,"transform-origin","0 0 0") +A.M(p,"transform",s) +o=A.eX(b.r) +r=b.x +if(r!=null){n=r.b +r=$.eb() +if(r===B.au&&!k){A.M(p,"box-shadow","0px 0px "+A.j(n*2)+"px "+o) +r=b.r +o=A.eX(((B.c.ai((1-Math.min(Math.sqrt(n)/6.283185307179586,1))*(r>>>24&255))&255)<<24|r&16777215)>>>0)}else A.M(p,"filter","blur("+A.j(n)+"px)")}A.M(p,"width",A.j(a.gaH(a)-a.gae(a))+"px") +A.M(p,"height",A.j(a.gaQ(a)-a.gaj(a))+"px") +if(k)A.M(p,"border",A.ua(j)+" solid "+o) +else{A.M(p,"background-color",o) +m=A.bPh(b.w,a) +A.M(p,"background-image",m!==""?"url('"+m+"'":"")}return l}, +bPh(a,b){var s +if(a!=null){if(a instanceof A.z0){s=A.aBJ(a.e.a) +return s==null?"":s}if(a instanceof A.EM)return A.cE(a.vu(b,1,!0))}return""}, +btg(a,b){var s,r,q=b.e,p=b.r +if(q===p){s=b.z +if(q===s){r=b.x +s=q===r&&q===b.f&&p===b.w&&s===b.Q&&r===b.y}else s=!1}else s=!1 +if(s){A.M(a,"border-radius",A.ua(b.z)) +return}A.M(a,"border-top-left-radius",A.ua(q)+" "+A.ua(b.f)) +A.M(a,"border-top-right-radius",A.ua(p)+" "+A.ua(b.w)) +A.M(a,"border-bottom-left-radius",A.ua(b.z)+" "+A.ua(b.Q)) +A.M(a,"border-bottom-right-radius",A.ua(b.x)+" "+A.ua(b.y))}, +ua(a){return B.c.b8(a===0?1:a,3)+"px"}, +beh(a,b,c){var s,r,q,p,o,n,m +if(0===b){c.push(new A.i(a.c,a.d)) +c.push(new A.i(a.e,a.f)) +return}s=new A.agP() +a.a2N(s) +r=s.a +r.toString +q=s.b +q.toString +p=a.b +o=a.f +if(A.hV(p,a.d,o)){n=r.f +if(!A.hV(p,n,o))m=r.f=q.b=Math.abs(n-p)0){s=b[7] +b[9]=s +b[5]=s +if(o===2){s=b[13] +b[15]=s +b[11]=s}}return o}, +bOz(b0,b1,b2){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.length +if(0===a9)for(s=0;s<8;++s)b2[s]=b1[s] +else{r=b0[0] +for(q=a9-1,p=0,s=0;s0))return 0 +s=1 +r=0}q=h-i +p=g-h +o=f-g +do{n=(r+s)/2 +m=i+q*n +l=h+p*n +k=m+(l-m)*n +j=k+(l+(g+o*n-l)*n-k)*n +if(j===0)return n +if(j<0)s=n +else r=n}while(Math.abs(r-s)>0.0000152587890625) +return(s+r)/2}, +btJ(a,b,c,d,e){return(((d+3*(b-c)-a)*e+3*(c-b-b+a))*e+3*(b-a))*e+a}, +bRy(b1,b2,b3,b4){var s,r,q,p,o,n,m,l=b1[7],k=b1[0],j=b1[1],i=b1[2],h=b1[3],g=b1[4],f=b1[5],e=b1[6],d=b2===0,c=!d?b2:b3,b=1-c,a=k*b+i*c,a0=j*b+h*c,a1=i*b+g*c,a2=h*b+f*c,a3=g*b+e*c,a4=f*b+l*c,a5=a*b+a1*c,a6=a0*b+a2*c,a7=a1*b+a3*c,a8=a2*b+a4*c,a9=a5*b+a7*c,b0=a6*b+a8*c +if(d){b4[0]=k +b4[1]=j +b4[2]=a +b4[3]=a0 +b4[4]=a5 +b4[5]=a6 +b4[6]=a9 +b4[7]=b0 +return}if(b3===1){b4[0]=a9 +b4[1]=b0 +b4[2]=a7 +b4[3]=a8 +b4[4]=a3 +b4[5]=a4 +b4[6]=e +b4[7]=l +return}s=(b3-b2)/(1-b2) +d=1-s +r=a9*d+a7*s +q=b0*d+a8*s +p=a7*d+a3*s +o=a8*d+a4*s +n=r*d+p*s +m=q*d+o*s +b4[0]=a9 +b4[1]=b0 +b4[2]=r +b4[3]=q +b4[4]=n +b4[5]=m +b4[6]=n*d+(p*d+(a3*d+e*s)*s)*s +b4[7]=m*d+(o*d+(a4*d+l*s)*s)*s}, +bgR(){var s=new A.wE(A.bgc(),B.bX) +s.a7F() +return s}, +bpY(a){var s,r,q=A.bgc(),p=a.a,o=p.w,n=p.d,m=p.z +q.Q=!0 +q.cx=0 +q.x5() +q.Ih(n) +q.Ii(o) +q.Ig(m) +B.L.jC(q.r,0,p.r) +B.eF.jC(q.f,0,p.f) +s=p.y +if(s==null)q.y=null +else{r=q.y +r.toString +B.eF.jC(r,0,s)}s=p.Q +q.Q=s +if(!s){q.a=p.a +q.b=p.b +q.as=p.as}q.cx=p.cx +q.at=p.at +q.ax=p.ax +q.ay=p.ay +q.ch=p.ch +q.CW=p.CW +q=new A.wE(q,B.bX) +q.PS(a) +return q}, +bOg(a,b,c){var s +if(0===c)s=0===b||360===b +else s=!1 +if(s)return new A.i(a.c,a.gbC().b) +return null}, +b8Q(a,b,c,d){var s=a+b +if(s<=c)return d +return Math.min(c/s,d)}, +bgb(a,b){var s=new A.aNn(a,b,a.w) +if(a.Q)a.PF() +if(!a.as)s.z=a.w +return s}, +bNi(a,b,c,d,e,f,g,h){if(Math.abs(a*2/3+g/3-c)>0.5)return!0 +if(Math.abs(b*2/3+h/3-d)>0.5)return!0 +if(Math.abs(a/3+g*2/3-e)>0.5)return!0 +if(Math.abs(b/3+h*2/3-f)>0.5)return!0 +return!1}, +bhw(a,b,c,a0,a1,a2,a3,a4,a5,a6,a7,a8){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d +if(B.f.dU(a7-a6,10)!==0&&A.bNi(a,b,c,a0,a1,a2,a3,a4)){s=(a+c)/2 +r=(b+a0)/2 +q=(c+a1)/2 +p=(a0+a2)/2 +o=(a1+a3)/2 +n=(a2+a4)/2 +m=(s+q)/2 +l=(r+p)/2 +k=(q+o)/2 +j=(p+n)/2 +i=(m+k)/2 +h=(l+j)/2 +g=a6+a7>>>1 +a5=A.bhw(i,h,k,j,o,n,a3,a4,A.bhw(a,b,s,r,m,l,i,h,a5,a6,g,a8),g,a7,a8)}else{f=a-a3 +e=b-a4 +d=a5+Math.sqrt(f*f+e*e) +if(d>a5)a8.push(new A.JE(4,d,A.b([a,b,c,a0,a1,a2,a3,a4],t.n))) +a5=d}return a5}, +bNj(a,b,c,d,e,f){if(Math.abs(c/2-(a+e)/4)>0.5)return!0 +if(Math.abs(d/2-(b+f)/4)>0.5)return!0 +return!1}, +auR(a,b){var s=Math.sqrt(a*a+b*b) +return s<1e-9?B.h:new A.i(a/s,b/s)}, +bOA(a,a0,a1,a2){var s,r,q,p=a[5],o=a[0],n=a[1],m=a[2],l=a[3],k=a[4],j=a0===0,i=!j?a0:a1,h=1-i,g=o*h+m*i,f=n*h+l*i,e=m*h+k*i,d=l*h+p*i,c=g*h+e*i,b=f*h+d*i +if(j){a2[0]=o +a2[1]=n +a2[2]=g +a2[3]=f +a2[4]=c +a2[5]=b +return}if(a1===1){a2[0]=c +a2[1]=b +a2[2]=e +a2[3]=d +a2[4]=k +a2[5]=p +return}s=(a1-a0)/(1-a0) +j=1-s +r=c*j+e*s +q=b*j+d*s +a2[0]=c +a2[1]=b +a2[2]=r +a2[3]=q +a2[4]=r*j+(e*j+k*s)*s +a2[5]=q*j+(d*j+p*s)*s}, +bgc(){var s=new Float32Array(16) +s=new A.GE(s,new Uint8Array(8)) +s.e=s.c=8 +s.CW=172 +return s}, +boD(a){var s,r=new A.GE(a.f,a.r) +r.e=a.e +r.w=a.w +r.c=a.c +r.d=a.d +r.x=a.x +r.z=a.z +r.y=a.y +s=a.Q +r.Q=s +if(!s){r.a=a.a +r.b=a.b +r.as=a.as}r.cx=a.cx +r.at=a.at +r.ax=a.ax +r.ay=a.ay +r.ch=a.ch +r.CW=a.CW +return r}, +bI_(a,b,c){var s,r,q=a.d,p=a.c,o=new Float32Array(p*2),n=a.f,m=q*2 +for(s=0;s0?1:0 +return s}, +avh(a,b){var s +if(a<0){a=-a +b=-b}if(b===0||a===0||a>=b)return null +s=a/b +if(isNaN(s))return null +if(s===0)return null +return s}, +bTw(a){var s,r,q=a.e,p=a.r +if(q+p!==a.c-a.a)return!1 +s=a.f +r=a.w +if(s+r!==a.d-a.b)return!1 +if(q!==a.z||p!==a.x||s!==a.Q||r!==a.y)return!1 +return!0}, +bgI(a,b,c,d,e,f){return new A.aSX(e-2*c+a,f-2*d+b,2*(c-a),2*(d-b),a,b)}, +aNp(a,b,c,d,e,f){if(d===f)return A.hV(c,a,e)&&a!==e +else return a===c&&b===d}, +bI1(a){var s,r,q,p,o=a[0],n=a[1],m=a[2],l=a[3],k=a[4],j=a[5],i=n-l,h=A.avh(i,i-l+j) +if(h!=null){s=o+h*(m-o) +r=n+h*(l-n) +q=m+h*(k-m) +p=l+h*(j-l) +a[2]=s +a[3]=r +a[4]=s+h*(q-s) +a[5]=r+h*(p-r) +a[6]=q +a[7]=p +a[8]=k +a[9]=j +return 1}a[3]=Math.abs(i)=q}, +bVX(a,b,c,d){var s,r,q,p,o=a[1],n=a[3] +if(!A.hV(o,c,n))return +s=a[0] +r=a[2] +if(!A.hV(s,b,r))return +q=r-s +p=n-o +if(!(Math.abs((b-s)*p-q*(c-o))<0.000244140625))return +d.push(new A.i(q,p))}, +bVY(a,b,c,d){var s,r,q,p,o,n,m,l,k,j,i=a[1],h=a[3],g=a[5] +if(!A.hV(i,c,h)&&!A.hV(h,c,g))return +s=a[0] +r=a[2] +q=a[4] +if(!A.hV(s,b,r)&&!A.hV(r,b,q))return +p=new A.tf() +o=p.tQ(i-2*h+g,2*(h-i),i-c) +for(n=q-2*r+s,m=2*(r-s),l=0;l30)B.b.di($.ue,0).d.t()}else a.d.t()}}, +aNv(a,b){if(a<=0)return b*0.1 +else return Math.min(Math.max(b*0.5,a*10),b)}, +bOI(a7,a8,a9){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 +if(a7!=null){s=a7.a +s=s[15]===1&&s[0]===1&&s[1]===0&&s[2]===0&&s[3]===0&&s[4]===0&&s[5]===1&&s[6]===0&&s[7]===0&&s[8]===0&&s[9]===0&&s[10]===1&&s[11]===0}else s=!0 +if(s)return 1 +r=a7.a +s=r[12] +q=r[15] +p=s*q +o=r[13] +n=o*q +m=r[3] +l=m*a8 +k=r[7] +j=k*a9 +i=1/(l+j+q) +h=r[0] +g=h*a8 +f=r[4] +e=f*a9 +d=(g+e+s)*i +c=r[1] +b=c*a8 +a=r[5] +a0=a*a9 +a1=(b+a0+o)*i +a2=Math.min(p,d) +a3=Math.max(p,d) +a4=Math.min(n,a1) +a5=Math.max(n,a1) +i=1/(m*0+j+q) +d=(h*0+e+s)*i +a1=(c*0+a0+o)*i +p=Math.min(a2,d) +a3=Math.max(a3,d) +n=Math.min(a4,a1) +a5=Math.max(a5,a1) +i=1/(l+k*0+q) +d=(g+f*0+s)*i +a1=(b+a*0+o)*i +p=Math.min(p,d) +a3=Math.max(a3,d) +n=Math.min(n,a1) +a6=Math.min((a3-p)/a8,(Math.max(a5,a1)-n)/a9) +if(a6<1e-9||a6===1)return 1 +if(a6>1){a6=Math.min(4,B.c.d0(a6/2)*2) +s=a8*a9 +if(s*a6*a6>4194304&&a6>2)a6=3355443.2/s}else a6=Math.max(2/B.c.bK(2/a6),0.0001) +return a6}, +D5(a){var s,r=a.a,q=r.x,p=q!=null?0+q.b*2:0 +r=r.c +s=r==null +if((s?0:r)!==0)p+=(s?0:r)*0.70710678118 +return p}, +bOJ(a9,b0){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=J.al(a9),a6=a5.i(a9,0),a7=a5.i(a9,1),a8=a5.gF(a9) +for(s=a7,r=a6,q=2;q>>16&255)/255 +l[1]=(h.gm(h)>>>8&255)/255 +l[2]=(h.gm(h)&255)/255 +l[3]=(h.gm(h)>>>24&255)/255 +i[0]=0 +g=4 +f=1}else{g=0 +f=0}for(j=a3.length,e=0;e>>16&255)/255 +g=d+1 +l[d]=(c.gm(h)>>>8&255)/255 +d=g+1 +l[g]=(c.gm(h)&255)/255 +g=d+1 +l[d]=(c.gm(h)>>>24&255)/255}for(q=q.gar(a4);q.H();f=b){b=f+1 +i[f]=q.ga1(q)}if(o){h=B.b.ga_(a3) +d=g+1 +l[g]=(h.gm(h)>>>16&255)/255 +g=d+1 +l[d]=(h.gm(h)>>>8&255)/255 +l[g]=(h.gm(h)&255)/255 +l[g+1]=(h.gm(h)>>>24&255)/255 +i[f]=1}a=4*m +for(a0=0;a0>>2 +k[a0]=(l[a0+4]-l[a0])/(i[f+1]-i[f])}k[a]=0 +k[a+1]=0 +k[a+2]=0 +k[a+3]=0 +for(a0=0;a0 1.0) {") +m.push(" "+a.gtT().a+" = vec4(0, 0, 0, 0);") +m.push(" return;") +m.push("}")}return o}, +bS0(a){var s,r +if(a==null)return null +switch(a.d.a){case 0:s=a.a +if(s==null||a.b==null)return null +s.toString +r=a.b +r.toString +return new A.OW(s,r) +case 1:s=a.c +if(s==null)return null +return new A.OQ(s) +case 2:throw A.d(A.d_("ColorFilter.linearToSrgbGamma not implemented for HTML renderer")) +case 3:throw A.d(A.d_("ColorFilter.srgbToLinearGamma not implemented for HTML renderer.")) +default:throw A.d(A.ad("Unknown mode "+a.j(0)+".type for ColorFilter."))}}, +bpy(a){return new A.abm(A.b([],t.zz),A.b([],t.fe),a===2,!1,new A.d8(""))}, +RO(a){return new A.abm(A.b([],t.zz),A.b([],t.fe),a===2,!0,new A.d8(""))}, +bJR(a){switch(a){case 0:return"bool" +case 1:return"int" +case 2:return"float" +case 3:return"bvec2" +case 4:return"bvec3" +case 5:return"bvec4" +case 6:return"ivec2" +case 7:return"ivec3" +case 8:return"ivec4" +case 9:return"vec2" +case 10:return"vec3" +case 11:return"vec4" +case 12:return"mat2" +case 13:return"mat3" +case 14:return"mat4" +case 15:return"sampler1D" +case 16:return"sampler2D" +case 17:return"sampler3D" +case 18:return"void"}throw A.d(A.c3(null,null))}, +aXh(){var s,r=$.bqN +if(r==null){r=$.eF +s=A.bpy(r==null?$.eF=A.kY():r) +s.qL(11,"position") +s.qL(11,"color") +s.h0(14,"u_ctransform") +s.h0(11,"u_scale") +s.h0(11,"u_shift") +s.aaW(11,"v_color") +r=A.b([],t.T) +s.c.push(new A.oB("main",r)) +r.push(u.y) +r.push("v_color = color.zyxw;") +r=$.bqN=s.cY()}return r}, +bqP(){var s,r=$.bqO +if(r==null){r=$.eF +s=A.bpy(r==null?$.eF=A.kY():r) +s.qL(11,"position") +s.h0(14,"u_ctransform") +s.h0(11,"u_scale") +s.h0(11,"u_textransform") +s.h0(11,"u_shift") +s.aaW(9,"v_texcoord") +r=A.b([],t.T) +s.c.push(new A.oB("main",r)) +r.push(u.y) +r.push("v_texcoord = vec2((u_textransform.z + position.x) * u_textransform.x, ((u_textransform.w + position.y) * u_textransform.y));") +r=$.bqO=s.cY()}return r}, +bmM(a,b,c){var s,r,q,p="texture2D",o=$.eF,n=A.RO(o==null?$.eF=A.kY():o) +n.e=1 +n.qL(9,"v_texcoord") +n.h0(16,"u_texture") +o=A.b([],t.T) +s=new A.oB("main",o) +n.c.push(s) +if(!a)r=b===B.N&&c===B.N +else r=!0 +if(r){r=n.gtT() +q=n.y?"texture":p +o.push(r.a+" = "+q+"(u_texture, v_texcoord);")}else{s.ab0("v_texcoord.x","u",b) +s.ab0("v_texcoord.y","v",c) +o.push("vec2 uv = vec2(u, v);") +r=n.gtT() +q=n.y?"texture":p +o.push(r.a+" = "+q+"(u_texture, uv);")}return n.cY()}, +bRD(a){var s,r,q,p=$.bcQ,o=p.length +if(o!==0)try{if(o>1)B.b.i1(p,new A.bbT()) +for(p=$.bcQ,o=p.length,r=0;r=s.gF(a))return!1 +if(s.i(a,n)!==o.charCodeAt(p))continue $label0$0}return!0}return!1}, +bUP(a){$.ud.push(a)}, +bcq(a){return A.bTf(a)}, +bTf(a){var s=0,r=A.r(t.H),q,p,o,n +var $async$bcq=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:n={} +if($.Z7!==B.vO){s=1 +break}$.Z7=B.T6 +p=A.hh() +if(a!=null)p.b=a +A.bUO("ext.flutter.disassemble",new A.bcs()) +n.a=!1 +$.buC=new A.bct(n) +n=A.hh().b +if(n==null)n=null +else{n=n.assetBase +if(n==null)n=null}o=new A.awt(n) +A.bQk(o) +s=3 +return A.x(A.f2(A.b([new A.bcu().$0(),A.auO()],t.mo),t.H),$async$bcq) +case 3:$.Z7=B.vP +case 1:return A.p(q,r)}}) +return A.q($async$bcq,r)}, +biv(){var s=0,r=A.r(t.H),q,p,o,n +var $async$biv=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:if($.Z7!==B.vP){s=1 +break}$.Z7=B.T7 +p=$.hj() +if($.a9G==null)$.a9G=A.bIX(p===B.cZ) +if($.bfx==null)$.bfx=A.bGn() +p=A.hh().b +if(p==null)p=null +else{p=p.multiViewEnabled +if(p==null)p=null}if(p!==!0){p=A.hh().b +p=p==null?null:p.hostElement +if($.nK==null){o=$.bF() +n=new A.EL(A.e5(null,t.H),0,o,A.bmv(p),null,B.fX,A.blB(p)) +n.a1J(0,o,p,null) +$.nK=n +p=o.geV() +o=$.nK +o.toString +p.aYq(o)}p=$.nK +p.toString +if($.G() instanceof A.a4Z)A.bSy(p)}$.Z7=B.T8 +case 1:return A.p(q,r)}}) +return A.q($async$biv,r)}, +bQk(a){if(a===$.Kc)return +$.Kc=a}, +auO(){var s=0,r=A.r(t.H),q,p,o +var $async$auO=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:p=$.G() +p.gzj().af(0) +q=$.Kc +s=q!=null?2:3 +break +case 2:p=p.gzj() +q=$.Kc +q.toString +o=p +s=5 +return A.x(A.av_(q),$async$auO) +case 5:s=4 +return A.x(o.rm(b),$async$auO) +case 4:case 3:return A.p(null,r)}}) +return A.q($async$auO,r)}, +bF4(a,b){var s=t.L +return t.e.a({addView:s.a(A.cd(a)),removeView:s.a(A.cd(new A.aEl(b)))})}, +bF6(a,b){var s=t.L +return t.e.a({initializeEngine:s.a(A.cd(new A.aEn(b))),autoStart:s.a(A.cd(new A.aEo(a)))})}, +bF3(a){return t.e.a({runApp:t.L.a(A.cd(new A.aEk(a)))})}, +bir(a,b){var s=t.L.a(A.cd(new A.bch(a,b))) +return new self.Promise(s)}, +bhV(a){var s=B.c.aw(a) +return A.dE(B.c.aw((a-s)*1000),s)}, +bOn(a,b){var s={} +s.a=null +return new A.b8G(s,a,b)}, +bGn(){var s=new A.a5T(A.D(t.N,t.e)) +s.asz() +return s}, +bGp(a){switch(a.a){case 0:case 4:return new A.Ov(A.biQ("M,2\u201ew\u2211wa2\u03a9q\u2021qb2\u02dbx\u2248xc3 c\xd4j\u2206jd2\xfee\xb4ef2\xfeu\xa8ug2\xfe\xff\u02c6ih3 h\xce\xff\u2202di3 i\xc7c\xe7cj2\xd3h\u02d9hk2\u02c7\xff\u2020tl5 l@l\xfe\xff|l\u02dcnm1~mn3 n\u0131\xff\u222bbo2\xaer\u2030rp2\xacl\xd2lq2\xc6a\xe6ar3 r\u03c0p\u220fps3 s\xd8o\xf8ot2\xa5y\xc1yu3 u\xa9g\u02ddgv2\u02dak\uf8ffkw2\xc2z\xc5zx2\u0152q\u0153qy5 y\xcff\u0192f\u02c7z\u03a9zz5 z\xa5y\u2021y\u2039\xff\u203aw.2\u221av\u25cav;4\xb5m\xcds\xd3m\xdfs/2\xb8z\u03a9z")) +case 3:return new A.Ov(A.biQ(';b1{bc1&cf1[fg1]gm2y')) +case 1:case 2:case 5:return new A.Ov(A.biQ("8a2@q\u03a9qk1&kq3@q\xc6a\xe6aw2xy2\xa5\xff\u2190\xffz51)s.push(new A.rH(B.b.ga9(o),B.b.ga_(o))) +else s.push(new A.rH(p,null))}return s}, +bPp(a,b){var s=a.n1(b),r=A.nM(A.cE(s.b)) +switch(s.a){case"setDevicePixelRatio":$.cF().d=r +$.bF().w.$0() +return!0}return!1}, +uj(a,b){if(a==null)return +if(b===$.aK)a.$0() +else b.Ft(a)}, +uk(a,b,c,d){if(a==null)return +if(b===$.aK)a.$1(c) +else b.Fu(a,c,d)}, +bTn(a,b,c,d){if(b===$.aK)a.$2(c,d) +else b.Ft(new A.bcy(a,c,d))}, +bSK(){var s,r,q,p=self.document.documentElement +p.toString +if("computedStyleMap" in p){s=p.computedStyleMap() +if(s!=null){r=s.get("font-size") +q=r!=null?r.value:null}else q=null}else q=null +if(q==null)q=A.buk(A.beH(self.window,p).getPropertyValue("font-size")) +return(q==null?16:q)/16}, +bsq(a,b){var s +b.toString +t.pE.a(b) +s=A.c8(self.document,A.cE(J.bG(b,"tagName"))) +A.M(s.style,"width","100%") +A.M(s.style,"height","100%") +return s}, +bRO(a){switch(a){case 0:return 1 +case 1:return 4 +case 2:return 2 +default:return B.f.nT(1,a)}}, +bIc(a){var s,r=$.bfx +r=r==null?null:r.gPR() +r=new A.aNT(a,new A.aNU(),r) +s=$.eb() +if(s===B.au){s=$.hj() +s=s===B.bx}else s=!1 +if(s){s=$.bwT() +r.a=s +s.b_m()}r.f=r.avs() +return r}, +brr(a,b,c,d){var s,r,q=t.L.a(A.cd(b)) +if(c==null)A.dc(d,a,q,null) +else{s=t.K +r=A.bf(A.b3(["passive",c],t.N,s)) +A.a3(d,"addEventListener",[a,q,r==null?s.a(r):r])}A.dc(d,a,q,null) +return new A.al_(a,d,q)}, +TT(a){var s=B.c.aw(a) +return A.dE(B.c.aw((a-s)*1000),s)}, +btr(a,b){var s,r,q,p,o=b.ghv().a,n=$.dd +if((n==null?$.dd=A.hQ():n).a&&a.offsetX===0&&a.offsetY===0)return A.bOH(a,o) +n=b.ghv() +s=a.target +s.toString +if(n.e.contains(s)){n=$.Zw() +r=n.glQ().w +if(r!=null){a.target.toString +n.glQ().c.toString +q=new A.cL(r.c).F_(a.offsetX,a.offsetY,0) +return new A.i(q.a,q.b)}}if(!J.f(a.target,o)){p=o.getBoundingClientRect() +return new A.i(a.clientX-p.x,a.clientY-p.y)}return new A.i(a.offsetX,a.offsetY)}, +bOH(a,b){var s,r,q=a.clientX,p=a.clientY +for(s=b;s.offsetParent!=null;s=r){q-=s.offsetLeft-s.scrollLeft +p-=s.offsetTop-s.scrollTop +r=s.offsetParent +r.toString}return new A.i(q,p)}, +bda(a,b){var s=b.$0() +return s}, +bIX(a){var s=new A.aOK(A.D(t.N,t.qe),a) +s.asI(a) +return s}, +bPW(a){}, +bis(a,b){return a[b]}, +buk(a){var s=self.window.parseFloat(a) +if(s==null||isNaN(s))return null +return s}, +bUf(a){var s,r,q +if("computedStyleMap" in a){s=a.computedStyleMap() +if(s!=null){r=s.get("font-size") +q=r!=null?r.value:null}else q=null}else q=null +return q==null?A.buk(A.beH(self.window,a).getPropertyValue("font-size")):q}, +bWs(a,b){var s,r=self.document.createElement("CANVAS") +if(r==null)return null +try{A.yP(r,a) +A.yO(r,b)}catch(s){return null}return r}, +bfd(a){var s,r,q,p="premultipliedAlpha" +if(A.bg0()){s=a.a +s.toString +r=t.N +q=A.aBN(s,"webgl2",A.b3([p,!1],r,t.z)) +q.toString +q=new A.a4o(q) +$.aG5.b=A.D(r,t.eS) +q.dy=s +s=q}else{s=a.b +s.toString +r=$.eF +r=(r==null?$.eF=A.kY():r)===1?"webgl":"webgl2" +q=t.N +r=A.lZ(s,r,A.b3([p,!1],q,t.z)) +r.toString +r=new A.a4o(r) +$.aG5.b=A.D(q,t.eS) +r.dy=s +s=r}return s}, +buH(a,b,c,d,e,f,g){var s,r="uniform4f",q=b.a,p=a.jA(0,q,"u_ctransform"),o=new Float32Array(16),n=new A.cL(o) +n.v(g) +n.aJ(0,-c,-d) +s=a.a +A.a3(s,"uniformMatrix4fv",[p,!1,o]) +A.a3(s,r,[a.jA(0,q,"u_scale"),2/e,-2/f,1,1]) +A.a3(s,r,[a.jA(0,q,"u_shift"),-1,1,0,0])}, +btl(a,b,c){var s,r,q,p,o="bufferData" +if(c===1){s=a.gtW() +A.a3(a.a,o,[a.glC(),b,s])}else{s=J.al(b) +r=s.gF(b) +q=new Float32Array(r) +for(p=0;p")).cj(0," ") +return r.length!==0?r:null}, +a9j(a,b){var s,r +A.M(a.style,"position","absolute") +s=b.id +r=A.bf("flt-semantic-node-"+s) +A.a3(a,"setAttribute",["id",r==null?t.K.a(r):r]) +if(s===0&&!A.hh().gK9()){A.M(a.style,"filter","opacity(0%)") +A.M(a.style,"color","rgba(0,0,0,0)")}if(A.hh().gK9())A.M(a.style,"outline","1px solid green") +return a}, +aSc(a){var s=a.style +s.removeProperty("transform-origin") +s.removeProperty("transform") +s=$.hj() +if(s!==B.bx)s=s===B.cZ +else s=!0 +if(s){s=a.style +A.M(s,"top","0px") +A.M(s,"left","0px")}else{s=a.style +s.removeProperty("top") +s.removeProperty("left")}}, +hQ(){var s=$.hj() +s=B.ru.G(0,s)?new A.aAR():new A.aKL() +return new A.aDA(new A.aDF(),new A.aS8(s),B.fj,A.b([],t.s2))}, +bEL(a){var s=t.S,r=t.UF +r=new A.aDB(a,B.rs,A.D(s,r),A.D(s,r),A.b([],t.Qo),A.b([],t.u)) +r.asr(a) +return r}, +biA(a){var s,r,q,p,o,n,m,l,k=a.length,j=t.t,i=A.b([],j),h=A.b([0],j) +for(s=0,r=0;r=h.length)h.push(r) +else h[o]=r +if(o>s)s=o}m=A.bc(s,0,!1,t.S) +l=h[s] +for(r=s-1;r>=0;--r){m[r]=l +l=i[l]}return m}, +ad1(a,b){var s=new A.ad0(B.a5H,a,b) +s.asV(a,b) +return s}, +bJK(a){var s,r=$.RG +if(r!=null)s=r.a===a +else s=!1 +if(s){r.toString +return r}return $.RG=new A.aSj(a,A.b([],t.Up),$,$,$,null)}, +bhE(a,b,c){var s,r;--c +for(;b0){k.push(new A.vz(B.es,o,n,r,p)) +r=p +o=0 +n=0}}if(o>0)l=B.dN +else l=q===s?B.dO:B.es +k.push(new A.vz(l,o,n,r,q))}if(k.length===0||B.b.ga_(k).c===B.dN)k.push(new A.vz(B.dO,0,0,s,s)) +return k}, +bOF(a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a={},a0=A.b([],t._f) +a.a=a.b=null +s=A.Zd(a1,0) +r=A.btI().zi(s) +a.c=a.d=a.e=a.f=0 +q=new A.b8P(a,a1,a0) +q.$2(B.Q,2) +p=++a.f +for(o=a1.length,n=t.jQ,m=t.S,l=t.MX,k=B.cm,j=0;p<=o;p=++a.f){a.b=a.a +a.a=r +if(s!=null&&s>65535){q.$2(B.Q,-1) +p=++a.f}s=A.Zd(a1,p) +p=$.b9k +r=(p==null?$.b9k=new A.tK(A.bi6(u.K,937,B.xF,n),B.cm,A.D(m,n),l):p).zi(s) +i=a.a +j=i===B.kb?j+1:0 +if(i===B.hH||i===B.k9){q.$2(B.dN,5) +continue}if(i===B.kd){if(r===B.hH)q.$2(B.Q,5) +else q.$2(B.dN,5) +continue}if(r===B.hH||r===B.k9||r===B.kd){q.$2(B.Q,6) +continue}p=a.f +if(p>=o)break +if(r===B.fn||r===B.ob){q.$2(B.Q,7) +continue}if(i===B.fn){q.$2(B.es,18) +continue}if(i===B.ob){q.$2(B.es,8) +continue}if(i===B.oc){q.$2(B.Q,8) +continue}h=i===B.o6 +if(!h)k=i==null?B.cm:i +if(r===B.o6||r===B.oc){if(k!==B.fn){if(k===B.kb)--j +q.$2(B.Q,9) +r=k +continue}r=B.cm}if(h){a.a=k +h=k}else h=i +if(r===B.oe||h===B.oe){q.$2(B.Q,11) +continue}if(h===B.o9){q.$2(B.Q,12) +continue}g=h!==B.fn +if(!(!g||h===B.k6||h===B.hG)&&r===B.o9){q.$2(B.Q,12) +continue}if(g)g=r===B.o8||r===B.hF||r===B.xc||r===B.k7||r===B.o7 +else g=!1 +if(g){q.$2(B.Q,13) +continue}if(h===B.hE){q.$2(B.Q,14) +continue}g=h===B.oh +if(g&&r===B.hE){q.$2(B.Q,15) +continue}f=h!==B.o8 +if((!f||h===B.hF)&&r===B.oa){q.$2(B.Q,16) +continue}if(h===B.od&&r===B.od){q.$2(B.Q,17) +continue}if(g||r===B.oh){q.$2(B.Q,19) +continue}if(h===B.og||r===B.og){q.$2(B.es,20) +continue}if(r===B.k6||r===B.hG||r===B.oa||h===B.xa){q.$2(B.Q,21) +continue}if(a.b===B.cl)g=h===B.hG||h===B.k6 +else g=!1 +if(g){q.$2(B.Q,21) +continue}g=h===B.o7 +if(g&&r===B.cl){q.$2(B.Q,21) +continue}if(r===B.xb){q.$2(B.Q,22) +continue}e=h!==B.cm +if(!((!e||h===B.cl)&&r===B.dP))if(h===B.dP)d=r===B.cm||r===B.cl +else d=!1 +else d=!0 +if(d){q.$2(B.Q,23) +continue}d=h===B.ke +if(d)c=r===B.of||r===B.ka||r===B.kc +else c=!1 +if(c){q.$2(B.Q,23) +continue}if((h===B.of||h===B.ka||h===B.kc)&&r===B.et){q.$2(B.Q,23) +continue}c=!d +if(!c||h===B.et)b=r===B.cm||r===B.cl +else b=!1 +if(b){q.$2(B.Q,24) +continue}if(!e||h===B.cl)b=r===B.ke||r===B.et +else b=!1 +if(b){q.$2(B.Q,24) +continue}if(!f||h===B.hF||h===B.dP)f=r===B.et||r===B.ke +else f=!1 +if(f){q.$2(B.Q,25) +continue}f=h!==B.et +if((!f||d)&&r===B.hE){q.$2(B.Q,25) +continue}if((!f||!c||h===B.hG||h===B.k7||h===B.dP||g)&&r===B.dP){q.$2(B.Q,25) +continue}g=h===B.k8 +if(g)f=r===B.k8||r===B.hI||r===B.hK||r===B.hL +else f=!1 +if(f){q.$2(B.Q,26) +continue}f=h!==B.hI +if(!f||h===B.hK)c=r===B.hI||r===B.hJ +else c=!1 +if(c){q.$2(B.Q,26) +continue}c=h!==B.hJ +if((!c||h===B.hL)&&r===B.hJ){q.$2(B.Q,26) +continue}if((g||!f||!c||h===B.hK||h===B.hL)&&r===B.et){q.$2(B.Q,27) +continue}if(d)g=r===B.k8||r===B.hI||r===B.hJ||r===B.hK||r===B.hL +else g=!1 +if(g){q.$2(B.Q,27) +continue}if(!e||h===B.cl)g=r===B.cm||r===B.cl +else g=!1 +if(g){q.$2(B.Q,28) +continue}if(h===B.k7)g=r===B.cm||r===B.cl +else g=!1 +if(g){q.$2(B.Q,29) +continue}if(!e||h===B.cl||h===B.dP)if(r===B.hE){g=a1.charCodeAt(p) +if(g!==9001)if(!(g>=12296&&g<=12317))g=g>=65047&&g<=65378 +else g=!0 +else g=!0 +g=!g}else g=!1 +else g=!1 +if(g){q.$2(B.Q,30) +continue}if(h===B.hF){p=a1.charCodeAt(p-1) +if(p!==9001)if(!(p>=12296&&p<=12317))p=p>=65047&&p<=65378 +else p=!0 +else p=!0 +if(!p)p=r===B.cm||r===B.cl||r===B.dP +else p=!1}else p=!1 +if(p){q.$2(B.Q,30) +continue}if(r===B.kb){if((j&1)===1)q.$2(B.Q,30) +else q.$2(B.es,30) +continue}if(h===B.ka&&r===B.kc){q.$2(B.Q,30) +continue}q.$2(B.es,31)}q.$2(B.dO,3) +return a0}, +xz(a,b,c,d,e){var s,r,q,p +if(c===d)return 0 +s=a.font +if(c===$.bsL&&d===$.bsK&&b===$.bsM&&s===$.bsJ)r=$.bsN +else{q=c===0&&d===b.length?b:B.d.am(b,c,d) +p=a.measureText(q).width +if(p==null)p=null +p.toString +r=p}$.bsL=c +$.bsK=d +$.bsM=b +$.bsJ=s +$.bsN=r +if(e==null)e=0 +return B.c.ai((e!==0?r+e*(d-c):r)*100)/100}, +bmx(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,a0,a1,a2,a3){var s=g==null,r=s?"":g +return new A.MR(b,c,d,e,f,m,k,a2,!s,r,h,i,l,j,q,a3,o,p,a0,a,n,a1)}, +bip(a){switch(a){case 0:return"100" +case 1:return"200" +case 2:return"300" +case 3:return"normal" +case 4:return"500" +case 5:return"600" +case 6:return"bold" +case 7:return"800" +case 8:return"900"}return""}, +bQl(a){var s,r,q,p,o,n,m=a.length +if(m===0)return"" +for(s=0,r="";s=48&&q<=57))s=q>=1632&&q<=1641 +else s=!0 +if(s)return B.r +r=$.bjO().zi(q) +if(r!=null)return r +return null}, +bhX(a,b){var s=A.Zd(a,b) +s.toString +if(s>=48&&s<=57)return B.jX +if(s>=1632&&s<=1641)return B.wG +switch($.bjO().zi(s)){case B.r:return B.wF +case B.ad:return B.wG +case null:case void 0:return B.nR}}, +Zd(a,b){var s,r +if(b<0||b>=a.length)return null +s=a.charCodeAt(b) +if((s&63488)===55296&&b>>6&31)+1<<16|(r&63)<<10|a.charCodeAt(b+1)&1023}return s}, +bLP(a,b,c){return new A.tK(a,b,A.D(t.S,c),c.h("tK<0>"))}, +bLQ(a,b,c,d,e){return new A.tK(A.bi6(a,b,c,e),d,A.D(t.S,e),e.h("tK<0>"))}, +bi6(a,b,c,d){var s,r,q,p,o,n=A.b([],d.h("v>")),m=a.length +for(s=d.h("eV<0>"),r=0;r=0&&q<=r))break +q+=s +if(A.bMg(b,q))break}return A.xx(q,0,r)}, +bMg(a,b){var s,r,q,p,o,n,m,l,k,j=null +if(b<=0||b>=a.length)return!0 +s=b-1 +if((a.charCodeAt(s)&63488)===55296)return!1 +r=$.Zx().KW(0,a,b) +q=$.Zx().KW(0,a,s) +if(q===B.lY&&r===B.lZ)return!1 +if(A.iu(q,B.tq,B.lY,B.lZ,j,j))return!0 +if(A.iu(r,B.tq,B.lY,B.lZ,j,j))return!0 +if(q===B.tp&&r===B.tp)return!1 +if(A.iu(r,B.iK,B.iL,B.iJ,j,j))return!1 +for(p=0;A.iu(q,B.iK,B.iL,B.iJ,j,j);){++p +s=b-p-1 +if(s<0)return!0 +o=$.Zx() +n=A.Zd(a,s) +q=n==null?o.b:o.zi(n)}if(A.iu(q,B.cL,B.bK,j,j,j)&&A.iu(r,B.cL,B.bK,j,j,j))return!1 +m=0 +do{++m +l=$.Zx().KW(0,a,b+m)}while(A.iu(l,B.iK,B.iL,B.iJ,j,j)) +do{++p +k=$.Zx().KW(0,a,b-p-1)}while(A.iu(k,B.iK,B.iL,B.iJ,j,j)) +if(A.iu(q,B.cL,B.bK,j,j,j)&&A.iu(r,B.tn,B.iI,B.h0,j,j)&&A.iu(l,B.cL,B.bK,j,j,j))return!1 +if(A.iu(k,B.cL,B.bK,j,j,j)&&A.iu(q,B.tn,B.iI,B.h0,j,j)&&A.iu(r,B.cL,B.bK,j,j,j))return!1 +s=q===B.bK +if(s&&r===B.h0)return!1 +if(s&&r===B.tm&&l===B.bK)return!1 +if(k===B.bK&&q===B.tm&&r===B.bK)return!1 +s=q===B.dv +if(s&&r===B.dv)return!1 +if(A.iu(q,B.cL,B.bK,j,j,j)&&r===B.dv)return!1 +if(s&&A.iu(r,B.cL,B.bK,j,j,j))return!1 +if(k===B.dv&&A.iu(q,B.to,B.iI,B.h0,j,j)&&r===B.dv)return!1 +if(s&&A.iu(r,B.to,B.iI,B.h0,j,j)&&l===B.dv)return!1 +if(q===B.iM&&r===B.iM)return!1 +if(A.iu(q,B.cL,B.bK,B.dv,B.iM,B.lX)&&r===B.lX)return!1 +if(q===B.lX&&A.iu(r,B.cL,B.bK,B.dv,B.iM,j))return!1 +return!0}, +iu(a,b,c,d,e,f){if(a===b)return!0 +if(a===c)return!0 +if(d!=null&&a===d)return!0 +if(e!=null&&a===e)return!0 +if(f!=null&&a===f)return!0 +return!1}, +bEI(a){switch(a){case"TextInputAction.continueAction":case"TextInputAction.next":return B.KN +case"TextInputAction.previous":return B.KY +case"TextInputAction.done":return B.Ki +case"TextInputAction.go":return B.Ku +case"TextInputAction.newline":return B.Kp +case"TextInputAction.search":return B.L5 +case"TextInputAction.send":return B.L6 +case"TextInputAction.emergencyCall":case"TextInputAction.join":case"TextInputAction.none":case"TextInputAction.route":case"TextInputAction.unspecified":default:return B.KO}}, +bmw(a,b,c){switch(a){case"TextInputType.number":return b?B.Kc:B.KQ +case"TextInputType.phone":return B.KX +case"TextInputType.emailAddress":return B.Kk +case"TextInputType.url":return B.Lm +case"TextInputType.multiline":return B.KL +case"TextInputType.none":return c?B.KM:B.KP +case"TextInputType.text":default:return B.Li}}, +bL_(a){var s +if(a==="TextCapitalization.words")s=B.GQ +else if(a==="TextCapitalization.characters")s=B.GS +else s=a==="TextCapitalization.sentences"?B.GR:B.rZ +return new A.SJ(s)}, +bOY(a){}, +auV(a,b,c,d){var s,r="transparent",q="none",p=a.style +A.M(p,"white-space","pre-wrap") +A.M(p,"align-content","center") +A.M(p,"padding","0") +A.M(p,"opacity","1") +A.M(p,"color",r) +A.M(p,"background-color",r) +A.M(p,"background",r) +A.M(p,"outline",q) +A.M(p,"border",q) +A.M(p,"resize",q) +A.M(p,"text-shadow",r) +A.M(p,"transform-origin","0 0 0") +if(b){A.M(p,"top","-9999px") +A.M(p,"left","-9999px")}if(d){A.M(p,"width","0") +A.M(p,"height","0")}if(c)A.M(p,"pointer-events",q) +s=$.eb() +if(s!==B.ec)s=s===B.au +else s=!0 +if(s)a.classList.add("transparentTextEditing") +A.M(p,"caret-color",r)}, +bEH(a6,a7){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=null +if(a6==null)return a5 +s=t.N +r=A.D(s,t.e) +q=A.D(s,t.M1) +p=A.c8(self.document,"form") +o=$.Zw().glQ() instanceof A.Rc +p.noValidate=!0 +p.method="post" +p.action="#" +A.dc(p,"submit",$.bdD(),a5) +A.auV(p,!1,o,!0) +n=J.FA(0,s) +m=A.be1(a6,B.GP) +if(a7!=null)for(s=t.a,l=J.nT(a7,s),k=A.w(l),l=new A.cR(l,l.gF(l),k.h("cR")),j=m.b,k=k.h("O.E"),i=!o,h=a5,g=!1;l.H();){f=l.d +if(f==null)f=k.a(f) +e=J.al(f) +d=s.a(e.i(f,"autofill")) +c=A.cE(e.i(f,"textCapitalization")) +if(c==="TextCapitalization.words")c=B.GQ +else if(c==="TextCapitalization.characters")c=B.GS +else c=c==="TextCapitalization.sentences"?B.GR:B.rZ +b=A.be1(d,new A.SJ(c)) +c=b.b +n.push(c) +if(c!==j){a=A.bmw(A.cE(J.bG(s.a(e.i(f,"inputType")),"name")),!1,!1).JZ() +b.a.jP(a) +b.jP(a) +A.auV(a,!1,o,i) +q.u(0,c,b) +r.u(0,c,a) +p.append(a) +if(g){h=a +g=!1}}else g=!0}else{n.push(m.b) +h=a5}B.b.kg(n) +for(s=n.length,a0=0,l="";a00?l+"*":l)+a1}a2=l.charCodeAt(0)==0?l:l +a3=$.av1.i(0,a2) +if(a3!=null)a3.remove() +a4=A.c8(self.document,"input") +A.auV(a4,!0,!1,!0) +a4.className="submitBtn" +A.aBK(a4,"submit") +p.append(a4) +return new A.aDg(p,r,q,h==null?a4:h,a2)}, +be1(a,b){var s,r=J.al(a),q=A.cE(r.i(a,"uniqueIdentifier")),p=t.kc.a(r.i(a,"hints")),o=p==null||J.kd(p)?null:A.cE(J.lR(p)),n=A.bms(t.a.a(r.i(a,"editingValue"))) +if(o!=null){s=$.bvl().a.i(0,o) +if(s==null)s=o}else s=null +return new A.a_k(n,q,s,A.eE(r.i(a,"hintText")))}, +bi3(a,b,c){var s=c.a,r=c.b,q=Math.min(s,r) +r=Math.max(s,r) +return B.d.am(a,0,q)+b+B.d.c5(a,r)}, +bL1(a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h=a3.a,g=a3.b,f=a3.c,e=a3.d,d=a3.e,c=a3.f,b=a3.r,a=a3.w,a0=new A.Ib(h,g,f,e,d,c,b,a) +d=a2==null +c=d?null:a2.b +s=c==(d?null:a2.c) +c=g.length +r=c===0 +q=r&&e!==-1 +r=!r +p=r&&!s +if(q){o=h.length-a1.a.length +f=a1.b +if(f!==(d?null:a2.b)){f=e-o +a0.c=f}else{a0.c=f +e=f+o +a0.d=e}}else if(p){f=a2.b +d=a2.c +if(f>d)f=d +a0.c=f}n=b!=null&&b!==a +if(r&&s&&n){b.toString +f=a0.c=b}if(!(f===-1&&f===e)){m=A.bi3(h,g,new A.cZ(f,e)) +f=a1.a +f.toString +if(m!==f){l=B.d.G(g,".") +for(e=A.bw(A.bcV(g),!0,!1,!1).Cs(0,f),e=new A.IQ(e.a,e.b,e.c),d=t.Qz,b=h.length;e.H();){k=e.d +a=(k==null?d.a(k):k).b +r=a.index +if(!(r>=0&&r+a[0].length<=b)){j=r+c-1 +i=A.bi3(h,g,new A.cZ(r,j))}else{j=l?r+a[0].length-1:r+a[0].length +i=A.bi3(h,g,new A.cZ(r,j))}if(i===f){a0.c=r +a0.d=j +break}}}}a0.e=a1.b +a0.f=a1.c +return a0}, +MD(a,b,c,d,e){var s,r=a==null?0:a +r=Math.max(0,r) +s=d==null?0:d +return new A.EG(e,r,Math.max(0,s),b,c)}, +bms(a){var s=J.al(a),r=A.eE(s.i(a,"text")),q=B.c.aw(A.iA(s.i(a,"selectionBase"))),p=B.c.aw(A.iA(s.i(a,"selectionExtent"))),o=A.bft(a,"composingBase"),n=A.bft(a,"composingExtent") +s=o==null?-1:o +return A.MD(q,s,n==null?-1:n,p,r)}, +bmr(a){var s,r,q,p=null,o=globalThis.HTMLInputElement +if(o!=null&&a instanceof o){s=a.selectionDirection +if((s==null?p:s)==="backward"){s=A.beF(a) +r=A.blU(a) +r=r==null?p:B.c.aw(r) +q=A.blV(a) +return A.MD(r,-1,-1,q==null?p:B.c.aw(q),s)}else{s=A.beF(a) +r=A.blV(a) +r=r==null?p:B.c.aw(r) +q=A.blU(a) +return A.MD(r,-1,-1,q==null?p:B.c.aw(q),s)}}else{o=globalThis.HTMLTextAreaElement +if(o!=null&&a instanceof o){s=a.selectionDirection +if((s==null?p:s)==="backward"){s=A.bm_(a) +r=A.blY(a) +r=r==null?p:B.c.aw(r) +q=A.blZ(a) +return A.MD(r,-1,-1,q==null?p:B.c.aw(q),s)}else{s=A.bm_(a) +r=A.blZ(a) +r=r==null?p:B.c.aw(r) +q=A.blY(a) +return A.MD(r,-1,-1,q==null?p:B.c.aw(q),s)}}else throw A.d(A.af("Initialized with unsupported input type"))}}, +bna(a){var s,r,q,p,o="inputType",n="autofill",m=J.al(a),l=t.a,k=A.cE(J.bG(l.a(m.i(a,o)),"name")),j=A.qx(J.bG(l.a(m.i(a,o)),"decimal")),i=A.qx(J.bG(l.a(m.i(a,o)),"isMultiline")) +k=A.bmw(k,j===!0,i===!0) +j=A.eE(m.i(a,"inputAction")) +if(j==null)j="TextInputAction.done" +i=A.qx(m.i(a,"obscureText")) +s=A.qx(m.i(a,"readOnly")) +r=A.qx(m.i(a,"autocorrect")) +q=A.bL_(A.cE(m.i(a,"textCapitalization"))) +l=m.aR(a,n)?A.be1(l.a(m.i(a,n)),B.GP):null +p=A.bEH(t.nA.a(m.i(a,n)),t.kc.a(m.i(a,"fields"))) +m=A.qx(m.i(a,"enableDeltaModel")) +return new A.aHO(k,j,s===!0,i===!0,r!==!1,m===!0,l,p,q)}, +bFx(a){return new A.a4q(a,A.b([],t.Up),$,$,$,null)}, +bUX(){$.av1.al(0,new A.bcY())}, +bRz(){var s,r,q +for(s=$.av1.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a +if(q==null)q=r.a(q) +q.remove()}$.av1.af(0)}, +bEt(a){var s=J.al(a),r=A.iN(J.mU(t.j.a(s.i(a,"transform")),new A.aCo(),t.z),!0,t.V) +return new A.aCn(A.iA(s.i(a,"width")),A.iA(s.i(a,"height")),new Float32Array(A.eG(r)))}, +biI(a,b){var s=a.style +A.M(s,"transform-origin","0 0 0") +A.M(s,"transform",A.nN(b))}, +nN(a){var s=A.bdd(a) +if(s===B.Hr)return"matrix("+A.j(a[0])+","+A.j(a[1])+","+A.j(a[4])+","+A.j(a[5])+","+A.j(a[12])+","+A.j(a[13])+")" +else if(s===B.lP)return A.bSN(a) +else return"none"}, +bdd(a){if(!(a[15]===1&&a[14]===0&&a[11]===0&&a[10]===1&&a[9]===0&&a[8]===0&&a[7]===0&&a[6]===0&&a[3]===0&&a[2]===0))return B.lP +if(a[0]===1&&a[1]===0&&a[4]===0&&a[5]===1&&a[12]===0&&a[13]===0)return B.Hq +else return B.Hr}, +bSN(a){var s=a[0] +if(s===1&&a[1]===0&&a[2]===0&&a[3]===0&&a[4]===0&&a[5]===1&&a[6]===0&&a[7]===0&&a[8]===0&&a[9]===0&&a[10]===1&&a[11]===0&&a[14]===0&&a[15]===1)return"translate3d("+A.j(a[12])+"px, "+A.j(a[13])+"px, 0px)" +else return"matrix3d("+A.j(s)+","+A.j(a[1])+","+A.j(a[2])+","+A.j(a[3])+","+A.j(a[4])+","+A.j(a[5])+","+A.j(a[6])+","+A.j(a[7])+","+A.j(a[8])+","+A.j(a[9])+","+A.j(a[10])+","+A.j(a[11])+","+A.j(a[12])+","+A.j(a[13])+","+A.j(a[14])+","+A.j(a[15])+")"}, +Dh(a,b){var s=$.bA4() +s[0]=b.a +s[1]=b.b +s[2]=b.c +s[3]=b.d +A.bde(a,s) +return new A.A(s[0],s[1],s[2],s[3])}, +bde(a1,a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=$.bjN() +a0[0]=a2[0] +a0[4]=a2[1] +a0[8]=0 +a0[12]=1 +a0[1]=a2[2] +a0[5]=a2[1] +a0[9]=0 +a0[13]=1 +a0[2]=a2[0] +a0[6]=a2[3] +a0[10]=0 +a0[14]=1 +a0[3]=a2[2] +a0[7]=a2[3] +a0[11]=0 +a0[15]=1 +s=$.bA3().a +r=s[0] +q=s[4] +p=s[8] +o=s[12] +n=s[1] +m=s[5] +l=s[9] +k=s[13] +j=s[2] +i=s[6] +h=s[10] +g=s[14] +f=s[3] +e=s[7] +d=s[11] +c=s[15] +b=a1.a +s[0]=r*b[0]+q*b[4]+p*b[8]+o*b[12] +s[4]=r*b[1]+q*b[5]+p*b[9]+o*b[13] +s[8]=r*b[2]+q*b[6]+p*b[10]+o*b[14] +s[12]=r*b[3]+q*b[7]+p*b[11]+o*b[15] +s[1]=n*b[0]+m*b[4]+l*b[8]+k*b[12] +s[5]=n*b[1]+m*b[5]+l*b[9]+k*b[13] +s[9]=n*b[2]+m*b[6]+l*b[10]+k*b[14] +s[13]=n*b[3]+m*b[7]+l*b[11]+k*b[15] +s[2]=j*b[0]+i*b[4]+h*b[8]+g*b[12] +s[6]=j*b[1]+i*b[5]+h*b[9]+g*b[13] +s[10]=j*b[2]+i*b[6]+h*b[10]+g*b[14] +s[14]=j*b[3]+i*b[7]+h*b[11]+g*b[15] +s[3]=f*b[0]+e*b[4]+d*b[8]+c*b[12] +s[7]=f*b[1]+e*b[5]+d*b[9]+c*b[13] +s[11]=f*b[2]+e*b[6]+d*b[10]+c*b[14] +s[15]=f*b[3]+e*b[7]+d*b[11]+c*b[15] +a=b[15] +if(a===0)a=1 +a2[0]=Math.min(Math.min(Math.min(a0[0],a0[1]),a0[2]),a0[3])/a +a2[1]=Math.min(Math.min(Math.min(a0[4],a0[5]),a0[6]),a0[7])/a +a2[2]=Math.max(Math.max(Math.max(a0[0],a0[1]),a0[2]),a0[3])/a +a2[3]=Math.max(Math.max(Math.max(a0[4],a0[5]),a0[6]),a0[7])/a}, +buA(a,b){return a.a<=b.a&&a.b<=b.b&&a.c>=b.c&&a.d>=b.d}, +eX(a){var s,r +if(a===4278190080)return"#000000" +if((a&4278190080)>>>0===4278190080){s=B.f.hZ(a&16777215,16) +switch(s.length){case 1:return"#00000"+s +case 2:return"#0000"+s +case 3:return"#000"+s +case 4:return"#00"+s +case 5:return"#0"+s +default:return"#"+s}}else{r=""+"rgba("+B.f.j(a>>>16&255)+","+B.f.j(a>>>8&255)+","+B.f.j(a&255)+","+B.c.j((a>>>24&255)/255)+")" +return r.charCodeAt(0)==0?r:r}}, +bRB(a,b,c,d){var s=""+a,r=""+b,q=""+c +if(d===255)return"rgb("+s+","+r+","+q+")" +else return"rgba("+s+","+r+","+q+","+B.c.b8(d/255,2)+")"}, +bsy(){if(A.bTt())return"BlinkMacSystemFont" +var s=$.hj() +if(s!==B.bx)s=s===B.cZ +else s=!0 +if(s)return"-apple-system, BlinkMacSystemFont" +return"Arial"}, +bbS(a){var s +if(B.a6z.G(0,a))return a +s=$.hj() +if(s!==B.bx)s=s===B.cZ +else s=!0 +if(s)if(a===".SF Pro Text"||a===".SF Pro Display"||a===".SF UI Text"||a===".SF UI Display")return A.bsy() +return'"'+A.j(a)+'", '+A.bsy()+", sans-serif"}, +bU6(a){var s,r,q,p=a.length,o=new Float32Array(p*2) +for(s=0,r=0;sc)return c +else return a}, +lO(a,b){var s +if(a==null)return b==null +if(b==null||a.length!==b.length)return!1 +for(s=0;s")).cj(0," ")}, +h4(a,b,c){A.M(a.style,b,c)}, +buG(a){var s=self.document.querySelector("#flutterweb-theme") +if(a!=null){if(s==null){s=A.c8(self.document,"meta") +s.id="flutterweb-theme" +s.name="theme-color" +self.document.head.append(s)}s.content=A.eX(a.a)}else if(s!=null)s.remove()}, +Zc(a,b,c,d,e,f,g,h,i){var s=$.bss +if(s==null?$.bss=a.ellipse!=null:s)A.a3(a,"ellipse",[b,c,d,e,f,g,h,i]) +else{a.save() +a.translate(b,c) +a.rotate(f) +a.scale(d,e) +A.bE5(a,0,0,1,g,h,i) +a.restore()}}, +biG(a){var s +for(;a.lastChild!=null;){s=a.lastChild +if(s.parentNode!=null)s.parentNode.removeChild(s)}}, +bfG(a,b,c){var s=b.h("@<0>").ak(c),r=new A.UP(s.h("UP<+key,value(1,2)>")) +r.a=r +r.b=r +return new A.a6t(a,new A.Mv(r,s.h("Mv<+key,value(1,2)>")),A.D(b,s.h("bmh<+key,value(1,2)>")),s.h("a6t<1,2>"))}, +buN(a){switch(a.a){case 0:return"clamp" +case 2:return"mirror" +case 1:return"repeated" +case 3:return"decal"}}, +buV(a,b){if(a.length!==b.length)throw A.d(A.c3(u.L,null))}, +fu(){var s=new Float32Array(16) +s[15]=1 +s[0]=1 +s[5]=1 +s[10]=1 +return new A.cL(s)}, +bH4(a){return new A.cL(a)}, +bH8(a){var s=new A.cL(new Float32Array(16)) +if(s.jR(a)===0)return null +return s}, +xC(a){var s=new Float32Array(16),r=J.al(a) +s[15]=r.i(a,15) +s[14]=r.i(a,14) +s[13]=r.i(a,13) +s[12]=r.i(a,12) +s[11]=r.i(a,11) +s[10]=r.i(a,10) +s[9]=r.i(a,9) +s[8]=r.i(a,8) +s[7]=r.i(a,7) +s[6]=r.i(a,6) +s[5]=r.i(a,5) +s[4]=r.i(a,4) +s[3]=r.i(a,3) +s[2]=r.i(a,2) +s[1]=r.i(a,1) +s[0]=r.i(a,0) +return s}, +bDj(a,b){var s=new A.aAr(a,new A.jp(null,null,t.Tv)) +s.asn(a,b) +return s}, +blB(a){var s,r +if(a!=null){s=$.bvI().c +return A.bDj(a,new A.f8(s,A.w(s).h("f8<1>")))}else{s=new A.a48(new A.jp(null,null,t.Tv)) +r=self.window.visualViewport +if(r==null)r=self.window +s.b=A.f_(r,"resize",s.gaEl()) +return s}}, +bE9(a){var s,r,q,p,o,n="flutter-view",m=A.c8(self.document,n),l=A.c8(self.document,"flt-glass-pane"),k=A.bf(A.b3(["mode","open","delegatesFocus",!1],t.N,t.z)) +k=A.a3(l,"attachShadow",[k==null?t.K.a(k):k]) +s=A.c8(self.document,"flt-scene-host") +r=A.c8(self.document,"flt-text-editing-host") +q=A.c8(self.document,"flt-semantics-host") +p=A.c8(self.document,"flt-announcement-host") +m.appendChild(l) +m.appendChild(r) +m.appendChild(q) +k.append(s) +k.append(p) +o=A.hh().b +A.aUm(n,m,"flt-text-editing-stylesheet",o==null?null:A.a5I(o)) +o=A.hh().b +A.aUm("",k,"flt-internals-stylesheet",o==null?null:A.a5I(o)) +o=A.hh().gK9() +A.M(s.style,"pointer-events","none") +if(o)A.M(s.style,"opacity","0.3") +o=q.style +A.M(o,"position","absolute") +A.M(o,"transform-origin","0 0 0") +A.M(q.style,"transform","scale("+A.j(1/a)+")") +return new A.a2E(m,k,s,r,q,p)}, +bmv(a){var s,r,q,p="setAttribute",o="0",n="none" +if(a!=null){A.bE7(a) +s=A.bf("custom-element") +A.a3(a,p,["flt-embedding",s==null?t.K.a(s):s]) +return new A.aAu(a)}else{s=self.document.body +s.toString +r=new A.aFe(s) +q=A.bf("full-page") +A.a3(s,p,["flt-embedding",q==null?t.K.a(q):q]) +r.atP() +A.h4(s,"position","fixed") +A.h4(s,"top",o) +A.h4(s,"right",o) +A.h4(s,"bottom",o) +A.h4(s,"left",o) +A.h4(s,"overflow","hidden") +A.h4(s,"padding",o) +A.h4(s,"margin",o) +A.h4(s,"user-select",n) +A.h4(s,"-webkit-user-select",n) +A.h4(s,"touch-action",n) +return r}}, +aUm(a,b,c,d){var s=A.c8(self.document,"style") +if(d!=null)s.nonce=d +s.id=c +b.appendChild(s) +A.bR7(s,a,"normal normal 14px sans-serif")}, +bR7(a,b,c){var s,r,q +a.append(self.document.createTextNode(b+" flt-scene-host { font: "+c+";}"+b+" flt-semantics input[type=range] { appearance: none; -webkit-appearance: none; width: 100%; position: absolute; border: none; top: 0; right: 0; bottom: 0; left: 0;}"+b+" input::selection { background-color: transparent;}"+b+" textarea::selection { background-color: transparent;}"+b+" flt-semantics input,"+b+" flt-semantics textarea,"+b+' flt-semantics [contentEditable="true"] { caret-color: transparent;}'+b+" .flt-text-editing::placeholder { opacity: 0;}"+b+":focus { outline: none;}")) +r=$.eb() +if(r===B.au)a.append(self.document.createTextNode(b+" * { -webkit-tap-highlight-color: transparent;}"+b+" flt-semantics input[type=range]::-webkit-slider-thumb { -webkit-appearance: none;}")) +if(r===B.cP)a.append(self.document.createTextNode(b+" flt-paragraph,"+b+" flt-span { line-height: 100%;}")) +if(r!==B.ec)r=r===B.au +else r=!0 +if(r)a.append(self.document.createTextNode(b+" .transparentTextEditing:-webkit-autofill,"+b+" .transparentTextEditing:-webkit-autofill:hover,"+b+" .transparentTextEditing:-webkit-autofill:focus,"+b+" .transparentTextEditing:-webkit-autofill:active { opacity: 0 !important;}")) +if(B.d.G(self.window.navigator.userAgent,"Edg/"))try{a.append(self.document.createTextNode(b+" input::-ms-reveal { display: none;}"))}catch(q){r=A.b2(q) +if(t.e.b(r)){s=r +self.window.console.warn(J.i1(s))}else throw q}}, +bqR(a,b){var s,r,q,p,o +if(a==null){s=b.a +r=b.b +return new A.IB(s,s,r,r)}s=a.minWidth +r=b.a +if(s==null)s=r +q=a.minHeight +p=b.b +if(q==null)q=p +o=a.maxWidth +r=o==null?r:o +o=a.maxHeight +return new A.IB(s,r,q,o==null?p:o)}, +Ku:function Ku(a){var _=this +_.a=a +_.d=_.c=_.b=null}, +awi:function awi(a,b){this.a=a +this.b=b}, +awm:function awm(a){this.a=a}, +awn:function awn(a){this.a=a}, +awj:function awj(a){this.a=a}, +awk:function awk(a){this.a=a}, +awl:function awl(a){this.a=a}, +Lc:function Lc(a,b){this.a=a +this.b=b}, +rS:function rS(a,b){this.a=a +this.b=b}, +ayj:function ayj(a,b,c,d,e){var _=this +_.e=_.d=null +_.f=a +_.r=b +_.z=_.y=_.x=_.w=null +_.Q=0 +_.as=c +_.a=d +_.b=null +_.c=e}, +aAa:function aAa(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.w=_.r=null +_.x=1 +_.Q=_.z=_.y=null +_.as=!1}, +ap2:function ap2(){}, +n0:function n0(a){this.a=a}, +ayD:function ayD(a,b,c){this.a=a +this.b=b +this.c=c}, +b8K:function b8K(){}, +b90:function b90(a,b){this.a=a +this.b=b}, +b9_:function b9_(a,b){this.a=a +this.b=b}, +a0c:function a0c(a){this.a=a}, +a6w:function a6w(a){this.a=a +this.b=$}, +a0D:function a0D(){}, +Lt:function Lt(a,b){this.a=a +this.b=b}, +DT:function DT(a){this.a=a}, +a0L:function a0L(){}, +a0Q:function a0Q(){}, +DS:function DS(a,b){this.a=a +this.b=b}, +a2v:function a2v(a,b,c,d){var _=this +_.a=a +_.b=$ +_.c=b +_.d=c +_.$ti=d}, +a5_:function a5_(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=null +_.z=$ +_.at=j}, +aGS:function aGS(){}, +aGQ:function aGQ(){}, +aGR:function aGR(a,b){this.a=a +this.b=b}, +At:function At(a,b){this.a=a +this.b=b}, +op:function op(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +Pa:function Pa(a){this.a=a}, +MI:function MI(a,b){this.a=a +this.b=b}, +abJ:function abJ(a,b,c,d,e){var _=this +_.a=a +_.b=$ +_.c=b +_.d=c +_.e=d +_.f=e +_.w=_.r=null}, +aT_:function aT_(){}, +aT0:function aT0(){}, +aT1:function aT1(){}, +Ba:function Ba(a,b,c){this.a=a +this.b=b +this.c=c}, +Tn:function Tn(a,b,c){this.a=a +this.b=b +this.c=c}, +zi:function zi(a,b,c){this.a=a +this.b=b +this.c=c}, +aSZ:function aSZ(a){this.a=a}, +a55:function a55(a){this.a=a}, +bcX:function bcX(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +yh:function yh(a,b){var _=this +_.a=$ +_.b=a +_.c=b +_.d=!1}, +a0J:function a0J(){}, +Uf:function Uf(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=$}, +Ug:function Ug(a,b){this.a=a +this.b=b +this.d=$}, +a0B:function a0B(a,b,c,d){var _=this +_.a=$ +_.b=a +_.c=b +_.d=0 +_.e=-1 +_.f=c +_.r=d +_.w=!1}, +Lu:function Lu(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.e=_.d=$ +_.f=!1 +_.r=0 +_.w=null +_.x=d}, +jJ:function jJ(){}, +aOl:function aOl(a){this.c=a}, +aMA:function aMA(a,b){this.a=a +this.b=b}, +Ee:function Ee(){}, +aaD:function aaD(a,b){this.c=a +this.a=null +this.b=b}, +a_p:function a_p(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +a0X:function a0X(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +a1_:function a1_(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +a0Z:function a0Z(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +a7U:function a7U(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +Tf:function Tf(a,b,c){var _=this +_.f=a +_.c=b +_.a=null +_.b=c}, +a7R:function a7R(a,b,c){var _=this +_.f=a +_.c=b +_.a=null +_.b=c}, +a58:function a58(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +aHe:function aHe(a,b){this.a=a +this.b=b}, +a8K:function a8K(a,b,c){var _=this +_.c=a +_.d=b +_.a=null +_.b=c}, +a62:function a62(a){this.a=a}, +aIT:function aIT(a){this.a=a +this.b=$}, +aIU:function aIU(a){this.a=a}, +aFa:function aFa(a,b,c){this.a=a +this.b=b +this.c=c}, +aFb:function aFb(a,b,c){this.a=a +this.b=b +this.c=c}, +aFc:function aFc(a,b,c){this.a=a +this.b=b +this.c=c}, +a1q:function a1q(){}, +ayG:function ayG(a,b){this.a=a +this.b=b +this.c=$}, +aLl:function aLl(a){this.a=a}, +aLm:function aLm(a,b){this.a=a +this.b=b}, +aLn:function aLn(a){this.a=a}, +Ao:function Ao(a,b,c,d,e){var _=this +_.r=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=$}, +aLo:function aLo(){}, +a0M:function a0M(a){this.a=a}, +b92:function b92(){}, +aLD:function aLD(){}, +hY:function hY(a,b){this.a=null +this.b=a +this.$ti=b}, +a1A:function a1A(a,b){var _=this +_.a=$ +_.b=1 +_.c=a +_.$ti=b}, +aM4:function aM4(a,b){this.a=a +this.b=b}, +aM5:function aM5(a,b){this.a=a +this.b=b}, +AE:function AE(a,b,c,d,e,f){var _=this +_.f=a +_.r=b +_.a=c +_.b=d +_.c=e +_.d=f +_.e=$}, +aM6:function aM6(){}, +Hb:function Hb(a){this.a=a}, +Bh:function Bh(){}, +hU:function hU(a){this.a=a +this.b=null}, +Bi:function Bi(a){this.a=a +this.b=null}, +DU:function DU(a,b,c,d,e,f){var _=this +_.a=a +_.b=$ +_.c=null +_.d=b +_.e=c +_.f=0 +_.r=d +_.w=e +_.x=!0 +_.y=4278190080 +_.z=!1 +_.ax=_.at=_.as=_.Q=null +_.ay=f +_.CW=_.ch=null +_.cx=0}, +ayH:function ayH(a){this.a=a}, +Lx:function Lx(a){this.a=$ +this.b=a}, +a0P:function a0P(a,b){this.a=a +this.b=b +this.c=$}, +ayE:function ayE(a){var _=this +_.a=a +_.b=$ +_.c=0 +_.d=null}, +a0E:function a0E(a){this.a=a +this.b=$}, +ayK:function ayK(){}, +yi:function yi(){this.a=$ +this.b=!1 +this.c=null}, +qU:function qU(){this.b=this.a=null}, +aOI:function aOI(){}, +IC:function IC(){}, +aBs:function aBs(){}, +aad:function aad(){this.b=this.a=null}, +H3:function H3(a,b){var _=this +_.a=a +_.b=b +_.d=_.c=0 +_.f=_.e=$ +_.r=-1}, +DJ:function DJ(a,b){this.a=a +this.b=b}, +Ll:function Ll(a,b,c){var _=this +_.a=null +_.b=$ +_.d=a +_.e=b +_.r=_.f=null +_.w=c}, +ayg:function ayg(a){this.a=a}, +abA:function abA(){}, +a0I:function a0I(a,b,c,d,e,f,g){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.a=$}, +a0G:function a0G(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.a=$}, +a0H:function a0H(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.a=$}, +a0F:function a0F(a,b,c,d,e,f,g,h){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.a=$}, +a0K:function a0K(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=null +_.r=$ +_.w=!1}, +oF:function oF(a,b,c){var _=this +_.a=null +_.b=a +_.c=b +_.d=!0 +_.e=!1 +_.Q=_.z=_.y=_.x=_.w=_.r=_.f=null +_.as=c +_.CW=_.ch=_.ay=_.ax=_.at=-1 +_.cy=_.cx=null}, +a0R:function a0R(a,b){this.a=a +this.b=b +this.c=!1}, +Lw:function Lw(a,b,c,d,e,f,g,h,i,j,k,l,m,n){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}, +DV:function DV(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fx=_.fr=$}, +ayL:function ayL(a){this.a=a}, +Ly:function Ly(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}, +a0O:function a0O(a){var _=this +_.a=$ +_.b=-1/0 +_.c=a +_.d=0 +_.e=!1 +_.z=_.y=_.x=_.w=_.r=_.f=0 +_.Q=$ +_.as=!1}, +Lv:function Lv(a){this.a=a}, +ayI:function ayI(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=0 +_.d=c +_.e=d}, +b8N:function b8N(a){this.a=a}, +O1:function O1(a,b){this.a=a +this.b=b}, +a0d:function a0d(a){this.a=a}, +a0S:function a0S(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=$}, +ayM:function ayM(a){this.a=a}, +LE:function LE(a,b){this.a=a +this.b=b}, +aza:function aza(a,b){this.a=a +this.b=b}, +azb:function azb(a,b){this.a=a +this.b=b}, +az5:function az5(a){this.a=a}, +az6:function az6(a,b){this.a=a +this.b=b}, +az4:function az4(a){this.a=a}, +az8:function az8(a){this.a=a}, +az9:function az9(a){this.a=a}, +az7:function az7(a){this.a=a}, +az2:function az2(){}, +az3:function az3(){}, +aDP:function aDP(){}, +aDQ:function aDQ(){}, +a1c:function a1c(a,b){this.a=a +this.b=b}, +MO:function MO(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aEm:function aEm(){this.a=!1 +this.b=null}, +a3d:function a3d(a){this.b=a +this.d=null}, +aRo:function aRo(){}, +aBI:function aBI(a){this.a=a}, +aBL:function aBL(){}, +a51:function a51(a,b){this.a=a +this.b=b}, +aGT:function aGT(a){this.a=a}, +a50:function a50(a,b){this.a=a +this.b=b}, +NM:function NM(a,b){this.a=a +this.b=b}, +a2G:function a2G(a,b,c){this.a=a +this.b=b +this.c=c}, +Mr:function Mr(a,b){this.a=a +this.b=b}, +bbY:function bbY(a){this.a=a}, +b9A:function b9A(){}, +ai1:function ai1(a,b){this.a=a +this.b=-1 +this.$ti=b}, +x3:function x3(a,b){this.a=a +this.$ti=b}, +ai6:function ai6(a,b){this.a=a +this.b=-1 +this.$ti=b}, +UL:function UL(a,b){this.a=a +this.$ti=b}, +a2D:function a2D(a,b){this.a=a +this.b=$ +this.$ti=b}, +aDj:function aDj(){}, +aaW:function aaW(a,b){this.a=a +this.b=b}, +Br:function Br(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +ap1:function ap1(a,b){this.a=a +this.b=b}, +aQX:function aQX(){}, +bd0:function bd0(){}, +bd_:function bd_(){}, +aEK:function aEK(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.a=a +_.b=$ +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j +_.Q=k +_.as=l +_.at=m +_.ax=!1 +_.ch=_.ay=$}, +aEL:function aEL(){}, +aEM:function aEM(){}, +aEN:function aEN(){}, +aEO:function aEO(){}, +aEP:function aEP(){}, +aEQ:function aEQ(){}, +aES:function aES(a){this.a=a}, +aET:function aET(){}, +aER:function aER(a){this.a=a}, +as5:function as5(a,b,c){this.a=a +this.b=b +this.$ti=c}, +a3t:function a3t(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.e=null}, +aDZ:function aDZ(a,b,c){this.a=a +this.b=b +this.c=c}, +F1:function F1(a,b){this.a=a +this.b=b}, +zj:function zj(a,b){this.a=a +this.b=b}, +Nj:function Nj(a){this.a=a}, +bca:function bca(a){this.a=a}, +bcb:function bcb(a){this.a=a}, +bcc:function bcc(){}, +bc9:function bc9(){}, +jE:function jE(){}, +a3V:function a3V(){}, +Ng:function Ng(){}, +Ni:function Ni(){}, +KM:function KM(){}, +ll:function ll(a,b){this.a=a +this.$ti=b}, +a1B:function a1B(a){this.b=this.a=null +this.$ti=a}, +IZ:function IZ(a,b,c){this.a=a +this.b=b +this.$ti=c}, +a43:function a43(a,b){var _=this +_.a=a +_.b=b +_.e=_.d=_.c=null}, +PQ:function PQ(a,b,c,d){var _=this +_.CW=a +_.dx=_.db=_.cy=_.cx=null +_.dy=$ +_.fr=null +_.x=b +_.a=c +_.b=-1 +_.c=d +_.w=_.r=_.f=_.e=_.d=null}, +qI:function qI(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=null +_.c=b +_.d=c +_.e=null +_.f=d +_.r=e +_.w=f +_.x=0 +_.y=g +_.Q=_.z=null +_.ax=_.at=_.as=!1 +_.ay=h +_.ch=i}, +eC:function eC(a){this.b=a}, +acD:function acD(a){this.a=a}, +UJ:function UJ(){}, +PS:function PS(a,b,c,d,e,f){var _=this +_.CW=a +_.cx=b +_.lA$=c +_.x=d +_.a=e +_.b=-1 +_.c=f +_.w=_.r=_.f=_.e=_.d=null}, +a8D:function a8D(a,b,c,d,e,f){var _=this +_.CW=a +_.cx=b +_.lA$=c +_.x=d +_.a=e +_.b=-1 +_.c=f +_.w=_.r=_.f=_.e=_.d=null}, +PR:function PR(a,b,c,d,e){var _=this +_.CW=a +_.cx=b +_.cy=null +_.x=c +_.a=d +_.b=-1 +_.c=e +_.w=_.r=_.f=_.e=_.d=null}, +aUw:function aUw(a,b,c){this.a=a +this.b=b +this.c=c}, +aUv:function aUv(a,b){this.a=a +this.b=b}, +aBD:function aBD(a,b,c,d){var _=this +_.a=a +_.adY$=b +_.zg$=c +_.rb$=d}, +PT:function PT(a,b,c,d,e){var _=this +_.CW=a +_.cx=b +_.dx=_.db=_.cy=null +_.x=c +_.a=d +_.b=-1 +_.c=e +_.w=_.r=_.f=_.e=_.d=null}, +PU:function PU(a,b,c,d,e){var _=this +_.CW=a +_.cx=b +_.cy=null +_.x=c +_.a=d +_.b=-1 +_.c=e +_.w=_.r=_.f=_.e=_.d=null}, +PV:function PV(a,b,c,d,e){var _=this +_.CW=a +_.cx=b +_.cy=null +_.x=c +_.a=d +_.b=-1 +_.c=e +_.w=_.r=_.f=_.e=_.d=null}, +HZ:function HZ(a){var _=this +_.a=a +_.b=!1 +_.c=0 +_.e=!1}, +I_:function I_(){var _=this +_.e=_.d=_.c=_.b=_.a=null +_.f=!0 +_.r=4278190080 +_.z=_.y=_.x=_.w=null}, +kj:function kj(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +aOz:function aOz(){var _=this +_.d=_.c=_.b=_.a=0}, +azW:function azW(){var _=this +_.d=_.c=_.b=_.a=0}, +agP:function agP(){this.b=this.a=null}, +aAe:function aAe(){var _=this +_.d=_.c=_.b=_.a=0}, +wE:function wE(a,b){var _=this +_.a=a +_.b=b +_.c=0 +_.e=_.d=-1}, +aNn:function aNn(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1 +_.e=0 +_.f=-1 +_.Q=_.z=_.y=_.x=_.w=_.r=0}, +acF:function acF(a){this.a=a}, +aqF:function aqF(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=-1 +_.f=0}, +amA:function amA(a){var _=this +_.b=0 +_.c=a +_.e=0 +_.f=!1}, +b4u:function b4u(a,b){this.a=a +this.b=b}, +aUn:function aUn(a){this.a=null +this.b=a}, +acE:function acE(a,b,c){this.a=a +this.c=b +this.d=c}, +XG:function XG(a,b,c){this.c=a +this.a=b +this.b=c}, +JE:function JE(a,b,c){this.a=a +this.b=b +this.c=c}, +GE:function GE(a,b){var _=this +_.b=_.a=null +_.e=_.d=_.c=0 +_.f=a +_.r=b +_.x=_.w=0 +_.y=null +_.z=0 +_.as=_.Q=!0 +_.ch=_.ay=_.ax=_.at=!1 +_.CW=-1 +_.cx=0}, +vZ:function vZ(a){var _=this +_.a=a +_.b=-1 +_.e=_.d=_.c=0}, +tf:function tf(){this.b=this.a=null}, +aSX:function aSX(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +aNo:function aNo(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.e=_.d=0 +_.f=d}, +vR:function vR(a,b){this.a=a +this.b=b}, +a8G:function a8G(a,b,c,d,e,f,g){var _=this +_.ch=null +_.CW=a +_.cx=b +_.cy=c +_.db=d +_.dy=1 +_.fr=!1 +_.fx=e +_.id=_.go=_.fy=null +_.a=f +_.b=-1 +_.c=g +_.w=_.r=_.f=_.e=_.d=null}, +aNu:function aNu(a){this.a=a}, +aPa:function aPa(a,b,c){var _=this +_.a=a +_.b=null +_.c=b +_.d=c +_.f=_.e=!1 +_.r=1}, +eK:function eK(){}, +Mz:function Mz(){}, +PF:function PF(){}, +a8h:function a8h(){}, +a8l:function a8l(a,b){this.a=a +this.b=b}, +a8j:function a8j(a,b){this.a=a +this.b=b}, +a8i:function a8i(a){this.a=a}, +a8k:function a8k(a){this.a=a}, +a82:function a82(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a81:function a81(a){var _=this +_.f=a +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a80:function a80(a){var _=this +_.f=a +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a84:function a84(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a87:function a87(a,b,c){var _=this +_.f=a +_.r=b +_.w=c +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a89:function a89(a){var _=this +_.f=a +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a8g:function a8g(a,b,c){var _=this +_.f=a +_.r=b +_.w=c +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a8c:function a8c(a,b,c){var _=this +_.f=a +_.r=b +_.w=c +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a8e:function a8e(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a8d:function a8d(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a85:function a85(a,b,c){var _=this +_.f=a +_.r=b +_.w=c +_.x=null +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a88:function a88(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a83:function a83(a,b,c){var _=this +_.f=a +_.r=b +_.w=c +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a8b:function a8b(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a8f:function a8f(a,b,c,d){var _=this +_.f=a +_.r=b +_.w=c +_.x=d +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a86:function a86(a,b,c){var _=this +_.f=a +_.r=b +_.w=c +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +PE:function PE(a,b,c,d){var _=this +_.f=a +_.r=b +_.w=c +_.x=d +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +a8a:function a8a(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +b4s:function b4s(a,b,c,d){var _=this +_.a=a +_.b=!1 +_.d=_.c=17976931348623157e292 +_.f=_.e=-17976931348623157e292 +_.r=b +_.w=c +_.x=!0 +_.y=d +_.z=!1 +_.ax=_.at=_.as=_.Q=0}, +aai:function aai(){var _=this +_.d=_.c=_.b=_.a=!1}, +acG:function acG(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=!1}, +xs:function xs(){}, +a4Z:function a4Z(){this.a=$}, +aGP:function aGP(){}, +aQp:function aQp(a){this.a=a +this.b=null}, +I0:function I0(a,b){this.a=a +this.b=b}, +PW:function PW(a,b,c){var _=this +_.CW=null +_.x=a +_.a=b +_.b=-1 +_.c=c +_.w=_.r=_.f=_.e=_.d=null}, +aUo:function aUo(a){this.a=a}, +aUq:function aUq(a){this.a=a}, +aUr:function aUr(a,b){this.a=a +this.b=b}, +z0:function z0(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.e=d +_.r=_.f=!1}, +aLV:function aLV(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aLW:function aLW(){}, +aSA:function aSA(){this.a=null +this.b=!1}, +EM:function EM(){}, +a4y:function a4y(a,b,c,d,e,f,g){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g}, +aGe:function aGe(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +a4v:function a4v(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f}, +aGc:function aGc(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +Fc:function Fc(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f}, +aGd:function aGd(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +a4t:function a4t(a,b,c,d,e,f,g,h){var _=this +_.x=a +_.y=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h}, +ph:function ph(){}, +TX:function TX(a,b,c){this.a=a +this.b=b +this.c=c}, +VP:function VP(a,b){this.a=a +this.b=b}, +a3e:function a3e(){}, +OW:function OW(a,b){this.b=a +this.c=b +this.a=null}, +OQ:function OQ(a){this.b=a +this.a=null}, +abm:function abm(a,b,c,d,e){var _=this +_.b=a +_.c=b +_.e=null +_.w=_.r=_.f=0 +_.y=c +_.z=d +_.Q=null +_.as=e}, +oB:function oB(a,b){this.b=a +this.c=b +this.d=1}, +BH:function BH(a,b,c){this.a=a +this.b=b +this.c=c}, +bbT:function bbT(){}, +AO:function AO(a,b){this.a=a +this.b=b}, +fT:function fT(){}, +a8F:function a8F(){}, +hT:function hT(){}, +aNt:function aNt(){}, +xj:function xj(a,b,c){this.a=a +this.b=b +this.c=c}, +aOm:function aOm(){}, +PX:function PX(a,b,c,d){var _=this +_.CW=a +_.cy=_.cx=null +_.x=b +_.a=c +_.b=-1 +_.c=d +_.w=_.r=_.f=_.e=_.d=null}, +NK:function NK(a,b){this.a=a +this.b=b}, +aGK:function aGK(a,b,c){this.a=a +this.b=b +this.c=c}, +aGL:function aGL(a,b){this.a=a +this.b=b}, +aGI:function aGI(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aGJ:function aGJ(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +a4W:function a4W(a,b){this.a=a +this.b=b}, +RZ:function RZ(a){this.a=a}, +NL:function NL(a,b,c){var _=this +_.a=a +_.c=_.b=!1 +_.d=b +_.e=c}, +a03:function a03(){}, +axR:function axR(){}, +axS:function axS(a){this.a=a}, +Kx:function Kx(a,b){this.a=a +this.b=b}, +rv:function rv(a,b){this.a=a +this.b=b}, +yI:function yI(a,b){this.a=a +this.b=b}, +bcs:function bcs(){}, +bct:function bct(a){this.a=a}, +bcr:function bcr(a){this.a=a}, +bcu:function bcu(){}, +aEl:function aEl(a){this.a=a}, +aEn:function aEn(a){this.a=a}, +aEo:function aEo(a){this.a=a}, +aEk:function aEk(a){this.a=a}, +bch:function bch(a,b){this.a=a +this.b=b}, +bcf:function bcf(a,b){this.a=a +this.b=b}, +bcg:function bcg(a){this.a=a}, +b9b:function b9b(){}, +b9c:function b9c(){}, +b9d:function b9d(){}, +b9e:function b9e(){}, +b9f:function b9f(){}, +b9g:function b9g(){}, +b9h:function b9h(){}, +b9i:function b9i(){}, +b8G:function b8G(a,b,c){this.a=a +this.b=b +this.c=c}, +a5T:function a5T(a){this.a=$ +this.b=a}, +aIo:function aIo(a){this.a=a}, +aIp:function aIp(a){this.a=a}, +aIq:function aIq(a){this.a=a}, +aIr:function aIr(a){this.a=a}, +pk:function pk(a){this.a=a}, +aIs:function aIs(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=null +_.e=!1 +_.f=d +_.r=e}, +aIy:function aIy(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aIz:function aIz(a){this.a=a}, +aIA:function aIA(a,b,c){this.a=a +this.b=b +this.c=c}, +aIB:function aIB(a,b){this.a=a +this.b=b}, +aIu:function aIu(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aIv:function aIv(a,b,c){this.a=a +this.b=b +this.c=c}, +aIw:function aIw(a,b){this.a=a +this.b=b}, +aIx:function aIx(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aIt:function aIt(a,b,c){this.a=a +this.b=b +this.c=c}, +aIC:function aIC(a,b){this.a=a +this.b=b}, +aA8:function aA8(a){this.a=a +this.b=!0}, +aKT:function aKT(){}, +bcS:function bcS(){}, +axQ:function axQ(){}, +P3:function P3(a){var _=this +_.d=a +_.a=_.e=$ +_.c=_.b=!1}, +aLa:function aLa(){}, +RY:function RY(a,b){var _=this +_.d=a +_.e=b +_.f=null +_.a=$ +_.c=_.b=!1}, +aSS:function aSS(){}, +aST:function aST(){}, +rR:function rR(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=0 +_.f=e}, +MW:function MW(a){this.a=a +this.b=$ +this.c=0}, +aDY:function aDY(){}, +a3g:function a3g(){this.a=null +this.b=$ +this.c=!1}, +a3f:function a3f(a){this.a=!1 +this.b=a}, +aDn:function aDn(a,b,c){this.a=a +this.b=b +this.c=c}, +aDo:function aDo(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +a4Q:function a4Q(a,b){this.a=a +this.b=b +this.c=$}, +a3h:function a3h(a,b,c,d,e){var _=this +_.a=$ +_.b=a +_.c=b +_.f=c +_.r=$ +_.x=_.w=null +_.y=$ +_.ok=_.k4=_.k3=_.k2=_.k1=_.id=_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=_.at=_.as=null +_.p1=d +_.to=_.ry=_.rx=_.p4=_.p3=_.p2=null +_.x1=e +_.y1=null}, +aDx:function aDx(a){this.a=a}, +aDy:function aDy(a,b,c){this.a=a +this.b=b +this.c=c}, +aDw:function aDw(a,b){this.a=a +this.b=b}, +aDs:function aDs(a,b){this.a=a +this.b=b}, +aDt:function aDt(a,b){this.a=a +this.b=b}, +aDu:function aDu(a,b){this.a=a +this.b=b}, +aDr:function aDr(a){this.a=a}, +aDq:function aDq(a){this.a=a}, +aDv:function aDv(){}, +aDp:function aDp(a){this.a=a}, +aDz:function aDz(a,b){this.a=a +this.b=b}, +bcy:function bcy(a,b,c){this.a=a +this.b=b +this.c=c}, +aXj:function aXj(){}, +a8Q:function a8Q(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +awo:function awo(){}, +aZc:function aZc(a,b){var _=this +_.f=_.e=_.d=_.c=$ +_.a=a +_.b=b}, +aZf:function aZf(a){this.a=a}, +aZe:function aZe(a){this.a=a}, +aZd:function aZd(a){this.a=a}, +aZg:function aZg(a){this.a=a}, +aei:function aei(a,b,c){var _=this +_.a=a +_.b=b +_.c=null +_.d=c +_.e=null +_.x=_.w=_.r=_.f=$}, +aXl:function aXl(a){this.a=a}, +aXm:function aXm(a){this.a=a}, +aXn:function aXn(a){this.a=a}, +aXo:function aXo(a){this.a=a}, +aNI:function aNI(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aNJ:function aNJ(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aNK:function aNK(a){this.b=a}, +aQV:function aQV(){this.a=null}, +aQW:function aQW(){}, +aNT:function aNT(a,b,c){var _=this +_.a=null +_.b=a +_.d=b +_.e=c +_.f=$}, +a0T:function a0T(){this.b=this.a=null}, +aO1:function aO1(){}, +al_:function al_(a,b,c){this.a=a +this.b=b +this.c=c}, +aZ3:function aZ3(){}, +aZ4:function aZ4(a){this.a=a}, +b8h:function b8h(){}, +qr:function qr(a,b){this.a=a +this.b=b}, +IU:function IU(){this.a=0}, +b4B:function b4B(a,b,c){var _=this +_.e=a +_.a=b +_.b=c +_.c=null +_.d=!1}, +b4D:function b4D(){}, +b4C:function b4C(a,b,c){this.a=a +this.b=b +this.c=c}, +b4E:function b4E(a){this.a=a}, +b4F:function b4F(a){this.a=a}, +b4G:function b4G(a){this.a=a}, +b4H:function b4H(a){this.a=a}, +b4I:function b4I(a){this.a=a}, +b4J:function b4J(a){this.a=a}, +JH:function JH(a,b){this.a=null +this.b=a +this.c=b}, +b2q:function b2q(a){this.a=a +this.b=0}, +b2r:function b2r(a,b){this.a=a +this.b=b}, +aNU:function aNU(){}, +bgj:function bgj(){}, +aOK:function aOK(a,b){this.a=a +this.b=0 +this.c=b}, +aOL:function aOL(a){this.a=a}, +aON:function aON(a,b,c){this.a=a +this.b=b +this.c=c}, +aOO:function aOO(a){this.a=a}, +a4p:function a4p(a){this.a=a}, +a4o:function a4o(a){var _=this +_.a=a +_.fx=_.fr=_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=_.f=_.e=_.d=_.c=null}, +aM2:function aM2(a,b){var _=this +_.b=_.a=null +_.c=a +_.d=b}, +KL:function KL(a,b){this.a=a +this.b=b}, +avN:function avN(a,b){this.a=a +this.b=b +this.c=!1}, +avO:function avO(a){this.a=a}, +Ue:function Ue(a,b){this.a=a +this.b=b}, +ayx:function ayx(a,b,c){var _=this +_.r=a +_.a=$ +_.b=b +_.c=c +_.e=_.d=null}, +a2k:function a2k(a,b){var _=this +_.a=$ +_.b=a +_.c=b +_.e=_.d=null}, +aAZ:function aAZ(a,b){this.a=a +this.b=b}, +aAY:function aAY(){}, +Hj:function Hj(a,b,c){var _=this +_.e=null +_.a=a +_.b=b +_.c=c +_.d=!1}, +aQK:function aQK(a){this.a=a}, +a3T:function a3T(a,b,c,d){var _=this +_.e=a +_.a=b +_.b=c +_.c=d +_.d=!1}, +ZE:function ZE(a){this.a=a +this.c=this.b=null}, +avQ:function avQ(a){this.a=a}, +avR:function avR(a){this.a=a}, +avP:function avP(a,b){this.a=a +this.b=b}, +aHl:function aHl(a,b){var _=this +_.r=null +_.a=$ +_.b=a +_.c=b +_.e=_.d=null}, +aHv:function aHv(a,b,c,d){var _=this +_.r=a +_.w=b +_.x=1 +_.y=$ +_.z=!1 +_.a=$ +_.b=c +_.c=d +_.e=_.d=null}, +aHw:function aHw(a,b){this.a=a +this.b=b}, +aHx:function aHx(a){this.a=a}, +a63:function a63(a,b){this.a=a +this.b=b}, +Oj:function Oj(a,b,c,d){var _=this +_.e=a +_.r=_.f=null +_.a=b +_.b=c +_.c=d +_.d=!1}, +b8O:function b8O(){}, +aJk:function aJk(a,b){var _=this +_.a=$ +_.b=a +_.c=b +_.e=_.d=null}, +A9:function A9(a,b,c){var _=this +_.e=null +_.a=a +_.b=b +_.c=c +_.d=!1}, +aNM:function aNM(a,b){var _=this +_.a=$ +_.b=a +_.c=b +_.e=_.d=null}, +aRD:function aRD(a,b,c){var _=this +_.r=null +_.w=a +_.x=null +_.y=0 +_.a=$ +_.b=b +_.c=c +_.e=_.d=null}, +aRK:function aRK(a){this.a=a}, +aRL:function aRL(a){this.a=a}, +aRM:function aRM(a){this.a=a}, +MN:function MN(a){this.a=a}, +abj:function abj(a){this.a=a}, +abi:function abi(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9){var _=this +_.a=a +_.b=b +_.c=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ay=m +_.ch=n +_.CW=o +_.cx=p +_.cy=q +_.db=r +_.dx=s +_.dy=a0 +_.fr=a1 +_.fx=a2 +_.fy=a3 +_.go=a4 +_.id=a5 +_.k1=a6 +_.k2=a7 +_.k3=a8 +_.ok=a9}, +nk:function nk(a,b){this.a=a +this.b=b}, +Bn:function Bn(a,b){this.a=a +this.b=b}, +a9i:function a9i(){}, +aFB:function aFB(a,b){var _=this +_.a=$ +_.b=a +_.c=b +_.e=_.d=null}, +tl:function tl(){}, +BD:function BD(a,b){var _=this +_.a=0 +_.fy=_.fx=_.fr=_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=_.f=_.e=_.d=_.c=_.b=null +_.go=-1 +_.id=a +_.k1=b +_.k2=-1 +_.p1=_.ok=_.k4=_.k3=null +_.p3=_.p2=0 +_.p4=!1}, +avS:function avS(a,b){this.a=a +this.b=b}, +zq:function zq(a,b){this.a=a +this.b=b}, +RH:function RH(a,b){this.a=a +this.b=b}, +aDA:function aDA(a,b,c,d){var _=this +_.a=!1 +_.b=a +_.c=b +_.e=c +_.f=null +_.r=d}, +aDF:function aDF(){}, +aDE:function aDE(a){this.a=a}, +aDB:function aDB(a,b,c,d,e,f){var _=this +_.a=a +_.b=null +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=!1}, +aDD:function aDD(a){this.a=a}, +aDC:function aDC(a,b){this.a=a +this.b=b}, +ML:function ML(a,b){this.a=a +this.b=b}, +aS8:function aS8(a){this.a=a}, +aS4:function aS4(){}, +aAR:function aAR(){this.a=null}, +aAS:function aAS(a){this.a=a}, +aKL:function aKL(){var _=this +_.b=_.a=null +_.c=0 +_.d=!1}, +aKN:function aKN(a){this.a=a}, +aKM:function aKM(a){this.a=a}, +axX:function axX(a,b){var _=this +_.a=$ +_.b=a +_.c=b +_.e=_.d=null}, +ad0:function ad0(a,b,c){var _=this +_.e=null +_.f=!1 +_.a=a +_.b=b +_.c=c +_.d=!1}, +aV2:function aV2(a,b){this.a=a +this.b=b}, +aSj:function aSj(a,b,c,d,e,f){var _=this +_.cx=_.CW=_.ch=null +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +aVd:function aVd(a,b){var _=this +_.w=_.r=null +_.a=$ +_.b=a +_.c=b +_.e=_.d=null}, +aVe:function aVe(a){this.a=a}, +aVf:function aVf(a){this.a=a}, +aVg:function aVg(a){this.a=a}, +aVh:function aVh(a,b){this.a=a +this.b=b}, +aVi:function aVi(a){this.a=a}, +aVj:function aVj(a){this.a=a}, +aVk:function aVk(a){this.a=a}, +qw:function qw(){}, +akl:function akl(){}, +adW:function adW(a,b){this.a=a +this.b=b}, +ng:function ng(a,b){this.a=a +this.b=b}, +aI4:function aI4(){}, +aI6:function aI6(){}, +aTU:function aTU(){}, +aTW:function aTW(a,b){this.a=a +this.b=b}, +aTY:function aTY(){}, +aXR:function aXR(a,b,c){var _=this +_.a=!1 +_.b=a +_.c=b +_.d=c}, +a9J:function a9J(a){this.a=a +this.b=0}, +aUs:function aUs(a,b){this.a=a +this.b=b}, +a0e:function a0e(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=!1 +_.f=null +_.w=_.r=$ +_.x=null +_.y=!1}, +ayi:function ayi(){}, +AK:function AK(a,b,c){this.a=a +this.b=b +this.c=c}, +GH:function GH(a,b,c,d,e,f,g){var _=this +_.f=a +_.r=b +_.w=c +_.a=d +_.b=e +_.c=f +_.d=g}, +HY:function HY(){}, +a0o:function a0o(a,b){this.b=a +this.c=b +this.a=null}, +aaE:function aaE(a){this.b=a +this.a=null}, +ayh:function ayh(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=0 +_.r=f +_.w=!0}, +aGN:function aGN(){}, +aGO:function aGO(a,b,c){this.a=a +this.b=b +this.c=c}, +aVo:function aVo(){}, +aVn:function aVn(){}, +aJ5:function aJ5(a,b){this.b=a +this.a=b}, +b_x:function b_x(){}, +nd:function nd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.tI$=a +_.tJ$=b +_.on$=c +_.fG$=d +_.pC$=e +_.om$=f +_.pD$=g +_.tH$=h +_.fR$=i +_.fS$=j +_.c=k +_.d=l +_.e=m +_.f=n +_.r=o +_.w=p +_.a=q +_.b=r}, +b24:function b24(){}, +b25:function b25(){}, +b23:function b23(){}, +MH:function MH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.tI$=a +_.tJ$=b +_.on$=c +_.fG$=d +_.pC$=e +_.om$=f +_.pD$=g +_.tH$=h +_.fR$=i +_.fS$=j +_.c=k +_.d=l +_.e=m +_.f=n +_.r=o +_.w=p +_.a=q +_.b=r}, +Ie:function Ie(a,b,c){var _=this +_.a=a +_.b=-1 +_.c=0 +_.d=null +_.f=_.e=0 +_.w=_.r=-1 +_.x=!1 +_.y=b +_.z=c +_.as=_.Q=$}, +aJd:function aJd(a,b,c,d,e,f){var _=this +_.a=a +_.b=null +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.z=_.y=_.x=_.w=0 +_.Q=-1 +_.ax=_.at=_.as=0}, +ac1:function ac1(a){this.a=a +this.c=this.b=null}, +aTi:function aTi(){}, +vA:function vA(a,b){this.a=a +this.b=b}, +aDV:function aDV(a){this.a=a}, +aX9:function aX9(a,b){this.b=a +this.a=b}, +vz:function vz(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.a=d +_.b=e}, +b8P:function b8P(a,b,c){this.a=a +this.b=b +this.c=c}, +aaR:function aaR(a){this.a=a}, +aVO:function aVO(a){this.a=a}, +pi:function pi(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}, +pQ:function pQ(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=$ +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.Q=j +_.as=$}, +MP:function MP(a,b,c,d,e,f,g,h,i,j,k,l){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}, +MR:function MR(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=null +_.fr=$}, +MQ:function MQ(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}, +aME:function aME(){}, +C7:function C7(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=$}, +aV9:function aV9(a){this.a=a +this.b=null}, +Id:function Id(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=$ +_.e=c +_.r=_.f=$}, +F2:function F2(a,b){this.a=a +this.b=b}, +y1:function y1(a,b,c,d){var _=this +_.c=a +_.d=b +_.a=c +_.b=d}, +Ui:function Ui(a,b){this.a=a +this.b=b}, +eV:function eV(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +tK:function tK(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +aiW:function aiW(a,b,c){this.c=a +this.a=b +this.b=c}, +axM:function axM(a){this.a=a}, +a1o:function a1o(){}, +aDl:function aDl(){}, +aLS:function aLS(){}, +aDG:function aDG(){}, +aBO:function aBO(){}, +aG8:function aG8(){}, +aLO:function aLO(){}, +aOn:function aOn(){}, +aRO:function aRO(){}, +aSl:function aSl(){}, +aDm:function aDm(){}, +aLU:function aLU(){}, +aLz:function aLz(){}, +aVE:function aVE(){}, +aLY:function aLY(){}, +aAD:function aAD(){}, +aNw:function aNw(){}, +aDe:function aDe(){}, +aX3:function aX3(){}, +P7:function P7(){}, +I9:function I9(a,b){this.a=a +this.b=b}, +SJ:function SJ(a){this.a=a}, +aDg:function aDg(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aDh:function aDh(a,b){this.a=a +this.b=b}, +aDi:function aDi(a,b,c){this.a=a +this.b=b +this.c=c}, +a_k:function a_k(a,b,c,d){var _=this +_.a=a +_.b=b +_.d=c +_.e=d}, +Ib:function Ib(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +EG:function EG(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aHO:function aHO(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}, +a4q:function a4q(a,b,c,d,e,f){var _=this +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +Rc:function Rc(a,b,c,d,e,f){var _=this +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +aQU:function aQU(a){this.a=a}, +M9:function M9(){}, +aAM:function aAM(a){this.a=a}, +aAN:function aAN(){}, +aAO:function aAO(){}, +aAP:function aAP(){}, +aH_:function aH_(a,b,c,d,e,f){var _=this +_.ok=null +_.p1=!0 +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +aH2:function aH2(a){this.a=a}, +aH3:function aH3(a,b){this.a=a +this.b=b}, +aH0:function aH0(a){this.a=a}, +aH1:function aH1(a){this.a=a}, +aw7:function aw7(a,b,c,d,e,f){var _=this +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +aw8:function aw8(a){this.a=a}, +aE9:function aE9(a,b,c,d,e,f){var _=this +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +aEb:function aEb(a){this.a=a}, +aEc:function aEc(a){this.a=a}, +aEa:function aEa(a){this.a=a}, +aVr:function aVr(){}, +aVy:function aVy(a,b){this.a=a +this.b=b}, +aVF:function aVF(){}, +aVA:function aVA(a){this.a=a}, +aVD:function aVD(){}, +aVz:function aVz(a){this.a=a}, +aVC:function aVC(a){this.a=a}, +aVp:function aVp(){}, +aVv:function aVv(){}, +aVB:function aVB(){}, +aVx:function aVx(){}, +aVw:function aVw(){}, +aVu:function aVu(a){this.a=a}, +bcY:function bcY(){}, +aVa:function aVa(a){this.a=a}, +aVb:function aVb(a){this.a=a}, +aGX:function aGX(){var _=this +_.a=$ +_.b=null +_.c=!1 +_.d=null +_.f=$}, +aGZ:function aGZ(a){this.a=a}, +aGY:function aGY(a){this.a=a}, +aD2:function aD2(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aCn:function aCn(a,b,c){this.a=a +this.b=b +this.c=c}, +aCo:function aCo(){}, +Tg:function Tg(a,b){this.a=a +this.b=b}, +bbQ:function bbQ(){}, +a6t:function a6t(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +cL:function cL(a){this.a=a}, +aE0:function aE0(a){this.a=a +this.c=this.b=0}, +aAr:function aAr(a,b){var _=this +_.b=a +_.d=_.c=$ +_.e=b}, +aAs:function aAs(a){this.a=a}, +aAt:function aAt(a){this.a=a}, +a2p:function a2p(){}, +a48:function a48(a){this.b=$ +this.c=a}, +a2w:function a2w(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=$}, +a2E:function a2E(a,b,c,d,e,f){var _=this +_.a=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=null}, +aAu:function aAu(a){this.a=a +this.b=$}, +aFe:function aFe(a){this.a=a}, +Na:function Na(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aG7:function aG7(a,b){this.a=a +this.b=b}, +b97:function b97(){}, +r9:function r9(){}, +aiJ:function aiJ(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=$ +_.f=!1 +_.Q=_.z=_.y=_.x=_.w=_.r=$ +_.as=d +_.at=$ +_.ax=null +_.ch=e +_.CW=f}, +EL:function EL(a,b,c,d,e,f,g){var _=this +_.cx=null +_.cy=a +_.a=b +_.b=c +_.c=d +_.d=$ +_.f=!1 +_.Q=_.z=_.y=_.x=_.w=_.r=$ +_.as=e +_.at=$ +_.ax=null +_.ch=f +_.CW=g}, +aDk:function aDk(a,b){this.a=a +this.b=b}, +aek:function aek(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +IB:function IB(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aXk:function aXk(){}, +ahG:function ahG(){}, +ai0:function ai0(){}, +akL:function akL(){}, +akM:function akM(){}, +akN:function akN(){}, +amF:function amF(){}, +amG:function amG(){}, +atJ:function atJ(){}, +bfr:function bfr(){}, +bS4(){return $}, +j3(a,b,c){if(b.h("at<0>").b(a))return new A.V_(a,b.h("@<0>").ak(c).h("V_<1,2>")) +return new A.ye(a,b.h("@<0>").ak(c).h("ye<1,2>"))}, +vx(a){return new A.m8("Field '"+a+"' has not been initialized.")}, +fC(a){return new A.m8("Local '"+a+"' has not been initialized.")}, +nc(a){return new A.m8("Local '"+a+"' has already been initialized.")}, +bCW(a){return new A.l9(a)}, +bcl(a){var s,r=a^48 +if(r<=9)return r +s=a|32 +if(97<=s&&s<=102)return s-87 +return-1}, +bul(a,b){var s=A.bcl(a.charCodeAt(b)),r=A.bcl(a.charCodeAt(b+1)) +return s*16+r-(r&256)}, +a9(a,b){a=a+b&536870911 +a=a+((a&524287)<<10)&536870911 +return a^a>>>6}, +iq(a){a=a+((a&67108863)<<3)&536870911 +a^=a>>>11 +return a+((a&16383)<<15)&536870911}, +bKO(a,b,c){return A.iq(A.a9(A.a9(c,a),b))}, +bq2(a,b,c,d,e){return A.iq(A.a9(A.a9(A.a9(A.a9(e,a),b),c),d))}, +fI(a,b,c){return a}, +biy(a){var s,r +for(s=$.Dg.length,r=0;rc)A.X(A.du(b,0,c,"start",null))}return new A.aT(a,b,c,d.h("aT<0>"))}, +rI(a,b,c,d){if(t.Ee.b(a))return new A.yZ(a,b,c.h("@<0>").ak(d).h("yZ<1,2>")) +return new A.e7(a,b,c.h("@<0>").ak(d).h("e7<1,2>"))}, +bgT(a,b,c){var s="takeCount" +A.qG(b,s) +A.en(b,s) +if(t.Ee.b(a))return new A.MF(a,b,c.h("MF<0>")) +return new A.C0(a,b,c.h("C0<0>"))}, +aT2(a,b,c){var s="count" +if(t.Ee.b(a)){A.qG(b,s) +A.en(b,s) +return new A.EI(a,b,c.h("EI<0>"))}A.qG(b,s) +A.en(b,s) +return new A.tw(a,b,c.h("tw<0>"))}, +bmI(a,b,c){if(c.h("at<0>").b(b))return new A.ME(a,b,c.h("ME<0>")) +return new A.rj(a,b,c.h("rj<0>"))}, +bFV(a,b,c){return new A.yY(a,b,c.h("yY<0>"))}, +cy(){return new A.nq("No element")}, +aI1(){return new A.nq("Too many elements")}, +bnf(){return new A.nq("Too few elements")}, +oS:function oS(){}, +a0h:function a0h(a,b){this.a=a +this.$ti=b}, +ye:function ye(a,b){this.a=a +this.$ti=b}, +V_:function V_(a,b){this.a=a +this.$ti=b}, +Ub:function Ub(){}, +hk:function hk(a,b){this.a=a +this.$ti=b}, +qR:function qR(a,b,c){this.a=a +this.b=b +this.$ti=c}, +qP:function qP(a,b){this.a=a +this.$ti=b}, +ayp:function ayp(a,b){this.a=a +this.b=b}, +ayo:function ayo(a,b){this.a=a +this.b=b}, +ayn:function ayn(a){this.a=a}, +qQ:function qQ(a,b){this.a=a +this.$ti=b}, +m8:function m8(a){this.a=a}, +l9:function l9(a){this.a=a}, +bcM:function bcM(){}, +aSm:function aSm(){}, +at:function at(){}, +aI:function aI(){}, +aT:function aT(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +cR:function cR(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +e7:function e7(a,b,c){this.a=a +this.b=b +this.$ti=c}, +yZ:function yZ(a,b,c){this.a=a +this.b=b +this.$ti=c}, +bt:function bt(a,b,c){var _=this +_.a=null +_.b=a +_.c=b +_.$ti=c}, +W:function W(a,b,c){this.a=a +this.b=b +this.$ti=c}, +bg:function bg(a,b,c){this.a=a +this.b=b +this.$ti=c}, +fG:function fG(a,b,c){this.a=a +this.b=b +this.$ti=c}, +m0:function m0(a,b,c){this.a=a +this.b=b +this.$ti=c}, +v_:function v_(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=null +_.$ti=d}, +C0:function C0(a,b,c){this.a=a +this.b=b +this.$ti=c}, +MF:function MF(a,b,c){this.a=a +this.b=b +this.$ti=c}, +acT:function acT(a,b,c){this.a=a +this.b=b +this.$ti=c}, +Sy:function Sy(a,b,c){this.a=a +this.b=b +this.$ti=c}, +acU:function acU(a,b,c){var _=this +_.a=a +_.b=b +_.c=!1 +_.$ti=c}, +tw:function tw(a,b,c){this.a=a +this.b=b +this.$ti=c}, +EI:function EI(a,b,c){this.a=a +this.b=b +this.$ti=c}, +abK:function abK(a,b,c){this.a=a +this.b=b +this.$ti=c}, +BN:function BN(a,b,c){this.a=a +this.b=b +this.$ti=c}, +abL:function abL(a,b,c){var _=this +_.a=a +_.b=b +_.c=!1 +_.$ti=c}, +j6:function j6(a){this.$ti=a}, +a3a:function a3a(a){this.$ti=a}, +rj:function rj(a,b,c){this.a=a +this.b=b +this.$ti=c}, +ME:function ME(a,b,c){this.a=a +this.b=b +this.$ti=c}, +a3U:function a3U(a,b,c){this.a=a +this.b=b +this.$ti=c}, +ca:function ca(a,b){this.a=a +this.$ti=b}, +nA:function nA(a,b){this.a=a +this.$ti=b}, +rx:function rx(a,b,c){this.a=a +this.b=b +this.$ti=c}, +yY:function yY(a,b,c){this.a=a +this.b=b +this.$ti=c}, +Fq:function Fq(a,b,c){var _=this +_.a=a +_.b=b +_.c=-1 +_.$ti=c}, +N0:function N0(){}, +ae0:function ae0(){}, +Iv:function Iv(){}, +cz:function cz(a,b){this.a=a +this.$ti=b}, +fX:function fX(a){this.a=a}, +Yz:function Yz(){}, +bei(a,b,c){var s,r,q,p,o,n,m=A.iN(new A.bk(a,A.w(a).h("bk<1>")),!0,b),l=m.length,k=0 +while(!0){if(!(k").ak(c).h("bV<1,2>")) +n.$keys=m +return n}return new A.yy(A.bnL(a,b,c),b.h("@<0>").ak(c).h("yy<1,2>"))}, +azX(){throw A.d(A.af("Cannot modify unmodifiable Map"))}, +bej(){throw A.d(A.af("Cannot modify constant Set"))}, +biw(a,b){var s=new A.vn(a,b.h("vn<0>")) +s.asy(a) +return s}, +buU(a){var s=v.mangledGlobalNames[a] +if(s!=null)return s +return"minified:"+a}, +bu_(a,b){var s +if(b!=null){s=b.x +if(s!=null)return s}return t.dC.b(a)}, +j(a){var s +if(typeof a=="string")return a +if(typeof a=="number"){if(a!==0)return""+a}else if(!0===a)return"true" +else if(!1===a)return"false" +else if(a==null)return"null" +s=J.i1(a) +return s}, +a_(a,b,c,d,e,f){return new A.FC(a,c,d,e,f)}, +c3H(a,b,c,d,e,f){return new A.FC(a,c,d,e,f)}, +jH(a,b,c,d,e,f){return new A.FC(a,c,d,e,f)}, +eT(a){var s,r=$.boR +if(r==null)r=$.boR=Symbol("identityHashCode") +s=a[r] +if(s==null){s=Math.random()*0x3fffffff|0 +a[r]=s}return s}, +pR(a,b){var s,r,q,p,o,n=null,m=/^\s*[+-]?((0x[a-f0-9]+)|(\d+)|([a-z0-9]+))\s*$/i.exec(a) +if(m==null)return n +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.d(A.du(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)}, +ow(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.d.eC(a) +if(r==="NaN"||r==="+NaN"||r==="-NaN")return s +return null}return s}, +aOr(a){return A.bIx(a)}, +bIx(a){var s,r,q,p +if(a instanceof A.B)return A.fy(A.b8(a),null) +s=J.nO(a) +if(s===B.Wv||s===B.WJ||t.kk.b(a)){r=B.ux(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.fy(A.b8(a),null)}, +boT(a){if(a==null||typeof a=="number"||A.kZ(a))return J.i1(a) +if(typeof a=="string")return JSON.stringify(a) +if(a instanceof A.uI)return a.j(0) +if(a instanceof A.oV)return a.a9j(!0) +return"Instance of '"+A.aOr(a)+"'"}, +bIz(){return Date.now()}, +bII(){var s,r +if($.aOs!==0)return +$.aOs=1000 +if(typeof window=="undefined")return +s=window +if(s==null)return +if(!!s.dartUseDateNowForTicks)return +r=s.performance +if(r==null)return +if(typeof r.now!="function")return +$.aOs=1e6 +$.GN=new A.aOq(r)}, +bIy(){if(!!self.location)return self.location.href +return null}, +boQ(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.bIJ(a)}return A.boQ(a)}, +bIK(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.d(A.du(a,0,1114111,null,null))}, +mt(a){if(a.date===void 0)a.date=new Date(a.a) +return a.date}, +bIH(a){return a.b?A.mt(a).getUTCFullYear()+0:A.mt(a).getFullYear()+0}, +bIF(a){return a.b?A.mt(a).getUTCMonth()+1:A.mt(a).getMonth()+1}, +bIB(a){return a.b?A.mt(a).getUTCDate()+0:A.mt(a).getDate()+0}, +bIC(a){return a.b?A.mt(a).getUTCHours()+0:A.mt(a).getHours()+0}, +bIE(a){return a.b?A.mt(a).getUTCMinutes()+0:A.mt(a).getMinutes()+0}, +bIG(a){return a.b?A.mt(a).getUTCSeconds()+0:A.mt(a).getSeconds()+0}, +bID(a){return a.b?A.mt(a).getUTCMilliseconds()+0:A.mt(a).getMilliseconds()+0}, +w4(a,b,c){var s,r,q={} +q.a=0 +s=[] +r=[] +q.a=b.length +B.b.I(s,b) +q.b="" +if(c!=null&&c.a!==0)c.al(0,new A.aOp(q,r,s)) +return J.bBs(a,new A.FC(B.a9J,0,s,r,0))}, +boS(a,b,c){var s,r,q +if(Array.isArray(b))s=c==null||c.a===0 +else s=!1 +if(s){r=b.length +if(r===0){if(!!a.$0)return a.$0()}else if(r===1){if(!!a.$1)return a.$1(b[0])}else if(r===2){if(!!a.$2)return a.$2(b[0],b[1])}else if(r===3){if(!!a.$3)return a.$3(b[0],b[1],b[2])}else if(r===4){if(!!a.$4)return a.$4(b[0],b[1],b[2],b[3])}else if(r===5)if(!!a.$5)return a.$5(b[0],b[1],b[2],b[3],b[4]) +q=a[""+"$"+r] +if(q!=null)return q.apply(a,b)}return A.bIw(a,b,c)}, +bIw(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g=Array.isArray(b)?b:A.ab(b,!0,t.z),f=g.length,e=a.$R +if(fn)return A.w4(a,g,null) +if(fe)return A.w4(a,g,c) +if(g===b)g=A.ab(g,!0,t.z) +l=Object.keys(q) +if(c==null)for(r=l.length,k=0;k=s)return A.fs(b,s,a,null,r) +return A.a9C(b,r,null)}, +bSq(a,b,c){if(a<0||a>c)return A.du(a,0,c,"start",null) +if(b!=null)if(bc)return A.du(b,a,c,"end",null) +return new A.n_(!0,b,"end",null)}, +D9(a){return new A.n_(!0,a,null,null)}, +hg(a){return a}, +d(a){return A.btX(new Error(),a)}, +btX(a,b){var s +if(b==null)b=new A.tH() +a.dartException=b +s=A.bWo +if("defineProperty" in Object){Object.defineProperty(a,"message",{get:s}) +a.name=""}else a.toString=s +return a}, +bWo(){return J.i1(this.dartException)}, +X(a){throw A.d(a)}, +bd8(a,b){throw A.btX(b,a)}, +E(a){throw A.d(A.db(a))}, +tI(a){var s,r,q,p,o,n +a=A.bcV(a.replace(String({}),"$receiver$")) +s=a.match(/\\\$[a-zA-Z]+\\\$/g) +if(s==null)s=A.b([],t.T) +r=s.indexOf("\\$arguments\\$") +q=s.indexOf("\\$argumentsExpr\\$") +p=s.indexOf("\\$expr\\$") +o=s.indexOf("\\$method\\$") +n=s.indexOf("\\$receiver\\$") +return new A.aWP(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)}, +aWQ(a){return function($expr$){var $argumentsExpr$="$arguments$" +try{$expr$.$method$($argumentsExpr$)}catch(s){return s.message}}(a)}, +bqB(a){return function($expr$){try{$expr$.$method$}catch(s){return s.message}}(a)}, +bfs(a,b){var s=b==null,r=s?null:b.method +return new A.a5J(a,r,s?null:b.receiver)}, +b2(a){if(a==null)return new A.a7I(a) +if(a instanceof A.MT)return A.xB(a,a.a) +if(typeof a!=="object")return a +if("dartException" in a)return A.xB(a,a.dartException) +return A.bQF(a)}, +xB(a,b){if(t.Lt.b(b))if(b.$thrownJsError==null)b.$thrownJsError=a +return b}, +bQF(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.dU(r,16)&8191)===10)switch(q){case 438:return A.xB(a,A.bfs(A.j(s)+" (Error "+q+")",null)) +case 445:case 5007:A.j(s) +return A.xB(a,new A.Po())}}if(a instanceof TypeError){p=$.by1() +o=$.by2() +n=$.by3() +m=$.by4() +l=$.by7() +k=$.by8() +j=$.by6() +$.by5() +i=$.bya() +h=$.by9() +g=p.pT(s) +if(g!=null)return A.xB(a,A.bfs(s,g)) +else{g=o.pT(s) +if(g!=null){g.method="call" +return A.xB(a,A.bfs(s,g))}else if(n.pT(s)!=null||m.pT(s)!=null||l.pT(s)!=null||k.pT(s)!=null||j.pT(s)!=null||m.pT(s)!=null||i.pT(s)!=null||h.pT(s)!=null)return A.xB(a,new A.Po())}return A.xB(a,new A.ae_(typeof s=="string"?s:""))}if(a instanceof RangeError){if(typeof s=="string"&&s.indexOf("call stack")!==-1)return new A.Sh() +s=function(b){try{return String(b)}catch(f){}return null}(a) +return A.xB(a,new A.n_(!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.Sh() +return a}, +bC(a){var s +if(a instanceof A.MT)return a.b +if(a==null)return new A.XA(a) +s=a.$cachedTrace +if(s!=null)return s +s=new A.XA(a) +if(typeof a==="object")a.$cachedTrace=s +return s}, +mR(a){if(a==null)return J.a1(a) +if(typeof a=="object")return A.eT(a) +return J.a1(a)}, +bRM(a){if(typeof a=="number")return B.c.gL(a) +if(a instanceof A.Y0)return A.eT(a) +if(a instanceof A.oV)return a.gL(a) +if(a instanceof A.fX)return a.gL(0) +return A.mR(a)}, +btL(a,b){var s,r,q,p=a.length +for(s=0;s")) +s.c=a.e +return s}, +c3K(a,b,c){Object.defineProperty(a,b,{value:c,enumerable:false,writable:true,configurable:true})}, +bTL(a){var s,r,q,p,o,n=$.btU.$1(a),m=$.bc5[n] +if(m!=null){Object.defineProperty(a,v.dispatchPropertyName,{value:m,enumerable:false,writable:true,configurable:true}) +return m.i}s=$.bcv[n] +if(s!=null)return s +r=v.interceptorsByTag[n] +if(r==null){q=$.btf.$2(a,n) +if(q!=null){m=$.bc5[q] +if(m!=null){Object.defineProperty(a,v.dispatchPropertyName,{value:m,enumerable:false,writable:true,configurable:true}) +return m.i}s=$.bcv[q] +if(s!=null)return s +r=v.interceptorsByTag[q] +n=q}}if(r==null)return null +s=r.prototype +p=n[0] +if(p==="!"){m=A.bcJ(s) +$.bc5[n]=m +Object.defineProperty(a,v.dispatchPropertyName,{value:m,enumerable:false,writable:true,configurable:true}) +return m.i}if(p==="~"){$.bcv[n]=s +return s}if(p==="-"){o=A.bcJ(s) +Object.defineProperty(Object.getPrototypeOf(a),v.dispatchPropertyName,{value:o,enumerable:false,writable:true,configurable:true}) +return o.i}if(p==="+")return A.but(a,s) +if(p==="*")throw A.d(A.d_(n)) +if(v.leafTags[n]===true){o=A.bcJ(s) +Object.defineProperty(Object.getPrototypeOf(a),v.dispatchPropertyName,{value:o,enumerable:false,writable:true,configurable:true}) +return o.i}else return A.but(a,s)}, +but(a,b){var s=Object.getPrototypeOf(a) +Object.defineProperty(s,v.dispatchPropertyName,{value:J.biB(b,s,null,null),enumerable:false,writable:true,configurable:true}) +return b}, +bcJ(a){return J.biB(a,!1,null,!!a.$icG)}, +bTP(a,b,c){var s=b.prototype +if(v.leafTags[a]===true)return A.bcJ(s) +else return J.biB(s,c,null,null)}, +bTd(){if(!0===$.biu)return +$.biu=!0 +A.bTe()}, +bTe(){var s,r,q,p,o,n,m,l +$.bc5=Object.create(null) +$.bcv=Object.create(null) +A.bTc() +s=v.interceptorsByTag +r=Object.getOwnPropertyNames(s) +if(typeof window!="undefined"){window +q=function(){} +for(p=0;p=0 +else if(b instanceof A.rC){s=B.d.c5(a,c) +return b.b.test(s)}else return!J.avC(b,B.d.c5(a,c)).gaA(0)}, +bio(a){if(a.indexOf("$",0)>=0)return a.replace(/\$/g,"$$$$") +return a}, +bVO(a,b,c,d){var s=b.Ql(a,d) +if(s==null)return a +return A.biM(a,s.b.index,s.gi7(0),c)}, +bcV(a){if(/[[\]{}()*+?.\\^$|]/.test(a))return a.replace(/[[\]{}()*+?.\\^$|]/g,"\\$&") +return a}, +ea(a,b,c){var s +if(typeof b=="string")return A.bVM(a,b,c) +if(b instanceof A.rC){s=b.ga6r() +s.lastIndex=0 +return a.replace(s,A.bio(c))}return A.bVL(a,b,c)}, +bVL(a,b,c){var s,r,q,p +for(s=J.avC(b,a),s=s.gar(s),r=0,q="";s.H();){p=s.ga1(s) +q=q+a.substring(r,p.gp5(p))+c +r=p.gi7(p)}s=q+a.substring(r) +return s.charCodeAt(0)==0?s:s}, +bVM(a,b,c){var s,r,q +if(b===""){if(a==="")return c +s=a.length +r=""+c +for(q=0;q=0)return a.split(b).join(c) +return a.replace(new RegExp(A.bcV(b),"g"),A.bio(c))}, +bt9(a){return a}, +Df(a,b,c,d){var s,r,q,p,o,n,m +for(s=b.Cs(0,a),s=new A.IQ(s.a,s.b,s.c),r=t.Qz,q=0,p="";s.H();){o=s.d +if(o==null)o=r.a(o) +n=o.b +m=n.index +p=p+A.j(A.bt9(B.d.am(a,q,m)))+A.j(c.$1(o)) +q=m+n[0].length}s=p+A.j(A.bt9(B.d.c5(a,q))) +return s.charCodeAt(0)==0?s:s}, +buK(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.biM(a,s,s+b.length,c)}if(b instanceof A.rC)return d===0?a.replace(b.b,A.bio(c)):A.bVO(a,b,c,d) +r=J.bB_(b,a,d) +q=r.gar(r) +if(!q.H())return a +p=q.ga1(q) +return B.d.j1(a,p.gp5(p),p.gi7(p),c)}, +bVN(a,b,c,d){var s,r,q=b.Ct(0,a,d),p=new A.IQ(q.a,q.b,q.c) +if(!p.H())return a +s=p.d +if(s==null)s=t.Qz.a(s) +r=A.j(c.$1(s)) +return B.d.j1(a,s.b.index,s.gi7(0),r)}, +biM(a,b,c,d){return a.substring(0,b)+d+a.substring(c)}, +bI:function bI(a,b){this.a=a +this.b=b}, +JK:function JK(a,b){this.a=a +this.b=b}, +Wq:function Wq(a,b){this.a=a +this.b=b}, +JL:function JL(a,b){this.a=a +this.b=b}, +anW:function anW(a,b){this.a=a +this.b=b}, +anX:function anX(a,b){this.a=a +this.b=b}, +xk:function xk(a,b,c){this.a=a +this.b=b +this.c=c}, +anY:function anY(a,b,c){this.a=a +this.b=b +this.c=c}, +Wr:function Wr(a,b,c){this.a=a +this.b=b +this.c=c}, +Ws:function Ws(a,b,c){this.a=a +this.b=b +this.c=c}, +anZ:function anZ(a,b,c){this.a=a +this.b=b +this.c=c}, +ao_:function ao_(a,b,c){this.a=a +this.b=b +this.c=c}, +Wt:function Wt(a,b,c){this.a=a +this.b=b +this.c=c}, +ao0:function ao0(a){this.a=a}, +Wu:function Wu(a){this.a=a}, +ao1:function ao1(a){this.a=a}, +ao2:function ao2(a){this.a=a}, +yy:function yy(a,b){this.a=a +this.$ti=b}, +Eb:function Eb(){}, +azY:function azY(a,b,c){this.a=a +this.b=b +this.c=c}, +bV:function bV(a,b,c){this.a=a +this.b=b +this.$ti=c}, +CS:function CS(a,b){this.a=a +this.$ti=b}, +x9:function x9(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +cc:function cc(a,b){this.a=a +this.$ti=b}, +LU:function LU(){}, +i4:function i4(a,b,c){this.a=a +this.b=b +this.$ti=c}, +h8:function h8(a,b){this.a=a +this.$ti=b}, +a5r:function a5r(){}, +vn:function vn(a,b){this.a=a +this.$ti=b}, +FC:function FC(a,b,c,d,e){var _=this +_.a=a +_.c=b +_.d=c +_.e=d +_.f=e}, +aOq:function aOq(a){this.a=a}, +aOp:function aOp(a,b,c){this.a=a +this.b=b +this.c=c}, +aWP:function aWP(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +Po:function Po(){}, +a5J:function a5J(a,b,c){this.a=a +this.b=b +this.c=c}, +ae_:function ae_(a){this.a=a}, +a7I:function a7I(a){this.a=a}, +MT:function MT(a,b){this.a=a +this.b=b}, +XA:function XA(a){this.a=a +this.b=null}, +uI:function uI(){}, +a11:function a11(){}, +a12:function a12(){}, +ad7:function ad7(){}, +acr:function acr(){}, +DD:function DD(a,b){this.a=a +this.b=b}, +ahu:function ahu(a){this.a=a}, +aaS:function aaS(a){this.a=a}, +b5M:function b5M(){}, +jI:function jI(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +aIh:function aIh(a){this.a=a}, +aIg:function aIg(a,b){this.a=a +this.b=b}, +aIf:function aIf(a){this.a=a}, +aJp:function aJp(a,b){var _=this +_.a=a +_.b=b +_.d=_.c=null}, +bk:function bk(a,b){this.a=a +this.$ti=b}, +FR:function FR(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=null +_.$ti=c}, +O7:function O7(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +zR:function zR(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +bcn:function bcn(a){this.a=a}, +bco:function bco(a){this.a=a}, +bcp:function bcp(a){this.a=a}, +oV:function oV(){}, +anT:function anT(){}, +anU:function anU(){}, +anV:function anV(){}, +rC:function rC(a,b){var _=this +_.a=a +_.b=b +_.d=_.c=null}, +Jt:function Jt(a){this.b=a}, +af8:function af8(a,b,c){this.a=a +this.b=b +this.c=c}, +IQ:function IQ(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +HU:function HU(a,b,c){this.a=a +this.b=b +this.c=c}, +aqw:function aqw(a,b,c){this.a=a +this.b=b +this.c=c}, +b76:function b76(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +bW3(a){A.bd8(new A.m8("Field '"+a+u.N),new Error())}, +c(){A.bd8(new A.m8("Field '' has not been initialized."),new Error())}, +aj(){A.bd8(new A.m8("Field '' has already been initialized."),new Error())}, +N(){A.bd8(new A.m8("Field '' has been assigned during initialization."),new Error())}, +bn(a){var s=new A.b__(a) +return s.b=s}, +bhp(a,b){var s=new A.b2P(a,b) +return s.b=s}, +b__:function b__(a){this.a=a +this.b=null}, +b2P:function b2P(a,b){this.a=a +this.b=null +this.c=b}, +nJ(a,b,c){}, +eG(a){var s,r,q +if(t.ha.b(a))return a +s=J.al(a) +r=A.bc(s.gF(a),null,!1,t.z) +for(q=0;q>>0!==a||a>=c)throw A.d(A.Ki(b,a))}, +xw(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.d(A.bSq(a,b,c)) +if(b==null)return c +return b}, +Av:function Av(){}, +Pe:function Pe(){}, +Pb:function Pb(){}, +Gi:function Gi(){}, +vL:function vL(){}, +mi:function mi(){}, +Aw:function Aw(){}, +a7o:function a7o(){}, +a7p:function a7p(){}, +Pd:function Pd(){}, +a7q:function a7q(){}, +Gj:function Gj(){}, +Gk:function Gk(){}, +Pf:function Pf(){}, +rQ:function rQ(){}, +VZ:function VZ(){}, +W_:function W_(){}, +W0:function W0(){}, +W1:function W1(){}, +bpk(a,b){var s=b.c +return s==null?b.c=A.bhH(a,b.x,!0):s}, +bgw(a,b){var s=b.c +return s==null?b.c=A.Y4(a,"an",[b.x]):s}, +bpl(a){var s=a.w +if(s===6||s===7||s===8)return A.bpl(a.x) +return s===12||s===13}, +bJo(a){return a.as}, +bcR(a,b){var s,r=b.length +for(s=0;s") +for(r=1;r=0)p+=" "+r[q];++q}return p+"})"}, +bsz(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=", " +if(a5!=null){s=a5.length +if(a4==null){a4=A.b([],t.T) +r=null}else r=a4.length +q=a4.length +for(p=s;p>0;--p)a4.push("T"+(q+p)) +for(o=t.X,n=t.ub,m="<",l="",p=0;p0){a0+=a1+"[" +for(a1="",p=0;p0){a0+=a1+"{" +for(a1="",p=0;p "+a}, +fy(a,b){var s,r,q,p,o,n,m=a.w +if(m===5)return"erased" +if(m===2)return"dynamic" +if(m===3)return"void" +if(m===1)return"Never" +if(m===4)return"any" +if(m===6)return A.fy(a.x,b) +if(m===7){s=a.x +r=A.fy(s,b) +q=s.w +return(q===12||q===13?"("+r+")":r)+"?"}if(m===8)return"FutureOr<"+A.fy(a.x,b)+">" +if(m===9){p=A.bQE(a.x) +o=a.y +return o.length>0?p+("<"+A.bt2(o,b)+">"):p}if(m===11)return A.bQf(a,b) +if(m===12)return A.bsz(a,b,null) +if(m===13)return A.bsz(a.x,b,a.y) +if(m===14){n=a.x +return b[b.length-1-n]}return"?"}, +bQE(a){var s=v.mangledGlobalNames[a] +if(s!=null)return s +return"minified:"+a}, +bO0(a,b){var s=a.tR[b] +for(;typeof s=="string";)s=a.tR[s] +return s}, +bO_(a,b){var s,r,q,p,o,n=a.eT,m=n[b] +if(m==null)return A.as9(a,b,!1) +else if(typeof m=="number"){s=m +r=A.Y5(a,5,"#") +q=A.b8g(s) +for(p=0;p0)p+="<"+A.Y3(c)+">" +s=a.eC.get(p) +if(s!=null)return s +r=new A.no(null,null) +r.w=9 +r.x=b +r.y=c +if(c.length>0)r.c=c[0] +r.as=p +q=A.u6(a,r) +a.eC.set(p,q) +return q}, +bhF(a,b,c){var s,r,q,p,o,n +if(b.w===10){s=b.x +r=b.y.concat(c)}else{r=c +s=b}q=s.as+(";<"+A.Y3(r)+">") +p=a.eC.get(q) +if(p!=null)return p +o=new A.no(null,null) +o.w=10 +o.x=s +o.y=r +o.as=q +n=A.u6(a,o) +a.eC.set(q,n) +return n}, +brO(a,b,c){var s,r,q="+"+(b+"("+A.Y3(c)+")"),p=a.eC.get(q) +if(p!=null)return p +s=new A.no(null,null) +s.w=11 +s.x=b +s.y=c +s.as=q +r=A.u6(a,s) +a.eC.set(q,r) +return r}, +brM(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.Y3(m) +if(j>0){s=l>0?",":"" +g+=s+"["+A.Y3(k)+"]"}if(h>0){s=l>0?",":"" +g+=s+"{"+A.bNS(i)+"}"}r=n+(g+")") +q=a.eC.get(r) +if(q!=null)return q +p=new A.no(null,null) +p.w=12 +p.x=b +p.y=c +p.as=r +o=A.u6(a,p) +a.eC.set(r,o) +return o}, +bhG(a,b,c,d){var s,r=b.as+("<"+A.Y3(c)+">"),q=a.eC.get(r) +if(q!=null)return q +s=A.bNU(a,b,c,r,d) +a.eC.set(r,s) +return s}, +bNU(a,b,c,d,e){var s,r,q,p,o,n,m,l +if(e){s=c.length +r=A.b8g(s) +for(q=0,p=0;p0){n=A.uf(a,b,r,0) +m=A.Ke(a,c,r,0) +return A.bhG(a,n,m,c!==m)}}l=new A.no(null,null) +l.w=13 +l.x=b +l.y=c +l.as=d +return A.u6(a,l)}, +bru(a,b,c,d){return{u:a,e:b,r:c,s:[],p:0,n:d}}, +brw(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.bNd(r+1,q,l,k) +else if((((q|32)>>>0)-97&65535)<26||q===95||q===36||q===124)r=A.brv(a,r,l,k,!1) +else if(q===46)r=A.brv(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.xi(a.u,a.e,k.pop())) +break +case 94:k.push(A.bNX(a.u,k.pop())) +break +case 35:k.push(A.Y5(a.u,5,"#")) +break +case 64:k.push(A.Y5(a.u,2,"@")) +break +case 126:k.push(A.Y5(a.u,3,"~")) +break +case 60:k.push(a.p) +a.p=k.length +break +case 62:A.bNf(a,k) +break +case 38:A.bNe(a,k) +break +case 42:p=a.u +k.push(A.brP(p,A.xi(p,a.e,k.pop()),a.n)) +break +case 63:p=a.u +k.push(A.bhH(p,A.xi(p,a.e,k.pop()),a.n)) +break +case 47:p=a.u +k.push(A.brN(p,A.xi(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.bNc(a,k) +break +case 91:k.push(a.p) +a.p=k.length +break +case 93:o=k.splice(a.p) +A.brx(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.bNh(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.xi(a.u,a.e,m)}, +bNd(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}, +brv(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===10)o=o.x +n=A.bO0(s,o.x)[p] +if(n==null)A.X('No "'+p+'" in "'+A.bJo(o)+'"') +d.push(A.Y6(s,o,n))}else d.push(p) +return m}, +bNf(a,b){var s,r=a.u,q=A.brt(a,b),p=b.pop() +if(typeof p=="string")b.push(A.Y4(r,p,q)) +else{s=A.xi(r,a.e,p) +switch(s.w){case 12:b.push(A.bhG(r,s,q,a.n)) +break +default:b.push(A.bhF(r,s,q)) +break}}}, +bNc(a,b){var s,r,q,p,o,n=null,m=a.u,l=b.pop() +if(typeof l=="number")switch(l){case-1:s=b.pop() +r=n +break +case-2:r=b.pop() +s=n +break +default:b.push(l) +r=n +s=r +break}else{b.push(l) +r=n +s=r}q=A.brt(a,b) +l=b.pop() +switch(l){case-3:l=b.pop() +if(s==null)s=m.sEA +if(r==null)r=m.sEA +p=A.xi(m,a.e,l) +o=new A.ajB() +o.a=q +o.b=s +o.c=r +b.push(A.brM(m,p,o)) +return +case-4:b.push(A.brO(m,b.pop(),q)) +return +default:throw A.d(A.kg("Unexpected state under `()`: "+A.j(l)))}}, +bNe(a,b){var s=b.pop() +if(0===s){b.push(A.Y5(a.u,1,"0&")) +return}if(1===s){b.push(A.Y5(a.u,4,"1&")) +return}throw A.d(A.kg("Unexpected extended operation "+A.j(s)))}, +brt(a,b){var s=b.splice(a.p) +A.brx(a.u,a.e,s) +a.p=b.pop() +return s}, +xi(a,b,c){if(typeof c=="string")return A.Y4(a,c,a.sEA) +else if(typeof c=="number"){b.toString +return A.bNg(a,b,c)}else return c}, +brx(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}, +no:function no(a,b){var _=this +_.a=a +_.b=b +_.r=_.f=_.d=_.c=null +_.w=0 +_.as=_.Q=_.z=_.y=_.x=null}, +ajB:function ajB(){this.c=this.b=this.a=null}, +Y0:function Y0(a){this.a=a}, +aiK:function aiK(){}, +Y1:function Y1(a){this.a=a}, +bT5(a,b){var s,r +if(B.d.c4(a,"Digit"))return a.charCodeAt(5) +s=b.charCodeAt(0) +if(b.length<=1)r=!(s>=32&&s<=127) +else r=!0 +if(r){r=B.oF.i(0,a) +return r==null?null:r.charCodeAt(0)}if(!(s>=$.bz6()&&s<=$.bz7()))r=s>=$.bzh()&&s<=$.bzi() +else r=!0 +if(r)return b.toLowerCase().charCodeAt(0) +return null}, +bNJ(a){return new A.b78(a,A.OG(B.oF.ghw(B.oF).jo(0,new A.b79(),t.q9),t.S,t.N))}, +bQD(a){var s,r,q,p,o=a.ahm(),n=A.D(t.N,t.S) +for(s=a.a,r=0;r=2)return null +return a.toLowerCase().charCodeAt(0)}, +b78:function b78(a,b){this.a=a +this.b=b +this.c=0}, +b79:function b79(){}, +Ov:function Ov(a){this.a=a}, +d4:function d4(a,b){this.a=a +this.b=b}, +fZ:function fZ(a,b){this.a=a +this.b=b}, +bMq(){var s,r,q={} +if(self.scheduleImmediate!=null)return A.bRb() +if(self.MutationObserver!=null&&self.document!=null){s=self.document.createElement("div") +r=self.document.createElement("span") +q.a=null +new self.MutationObserver(A.uh(new A.aYU(q),1)).observe(s,{childList:true}) +return new A.aYT(q,s,r)}else if(self.setImmediate!=null)return A.bRc() +return A.bRd()}, +bMr(a){self.scheduleImmediate(A.uh(new A.aYV(a),0))}, +bMs(a){self.setImmediate(A.uh(new A.aYW(a),0))}, +bMt(a){A.bqt(B.G,a)}, +bqt(a,b){var s=B.f.cN(a.a,1000) +return A.bNN(s<0?0:s,b)}, +bLE(a,b){var s=B.f.cN(a.a,1000) +return A.bNO(s<0?0:s,b)}, +bNN(a,b){var s=new A.XZ(!0) +s.at7(a,b) +return s}, +bNO(a,b){var s=new A.XZ(!1) +s.at8(a,b) +return s}, +r(a){return new A.TR(new A.aM($.aK,a.h("aM<0>")),a.h("TR<0>"))}, +q(a,b){a.$2(0,null) +b.b=!0 +return b.a}, +x(a,b){A.bOj(a,b)}, +p(a,b){b.fC(0,a)}, +o(a,b){b.lq(A.b2(a),A.bC(a))}, +bOj(a,b){var s,r,q=new A.b8C(b),p=new A.b8D(b) +if(a instanceof A.aM)a.a9d(q,p,t.z) +else{s=t.z +if(t.L0.b(a))a.k7(q,p,s) +else{r=new A.aM($.aK,t.LR) +r.a=8 +r.c=a +r.a9d(q,p,s)}}}, +t(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 $.aK.MG(new A.b9D(s),t.H,t.S,t.z)}, +brI(a,b,c){return 0}, +awy(a,b){var s=A.fI(a,"error",t.K) +return new A.a_d(s,b==null?A.Dw(a):b)}, +Dw(a){var s +if(t.Lt.b(a)){s=a.gGA() +if(s!=null)return s}return B.uM}, +bmP(a,b){var s=new A.aM($.aK,b.h("aM<0>")) +A.dn(B.G,new A.aFl(s,a)) +return s}, +bFu(a,b){var s=new A.aM($.aK,b.h("aM<0>")) +A.iC(new A.aFk(s,a)) +return s}, +e5(a,b){var s=a==null?b.a(a):a,r=new A.aM($.aK,b.h("aM<0>")) +r.pc(s) +return r}, +bf8(a,b,c){var s,r +A.fI(a,"error",t.K) +s=$.aK +if(s!==B.aE){r=s.vL(a,b) +if(r!=null){a=r.a +b=r.b}}if(b==null)b=A.Dw(a) +s=new A.aM($.aK,c.h("aM<0>")) +s.H0(a,b) +return s}, +vb(a,b,c){var s,r +if(b==null)s=!c.b(null) +else s=!1 +if(s)throw A.d(A.hH(null,"computation","The type parameter is not nullable")) +r=new A.aM($.aK,c.h("aM<0>")) +A.dn(a,new A.aFj(b,r,c)) +return r}, +f2(a,b){var s,r,q,p,o,n,m,l,k={},j=null,i=!1,h=new A.aM($.aK,b.h("aM>")) +k.a=null +k.b=0 +k.c=k.d=null +s=new A.aFn(k,j,i,h) +try{for(n=J.az(a),m=t.P;n.H();){r=n.ga1(n) +q=k.b +r.k7(new A.aFm(k,q,h,b,j,i),s,m);++k.b}n=k.b +if(n===0){n=h +n.xx(A.b([],b.h("v<0>"))) +return n}k.a=A.bc(n,null,!1,b.h("0?"))}catch(l){p=A.b2(l) +o=A.bC(l) +if(k.b===0||i)return A.bf8(p,o,b.h("H<0>")) +else{k.d=p +k.c=o}}return h}, +bFt(a,b,c,d){var s,r,q=new A.aFi(d,null,b,c) +if(a instanceof A.aM){s=$.aK +r=new A.aM(s,c.h("aM<0>")) +if(s!==B.aE)q=s.MG(q,c.h("0/"),t.K,t.Km) +a.xq(new A.nF(r,2,null,q,a.$ti.h("@<1>").ak(c).h("nF<1,2>"))) +return r}return a.k7(new A.aFh(c),q,c)}, +auM(a,b,c){var s=$.aK.vL(b,c) +if(s!=null){b=s.a +c=s.b}else if(c==null)c=A.Dw(b) +a.jc(b,c)}, +cO(a,b){var s=new A.aM($.aK,b.h("aM<0>")) +s.a=8 +s.c=a +return s}, +bhj(a,b){var s,r +for(;s=a.a,(s&4)!==0;)a=a.c +s|=b.a&1 +a.a=s +if((s&24)!==0){r=b.I9() +b.H7(a) +A.Je(b,r)}else{r=b.c +b.a8c(a) +a.RZ(r)}}, +bMZ(a,b){var s,r,q={},p=q.a=a +for(;s=p.a,(s&4)!==0;){p=p.c +q.a=p}if((s&24)===0){r=b.c +b.a8c(p) +q.a.RZ(r) +return}if((s&16)===0&&b.c==null){b.H7(p) +return}b.a^=2 +b.b.wR(new A.b2d(q,b))}, +Je(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f={},e=f.a=a +for(s=t.L0;!0;){r={} +q=e.a +p=(q&16)===0 +o=!p +if(b==null){if(o&&(q&1)===0){s=e.c +e.b.L7(s.a,s.b)}return}r.a=b +n=b.a +for(e=b;n!=null;e=n,n=m){e.a=null +A.Je(f.a,e) +r.a=n +m=n.a}q=f.a +l=q.c +r.b=o +r.c=l +if(p){k=e.c +k=(k&1)!==0||(k&15)===8}else k=!0 +if(k){j=e.b.b +if(o){e=q.b +e=!(e===j||e.gz4()===j.gz4())}else e=!1 +if(e){e=f.a +s=e.c +e.b.L7(s.a,s.b) +return}i=$.aK +if(i!==j)$.aK=j +else i=null +e=r.a.c +if((e&15)===8)new A.b2k(r,f,o).$0() +else if(p){if((e&1)!==0)new A.b2j(r,l).$0()}else if((e&2)!==0)new A.b2i(f,r).$0() +if(i!=null)$.aK=i +e=r.c +if(s.b(e)){q=r.a.$ti +q=q.h("an<2>").b(e)||!q.y[1].b(e)}else q=!1 +if(q){h=r.a.b +if(e instanceof A.aM)if((e.a&24)!==0){g=h.c +h.c=null +b=h.Ij(g) +h.a=e.a&30|h.a&1 +h.c=e.c +f.a=e +continue}else A.bhj(e,h) +else h.Pl(e) +return}}h=r.a.b +g=h.c +h.c=null +b=h.Ij(g) +e=r.b +q=r.c +if(!e){h.a=8 +h.c=q}else{h.a=h.a&1|16 +h.c=q}f.a=h +e=h}}, +bsY(a,b){if(t.Hg.b(a))return b.MG(a,t.z,t.K,t.Km) +if(t.C_.b(a))return b.MI(a,t.z,t.K) +throw A.d(A.hH(a,"onError",u.w))}, +bPU(){var s,r +for(s=$.Kd;s!=null;s=$.Kd){$.Z9=null +r=s.b +$.Kd=r +if(r==null)$.Z8=null +s.a.$0()}}, +bQn(){$.bi_=!0 +try{A.bPU()}finally{$.Z9=null +$.bi_=!1 +if($.Kd!=null)$.bjw().$1(A.bth())}}, +bt6(a){var s=new A.afv(a),r=$.Z8 +if(r==null){$.Kd=$.Z8=s +if(!$.bi_)$.bjw().$1(A.bth())}else $.Z8=r.b=s}, +bQj(a){var s,r,q,p=$.Kd +if(p==null){A.bt6(a) +$.Z9=$.Z8 +return}s=new A.afv(a) +r=$.Z9 +if(r==null){s.b=p +$.Kd=$.Z9=s}else{q=r.b +s.b=q +$.Z9=r.b=s +if(q==null)$.Z8=s}}, +iC(a){var s,r=null,q=$.aK +if(B.aE===q){A.b9v(r,r,B.aE,a) +return}if(B.aE===q.gaGY().a)s=B.aE.gz4()===q.gz4() +else s=!1 +if(s){A.b9v(r,r,q,q.MH(a,t.H)) +return}s=$.aK +s.wR(s.TO(a))}, +bpV(a,b){var s=null,r=b.h("wZ<0>"),q=new A.wZ(s,s,s,s,r) +q.pb(0,a) +q.a2X() +return new A.lH(q,r.h("lH<1>"))}, +c09(a,b){return new A.aqt(A.fI(a,"stream",t.K),b.h("aqt<0>"))}, +bgP(a,b,c){var s=null +return b?new A.JZ(a,s,s,s,c.h("JZ<0>")):new A.wZ(a,s,s,s,c.h("wZ<0>"))}, +bKz(a,b,c,d){return c?new A.qt(b,a,d.h("qt<0>")):new A.jp(b,a,d.h("jp<0>"))}, +auU(a){var s,r,q +if(a==null)return +try{a.$0()}catch(q){s=A.b2(q) +r=A.bC(q) +$.aK.L7(s,r)}}, +bMF(a,b,c,d,e,f){var s=$.aK,r=e?1:0,q=c!=null?32:0 +return new A.x2(a,A.aZi(s,b,f),A.bhh(s,c),A.bhg(s,d),s,r|q,f.h("x2<0>"))}, +aZi(a,b,c){var s=b==null?A.bRe():b +return a.MI(s,t.H,c)}, +bhh(a,b){if(b==null)b=A.bRg() +if(t.hK.b(b))return a.MG(b,t.z,t.K,t.Km) +if(t.lP.b(b))return a.MI(b,t.z,t.K) +throw A.d(A.c3("handleError callback must take either an Object (the error), or both an Object (the error) and a StackTrace.",null))}, +bhg(a,b){var s=b==null?A.bRf():b +return a.MH(s,t.H)}, +bPX(a){}, +bPZ(a,b){$.aK.L7(a,b)}, +bPY(){}, +brf(a,b){var s=$.aK,r=new A.UM(s,b.h("UM<0>")) +A.iC(r.ga6C()) +if(a!=null)r.c=s.MH(a,t.H) +return r}, +bQg(a,b,c){var s,r,q,p,o,n +try{b.$1(a.$0())}catch(n){s=A.b2(n) +r=A.bC(n) +q=$.aK.vL(s,r) +if(q==null)c.$2(s,r) +else{p=q.a +o=q.b +c.$2(p,o)}}}, +bOt(a,b,c,d){var s=a.bq(0),r=$.Di() +if(s!==r)s.l4(new A.b8I(b,c,d)) +else b.jc(c,d)}, +bOu(a,b){return new A.b8H(a,b)}, +bse(a,b,c){var s=a.bq(0),r=$.Di() +if(s!==r)s.l4(new A.b8J(b,c)) +else b.t2(c)}, +bs8(a,b,c){var s=$.aK.vL(b,c) +if(s!=null){b=s.a +c=s.b}a.xo(b,c)}, +dn(a,b){var s=$.aK +if(s===B.aE)return s.acK(a,b) +return s.acK(a,s.TO(b))}, +aWu(a,b){var s,r=$.aK +if(r===B.aE)return r.acC(a,b) +s=r.TP(b,t.qe) +return $.aK.acC(a,s)}, +b9t(a,b){A.bQj(new A.b9u(a,b))}, +bt_(a,b,c,d){var s,r=$.aK +if(r===c)return d.$0() +$.aK=c +s=r +try{r=d.$0() +return r}finally{$.aK=s}}, +bt1(a,b,c,d,e){var s,r=$.aK +if(r===c)return d.$1(e) +$.aK=c +s=r +try{r=d.$1(e) +return r}finally{$.aK=s}}, +bt0(a,b,c,d,e,f){var s,r=$.aK +if(r===c)return d.$2(e,f) +$.aK=c +s=r +try{r=d.$2(e,f) +return r}finally{$.aK=s}}, +b9v(a,b,c,d){var s,r +if(B.aE!==c){s=B.aE.gz4() +r=c.gz4() +d=s!==r?c.TO(d):c.aMX(d,t.H)}A.bt6(d)}, +aYU:function aYU(a){this.a=a}, +aYT:function aYT(a,b,c){this.a=a +this.b=b +this.c=c}, +aYV:function aYV(a){this.a=a}, +aYW:function aYW(a){this.a=a}, +XZ:function XZ(a){this.a=a +this.b=null +this.c=0}, +b7Y:function b7Y(a,b){this.a=a +this.b=b}, +b7X:function b7X(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +TR:function TR(a,b){this.a=a +this.b=!1 +this.$ti=b}, +b8C:function b8C(a){this.a=a}, +b8D:function b8D(a){this.a=a}, +b9D:function b9D(a){this.a=a}, +fH:function fH(a,b){var _=this +_.a=a +_.e=_.d=_.c=_.b=null +_.$ti=b}, +eW:function eW(a,b){this.a=a +this.$ti=b}, +a_d:function a_d(a,b){this.a=a +this.b=b}, +f8:function f8(a,b){this.a=a +this.$ti=b}, +CF:function CF(a,b,c,d,e,f,g){var _=this +_.ay=0 +_.CW=_.ch=null +_.w=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.r=_.f=null +_.$ti=g}, +x_:function x_(){}, +qt:function qt(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.r=_.f=_.e=_.d=null +_.$ti=c}, +b7a:function b7a(a,b){this.a=a +this.b=b}, +b7c:function b7c(a,b,c){this.a=a +this.b=b +this.c=c}, +b7b:function b7b(a){this.a=a}, +jp:function jp(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.r=_.f=_.e=_.d=null +_.$ti=c}, +aFl:function aFl(a,b){this.a=a +this.b=b}, +aFk:function aFk(a,b){this.a=a +this.b=b}, +aFj:function aFj(a,b,c){this.a=a +this.b=b +this.c=c}, +aFn:function aFn(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aFm:function aFm(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +aFi:function aFi(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aFh:function aFh(a){this.a=a}, +adB:function adB(a,b){this.a=a +this.b=b}, +CJ:function CJ(){}, +bH:function bH(a,b){this.a=a +this.$ti=b}, +D2:function D2(a,b){this.a=a +this.$ti=b}, +nF:function nF(a,b,c,d,e){var _=this +_.a=null +_.b=a +_.c=b +_.d=c +_.e=d +_.$ti=e}, +aM:function aM(a,b){var _=this +_.a=0 +_.b=a +_.c=null +_.$ti=b}, +b2a:function b2a(a,b){this.a=a +this.b=b}, +b2h:function b2h(a,b){this.a=a +this.b=b}, +b2e:function b2e(a){this.a=a}, +b2f:function b2f(a){this.a=a}, +b2g:function b2g(a,b,c){this.a=a +this.b=b +this.c=c}, +b2d:function b2d(a,b){this.a=a +this.b=b}, +b2c:function b2c(a,b){this.a=a +this.b=b}, +b2b:function b2b(a,b,c){this.a=a +this.b=b +this.c=c}, +b2k:function b2k(a,b,c){this.a=a +this.b=b +this.c=c}, +b2l:function b2l(a){this.a=a}, +b2j:function b2j(a,b){this.a=a +this.b=b}, +b2i:function b2i(a,b){this.a=a +this.b=b}, +b2m:function b2m(a,b){this.a=a +this.b=b}, +b2n:function b2n(a,b,c){this.a=a +this.b=b +this.c=c}, +b2o:function b2o(a,b){this.a=a +this.b=b}, +afv:function afv(a){this.a=a +this.b=null}, +cY:function cY(){}, +aUf:function aUf(a,b){this.a=a +this.b=b}, +aUg:function aUg(a,b){this.a=a +this.b=b}, +aUd:function aUd(a){this.a=a}, +aUe:function aUe(a,b,c){this.a=a +this.b=b +this.c=c}, +aUb:function aUb(a,b){this.a=a +this.b=b}, +aUc:function aUc(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aU9:function aU9(a,b){this.a=a +this.b=b}, +aUa:function aUa(a,b,c){this.a=a +this.b=b +this.c=c}, +Sj:function Sj(){}, +acw:function acw(){}, +JV:function JV(){}, +b74:function b74(a){this.a=a}, +b73:function b73(a){this.a=a}, +aqJ:function aqJ(){}, +afw:function afw(){}, +wZ:function wZ(a,b,c,d,e){var _=this +_.a=null +_.b=0 +_.c=null +_.d=a +_.e=b +_.f=c +_.r=d +_.$ti=e}, +JZ:function JZ(a,b,c,d,e){var _=this +_.a=null +_.b=0 +_.c=null +_.d=a +_.e=b +_.f=c +_.r=d +_.$ti=e}, +lH:function lH(a,b){this.a=a +this.$ti=b}, +x2:function x2(a,b,c,d,e,f,g){var _=this +_.w=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.r=_.f=null +_.$ti=g}, +i_:function i_(){}, +aZk:function aZk(a,b,c){this.a=a +this.b=b +this.c=c}, +aZj:function aZj(a){this.a=a}, +JW:function JW(){}, +ahK:function ahK(){}, +qn:function qn(a,b){this.b=a +this.a=null +this.$ti=b}, +J1:function J1(a,b){this.b=a +this.c=b +this.a=null}, +b0V:function b0V(){}, +JG:function JG(a){var _=this +_.a=0 +_.c=_.b=null +_.$ti=a}, +b4x:function b4x(a,b){this.a=a +this.b=b}, +UM:function UM(a,b){var _=this +_.a=1 +_.b=a +_.c=null +_.$ti=b}, +aqt:function aqt(a,b){var _=this +_.a=null +_.b=a +_.c=!1 +_.$ti=b}, +CM:function CM(a){this.$ti=a}, +b8I:function b8I(a,b,c){this.a=a +this.b=b +this.c=c}, +b8H:function b8H(a,b){this.a=a +this.b=b}, +b8J:function b8J(a,b){this.a=a +this.b=b}, +nE:function nE(){}, +Jc:function Jc(a,b,c,d,e,f,g){var _=this +_.w=a +_.x=null +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.r=_.f=null +_.$ti=g}, +u8:function u8(a,b,c){this.b=a +this.a=b +this.$ti=c}, +tZ:function tZ(a,b,c){this.b=a +this.a=b +this.$ti=c}, +at6:function at6(a,b,c){this.a=a +this.b=b +this.$ti=c}, +at5:function at5(){}, +b9u:function b9u(a,b){this.a=a +this.b=b}, +aoR:function aoR(){}, +b5X:function b5X(a,b,c){this.a=a +this.b=b +this.c=c}, +b5V:function b5V(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +b5W:function b5W(a,b){this.a=a +this.b=b}, +b5Y:function b5Y(a,b,c){this.a=a +this.b=b +this.c=c}, +jF(a,b,c,d,e){if(c==null)if(b==null){if(a==null)return new A.tX(d.h("@<0>").ak(e).h("tX<1,2>")) +b=A.bih()}else{if(A.btw()===b&&A.btv()===a)return new A.x8(d.h("@<0>").ak(e).h("x8<1,2>")) +if(a==null)a=A.big()}else{if(b==null)b=A.bih() +if(a==null)a=A.big()}return A.bMG(a,b,c,d,e)}, +bhk(a,b){var s=a[b] +return s===a?null:s}, +bhm(a,b,c){if(c==null)a[b]=a +else a[b]=c}, +bhl(){var s=Object.create(null) +A.bhm(s,"",s) +delete s[""] +return s}, +bMG(a,b,c,d,e){var s=c!=null?c:new A.b07(d) +return new A.UC(a,b,s,d.h("@<0>").ak(e).h("UC<1,2>"))}, +lq(a,b,c,d){if(b==null){if(a==null)return new A.jI(c.h("@<0>").ak(d).h("jI<1,2>")) +b=A.bih()}else{if(A.btw()===b&&A.btv()===a)return new A.O7(c.h("@<0>").ak(d).h("O7<1,2>")) +if(a==null)a=A.big()}return A.bN9(a,b,null,c,d)}, +b3(a,b,c){return A.btL(a,new A.jI(b.h("@<0>").ak(c).h("jI<1,2>")))}, +D(a,b){return new A.jI(a.h("@<0>").ak(b).h("jI<1,2>"))}, +bN9(a,b,c,d,e){return new A.VJ(a,b,new A.b3y(d),d.h("@<0>").ak(e).h("VJ<1,2>"))}, +ek(a){return new A.qo(a.h("qo<0>"))}, +bhn(){var s=Object.create(null) +s[""]=s +delete s[""] +return s}, +vD(a){return new A.lJ(a.h("lJ<0>"))}, +C(a){return new A.lJ(a.h("lJ<0>"))}, +cC(a,b){return A.bSJ(a,new A.lJ(b.h("lJ<0>")))}, +bhs(){var s=Object.create(null) +s[""]=s +delete s[""] +return s}, +cT(a,b,c){var s=new A.xb(a,b,c.h("xb<0>")) +s.c=a.e +return s}, +bOQ(a,b){return J.f(a,b)}, +bOR(a){return J.a1(a)}, +bG9(a){var s=a.gar(a) +if(s.H())return s.ga1(s) +return null}, +bGa(a){var s,r=J.az(a.a),q=new A.fG(r,a.b,a.$ti.h("fG<1>")) +if(!q.H())return null +do s=r.ga1(r) +while(q.H()) +return s}, +bnk(a,b){var s +A.en(b,"index") +if(t.Ee.b(a)){if(b>=a.length)return null +return J.mT(a,b)}s=J.az(a) +do if(!s.H())return null +while(--b,b>=0) +return s.ga1(s)}, +bnL(a,b,c){var s=A.lq(null,null,b,c) +J.lQ(a,new A.aJq(s,b,c)) +return s}, +A1(a,b,c){var s=A.lq(null,null,b,c) +s.I(0,a) +return s}, +FS(a,b){var s,r,q=A.vD(b) +for(s=a.length,r=0;r"))}, +bfH(a){var s,r={} +if(A.biy(a))return"{...}" +s=new A.d8("") +try{$.Dg.push(a) +s.a+="{" +r.a=!0 +J.lQ(a,new A.aK4(r,s)) +s.a+="}"}finally{$.Dg.pop()}r=s.a +return r.charCodeAt(0)==0?r:r}, +mc(a,b){return new A.Or(A.bc(A.bGH(a),null,!1,b.h("0?")),b.h("Or<0>"))}, +bGH(a){if(a==null||a<8)return 8 +else if((a&a-1)>>>0!==0)return A.bnM(a) +return a}, +bnM(a){var s +a=(a<<1>>>0)-1 +for(;!0;a=s){s=(a&a-1)>>>0 +if(s===0)return a}}, +bht(a,b){return new A.Jq(a,a.c,a.d,a.b,b.h("Jq<0>"))}, +bhI(){throw A.d(A.af("Cannot change an unmodifiable set"))}, +bOX(a,b){return J.Dn(a,b)}, +bsp(a){if(a.h("k(0,0)").b(A.btt()))return A.btt() +return A.bRA()}, +bgL(a,b){var s=A.bsp(a) +return new A.S9(s,new A.aTq(a),a.h("@<0>").ak(b).h("S9<1,2>"))}, +ac6(a,b,c){var s=a==null?A.bsp(c):a,r=b==null?new A.aTt(c):b +return new A.HR(s,r,c.h("HR<0>"))}, +tX:function tX(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +b2u:function b2u(a){this.a=a}, +b2t:function b2t(a){this.a=a}, +x8:function x8(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +UC:function UC(a,b,c,d){var _=this +_.f=a +_.r=b +_.w=c +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=d}, +b07:function b07(a){this.a=a}, +CO:function CO(a,b){this.a=a +this.$ti=b}, +Jh:function Jh(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +VJ:function VJ(a,b,c,d){var _=this +_.w=a +_.x=b +_.y=c +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=d}, +b3y:function b3y(a){this.a=a}, +qo:function qo(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +k1:function k1(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +lJ:function lJ(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +b3z:function b3z(a){this.a=a +this.c=this.b=null}, +xb:function xb(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=null +_.$ti=c}, +oL:function oL(a,b){this.a=a +this.$ti=b}, +aJq:function aJq(a,b,c){this.a=a +this.b=b +this.c=c}, +A2:function A2(a){var _=this +_.b=_.a=0 +_.c=null +_.$ti=a}, +Jp:function Jp(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=null +_.d=c +_.e=!1 +_.$ti=d}, +mb:function mb(){}, +O:function O(){}, +bE:function bE(){}, +aK2:function aK2(a){this.a=a}, +aK3:function aK3(a){this.a=a}, +aK4:function aK4(a,b){this.a=a +this.b=b}, +VL:function VL(a,b){this.a=a +this.$ti=b}, +al9:function al9(a,b,c){var _=this +_.a=a +_.b=b +_.c=null +_.$ti=c}, +ase:function ase(){}, +OF:function OF(){}, +Cu:function Cu(a,b){this.a=a +this.$ti=b}, +UO:function UO(){}, +UN:function UN(a,b,c){var _=this +_.c=a +_.d=b +_.b=_.a=null +_.$ti=c}, +UP:function UP(a){this.b=this.a=null +this.$ti=a}, +Mv:function Mv(a,b){this.a=a +this.b=0 +this.$ti=b}, +aia:function aia(a,b,c){var _=this +_.a=a +_.b=b +_.c=null +_.$ti=c}, +Or:function Or(a,b){var _=this +_.a=a +_.d=_.c=_.b=0 +_.$ti=b}, +Jq:function Jq(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=null +_.$ti=e}, +mz:function mz(){}, +JS:function JS(){}, +asf:function asf(){}, +Iw:function Iw(a,b){this.a=a +this.$ti=b}, +aq7:function aq7(){}, +kW:function kW(a,b){var _=this +_.a=a +_.c=_.b=null +_.$ti=b}, +k5:function k5(a,b,c){var _=this +_.d=a +_.a=b +_.c=_.b=null +_.$ti=c}, +aq6:function aq6(){}, +S9:function S9(a,b,c){var _=this +_.d=null +_.e=a +_.f=b +_.c=_.b=_.a=0 +_.$ti=c}, +aTq:function aTq(a){this.a=a}, +aTp:function aTp(a){this.a=a}, +qs:function qs(){}, +u2:function u2(a,b){this.a=a +this.$ti=b}, +D0:function D0(a,b){this.a=a +this.$ti=b}, +Xt:function Xt(a,b){this.a=a +this.$ti=b}, +u3:function u3(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=null +_.d=c +_.$ti=d}, +Xx:function Xx(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=null +_.d=c +_.$ti=d}, +D_:function D_(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=null +_.d=c +_.$ti=d}, +HR:function HR(a,b,c){var _=this +_.d=null +_.e=a +_.f=b +_.c=_.b=_.a=0 +_.$ti=c}, +aTt:function aTt(a){this.a=a}, +aTs:function aTs(a,b){this.a=a +this.b=b}, +aTr:function aTr(a,b){this.a=a +this.b=b}, +Xu:function Xu(){}, +Xv:function Xv(){}, +Xw:function Xw(){}, +Y8:function Y8(){}, +Y9:function Y9(){}, +bsW(a,b){var s,r,q,p=null +try{p=JSON.parse(a)}catch(r){s=A.b2(r) +q=A.dj(String(s),null,null) +throw A.d(q)}q=A.b8S(p) +return q}, +b8S(a){var s +if(a==null)return null +if(typeof a!="object")return a +if(!Array.isArray(a))return new A.aku(a,Object.create(null)) +for(s=0;s>>2,k=3-(h&3) +for(s=J.al(b),r=J.cV(f),q=c,p=0;q>>0 +l=(l<<8|o)&16777215;--k +if(k===0){n=g+1 +r.u(f,g,a.charCodeAt(l>>>18&63)) +g=n+1 +r.u(f,n,a.charCodeAt(l>>>12&63)) +n=g+1 +r.u(f,g,a.charCodeAt(l>>>6&63)) +g=n+1 +r.u(f,n,a.charCodeAt(l&63)) +l=0 +k=3}}if(p>=0&&p<=255){if(e&&k<3){n=g+1 +m=n+1 +if(3-k===1){r.u(f,g,a.charCodeAt(l>>>2&63)) +r.u(f,n,a.charCodeAt(l<<4&63)) +r.u(f,m,61) +r.u(f,m+1,61)}else{r.u(f,g,a.charCodeAt(l>>>10&63)) +r.u(f,n,a.charCodeAt(l>>>4&63)) +r.u(f,m,a.charCodeAt(l<<2&63)) +r.u(f,m+1,61)}return 0}return(l<<2|3-k)>>>0}for(q=c;q255)break;++q}throw A.d(A.hH(b,"Not a byte value at index "+q+": 0x"+J.bBD(s.i(b,q),16),null))}, +bMx(a,b,c,d,e,f){var s,r,q,p,o,n,m="Invalid encoding before padding",l="Invalid character",k=B.f.dU(f,2),j=f&3,i=$.bjx() +for(s=b,r=0;s=0){k=(k<<6|p)&16777215 +j=j+1&3 +if(j===0){o=e+1 +d[e]=k>>>16&255 +e=o+1 +d[o]=k>>>8&255 +o=e+1 +d[e]=k&255 +e=o +k=0}continue}else if(p===-1&&j>1){if(r>127)break +if(j===3){if((k&3)!==0)throw A.d(A.dj(m,a,s)) +d[e]=k>>>10 +d[e+1]=k>>>2}else{if((k&15)!==0)throw A.d(A.dj(m,a,s)) +d[e]=k>>>4}n=(3-j)*3 +if(q===37)n+=2 +return A.brb(a,s+1,c,-n-1)}throw A.d(A.dj(l,a,s))}if(r>=0&&r<=127)return(k<<2|j)>>>0 +for(s=b;s127)break +throw A.d(A.dj(l,a,s))}, +bMv(a,b,c,d){var s=A.bMw(a,b,c),r=(d&3)+(s-b),q=B.f.dU(r,2)*3,p=r&3 +if(p!==0&&s0)return new Uint8Array(q) +return $.byj()}, +bMw(a,b,c){var s,r=c,q=r,p=0 +while(!0){if(!(q>b&&p<2))break +c$0:{--q +s=a.charCodeAt(q) +if(s===61){++p +r=q +break c$0}if((s|32)===100){if(q===b)break;--q +s=a.charCodeAt(q)}if(s===51){if(q===b)break;--q +s=a.charCodeAt(q)}if(s===37){++p +r=q +break c$0}break}}return r}, +brb(a,b,c,d){var s,r +if(b===c)return d +s=-d-1 +for(;s>0;){r=a.charCodeAt(b) +if(s===3){if(r===61){s-=3;++b +break}if(r===37){--s;++b +if(b===c)break +r=a.charCodeAt(b)}else break}if((s>3?s-3:s)===2){if(r!==51)break;++b;--s +if(b===c)break +r=a.charCodeAt(b)}if((r|32)!==100)break;++b;--s +if(b===c)break}if(b!==c)throw A.d(A.dj("Invalid padding character",a,b)) +return-s-1}, +bEG(a){return $.bvN().i(0,a.toLowerCase())}, +bnt(a,b,c){return new A.O8(a,b)}, +bGh(a){var s,r +if(a==null)return null +s=a.length +if(s===0)return new Uint8Array(0) +$label0$0:{for(r=0;r=128)break $label0$0 +return new A.l9(a)}return B.bn.dB(a)}, +bOU(a){return a.rC()}, +bN0(a,b){return new A.akx(a,[],A.bbW())}, +bN1(a,b,c){var s,r=new A.d8("") +A.brp(a,r,b,c) +s=r.a +return s.charCodeAt(0)==0?s:s}, +brp(a,b,c,d){var s +if(d==null)s=A.bN0(b,c) +else s=new A.b3j(d,0,b,[],A.bbW()) +s.uo(a)}, +bN2(a,b,c){var s=new Uint8Array(b) +return new A.akz(b,c,s,[],A.bbW())}, +bN3(a,b,c){var s,r,q +for(s=J.al(a),r=b,q=0;r>>0 +if(q>=0&&q<=255)return +A.bN4(a,b,c)}, +bN4(a,b,c){var s,r,q +for(s=J.al(a),r=b;r255)throw A.d(A.dj("Source contains non-Latin-1 characters.",a,r))}}, +bs2(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""}}, +aku:function aku(a,b){this.a=a +this.b=b +this.c=null}, +b3h:function b3h(a){this.a=a}, +b3g:function b3g(a){this.a=a}, +akv:function akv(a){this.a=a}, +VG:function VG(a,b,c){this.b=a +this.c=b +this.a=c}, +b8e:function b8e(){}, +b8d:function b8d(){}, +a_6:function a_6(){}, +as7:function as7(){}, +a_8:function a_8(a){this.a=a}, +as8:function as8(a,b){this.a=a +this.b=b}, +as6:function as6(){}, +a_7:function a_7(a,b){this.a=a +this.b=b}, +b1s:function b1s(a){this.a=a}, +b6F:function b6F(a){this.a=a}, +awZ:function awZ(){}, +a_A:function a_A(){}, +afM:function afM(a){this.a=0 +this.b=a}, +aZh:function aZh(a){this.c=null +this.a=0 +this.b=a}, +aZ2:function aZ2(){}, +aYR:function aYR(a,b){this.a=a +this.b=b}, +b8b:function b8b(a,b){this.a=a +this.b=b}, +a_z:function a_z(){}, +afK:function afK(){this.a=0}, +afL:function afL(a,b){this.a=a +this.b=b}, +Lj:function Lj(){}, +U5:function U5(a){this.a=a}, +agj:function agj(a,b){this.a=a +this.b=b +this.c=0}, +a0r:function a0r(){}, +apJ:function apJ(a,b,c){this.a=a +this.b=b +this.$ti=c}, +a14:function a14(){}, +cv:function cv(){}, +Vi:function Vi(a,b,c){this.a=a +this.b=b +this.$ti=c}, +z_:function z_(){}, +aGM:function aGM(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +a4Y:function a4Y(a){this.a=a}, +ajV:function ajV(a,b){this.a=a +this.b=b}, +O8:function O8(a,b){this.a=a +this.b=b}, +a5K:function a5K(a,b){this.a=a +this.b=b}, +aIi:function aIi(){}, +a5N:function a5N(a,b){this.a=a +this.b=b}, +b3f:function b3f(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1}, +aky:function aky(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=!1}, +a5M:function a5M(a){this.a=a}, +b3k:function b3k(){}, +b3l:function b3l(a,b){this.a=a +this.b=b}, +akw:function akw(){}, +b3i:function b3i(a,b){this.a=a +this.b=b}, +akx:function akx(a,b,c){this.c=a +this.a=b +this.b=c}, +b3j:function b3j(a,b,c,d,e){var _=this +_.f=a +_.x$=b +_.c=c +_.a=d +_.b=e}, +akz:function akz(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=0 +_.a=d +_.b=e}, +b3m:function b3m(a,b,c,d,e,f,g){var _=this +_.x=a +_.x$=b +_.c=c +_.d=d +_.e=e +_.f=0 +_.a=f +_.b=g}, +a5W:function a5W(){}, +a5Y:function a5Y(a){this.a=a}, +a5X:function a5X(a,b){this.a=a +this.b=b}, +akJ:function akJ(a){this.a=a}, +b3q:function b3q(a){this.a=a}, +aJj:function aJj(){}, +nr:function nr(){}, +b_h:function b_h(a,b){this.a=a +this.b=b}, +b77:function b77(a,b){this.a=a +this.b=b}, +JY:function JY(){}, +xo:function xo(a){this.a=a}, +b8f:function b8f(a,b,c){this.a=a +this.b=b +this.c=c}, +b8c:function b8c(a,b,c){this.a=a +this.b=b +this.c=c}, +ae6:function ae6(){}, +ae7:function ae7(){}, +asj:function asj(a){this.b=this.a=0 +this.c=a}, +Yf:function Yf(a,b){var _=this +_.d=a +_.b=_.a=0 +_.c=b}, +Tp:function Tp(a){this.a=a}, +k8:function k8(a){this.a=a +this.b=16 +this.c=0}, +atz:function atz(){}, +atA:function atA(){}, +auG:function auG(){}, +bT8(a){return A.mR(a)}, +bf6(a,b,c){return A.boS(a,b,null)}, +bmA(a){return new A.ER(new WeakMap(),a.h("ER<0>"))}, +ES(a){if(A.kZ(a)||typeof a=="number"||typeof a=="string"||a instanceof A.oV)A.z5(a)}, +z5(a){throw A.d(A.hH(a,"object","Expandos are not allowed on strings, numbers, bools, records or null"))}, +bOe(){if(typeof WeakRef=="function")return WeakRef +var s=function LeakRef(a){this._=a} +s.prototype={ +deref(){return this._}} +return s}, +et(a,b,c){var s=A.pR(a,c) +if(s!=null)return s +if(b!=null)return b.$1(a) +throw A.d(A.dj(a,null,null))}, +nM(a){var s=A.ow(a) +if(s!=null)return s +throw A.d(A.dj("Invalid double",a,null))}, +bEP(a,b){a=A.d(a) +a.stack=b.j(0) +throw a +throw A.d("unreachable")}, +bDo(a,b){if(Math.abs(a)>864e13)A.X(A.c3("DateTime is outside valid range: "+a,null)) +A.fI(!0,"isUtc",t.w) +return new A.lY(a,!0)}, +bc(a,b,c,d){var s,r=c?J.FA(a,d):J.O3(a,d) +if(a!==0&&b!=null)for(s=0;s")) +for(s=J.az(a);s.H();)r.push(s.ga1(s)) +if(b)return r +return J.aI3(r)}, +ab(a,b,c){var s +if(b)return A.bnQ(a,c) +s=J.aI3(A.bnQ(a,c)) +return s}, +bnQ(a,b){var s,r +if(Array.isArray(a))return A.b(a.slice(0),b.h("v<0>")) +s=A.b([],b.h("v<0>")) +for(r=J.az(a);r.H();)s.push(r.ga1(r)) +return s}, +lr(a,b,c){var s,r=J.FA(a,c) +for(s=0;s0||c0)a=J.xH(a,b) +return A.boU(A.ab(a,!0,t.S))}, +aUk(a){return A.cs(a)}, +bKE(a,b,c){var s=a.length +if(b>=s)return"" +return A.bIK(a,b,c==null||c>s?s:c)}, +bw(a,b,c,d){return new A.rC(a,A.bfq(a,c,b,d,!1,!1))}, +bT7(a,b){return a==null?b==null:a===b}, +aUh(a,b,c){var s=J.az(b) +if(!s.H())return a +if(c.length===0){do a+=A.j(s.ga1(s)) +while(s.H())}else{a+=A.j(s.ga1(s)) +for(;s.H();)a=a+c+A.j(s.ga1(s))}return a}, +iO(a,b){return new A.a7z(a,b.gaV5(),b.gaXJ(),b.gaVP())}, +aX_(){var s,r,q=A.bIy() +if(q==null)throw A.d(A.af("'Uri.base' is not supported")) +s=$.bqH +if(s!=null&&q===$.bqG)return s +r=A.jn(q,0,null) +$.bqH=r +$.bqG=q +return r}, +lM(a,b,c,d){var s,r,q,p,o,n="0123456789ABCDEF" +if(c===B.a1){s=$.byz() +s=s.b.test(b)}else s=!1 +if(s)return b +r=c.vH(b) +for(s=r.length,q=0,p="";q>>4]&1<<(o&15))!==0)p+=A.cs(o) +else p=d&&o===32?p+"+":p+"%"+n[o>>>4&15]+n[o&15]}return p.charCodeAt(0)==0?p:p}, +bO7(a){var s,r,q +if(!$.byA())return A.bO8(a) +s=new URLSearchParams() +a.al(0,new A.b88(s)) +r=s.toString() +q=r.length +if(q>0&&r[q-1]==="=")r=B.d.am(r,0,q-1) +return r.replace(/=&|\*|%7E/g,b=>b==="=&"?"&":b==="*"?"%2A":"~")}, +bpU(){return A.bC(new Error())}, +bCY(a,b){return J.Dn(a,b)}, +bDn(a,b){if(Math.abs(a)>864e13)A.X(A.c3("DateTime is outside valid range: "+a,null)) +A.fI(b,"isUtc",t.w) +return new A.lY(a,b)}, +bDp(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}, +bDq(a){if(a>=100)return""+a +if(a>=10)return"0"+a +return"00"+a}, +a1T(a){if(a>=10)return""+a +return"0"+a}, +dE(a,b){return new A.bv(a+1000*b)}, +bEM(a,b){var s,r +for(s=0;s<3;++s){r=a[s] +if(r.b===b)return r}throw A.d(A.hH(b,"name","No enum value with that name"))}, +z2(a){if(typeof a=="number"||A.kZ(a)||a==null)return J.i1(a) +if(typeof a=="string")return JSON.stringify(a) +return A.boT(a)}, +bmz(a,b){A.fI(a,"error",t.K) +A.fI(b,"stackTrace",t.Km) +A.bEP(a,b)}, +kg(a){return new A.xV(a)}, +c3(a,b){return new A.n_(!1,null,b,a)}, +hH(a,b,c){return new A.n_(!0,a,b,c)}, +qG(a,b){return a}, +w6(a){var s=null +return new A.GV(s,s,!1,s,s,a)}, +a9C(a,b,c){return new A.GV(null,null,!0,a,b,c==null?"Value not in range":c)}, +du(a,b,c,d,e){return new A.GV(b,c,!0,a,d,"Invalid value")}, +GW(a,b,c,d){if(ac)throw A.d(A.du(a,b,c,d,null)) +return a}, +bgm(a,b,c,d){return A.aHy(a,d==null?b.gF(b):d,b,null,c)}, +dl(a,b,c,d,e){if(0>a||a>c)throw A.d(A.du(a,0,c,d==null?"start":d,null)) +if(b!=null){if(a>b||b>c)throw A.d(A.du(b,a,c,e==null?"end":e,null)) +return b}return c}, +en(a,b){if(a<0)throw A.d(A.du(a,0,null,b,null)) +return a}, +NS(a,b,c,d,e){var s=e==null?b.gF(b):e +return new A.NR(s,!0,a,c,"Index out of range")}, +fs(a,b,c,d,e){return new A.NR(b,!0,a,e,"Index out of range")}, +aHy(a,b,c,d,e){if(0>a||a>=b)throw A.d(A.fs(a,b,c,d,e==null?"index":e)) +return a}, +af(a){return new A.ae1(a)}, +d_(a){return new A.Cs(a)}, +ad(a){return new A.nq(a)}, +db(a){return new A.a1s(a)}, +c1(a){return new A.V8(a)}, +dj(a,b,c){return new A.j7(a,b,c)}, +bGc(a,b,c){if(a<=0)return new A.j6(c.h("j6<0>")) +return new A.Vk(a,b,c.h("Vk<0>"))}, +bnl(a,b,c){var s,r +if(A.biy(a)){if(b==="("&&c===")")return"(...)" +return b+"..."+c}s=A.b([],t.T) +$.Dg.push(a) +try{A.bPN(a,s)}finally{$.Dg.pop()}r=A.aUh(b,s,", ")+c +return r.charCodeAt(0)==0?r:r}, +pw(a,b,c){var s,r +if(A.biy(a))return b+"..."+c +s=new A.d8(b) +$.Dg.push(a) +try{r=s +r.a=A.aUh(r.a,a,", ")}finally{$.Dg.pop()}s.a+=c +r=s.a +return r.charCodeAt(0)==0?r:r}, +bPN(a,b){var s,r,q,p,o,n,m,l=J.az(a),k=0,j=0 +while(!0){if(!(k<80||j<3))break +if(!l.H())return +s=A.j(l.ga1(l)) +b.push(s) +k+=s.length+2;++j}if(!l.H()){if(j<=5)return +r=b.pop() +q=b.pop()}else{p=l.ga1(l);++j +if(!l.H()){if(j<=4){b.push(A.j(p)) +return}r=A.j(p) +q=b.pop() +k+=r.length+2}else{o=l.ga1(l);++j +for(;l.H();p=o,o=n){n=l.ga1(l);++j +if(j>100){while(!0){if(!(k>75&&j>3))break +k-=b.pop().length+2;--j}b.push("...") +return}}q=A.j(p) +r=A.j(o) +k+=r.length+q.length+4}}if(j>b.length+2){k+=5 +m="..."}else m=null +while(!0){if(!(k>80&&b.length>3))break +k-=b.pop().length+2 +if(m==null){k+=5 +m="..."}}if(m!=null)b.push(m) +b.push(q) +b.push(r)}, +bGK(a,b,c){var s,r=A.dl(0,null,c.length,null,null),q=r-0 +if(a.length=b)for(s=0;s=0;)a[b+s]=c[s]}, +bnX(a,b,c,d,e){return new A.qP(a,b.h("@<0>").ak(c).ak(d).ak(e).h("qP<1,2,3,4>"))}, +OG(a,b,c){var s=A.D(b,c) +s.aaR(s,a) +return s}, +bU4(a){var s=A.bcN(a) +if(s!=null)return s +throw A.d(A.dj(a,null,null))}, +bcN(a){var s=B.d.eC(a),r=A.pR(s,null) +return r==null?A.ow(s):r}, +a6(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,a0,a1){var s +if(B.a===c)return A.bKO(J.a1(a),J.a1(b),$.i0()) +if(B.a===d){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +return A.iq(A.a9(A.a9(A.a9($.i0(),s),b),c))}if(B.a===e)return A.bq2(J.a1(a),J.a1(b),J.a1(c),J.a1(d),$.i0()) +if(B.a===f){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e))}if(B.a===g){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f))}if(B.a===h){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g))}if(B.a===i){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h))}if(B.a===j){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i))}if(B.a===k){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +j=J.a1(j) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i),j))}if(B.a===l){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +j=J.a1(j) +k=J.a1(k) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i),j),k))}if(B.a===m){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +j=J.a1(j) +k=J.a1(k) +l=J.a1(l) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i),j),k),l))}if(B.a===n){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +j=J.a1(j) +k=J.a1(k) +l=J.a1(l) +m=J.a1(m) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i),j),k),l),m))}if(B.a===o){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +j=J.a1(j) +k=J.a1(k) +l=J.a1(l) +m=J.a1(m) +n=J.a1(n) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i),j),k),l),m),n))}if(B.a===p){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +j=J.a1(j) +k=J.a1(k) +l=J.a1(l) +m=J.a1(m) +n=J.a1(n) +o=J.a1(o) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o))}if(B.a===q){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +j=J.a1(j) +k=J.a1(k) +l=J.a1(l) +m=J.a1(m) +n=J.a1(n) +o=J.a1(o) +p=J.a1(p) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o),p))}if(B.a===r){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +j=J.a1(j) +k=J.a1(k) +l=J.a1(l) +m=J.a1(m) +n=J.a1(n) +o=J.a1(o) +p=J.a1(p) +q=J.a1(q) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o),p),q))}if(B.a===a0){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +j=J.a1(j) +k=J.a1(k) +l=J.a1(l) +m=J.a1(m) +n=J.a1(n) +o=J.a1(o) +p=J.a1(p) +q=J.a1(q) +r=J.a1(r) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o),p),q),r))}if(B.a===a1){s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +j=J.a1(j) +k=J.a1(k) +l=J.a1(l) +m=J.a1(m) +n=J.a1(n) +o=J.a1(o) +p=J.a1(p) +q=J.a1(q) +r=J.a1(r) +a0=J.a1(a0) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o),p),q),r),a0))}s=J.a1(a) +b=J.a1(b) +c=J.a1(c) +d=J.a1(d) +e=J.a1(e) +f=J.a1(f) +g=J.a1(g) +h=J.a1(h) +i=J.a1(i) +j=J.a1(j) +k=J.a1(k) +l=J.a1(l) +m=J.a1(m) +n=J.a1(n) +o=J.a1(o) +p=J.a1(p) +q=J.a1(q) +r=J.a1(r) +a0=J.a1(a0) +a1=J.a1(a1) +return A.iq(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9(A.a9($.i0(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o),p),q),r),a0),a1))}, +bM(a){var s,r=$.i0() +for(s=J.az(a);s.H();)r=A.a9(r,J.a1(s.ga1(s))) +return A.iq(r)}, +xA(a){var s=A.j(a),r=$.buy +if(r==null)A.bux(s) +else r.$1(s)}, +aSu(a,b,c,d){return new A.qR(a,b,c.h("@<0>").ak(d).h("qR<1,2>"))}, +bKy(){$.fJ() +return new A.ce()}, +bsh(a,b){return 65536+((a&1023)<<10)+(b&1023)}, +jn(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 +a5=a3.length +s=a4+5 +if(a5>=s){r=((a3.charCodeAt(a4+4)^58)*3|a3.charCodeAt(a4)^100|a3.charCodeAt(a4+1)^97|a3.charCodeAt(a4+2)^116|a3.charCodeAt(a4+3)^97)>>>0 +if(r===0)return A.aWY(a4>0||a5=14)q[7]=a5 +o=q[1] +if(o>=a4)if(A.bt5(a3,a4,o,20,q)===20)q[7]=o +n=q[2]+1 +m=q[3] +l=q[4] +k=q[5] +j=q[6] +if(jo+3){h=a2 +i=!1}else{p=m>a4 +if(p&&m+1===l){h=a2 +i=!1}else{if(!B.d.fA(a3,"\\",l))if(n>a4)g=B.d.fA(a3,"\\",n-1)||B.d.fA(a3,"\\",n-2) +else g=!1 +else g=!0 +if(g){h=a2 +i=!1}else{if(!(kl+2&&B.d.fA(a3,"/..",k-3) +else g=!0 +if(g)h=a2 +else if(o===a4+4)if(B.d.fA(a3,"file",a4)){if(n<=a4){if(!B.d.fA(a3,"/",l)){f="file:///" +r=3}else{f="file://" +r=2}a3=f+B.d.am(a3,l,a5) +o-=a4 +s=r-a4 +k+=s +j+=s +a5=a3.length +a4=0 +n=7 +m=7 +l=7}else if(l===k){s=a4===0 +s +if(s){a3=B.d.j1(a3,l,k,"/");++k;++j;++a5}else{a3=B.d.am(a3,a4,l)+"/"+B.d.am(a3,k,a5) +o-=a4 +n-=a4 +m-=a4 +l-=a4 +s=1-a4 +k+=s +j+=s +a5=a3.length +a4=0}}h="file"}else if(B.d.fA(a3,"http",a4)){if(p&&m+3===l&&B.d.fA(a3,"80",m+1)){s=a4===0 +s +if(s){a3=B.d.j1(a3,m,l,"") +l-=3 +k-=3 +j-=3 +a5-=3}else{a3=B.d.am(a3,a4,m)+B.d.am(a3,l,a5) +o-=a4 +n-=a4 +m-=a4 +s=3+a4 +l-=s +k-=s +j-=s +a5=a3.length +a4=0}}h="http"}else h=a2 +else if(o===s&&B.d.fA(a3,"https",a4)){if(p&&m+4===l&&B.d.fA(a3,"443",m+1)){s=a4===0 +s +if(s){a3=B.d.j1(a3,m,l,"") +l-=4 +k-=4 +j-=4 +a5-=3}else{a3=B.d.am(a3,a4,m)+B.d.am(a3,l,a5) +o-=a4 +n-=a4 +m-=a4 +s=4+a4 +l-=s +k-=s +j-=s +a5=a3.length +a4=0}}h="https"}else h=a2 +i=!g}}}else h=a2 +if(i){if(a4>0||a5a4)h=A.b89(a3,a4,o) +else{if(o===a4)A.K8(a3,a4,"Invalid empty scheme") +h=""}if(n>a4){e=o+3 +d=e9)j.$2("invalid character",s)}else{if(q===3)j.$2(l,s) +o=A.et(B.d.am(a,r,s),m,m) +if(o>255)j.$2(k,r) +n=q+1 +i[q]=o +r=s+1 +q=n}}if(q!==3)j.$2(l,c) +o=A.et(B.d.am(a,r,c),m,m) +if(o>255)j.$2(k,r) +i[q]=o +return i}, +bqI(a,b,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=null,d=new A.aX0(a),c=new A.aX1(d,a) +if(a.length<2)d.$2("address is too short",e) +s=A.b([],t.t) +for(r=b,q=r,p=!1,o=!1;r>>0) +s.push((k[2]<<8|k[3])>>>0)}if(p){if(s.length>7)d.$2("an address with a wildcard must have less than 7 parts",e)}else if(s.length!==8)d.$2("an address without a wildcard must contain exactly 8 parts",e) +j=new Uint8Array(16) +for(l=s.length,i=9-l,r=0,h=0;ro)A.X(A.du(0,0,p.gF(q),null,null)) +if(A.Kn(q,"/",0)){s=A.af("Illegal path character "+A.j(q)) +throw A.d(s)}}}, +bO4(a){var s +if(a.length===0)return B.CK +s=A.bs0(a) +s.aiG(s,A.btu()) +return A.bei(s,t.N,t.yp)}, +b84(a,b){if(a!=null&&a===A.brR(b))return null +return a}, +brV(a,b,c,d){var s,r,q,p,o,n +if(a==null)return null +if(b===c)return"" +if(a.charCodeAt(b)===91){s=c-1 +if(a.charCodeAt(s)!==93)A.K8(a,b,"Missing end `]` to match `[` in host") +r=b+1 +q=A.bO3(a,r,s) +if(q=b&&q=b&&s>>4]&1<<(p&15))!==0){if(q&&65<=p&&90>=p){if(i==null)i=new A.d8("") +if(r>>4]&1<<(o&15))!==0){if(p&&65<=o&&90>=o){if(q==null)q=new A.d8("") +if(r>>4]&1<<(o&15))!==0)A.K8(a,s,"Invalid character") +else{if((o&64512)===55296&&s+1>>4]&1<<(q&15))!==0))A.K8(a,s,"Illegal scheme character") +if(65<=q&&q<=90)r=!0}a=B.d.am(a,b,c) +return A.bO1(r?a.toLowerCase():a)}, +bO1(a){if(a==="http")return"http" +if(a==="file")return"file" +if(a==="https")return"https" +if(a==="package")return"package" +return a}, +brX(a,b,c){if(a==null)return"" +return A.Ye(a,b,c,B.Xx,!1,!1)}, +brW(a,b,c,d,e,f){var s,r=e==="file",q=r||f +if(a==null){if(d==null)return r?"/":"" +s=new A.W(d,new A.b83(),A.a5(d).h("W<1,h>")).cj(0,"/")}else if(d!=null)throw A.d(A.c3("Both path and pathSegments specified",null)) +else s=A.Ye(a,b,c,B.xv,!0,!0) +if(s.length===0){if(r)return"/"}else if(q&&!B.d.c4(s,"/"))s="/"+s +return A.bO9(s,e,f)}, +bO9(a,b,c){var s=b.length===0 +if(s&&!c&&!B.d.c4(a,"/")&&!B.d.c4(a,"\\"))return A.bhL(a,!s||c) +return A.D3(a)}, +b85(a,b,c,d){if(a!=null){if(d!=null)throw A.d(A.c3("Both query and queryParameters specified",null)) +return A.Ye(a,b,c,B.kg,!0,!1)}if(d==null)return null +return A.bO7(d)}, +bO8(a){var s={},r=new A.d8("") +s.a="" +a.al(0,new A.b86(new A.b87(s,r))) +s=r.a +return s.charCodeAt(0)==0?s:s}, +brU(a,b,c){if(a==null)return null +return A.Ye(a,b,c,B.kg,!0,!1)}, +bhK(a,b,c){var s,r,q,p,o,n=b+2 +if(n>=a.length)return"%" +s=a.charCodeAt(b+1) +r=a.charCodeAt(n) +q=A.bcl(s) +p=A.bcl(r) +if(q<0||p<0)return"%" +o=q*16+p +if(o<127&&(B.km[B.f.dU(o,4)]&1<<(o&15))!==0)return A.cs(c&&65<=o&&90>=o?(o|32)>>>0:o) +if(s>=97||r>=97)return B.d.am(a,b,b+3).toUpperCase() +return null}, +bhJ(a){var s,r,q,p,o,n="0123456789ABCDEF" +if(a<128){s=new Uint8Array(3) +s[0]=37 +s[1]=n.charCodeAt(a>>>4) +s[2]=n.charCodeAt(a&15)}else{if(a>2047)if(a>65535){r=240 +q=4}else{r=224 +q=3}else{r=192 +q=2}s=new Uint8Array(3*q) +for(p=0;--q,q>=0;r=128){o=B.f.Iv(a,6*q)&63|r +s[p]=37 +s[p+1]=n.charCodeAt(o>>>4) +s[p+2]=n.charCodeAt(o&15) +p+=3}}return A.ns(s,0,null)}, +Ye(a,b,c,d,e,f){var s=A.brZ(a,b,c,d,e,f) +return s==null?B.d.am(a,b,c):s}, +brZ(a,b,c,d,e,f){var s,r,q,p,o,n,m,l,k,j,i=null +for(s=!e,r=b,q=r,p=i;r>>4]&1<<(o&15))!==0)++r +else{if(o===37){n=A.bhK(a,r,!1) +if(n==null){r+=3 +continue}if("%"===n){n="%25" +m=1}else m=3}else if(o===92&&f){n="/" +m=1}else if(s&&o<=93&&(B.xy[o>>>4]&1<<(o&15))!==0){A.K8(a,r,"Invalid character") +m=i +n=m}else{if((o&64512)===55296){l=r+1 +if(l=2&&A.brT(a.charCodeAt(0)))for(s=1;s127||(B.xs[r>>>4]&1<<(r&15))===0)break}return a}, +bOb(a,b){if(a.Xy("package")&&a.c==null)return A.bt7(b,0,b.length) +return-1}, +bO5(){return A.b([],t.T)}, +bs0(a){var s,r,q,p,o,n=A.D(t.N,t.yp),m=new A.b8a(a,B.a1,n) +for(s=a.length,r=0,q=0,p=-1;r127)throw A.d(A.c3("Illegal percent encoding in URI",null)) +if(r===37){if(o+3>q)throw A.d(A.c3("Truncated URI",null)) +p.push(A.bO6(a,o+1)) +o+=2}else if(e&&r===43)p.push(32) +else p.push(r)}}return d.hH(0,p)}, +brT(a){var s=a|32 +return 97<=s&&s<=122}, +bLS(a){if(!a.Xy("data"))throw A.d(A.hH(a,"uri","Scheme must be 'data'")) +if(a.gL8())throw A.d(A.hH(a,"uri","Data uri must not have authority")) +if(a.gL9())throw A.d(A.hH(a,"uri","Data uri must not have a fragment part")) +if(!a.gE3())return A.aWY(a.ghg(a),0,a) +return A.aWY(a.j(0),5,a)}, +aWY(a,b,c){var s,r,q,p,o,n,m,l,k="Invalid MIME type",j=A.b([b-1],t.t) +for(s=a.length,r=b,q=-1,p=null;rb)throw A.d(A.dj(k,a,r)) +for(;p!==44;){j.push(r);++r +for(o=-1;r=0)j.push(o) +else{n=B.b.ga_(j) +if(p!==44||r!==n+7||!B.d.fA(a,"base64",n+1))throw A.d(A.dj("Expecting '='",a,r)) +break}}j.push(r) +m=r+1 +if((j.length&1)===1)a=B.K5.aVT(0,a,m,s) +else{l=A.brZ(a,m,s,B.kg,!0,!1) +if(l!=null)a=B.d.j1(a,m,s,l)}return new A.aWX(a,j,c)}, +bON(){var s,r,q,p,o,n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-._~!$&'()*+,;=",m=".",l=":",k="/",j="\\",i="?",h="#",g="/\\",f=J.el(22,t.H3) +for(s=0;s<22;++s)f[s]=new Uint8Array(96) +r=new A.b8U(f) +q=new A.b8V() +p=new A.b8W() +o=r.$2(0,225) +q.$3(o,n,1) +q.$3(o,m,14) +q.$3(o,l,34) +q.$3(o,k,3) +q.$3(o,j,227) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(14,225) +q.$3(o,n,1) +q.$3(o,m,15) +q.$3(o,l,34) +q.$3(o,g,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(15,225) +q.$3(o,n,1) +q.$3(o,"%",225) +q.$3(o,l,34) +q.$3(o,k,9) +q.$3(o,j,233) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(1,225) +q.$3(o,n,1) +q.$3(o,l,34) +q.$3(o,k,10) +q.$3(o,j,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(2,235) +q.$3(o,n,139) +q.$3(o,k,131) +q.$3(o,j,131) +q.$3(o,m,146) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(3,235) +q.$3(o,n,11) +q.$3(o,k,68) +q.$3(o,j,68) +q.$3(o,m,18) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(4,229) +q.$3(o,n,5) +p.$3(o,"AZ",229) +q.$3(o,l,102) +q.$3(o,"@",68) +q.$3(o,"[",232) +q.$3(o,k,138) +q.$3(o,j,138) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(5,229) +q.$3(o,n,5) +p.$3(o,"AZ",229) +q.$3(o,l,102) +q.$3(o,"@",68) +q.$3(o,k,138) +q.$3(o,j,138) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(6,231) +p.$3(o,"19",7) +q.$3(o,"@",68) +q.$3(o,k,138) +q.$3(o,j,138) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(7,231) +p.$3(o,"09",7) +q.$3(o,"@",68) +q.$3(o,k,138) +q.$3(o,j,138) +q.$3(o,i,172) +q.$3(o,h,205) +q.$3(r.$2(8,8),"]",5) +o=r.$2(9,235) +q.$3(o,n,11) +q.$3(o,m,16) +q.$3(o,g,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(16,235) +q.$3(o,n,11) +q.$3(o,m,17) +q.$3(o,g,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(17,235) +q.$3(o,n,11) +q.$3(o,k,9) +q.$3(o,j,233) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(10,235) +q.$3(o,n,11) +q.$3(o,m,18) +q.$3(o,k,10) +q.$3(o,j,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(18,235) +q.$3(o,n,11) +q.$3(o,m,19) +q.$3(o,g,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(19,235) +q.$3(o,n,11) +q.$3(o,g,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(11,235) +q.$3(o,n,11) +q.$3(o,k,10) +q.$3(o,j,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(12,236) +q.$3(o,n,12) +q.$3(o,i,12) +q.$3(o,h,205) +o=r.$2(13,237) +q.$3(o,n,13) +q.$3(o,i,13) +p.$3(r.$2(20,245),"az",21) +o=r.$2(21,245) +p.$3(o,"az",21) +p.$3(o,"09",21) +q.$3(o,"+-.",21) +return f}, +bt5(a,b,c,d,e){var s,r,q,p,o=$.bzs() +for(s=b;s95?31:q] +d=p&31 +e[p>>>5]=s}return d}, +brH(a){if(a.b===7&&B.d.c4(a.a,"package")&&a.c<=0)return A.bt7(a.a,a.e,a.f) +return-1}, +bQB(a,b){return A.A8(b,t.N)}, +bt7(a,b,c){var s,r,q +for(s=b,r=0;s")) +s.ST() +return s}, +btd(a,b){var s=$.aK +if(s===B.aE)return a +return s.TP(a,b)}, +bD:function bD(){}, +ZF:function ZF(){}, +ZO:function ZO(){}, +a_4:function a_4(){}, +KX:function KX(){}, +p7:function p7(){}, +a1C:function a1C(){}, +e3:function e3(){}, +Eh:function Eh(){}, +aAd:function aAd(){}, +kk:function kk(){}, +o2:function o2(){}, +a1D:function a1D(){}, +a1E:function a1E(){}, +a1S:function a1S(){}, +a2C:function a2C(){}, +Ms:function Ms(){}, +Mt:function Mt(){}, +a2F:function a2F(){}, +a2H:function a2H(){}, +agu:function agu(a,b){this.a=a +this.b=b}, +e4:function e4(){}, +bh:function bh(){}, +aR:function aR(){}, +ko:function ko(){}, +a3w:function a3w(){}, +a3y:function a3y(){}, +a3Z:function a3Z(){}, +kp:function kp(){}, +a4R:function a4R(){}, +zA:function zA(){}, +a6n:function a6n(){}, +a6O:function a6O(){}, +a6U:function a6U(){}, +aKF:function aKF(a){this.a=a}, +aKG:function aKG(a){this.a=a}, +a6V:function a6V(){}, +aKH:function aKH(a){this.a=a}, +aKI:function aKI(a){this.a=a}, +kv:function kv(){}, +a6W:function a6W(){}, +CG:function CG(a){this.a=a}, +c5:function c5(){}, +Pm:function Pm(){}, +kz:function kz(){}, +a8X:function a8X(){}, +aaQ:function aaQ(){}, +aQO:function aQO(a){this.a=a}, +aQP:function aQP(a){this.a=a}, +Ho:function Ho(){}, +ab8:function ab8(){}, +kG:function kG(){}, +ac_:function ac_(){}, +kH:function kH(){}, +ac4:function ac4(){}, +kI:function kI(){}, +acu:function acu(){}, +aU3:function aU3(a){this.a=a}, +aU4:function aU4(a){this.a=a}, +aU5:function aU5(a){this.a=a}, +jj:function jj(){}, +kR:function kR(){}, +jl:function jl(){}, +adu:function adu(){}, +adv:function adv(){}, +adA:function adA(){}, +kS:function kS(){}, +adI:function adI(){}, +adJ:function adJ(){}, +ae4:function ae4(){}, +aeg:function aeg(){}, +ahc:function ahc(){}, +UK:function UK(){}, +ajF:function ajF(){}, +VY:function VY(){}, +aq4:function aq4(){}, +aqE:function aqE(){}, +beP:function beP(a,b){this.a=a +this.$ti=b}, +V6:function V6(){}, +V0:function V0(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +aiL:function aiL(a,b,c,d,e){var _=this +_.a=0 +_.b=a +_.c=b +_.d=c +_.e=d +_.$ti=e}, +b1u:function b1u(a){this.a=a}, +b1w:function b1w(a){this.a=a}, +c_:function c_(){}, +EW:function EW(a,b,c){var _=this +_.a=a +_.b=b +_.c=-1 +_.d=null +_.$ti=c}, +ahd:function ahd(){}, +ai2:function ai2(){}, +ai3:function ai3(){}, +ai4:function ai4(){}, +ai5:function ai5(){}, +aiR:function aiR(){}, +aiS:function aiS(){}, +ajT:function ajT(){}, +ajU:function ajU(){}, +alm:function alm(){}, +aln:function aln(){}, +alo:function alo(){}, +alp:function alp(){}, +am2:function am2(){}, +am3:function am3(){}, +amU:function amU(){}, +amV:function amV(){}, +ap0:function ap0(){}, +Xr:function Xr(){}, +Xs:function Xs(){}, +aq2:function aq2(){}, +aq3:function aq3(){}, +aqr:function aqr(){}, +arq:function arq(){}, +arr:function arr(){}, +XT:function XT(){}, +XU:function XU(){}, +arC:function arC(){}, +arD:function arD(){}, +ath:function ath(){}, +ati:function ati(){}, +att:function att(){}, +atu:function atu(){}, +atE:function atE(){}, +atF:function atF(){}, +au8:function au8(){}, +au9:function au9(){}, +auc:function auc(){}, +aud:function aud(){}, +bsk(a){var s,r,q +if(a==null)return a +if(typeof a=="string"||typeof a=="number"||A.kZ(a))return a +if(A.bTu(a))return A.nL(a) +s=Array.isArray(a) +s.toString +if(s){r=[] +q=0 +while(!0){s=a.length +s.toString +if(!(q")),r=new A.bH(s,b.h("bH<0>")) +a.then(A.uh(new A.bcT(r),1),A.uh(new A.bcU(r),1)) +return s}, +bsU(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}, +bim(a){if(A.bsU(a))return a +return new A.bc1(new A.x8(t.Fy)).$1(a)}, +bcz:function bcz(a){this.a=a}, +bcT:function bcT(a){this.a=a}, +bcU:function bcU(a){this.a=a}, +bc1:function bc1(a){this.a=a}, +a7H:function a7H(a){this.a=a}, +bud(a,b){return Math.max(a,b)}, +bu6(a){return Math.log(a)}, +GU(a){var s +if(a==null)s=B.O +else{s=new A.b4S() +s.at4(a)}return s}, +bp4(a,b,c,d,e){var s,r +if(c<0)s=c===-1/0?0:-c*0 +else s=c+0 +if(d<0)r=d===-1/0?0:-d*0 +else r=d+0 +return new A.hv(a,b,s,r,e.h("hv<0>"))}, +bsf(a){if(a===-1/0)return 0 +return-a*0}, +b3d:function b3d(){}, +b4S:function b4S(){this.b=this.a=0}, +Wv:function Wv(){}, +hv:function hv(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.$ti=e}, +P9:function P9(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.$ti=e}, +ma:function ma(){}, +a67:function a67(){}, +mk:function mk(){}, +a7K:function a7K(){}, +a8Z:function a8Z(){}, +acz:function acz(){}, +bB:function bB(){}, +mH:function mH(){}, +adQ:function adQ(){}, +akP:function akP(){}, +akQ:function akQ(){}, +ame:function ame(){}, +amf:function amf(){}, +aqy:function aqy(){}, +aqz:function aqz(){}, +arJ:function arJ(){}, +arK:function arK(){}, +bCp(a,b,c){return J.Zz(a,b,c)}, +be8(a){var s=a.BYTES_PER_ELEMENT,r=A.dl(0,null,B.f.eY(a.byteLength,s),null,null) +return A.kw(a.buffer,a.byteOffset+0*s,(r-0)*s)}, +aWT(a,b,c){var s=J.bS(a),r=s.gVl(a) +c=A.dl(b,c,B.f.eY(s.gjY(a),r),null,null) +return J.iZ(s.gdl(a),s.gfY(a)+b*r,(c-b)*r)}, +Y7:function Y7(a){this.a=a}, +asa:function asa(a){this.a=a}, +h0:function h0(){}, +K7:function K7(a){this.a=a}, +asg:function asg(a){this.a=a}, +asd:function asd(a){this.a=a}, +K6:function K6(){}, +asb:function asb(a){this.a=a}, +asc:function asc(a){this.a=a}, +a3c:function a3c(){}, +auB:function auB(){}, +auC:function auC(){}, +auD:function auD(){}, +auE:function auE(){}, +auF:function auF(){}, +pM(a,b,c){if(b==null)if(a==null)return null +else return a.a2(0,1-c) +else if(a==null)return b.a2(0,c) +else return new A.i(A.qy(a.a,b.a,c),A.qy(a.b,b.b,c))}, +bK6(a,b){return new A.Q(a,b)}, +aSV(a,b,c){if(b==null)if(a==null)return null +else return a.a2(0,1-c) +else if(a==null)return b.a2(0,c) +else return new A.Q(A.qy(a.a,b.a,c),A.qy(a.b,b.b,c))}, +jT(a,b){var s=a.a,r=b*2/2,q=a.b +return new A.A(s-r,q-r,s+r,q+r)}, +wc(a,b,c){var s=a.a,r=c/2,q=a.b,p=b/2 +return new A.A(s-r,q-p,s+r,q+p)}, +pT(a,b){var s=a.a,r=b.a,q=a.b,p=b.b +return new A.A(Math.min(s,r),Math.min(q,p),Math.max(s,r),Math.max(q,p))}, +bJ0(a,b,c){var s +if(b==null)if(a==null)return null +else{s=1-c +return new A.A(a.gae(a)*s,a.gaj(a)*s,a.gaH(a)*s,a.gaQ(a)*s)}else if(a==null)return new A.A(b.gae(b)*c,b.gaj(b)*c,b.gaH(b)*c,b.gaQ(b)*c) +else return new A.A(A.qy(a.gae(a),b.gae(b),c),A.qy(a.gaj(a),b.gaj(b),c),A.qy(a.gaH(a),b.gaH(b),c),A.qy(a.gaQ(a),b.gaQ(b),c))}, +Qh(a,b,c){var s,r,q +if(b==null)if(a==null)return null +else{s=1-c +return new A.bl(a.a*s,a.b*s)}else{r=b.a +q=b.b +if(a==null)return new A.bl(r*c,q*c) +else return new A.bl(A.qy(a.a,r,c),A.qy(a.b,q,c))}}, +GS(a,b,c,d,e){var s=e.a,r=e.b +return new A.nm(a,b,c,d,s,r,s,r,s,r,s,r,s===r)}, +jS(a,b){var s=a.gaj(a),r=b.a,q=b.b +return new A.nm(a.gae(a),s,a.gaH(a),a.gaQ(a),r,q,r,q,r,q,r,q,r===q)}, +GR(a,b,c,d,e,f,g,h){var s=g.a,r=g.b,q=h.a,p=h.b,o=e.a,n=e.b,m=f.a,l=f.b +return new A.nm(a,b,c,d,s,r,q,p,m,l,o,n,s===r&&s===q&&s===p&&s===o&&s===n&&s===m&&s===l)}, +aOG(a,b,c,d,e){var s=a.gaj(a),r=a.gae(a),q=a.gaH(a),p=a.gaQ(a),o=d.a,n=d.b,m=e.a,l=e.b,k=b.a,j=b.b,i=c.a,h=c.b +return new A.nm(r,s,q,p,o,n,m,l,i,h,k,j,o===n&&o===m&&o===l&&o===k&&o===j&&o===i&&o===h)}, +bgl(a,b,c,d){var s=new Float32Array(4) +s[0]=a +s[1]=b +s[2]=c +s[3]=d +return new A.GT(s)}, +ap(a,b,c){var s +if(a!=b){s=a==null?null:isNaN(a) +if(s===!0){s=b==null?null:isNaN(b) +s=s===!0}else s=!1}else s=!0 +if(s)return a==null?null:a +if(a==null)a=0 +if(b==null)b=0 +return a*(1-c)+b*c}, +qy(a,b,c){return a*(1-c)+b*c}, +b9j(a,b,c){return a*(1-c)+b*c}, +U(a,b,c){if(ac)return c +if(isNaN(a))return c +return a}, +bt4(a,b){return A.S(A.xx(B.c.ai((a.gm(a)>>>24&255)*b),0,255),a.gm(a)>>>16&255,a.gm(a)>>>8&255,a.gm(a)&255)}, +blb(a){return new A.n(a>>>0)}, +S(a,b,c,d){return new A.n(((a&255)<<24|(b&255)<<16|(c&255)<<8|d&255)>>>0)}, +la(a,b,c,d){return new A.n(((B.c.cN(d*255,1)&255)<<24|(a&255)<<16|(b&255)<<8|c&255)>>>0)}, +bef(a){if(a<=0.03928)return a/12.92 +return Math.pow((a+0.055)/1.055,2.4)}, +Z(a,b,c){if(b==null)if(a==null)return null +else return A.bt4(a,1-c) +else if(a==null)return A.bt4(b,c) +else return A.S(A.xx(B.c.aw(A.b9j(a.gm(a)>>>24&255,b.gm(b)>>>24&255,c)),0,255),A.xx(B.c.aw(A.b9j(a.gm(a)>>>16&255,b.gm(b)>>>16&255,c)),0,255),A.xx(B.c.aw(A.b9j(a.gm(a)>>>8&255,b.gm(b)>>>8&255,c)),0,255),A.xx(B.c.aw(A.b9j(a.gm(a)&255,b.gm(b)&255,c)),0,255))}, +azB(a,b){var s,r,q,p=a.gm(a)>>>24&255 +if(p===0)return b +s=255-p +r=b.gm(b)>>>24&255 +if(r===255)return A.S(255,B.f.cN(p*(a.gm(a)>>>16&255)+s*(b.gm(b)>>>16&255),255),B.f.cN(p*(a.gm(a)>>>8&255)+s*(b.gm(b)>>>8&255),255),B.f.cN(p*(a.gm(a)&255)+s*(b.gm(b)&255),255)) +else{r=B.f.cN(r*s,255) +q=p+r +return A.S(q,B.f.eY((a.gm(a)>>>16&255)*p+(b.gm(b)>>>16&255)*r,q),B.f.eY((a.gm(a)>>>8&255)*p+(b.gm(b)>>>8&255)*r,q),B.f.eY((a.gm(a)&255)*p+(b.gm(b)&255)*r,q))}}, +mo(){return $.G().B()}, +zu(a,b,c,d,e,f){var s=f==null?null:A.xC(f) +return $.G().acz(0,a,b,c,d,e,s)}, +Fd(a,b,c,d,e,f,g,h){var s,r +if(d==null){if(c.length!==2)A.X(A.c3('"colors" must have length 2 if "colorStops" is omitted.',null))}else if(c.length!==J.bo(d))A.X(A.c3(u.L,null)) +s=f!=null?A.xC(f):null +if(g!=null)r=g.k(0,a)&&h===0 +else r=!0 +if(r)return $.G().acE(0,a,b,c,d,e,s) +else return $.G().acv(g,h,a,b,c,d,e,s)}, +bn5(a,b){return $.G().acA(a,b)}, +Zg(a,b){return A.bTh(a,b)}, +bTh(a,b){var s=0,r=A.r(t.hP),q,p=2,o,n=[],m,l,k,j,i,h,g,f +var $async$Zg=A.t(function(c,d){if(c===1){o=d +s=p}while(true)switch(s){case 0:s=b==null?3:5 +break +case 3:h=$.G() +g=a.a +g.toString +q=h.Xp(g) +s=1 +break +s=4 +break +case 5:h=$.G() +g=a.a +g.toString +s=6 +return A.x(h.Xp(g),$async$Zg) +case 6:m=d +p=7 +s=10 +return A.x(m.lK(),$async$Zg) +case 10:l=d +try{g=J.avF(l) +k=g.gbW(g) +g=J.avF(l) +j=g.gb9(g) +i=b.$2(k,j) +g=a.a +g.toString +f=i.a +f=h.oz(g,!1,i.b,f) +q=f +n=[1] +s=8 +break}finally{J.avF(l).t()}n.push(9) +s=8 +break +case 7:n=[2] +case 8:p=2 +m.t() +s=n.pop() +break +case 9:case 4:case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$Zg,r)}, +bJS(a){return a>0?a*0.57735+0.5:0}, +bJT(a,b,c){var s,r,q=A.Z(a.a,b.a,c) +q.toString +s=A.pM(a.b,b.b,c) +s.toString +r=A.qy(a.c,b.c,c) +return new A.oC(q,s,r)}, +bJU(a,b,c){var s,r,q,p=a==null +if(p&&b==null)return null +if(p)a=A.b([],t.kO) +if(b==null)b=A.b([],t.kO) +s=A.b([],t.kO) +r=Math.min(a.length,b.length) +for(q=0;q>>0 +return s===0}, +bBQ(a,b){var s +a[0]=b&255 +a[1]=b>>>8&255 +a[2]=b>>>16&255 +a[3]=b>>>24&255 +for(s=4;s<=15;++s)a[s]=0}, +aw4:function aw4(a,b,c){var _=this +_.a=1 +_.b=a +_.c=b +_.d=c +_.r=null +_.x=_.w=$}, +e_(a){return new A.a_3(a,null,null)}, +a_3:function a_3(a,b,c){this.a=a +this.b=b +this.c=c}, +biJ(a,b){b&=31 +return(a&$.iB[b])<>>0}, +h3(a,b){b&=31 +return(a>>>b|A.biJ(a,32-b))>>>0}, +bp6(a){var s,r=new A.Qr() +if(A.cU(a))r.a06(a,null) +else{t.ae.a(a) +s=a.a +s===$&&A.c() +r.a=s +s=a.b +s===$&&A.c() +r.b=s}return r}, +bpm(){var s=A.bp6(0),r=new Uint8Array(4),q=t.S +q=new A.aQQ(s,r,B.hd,5,A.bc(5,0,!1,q),A.bc(80,0,!1,q)) +q.bF(0) +return q}, +bmX(a,b){var s=new A.aGk(a,b) +s.b=20 +s.d=new Uint8Array(b) +s.e=new Uint8Array(b+20) +return s}, +ayy:function ayy(){}, +aNq:function aNq(a,b,c){this.a=a +this.b=b +this.c=c}, +ax2:function ax2(){}, +Od:function Od(a){this.a=a}, +aMo:function aMo(a){this.a=$ +this.b=a +this.c=$}, +ax4:function ax4(){}, +ax0:function ax0(){}, +Qr:function Qr(){this.b=this.a=$}, +aJZ:function aJZ(){}, +aQQ:function aQQ(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=$ +_.d=c +_.e=d +_.f=e +_.r=f +_.w=$}, +aGk:function aGk(a,b){var _=this +_.a=a +_.b=$ +_.c=b +_.e=_.d=$}, +ax_:function ax_(){}, +avL:function avL(a){var _=this +_.a=0 +_.b=$ +_.c=!1 +_.d=a}, +rA(a,b,c,d){var s,r +if(t.e2.b(a)){s=J.bS(a) +s=J.iZ(s.gdl(a),s.gfY(a),s.gjY(a))}else s=t.Cm.b(a)?a:A.iN(t.JY.a(a),!0,t.S) +r=new A.aHP(s,d,d,b,$) +r.e=c==null?J.bo(s):c +return r}, +aHQ:function aHQ(){}, +aHP:function aHP(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +bg3(a){var s=a==null?32768:a +return new A.aMf(new Uint8Array(s))}, +aMg:function aMg(){}, +aMf:function aMf(a){this.a=0 +this.c=a}, +aYz:function aYz(a){var _=this +_.a=-1 +_.d=_.b=0 +_.r=_.f=$ +_.x=a}, +bMp(a,b,c){var s,r,q,p,o +if(a.gaA(a))return new Uint8Array(0) +s=new Uint8Array(A.eG(a.gb_X(a))) +r=c*2+2 +q=A.bmX(A.bpm(),64) +p=new A.aMo(q) +q=q.b +q===$&&A.c() +p.c=new Uint8Array(q) +p.a=new A.aNq(b,1000,r) +o=new Uint8Array(r) +return B.L.cI(o,0,p.aPJ(s,0,o,0))}, +aw5:function aw5(a,b){this.c=a +this.d=b}, +CA:function CA(a,b,c){var _=this +_.a=67324752 +_.f=_.e=_.d=_.c=0 +_.x=_.w=_.r=null +_.y="" +_.z=a +_.Q=b +_.as=$ +_.at=null +_.ay=0 +_.CW=_.ch=null +_.cx=c}, +af1:function af1(a){var _=this +_.a=0 +_.as=_.Q=_.y=_.x=_.w=null +_.at="" +_.ax=a +_.ch=null}, +aYy:function aYy(){this.a=$}, +Fi(a){var s=new A.aGW() +s.asw(a) +return s}, +aGW:function aGW(){this.a=$ +this.b=0 +this.c=2147483647}, +bfn(a){var s=A.Fi(B.xK),r=A.Fi(B.xI) +r=new A.a5i(A.rA(a,0,null,0),A.bg3(null),s,r) +r.b=!0 +r.a5D() +return r}, +bn8(a,b){var s=A.Fi(B.xK),r=A.Fi(B.xI) +r=new A.a5i(a,A.bg3(b),s,r) +r.b=!0 +r.a5D() +return r}, +a5i:function a5i(a,b,c,d){var _=this +_.a=a +_.b=!1 +_.c=b +_.e=_.d=0 +_.r=c +_.w=d}, +a3k:function a3k(a,b){this.a=a +this.b=b}, +Tq:function Tq(a,b){this.a=a +this.$ti=b}, +acv:function acv(a,b,c,d){var _=this +_.a=a +_.b=null +_.d=_.c=!1 +_.e=0 +_.f=b +_.r=c +_.$ti=d}, +aU6:function aU6(a){this.a=a}, +aU8:function aU8(a){this.a=a}, +aU7:function aU7(a){this.a=a}, +U9:function U9(a,b,c){this.a=a +this.b=b +this.$ti=c}, +bkB(a,b){var s=B.uH.aiQ() +return new A.KN(A.D(t.N,t.Xu),b,s)}, +be_(a,b){return A.bkB(a,b)}, +KN:function KN(a,b,c){this.a=a +this.b=b +this.c=c}, +a_h:function a_h(a,b){this.a=a +this.b=b}, +awO(a,b,c,d){var s=0,r=A.r(t.ue),q,p,o,n,m,l,k,j,i +var $async$awO=A.t(function(e,f){if(e===1)return A.o(f,r) +while(true)switch(s){case 0:o=t.ag +n=A.b([],t.c_) +m=A.bGM() +l=new A.a_i(A.D(t.N,o),n,a,d,b,m) +k=J.el(c,t.iH) +for(p=0;p=0}else q=!1 +if(!q)break +if(r>s)return-1 +if(A.bix(a,c,d,r)&&A.bix(a,c,d,r+p))return r +c=r+1}return-1}return A.bPa(a,b,c,d)}, +bPa(a,b,c,d){var s,r,q,p=new A.p5(a,d,c,0) +for(s=b.length;r=p.oJ(),r>=0;){q=r+s +if(q>d)break +if(B.d.fA(a,b,r)&&A.bix(a,c,d,q))return r}return-1}, +hz:function hz(a){this.a=a}, +wC:function wC(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +bcF(a,b,c,d){if(d===208)return A.bu9(a,b,c) +if(d===224){if(A.bu8(a,b,c)>=0)return 145 +return 64}throw A.d(A.ad("Unexpected state: "+B.f.hZ(d,16)))}, +bu9(a,b,c){var s,r,q,p,o +for(s=c,r=0;q=s-2,q>=b;s=q){p=a.charCodeAt(s-1) +if((p&64512)!==56320)break +o=a.charCodeAt(q) +if((o&64512)!==55296)break +if(A.qA(o,p)!==6)break +r^=1}if(r===0)return 193 +else return 144}, +bu8(a,b,c){var s,r,q,p,o +for(s=c;s>b;){--s +r=a.charCodeAt(s) +if((r&64512)!==56320)q=A.Dc(r) +else{if(s>b){--s +p=a.charCodeAt(s) +o=(p&64512)===55296}else{p=0 +o=!1}if(o)q=A.qA(p,r) +else break}if(q===7)return s +if(q!==4)break}return-1}, +bix(a,b,c,d){var s,r,q,p,o,n,m,l,k,j=u.q +if(b=c)return!0 +n=a.charCodeAt(o) +if((n&64512)!==56320)return!0 +p=A.qA(s,n)}else return(q&64512)!==55296 +if((q&64512)!==56320){m=A.Dc(q) +d=r}else{d-=2 +if(b<=d){l=a.charCodeAt(d) +if((l&64512)!==55296)return!0 +m=A.qA(l,q)}else return!0}k=j.charCodeAt(j.charCodeAt(p|176)&240|m) +return((k>=208?A.bcF(a,b,d,k):k)&1)===0}return b!==c}, +bUG(a,b,c,d){var s,r,q,p,o,n +if(d===b||d===c)return d +s=a.charCodeAt(d) +if((s&63488)!==55296){r=A.Dc(s) +q=d}else if((s&64512)===55296){p=d+1 +if(pb){o=s-1 +n=a.charCodeAt(o) +if((n&64512)===55296){q=A.qA(n,r) +s=o}else q=2}else q=2 +if(q===6)m=A.bu9(a,b,s)!==144?160:48 +else{l=q===1 +if(l||q===4)if(A.bu8(a,b,s)>=0)m=l?144:128 +else m=48 +else m=u.S.charCodeAt(q|176)}return new A.p5(a,a.length,d,m).oJ()}, +p5:function p5(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +KQ:function KQ(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a21:function a21(a){this.$ti=a}, +O2:function O2(a,b){this.a=a +this.$ti=b}, +A3:function A3(a,b){this.a=a +this.$ti=b}, +xp:function xp(){}, +Ix:function Ix(a,b){this.a=a +this.$ti=b}, +HA:function HA(a,b){this.a=a +this.$ti=b}, +Js:function Js(a,b,c){this.a=a +this.b=b +this.c=c}, +OD:function OD(a,b,c){this.a=a +this.b=b +this.$ti=c}, +M8:function M8(a){this.b=a}, +a4O:function a4O(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=0 +_.$ti=c}, +bIR(a){return 8}, +bIS(a){var s +a=(a<<1>>>0)-1 +for(;!0;a=s){s=(a&a-1)>>>0 +if(s===0)return a}}, +jR:function jR(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +Uc:function Uc(a,b,c,d,e){var _=this +_.d=a +_.a=b +_.b=c +_.c=d +_.$ti=e}, +Wi:function Wi(){}, +UE:function UE(){}, +Et:function Et(){}, +bsC(a){var s,r,q,p,o="0123456789abcdef",n=a.length,m=new Uint8Array(n*2) +for(s=0,r=0;s>>4&15) +r=p+1 +m[p]=o.charCodeAt(q&15)}return A.ns(m,0,null)}, +yN:function yN(a){this.a=a}, +aB7:function aB7(){this.a=null}, +a4L:function a4L(){}, +aGt:function aGt(){}, +bNG(a){var s=new Uint32Array(A.eG(A.b([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],t.t))),r=new Uint32Array(64),q=new Uint8Array(0) +return new A.apx(s,r,a,new Uint32Array(16),new A.Ti(q,0))}, +apw:function apw(){}, +b6B:function b6B(){}, +apx:function apx(a,b,c,d,e){var _=this +_.w=a +_.x=b +_.a=c +_.c=d +_.d=0 +_.e=e +_.f=!1}, +aAF:function aAF(){}, +a0i:function a0i(){}, +bes(a){var s=A.cj(a,null,t.l).w.a.a +if(s>1440)return B.a7Q +if(s>1240)return B.a7P +if(s>600)return B.a7O +return B.lf}, +HK:function HK(a,b){this.a=a +this.b=b}, +aAA:function aAA(){this.a=null}, +bgk(a,b,c,d,e,f){return new A.Wh(c,a,b,d,e,f.h("Wh<0>"))}, +nl:function nl(){}, +Wh:function Wh(a,b,c,d,e,f){var _=this +_.f=a +_.a=b +_.b=c +_.c=d +_.d=null +_.e=e +_.$ti=f}, +Op:function Op(a,b,c,d,e,f){var _=this +_.f=a +_.a=b +_.b=c +_.c=d +_.d=null +_.e=e +_.$ti=f}, +R:function R(a,b){this.a=a +this.b=b}, +aAz:function aAz(){}, +aAx:function aAx(){}, +aAy:function aAy(){}, +eM:function eM(a,b){this.a=a +this.b=b +this.c=null}, +DM:function DM(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +ZI:function ZI(a,b,c){this.c=a +this.d=b +this.a=c}, +avU:function avU(a,b){this.a=a +this.b=b}, +kl:function kl(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +a2e:function a2e(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +Md:function Md(a,b){this.c=a +this.a=b}, +ahO:function ahO(a,b){var _=this +_.d=a +_.e=!1 +_.a=null +_.b=b +_.c=null}, +b0W:function b0W(a,b){this.a=a +this.b=b}, +b0X:function b0X(a){this.a=a}, +ahP:function ahP(a){this.a=a}, +akk:function akk(a,b){this.c=a +this.a=b}, +Fu:function Fu(a,b){this.c=a +this.a=b}, +aHR:function aHR(a){this.a=a}, +a6g:function a6g(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.f=c +_.r=d +_.a=e}, +a9g:function a9g(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +Qa:function Qa(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +anv:function anv(a){this.a=null +this.b=a +this.c=null}, +b4R:function b4R(a){this.a=a}, +b4Q:function b4Q(){}, +y4:function y4(a,b,c){this.c=a +this.d=b +this.a=c}, +a_V:function a_V(a,b){var _=this +_.d=a +_.a=null +_.b=b +_.c=null}, +axE:function axE(a){this.a=a}, +axD:function axD(a,b){this.a=a +this.b=b}, +yq:function yq(a,b,c){this.c=a +this.d=b +this.a=c}, +LO:function LO(a){var _=this +_.e=_.d=$ +_.a=null +_.b=a +_.c=null}, +azx:function azx(a,b){this.a=a +this.b=b}, +azA:function azA(a){this.a=a}, +azz:function azz(a){this.a=a}, +azy:function azy(a){this.a=a}, +azw:function azw(a){this.a=a}, +FV:function FV(a,b,c,d){var _=this +_.c=a +_.d=b +_.a=c +_.$ti=d}, +Oq:function Oq(a,b){var _=this +_.a=null +_.b=a +_.c=null +_.$ti=b}, +aJs:function aJs(a){this.a=a}, +aJr:function aJr(a){this.a=a}, +AD:function AD(a,b,c){this.c=a +this.d=b +this.a=c}, +a7L:function a7L(a,b){var _=this +_.d=a +_.a=null +_.b=b +_.c=null}, +aLZ:function aLZ(a){this.a=a}, +GP:function GP(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +B2:function B2(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +a2b:function a2b(a){this.a=a}, +aAU:function aAU(){}, +adp:function adp(a){this.a=a}, +M4:function M4(a,b){this.d=a +this.a=b}, +a1O:function a1O(a,b,c){var _=this +_.d=a +_.e=b +_.a=null +_.b=c +_.c=null}, +aAo:function aAo(a){this.a=a}, +aAp:function aAp(a){this.a=a}, +aAq:function aAq(a){this.a=a}, +Ja:function Ja(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +b22:function b22(a){this.a=a}, +amH:function amH(a,b){this.c=a +this.a=b}, +b4z:function b4z(a,b){this.a=a +this.b=b}, +b4y:function b4y(a,b){this.a=a +this.b=b}, +r4(a,b){var s=t.G1 +return(b?a.bh(s):a.WJ(s)).r}, +a2f:function a2f(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Mc:function Mc(a,b){this.c=a +this.a=b}, +Me:function Me(a,b){var _=this +_.d=a +_.a=null +_.b=b +_.c=null}, +aAW:function aAW(a,b){this.a=a +this.b=b}, +UG:function UG(a,b,c,d){var _=this +_.f=a +_.r=b +_.b=c +_.a=d}, +ab7:function ab7(a){this.a=a}, +Mb:function Mb(a,b,c){this.c=a +this.d=b +this.a=c}, +aSK(a,b,c,d,e,f,g,h){return new A.aby(f,a,b,d,c,h,g,e,null)}, +aby:function aby(a,b,c,d,e,f,g,h,i){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.a=i}, +aSL:function aSL(a){this.a=a}, +Si:function Si(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.a=m}, +aqs:function aqs(a){var _=this +_.d=$ +_.e="" +_.a=null +_.b=a +_.c=null}, +b72:function b72(a){this.a=a}, +b71:function b71(a){this.a=a}, +b7_:function b7_(a,b){this.a=a +this.b=b}, +b70:function b70(a,b){this.a=a +this.b=b}, +M5:function M5(a,b,c,d){var _=this +_.c=a +_.d=b +_.r=c +_.a=d}, +El:function El(a,b){this.a=a +this.b=b}, +ahw:function ahw(a){var _=this +_.f=_.e=_.d=null +_.r=$ +_.w=!0 +_.x="" +_.y=!1 +_.a=null +_.b=a +_.c=null}, +b08:function b08(a,b,c){this.a=a +this.b=b +this.c=c}, +b0F:function b0F(a){this.a=a}, +b0E:function b0E(a){this.a=a}, +b0y:function b0y(a){this.a=a}, +b0l:function b0l(a){this.a=a}, +b0x:function b0x(a){this.a=a}, +b0o:function b0o(a){this.a=a}, +b0d:function b0d(a,b){this.a=a +this.b=b}, +b0p:function b0p(a){this.a=a}, +b0c:function b0c(a){this.a=a}, +b0w:function b0w(a){this.a=a}, +b0m:function b0m(a){this.a=a}, +b0n:function b0n(a){this.a=a}, +b0e:function b0e(a,b){this.a=a +this.b=b}, +b0z:function b0z(a){this.a=a}, +b0k:function b0k(a){this.a=a}, +b0A:function b0A(a){this.a=a}, +b0j:function b0j(a){this.a=a}, +b0B:function b0B(a,b){this.a=a +this.b=b}, +b0i:function b0i(a){this.a=a}, +b0C:function b0C(a){this.a=a}, +b0D:function b0D(a,b){this.a=a +this.b=b}, +b0q:function b0q(a){this.a=a}, +b0h:function b0h(a){this.a=a}, +b0r:function b0r(a){this.a=a}, +b0g:function b0g(a){this.a=a}, +b0t:function b0t(a){this.a=a}, +b0b:function b0b(a){this.a=a}, +b0s:function b0s(a){this.a=a}, +b0f:function b0f(){}, +b0u:function b0u(a){this.a=a}, +b0a:function b0a(a){this.a=a}, +b0v:function b0v(a){this.a=a}, +b09:function b09(a){this.a=a}, +ahv:function ahv(a,b){this.c=a +this.a=b}, +aji:function aji(a){this.a=a}, +ajj:function ajj(a){this.a=a}, +ajk:function ajk(a){this.a=a}, +ajq:function ajq(a){this.a=a}, +ajr:function ajr(a){this.a=a}, +ajs:function ajs(a){this.a=a}, +bmS(a,b,c,d,e,f,g,h){var s,r=A.jS(b,g) +h.sA(0,f) +a.dm(r,h) +r=b.gbC() +s=d.ge_() +s=A.jS(A.wc(r,b.d-b.b-(d.gcO(0)+d.gcX(0)),b.c-b.a-s),e) +h.sA(0,c) +a.dm(s,h)}, +bmR(a,b,c,d,e,f,g,h){var s +f.sA(0,b) +a.cs(d,g+c,f) +f.sA(0,e) +a.cs(d,g,f) +s=d.Y(0,new A.i(0,g*0.25)) +f.sA(0,h) +a.cs(s,g/3,f)}, +aFz(a,b,c,d,e,f,g,h){var s,r,q,p,o,n={},m=e.length +if(m>1){n.a=n.b=null +s=h.a +switch(s){case 1:n.b=b.a +n.a=b.b +break +case 2:n.b=b.c +n.a=b.b +break +case 0:n.a=b.b +n.b=b.a +break +case 3:n.a=b.d +n.b=b.a +break}r=new A.bl(c,c) +for(q=0;q")) +p.b0(B.j,n,n,a,0,b,c,n,s) +p.mK(B.j,n,n,n,n,a,0,n,!0,b,c,!1,n,s) +return p}, +lh:function lh(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.M$=a +_.k4=b +_.ok=c +_.p1=d +_.p2=e +_.p3=!1 +_.R$=f +_.S$=g +_.aa$=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q +_.$ti=r}, +V2:function V2(){}, +R4:function R4(a,b){this.a=a +this.b=b}, +us:function us(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.R=$ +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +afq:function afq(){}, +bQH(a){var s=new A.eM("Animations",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Basic Animations",new A.b9F(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/animations/basic_animation_example.dart"," Basic example of how to use `SpriteAnimation`s in Flame's.\n\n In this example, click or touch anywhere on the screen to dynamically add\n animations.\n ") +s.aP(0,"Group animation",new A.b9G(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/animations/animation_group_example.dart"," This example shows how to create a component that can be switched between\n different states to change the animation that is playing.\n\n\n \n Usage: Click/tap and hold the screen to change state and then let go to go\n back to the original animation.\n ") +s.aP(0,"Aseprite",new A.b9H(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/animations/aseprite_example.dart"," This example shows how to load animations from an Aseprite json file and a\n sprite sheet. There is no interaction on this example.\n ") +s.aP(0,"Benchmark",new A.b9I(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/animations/benchmark_example.dart","See how many SpriteAnimationComponent's your platform can handle before it\nstarts to drop in FPS, this is without any sprite batching and such.\n100 animation components are added per tap.\n ")}, +b9F:function b9F(){}, +b9G:function b9G(){}, +b9H:function b9H(){}, +b9I:function b9I(){}, +xU:function xU(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +xZ:function xZ(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a_H:function a_H(a,b,c,d,e,f){var _=this +_.go=$ +_.M$=a +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b +_.w=!1 +_.y=c +_.z=d +_.Q=e +_.as=f}, +afN:function afN(){}, +afO:function afO(){}, +qH:function qH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.S=$ +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +a_J:function a_J(a,b,c,d,e,f,g){var _=this +_.go=a +_.M$=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +afP:function afP(){}, +afQ:function afQ(){}, +bQI(a){var s=new A.eM("Audio",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Basic Audio",new A.b9J(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/audio/basic_audio_example.dart"," This example showcases the most basic Flame Audio functionalities.\n\n 1. Use the static FlameAudio class to easily fire a sfx using the default\n configs for the button tap.\n 2. Uses a custom AudioPool for extremely efficient audio loading and pooling\n for tapping elsewhere.\n 3. Uses the Bgm utility for background music.\n ")}, +b9J:function b9J(){}, +ux:function ux(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.R=$ +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +xR:function xR(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +ZT:function ZT(a,b,c,d,e,f,g){var _=this +_.to=_.ry=$ +_.M$=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +a0q:function a0q(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.RG=a +_.rx=b +_.at=$ +_.ax=c +_.ay=d +_.ch=e +_.CW=f +_.cx=null +_.db=_.cy=$ +_.R$=g +_.S$=h +_.aa$=i +_.M$=j +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +afb:function afb(){}, +afc:function afc(){}, +y2:function y2(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a_O:function a_O(a,b,c,d,e,f,g){var _=this +_.M$=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +a4A:function a4A(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.RG=a +_.at=$ +_.ax=b +_.ay=c +_.ch=d +_.CW=e +_.cx=null +_.db=_.cy=$ +_.R$=f +_.S$=g +_.aa$=h +_.M$=i +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a_N:function a_N(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.RG=a +_.rx=b +_.ry=c +_.to=d +_.at=$ +_.ax=e +_.ay=f +_.ch=g +_.CW=h +_.cx=null +_.db=_.cy=$ +_.R$=i +_.S$=j +_.aa$=k +_.M$=l +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +a3u:function a3u(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.RG=a +_.at=$ +_.ax=b +_.ay=c +_.ch=d +_.CW=e +_.cx=null +_.db=_.cy=$ +_.R$=f +_.S$=g +_.aa$=h +_.M$=i +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +afS:function afS(){}, +afT:function afT(){}, +yb:function yb(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a0b:function a0b(a,b,c,d,e,f,g){var _=this +_.M$=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +aye:function aye(a,b){this.a=a +this.b=b}, +yw:function yw(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +ad5:function ad5(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.k4=a +_.ok=b +_.p1=$ +_.at=c +_.ax=d +_.ay=e +_.ch=f +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=g +_.w=!1 +_.y=h +_.z=i +_.Q=j +_.as=k}, +ad3:function ad3(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){var _=this +_.c9=$ +_.eh=0 +_.RG=_.f4=$ +_.rx=!1 +_.ry=a +_.to=b +_.x1=c +_.x2=0 +_.xr=d +_.y1=e +_.bp$=f +_.aN$=g +_.cZ$=h +_.cL$=i +_.at=$ +_.ax=j +_.ay=k +_.ch=l +_.CW=m +_.cx=null +_.db=_.cy=$ +_.R$=n +_.S$=o +_.aa$=p +_.M$=q +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=r +_.w=!1 +_.y=s +_.z=a0 +_.Q=a1 +_.as=a2}, +ar0:function ar0(){}, +ar3:function ar3(){}, +yz:function yz(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a1v:function a1v(a,b,c,d,e,f,g){var _=this +_.M$=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +agQ:function agQ(){}, +agR:function agR(){}, +bEd(){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=$.js(),a9=t.rK,b0=A.b([],a9),b1=A.b([],t.Vn),b2=new A.ce() +$.fJ() +b2.bR(0) +s=new A.ce() +s.bR(0) +r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=A.e6() +a9=A.b([],a9) +i=new A.ce() +i.bR(0) +h=A.e6() +g=A.dQ() +f=A.dQ() +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new A.a(new Float64Array(2)) +a7.v(a8) +a6=new A.iv(b0,b1,a7,new A.dK(),new A.ct(b2),new A.ct(s),new A.ec(0,0,0),new A.be(new A.a(r),new A.av(0,1)),new A.a(q),new A.a(p),new A.ix(),new A.iy(new A.dG(new A.a(o)),new A.a(n),new A.a(m)),new A.dz(new A.a(l),new A.a(k)),j,a9,new A.ct(i),h,new A.ir(g,f,new A.bP(new A.a(e),new A.a(d),new A.a(c)),new A.bP(new A.a(b),new A.a(a),new A.a(a0))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a1),new A.a(a2),new A.a(a3)),new A.bP(new A.a(a4),new A.a(a5),new A.a(a6))) +a8=A.jC() +a9=A.b([],t.t) +a6.f=a6.at=a6.Q=a6.z=!0 +a6.a=4 +a8=new A.hM(new A.i7(a8,a9,A.C(t.vI)),A.b([],t.go)) +a8.c=new A.i5() +a6.b=a8 +a6.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +a9=A.b([],t.ZS) +b0=A.b([],t.Ic) +b1=A.b([],t.dK) +b2=A.b([],t.eR) +s=A.b([],t.M0) +r=A.b([],t.DZ) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +a6.ay=new A.ii(a9,A.C(t.W8),b0,b1,b2,s,r,a6,new A.cH(new A.a(q),new A.a(p)),new A.cH(new A.a(o),new A.a(n)),new A.a(m),new A.be(new A.a(l),new A.av(0,1)),new A.be(new A.a(k),new A.av(0,1)),new A.io(new A.dz(new A.a(j),new A.a(i)),new A.dG(new A.a(h))),new A.av(0,1),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +a8.d=new A.iw() +return new A.Mu(null,a6,-2147483647,null,B.e,new A.e([],t.s),new A.e([],t.g))}, +yQ:function yQ(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +Mu:function Mu(a,b,c,d,e,f,g){var _=this +_.M$=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +a8P:function a8P(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.RG=a +_.at=$ +_.ax=b +_.ay=c +_.ch=d +_.CW=e +_.cx=null +_.db=_.cy=$ +_.R$=f +_.S$=g +_.aa$=h +_.M$=i +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a2I:function a2I(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.RG=a +_.at=$ +_.ax=b +_.ay=c +_.ch=d +_.CW=e +_.cx=null +_.db=_.cy=$ +_.R$=f +_.S$=g +_.aa$=h +_.M$=i +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +ai7:function ai7(){}, +ai8:function ai8(){}, +yU:function yU(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a2S:function a2S(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){var _=this +_.f5$=a +_.RG=$ +_.rx=!1 +_.ry=b +_.to=c +_.x1=d +_.x2=0 +_.xr=e +_.y1=f +_.bp$=g +_.aN$=h +_.cZ$=i +_.cL$=j +_.at=$ +_.ax=k +_.ay=l +_.ch=m +_.CW=n +_.cx=null +_.db=_.cy=$ +_.R$=o +_.S$=p +_.aa$=q +_.M$=r +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=s +_.w=!1 +_.y=a0 +_.z=a1 +_.Q=a2 +_.as=a3}, +aii:function aii(){}, +bQS(a){var s=new A.eM("flame_forge2d",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Blob example",new A.bav(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/blob_example.dart",' In this example we show the power of joints by showing interactions between\n bodies tied together.\n \n Tap the screen to add boxes that will bounce on the "blob" in the center.\n ') +s.aP(0,"Composition example",new A.baw(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/composition_example.dart"," This example shows how to compose a `BodyComponent` together with a normal\n Flame component. Click the ball to see the number increment.\n ") +s.aP(0,"Domino example",new A.bax(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/domino_example.dart"," In this example we can see some domino tiles lined up.\n If you tap on the screen a pizza is added which can tip the tiles over and\n cause a chain reaction. \n ") +s.aP(0,"Contact Callbacks",new A.baz(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/contact_callbacks_example.dart"," This example shows how `BodyComponent`s can react to collisions with other\n bodies.\n Tap the screen to add balls, the white balls will give an impulse to the\n balls that it collides with.\n ") +s.aP(0,"RevoluteJoint with Motor",new A.baA(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/revolute_joint_with_motor_example.dart",u.z) +s.aP(0,"Sprite Bodies",new A.baB(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/sprite_body_example.dart"," In this example we show how to add a sprite on top of a `BodyComponent`.\n Tap the screen to add more pizzas.\n ") +s.aP(0,"Animated Bodies",new A.baC(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/animated_body_example.dart"," In this example we show how to add an animated chopper, which is created\n with a SpriteAnimationComponent, on top of a BodyComponent.\n \n Tap the screen to add more choppers.\n ") +s.aP(0,"Tappable Body",new A.baD(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/tap_callbacks_example.dart"," In this example we show how to use Flame's TapCallbacks mixin to react to\n taps on `BodyComponent`s.\n Tap the ball to give it a random impulse, or the text to add an effect to\n it.\n ") +s.aP(0,"Draggable Body",new A.baE(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/drag_callbacks_example.dart"," In this example we use Flame's normal `DragCallbacks` mixin to give impulses\n to a ball when we are dragging it around. If you are interested in dragging\n bodies around, also have a look at the MouseJointExample.\n ") +s.aP(0,"Camera",new A.baF(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/camera_example.dart"," This example showcases the possibility to follow BodyComponents with the\n camera. When the screen is tapped a pizza is added, which the camera will\n follow. Other than that it is the same as the domino example.\n ") +s.aP(0,"Raycasting",new A.baG(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/raycast_example.dart"," This example shows how raycasts can be used to find nearest and farthest\n fixtures.\n Red ray finds the nearest fixture and blue ray finds the farthest fixture.\n ") +s.aP(0,"Widgets",new A.bay(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/widget_example.dart"," This examples shows how to render a widget on top of a Forge2D body outside\n of Flame.\n ") +A.bQW(a)}, +bQW(a){var s=new A.eM("flame_forge2d/joints",A.b([],t.C)) +a.c.push(s) +s.aP(0,"ConstantVolumeJoint",new A.bb1(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/joints/constant_volume_joint.dart"," This example shows how to use a `ConstantVolumeJoint`. Tap the screen to add \n a bunch off balls, that maintain a constant volume within them.\n ").aP(0,"DistanceJoint",new A.bb2(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/joints/distance_joint.dart"," This example shows how to use a `DistanceJoint`. Tap the screen to add a \n pair of balls joined with a `DistanceJoint`.\n ").aP(0,"FrictionJoint",new A.bb3(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/joints/friction_joint.dart"," This example shows how to use a `FrictionJoint`. Tap the screen to move the \n ball around and observe it slows down due to the friction force.\n ").aP(0,"GearJoint",new A.bb4(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/joints/gear_joint.dart"," This example shows how to use a `GearJoint`. \n \n Drag the box along the specified axis and observe gears respond to the \n translation.\n ").aP(0,"MotorJoint",new A.bb5(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/joints/motor_joint.dart"," This example shows how to use a `MotorJoint`. The ball spins around the \n center point. Tap the screen to change the direction.\n ").aP(0,"MouseJoint",new A.bb6(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/joints/mouse_joint.dart"," In this example we use a `MouseJoint` to make the ball follow the mouse\n when you drag it around.\n ").aP(0,"PrismaticJoint",new A.bb7(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/joints/prismatic_joint.dart"," This example shows how to use a `PrismaticJoint`. \n \n Drag the box along the specified axis, bound between lower and upper limits.\n Also, there's a motor enabled that's pulling the box to the lower limit.\n ").aP(0,"PulleyJoint",new A.bb8(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/joints/pulley_joint.dart"," This example shows how to use a `PulleyJoint`. Drag one of the boxes and see \n how the other one gets moved by the pulley\n ").aP(0,"RevoluteJoint",new A.bb9(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/joints/revolute_joint.dart",u.z).aP(0,"RopeJoint",new A.bba(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/joints/rope_joint.dart"," This example shows how to use a `RopeJoint`. \n \n Drag the box handle along the axis and observe the rope respond to the \n movement.\n ").aP(0,"WeldJoint",new A.bbb(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_forge2d/joints/weld_joint.dart"," This example shows how to use a `WeldJoint`. Tap the screen to add a \n ball to test the bridge built using a `WeldJoint`\n ")}, +bav:function bav(){}, +baw:function baw(){}, +bax:function bax(){}, +baz:function baz(){}, +baA:function baA(){}, +baB:function baB(){}, +baC:function baC(){}, +baD:function baD(){}, +baE:function baE(){}, +baF:function baF(){}, +baG:function baG(){}, +bay:function bay(){}, +bb1:function bb1(){}, +bb2:function bb2(){}, +bb3:function bb3(){}, +bb4:function bb4(){}, +bb5:function bb5(){}, +bb6:function bb6(){}, +bb7:function bb7(){}, +bb8:function bb8(){}, +bb9:function bb9(){}, +bba:function bba(){}, +bbb:function bbb(){}, +blk(){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=null,a9=$.js(),b0=t.rK,b1=A.b([],b0),b2=A.b([],t.Vn),b3=new A.ce() +$.fJ() +b3.bR(0) +s=new A.ce() +s.bR(0) +r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=A.e6() +b0=A.b([],b0) +i=new A.ce() +i.bR(0) +h=A.e6() +g=A.dQ() +f=A.dQ() +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new A.a(new Float64Array(2)) +a7.v(a9) +a6=new A.iv(b1,b2,a7,new A.dK(),new A.ct(b3),new A.ct(s),new A.ec(0,0,0),new A.be(new A.a(r),new A.av(0,1)),new A.a(q),new A.a(p),new A.ix(),new A.iy(new A.dG(new A.a(o)),new A.a(n),new A.a(m)),new A.dz(new A.a(l),new A.a(k)),j,b0,new A.ct(i),h,new A.ir(g,f,new A.bP(new A.a(e),new A.a(d),new A.a(c)),new A.bP(new A.a(b),new A.a(a),new A.a(a0))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a1),new A.a(a2),new A.a(a3)),new A.bP(new A.a(a4),new A.a(a5),new A.a(a6))) +a9=A.jC() +b0=A.b([],t.t) +a6.f=a6.at=a6.Q=a6.z=!0 +a6.a=4 +a9=new A.hM(new A.i7(a9,b0,A.C(t.vI)),A.b([],t.go)) +a9.c=new A.i5() +a6.b=a9 +a6.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +b0=A.b([],t.ZS) +b1=A.b([],t.Ic) +b2=A.b([],t.dK) +b3=A.b([],t.eR) +s=A.b([],t.M0) +r=A.b([],t.DZ) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +a6.ay=new A.ii(b0,A.C(t.W8),b1,b2,b3,s,r,a6,new A.cH(new A.a(q),new A.a(p)),new A.cH(new A.a(o),new A.a(n)),new A.a(m),new A.be(new A.a(l),new A.av(0,1)),new A.be(new A.a(k),new A.av(0,1)),new A.io(new A.dz(new A.a(j),new A.a(i)),new A.dG(new A.a(h))),new A.av(0,1),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +a9.d=new A.iw() +a9=t.s +b0=t.g +b1=new A.acd(a8,a6,-2147483647,a8,B.e,new A.e([],a9),new A.e([],b0)) +b1.ske(a7) +b2=A.aU(a8,a8,a8,a8,a8,a8) +b3=b2.ax +s=new A.a(new Float64Array(2)) +s.ag(10) +r=b3.at.e +r.a7(s) +r.D() +b3.dx=null +b3=b2 +s=$.aC() +r=$.aL() +q=A.b([],t.u) +p=A.aP(A.aQ(),t.y) +a9=new A.qZ(b1,b3,s,r,B.m,q,p,A.C(t.S),A.C(t.F),0,a8,B.e,new A.e([],a9),new A.e([],b0)) +a9.aT(b2,a8,b1,t.E) +return a9}, +bD3(){return A.blk()}, +qZ:function qZ(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +acd:function acd(a,b,c,d,e,f,g){var _=this +_.M$=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +aTG:function aTG(){}, +aTH:function aTH(a){this.a=a}, +aqa:function aqa(){}, +aqc:function aqc(){}, +blH(){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=null,a9=$.js(),b0=t.rK,b1=A.b([],b0),b2=A.b([],t.Vn),b3=new A.ce() +$.fJ() +b3.bR(0) +s=new A.ce() +s.bR(0) +r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=A.e6() +b0=A.b([],b0) +i=new A.ce() +i.bR(0) +h=A.e6() +g=A.dQ() +f=A.dQ() +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new A.a(new Float64Array(2)) +a7.v(a9) +a6=new A.iv(b1,b2,a7,new A.dK(),new A.ct(b3),new A.ct(s),new A.ec(0,0,0),new A.be(new A.a(r),new A.av(0,1)),new A.a(q),new A.a(p),new A.ix(),new A.iy(new A.dG(new A.a(o)),new A.a(n),new A.a(m)),new A.dz(new A.a(l),new A.a(k)),j,b0,new A.ct(i),h,new A.ir(g,f,new A.bP(new A.a(e),new A.a(d),new A.a(c)),new A.bP(new A.a(b),new A.a(a),new A.a(a0))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a1),new A.a(a2),new A.a(a3)),new A.bP(new A.a(a4),new A.a(a5),new A.a(a6))) +a9=A.jC() +b0=A.b([],t.t) +a6.f=a6.at=a6.Q=a6.z=!0 +a6.a=4 +a9=new A.hM(new A.i7(a9,b0,A.C(t.vI)),A.b([],t.go)) +a9.c=new A.i5() +a6.b=a9 +a6.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +b0=A.b([],t.ZS) +b1=A.b([],t.Ic) +b2=A.b([],t.dK) +b3=A.b([],t.eR) +s=A.b([],t.M0) +r=A.b([],t.DZ) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +a6.ay=new A.ii(b0,A.C(t.W8),b1,b2,b3,s,r,a6,new A.cH(new A.a(q),new A.a(p)),new A.cH(new A.a(o),new A.a(n)),new A.a(m),new A.be(new A.a(l),new A.av(0,1)),new A.be(new A.a(k),new A.av(0,1)),new A.io(new A.dz(new A.a(j),new A.a(i)),new A.dG(new A.a(h))),new A.av(0,1),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +a9.d=new A.iw() +a9=t.s +b0=t.g +b1=new A.a2A(a8,a6,-2147483647,a8,B.e,new A.e([],a9),new A.e([],b0)) +b1.ske(a7) +b2=A.aU(a8,a8,a8,a8,a8,a8) +b3=b2.ax +s=new A.a(new Float64Array(2)) +s.ag(10) +r=b3.at.e +r.a7(s) +r.D() +b3.dx=null +b3=b2 +s=$.aC() +r=$.aL() +q=A.b([],t.u) +p=A.aP(A.aQ(),t.y) +a9=new A.r5(b1,b3,s,r,B.m,q,p,A.C(t.S),A.C(t.F),0,a8,B.e,new A.e([],a9),new A.e([],b0)) +a9.aT(b2,a8,b1,t.E) +return a9}, +bDR(){return A.blH()}, +r5:function r5(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a2A:function a2A(a,b,c,d,e,f,g){var _=this +_.M$=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +ahY:function ahY(){}, +ahZ:function ahZ(){}, +bmN(){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,b4=new A.a(new Float64Array(2)) +b4.ag(0) +s=$.js() +r=t.rK +q=A.b([],r) +p=A.b([],t.Vn) +o=new A.ce() +$.fJ() +o.bR(0) +n=new A.ce() +n.bR(0) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +f=new Float64Array(2) +e=A.e6() +r=A.b([],r) +d=new A.ce() +d.bR(0) +c=A.e6() +b=A.dQ() +a=A.dQ() +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new Float64Array(2) +a8=new Float64Array(2) +a9=new Float64Array(2) +b0=new Float64Array(2) +b1=new Float64Array(2) +b2=new A.a(new Float64Array(2)) +b2.v(s) +b1=new A.iv(q,p,b2,new A.dK(),new A.ct(o),new A.ct(n),new A.ec(0,0,0),new A.be(new A.a(m),new A.av(0,1)),new A.a(l),new A.a(k),new A.ix(),new A.iy(new A.dG(new A.a(j)),new A.a(i),new A.a(h)),new A.dz(new A.a(g),new A.a(f)),e,r,new A.ct(d),c,new A.ir(b,a,new A.bP(new A.a(a0),new A.a(a1),new A.a(a2)),new A.bP(new A.a(a3),new A.a(a4),new A.a(a5))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a6),new A.a(a7),new A.a(a8)),new A.bP(new A.a(a9),new A.a(b0),new A.a(b1))) +s=A.jC() +r=A.b([],t.t) +b1.f=b1.at=b1.Q=b1.z=!0 +b1.a=4 +s=new A.hM(new A.i7(s,r,A.C(t.vI)),A.b([],t.go)) +s.c=new A.i5() +b1.b=s +b1.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +r=A.b([],t.ZS) +q=A.b([],t.Ic) +p=A.b([],t.dK) +o=A.b([],t.eR) +n=A.b([],t.M0) +m=A.b([],t.DZ) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +f=new Float64Array(2) +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +b1.ay=new A.ii(r,A.C(t.W8),q,p,o,n,m,b1,new A.cH(new A.a(l),new A.a(k)),new A.cH(new A.a(j),new A.a(i)),new A.a(h),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(f),new A.av(0,1)),new A.io(new A.dz(new A.a(e),new A.a(d)),new A.dG(new A.a(c))),new A.av(0,1),new A.be(new A.a(b),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +s.d=new A.iw() +s=t.s +r=t.g +q=new A.a46(b3,b1,-2147483647,b3,B.e,new A.e([],s),new A.e([],r)) +q.ske(b4) +b4=q +q=A.aU(b3,b3,b3,b3,b3,b3) +p=q.ax +o=new A.a(new Float64Array(2)) +o.ag(10) +n=p.at.e +n.a7(o) +n.D() +p.dx=null +p=q +o=$.aC() +n=$.aL() +m=A.b([],t.u) +l=A.aP(A.aQ(),t.y) +s=new A.rn(b4,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,b3,B.e,new A.e([],s),new A.e([],r)) +s.aT(q,b3,b4,t.E) +return s}, +bFr(){return A.bmN()}, +rn:function rn(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a46:function a46(a,b,c,d,e,f,g){var _=this +_.to=_.ry=$ +_.M$=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +ajy:function ajy(){}, +ajz:function ajz(){}, +bmQ(){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=null,a9=new Float64Array(2),b0=$.js(),b1=t.rK,b2=A.b([],b1),b3=A.b([],t.Vn),b4=new A.ce() +$.fJ() +b4.bR(0) +s=new A.ce() +s.bR(0) +r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=A.e6() +b1=A.b([],b1) +i=new A.ce() +i.bR(0) +h=A.e6() +g=A.dQ() +f=A.dQ() +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new A.a(new Float64Array(2)) +a7.v(b0) +a6=new A.iv(b2,b3,a7,new A.dK(),new A.ct(b4),new A.ct(s),new A.ec(0,0,0),new A.be(new A.a(r),new A.av(0,1)),new A.a(q),new A.a(p),new A.ix(),new A.iy(new A.dG(new A.a(o)),new A.a(n),new A.a(m)),new A.dz(new A.a(l),new A.a(k)),j,b1,new A.ct(i),h,new A.ir(g,f,new A.bP(new A.a(e),new A.a(d),new A.a(c)),new A.bP(new A.a(b),new A.a(a),new A.a(a0))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a1),new A.a(a2),new A.a(a3)),new A.bP(new A.a(a4),new A.a(a5),new A.a(a6))) +b0=A.jC() +b1=A.b([],t.t) +a6.f=a6.at=a6.Q=a6.z=!0 +a6.a=4 +b0=new A.hM(new A.i7(b0,b1,A.C(t.vI)),A.b([],t.go)) +b0.c=new A.i5() +a6.b=b0 +a6.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +b1=A.b([],t.ZS) +b2=A.b([],t.Ic) +b3=A.b([],t.dK) +b4=A.b([],t.eR) +s=A.b([],t.M0) +r=A.b([],t.DZ) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +a6.ay=new A.ii(b1,A.C(t.W8),b2,b3,b4,s,r,a6,new A.cH(new A.a(q),new A.a(p)),new A.cH(new A.a(o),new A.a(n)),new A.a(m),new A.be(new A.a(l),new A.av(0,1)),new A.be(new A.a(k),new A.av(0,1)),new A.io(new A.dz(new A.a(j),new A.a(i)),new A.dG(new A.a(h))),new A.av(0,1),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +b0.d=new A.iw() +b0=t.s +b1=t.g +a9=new A.a4i(new A.a(a9),a8,a6,-2147483647,a8,B.e,new A.e([],b0),new A.e([],b1)) +a9.ske(a7) +b2=A.aU(a8,a8,a8,a8,a8,a8) +b3=b2.ax +b4=new A.a(new Float64Array(2)) +b4.ag(10) +s=b3.at.e +s.a7(b4) +s.D() +b3.dx=null +b3=b2 +b4=$.aC() +s=$.aL() +r=A.b([],t.u) +q=A.aP(A.aQ(),t.y) +b0=new A.rp(a9,b3,b4,s,B.m,r,q,A.C(t.S),A.C(t.F),0,a8,B.e,new A.e([],b0),new A.e([],b1)) +b0.aT(b2,a8,a9,t.E) +return b0}, +bFv(){return A.bmQ()}, +rp:function rp(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a4i:function a4i(a,b,c,d,e,f,g,h){var _=this +_.ry=$ +_.to=a +_.M$=b +_.go=c +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=d +_.w=!1 +_.y=e +_.z=f +_.Q=g +_.as=h}, +a5F:function a5F(a,b,c,d,e,f,g,h,i){var _=this +_.at=a +_.ax=b +_.ay=c +_.ch=d +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +ajG:function ajG(){}, +bo5(){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=null,a9=new Float64Array(2),b0=new Float64Array(2),b1=$.js(),b2=t.rK,b3=A.b([],b2),b4=A.b([],t.Vn),b5=new A.ce() +$.fJ() +b5.bR(0) +s=new A.ce() +s.bR(0) +r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=A.e6() +b2=A.b([],b2) +i=new A.ce() +i.bR(0) +h=A.e6() +g=A.dQ() +f=A.dQ() +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new A.a(new Float64Array(2)) +a7.v(b1) +a6=new A.iv(b3,b4,a7,new A.dK(),new A.ct(b5),new A.ct(s),new A.ec(0,0,0),new A.be(new A.a(r),new A.av(0,1)),new A.a(q),new A.a(p),new A.ix(),new A.iy(new A.dG(new A.a(o)),new A.a(n),new A.a(m)),new A.dz(new A.a(l),new A.a(k)),j,b2,new A.ct(i),h,new A.ir(g,f,new A.bP(new A.a(e),new A.a(d),new A.a(c)),new A.bP(new A.a(b),new A.a(a),new A.a(a0))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a1),new A.a(a2),new A.a(a3)),new A.bP(new A.a(a4),new A.a(a5),new A.a(a6))) +b1=A.jC() +b2=A.b([],t.t) +a6.f=a6.at=a6.Q=a6.z=!0 +a6.a=4 +b1=new A.hM(new A.i7(b1,b2,A.C(t.vI)),A.b([],t.go)) +b1.c=new A.i5() +a6.b=b1 +a6.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +b2=A.b([],t.ZS) +b3=A.b([],t.Ic) +b4=A.b([],t.dK) +b5=A.b([],t.eR) +s=A.b([],t.M0) +r=A.b([],t.DZ) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +a6.ay=new A.ii(b2,A.C(t.W8),b3,b4,b5,s,r,a6,new A.cH(new A.a(q),new A.a(p)),new A.cH(new A.a(o),new A.a(n)),new A.a(m),new A.be(new A.a(l),new A.av(0,1)),new A.be(new A.a(k),new A.av(0,1)),new A.io(new A.dz(new A.a(j),new A.a(i)),new A.dG(new A.a(h))),new A.av(0,1),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +b1.d=new A.iw() +b1=t.s +b2=t.g +b0=new A.a7_(new A.a(b0),a6,-2147483647,a8,B.e,new A.e([],b1),new A.e([],b2)) +b0.ske(new A.a(a9)) +a9=b0 +b0=A.aU(a8,a8,a8,a8,a8,a8) +b3=b0.ax +b4=new A.a(new Float64Array(2)) +b4.ag(10) +b5=b3.at.e +b5.a7(b4) +b5.D() +b3.dx=null +b3=b0 +b4=$.aC() +b5=$.aL() +s=A.b([],t.u) +r=A.aP(A.aQ(),t.y) +b1=new A.rM(a9,b3,b4,b5,B.m,s,r,A.C(t.S),A.C(t.F),0,a8,B.e,new A.e([],b1),new A.e([],b2)) +b1.aT(b0,a8,a9,t.E) +return b1}, +bHk(){return A.bo5()}, +rM:function rM(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a7_:function a7_(a,b,c,d,e,f,g){var _=this +_.to=_.ry=$ +_.x2=!0 +_.xr=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +a5E:function a5E(a,b,c,d,e,f){var _=this +_.at=a +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b +_.w=!1 +_.y=c +_.z=d +_.Q=e +_.as=f}, +als:function als(){}, +bo8(){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,b4=new A.a(new Float64Array(2)) +b4.p(0,10) +s=$.js() +r=t.rK +q=A.b([],r) +p=A.b([],t.Vn) +o=new A.ce() +$.fJ() +o.bR(0) +n=new A.ce() +n.bR(0) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +f=new Float64Array(2) +e=A.e6() +r=A.b([],r) +d=new A.ce() +d.bR(0) +c=A.e6() +b=A.dQ() +a=A.dQ() +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new Float64Array(2) +a8=new Float64Array(2) +a9=new Float64Array(2) +b0=new Float64Array(2) +b1=new Float64Array(2) +b2=new A.a(new Float64Array(2)) +b2.v(s) +b1=new A.iv(q,p,b2,new A.dK(),new A.ct(o),new A.ct(n),new A.ec(0,0,0),new A.be(new A.a(m),new A.av(0,1)),new A.a(l),new A.a(k),new A.ix(),new A.iy(new A.dG(new A.a(j)),new A.a(i),new A.a(h)),new A.dz(new A.a(g),new A.a(f)),e,r,new A.ct(d),c,new A.ir(b,a,new A.bP(new A.a(a0),new A.a(a1),new A.a(a2)),new A.bP(new A.a(a3),new A.a(a4),new A.a(a5))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a6),new A.a(a7),new A.a(a8)),new A.bP(new A.a(a9),new A.a(b0),new A.a(b1))) +s=A.jC() +r=A.b([],t.t) +b1.f=b1.at=b1.Q=b1.z=!0 +b1.a=4 +s=new A.hM(new A.i7(s,r,A.C(t.vI)),A.b([],t.go)) +s.c=new A.i5() +b1.b=s +b1.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +r=A.b([],t.ZS) +q=A.b([],t.Ic) +p=A.b([],t.dK) +o=A.b([],t.eR) +n=A.b([],t.M0) +m=A.b([],t.DZ) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +f=new Float64Array(2) +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +b1.ay=new A.ii(r,A.C(t.W8),q,p,o,n,m,b1,new A.cH(new A.a(l),new A.a(k)),new A.cH(new A.a(j),new A.a(i)),new A.a(h),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(f),new A.av(0,1)),new A.io(new A.dz(new A.a(e),new A.a(d)),new A.dG(new A.a(c))),new A.av(0,1),new A.be(new A.a(b),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +s.d=new A.iw() +s=t.s +r=t.g +q=new A.a72(b3,!1,b1,-2147483647,b3,B.e,new A.e([],s),new A.e([],r)) +q.ske(b4) +b4=q +q=A.aU(b3,b3,b3,b3,b3,b3) +p=q.ax +o=new A.a(new Float64Array(2)) +o.ag(10) +n=p.at.e +n.a7(o) +n.D() +p.dx=null +p=q +o=$.aC() +n=$.aL() +m=A.b([],t.u) +l=A.aP(A.aQ(),t.y) +s=new A.rN(b4,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,b3,B.e,new A.e([],s),new A.e([],r)) +s.aT(q,b3,b4,t.E) +return s}, +bHl(){return A.bo8()}, +rN:function rN(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a72:function a72(a,b,c,d,e,f,g,h){var _=this +_.to=_.ry=$ +_.x1=null +_.M$=a +_.f5$=b +_.go=c +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=d +_.w=!1 +_.y=e +_.z=f +_.Q=g +_.as=h}, +alw:function alw(){}, +alx:function alx(){}, +boV(){var s,r,q,p=null,o=new Float64Array(2),n=A.zl(p,p,p),m=A.aU(p,p,p,p,p,p),l=m.ax,k=new A.a(new Float64Array(2)) +k.ag(10) +s=l.at.e +s.a7(k) +s.D() +l.dx=null +l=m +k=$.aC() +s=$.aL() +r=A.b([],t.u) +q=A.aP(A.aQ(),t.y) +o=new A.td(new A.a(o),n,l,k,s,B.m,r,q,A.C(t.S),A.C(t.F),0,p,B.e,new A.e([],t.s),new A.e([],t.g)) +o.aT(m,p,n,t.E) +return o}, +bIL(){return A.boV()}, +td:function td(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.hJ=a +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +a5D:function a5D(a,b,c,d,e,f,g,h,i){var _=this +_.at=a +_.ax=b +_.ay=c +_.ch=d +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +boZ(){var s,r,q,p=null,o=A.zl(p,p,p),n=A.aU(p,p,p,p,p,p),m=n.ax,l=new A.a(new Float64Array(2)) +l.ag(10) +s=m.at.e +s.a7(l) +s.D() +m.dx=null +m=n +l=$.aC() +s=$.aL() +r=A.b([],t.u) +q=A.aP(A.aQ(),t.y) +m=new A.te(o,m,l,s,B.m,r,q,A.C(t.S),A.C(t.F),0,p,B.e,new A.e([],t.s),new A.e([],t.g)) +m.aT(n,p,o,t.E) +return m}, +bIQ(){return A.boZ()}, +te:function te(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a9q:function a9q(a,b,c,d,e,f){var _=this +_.at=a +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b +_.w=!1 +_.y=c +_.z=d +_.Q=e +_.as=f}, +bph(){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,b4=new A.a(new Float64Array(2)) +b4.p(0,10) +s=$.js() +r=t.rK +q=A.b([],r) +p=A.b([],t.Vn) +o=new A.ce() +$.fJ() +o.bR(0) +n=new A.ce() +n.bR(0) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +f=new Float64Array(2) +e=A.e6() +r=A.b([],r) +d=new A.ce() +d.bR(0) +c=A.e6() +b=A.dQ() +a=A.dQ() +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new Float64Array(2) +a8=new Float64Array(2) +a9=new Float64Array(2) +b0=new Float64Array(2) +b1=new Float64Array(2) +b2=new A.a(new Float64Array(2)) +b2.v(s) +b1=new A.iv(q,p,b2,new A.dK(),new A.ct(o),new A.ct(n),new A.ec(0,0,0),new A.be(new A.a(m),new A.av(0,1)),new A.a(l),new A.a(k),new A.ix(),new A.iy(new A.dG(new A.a(j)),new A.a(i),new A.a(h)),new A.dz(new A.a(g),new A.a(f)),e,r,new A.ct(d),c,new A.ir(b,a,new A.bP(new A.a(a0),new A.a(a1),new A.a(a2)),new A.bP(new A.a(a3),new A.a(a4),new A.a(a5))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a6),new A.a(a7),new A.a(a8)),new A.bP(new A.a(a9),new A.a(b0),new A.a(b1))) +s=A.jC() +r=A.b([],t.t) +b1.f=b1.at=b1.Q=b1.z=!0 +b1.a=4 +s=new A.hM(new A.i7(s,r,A.C(t.vI)),A.b([],t.go)) +s.c=new A.i5() +b1.b=s +b1.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +r=A.b([],t.ZS) +q=A.b([],t.Ic) +p=A.b([],t.dK) +o=A.b([],t.eR) +n=A.b([],t.M0) +m=A.b([],t.DZ) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +f=new Float64Array(2) +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +b1.ay=new A.ii(r,A.C(t.W8),q,p,o,n,m,b1,new A.cH(new A.a(l),new A.a(k)),new A.cH(new A.a(j),new A.a(i)),new A.a(h),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(f),new A.av(0,1)),new A.io(new A.dz(new A.a(e),new A.a(d)),new A.dG(new A.a(c))),new A.av(0,1),new A.be(new A.a(b),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +s.d=new A.iw() +s=t.s +r=t.g +q=new A.aaC(b3,b1,-2147483647,b3,B.e,new A.e([],s),new A.e([],r)) +q.ske(b4) +b4=q +q=A.aU(b3,b3,b3,b3,b3,b3) +p=q.ax +o=new A.a(new Float64Array(2)) +o.ag(10) +n=p.at.e +n.a7(o) +n.D() +p.dx=null +p=q +o=$.aC() +n=$.aL() +m=A.b([],t.u) +l=A.aP(A.aQ(),t.y) +s=new A.tk(b4,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,b3,B.e,new A.e([],s),new A.e([],r)) +s.aT(q,b3,b4,t.E) +return s}, +bJg(){return A.bph()}, +tk:function tk(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aaC:function aaC(a,b,c,d,e,f,g){var _=this +_.M$=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +a0z:function a0z(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.RG=a +_.at=$ +_.ax=b +_.ay=c +_.ch=d +_.CW=e +_.cx=null +_.db=_.cy=$ +_.R$=f +_.S$=g +_.aa$=h +_.M$=i +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aoK:function aoK(){}, +aoL:function aoL(){}, +bpj(){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=null,a9=$.js(),b0=t.rK,b1=A.b([],b0),b2=A.b([],t.Vn),b3=new A.ce() +$.fJ() +b3.bR(0) +s=new A.ce() +s.bR(0) +r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=A.e6() +b0=A.b([],b0) +i=new A.ce() +i.bR(0) +h=A.e6() +g=A.dQ() +f=A.dQ() +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new A.a(new Float64Array(2)) +a7.v(a9) +a6=new A.iv(b1,b2,a7,new A.dK(),new A.ct(b3),new A.ct(s),new A.ec(0,0,0),new A.be(new A.a(r),new A.av(0,1)),new A.a(q),new A.a(p),new A.ix(),new A.iy(new A.dG(new A.a(o)),new A.a(n),new A.a(m)),new A.dz(new A.a(l),new A.a(k)),j,b0,new A.ct(i),h,new A.ir(g,f,new A.bP(new A.a(e),new A.a(d),new A.a(c)),new A.bP(new A.a(b),new A.a(a),new A.a(a0))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a1),new A.a(a2),new A.a(a3)),new A.bP(new A.a(a4),new A.a(a5),new A.a(a6))) +a9=A.jC() +b0=A.b([],t.t) +a6.f=a6.at=a6.Q=a6.z=!0 +a6.a=4 +a9=new A.hM(new A.i7(a9,b0,A.C(t.vI)),A.b([],t.go)) +a9.c=new A.i5() +a6.b=a9 +a6.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +b0=A.b([],t.ZS) +b1=A.b([],t.Ic) +b2=A.b([],t.dK) +b3=A.b([],t.eR) +s=A.b([],t.M0) +r=A.b([],t.DZ) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +a6.ay=new A.ii(b0,A.C(t.W8),b1,b2,b3,s,r,a6,new A.cH(new A.a(q),new A.a(p)),new A.cH(new A.a(o),new A.a(n)),new A.a(m),new A.be(new A.a(l),new A.av(0,1)),new A.be(new A.a(k),new A.av(0,1)),new A.io(new A.dz(new A.a(j),new A.a(i)),new A.dG(new A.a(h))),new A.av(0,1),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +a9.d=new A.iw() +a9=t.s +b0=t.g +b1=new A.aaG(a8,!1,a6,-2147483647,a8,B.e,new A.e([],a9),new A.e([],b0)) +b1.ske(a7) +b2=A.aU(a8,a8,a8,a8,a8,a8) +b3=b2.ax +s=new A.a(new Float64Array(2)) +s.ag(10) +r=b3.at.e +r.a7(s) +r.D() +b3.dx=null +b3=b2 +s=$.aC() +r=$.aL() +q=A.b([],t.u) +p=A.aP(A.aQ(),t.y) +a9=new A.tm(b1,b3,s,r,B.m,q,p,A.C(t.S),A.C(t.F),0,a8,B.e,new A.e([],a9),new A.e([],b0)) +a9.aT(b2,a8,b1,t.E) +return a9}, +bJh(){return A.bpj()}, +tm:function tm(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aaG:function aaG(a,b,c,d,e,f,g,h){var _=this +_.M$=a +_.f5$=b +_.go=c +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=d +_.w=!1 +_.y=e +_.z=f +_.Q=g +_.as=h}, +aoS:function aoS(){}, +aoT:function aoT(){}, +bqV(){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=null,a9=$.js(),b0=t.rK,b1=A.b([],b0),b2=A.b([],t.Vn),b3=new A.ce() +$.fJ() +b3.bR(0) +s=new A.ce() +s.bR(0) +r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=A.e6() +b0=A.b([],b0) +i=new A.ce() +i.bR(0) +h=A.e6() +g=A.dQ() +f=A.dQ() +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new A.a(new Float64Array(2)) +a7.v(a9) +a6=new A.iv(b1,b2,a7,new A.dK(),new A.ct(b3),new A.ct(s),new A.ec(0,0,0),new A.be(new A.a(r),new A.av(0,1)),new A.a(q),new A.a(p),new A.ix(),new A.iy(new A.dG(new A.a(o)),new A.a(n),new A.a(m)),new A.dz(new A.a(l),new A.a(k)),j,b0,new A.ct(i),h,new A.ir(g,f,new A.bP(new A.a(e),new A.a(d),new A.a(c)),new A.bP(new A.a(b),new A.a(a),new A.a(a0))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a1),new A.a(a2),new A.a(a3)),new A.bP(new A.a(a4),new A.a(a5),new A.a(a6))) +a9=A.jC() +b0=A.b([],t.t) +a6.f=a6.at=a6.Q=a6.z=!0 +a6.a=4 +a9=new A.hM(new A.i7(a9,b0,A.C(t.vI)),A.b([],t.go)) +a9.c=new A.i5() +a6.b=a9 +a6.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +b0=A.b([],t.ZS) +b1=A.b([],t.Ic) +b2=A.b([],t.dK) +b3=A.b([],t.eR) +s=A.b([],t.M0) +r=A.b([],t.DZ) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +a6.ay=new A.ii(b0,A.C(t.W8),b1,b2,b3,s,r,a6,new A.cH(new A.a(q),new A.a(p)),new A.cH(new A.a(o),new A.a(n)),new A.a(m),new A.be(new A.a(l),new A.av(0,1)),new A.be(new A.a(k),new A.av(0,1)),new A.io(new A.dz(new A.a(j),new A.a(i)),new A.dG(new A.a(h))),new A.av(0,1),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +a9.d=new A.iw() +a9=t.s +b0=t.g +b1=new A.aey(a8,a6,-2147483647,a8,B.e,new A.e([],a9),new A.e([],b0)) +b1.ske(a7) +b2=A.aU(a8,a8,a8,a8,a8,a8) +b3=b2.ax +s=new A.a(new Float64Array(2)) +s.ag(10) +r=b3.at.e +r.a7(s) +r.D() +b3.dx=null +b3=b2 +s=$.aC() +r=$.aL() +q=A.b([],t.u) +p=A.aP(A.aQ(),t.y) +a9=new A.tP(b1,b3,s,r,B.m,q,p,A.C(t.S),A.C(t.F),0,a8,B.e,new A.e([],a9),new A.e([],b0)) +a9.aT(b2,a8,b1,t.E) +return a9}, +bMe(){return A.bqV()}, +tP:function tP(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aey:function aey(a,b,c,d,e,f,g){var _=this +_.M$=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +ast:function ast(){}, +asu:function asu(){}, +bnJ(a,b){var s=$.G().Z() +return new A.a6e(a,b,s,0,null,B.e,new A.e([],t.s),new A.e([],t.g))}, +w9:function w9(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.hJ=a +_.kt=b +_.hK=c +_.fE=_.dP=null +_.k3=d +_.k4=e +_.ok=$ +_.p2=!1 +_.cy$=f +_.db$=g +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=h +_.k3$=i +_.k4$=!1 +_.at=j +_.ax=k +_.ay=l +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +aP_:function aP_(a){this.a=a}, +a6e:function a6e(a,b,c,d,e,f,g,h){var _=this +_.at=a +_.ax=b +_.ay=c +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=d +_.w=!1 +_.y=e +_.z=f +_.Q=g +_.as=h}, +aJe:function aJe(){}, +uA:function uA(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.RG=a +_.at=$ +_.ax=b +_.ay=c +_.ch=d +_.CW=e +_.cx=null +_.db=_.cy=$ +_.R$=f +_.S$=g +_.aa$=h +_.M$=i +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aLK:function aLK(){this.b=this.a=null}, +aE_:function aE_(){this.b=this.a=null +this.d=0}, +anK:function anK(){}, +aAc(a,b){var s=null,r=A.ar(),q=B.t.aW() +r=new A.a1z(b,a,s,s,!0,r,$,q,s,s,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.iI(s,s,s,s,s,s,!0) +return r}, +Bl:function Bl(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aaB:function aaB(a,b,c,d,e,f,g,h){var _=this +_.ry=a +_.M$=b +_.go=c +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=d +_.w=!1 +_.y=e +_.z=f +_.Q=g +_.as=h}, +aQA:function aQA(a,b){this.a=a +this.b=b}, +a0y:function a0y(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.RG=a +_.at=$ +_.ax=b +_.ay=c +_.ch=d +_.CW=e +_.cx=null +_.db=_.cy=$ +_.R$=f +_.S$=g +_.aa$=h +_.M$=i +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a1z:function a1z(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.RG=a +_.rx=b +_.at=$ +_.ax=c +_.ay=d +_.ch=e +_.CW=f +_.cx=null +_.db=_.cy=$ +_.R$=g +_.S$=h +_.aa$=i +_.M$=j +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +aoI:function aoI(){}, +aoJ:function aoJ(){}, +bgd(a,b){var s,r,q,p=null +if(b==null){s=new A.a(new Float64Array(2)) +s.p(2,3)}else s=b +r=A.ar() +q=B.t.aW() +s=new A.a8M(a,s,p,p,!0,r,$,q,p,p,0,p,B.e,new A.e([],t.s),new A.e([],t.g)) +s.iI(p,p,p,p,p,p,!0) +return s}, +BS:function BS(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +ace:function ace(a,b,c,d,e,f,g){var _=this +_.M$=a +_.go=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +a8M:function a8M(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.RG=a +_.rx=b +_.at=$ +_.ax=c +_.ay=d +_.ch=e +_.CW=f +_.cx=null +_.db=_.cy=$ +_.R$=g +_.S$=h +_.aa$=i +_.M$=j +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +aqb:function aqb(){}, +aqd:function aqd(){}, +C1:function C1(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +ad2:function ad2(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){var _=this +_.RG=$ +_.rx=!1 +_.ry=a +_.to=b +_.x1=c +_.x2=0 +_.xr=d +_.y1=e +_.bp$=f +_.aN$=g +_.cZ$=h +_.cL$=i +_.at=$ +_.ax=j +_.ay=k +_.ch=l +_.CW=m +_.cx=null +_.db=_.cy=$ +_.R$=n +_.S$=o +_.aa$=p +_.M$=q +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=r +_.w=!1 +_.y=s +_.z=a0 +_.Q=a1 +_.as=a2}, +ar1:function ar1(){}, +l6(a,b,c,d){var s,r,q=null,p=B.dU.aW(),o=new A.a(new Float64Array(2)) +o.p(0,1000) +s=A.ar() +r=B.t.aW() +p=new A.iE(d,b,a,p,o,q,q,q,q,q,q,!0,s,$,r,q,q,0,q,B.e,new A.e([],t.s),new A.e([],t.g)) +p.iI(q,q,q,q,q,q,!0) +p.B5(a,b,c,d) +return p}, +iE:function iE(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){var _=this +_.RG=$ +_.rx=!1 +_.ry=a +_.to=b +_.x1=c +_.x2=0 +_.xr=d +_.y1=e +_.bp$=f +_.aN$=g +_.cZ$=h +_.cL$=i +_.at=$ +_.ax=j +_.ay=k +_.ch=l +_.CW=m +_.cx=null +_.db=_.cy=$ +_.R$=n +_.S$=o +_.aa$=p +_.M$=q +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=r +_.w=!1 +_.y=s +_.z=a0 +_.Q=a1 +_.as=a2}, +Tv:function Tv(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6){var _=this +_.bp$=a +_.aN$=b +_.cZ$=c +_.cL$=d +_.RG=$ +_.rx=!1 +_.ry=e +_.to=f +_.x1=g +_.x2=0 +_.xr=h +_.y1=i +_.bp$=j +_.aN$=k +_.cZ$=l +_.cL$=m +_.at=$ +_.ax=n +_.ay=o +_.ch=p +_.CW=q +_.cx=null +_.db=_.cy=$ +_.R$=r +_.S$=s +_.aa$=a0 +_.M$=a1 +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=a2 +_.w=!1 +_.y=a3 +_.z=a4 +_.Q=a5 +_.as=a6}, +afF:function afF(){}, +asv:function asv(){}, +l_(a,b){var s,r,q,p,o=a.k4.ax.gun(),n=o.a,m=o.b,l=new A.a(new Float64Array(2)) +l.p(n,m) +s=o.c +r=new A.a(new Float64Array(2)) +r.p(s,m) +m=o.d +q=new A.a(new Float64Array(2)) +q.p(s,m) +p=new A.a(new Float64Array(2)) +p.p(n,m) +return A.b([A.aXt(l,r,b),A.aXt(r,q,b),A.aXt(p,q,b),A.aXt(l,p,b)],t.Vf)}, +aXt(a,b,c){var s=null,r=c==null?1:c,q=A.ar(),p=B.t.aW() +r=new A.ID(a,b,r,s,s,!0,q,$,p,s,s,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.iI(s,s,s,s,s,s,!0) +return r}, +ID:function ID(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.RG=a +_.rx=b +_.ry=c +_.at=$ +_.ax=d +_.ay=e +_.ch=f +_.CW=g +_.cx=null +_.db=_.cy=$ +_.R$=h +_.S$=i +_.aa$=j +_.M$=k +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=l +_.w=!1 +_.y=m +_.z=n +_.Q=o +_.as=p}, +axJ(a,b,c,d,e){var s=null,r=A.ar(),q=B.t.aW() +r=new A.L8(d,e,c,a,s,s,!0,r,$,q,s,s,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.iI(s,s,s,s,s,s,!0) +r.a1H(a,b,c,d,e) +return r}, +a2U(a,b,c){var s=null,r=A.ar(),q=B.t.aW() +r=new A.a2T(!1,b,c,a,B.R,s,s,!0,r,$,q,s,s,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.iI(s,s,s,s,s,s,!0) +r.a1H(B.R,s,a,b,c) +return r}, +L8:function L8(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.RG=a +_.rx=b +_.ry=c +_.to=d +_.at=$ +_.ax=e +_.ay=f +_.ch=g +_.CW=h +_.cx=null +_.db=_.cy=$ +_.R$=i +_.S$=j +_.aa$=k +_.M$=l +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +a2T:function a2T(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.aa=null +_.bp=$ +_.aN=!1 +_.f5$=a +_.RG=b +_.rx=c +_.ry=d +_.to=e +_.at=$ +_.ax=f +_.ay=g +_.ch=h +_.CW=i +_.cx=null +_.db=_.cy=$ +_.R$=j +_.S$=k +_.aa$=l +_.M$=m +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=n +_.w=!1 +_.y=o +_.z=p +_.Q=q +_.as=r}, +aij:function aij(){}, +bMz(a,b){var s=new A.afV(a,b,B.p) +s.at0(a,b) +return s}, +wU:function wU(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.hJ=a +_.kt=b +_.hK=c +_.k3=d +_.k4=e +_.ok=$ +_.p2=!1 +_.cy$=f +_.db$=g +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=h +_.k3$=i +_.k4$=!1 +_.at=j +_.ax=k +_.ay=l +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +aXz:function aXz(a){this.a=a}, +aXA:function aXA(){}, +DB:function DB(a){this.a=a}, +axB:function axB(){}, +axC:function axC(){}, +uz:function uz(a,b,c){this.c=a +this.d=b +this.a=c}, +afV:function afV(a,b,c){var _=this +_.d=a +_.e=b +_.a=_.f=null +_.b=c +_.c=null}, +aZb:function aZb(a){this.a=a}, +aZ8:function aZ8(a){this.a=a}, +aZa:function aZa(a,b){this.a=a +this.b=b}, +aZ9:function aZ9(a){this.a=a}, +bQO(a){var s=new A.eM("FlameIsolate",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Simple isolate example",new A.bap(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/bridge_libraries/flame_isolate/simple_isolate_example.dart"," This example showcases a simple FlameIsolate example, making it easy to \n continually run heavy load without stutter.\n \n Tap the brown square to swap between running heavy load in an isolate or\n synchronous.\n \n The selected backpressure strategy used for this example is\n `DiscardNewBackPressureStrategy`. This strategy discards all new jobs added\n to the queue if there is already a job in the queue.\n ")}, +bap:function bap(){}, +bi0(a){var s +if(a===1)return!1 +for(s=2;s") +s=A.ab(new A.W(b,new A.aSz(),s),!0,s.h("aI.E")) +return new A.abu(a,s,0,null,B.e,new A.e([],t.s),new A.e([],t.g))}, +BJ:function BJ(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +abu:function abu(a,b,c,d,e,f,g){var _=this +_.at=a +_.ax=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +aSz:function aSz(){}, +a2J:function a2J(a,b,c,d,e,f,g,h,i,j){var _=this +_.at=a +_.ax=b +_.ay=c +_.ch=d +_.CW=e +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +bQT(a){var s=new A.eM("Sample Games",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Padracing",new A.baH(),"https://github.com/flame-engine/flame/blob/main/examples/games/padracing"," This is an example game that uses Forge2D to handle the physics.\n In this game you should finish 3 laps in as little time as possible, it can\n be played as single player or with two players (on the same keyboard).\n Watch out for the balls, they make your car spin.\n ") +s.aP(0,"Rogue Shooter",new A.baI(),"https://github.com/flame-engine/flame/blob/main/examples/games/rogue_shooter"," A simple space shooter game used for testing performance of the collision\n detection system in Flame.\n ") +s.aP(0,"T-Rex",new A.baJ(),"https://github.com/flame-engine/flame/blob/main/examples/games/trex"," A game similar to the game in chrome that you get to play while offline.\n Press space or tap/click the screen to jump, the more obstacles you manage\n to survive, the more points you get.\n ")}, +baH:function baH(){}, +baI:function baI(){}, +baJ:function baJ(){}, +bQU(a){var s=new A.eM("Image",A.b([],t.C)) +a.c.push(s) +s.c=new A.a0i() +s.aP(0,"resize",new A.baK(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/image/resize.dart"," Shows how a dart:ui `Image` can be resized using Flame Image extensions.\n Use the properties on the side to change the size of the image.\n ")}, +baK:function baK(){}, +zH:function zH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +pW(){var s=null,r=B.t.aW(),q=A.ar(),p=new A.a(new Float64Array(2)),o=$.aa() +o=new A.aJ(o,new Float64Array(2)) +o.a7(p) +o.D() +r=new A.aaL($,r,s,q,o,B.o,0,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.b0(s,s,s,s,0,s,s,s,s) +return r}, +xL:function xL(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +adE:function adE(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.bB=!1 +_.k4=a +_.p1=b +_.p2=c +_.p3=d +_.p4=!1 +_.R8=e +_.RG=f +_.rx=!1 +_.ry=g +_.mj$=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +a2_:function a2_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.k4=a +_.p1=b +_.p2=c +_.p3=d +_.p4=!1 +_.R8=e +_.RG=f +_.rx=!1 +_.ry=g +_.mj$=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +a2r:function a2r(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.k4=a +_.p1=b +_.p2=c +_.p3=d +_.p4=!1 +_.R8=e +_.RG=f +_.rx=!1 +_.ry=g +_.mj$=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +aaL:function aaL(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.R$=a +_.S$=b +_.aa$=c +_.at=d +_.ax=e +_.ay=f +_.ch=g +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=h +_.w=!1 +_.y=i +_.z=j +_.Q=k +_.as=l}, +aoY:function aoY(){}, +yS:function yS(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aBP:function aBP(){}, +yT:function yT(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.aE=!0 +_.M$=a +_.k4=b +_.ok=c +_.p1=d +_.p2=e +_.p3=!1 +_.R$=f +_.S$=g +_.aa$=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +aib:function aib(){}, +aid:function aid(){}, +bmn(){var s,r,q,p,o=null,n=new A.a(new Float64Array(2)) +n.ag(100) +s=B.t.aW() +r=A.ar() +q=n +p=$.aa() +p=new A.aJ(p,new Float64Array(2)) +p.a7(q) +p.D() +s=new A.a2V(!1,o,o,!1,!0,!1,$,s,o,r,p,B.j,0,0,o,B.e,new A.e([],t.s),new A.e([],t.g)) +s.b0(B.j,o,o,o,0,o,o,o,n) +s.mK(B.j,o,o,o,o,o,0,o,!0,o,o,!1,o,n) +return s}, +yV:function yV(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.S=$ +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +a2V:function a2V(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.aE=!0 +_.f5$=a +_.M$=b +_.k4=c +_.ok=d +_.p1=e +_.p2=f +_.p3=!1 +_.R$=g +_.S$=h +_.aa$=i +_.at=j +_.ax=k +_.ay=l +_.ch=m +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=n +_.w=!1 +_.y=o +_.z=p +_.Q=q +_.as=r}, +aik:function aik(){}, +HF:function HF(a,b){this.a=a +this.b=b}, +zp:function zp(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +ajH:function ajH(a,b,c,d,e,f){var _=this +_.go=a +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b +_.w=!1 +_.y=c +_.z=d +_.Q=e +_.as=f}, +a7k:function a7k(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.k4=a +_.ok=$ +_.mj$=b +_.at=c +_.ax=d +_.ay=e +_.ch=f +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=g +_.w=!1 +_.y=h +_.z=i +_.Q=j +_.as=k}, +VW:function VW(){}, +alR:function alR(){}, +VX:function VX(){}, +atv:function atv(){}, +rq:function rq(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +a7g:function a7g(a,b,c,d,e,f,g,h,i){var _=this +_.M$=a +_.at=b +_.ax=c +_.ay=!0 +_.ch=d +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +Oe:function Oe(a,b,c,d,e,f,g,h,i,j){var _=this +_.k4=a +_.p1=_.ok=$ +_.p2=!0 +_.at=b +_.ax=c +_.ay=d +_.ch=e +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +alQ:function alQ(){}, +bff(a){var s,r,q=null,p=new A.a(new Float64Array(2)) +p.ag(100) +s=A.ar() +r=$.aa() +r=new A.aJ(r,new Float64Array(2)) +r.a7(p) +r.D() +s=new A.a4V(!1,s,r,B.j,0,0,q,B.e,new A.e([],t.s),new A.e([],t.g)) +s.b0(B.j,q,q,q,0,a,q,q,p) +return s}, +zz:function zz(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a4U:function a4U(a,b,c,d,e){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=a +_.w=!1 +_.y=b +_.z=c +_.Q=d +_.as=e}, +a4V:function a4V(a,b,c,d,e,f,g,h,i,j){var _=this +_.mj$=a +_.at=b +_.ax=c +_.ay=d +_.ch=e +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +ajR:function ajR(){}, +ajS:function ajS(){}, +bQV(a){var s=new A.eM("Input",A.b([],t.C)) +a.c.push(s) +s.aP(0,"TapCallbacks",new A.baL(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/tap_callbacks_example.dart"," In this example we show the `TapCallbacks` mixin functionality. You can add\n the `TapCallbacks` mixin to any `PositionComponent`.\n\n\n Tap the squares to see them change their angle around their anchor.\n ") +s.aP(0,"DragCallbacks",new A.baM(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/drag_callbacks_example.dart"," In this example we show you can use the `DragCallbacks` mixin on\n `PositionComponent`s. Drag around the Embers and see their position\n changing.\n ") +s.aP(0,"Double Tap (Component)",new A.baN(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/double_tap_callbacks_example.dart"," In this example, we show how you can use the `DoubleTapCallbacks` mixin on\n a `Component`. Double tap Ember and see her color changing.\n The example also adds white circles when double-tapping on the game area.\n") +s.aP(0,"HoverCallbacks",new A.baU(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/hover_callbacks_example.dart"," This example shows how to use `HoverCallbacks`s.\n\n\n Add more squares by clicking and hover them to change their color.\n ") +s.aP(0,"Keyboard",new A.baV(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/keyboard_example.dart"," Example showcasing how to act on keyboard events.\n It also briefly showcases how to create a game without the FlameGame.\n Usage: Use WASD to steer Ember.\n ") +s.aP(0,"Keyboard (Component)",new A.baW(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/keyboard_listener_component_example.dart"," Similar to the default Keyboard example, but shows a different\n implementation approach, which uses Flame's\n KeyboardListenerComponent to handle input.\n Usage: Use WASD to steer Ember.\n ") +s.aP(0,"Hardware Keyboard",new A.baX(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/hardware_keyboard_example.dart"," This example uses the HardwareKeyboardDetector mixin in order to keep\n track of which keys on a keyboard are currently pressed.\n\n Tap as many keys on the keyboard at once as you want, and see whether the\n system can detect them or not.\n ") +s.aP(0,"Mouse Movement",new A.baY(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/mouse_movement_example.dart"," In this example we show how you can use `MouseMovementDetector`.\n\n\n Move around the mouse on the canvas and the white square will follow it and\n turn into blue if it reaches the mouse, or the edge of the canvas.\n ") +s.aP(0,"Mouse Cursor",new A.baZ(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/mouse_cursor_example.dart"," Example showcasing the ability to change the game cursor in runtime\n hover the little square to see the cursor changing\n ") +s.aP(0,"Scroll",new A.bb_(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/scroll_example.dart"," In this example we show how to use the `ScrollDetector`.\n\n\n Scroll within the canvas (both horizontally and vertically) and the white\n square will move around.\n ") +s.aP(0,"Multitap",new A.bb0(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/multitap_example.dart"," In this example we showcase the multi touch capabilities\n Touch multiple places on the screen and you will see multiple squares drawn,\n one under each finger.\n ") +s.aP(0,"Multitap Advanced",new A.baO(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/multitap_advanced_example.dart"," This showcases the use of both `MultiTouchTapDetector` and\n `MultiTouchDragDetector` simultaneously. Drag multiple fingers on the screen\n to see rectangles of different sizes being drawn.\n ") +s.aP(0,"Overlapping TapCallbacks",new A.baP(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/overlapping_tap_callbacks_example.dart"," In this example we show you that events can choose to continue propagating\n to underlying components. The middle green square continue to propagate the\n events, meanwhile the others do not.\n ") +s.aP(0,"Gesture Hitboxes",new A.baQ(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/gesture_hitboxes_example.dart"," Tap to create a PositionComponent with a randomly shaped hitbox.\n You can then hover over to shapes to see that they receive the hover events\n only when the cursor is within the shape. If you tap/click within the shape\n it is removed.\n ") +s.aP(0,"Joystick",new A.baR(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/joystick_example.dart"," In this example we showcase how to use the joystick by creating simple\n `CircleComponent`s that serve as the joystick's knob and background.\n Steer the player by using the joystick.\n ") +s.aP(0,"Joystick Advanced",new A.baS(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/joystick_advanced_example.dart"," In this example we showcase how to use the joystick by creating \n `SpriteComponent`s that serve as the joystick's knob and background.\n We also showcase the `HudButtonComponent` which is a button that has its\n position defined by margins to the edges, which can be useful when making\n controller buttons.\n\n\n Steer the player by using the joystick and flip and rotate it by pressing\n the buttons.\n ") +s.aP(0,"Advanced Button",new A.baT(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/input/advanced_button_example.dart","This example shows how you can use a button with different states")}, +baL:function baL(){}, +baM:function baM(){}, +baN:function baN(){}, +baU:function baU(){}, +baV:function baV(){}, +baW:function baW(){}, +baX:function baX(){}, +baY:function baY(){}, +baZ:function baZ(){}, +bb_:function bb_(){}, +bb0:function bb0(){}, +baO:function baO(){}, +baP:function baP(){}, +baQ:function baQ(){}, +baR:function baR(){}, +baS:function baS(){}, +baT:function baT(){}, +zP:function zP(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.bp=_.aa=_.S=_.R=$ +_.dq$=a +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +aIb:function aIb(a,b){this.a=a +this.b=b}, +aIc:function aIc(a){this.a=a}, +aId:function aId(a){this.a=a}, +VE:function VE(){}, +zQ:function zQ(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.S=_.R=$ +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +bnr(a){var s,r,q,p,o=null,n=new A.a(new Float64Array(2)) +n.ag(100) +s=B.t.aW() +r=A.ar() +q=n +p=$.aa() +p=new A.aJ(p,new Float64Array(2)) +p.a7(q) +p.D() +s=new A.a5H(a,o,o,o,o,o,!1,o,$,s,o,r,p,B.j,0,0,o,B.e,new A.e([],t.s),new A.e([],t.g)) +s.b0(B.j,o,o,o,0,o,o,o,n) +s.lg(B.j,o,o,o,o,0,o,o,o,o,n,o) +return s}, +a5H:function a5H(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){var _=this +_.ao=_.av=$ +_.aM=a +_.h9$=b +_.is$=c +_.it$=d +_.iu$=e +_.h2$=f +_.k4=g +_.ok=h +_.p1=!1 +_.R$=i +_.S$=j +_.aa$=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=p +_.w=!1 +_.y=q +_.z=r +_.Q=s +_.as=a0}, +aks:function aks(){}, +akt:function akt(){}, +zT:function zT(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +akB:function akB(){}, +zU:function zU(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.R=$ +_.S=a +_.aa=b +_.k3=c +_.k4=d +_.ok=$ +_.p2=!1 +_.cy$=e +_.db$=f +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=g +_.k3$=h +_.k4$=!1 +_.at=i +_.ax=j +_.ay=k +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=l +_.w=!1 +_.y=m +_.z=n +_.Q=o +_.as=p}, +aIF:function aIF(a){this.a=a}, +aIG:function aIG(a){this.a=a}, +aIH:function aIH(a){this.a=a}, +aII:function aII(a){this.a=a}, +aIJ:function aIJ(a){this.a=a}, +aIK:function aIK(a){this.a=a}, +aIL:function aIL(a){this.a=a}, +aIM:function aIM(a){this.a=a}, +akD:function akD(){}, +vH:function vH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.S=null +_.aa=!1 +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +alu:function alu(){}, +vI:function vI(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.S=null +_.aa=!1 +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +aly:function aly(){}, +Ar:function Ar(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.bp=_.aa=_.S=null +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +aLA:function aLA(a){this.a=a}, +b4a:function b4a(a){this.a=a}, +b49:function b49(a){this.a=a}, +b4b:function b4b(){}, +VU:function VU(){}, +alJ:function alJ(){}, +As:function As(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +aLB:function aLB(a){this.a=a}, +b4c:function b4c(){}, +alK:function alK(){}, +bgU(a,b){var s,r,q,p,o,n,m=null,l=new A.a(new Float64Array(2)) +l.ag(100) +if(a){s=$.G().B() +s.sA(0,A.S(B.c.ai(229.5),76,175,80))}else s=A.Gw(100,m,0.9) +r=A.pU(l,m) +q=$.G().Z() +p=B.t.aW() +o=A.ar() +n=$.aa() +n=new A.aJ(n,new Float64Array(2)) +n.a7(l) +n.D() +q=new A.acW(a,r,q,!1,!0,new A.e([],t.pg),$,p,m,o,n,B.o,0,0,m,B.e,new A.e([],t.s),new A.e([],t.g)) +q.b0(m,m,m,m,0,b,m,m,l) +q.kj(m,m,m,m,s,m,b,m,m,l) +q.qt(r,m,m,m,m,s,m,b,m,m,m,l) +q.xm(m,m,m,m,s,m,b,m,m,l) +return q}, +AI:function AI(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +acW:function acW(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.es=a +_.a5=b +_.av=_.M=$ +_.ao=c +_.aM=d +_.aS=e +_.b2=f +_.k4=!0 +_.ok=!1 +_.R$=g +_.S$=h +_.aa$=i +_.at=j +_.ax=k +_.ay=l +_.ch=m +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=n +_.w=!1 +_.y=o +_.z=p +_.Q=q +_.as=r}, +aqR:function aqR(){}, +Bv:function Bv(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.R=a +_.S=b +_.aa=c +_.bp=null +_.k3=d +_.k4=e +_.ok=$ +_.p2=!1 +_.cy$=f +_.db$=g +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=h +_.k3$=i +_.k4$=!1 +_.at=j +_.ax=k +_.ay=l +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +apd:function apd(){}, +bq7(){var s,r,q,p=null,o=new A.a(new Float64Array(2)) +o.ag(100) +s=new A.a(new Float64Array(2)) +s.ag(100) +r=A.ar() +q=$.aa() +q=new A.aJ(q,new Float64Array(2)) +q.a7(s) +q.D() +r=new A.ad4(r,q,B.o,0,0,p,B.e,new A.e([],t.s),new A.e([],t.g)) +r.b0(p,p,p,p,0,o,p,p,s) +return r}, +C2:function C2(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +ad4:function ad4(a,b,c,d,e,f,g,h,i){var _=this +_.k4=!1 +_.at=a +_.ax=b +_.ay=c +_.ch=d +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +ar2:function ar2(){}, +xN:function xN(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +bQX(a){var s=new A.eM("Layout",A.b([],t.C)) +a.c.push(s) +s.aP(0,"AlignComponent",new A.bbc(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/layout/align_component.dart"," In this example the AlignComponent is used to arrange the circles\n so that there is one in the middle and 8 more surrounding it in\n the shape of a diamond.\n \n The arrangement will remain intact if you change the window size.\n ")}, +bbc:function bbc(){}, +xM:function xM(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +aw3:function aw3(a){this.a=a}, +xT:function xT(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +y_:function y_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +p9:function p9(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a7h:function a7h(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.k4=a +_.ok=b +_.M$=c +_.at=d +_.ax=e +_.ay=f +_.ch=g +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=h +_.w=!1 +_.y=i +_.z=j +_.Q=k +_.as=l}, +AA:function AA(a,b,c,d){var _=this +_.a=$ +_.cy$=a +_.db$=b +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=c +_.k3$=d +_.k4$=!1}, +bQY(a){var s=new A.eM("Parallax",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Basic",new A.bbd(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/parallax/basic_parallax_example.dart"," Shows the simplest way to use a fullscreen `ParallaxComponent`.\n ") +s.aP(0,"Component",new A.bbe(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/parallax/component_parallax_example.dart"," Shows how to do initiation and loading of assets from within an extended\n `ParallaxComponent`,\n ") +s.aP(0,"Animation",new A.bbf(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/parallax/animation_parallax_example.dart"," Shows how to use animations in a `ParallaxComponent`.\n ") +s.aP(0,"Non-fullscreen",new A.bbg(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/parallax/small_parallax_example.dart"," Shows how to create a smaller parallax in the center of the screen.\n ") +s.aP(0,"No FCS",new A.bbh(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/parallax/no_fcs_parallax_example.dart"," This examples serves to test the Parallax feature outside of the Flame\n Component System (FCS), use the other files in this folder for examples on\n how to use parallax with FCS.\n\n FCS is only used when you extend FlameGame, not when you only use the Game\n mixin, like we do in this example.\n ") +s.aP(0,"Advanced",new A.bbi(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/parallax/advanced_parallax_example.dart"," Shows how to create a parallax with different velocity deltas on each layer.\n ") +s.aP(0,"Layer sandbox",new A.bbj(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/parallax/sandbox_layer_parallax_example.dart"," In this example, properties of a layer can be changed to preview the\n different combination of values. You can change the properties by pressing\n the pen in the upper right corner.\n ")}, +bbd:function bbd(){}, +bbe:function bbe(){}, +bbf:function bbf(){}, +bbg:function bbg(){}, +bbh:function bbh(){}, +bbi:function bbi(){}, +bbj:function bbj(){}, +Bq:function Bq(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.R=a +_.S=b +_.aa=c +_.bp=d +_.k3=e +_.k4=f +_.ok=$ +_.p2=!1 +_.cy$=g +_.db$=h +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=i +_.k3$=j +_.k4$=!1 +_.at=k +_.ax=l +_.ay=m +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=n +_.w=!1 +_.y=o +_.z=p +_.Q=q +_.as=r}, +BP:function BP(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +zc:function zc(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +vr:function vr(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.R=a +_.S=b +_.aa=c +_.bp=d +_.d4=_.cL=_.cZ=_.aN=$ +_.k3=e +_.k4=f +_.ok=$ +_.p2=!1 +_.cy$=g +_.db$=h +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=i +_.k3$=j +_.k4$=!1 +_.at=k +_.ax=l +_.ay=m +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=n +_.w=!1 +_.y=o +_.z=p +_.Q=q +_.as=r}, +abd:function abd(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.M=!0 +_.k4=a +_.ok=b +_.p1=!1 +_.R$=c +_.S$=d +_.aa$=e +_.at=f +_.ax=g +_.ay=h +_.ch=i +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +akp:function akp(){}, +zY:function zY(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.S=_.R=$ +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aFp:function aFp(a,b,c,d){var _=this +_.z=a +_.Q=b +_.a=c +_.b=d +_.e=_.d=_.c=null}, +awY:function awY(a,b,c){var _=this +_.z=a +_.a=b +_.b=c +_.e=_.d=_.c=null}, +vN:function vN(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.R=$ +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +am_:function am_(){}, +am0:function am0(){}, +AM:function AM(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.R=a +_.S=null +_.aa=b +_.bp=c +_.cL=_.cZ=null +_.k3=d +_.k4=e +_.ok=$ +_.p2=!1 +_.cy$=f +_.db$=g +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=h +_.k3$=i +_.k4$=!1 +_.at=j +_.ax=k +_.ay=l +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +aNh:function aNh(a){this.a=a}, +aN9:function aN9(a){this.a=a}, +aNc:function aNc(a){this.a=a}, +aNg:function aNg(a){this.a=a}, +aNb:function aNb(a){this.a=a}, +aNl:function aNl(a){this.a=a}, +aNk:function aNk(a){this.a=a}, +aNj:function aNj(a,b,c){this.a=a +this.b=b +this.c=c}, +aN8:function aN8(a){this.a=a}, +aNi:function aNi(a,b){this.a=a +this.b=b}, +aNf:function aNf(){}, +aNe:function aNe(a,b){this.a=a +this.b=b}, +aNd:function aNd(a,b){this.a=a +this.b=b}, +aNa:function aNa(a){this.a=a}, +RU:function RU(){}, +adM:function adM(a,b,c,d,e,f,g,h,i){var _=this +_.at=a +_.ax=b +_.ay=c +_.ch=d +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +AN:function AN(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.R=a +_.S=b +_.aa=c +_.k3=d +_.k4=e +_.ok=$ +_.p2=!1 +_.cy$=f +_.db$=g +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=h +_.k3$=i +_.k4$=!1 +_.at=j +_.ax=k +_.ay=l +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +aNm:function aNm(a){this.a=a}, +amz:function amz(){}, +bQZ(a){var s=new A.eM("Rendering",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Text",new A.bbk(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/text_example.dart"," In this example we show different ways of rendering text.\n ") +s.aP(0,"Isometric Tile Map",new A.bbl(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/isometric_tile_map_example.dart"," Shows an example of how to use the `IsometricTileMapComponent`.\n\n\n Move the mouse over the board to see a selector appearing on the tiles.\n ") +s.aP(0,"Nine Tile Box",new A.bbm(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/nine_tile_box_example.dart"," If you want to create a background for something that can stretch you can\n use the `NineTileBox` which is showcased here.\n\n\n Tap to make the box bigger and double tap to make it smaller.\n ") +s.aP(0,"Flip Sprite",new A.bbn(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/flip_sprite_example.dart"," In this example we show how you can flip components horizontally and\n vertically.\n ") +s.aP(0,"Layers",new A.bbo(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/layers_example.dart"," In this example we show how layers can be used to produce a shadow effect.\n ") +s.aP(0,"Particles",new A.bbp(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/particles_example.dart"," In this example we show how to render a lot of different particles.\n ") +s.aP(0,"Particles (Interactive)",new A.bbq(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/particles_interactive_example.dart","An example which shows how ParticleSystemComponent can be added in runtime following an event, in this example, the mouse dragging") +s.aP(0,"Rich Text",new A.bbr(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/rendering/rich_text_example.dart","A non-interactive example of how to render rich text in Flame.")}, +bbk:function bbk(){}, +bbl:function bbl(){}, +bbm:function bbm(){}, +bbn:function bbn(){}, +bbo:function bbo(){}, +bbp:function bbp(){}, +bbq:function bbq(){}, +bbr:function bbr(){}, +Bm:function Bm(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +bfV(a,b,c,d,e){var s,r,q,p=null,o=$.bjB(),n=e==null?0.05:e,m=c==null?25:c,l=A.b([],t.T),k=$.aa(),j=d==null,i=b==null?B.o:b,h=$.bF().geV().b.gbm(0) +h.b.$1(J.lR(h.a)) +h=$.cF().d +if(h==null){h=self.window.devicePixelRatio +if(h===0)h=1}s=A.ar() +if(j)r=new A.a(new Float64Array(2)) +else r=d +q=new A.aJ(k,new Float64Array(2)) +q.a7(r) +q.D() +o=new A.a7m(new A.I8(400,new A.aS(m,m,m,m),n,p,!0),h,l,new A.cD(0,k,t.N8),new A.cD(0,k,t.bm),p,i,!j,A.C(t.lu),a,o,s,q,B.o,0,0,p,B.e,new A.e([],t.s),new A.e([],t.g)) +o.b0(p,p,p,p,0,p,p,p,d) +o.qd() +return o}, +C6:function C6(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +b8E:function b8E(){}, +a7m:function a7m(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){var _=this +_.fU=_.fT=$ +_.b6=a +_.K=b +_.a5=c +_.M=0 +_.ao=_.av=$ +_.aM=0 +_.b2=_.aS=null +_.bB=d +_.ct=e +_.bD=0 +_.dg=!1 +_.R=f +_.S=g +_.aa=h +_.bp=i +_.k4=j +_.ok=k +_.p1=$ +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=p +_.w=!1 +_.y=q +_.z=r +_.Q=s +_.as=a0}, +aLC:function aLC(a){this.a=a}, +a7j:function a7j(a,b,c,d,e,f,g,h,i){var _=this +_.ok=_.k4=_.b6=_.b_=$ +_.at=a +_.ax=b +_.ay=c +_.ch=d +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +xY:function xY(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +y0:function y0(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +BR:function BR(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +tA:function tA(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a7l:function a7l(a,b,c,d,e,f,g,h,i,j){var _=this +_.M$=a +_.at=b +_.ax=c +_.ay=d +_.ch=e +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +alS:function alS(){}, +Lf:function Lf(a,b){this.a=a +this.b=b}, +tB:function tB(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a07:function a07(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.M$=a +_.k4=b +_.p1=c +_.p2=d +_.p3=!1 +_.R$=e +_.S$=f +_.aa$=g +_.at=h +_.ax=i +_.ay=j +_.ch=k +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=l +_.w=!1 +_.y=m +_.z=n +_.Q=o +_.as=p}, +agd:function agd(){}, +age:function age(){}, +BU:function BU(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +bR_(a){var s=new A.eM("Sprites",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Basic Sprite",new A.bbs(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/sprites/basic_sprite_example.dart"," In this example we load a sprite from the assets folder and put it into a\n `SpriteComponent`.\n ") +s.aP(0,"Base64 Sprite",new A.bbt(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/sprites/base64_sprite_example.dart"," In this example we load a sprite from the a base64 string and put it into a\n `SpriteComponent`.\n ") +s.aP(0,"SpriteSheet",new A.bbu(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/sprites/sprite_sheet_example.dart"," In this example we show how to load images and how to create animations from\n sprite sheets.\n ") +s.aP(0,"SpriteBatch",new A.bbv(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/sprites/sprite_batch_example.dart"," In this example we show how to render many sprites in a batch for\n efficiency, this is done with `SpriteBatch` and the `SpriteBatchComponent`.\n ") +s.aP(0,"SpriteBatch Auto Load",new A.bbw(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/sprites/sprite_batch_load_example.dart"," In this example we do the same thing as in the normal sprite batch example,\n but in this example the logic and loading is moved into a component that\n extends `SpriteBatchComponent`.\n ") +s.aP(0,"SpriteGroup",new A.bbx(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/sprites/sprite_group_example.dart"," In this example we show how a `SpriteGroupComponent` can be used to create\n a button which displays different sprites depending on whether it is pressed\n or not.\n ")}, +bbs:function bbs(){}, +bbt:function bbt(){}, +bbu:function bbu(){}, +bbv:function bbv(){}, +bbw:function bbw(){}, +bbx:function bbx(){}, +bpg(){return new A.aas(null,-2147483647,null,B.e,new A.e([],t.s),new A.e([],t.g))}, +aJ7(a,b,c){var s,r,q,p,o=null,n=A.bkV(B.l),m=A.bkV(B.a1V),l=new A.a(new Float64Array(2)) +l.p(60,20) +l=A.b([A.dm(B.j,o,o,o,l,o,o,o,a,o,t.Fr)],t.W) +s=new A.a(new Float64Array(2)) +s.p(120,40) +r=A.ar() +q=s +p=$.aa() +p=new A.aJ(p,new Float64Array(2)) +p.a7(q) +p.D() +n=new A.A_(n,m,b,o,o,r,p,B.j,0,0,o,B.e,new A.e([],t.s),new A.e([],t.g)) +n.I(0,l) +n.b0(B.j,o,l,o,0,c,o,o,s) +return n}, +bkV(a){var s,r,q,p=null,o=$.G().B() +o.sU(0,B.u) +s=A.ar() +r=new A.a(new Float64Array(2)) +q=$.aa() +q=new A.aJ(q,new Float64Array(2)) +q.a7(r) +q.D() +s=new A.a06(o,p,s,q,B.o,0,0,p,B.e,new A.e([],t.s),new A.e([],t.g)) +s.b0(p,p,p,p,0,p,p,p,p) +o.sA(0,a) +return s}, +jK:function jK(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.R=$ +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aJ8:function aJ8(a,b){this.a=a +this.b=b}, +aJ9:function aJ9(a,b){this.a=a +this.b=b}, +aJa:function aJa(a,b){this.a=a +this.b=b}, +aJb:function aJb(a){this.a=a}, +aas:function aas(a,b,c,d,e,f){var _=this +_.M$=a +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b +_.w=!1 +_.y=c +_.z=d +_.Q=e +_.as=f}, +a68:function a68(a,b,c,d,e,f){var _=this +_.M$=a +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b +_.w=!1 +_.y=c +_.z=d +_.Q=e +_.as=f}, +a69:function a69(a,b,c,d,e,f){var _=this +_.M$=a +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b +_.w=!1 +_.y=c +_.z=d +_.Q=e +_.as=f}, +a6a:function a6a(a,b,c,d,e,f){var _=this +_.M$=a +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b +_.w=!1 +_.y=c +_.z=d +_.Q=e +_.as=f}, +rF:function rF(){}, +A_:function A_(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k4=a +_.ok=b +_.p1=c +_.p2=d +_.p3=e +_.at=f +_.ax=g +_.ay=h +_.ch=i +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a06:function a06(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.k4=$ +_.ok=a +_.z6$=b +_.at=c +_.ax=d +_.ay=e +_.ch=f +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=g +_.w=!1 +_.y=h +_.z=i +_.Q=j +_.as=k}, +U2:function U2(){}, +akU:function akU(){}, +akV:function akV(){}, +bR0(a){var s=new A.eM("Structure",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Levels",new A.bby(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/structure/levels.dart"," In this example we showcase how you can utilize World components as levels.\n Press the different buttons in the bottom to change levels and press in the\n center to add new Ember's. You can see how level 1-3 keeps their state,\n meanwhile the one called Resettable always resets.\n ")}, +bby:function bby(){}, +bR1(a){var s=new A.eM("Svg",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Svg Component",new A.bbz(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/svg/svg_component.dart"," Simple game showcasing how to use SVGs inside a flame game. This game \n uses several SVGs for its graphics. Click or touch the screen to make the \n player move, and double click/tap to add a new set of balloons at the \n clicked position.\n ")}, +bbz:function bbz(){}, +KV(a){var s,r,q,p=null,o=new A.a(new Float64Array(2)) +o.p(75,125) +s=B.t.aW() +r=A.ar() +q=$.aa() +q=new A.aJ(q,new Float64Array(2)) +q.a7(o) +q.D() +s=new A.a_y(p,p,$,s,p,r,q,B.j,0,2,p,B.e,new A.e([],t.s),new A.e([],t.g)) +s.b0(B.j,p,p,p,0,a,2,p,o) +s.OV(B.j,p,p,p,p,a,2,p,o,p) +return s}, +a8S:function a8S(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.K=null +_.M$=a +_.k4=b +_.R$=c +_.S$=d +_.aa$=e +_.at=f +_.ax=g +_.ay=h +_.ch=i +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a_q:function a_q(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.M$=a +_.k4=b +_.R$=c +_.S$=d +_.aa$=e +_.at=f +_.ax=g +_.ay=h +_.ch=i +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +a_y:function a_y(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.M$=a +_.k4=b +_.R$=c +_.S$=d +_.aa$=e +_.at=f +_.ax=g +_.ay=h +_.ch=i +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +mD:function mD(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aqG:function aqG(a,b,c,d,e){var _=this +_.go=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=a +_.w=!1 +_.y=b +_.z=c +_.Q=d +_.as=e}, +afD:function afD(){}, +afJ:function afJ(){}, +amT:function amT(){}, +Z3:function Z3(){}, +aue:function aue(){}, +bQ6(a,b){var s=null +return A.l8(A.dD(s,B.LH,B.y,B.fr,s,s,100,s,s,100),s,s)}, +bUb(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.rU(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +r.sYF(0,!0) +return A.aO(r,B.YX,s,s,B.a1h,t.AE)}, +rU:function rU(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +amt:function amt(){}, +w_:function w_(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +amC:function amC(){}, +amD:function amD(){}, +BW:function BW(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.R=1 +_.S=a +_.aa=$ +_.dq$=b +_.k3=c +_.k4=d +_.ok=$ +_.p2=!1 +_.cy$=e +_.db$=f +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=g +_.k3$=h +_.k4$=!1 +_.at=i +_.ax=j +_.ay=k +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=l +_.w=!1 +_.y=m +_.z=n +_.Q=o +_.as=p}, +ahN:function ahN(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.h9$=a +_.is$=b +_.it$=c +_.iu$=d +_.a5=$ +_.M=e +_.k4=!0 +_.ok=!1 +_.R$=f +_.S$=g +_.aa$=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +aqp:function aqp(){}, +aqq:function aqq(){}, +atm:function atm(){}, +bR2(a){var s=new A.eM("System",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Pause/resume engine",new A.bbA(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/system/pause_resume_example.dart"," Demonstrate how to use the pause and resume engine methods and paused\n attribute.\n\n Tap on the screen to toggle the execution of the engine using the\n `resumeEngine` and `pauseEngine`.\n\n Double Tap on the screen to toggle the execution of the engine using the\n `paused` attribute.\n ") +s.aP(0,"Overlay",A.bUe(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/system/overlays_example.dart"," In this example we show how the overlays system can be used.\n\n\n If you tap the canvas the game will start and if you tap it again it will\n pause.\n ") +s.aP(0,"Without FlameGame",new A.bbB(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/system/without_flame_game_example.dart"," This example showcases how to create a game without the FlameGame.\n It also briefly showcases how to act on keyboard events.\n Usage: Use W A S D to steer the rectangle.\n ") +s.aP(0,"Step Game",new A.bbC(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/system/step_engine_game.dart"," This example demonstrates how the game can be advanced frame by frame using\n stepEngine method.\n\n To pause and un-pause the game anytime press the `P` key. Once paused, use\n the `S` key to step by one frame.\n\n Up arrow and down arrow can be used to increase or decrease the step time.\n ")}, +bbA:function bbA(){}, +bbB:function bbB(){}, +bbC:function bbC(){}, +AB:function AB(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1}, +am1:function am1(){}, +za:function za(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.R=$ +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +bR3(a){var s=new A.eM("Tiled",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Flame Tiled Animation",new A.bbD(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/tiled/flame_tiled_animation_example.dart"," Loads and displays an animated Tiled map.\n ")}, +bbD:function bbD(){}, +bpe(a,b){var s=null,r=A.dW(B.H3,B.r) +r=new A.aan(r,b,!0,s,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.OW(!0,s,s,a,!0,!1) +return r}, +wL:function wL(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.S=_.R=null +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aan:function aan(a,b,c,d,e,f,g,h,i){var _=this +_.k2=a +_.k3=b +_.at=$ +_.ax=c +_.ay=d +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +arw:function arw(){}, +arx:function arx(){}, +Ck:function Ck(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.R=a +_.aa=_.S=$ +_.bp=0 +_.k3=b +_.k4=c +_.ok=$ +_.p2=!1 +_.cy$=d +_.db$=e +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=f +_.k3$=g +_.k4$=!1 +_.at=h +_.ax=i +_.ay=j +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o}, +aWt:function aWt(a){this.a=a}, +ary:function ary(){}, +bR4(a){var s=new A.eM("Utils",A.b([],t.C)) +a.c.push(s) +s.aP(0,"Timer",new A.bbE(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/utils/timer_example.dart"," This example shows how to use the `Timer`.\n\n\n Tap down to start the countdown timer, it will then count to 5 and then stop\n until you tap the canvas again and it restarts.\n ") +s.aP(0,"Timer Component",new A.bbF(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/utils/timer_component_example.dart"," This examples showcases the `TimerComponent`.\n\n\n Tap to start a timer that lives for one second and double tap to start\n another timer that lives for 5 seconds.\n ")}, +bbE:function bbE(){}, +bbF:function bbF(){}, +bS7(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.uP(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,A.b3(["Smiley",new A.bc0()],t.N,t.z3),t.jg)}, +boG(){return new A.a8W(null)}, +uP:function uP(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k3=a +_.k4=b +_.ok=$ +_.p2=!1 +_.cy$=c +_.db$=d +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=e +_.k3$=f +_.k4$=!1 +_.at=g +_.ax=h +_.ay=i +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +bc0:function bc0(){}, +a8W:function a8W(a){this.c=this.b=$ +this.a=a}, +a8R:function a8R(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.ah=1 +_.M$=a +_.k4=b +_.at=c +_.ax=d +_.ay=e +_.ch=f +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=g +_.w=!1 +_.y=h +_.z=i +_.Q=j +_.as=k}, +aht:function aht(){}, +amN:function amN(){}, +bUA(a){var s,r=null,q=a.hS("container width",400),p=a.hS("container height",200),o=A.axF(B.dl),n=new A.a(new Float64Array(2)) +n.p(48,0) +s=new A.a(new Float64Array(2)) +s.p(48,32) +return A.dD(r,A.bpT(A.bdY(a.tX("anchor","center",$.bAc(),t.N)),0,"bomb_ptero.png",n,s),B.y,r,r,new A.fc(r,r,o,r,r,r,B.aV),p,r,r,q)}, +bbH:function bbH(){}, +bVC(a){var s,r=null,q=a.hS("container width",400),p=a.hS("container height",200),o=new A.a(new Float64Array(2)) +o.p(48,32) +o=A.kJ(4,r,!0,0.2,o) +s=a.abt("playing",!0) +return A.dD(r,new A.aca(A.bdY(a.tX("anchor","center",$.bAb(),t.N)),s,A.kK("bomb_ptero.png",o,r),r),B.y,r,r,r,p,r,r,q)}, +bbG:function bbG(){}, +bVD(a){var s,r,q,p="buttons.png",o=null,n=new A.a(new Float64Array(2)) +n.p(0,0) +s=new A.a(new Float64Array(2)) +s.p(60,20) +r=new A.a(new Float64Array(2)) +r.p(0,20) +q=new A.a(new Float64Array(2)) +q.p(60,20) +return A.dD(o,new A.acf(B.af0,new A.bd6(),a.hS("width",250),a.hS("height",75),A.f2(A.b([A.eU(p,o,n,s),A.eU(p,o,r,q)],t.zx),t.bU),o),B.y,o,o,o,o,o,B.dJ,o)}, +bd6:function bd6(){}, +bVE(a){var s=null,r=a.hS("container width",400),q=a.hS("container height",200),p=A.axF(B.dl),o=a.hS("angle (deg)",0) +return A.dD(s,A.bpT(A.bdY(a.tX("anchor","center",$.bAd(),t.N)),0.017453292519943295*o,"shield.png",s,s),B.y,s,s,new A.fc(s,s,p,s,s,s,B.aV),q,s,s,r)}, +bbI:function bbI(){}, +aHV:function aHV(a,b){this.a=a +this.b=b}, +PP:function PP(a){this.b=a}, +ob:function ob(a,b){this.a=a +this.b=b}, +kr:function kr(a){this.a=a}, +rB(a){var s,r,q,p,o,n=a<0 +if(n)a=-a +s=B.f.cN(a,17592186044416) +a-=s*17592186044416 +r=B.f.cN(a,4194304) +q=a-r*4194304&4194303 +p=r&4194303 +o=s&1048575 +return n?A.bne(0,0,0,q,p,o):new A.iJ(q,p,o)}, +a5s(a){if(a instanceof A.iJ)return a +else if(A.cU(a))return A.rB(a) +else if(a instanceof A.kr)return A.rB(a.a) +throw A.d(A.hH(a,"other","not an int, Int32 or Int64"))}, +bG1(a,b,c,d,e){var s,r,q,p,o,n,m,l,k,j,i,h,g +if(b===0&&c===0&&d===0)return"0" +s=(d<<4|c>>>18)>>>0 +r=c>>>8&1023 +d=(c<<2|b>>>20)&1023 +c=b>>>10&1023 +b&=1023 +q=B.Yq[a] +p="" +o="" +n="" +while(!0){if(!!(s===0&&r===0))break +m=B.f.eY(s,q) +r+=s-m*q<<10>>>0 +l=B.f.eY(r,q) +d+=r-l*q<<10>>>0 +k=B.f.eY(d,q) +c+=d-k*q<<10>>>0 +j=B.f.eY(c,q) +b+=c-j*q<<10>>>0 +i=B.f.eY(b,q) +h=B.d.c5(B.f.hZ(q+(b-i*q),a),1) +n=o +o=p +p=h +r=l +s=m +d=k +c=j +b=i}g=(d<<20>>>0)+(c<<10>>>0)+b +return e+(g===0?"":B.f.hZ(g,a))+p+o+n}, +bne(a,b,c,d,e,f){var s=a-d,r=b-e-(B.f.dU(s,22)&1) +return new A.iJ(s&4194303,r&4194303,c-f-(B.f.dU(r,22)&1)&1048575)}, +O0(a,b){var s=B.f.Iv(a,b) +return s}, +iJ:function iJ(a,b,c){this.a=a +this.b=b +this.c=c}, +bdY(a){var s,r,q=$.bdg() +if(q.acd(0,a))return q.ghw(q).p0(0,new A.aw6(a)).a +else{q=A.bw("^\\Anchor\\(([^,]+), ([^\\)]+)\\)",!0,!1,!1).iU(a) +s=q==null?null:q.a_L(A.b([1,2],t.t)) +q=s[0] +q.toString +q=A.nM(q) +r=s[1] +r.toString +return new A.fn(q,A.nM(r))}}, +fn:function fn(a,b){this.a=a +this.b=b}, +aw6:function aw6(a){this.a=a}, +awx:function awx(a,b){this.a=a +this.c=b}, +IT:function IT(){}, +XF:function XF(a){this.a=a}, +bho(a){var s=new A.Vq(null,a) +s.at2(a) +return s}, +aHr:function aHr(a,b){this.a=a +this.b=b}, +Vq:function Vq(a,b){this.a=a +this.b=b}, +b2H:function b2H(a){this.a=a}, +b2I:function b2I(){}, +G7:function G7(a,b){this.a=a +this.$ti=b}, +e:function e(a,b){this.a=null +this.b=a +this.$ti=b}, +L7:function L7(a,b,c,d,e,f,g){var _=this +_.at=a +_.ax=null +_.ch=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +Nd:function Nd(a,b,c,d,e,f,g,h,i,j){var _=this +_.at=a +_.ax=b +_.ay=c +_.ch=d +_.CW=e +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +aU(a,b,c,d,e,f){var s,r,q,p,o=null +if(e==null){s=new Float64Array(2) +r=A.ar() +q=new Float64Array(2) +s=new A.a6N(new A.a(s),r,new A.a(q),B.o,0,o,B.e,new A.e([],t.s),new A.e([],t.g))}else s=e +s.I(0,b==null?A.b([],t.W):b) +r=d==null?A.bqT():d +q=A.a1k(o,o,o) +p=new A.y9(s,r,f,q,2147483647,c,B.e,new A.e([],t.s),new A.e([],t.g)) +p.I(0,A.b([q,s,r],t.W)) +return p}, +j2(a,b,c,d){var s,r,q,p,o,n,m,l=null,k=new Float64Array(2),j=new A.a(k) +j.p(c,a) +s=new Float64Array(2) +r=k[0] +k=k[1] +q=new Float64Array(2) +p=A.ar() +o=new Float64Array(2) +n=t.s +m=t.g +k=new A.a3D(j,new A.a(s),r/k,B.M,new A.a(q),p,new A.a(o),B.o,0,l,B.e,new A.e([],n),new A.e([],m)) +j=A.bqT() +k.I(0,b==null?A.b([],t.W):b) +s=A.a1k(l,l,l) +r=new A.y9(k,j,d,s,2147483647,l,B.e,new A.e([],n),new A.e([],m)) +r.I(0,A.b([s,k,j],t.W)) +return r}, +y9:function y9(a,b,c,d,e,f,g,h,i){var _=this +_.at=a +_.ax=b +_.ay=c +_.ch=d +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +ayd:function ayd(){}, +bqT(){var s=A.ar(),r=new Float64Array(2),q=new Float64Array(2),p=new Float64Array(2),o=new Float64Array(2),n=new Float64Array(2) +return new A.ael(s,B.j,new A.a(r),new A.a(q),new A.a(p),new A.a(o),new A.a(n),0,null,B.e,new A.e([],t.s),new A.e([],t.g))}, +ael:function ael(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.at=a +_.ax=b +_.ay=null +_.ch=c +_.CW=d +_.cx=e +_.cy=f +_.db=g +_.dx=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=h +_.w=!1 +_.y=i +_.z=j +_.Q=k +_.as=l}, +lD:function lD(){}, +aXr:function aXr(a){this.a=a}, +a0A:function a0A(a,b,c,d,e,f,g,h,i,j){var _=this +_.k4=a +_.p1=_.ok=0 +_.at=b +_.ax=!1 +_.ay=c +_.ch=d +_.CW=e +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +N_:function N_(){}, +a3D:function a3D(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.b_=a +_.b6=b +_.k4=c +_.ok=d +_.at=e +_.ax=!1 +_.ay=f +_.ch=g +_.CW=h +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=i +_.w=!1 +_.y=j +_.z=k +_.Q=l +_.as=m}, +beS(a,b){var s=new Float64Array(2),r=A.ar(),q=new Float64Array(2) +s=new A.a3G(new A.a(s),r,new A.a(q),B.o,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +r=new A.a(new Float64Array(2)) +r.p(a,b) +s.sC(0,r) +return s}, +a3G:function a3G(a,b,c,d,e,f,g,h,i){var _=this +_.k4=$ +_.at=a +_.ax=!1 +_.ay=b +_.ch=c +_.CW=d +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +a6N:function a6N(a,b,c,d,e,f,g,h,i){var _=this +_.at=a +_.ax=!1 +_.ay=b +_.ch=c +_.CW=d +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +bm(a,b,c){var s=new A.a7(c,b,B.e,new A.e([],t.s),new A.e([],t.g)) +if(a!=null)s.I(0,a) +return s}, +a7:function a7(a,b,c,d,e){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=a +_.w=!1 +_.y=b +_.z=c +_.Q=d +_.as=e}, +fN:function fN(){}, +uJ:function uJ(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +Qb:function Qb(a,b){this.b=a +this.$ti=b}, +NG:function NG(){}, +B4:function B4(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}, +bp0(a,b){var s,r=a.a,q=a.b,p=new A.Q(a.c-r,a.d-q).b1(0,2),o=p.a +p=p.b +switch(b.a){case 1:return new A.A(r,q,r+o,q+p) +case 2:r+=o +return new A.A(r,q,r+o,q+p) +case 3:q+=p +return new A.A(r,q,r+o,q+p) +case 4:s=new A.i(r,q).X(0,new A.i(o,p)) +r=s.a +q=s.b +return new A.A(r,q,r+o,q+p) +default:return B.M}}, +bp_(a){var s,r=J.vs(4,t.C5) +for(s=0;s<4;++s)r[s]=null +return new A.B5(r,A.b([],a.h("v<0>")),a.h("B5<0>"))}, +bNs(a){var s +$label0$0:{if(0===a){s=B.I_ +break $label0$0}if(1===a){s=B.I0 +break $label0$0}if(2===a){s=B.I1 +break $label0$0}if(3===a){s=B.I2 +break $label0$0}s=B.h8 +break $label0$0}return s}, +a9r:function a9r(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=0 +_.f=e +_.r=f +_.$ti=g}, +Qe:function Qe(a,b,c){this.a=a +this.b=b +this.c=c}, +B5:function B5(a,b,c){var _=this +_.a=a +_.b=b +_.c=null +_.d=0 +_.$ti=c}, +CW:function CW(a,b,c){this.c=a +this.a=b +this.b=c}, +a9s:function a9s(a,b,c,d,e,f){var _=this +_.x=a +_.y=b +_.a=c +_.b=d +_.c=e +_.d=f}, +aOA:function aOA(a,b){this.a=a +this.b=b}, +aOB:function aOB(a,b){this.a=a +this.b=b}, +Sr:function Sr(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.$ti=e}, +aUM:function aUM(a){this.a=a}, +LM:function LM(a,b){this.a=a +this.b=b}, +uK:function uK(a,b){var _=this +_.a=a +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1}, +cP:function cP(){}, +agG:function agG(){}, +qV:function qV(){}, +azg:function azg(a){this.a=a}, +LL:function LL(a){var _=this +_.ac$=0 +_.ah$=a +_.b6$=_.b_$=0 +_.K$=!1}, +ds:function ds(){}, +hl(a,b,c,d){var s,r,q,p,o=null,n=d==null,m=n&&c==null,l=$.aa(),k=new Float64Array(2),j=new Float64Array(2),i=A.b([],t.F7),h=new Float64Array(2),g=new Float64Array(9),f=new Float64Array(2) +n=n?0:d +s=new A.a(new Float64Array(2)) +s.ag(n*2) +n=B.t.aW() +r=A.ar() +q=a==null?B.o:a +p=new A.aJ(l,new Float64Array(2)) +p.a7(s) +p.D() +n=new A.Ls(m,new A.uK(B.H,l),B.ej,!1,!0,new A.mV(new A.a(k),new A.a(j)),!1,o,o,i,$,o,new A.a(h),new A.id(g),!1,$,o,!1,o,o,o,new A.a(f),$,n,o,r,p,q,0,0,o,B.e,new A.e([],t.s),new A.e([],t.g)) +n.b0(a,o,o,o,0,c,o,o,s) +n.kj(a,o,o,o,o,o,c,o,o,s) +n.ok=!1 +n.svq(b) +return n}, +Ls:function Ls(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4){var _=this +_.e9=a +_.V=_.i8=_.d1=_.f5=$ +_.mh$=b +_.KA$=c +_.W3$=d +_.W4$=e +_.iq$=f +_.hy$=g +_.lx$=h +_.mi$=i +_.r4$=j +_.n5$=k +_.tK$=l +_.KB$=m +_.KC$=n +_.oo$=o +_.f0$=p +_.n6$=q +_.KD$=r +_.W5$=s +_.W6$=a0 +_.W7$=a1 +_.a5=$ +_.M=a2 +_.k4=!0 +_.ok=!1 +_.R$=a3 +_.S$=a4 +_.aa$=a5 +_.at=a6 +_.ax=a7 +_.ay=a8 +_.ch=a9 +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b0 +_.w=!1 +_.y=b1 +_.z=b2 +_.Q=b3 +_.as=b4}, +ayC:function ayC(a){this.a=a}, +b_a:function b_a(){}, +b_b:function b_b(){}, +b_c:function b_c(a){this.a=a}, +b_d:function b_d(a){this.a=a}, +b_e:function b_e(a){this.a=a}, +b_f:function b_f(a){this.a=a}, +agw:function agw(){}, +aO5(a,b,c,d){var s=null,r=$.aa(),q=new Float64Array(2),p=new Float64Array(2),o=A.b([],t.F7),n=new Float64Array(2),m=new Float64Array(9),l=A.boJ(a,c),k=$.G().Z(),j=B.t.aW(),i=A.ar(),h=b==null?B.o:b,g=new A.a(new Float64Array(2)),f=new A.aJ(r,new Float64Array(2)) +f.a7(g) +f.D() +r=new A.a97($,new A.uK(B.H,r),B.ej,!1,!0,new A.mV(new A.a(q),new A.a(p)),!1,s,s,o,$,s,new A.a(n),new A.id(m),!1,$,s,!1,s,s,s,l,k,!0,d!=null,new A.e([],t.pg),$,j,s,i,f,h,0,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.b0(b,0,s,s,0,d,s,s,s) +r.kj(b,0,s,s,s,s,d,s,s,s) +r.qt(l,b,0,s,s,s,s,d,s,s,!0,s) +r.ok=!1 +r.svq(B.H) +return r}, +a97:function a97(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8){var _=this +_.WE$=a +_.mh$=b +_.KA$=c +_.W3$=d +_.W4$=e +_.iq$=f +_.hy$=g +_.lx$=h +_.mi$=i +_.r4$=j +_.n5$=k +_.tK$=l +_.KB$=m +_.KC$=n +_.oo$=o +_.f0$=p +_.n6$=q +_.KD$=r +_.W5$=s +_.W6$=a0 +_.W7$=a1 +_.a5=a2 +_.av=_.M=$ +_.ao=a3 +_.aM=a4 +_.aS=a5 +_.b2=a6 +_.k4=!0 +_.ok=!1 +_.R$=a7 +_.S$=a8 +_.aa$=a9 +_.at=b0 +_.ax=b1 +_.ay=b2 +_.ch=b3 +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b4 +_.w=!1 +_.y=b5 +_.z=b6 +_.Q=b7 +_.as=b8}, +b4K:function b4K(){}, +b4L:function b4L(){}, +b4M:function b4M(a){this.a=a}, +b4N:function b4N(a){this.a=a}, +b4O:function b4O(a){this.a=a}, +b4P:function b4P(a){this.a=a}, +anr:function anr(){}, +ans:function ans(){}, +fg(a,b,c){var s,r,q,p,o,n,m=null,l=c==null,k=l&&b==null,j=$.aa(),i=new Float64Array(2),h=new Float64Array(2),g=A.b([],t.F7),f=new Float64Array(2),e=new Float64Array(9) +if(l)s=new A.a(new Float64Array(2)) +else s=c +s=A.pU(s,m) +r=$.G().Z() +q=B.t.aW() +p=A.ar() +if(l)o=new A.a(new Float64Array(2)) +else o=c +n=new A.aJ(j,new Float64Array(2)) +n.a7(o) +n.D() +l=new A.B9(k,$,new A.uK(B.H,j),B.ej,!1,!0,new A.mV(new A.a(i),new A.a(h)),!1,m,m,g,$,m,new A.a(f),new A.id(e),!1,$,m,!1,m,m,m,s,r,l,b!=null,new A.e([],t.pg),$,q,m,p,n,B.o,0,0,m,B.e,new A.e([],t.s),new A.e([],t.g)) +l.b0(m,m,m,m,0,b,m,m,c) +l.kj(m,m,m,m,m,m,b,m,m,c) +l.qt(s,m,m,m,m,m,m,b,m,m,m,c) +l.xm(m,m,m,m,m,m,b,m,m,c) +l.ok=!1 +l.svq(a) +return l}, +bp5(a,b,c){var s,r,q,p,o,n=null,m=$.aa(),l=new Float64Array(2),k=new Float64Array(2),j=A.b([],t.F7),i=new Float64Array(2),h=new Float64Array(9),g=new A.a(new Float64Array(2)) +g.v(a) +s=a.a +r=s[0] +q=s[1] +p=new A.a(new Float64Array(2)) +p.p(r,-q) +q=a.fv(0) +r=s[0] +s=s[1] +o=new A.a(new Float64Array(2)) +o.p(-r,s) +o=A.boJ(A.b([g,p,q,o],t.d),b) +q=$.G().Z() +g=B.t.aW() +s=A.ar() +r=new A.a(new Float64Array(2)) +p=new A.aJ(m,new Float64Array(2)) +p.a7(r) +p.D() +m=new A.B9(!1,$,new A.uK(B.H,m),B.ej,!1,!0,new A.mV(new A.a(l),new A.a(k)),!1,n,n,j,$,n,new A.a(i),new A.id(h),!1,$,n,!1,n,n,n,o,q,!0,!0,new A.e([],t.pg),$,g,n,s,p,B.o,0,0,n,B.e,new A.e([],t.s),new A.e([],t.g)) +m.b0(n,n,n,n,0,c,n,n,n) +m.kj(n,n,n,n,n,n,c,n,n,n) +m.qt(o,n,n,n,n,n,n,c,n,n,!0,n) +m.asJ(a,n,n,n,n,n,n,b,c,n,n,!0) +m.ok=!1 +m.svq(B.H) +return m}, +B9:function B9(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9){var _=this +_.es=a +_.WE$=b +_.mh$=c +_.KA$=d +_.W3$=e +_.W4$=f +_.iq$=g +_.hy$=h +_.lx$=i +_.mi$=j +_.r4$=k +_.n5$=l +_.tK$=m +_.KB$=n +_.KC$=o +_.oo$=p +_.f0$=q +_.n6$=r +_.KD$=s +_.W5$=a0 +_.W6$=a1 +_.W7$=a2 +_.a5=a3 +_.av=_.M=$ +_.ao=a4 +_.aM=a5 +_.aS=a6 +_.b2=a7 +_.k4=!0 +_.ok=!1 +_.R$=a8 +_.S$=a9 +_.aa$=b0 +_.at=b1 +_.ax=b2 +_.ay=b3 +_.ch=b4 +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b5 +_.w=!1 +_.y=b6 +_.z=b7 +_.Q=b8 +_.as=b9}, +b50:function b50(){}, +b51:function b51(){}, +b52:function b52(a){this.a=a}, +b53:function b53(a){this.a=a}, +b54:function b54(a){this.a=a}, +b55:function b55(a){this.a=a}, +ao4:function ao4(){}, +ao5:function ao5(){}, +Bu(a){var s=null,r=new Float64Array(2),q=A.ar(),p=new A.a(new Float64Array(2)),o=$.aa() +o=new A.aJ(o,new Float64Array(2)) +o.a7(p) +o.D() +r=new A.to(new A.a(r),s,s,s,s,s,q,o,B.o,0,0,s,B.e,new A.e([],t.s),new A.e([],t.g),a.h("to<0>")) +r.b0(s,s,s,s,0,s,s,s,s) +return r}, +to:function to(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.k4=!1 +_.ok=a +_.M$=b +_.h9$=c +_.is$=d +_.it$=e +_.iu$=f +_.at=g +_.ax=h +_.ay=i +_.ch=j +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=k +_.w=!1 +_.y=l +_.z=m +_.Q=n +_.as=o +_.$ti=p}, +apb:function apb(){}, +X3:function X3(){}, +c6:function c6(){}, +kN(a,b){var s,r,q +if(a==null){s=t.sv +r=A.b([],s) +q=A.b([],t.wp) +s=A.b([],s) +s=b.a(new A.Sr(s,r,A.D(t.S,t.jI),new A.Qb(q,t.Ff),t.PR))}else s=a +r=t.wp +return new A.BV(s,A.b([],r),new A.LL($.aa()),A.b([],r),b.h("BV<0>"))}, +BV:function BV(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.$ti=e}, +aTS:function aTS(){}, +bCN(a,b,c){var s=null,r=A.ar(),q=$.aa() +q=new A.aJ(q,new Float64Array(2)) +q.a7(c) +q.D() +r=new A.uG(new A.ayO(),r,q,B.o,0,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.I(0,a) +r.b0(s,s,a,s,0,b,s,s,c) +return r}, +bl8(a,b,c,d,e,f){var s,r=A.ar(),q=$.aa() +q=new A.aJ(q,new Float64Array(2)) +q.a7(f) +q.D() +s=d==null?0:d +s=new A.uG(new A.ayP(),r,q,B.o,0,s,null,B.e,new A.e([],t.s),new A.e([],t.g)) +if(b!=null)s.I(0,b) +s.b0(null,a,b,null,0,c,d,e,f) +return s}, +bCP(a){return new A.ayT(a)}, +bCO(a,b){var s=A.a5(a).h("W<1,a>") +return A.aO2(A.ab(new A.W(a,new A.ayS(b),s),!0,s.h("aI.E")))}, +uG:function uG(a,b,c,d,e,f,g,h,i,j){var _=this +_.ok=_.k4=$ +_.p1=a +_.at=b +_.ax=c +_.ay=d +_.ch=e +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +ayO:function ayO(){}, +ayP:function ayP(){}, +ayT:function ayT(a){this.a=a}, +ayS:function ayS(a){this.a=a}, +jz:function jz(a,b,c){var _=this +_.a=a +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1 +_.$ti=c}, +a1k(a,b,c){var s=c==null?0:c +s=new A.y(s,b,B.e,new A.e([],t.s),new A.e([],t.g)) +if(a!=null)s.I(0,a) +return s}, +y:function y(a,b,c,d,e){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=a +_.w=!1 +_.y=b +_.z=c +_.Q=d +_.as=e}, +azR:function azR(a){this.a=a}, +azQ:function azQ(a){this.a=a}, +azN:function azN(){}, +azO:function azO(){}, +azP:function azP(a){this.a=a}, +azM:function azM(a){this.a=a}, +azL:function azL(){}, +a0p:function a0p(a,b){this.a=a +this.b=b}, +i3:function i3(a){this.a=a}, +bD_(a,b){var s=t.F,r=A.bCZ(new A.azJ(),s),q=new A.E4(!1,A.D(t.B,t.Oe),B.Km) +q.asH(r,s) +return q}, +ble(a,b){return A.bD_(a,b)}, +E4:function E4(a,b,c){var _=this +_.e=a +_.f=b +_.b=_.a=$ +_.c=!0 +_.d=c}, +azJ:function azJ(){}, +bN7(){return new A.xa(B.m9)}, +a1m:function a1m(){}, +azK:function azK(a){this.a=a}, +a6b:function a6b(a,b){this.a=a +this.b=b}, +Jn:function Jn(a,b){this.a=a +this.b=b}, +xa:function xa(a){this.a=a +this.c=this.b=null}, +aP(a,b){var s,r=A.b([],t.t),q=J.el(8,b) +for(s=0;s<8;++s)q[s]=a.$0() +return new A.Qq(a,q,r,b.h("Qq<0>"))}, +Qq:function Qq(a,b,c,d){var _=this +_.a=a +_.d=_.c=_.b=-1 +_.e=b +_.f=c +_.$ti=d}, +aPf:function aPf(a){this.a=a}, +a1Q:function a1Q(){}, +a4_:function a4_(a,b,c,d,e,f,g){var _=this +_.at=a +_.ax=b +_.a=_.ay=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +a40(a,b,c){var s,r,q,p,o,n=null,m=17976931348623157e292,l=A.mc(n,t.V),k=t.s,j=t.g +l=new A.a4_(60,l,0,n,B.e,new A.e([],k),new A.e([],j)) +s=A.bqi(t.Fr) +r=A.ar() +q=a==null?B.o:a +p=new A.a(new Float64Array(2)) +o=$.aa() +o=new A.aJ(o,new Float64Array(2)) +o.a7(p) +o.D() +p=m +j=new A.Nm(l,"",s,r,o,q,0,p,n,B.e,new A.e([],k),new A.e([],j),c.h("Nm<0>")) +j.b0(a,n,n,n,0,b,m,n,n) +j.qd() +j.J(l) +return j}, +Nm:function Nm(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.K=a +_.k4=b +_.ok=c +_.p1=$ +_.at=d +_.ax=e +_.ay=f +_.ch=g +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=h +_.w=!1 +_.y=i +_.z=j +_.Q=k +_.as=l +_.$ti=m}, +Dq:function Dq(){}, +nZ:function nZ(a,b){this.a=a +this.b=b}, +TN:function TN(){}, +TO:function TO(){}, +be7(a,b,c,d,e,f,g,h,i,j,k,l){var s,r,q,p,o +if(l==null)s=c==null?null:c.ax +else s=l +r=A.ar() +q=a==null?B.o:a +if(s==null)p=new A.a(new Float64Array(2)) +else p=s +o=$.aa() +o=new A.aJ(o,new Float64Array(2)) +o.a7(p) +o.D() +r=new A.Le(c,d,g,h,f,r,o,q,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +if(e!=null)r.I(0,e) +r.b0(a,b,e,null,0,i,j,k,s) +return r}, +Le:function Le(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k4=a +_.ok=b +_.p1=c +_.p2=d +_.p3=e +_.at=f +_.ax=g +_.ay=h +_.ch=i +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +U3:function U3(){}, +bfh(a,b,c,d){var s,r,q,p=null,o=a.ax +if(o==null)o=a.ax +s=A.ar() +r=o +q=$.aa() +q=new A.aJ(q,new Float64Array(2)) +q.a7(r) +q.D() +s=new A.a52(p,p,a,b,d,p,p,s,q,B.o,0,0,p,B.e,new A.e([],t.s),new A.e([],t.g)) +s.b0(p,p,p,p,0,p,p,p,o) +s.tL$=c +return s}, +a52:function a52(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.tL$=a +_.M$=b +_.k4=c +_.ok=d +_.p1=e +_.p2=f +_.p3=g +_.at=h +_.ax=i +_.ay=j +_.ch=k +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=l +_.w=!1 +_.y=m +_.z=n +_.Q=o +_.as=p}, +ajW:function ajW(){}, +ajX:function ajX(){}, +bn0(a){var s=null,r=A.ar(),q=new A.a(new Float64Array(2)),p=$.aa() +p=new A.aJ(p,new Float64Array(2)) +p.a7(q) +p.D() +r=new A.NN(a,r,p,B.o,0,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.b0(s,s,s,s,0,s,s,s,s) +return r}, +NN:function NN(a,b,c,d,e,f,g,h,i,j){var _=this +_.k4=a +_.ok=$ +_.at=b +_.ax=c +_.ay=d +_.ch=e +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +aGV:function aGV(){}, +bnq(a,b,c){var s=null,r=new Float64Array(2),q=new Float64Array(2),p=a.ax,o=A.ar(),n=p,m=$.aa(),l=new Float64Array(2) +m=new A.aJ(m,l) +m.a7(n) +m.D() +r=new A.a5G(b,a,new A.a(r),new A.a(q),!1,s,s,o,m,B.j,0,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.b0(B.j,s,s,s,0,s,s,s,p) +r.tL$=c +q=l[0] +r.p4=q/2 +return r}, +ok:function ok(a,b){this.a=a +this.b=b}, +a5G:function a5G(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.k4=a +_.ok=b +_.p1=0 +_.p2=c +_.p3=d +_.R8=_.p4=$ +_.f5$=e +_.tL$=f +_.M$=g +_.at=h +_.ax=i +_.ay=j +_.ch=k +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=l +_.w=!1 +_.y=m +_.z=n +_.Q=o +_.as=p}, +akq:function akq(){}, +akr:function akr(){}, +VF:function VF(){}, +a5U:function a5U(a,b,c,d,e,f,g){var _=this +_.at=a +_.ax=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +akE:function akE(){}, +bKn(a,b,c,d,e,f){var s,r,q,p,o,n,m,l,k=null +if(f==null)if(b==null)s=k +else{s=b.b +r=s.gbW(s) +s=s.gb9(s) +q=new A.a(new Float64Array(2)) +q.p(r,s) +s=q}else s=f +r=s==null +if(r)q=k +else q=s +p=B.t.aW() +o=A.ar() +n=a==null?B.o:a +if(q==null)m=new A.a(new Float64Array(2)) +else m=q +l=$.aa() +l=new A.aJ(l,new Float64Array(2)) +l.a7(m) +l.D() +r=new A.Sd(d,b,c,B.dB,k,r,$,p,k,o,l,n,0,0,k,B.e,new A.e([],t.s),new A.e([],t.g)) +r.b0(a,k,k,k,0,e,k,k,q) +r.OU(a,k,k,k,B.dB,k,0,k,e,k,k,s,k) +return r}, +Lg:function Lg(a,b){this.a=a +this.b=b}, +Sd:function Sd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.ao=a +_.aM=b +_.aS=c +_.k4=d +_.p1=e +_.p2=f +_.p3=!1 +_.R$=g +_.S$=h +_.aa$=i +_.at=j +_.ax=k +_.ay=l +_.ch=m +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=n +_.w=!1 +_.y=o +_.z=p +_.Q=q +_.as=r}, +Xz:function Xz(){}, +adF:function adF(){}, +a5A:function a5A(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){var _=this +_.k4=a +_.ok=b +_.p1=c +_.p2=d +_.p3=e +_.p4=f +_.R8=g +_.RG=h +_.rx=i +_.ry=j +_.to=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=p +_.w=!1 +_.y=q +_.z=r +_.Q=s +_.as=a0}, +aI0:function aI0(){}, +E5:function E5(){}, +a4m:function a4m(){}, +aG0:function aG0(a){this.a=a}, +NF:function NF(){}, +dR:function dR(){}, +a2:function a2(){}, +ag:function ag(){}, +aGq:function aGq(){}, +aGr:function aGr(){}, +m7:function m7(){}, +a7F:function a7F(){}, +a8t:function a8t(){}, +tt:function tt(){}, +a7x:function a7x(a,b,c,d,e,f,g,h,i,j){var _=this +_.k4=a +_.at=b +_.ax=c +_.ay=d +_.ch=e +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +bos(a,b,c,d,e,f){var s=null +return A.aMJ(b,B.cz,s,s,c,B.ck,d,s,s,s,s,B.bH,s,e,f)}, +aMI(a,b,c,d,e,f,g,h,i){var s,r,q,p,o=null,n=h==null +if(n){s=d==null?o:d.d +s=s!==!0}else s=!1 +if(n){n=d==null +r=n?o:d.d +if(r===!0)if(n)n=o +else{n=d.e +n===$&&A.c()}else n=o}else n=h +r=A.ar() +if(n==null)q=new A.a(new Float64Array(2)) +else q=n +p=$.aa() +p=new A.aJ(p,new Float64Array(2)) +p.a7(q) +p.D() +s=new A.rW(s,d,o,r,p,B.o,0,0,c,B.e,new A.e([],t.s),new A.e([],t.g),i.h("rW<0>")) +s.b0(a,b,o,c,0,e,f,g,n) +return s}, +aMJ(a,b,c,d,e,f,g,h,i,j,k,l,a0,a1,a2){var s=0,r=A.r(t.P2),q,p,o,n,m +var $async$aMJ=A.t(function(a3,a4){if(a3===1)return A.o(a4,r) +while(true)switch(s){case 0:p=A +o=c +n=d +m=i +s=3 +return A.x(A.a8s(a,b,e,f,g,h,l,a1,a2),$async$aMJ) +case 3:q=p.aMI(o,n,m,a4,j,k,a0,a1,t.J) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$aMJ,r)}, +rW:function rW(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.k4=a +_.ok=b +_.M$=c +_.at=d +_.ax=e +_.ay=f +_.ch=g +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=h +_.w=!1 +_.y=i +_.z=j +_.Q=k +_.as=l +_.$ti=m}, +Wb:function Wb(){}, +box(a,b){var s=null,r=A.ar(),q=new A.a(new Float64Array(2)),p=$.aa() +p=new A.aJ(p,new Float64Array(2)) +p.a7(q) +p.D() +r=new A.a8x(a,r,p,B.o,0,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.b0(s,s,s,s,0,b,s,s,s) +return r}, +a8x:function a8x(a,b,c,d,e,f,g,h,i,j){var _=this +_.k4=a +_.at=b +_.ax=c +_.ay=d +_.ch=e +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +boL(a,b,c,d,e,f,g,h,i){var s,r,q=A.ar(),p=a==null?B.o:a +if(i==null)s=new A.a(new Float64Array(2)) +else s=i +r=$.aa() +r=new A.aJ(r,new Float64Array(2)) +r.a7(s) +r.D() +s=g==null?0:g +s=new A.au(q,r,p,e,s,d,B.e,new A.e([],t.s),new A.e([],t.g)) +if(c!=null)s.I(0,c) +s.b0(a,b,c,d,e,f,g,h,i) +return s}, +au:function au(a,b,c,d,e,f,g,h,i){var _=this +_.at=a +_.ax=b +_.ay=c +_.ch=d +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +aOf:function aOf(a){this.a=a}, +aOd:function aOd(){}, +aOe:function aOe(){}, +Ru:function Ru(){}, +X8:function X8(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){var _=this +_.fT=0 +_.fV=_.fU=$ +_.ea=!1 +_.f5$=a +_.b6=b +_.K=c +_.a5=d +_.M=0 +_.ao=_.av=$ +_.aM=0 +_.b2=_.aS=null +_.bB=e +_.ct=f +_.bD=0 +_.dg=!1 +_.R=g +_.S=h +_.aa=i +_.bp=j +_.k4=k +_.ok=l +_.p1=$ +_.at=m +_.ax=n +_.ay=o +_.ch=p +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=q +_.w=!1 +_.y=r +_.z=s +_.Q=a0 +_.as=a1 +_.$ti=a2}, +b6h:function b6h(a){this.a=a}, +au0:function au0(){}, +ac2:function ac2(a,b,c,d,e,f,g,h,i,j){var _=this +_.at=a +_.ax=b +_.ay=c +_.CW=$ +_.cx=d +_.dx=e +_.a=_.dy=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +aTm:function aTm(a){this.a=a}, +aTl:function aTl(a,b){this.a=a +this.b=b}, +mB(a,b,c,d,e,f,g,h,i,j,k,l,a0,a1){var s,r,q=a1==null,p=c==null?null:new A.ip(c),o=B.t.aW(),n=A.ar(),m=a==null?B.o:a +if(q)s=new A.a(new Float64Array(2)) +else s=a1 +r=$.aa() +r=new A.aJ(r,new Float64Array(2)) +r.a7(s) +r.D() +s=k==null?0:k +s=new A.hx(p,l,!0,q,$,o,null,n,r,m,g,s,f,B.e,new A.e([],t.s),new A.e([],t.g)) +s.b0(a,b,e,f,g,j,k,a0,a1) +s.mK(a,b,c,d,e,f,g,h,!0,j,k,l,a0,a1) +return s}, +hx:function hx(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.k4=a +_.ok=b +_.p1=c +_.p2=d +_.p3=!1 +_.R$=e +_.S$=f +_.aa$=g +_.at=h +_.ax=i +_.ay=j +_.ch=k +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=l +_.w=!1 +_.y=m +_.z=n +_.Q=o +_.as=p}, +aq8:function aq8(){}, +bKj(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,a0,a1){var s=c!=null?A.OG(c.ghw(c).jo(0,new A.aTx(a1),a1.h("bK<0,ip>")).eT(0),a1,t.by):null,r=B.t.aW(),q=A.ar(),p=$.aa() +p=new A.aJ(p,new Float64Array(2)) +p.a7(a0) +p.D() +s=new A.jW(g,n,c,s,!0,!1,!0,$,r,null,q,p,B.o,i,0,h,B.e,new A.e([],t.s),new A.e([],t.g),a1.h("jW<0>")) +s.b0(a,b,f,h,i,l,m,o,a0) +s.a1L(a,b,c,!0,e,f,g,h,i,j,!0,l,m,n,o,a0,a1) +return s}, +jW:function jW(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){var _=this +_.k4=a +_.p1=b +_.p2=c +_.p3=d +_.p4=e +_.R8=f +_.RG=g +_.rx=!1 +_.R$=h +_.S$=i +_.aa$=j +_.at=k +_.ax=l +_.ay=m +_.ch=n +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=o +_.w=!1 +_.y=p +_.z=q +_.Q=r +_.as=s +_.$ti=a0}, +aTx:function aTx(a){this.a=a}, +aTw:function aTw(a){this.a=a}, +aq9:function aq9(){}, +bKm(a,b,c,d,e){return new A.Sc(e,a,b,d,0,c,B.e,new A.e([],t.s),new A.e([],t.g))}, +Sc:function Sc(a,b,c,d,e,f,g,h,i){var _=this +_.at=a +_.ax=b +_.ay=c +_.ch=d +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +hy(a,b,c,d,e,f,g,h,i,j,k,l){var s,r,q,p,o,n,m=k==null +if(m)if(l==null)s=null +else{s=l.c +r=new A.a(new Float64Array(2)) +r.p(s.c-s.a,s.d-s.b) +s=r}else s=k +r=B.t.aW() +q=A.ar() +p=a==null?B.o:a +if(s==null)o=new A.a(new Float64Array(2)) +else o=s +n=$.aa() +n=new A.aJ(n,new Float64Array(2)) +n.a7(o) +n.D() +o=i==null?0:i +o=new A.fv(m,l,$,r,null,q,n,p,f,o,e,B.e,new A.e([],t.s),new A.e([],t.g)) +if(d!=null)o.I(0,d) +o.b0(a,b,d,e,f,h,i,j,s) +o.lg(a,b,c,d,e,f,g,h,i,j,k,l) +return o}, +fv:function fv(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.k4=a +_.ok=b +_.p1=!1 +_.R$=c +_.S$=d +_.aa$=e +_.at=f +_.ax=g +_.ay=h +_.ch=i +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=j +_.w=!1 +_.y=k +_.z=l +_.Q=m +_.as=n}, +aqe:function aqe(){}, +BT:function BT(){}, +aqf:function aqf(){}, +bKX(a,b,c,d,e,f,g,h,i,j,a0,a1,a2,a3,a4){var s,r,q,p,o=A.b([],t.T),n=$.aa(),m=d==null?B.GO:d,l=a1==null,k=a==null?B.o:a +if(h==null){s=$.bF().geV().b.gbm(0) +s.b.$1(J.lR(s.a)) +s=$.cF().d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}}else s=h +r=A.ar() +if(l)q=new A.a(new Float64Array(2)) +else q=a1 +p=new A.aJ(n,new Float64Array(2)) +p.a7(q) +p.D() +o=new A.qb(m,s,o,new A.cD(0,n,t.N8),new A.cD(0,n,t.bm),g,k,!l,A.C(t.lu),a2,a3,r,p,B.o,0,0,f,B.e,new A.e([],t.s),new A.e([],t.g),a4.h("qb<0>")) +o.b0(b,c,e,f,0,i,j,a0,a1) +o.qd() +return o}, +I8:function I8(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +qb:function qb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.b6=a +_.K=b +_.a5=c +_.M=0 +_.ao=_.av=$ +_.aM=0 +_.b2=_.aS=null +_.bB=d +_.ct=e +_.bD=0 +_.dg=!1 +_.R=f +_.S=g +_.aa=h +_.bp=i +_.k4=j +_.ok=k +_.p1=$ +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=p +_.w=!1 +_.y=q +_.z=r +_.Q=s +_.as=a0 +_.$ti=a1}, +aV7:function aV7(a,b,c){this.a=a +this.b=b +this.c=c}, +aV4:function aV4(){}, +aV5:function aV5(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aV6:function aV6(a,b){this.a=a +this.b=b}, +dm(a,b,c,d,e,f,g,h,i,j,k){var s,r,q=i==null?"":i,p=j==null?A.bqi(k):j,o=A.ar(),n=a==null?B.o:a +if(h==null)s=new A.a(new Float64Array(2)) +else s=h +r=$.aa() +r=new A.aJ(r,new Float64Array(2)) +r.a7(s) +r.D() +s=f==null?0:f +s=new A.mF(q,p,o,r,n,0,s,d,B.e,new A.e([],t.s),new A.e([],t.g),k.h("mF<0>")) +s.b0(a,b,c,d,0,e,f,g,h) +s.qd() +return s}, +mF:function mF(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.k4=a +_.ok=b +_.p1=$ +_.at=c +_.ax=d +_.ay=e +_.ch=f +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=g +_.w=!1 +_.y=h +_.z=i +_.Q=j +_.as=k +_.$ti=l}, +ade:function ade(a,b,c,d,e,f,g,h,i,j){var _=this +_.ok=a +_.at=b +_.ax=c +_.ay=d +_.ch=e +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +aWs(a,b,c,d,e,f){var s=new A.Im(e,c,0,b,B.e,new A.e([],t.s),new A.e([],t.g)) +s.OW(a,b,c,d,e,f) +return s}, +Im:function Im(a,b,c,d,e,f,g){var _=this +_.at=$ +_.ax=a +_.ay=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +bea(a,b,c){var s=new A.a1b(a,new A.br(0,c,t.Y),b,null,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +b.iW(s) +return s}, +a1b:function a1b(a,b,c,d,e,f,g,h,i){var _=this +_.ao=a +_.aM=null +_.aS=b +_.p2=$ +_.at=c +_.ax=!0 +_.ay=d +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +p8:function p8(){}, +M2:function M2(a,b){this.c=a +this.a=b +this.b=0}, +a27:function a27(a,b){this.a=a +this.b=b +this.c=0}, +ahJ:function ahJ(){}, +a31:function a31(){}, +dr(a,b,c,d,e,f,g,h,i){var s,r,q,p,o,n=A.b([],t.Aa),m=c===B.z +if(m){if(d!=null)s=new A.pB(d) +else{h.toString +s=new A.wy(new A.pB(0),h)}n.push(s)}else{if(d!=null)s=new A.M2(c,d) +else{h.toString +s=new A.wy(new A.M2(c,1),h)}n.push(s)}if(!a)r=g!=null +else r=!0 +if(r){s=g==null +if(s)q=d!=null +else q=!0 +if(m){if(q){if(s){d.toString +s=d}else s=g +s=new A.He(s)}else{h.toString +s=new A.wy(new A.He(0),h)}n.push(s)}else{p=new A.rh(c) +if(q){if(s){d.toString +s=d}else s=g +s=new A.R2(p,s)}else{h.toString +s=new A.wy(new A.R2(p,1),h)}n.push(s)}}if(b!==0)n.push(new A.PO(0,b)) +o=n.length===1?n[0]:new A.RJ(n) +if(e)o=new A.m6(o) +if(f!=null&&f!==1)o=new A.aao(o,f,f) +return i!==0?new A.a27(o,i):o}, +fA:function fA(){}, +m6:function m6(a){this.a=a}, +ake:function ake(){}, +pB:function pB(a){this.a=a +this.b=0}, +rr:function rr(){}, +PO:function PO(a,b){this.c=a +this.a=b +this.b=0}, +a9y:function a9y(a,b){this.a=a +this.b=b}, +aOH:function aOH(){}, +b1D:function b1D(a,b){this.b=a +this.a=b}, +anF:function anF(){}, +aao:function aao(a,b,c){this.a=a +this.b=b +this.c=c}, +aoz:function aoz(){}, +R2:function R2(a,b){this.c=a +this.a=b +this.b=0}, +He:function He(a){this.a=a +this.b=0}, +RJ:function RJ(a){this.a=a +this.b=0}, +aSq:function aSq(){}, +aSp:function aSp(){}, +aSo:function aSo(a){this.a=a}, +HJ:function HJ(a){this.a=a +this.b=0}, +wy:function wy(a,b){var _=this +_.a=a +_.b=b +_.c=$ +_.d=!1}, +aq5:function aq5(){}, +IP:function IP(a,b){this.c=a +this.a=b +this.b=0}, +f1:function f1(){}, +ej:function ej(){}, +aD3:function aD3(){}, +bfS(a,b,c,d){var s,r,q=null,p=new A.a75(c,d,q,b,q,0,q,B.e,new A.e([],t.s),new A.e([],t.g)) +b.iW(p) +p.df$=null +s=a.tu() +r=A.ab(s,!0,A.w(s).h("z.E")) +if(r.length!==1)A.X(A.c3("Only single-contour paths are allowed in MoveAlongPathEffect",q)) +s=r[0] +p.aM!==$&&A.aj() +p.aM=s +s=s.gF(s) +p.aS!==$&&A.aj() +p.aS=s +return p}, +a75:function a75(a,b,c,d,e,f,g,h,i,j){var _=this +_.av=a +_.ao=b +_.bB=_.b2=_.aS=_.aM=$ +_.df$=c +_.at=d +_.ax=!0 +_.ay=e +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +bo9(a,b,c,d,e){var s=new A.a(new Float64Array(2)) +s.v(a) +s=new A.a76(s,null,b,d,0,c,B.e,new A.e([],t.s),new A.e([],t.g)) +b.iW(s) +s.df$=e +return s}, +a76:function a76(a,b,c,d,e,f,g,h,i){var _=this +_.av=a +_.df$=b +_.at=c +_.ax=!0 +_.ay=d +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +oo(a,b){return A.bo9(a,b,null,null,null)}, +P_(a,b){return A.bfT(a,b,null,null,null)}, +OZ:function OZ(){}, +alE:function alE(){}, +bfT(a,b,c,d,e){var s,r=new A.a(new Float64Array(2)) +r.v(a) +s=new Float64Array(2) +r=new A.a77(r,new A.a(s),null,b,d,0,c,B.e,new A.e([],t.s),new A.e([],t.g)) +b.iW(r) +r.df$=e +return r}, +a77:function a77(a,b,c,d,e,f,g,h,i,j){var _=this +_.av=a +_.ao=b +_.df$=c +_.at=d +_.ax=!0 +_.ay=e +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +aM9(a){return A.brs(0,a,null,null,null)}, +brs(a,b,c,d,e){var s=new A.amn(a,0,null,b,d,0,c,B.e,new A.e([],t.s),new A.e([],t.g)) +b.iW(s) +s.df$=e +return s}, +a7T:function a7T(a,b,c,d,e,f,g,h,i){var _=this +_.p2=a +_.p3=0 +_.df$=b +_.at=c +_.ax=!0 +_.ay=d +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +amn:function amn(a,b,c,d,e,f,g,h,i,j){var _=this +_.aM=a +_.p2=b +_.p3=0 +_.df$=c +_.at=d +_.ax=!0 +_.ay=e +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +amm:function amm(){}, +a9Q:function a9Q(a,b,c,d,e,f,g){var _=this +_.p2=$ +_.at=a +_.ax=!0 +_.ay=b +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +wk(a,b,c,d){var s=new A.R9(a,null,b,d,0,c,B.e,new A.e([],t.s),new A.e([],t.g)) +b.iW(s) +return s}, +R9:function R9(a,b,c,d,e,f,g,h,i){var _=this +_.p2=a +_.df$=b +_.at=c +_.ax=!0 +_.ay=d +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +aoW:function aoW(a,b,c,d,e,f,g,h,i,j){var _=this +_.ao=a +_.p2=b +_.df$=c +_.at=d +_.ax=!0 +_.ay=e +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +aoV:function aoV(){}, +Rh(a,b,c,d){var s=new A.a(new Float64Array(2)) +s.v(a) +s=new A.Rg(s,null,b,d,0,c,B.e,new A.e([],t.s),new A.e([],t.g)) +b.iW(s) +return s}, +ap8(a,b,c,d){var s,r,q=new A.a(new Float64Array(2)) +q.v(a) +s=new Float64Array(2) +r=new A.a(new Float64Array(2)) +r.v(new A.a(s)) +q=new A.ap7(q,r,null,b,d,0,c,B.e,new A.e([],t.s),new A.e([],t.g)) +b.iW(q) +return q}, +Rg:function Rg(a,b,c,d,e,f,g,h,i){var _=this +_.p2=a +_.p3=$ +_.df$=b +_.at=c +_.ax=!0 +_.ay=d +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +ap7:function ap7(a,b,c,d,e,f,g,h,i,j){var _=this +_.aM=a +_.p2=b +_.p3=$ +_.df$=c +_.at=d +_.ax=!0 +_.ay=e +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +ap6:function ap6(){}, +bOM(a,b,c,d){B.b.al(b,new A.b8T()) +return new A.m6(new A.apv(b,a))}, +bpx(a,b,c){var s=A.bOM(b,a,!0,1),r=new A.abk(s,null,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +s.iW(r) +r.I(0,a) +return r}, +b8T:function b8T(){}, +abk:function abk(a,b,c,d,e,f,g){var _=this +_.at=a +_.ax=!0 +_.ay=b +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +apv:function apv(a,b){var _=this +_.a=a +_.b=b +_.c=0 +_.d=!1}, +b6y:function b6y(){}, +b6z:function b6z(){}, +b6A:function b6A(){}, +bK7(a,b,c,d){var s=new A.a(new Float64Array(2)) +s.v(a) +s=new A.S_(s,null,b,d,0,c,B.e,new A.e([],t.s),new A.e([],t.g)) +b.iW(s) +s.df$=null +return s}, +S_:function S_(a,b,c,d,e,f,g,h,i){var _=this +_.p2=a +_.df$=b +_.at=c +_.ax=!0 +_.ay=d +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=e +_.w=!1 +_.y=f +_.z=g +_.Q=h +_.as=i}, +apS:function apS(a,b,c,d,e,f,g,h,i,j){var _=this +_.ao=a +_.p2=b +_.df$=c +_.at=d +_.ax=!0 +_.ay=e +_.CW=_.ch=!1 +_.cx=0 +_.cy=!1 +_.db=null +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +apR:function apR(){}, +jB:function jB(){}, +ex:function ex(){}, +NJ:function NJ(){}, +b_:function b_(){}, +beT(a,b){var s,r=new A.N2(a) +a.gahQ().e5(b) +s=$.bmC +$.bmC=s+1 +r.b=s +a.aer(s,new A.o7(B.G,b,null)) +return r}, +N2:function N2(a){this.a=a +this.b=$}, +a2L(){return new A.a2K(A.C(t.Di),null,0,null,B.e,new A.e([],t.s),new A.e([],t.g))}, +My:function My(){}, +a2K:function a2K(a,b,c,d,e,f,g){var _=this +_.at=a +_.M$=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +aBS:function aBS(a,b){this.a=a +this.b=b}, +aBT:function aBT(a){this.a=a}, +aBR:function aBR(a){this.a=a}, +aBX:function aBX(a){this.a=a}, +aBU:function aBU(a){this.a=a}, +aBV:function aBV(a){this.a=a}, +aBW:function aBW(a){this.a=a}, +aic:function aic(){}, +An(){return new A.a78(A.C(t.Ly),0,null,B.e,new A.e([],t.s),new A.e([],t.g))}, +P0:function P0(){}, +a78:function a78(a,b,c,d,e,f){var _=this +_.at=a +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b +_.w=!1 +_.y=c +_.z=d +_.Q=e +_.as=f}, +aL4:function aL4(a,b){this.a=a +this.b=b}, +aL5:function aL5(a,b,c){this.a=a +this.b=b +this.c=c}, +aL3:function aL3(a){this.a=a}, +aL2:function aL2(a){this.a=a}, +aL7:function aL7(a){this.a=a}, +aL6:function aL6(a){this.a=a}, +d5(){return new A.P5(A.C(t.HF),0,null,B.e,new A.e([],t.s),new A.e([],t.g))}, +P6:function P6(){}, +P5:function P5(a,b,c,d,e,f){var _=this +_.at=a +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b +_.w=!1 +_.y=c +_.z=d +_.Q=e +_.as=f}, +aLs:function aLs(a,b){this.a=a +this.b=b}, +aLq:function aLq(a,b){this.a=a +this.b=b}, +aLt:function aLt(a,b){this.a=a +this.b=b}, +aLp:function aLp(a){this.a=a}, +aLr:function aLr(a){this.a=a}, +Q1:function Q1(a,b,c,d,e,f){var _=this +_.at=a +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=b +_.w=!1 +_.y=c +_.z=d +_.Q=e +_.as=f}, +aNX:function aNX(a,b,c){this.a=a +this.b=b +this.c=c}, +OY:function OY(){}, +a7c:function a7c(){}, +Gf:function Gf(){}, +NE:function NE(){}, +a2u:function a2u(){}, +aBp:function aBp(){}, +aBq:function aBq(){}, +aBQ:function aBQ(){this.b=!1}, +a2M:function a2M(a,b,c){var _=this +_.f=a +_.r=b +_.w=$ +_.c=c +_.b=!1}, +aBY:function aBY(){this.b=!1}, +aC_:function aC_(a){this.c=a +this.b=!1}, +a2N:function a2N(a,b){this.c=a +this.d=b +this.b=!1}, +a2P:function a2P(a,b,c,d,e){var _=this +_.Q=a +_.as=b +_.f=c +_.r=d +_.w=$ +_.c=e +_.b=!1}, +a2Q:function a2Q(a,b,c,d,e,f){var _=this +_.CW=a +_.cx=b +_.f=c +_.x=d +_.y=$ +_.z=e +_.Q=$ +_.c=f +_.b=!1}, +aDH:function aDH(){}, +on:function on(){}, +a91:function a91(a,b,c,d,e,f){var _=this +_.Q=a +_.as=b +_.at=c +_.f=d +_.r=e +_.w=$ +_.c=f +_.b=!1}, +a9b:function a9b(){}, +aUT:function aUT(a){this.c=a +this.b=!1}, +bq4(a,b,c){var s,r,q=c.b +if(q==null)q=B.c8 +s=c.a +r=new A.a(new Float64Array(2)) +r.p(s.a,s.b) +return new A.acX(a,q,b,r,A.b([],t.d))}, +acX:function acX(a,b,c,d,e){var _=this +_.Q=a +_.as=b +_.f=c +_.r=d +_.w=$ +_.c=e +_.b=!1}, +ad_:function ad_(a,b,c,d,e){var _=this +_.Q=a +_.as=b +_.f=c +_.r=d +_.w=$ +_.c=e +_.b=!1}, +kO:function kO(a,b,c){this.a=a +this.b=b +this.$ti=c}, +qS:function qS(a,b){this.a=a +this.b=b +this.c=null}, +aO2(a){var s=new A.a94(a) +s.a5J() +s.awZ() +return s}, +boK(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=A.b([],t.n) +for(s=A.bFV(a,0,t.yw),r=J.az(s.a),q=s.b,s=new A.Fq(r,q,A.w(s).h("Fq<1>")),p=0;s.H();){o=s.c +o=o>=0?new A.bI(q+o,r.ga1(r)):A.X(A.cy()) +n=Math.sqrt(o.b.n2(a[B.f.bx(o.a+1,a.length)])) +f.push(n) +p+=n}m=b.aV()*p +l=A.bn("localEdgePoint") +for(s=f.length,k=0,j=0;k=m){if(l.b!==l)A.X(A.nc(l.a)) +l.b=m-j +break}++k}h=a[k] +g=a[(k+1)%a.length] +s=$.bAQ() +s.v(g) +s.aq(0,h) +A.aea(s,l.bl()) +return h.X(0,s)}, +a94:function a94(a){var _=this +_.a=a +_.c=_.b=$ +_.f=_.d=null}, +aOa:function aOa(a){this.a=a}, +aO9:function aO9(a){this.a=a}, +a9K(a,b,c,d){var s=new A.H1(a,b,c,d) +if(a>c){s.a=c +s.c=a}if(b>d){s.b=d +s.d=b}return s}, +bJ2(a,b){var s=b.b1(0,2),r=a.Y(0,s).a,q=a.X(0,s).a +return A.a9K(r[0],r[1],q[0],q[1])}, +H1:function H1(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=null}, +bJn(a,b,c,d,e){var s,r,q,p,o=new A.aaM(a,b,c,d,e) +if(a>c){s=o.a=c +r=o.c=a}else{r=c +s=a}if(b>d){q=o.b=d +p=o.d=b}else{p=d +q=b}s=(r-s)/2 +if(e>s)o.e=s +else s=e +r=(p-q)/2 +if(s>r)o.e=r +return o}, +aaM:function aaM(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=null}, +q1:function q1(){}, +bp1(a,b,c,d,e,f){var s,r,q=e==null?A.a9H():e +if(d==null)s=new A.a(new Float64Array(2)) +else s=d +r=a==null?17976931348623157e292:a +return new A.mv(c,b,q,r,s,f.h("mv<0>"))}, +mv:function mv(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.$ti=f}, +beb(a,b){var s=1-b,r=a.a +return A.S(r>>>24&255,B.c.ai((r>>>16&255)*s),B.c.ai((r>>>8&255)*s),B.c.ai((r&255)*s))}, +bec(a){var s=a.length +if(s===3||s===4)return A.bld(1,3,a) +else if(s===6||s===7)return A.bld(2,3,a) +else throw A.d("Invalid format for RGB hex string: "+a)}, +bld(a,b,c){var s,r,q,p,o,n=t.t,m=A.b([],n) +for(s=1;s<=b;++s)m.push(s) +m=A.bw("^\\#?"+new A.W(m,new A.azi(a),t.gn).mq(0)+"$",!0,!1,!1).iU(c).a_L(m) +r=A.a5(m).h("W<1,h>") +q=r.h("W") +p=q.h("W") +o=A.ab(new A.W(new A.W(new A.W(m,new A.azj(),r),new A.azk(a),q),new A.azl(),p),!0,p.h("aI.E")) +n=A.b([],n) +if(b===3)n.push(255) +B.b.I(n,o) +return A.S(n[0],n[1],n[2],n[3])}, +bed(a,b,c){var s,r,q +if(b==null)b=B.O +s=a>=255 +r=s?0:b.f9(256-a) +q=s?0:b.f9(256-a) +s=s?0:b.f9(256-a) +return A.la(a+r,a+q,a+s,c)}, +azi:function azi(a){this.a=a}, +azj:function azj(){}, +azk:function azk(a){this.a=a}, +azl:function azl(){}, +a8J(a,b,c){return a.rB(b,c).cu(new A.aNx(a),t.lu)}, +aNx:function aNx(a){this.a=a}, +ae:function ae(){}, +aEd:function aEd(a){this.a=a}, +aj1:function aj1(){}, +aD:function aD(){}, +aFx:function aFx(){}, +a4c:function a4c(a,b){this.a=a +this.b=b +this.c=$}, +aa2:function aa2(a,b,c){this.d=a +this.e=b +this.a=c}, +Np:function Np(a,b,c,d,e){var _=this +_.K=null +_.a5=a +_.M=b +_.av=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +ajE:function ajE(){}, +aO(a,b,c,d,e,f){var s=new A.V(a,null,c,e,b,d,null,f.h("V<0>")) +s.a5M(a) +return s}, +V:function V(a,b,c,d,e,f,g,h){var _=this +_.c=a +_.d=b +_.f=c +_.x=d +_.y=e +_.as=f +_.a=g +_.$ti=h}, +aFw:function aFw(a,b){this.a=a +this.b=b}, +F7:function F7(a,b){var _=this +_.d=$ +_.e=null +_.f=$ +_.r=0 +_.w=!1 +_.a=null +_.b=a +_.c=null +_.$ti=b}, +aFv:function aFv(a){this.a=a}, +aFq:function aFq(a){this.a=a}, +aFu:function aFu(a,b){this.a=a +this.b=b}, +aFt:function aFt(a,b,c){this.a=a +this.b=b +this.c=c}, +aFs:function aFs(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aFr:function aFr(a,b,c){this.a=a +this.b=b +this.c=c}, +bR9(a,b){var s=null,r=t.rs.b(a)?a.gwi(a):s +return A.FX(B.cW,A.pK(b,B.m,s,s,s,new A.bbJ(r,a,a.dy$)),s,s,s,new A.bbK(a),s)}, +aFJ:function aFJ(a,b,c){this.a=a +this.b=b +this.c=c}, +aFK:function aFK(a){this.a=a}, +aFL:function aFL(a){this.a=a}, +aFM:function aFM(a){this.a=a}, +aFN:function aFN(a){this.a=a}, +aFO:function aFO(a){this.a=a}, +bbJ:function bbJ(a,b,c){this.a=a +this.b=b +this.c=c}, +bbK:function bbK(a){this.a=a}, +aGp:function aGp(){}, +oh:function oh(){}, +aGo:function aGo(a,b){this.a=a +this.b=b}, +fB:function fB(){}, +aJ:function aJ(a,b){var _=this +_.ac$=0 +_.ah$=a +_.b6$=_.b_$=0 +_.K$=!1 +_.a=b}, +am4:function am4(){}, +Pz:function Pz(a,b,c){this.a=a +this.b=b +this.c=c}, +ar(){var s,r,q,p,o=new A.by(new Float64Array(16)) +o.ci() +s=$.aa() +r=new A.aJ(s,new Float64Array(2)) +q=new A.aJ(s,new Float64Array(2)) +q.apK(1) +q.D() +p=new A.aJ(s,new Float64Array(2)) +s=new A.wN(o,r,q,p,s) +o=s.gaCS() +r.an(0,o) +q.an(0,o) +p.an(0,o) +return s}, +wN:function wN(a,b,c,d,e){var _=this +_.a=a +_.b=!0 +_.c=0 +_.d=b +_.e=c +_.f=d +_.ac$=0 +_.ah$=e +_.b6$=_.b_$=0 +_.K$=!1}, +e2(a,b,c,d,e,f,g,h,i,j){var s,r,q,p=new Float64Array(2),o=i==null?0:i,n=new A.a(new Float64Array(2)) +n.ag(o*2) +o=B.t.aW() +s=A.ar() +r=a==null?B.o:a +q=$.aa() +q=new A.aJ(q,new Float64Array(2)) +q.a7(n) +q.D() +p=new A.hL(new A.a(p),$,o,null,s,q,r,0,0,d,B.e,new A.e([],t.s),new A.e([],t.g)) +if(c!=null)p.I(0,c) +p.b0(a,b,c,d,0,g,h,j,n) +p.kj(a,b,c,d,e,f,g,h,j,n) +return p}, +hL:function hL(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.a5=$ +_.M=a +_.k4=!0 +_.ok=!1 +_.R$=b +_.S$=c +_.aa$=d +_.at=e +_.ax=f +_.ay=g +_.ch=h +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=i +_.w=!1 +_.y=j +_.z=k +_.Q=l +_.as=m}, +ayB:function ayB(a){this.a=a}, +ayz:function ayz(){}, +ayA:function ayA(a){this.a=a}, +bnH(a,b){var s=b.a,r=s[1],q=a.a,p=q[1] +q=q[0] +s=s[0] +return new A.aJc(r-p,q-s,r*q-p*s)}, +aJc:function aJc(a,b,c){this.a=a +this.b=b +this.c=c}, +FP:function FP(a,b){this.a=a +this.b=b}, +boJ(a,b){var s=A.a5(a).h("W<1,a>") +return A.ab(new A.W(a,new A.aO3(b.b1(0,2)),s),!1,s.h("aI.E"))}, +jg:function jg(){}, +aO3:function aO3(a){this.a=a}, +aO4:function aO4(){}, +t8:function t8(){}, +bgn(a,b){var s=new A.a(new Float64Array(2)),r=new A.w8(b,s) +s.v(a) +r.Ca() +return r}, +a9H(){var s,r=new Float64Array(2),q=new A.a(new Float64Array(2)) +q.p(1,0) +s=new A.a(new Float64Array(2)) +r=new A.w8(new A.a(r),s) +s.v(q) +r.Ca() +return r}, +w8:function w8(a,b){this.a=a +this.b=b}, +fU(a,b,c,d,e,f,g,h,i,j){var s,r,q,p,o,n,m,l=j==null +if(l)s=new A.a(new Float64Array(2)) +else s=j +s=A.pU(s,a) +r=$.G().Z() +q=B.t.aW() +p=A.ar() +o=a==null?B.o:a +if(l)n=new A.a(new Float64Array(2)) +else n=j +m=$.aa() +m=new A.aJ(m,new Float64Array(2)) +m.a7(n) +m.D() +l=new A.lx(s,r,l,g!=null,new A.e([],t.pg),$,q,null,p,m,o,0,0,d,B.e,new A.e([],t.s),new A.e([],t.g)) +if(c!=null)l.I(0,c) +l.b0(a,b,c,d,0,g,h,i,j) +l.kj(a,b,c,d,e,f,g,h,i,j) +l.qt(s,a,b,c,d,e,f,g,h,i,null,j) +l.xm(a,b,c,d,e,f,g,h,i,j) +return l}, +kB(a,b,c,d){var s,r,q,p,o,n=null,m=new A.a(new Float64Array(2)) +m.ag(d) +m=A.pU(m,n) +s=$.G().Z() +r=B.t.aW() +q=A.ar() +p=new A.a(new Float64Array(2)) +o=$.aa() +o=new A.aJ(o,new Float64Array(2)) +o.a7(p) +o.D() +s=new A.lx(m,s,!0,c!=null,new A.e([],t.pg),$,r,n,q,o,B.o,0,0,n,B.e,new A.e([],t.s),new A.e([],t.g)) +s.b0(n,a,n,n,0,c,n,n,n) +s.kj(n,a,n,n,b,n,c,n,n,n) +s.qt(m,n,a,n,n,b,n,c,n,n,n,n) +s.asK(n,a,n,n,b,n,c,n,n,d) +return s}, +pU(a,b){var s,r,q=b==null?B.o:b,p=a.a,o=p[0],n=q.a,m=p[1],l=q.b,k=new A.a(new Float64Array(2)) +k.p(-o*n,-m*l) +m=p[0] +o=p[1] +s=new A.a(new Float64Array(2)) +s.p(-m*n,o-o*l) +o=p[0] +m=p[1] +r=new A.a(new Float64Array(2)) +r.p(o-o*n,m-m*l) +m=p[0] +p=p[1] +o=new A.a(new Float64Array(2)) +o.p(m-m*n,-p*l) +return A.b([k,s,r,o],t.d)}, +lx:function lx(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.a5=a +_.av=_.M=$ +_.ao=b +_.aM=c +_.aS=d +_.b2=e +_.k4=!0 +_.ok=!1 +_.R$=f +_.S$=g +_.aa$=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +aPd:function aPd(a){this.a=a}, +aPc:function aPc(a){this.a=a}, +aPb:function aPb(a){this.a=a}, +eL:function eL(){}, +apA:function apA(){}, +bTm(a,b){return B.b.pJ($.byW(),new A.bcw(a,b),new A.bcx(a,b)).aZM(a,b)}, +hr:function hr(){}, +a98:function a98(){}, +a0v:function a0v(){}, +a0s:function a0s(){}, +bcw:function bcw(a,b){this.a=a +this.b=b}, +bcx:function bcx(a,b){this.a=a +this.b=b}, +da:function da(){}, +pf:function pf(){}, +pP:function pP(){}, +pX:function pX(){}, +jd:function jd(){}, +kC:function kC(){}, +aUV(a,b){return new A.aUU(!1,a,b.a,b)}, +bq6(a,b){return new A.aV1(!1,a,b.a,b)}, +bml(a,b){return new A.aC8(!1,a,b.b,b)}, +bmm(a,b){return new A.a2R(!1,a,b.d,b)}, +aDO:function aDO(a,b){var _=this +_.a=a +_.b=b +_.d=_.c=$}, +EP:function EP(a){this.a=a +this.b=$}, +a_D:function a_D(){}, +a9c:function a9c(){}, +aUU:function aUU(a,b,c,d){var _=this +_.DS$=a +_.b=b +_.c=c +_.d=$ +_.a=d}, +aV1:function aV1(a,b,c,d){var _=this +_.DS$=a +_.b=b +_.c=c +_.d=$ +_.a=d}, +a93:function a93(a,b,c){var _=this +_.f=$ +_.b=a +_.c=b +_.d=$ +_.a=c}, +Q0:function Q0(a,b,c,d){var _=this +_.DS$=a +_.b=b +_.c=c +_.d=$ +_.a=d}, +aC8:function aC8(a,b,c,d){var _=this +_.DS$=a +_.b=b +_.c=c +_.d=$ +_.a=d}, +a2R:function a2R(a,b,c,d){var _=this +_.f=$ +_.DS$=a +_.b=b +_.c=c +_.d=$ +_.a=d}, +a2O:function a2O(a,b){this.DS$=a +this.a=b}, +aRg:function aRg(a,b,c){var _=this +_.b=a +_.c=b +_.d=$ +_.a=c}, +aRh:function aRh(a,b,c){var _=this +_.r=_.f=$ +_.b=a +_.c=b +_.d=$ +_.a=c}, +x6:function x6(){}, +aif:function aif(){}, +aig:function aig(){}, +aih:function aih(){}, +an8:function an8(){}, +aqS:function aqS(){}, +aqY:function aqY(){}, +aHb:function aHb(a){this.a=a}, +b_B:function b_B(a,b,c){this.a=a +this.b=b +this.c=c}, +ajh:function ajh(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +a6_:function a6_(){}, +aJ3:function aJ3(a,b){this.a=a +this.b=b}, +aJ4:function aJ4(a,b){this.a=a +this.b=b}, +aOj:function aOj(){}, +aCg:function aCg(){}, +bpz(){var s=$.G().B() +s.sqU(new A.MO(A.S(B.c.ai(229.5),0,0,0),B.mz,null,B.uP)) +return new A.abn(s)}, +zZ:function zZ(){}, +abn:function abn(a){this.a=a}, +kf(a,b,c){var s=null,r=A.ar(),q=new A.a(new Float64Array(2)),p=$.aa() +p=new A.aJ(p,new Float64Array(2)) +p.a7(q) +p.D() +r=new A.ZM(c,r,p,B.o,0,0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.b0(s,s,s,s,0,s,s,s,s) +r.ok=a +r.a9J() +r.SX() +r.sbt(b) +return r}, +ZM:function ZM(a,b,c,d,e,f,g,h,i,j){var _=this +_.k4=null +_.ok=$ +_.p3=a +_.at=b +_.ax=c +_.ay=d +_.ch=e +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +boi(a,b,c){var s,r,q +if(c==null){s=a.c +s=B.c.cN(s.c-s.a,3)}else s=c +r=new A.aLP(a,s) +r.c=b +q=s+s +r.d=new A.A(s,s,q,q) +q=b*3 +r.e=new A.A(0,0,q,q) +return r}, +aLP:function aLP(a,b){var _=this +_.a=a +_.b=b +_.e=_.d=_.c=$}, +lu:function lu(a){this.a=a}, +bg8(a,b,c,d,e,f){return A.a8s(b,B.cz,c,B.ck,d,a.cy$,B.bH,e,f)}, +rY(a,b,c,d,e,f,g){return A.aML(b,c,d,e,a.cy$,f,g)}, +aMK(a,b,c,d,e,f){var s=0,r=A.r(t.g_),q,p +var $async$aMK=A.t(function(g,h){if(g===1)return A.o(h,r) +while(true)switch(s){case 0:s=3 +return A.x((e==null?$.aC():e).d_(0,a),$async$aMK) +case 3:p=h +q=new A.a8r(p,f,b,c,d==null?B.fi:d) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$aMK,r)}, +aMG(a,b,c,d,e,f,g){var s=0,r=A.r(t.gp),q,p,o,n,m +var $async$aMG=A.t(function(h,i){if(h===1)return A.o(i,r) +while(true)switch(s){case 0:s=3 +return A.x(A.kK(a,b,f==null?$.aC():f),$async$aMG) +case 3:p=i +o=p.a +n=A.a5(o).h("W<1,eI>") +m=A.ab(new A.W(o,new A.aMH(),n),!0,n.h("aI.E")) +o=e==null?B.fi:e +q=new A.a8q(new A.ip(p),m,g,c,d,o) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$aMG,r)}, +bot(a,b){var s,r=new Float64Array(2),q=new Float64Array(2) +if(b==null){s=new A.a(new Float64Array(2)) +s.ag(1)}else s=b +return new A.ni(a,s,new A.a(r),new A.a(q))}, +aML(a,b,c,d,e,f,g){var s=0,r=A.r(t.Rp),q,p +var $async$aML=A.t(function(h,i){if(h===1)return A.o(i,r) +while(true)switch(s){case 0:p=A +s=3 +return A.x(a.XN(0,f,b,c,e,d),$async$aML) +case 3:q=p.bot(i,g) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$aML,r)}, +aMF(a,b,c){var s=new A.a8p(a,new A.a(new Float64Array(2))) +s.a=b +if(c!=null)s.Fi(0,c) +return s}, +a8s(a,b,c,d,e,f,g,h,i){var s=0,r=A.r(t.LL),q,p +var $async$a8s=A.t(function(j,k){if(j===1)return A.o(k,r) +while(true)switch(s){case 0:p=A +s=3 +return A.x(A.f2(A.bnj(a,new A.aMP(i,g,b,d,f,e),t.Ex,t.cd),t.Rp),$async$a8s) +case 3:q=p.aMF(k,c,h) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$a8s,r)}, +aMN:function aMN(){}, +a8r:function a8r(a,b,c,d,e){var _=this +_.e=a +_.a=b +_.b=c +_.c=d +_.d=e}, +a8q:function a8q(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.a=c +_.b=d +_.c=e +_.d=f}, +aMH:function aMH(){}, +ni:function ni(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=$ +_.d=c +_.e=$ +_.f=1 +_.r=d}, +aMM:function aMM(a,b){this.a=a +this.b=b}, +rD:function rD(a,b){this.a=a +this.b=b}, +rX:function rX(){}, +dy:function dy(a){this.a=a}, +PI:function PI(a,b){this.a=a +this.b=b}, +a8p:function a8p(a,b){var _=this +_.b=_.a=$ +_.c=a +_.d=!1 +_.e=$ +_.f=b}, +aMR:function aMR(a){this.a=a}, +aMS:function aMS(a,b){this.a=a +this.b=b}, +aMP:function aMP(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +aMO:function aMO(){}, +aMQ:function aMQ(a){this.a=a}, +avM(a,b,c,d,e){var s,r +if(a==null)s=new A.a(new Float64Array(2)) +else s=a +if(d==null)r=new A.a(new Float64Array(2)) +else r=d +s=new A.Dp(b,s,e,r,$,B.z) +s.lT(c) +return s}, +Dp:function Dp(a,b,c,d,e,f){var _=this +_.w=a +_.x=b +_.y=c +_.z=d +_.ze$=e +_.d=f +_.a=null +_.b=$ +_.c=!1}, +TK:function TK(){}, +uF(a,b){var s=new A.a0u(a,b) +s.lT(null) +return s}, +a0u:function a0u(a,b){var _=this +_.d=a +_.e=b +_.a=null +_.b=$ +_.c=!1}, +a1l:function a1l(a){var _=this +_.d=a +_.a=null +_.b=$ +_.c=!1}, +blf(a,b,c){var s=new A.a1n(b,!0) +s.lT(c) +return s}, +a1n:function a1n(a,b){var _=this +_.d=a +_.e=b +_.a=null +_.b=$ +_.c=!1}, +azS:function azS(){}, +azV(a,b){var s=new A.a1r(b) +s.lT(a) +return s}, +a1r:function a1r(a){var _=this +_.d=a +_.a=null +_.b=$ +_.c=!1}, +a1N:function a1N(){}, +a5b:function a5b(a,b){var _=this +_.d=a +_.e=b +_.r=_.f=$ +_.a=null +_.b=$ +_.c=!1}, +vJ(a,b,c,d,e){var s +if(c==null)s=new A.a(new Float64Array(2)) +else s=c +s=new A.Gd(a,s,e,$,b) +s.lT(d) +return s}, +Gd:function Gd(a,b,c,d,e){var _=this +_.w=a +_.x=b +_.y=c +_.ze$=d +_.d=e +_.a=null +_.b=$ +_.c=!1}, +alF:function alF(){}, +Gx:function Gx(a,b,c,d){var _=this +_.w=a +_.x=b +_.ze$=c +_.d=d +_.a=null +_.b=$ +_.c=!1}, +amw:function amw(){}, +vV(a,b){return A.blf(!0,A.lr(a,b,t.x7),null)}, +ff:function ff(){}, +aN7:function aN7(a){this.a=a}, +bgv(a,b,c,d){var s=new A.aaH(a,b,d,$,B.z) +s.lT(c) +return s}, +aaH:function aaH(a,b,c,d,e){var _=this +_.w=a +_.x=b +_.y=c +_.ze$=d +_.d=e +_.a=null +_.b=$ +_.c=!1}, +aoX:function aoX(){}, +bpp(a,b,c){var s=new A.aaZ(a,c,$,B.z) +s.lT(b) +return s}, +aaZ:function aaZ(a,b,c,d){var _=this +_.w=a +_.x=b +_.ze$=c +_.d=d +_.a=null +_.b=$ +_.c=!1}, +ap9:function ap9(){}, +ac9:function ac9(a,b,c){var _=this +_.d=a +_.e=b +_.r=c +_.a=null +_.b=$ +_.c=!1}, +aci:function aci(a,b){var _=this +_.d=a +_.f=b +_.a=null +_.b=$ +_.c=!1}, +aWO(a,b,c){var s=new A.Io(a,c,$) +s.lT(b) +return s}, +Io:function Io(a,b,c){var _=this +_.d=a +_.e=b +_.ze$=c +_.a=null +_.b=$ +_.c=!1}, +as0:function as0(){}, +aAG:function aAG(){}, +aWH:function aWH(a){this.b=a}, +iS(a,b,c){var s,r,q,p,o,n,m,l=new A.he(B.t.aW(),a,B.M) +if(c==null){s=a.gbW(a) +r=a.gb9(a) +q=new A.a(new Float64Array(2)) +q.p(s,r)}else q=c +s=new Float64Array(2) +new A.a(s).p(0,0) +r=s[0] +s=s[1] +p=q.a +o=r+p[0] +p=s+p[1] +l.c=new A.A(r,s,o,p) +if(b==null)n=new A.a(new Float64Array(2)) +else n=b +m=new Float64Array(2) +new A.a(m).p(o-r,p-s) +n=n.a +s=n[0] +n=n[1] +l.c=new A.A(s,n,s+m[0],n+m[1]) +return l}, +eU(a,b,c,d){var s=0,r=A.r(t.bU),q,p +var $async$eU=A.t(function(e,f){if(e===1)return A.o(f,r) +while(true)switch(s){case 0:p=A +s=3 +return A.x((b==null?$.aC():b).d_(0,a),$async$eU) +case 3:q=p.iS(f,c,d) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$eU,r)}, +he:function he(a,b,c){this.a=a +this.b=b +this.c=c}, +bKi(a,b,c,d,e,f){var s,r={} +r.a=b +r.b=e +s=new A.ac8($,c) +s.asS(a,c,d,f,r) +return s}, +kJ(a,b,c,d,e){return A.bKi(a,b,c,A.bc(a,d,!1,t.V),null,e)}, +aTC(a,b,c){var s=A.a5(a).h("W<1,ji>") +return new A.mA(A.ab(new A.W(a,new A.aTD(c),s),!0,s.h("aI.E")),!0)}, +bKl(a,b,c){var s,r=A.b([],t.iU) +for(s=0;s>>") +return A.f2(A.ab(new A.e7(s,new A.aQb(b,c,d,e,f,g,h,i,j),r),!0,r.h("z.E")),t.VW)}, +aal:function aal(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=$ +_.f=e}, +aQe:function aQe(a,b){this.a=a +this.b=b}, +aQf:function aQf(){}, +aQa:function aQa(){}, +aQb:function aQb(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}, +aQg:function aQg(){}, +aSN(a){var s,r,q,p,o=a.c,n=!o +if(n&&!a.b&&!a.a){s=0 +r=1 +q=0 +p=!1}else if(n&&!a.b&&a.a){s=0 +r=1 +q=0 +p=!0}else if(o&&!a.b&&a.a){s=1 +r=0 +q=1 +p=!1}else if(o&&a.b&&a.a){s=1 +r=0 +q=1 +p=!0}else if(n&&a.b&&a.a){s=2 +r=-1 +q=0 +p=!1}else if(n&&a.b&&!a.a){s=2 +r=-1 +q=0 +p=!0}else{n=o&&a.b&&!a.a +if(!n)if(!(o&&!a.b&&!a.a))throw A.d("Invalid combination of booleans: "+a.j(0)) +p=!n +s=3 +r=0 +q=-1}return new A.aSM(s,r,q,p)}, +aSM:function aSM(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +adx:function adx(a,b){this.a=a +this.b=b +this.c=0}, +Ij:function Ij(a,b){var _=this +_.a=a +_.b=b +_.d=_.c=0}, +bOT(a){return!0}, +aW3(a,b,c,d){var s=null +return new A.ady(a,c,a==null?s:A.bpS(a,s,s,s,s,b,!0),b,!0)}, +bLv(a){var s +if(a.length===1){s=B.b.ga9(a).a +s.toString +return s}s=A.ab(new A.W(a,new A.aW4(),A.a5(a).h("W<1,h?>")),!0,t.ob) +B.b.kg(s) +return"atlas{"+B.b.cj(s,",")+"}"}, +bLu(a,b){var s,r,q,p,o,n,m,l=A.C(t.ox) +for(s=a.x,r=0;r") +p=new A.W(a2,new A.aW6(),a1) +if(p.gF(0)===0){q=A.aW3(null,"atlas{empty}",A.D(t.N,t.o),!0) +s=1 +break}o=$.aC() +n=a1.h("W") +m=A.ab(new A.W(p,new A.aW7(),n),!0,n.h("aI.E")) +l=A.bLv(m) +if($.aW5.aR(0,l)){q=$.aW5.i(0,l).eG(0) +s=1 +break}s=m.length===1?3:4 +break +case 3:a3=A +a4=J +s=5 +return A.x(o.d_(0,l),$async$Ik) +case 5:a1=a3.aW3(a4.bB3(b4),l,A.b3([l,B.h],t.N,t.o),!0) +$.aW5.u(0,l,a1) +q=a1 +s=1 +break +case 4:k=new A.a9L(4096,4096) +n=$.G() +j=n.lu() +i=n.lt(j,null) +h=A.D(t.N,t.o) +B.b.i1(m,new A.aW8()) +s=6 +return A.x(A.f2(A.ab(new A.W(p,new A.aW9(o),a1.h("W>")),!0,t.pZ),t.lu),$async$Ik) +case 6:g=n.B() +g.skX(!1) +g.sor(B.av) +n=new A.cR(p,p.gF(0),a1.h("cR")),a1=a1.h("aI.E"),f=B.M +case 7:if(!n.H()){s=8 +break}e=n.d +if(e==null)e=a1.a(e) +d=e.b +s=9 +return A.x(o.d_(0,e.a),$async$Ik) +case 9:c=b4 +b=k.aWZ(c.gbW(c)+a9,c.gb9(c)+b0) +f=f.jj(b) +a=d.a +a.toString +a0=new A.i(b.a-a9,b.b-b0) +h.u(0,a,a0) +i.mg(0,c,a0,g) +s=7 +break +case 8:s=10 +return A.x(A.a8J(j.jT(),B.c.aw(f.c-f.a),B.c.aw(f.d-f.b)),$async$Ik) +case 10:c=b4 +a1=$.aC() +a1=a1.a +n=a1.i(0,l) +if(n!=null)n.t() +a1.u(0,l,new A.Vq(c,null)) +a1=A.aW3(c,l,h,!0) +$.aW5.u(0,l,a1) +q=a1 +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Ik,r)}, +ady:function ady(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aW4:function aW4(){}, +aW6:function aW6(){}, +aW7:function aW7(){}, +aW8:function aW8(){}, +aW9:function aW9(a){this.a=a}, +T2:function T2(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aWa(a,b){var s=0,r=A.r(t.LJ),q,p,o,n,m +var $async$aWa=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:s=3 +return A.x(A.aQc(a,b,null,null,0,0,null,null,null,null,"assets/tiles/",null,!0),$async$aWa) +case 3:n=d +m=n.a +m=A.bLw(m.ay,n.c,m.r,m.w,m.d,m.e,m.dx) +p=A.ar() +o=$.aa() +o=new A.aJ(o,new Float64Array(2)) +o.a7(m) +o.D() +n=new A.T3(n,null,p,o,B.o,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g),t.LJ) +n.b0(null,null,null,null,0,null,null,null,m) +q=n +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$aWa,r)}, +bLw(a,b,c,d,e,f,g){var s,r,q,p,o +if(a==null){s=$.aa() +return new A.aJ(s,new Float64Array(2))}s=b.a +r=s[0] +s=s[1] +q=new Float64Array(2) +p=new A.a(q) +p.p(c*(r/c),d*(s/d)) +switch(a.a){case 2:if(g===B.ip){s=q[0] +q=q[1] +r=new A.a(new Float64Array(2)) +r.p(s*e+s/2,(f+1)*(q/2)) +s=r}else{s=q[0] +q=q[1] +r=new A.a(new Float64Array(2)) +r.p((e+1)*(s/2),q*f+q/2) +s=r}return s +case 3:if(g===B.ip){s=q[0] +q=q[1] +r=new A.a(new Float64Array(2)) +r.p(e*s+s/2,q+(f-1)*q*0.75) +s=r}else{s=q[0] +q=q[1] +r=new A.a(new Float64Array(2)) +r.p(s+(e-1)*s*0.75,f*q+q/2) +s=r}return s +case 1:o=p.b1(0,2) +o.au(0,e+f) +return o +case 0:s=q[0] +q=q[1] +r=new A.a(new Float64Array(2)) +r.p(e*s,f*q) +return r}}, +T3:function T3(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.k4=a +_.M$=b +_.at=c +_.ax=d +_.ay=e +_.ch=f +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=g +_.w=!1 +_.y=h +_.z=i +_.Q=j +_.as=k +_.$ti=l}, +XW:function XW(){}, +mY:function mY(a,b){this.a=a +this.b=b}, +dZ:function dZ(){}, +cW(a,b,c,d,e){var s=new A.Dt(0,1,a,B.ml,b,c,B.b6,B.Y,new A.bW(A.b([],t.x8),t.jc),new A.bW(A.b([],t.u),t.fy)) +s.r=e.D8(s.gP8()) +s.Rk(d==null?0:d) +return s}, +bky(a,b,c){var s=new A.Dt(-1/0,1/0,a,B.mm,null,null,B.b6,B.Y,new A.bW(A.b([],t.x8),t.jc),new A.bW(A.b([],t.u),t.fy)) +s.r=c.D8(s.gP8()) +s.Rk(b) +return s}, +IR:function IR(a,b){this.a=a +this.b=b}, +ZY:function ZY(a,b){this.a=a +this.b=b}, +Dt:function Dt(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.w=_.r=null +_.x=$ +_.y=null +_.z=g +_.Q=$ +_.as=h +_.eg$=i +_.e8$=j}, +b3b:function b3b(a,b,c,d,e){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.a=e}, +b5L:function b5L(a,b,c,d,e,f,g){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.a=g}, +afn:function afn(){}, +afo:function afo(){}, +afp:function afp(){}, +ZZ:function ZZ(a,b){this.b=a +this.d=b}, +afr:function afr(){}, +GQ(a){var s=new A.B3(new A.bW(A.b([],t.x8),t.jc),new A.bW(A.b([],t.u),t.fy),0) +s.c=a +if(a==null){s.a=B.Y +s.b=0}return s}, +dP(a,b,c){var s,r=new A.M1(b,a,c) +r.a9Q(b.gcz(b)) +b.cH() +s=b.eg$ +s.b=!0 +s.a.push(r.ga9P()) +return r}, +bh3(a,b,c){var s,r,q=new A.Co(a,b,c,new A.bW(A.b([],t.x8),t.jc),new A.bW(A.b([],t.u),t.fy)) +if(J.f(a.gm(a),b.gm(b))){q.a=b +q.b=null +s=b}else{if(a.gm(a)>b.gm(b))q.c=B.ak5 +else q.c=B.ak4 +s=a}s.kK(q.gyb()) +s=q.gTc() +q.a.an(0,s) +r=q.b +if(r!=null){r.cH() +r=r.e8$ +r.b=!0 +r.a.push(s)}return q}, +bkz(a,b,c){return new A.KH(a,b,new A.bW(A.b([],t.x8),t.jc),new A.bW(A.b([],t.u),t.fy),0,c.h("KH<0>"))}, +af9:function af9(){}, +afa:function afa(){}, +KI:function KI(){}, +B3:function B3(a,b,c){var _=this +_.c=_.b=_.a=null +_.eg$=a +_.e8$=b +_.tN$=c}, +oy:function oy(a,b,c){this.a=a +this.eg$=b +this.tN$=c}, +M1:function M1(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +arI:function arI(a,b){this.a=a +this.b=b}, +Co:function Co(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=null +_.d=c +_.f=_.e=null +_.eg$=d +_.e8$=e}, +E9:function E9(){}, +KH:function KH(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.d=_.c=null +_.eg$=c +_.e8$=d +_.tN$=e +_.$ti=f}, +Uj:function Uj(){}, +Uk:function Uk(){}, +Ul:function Ul(){}, +ahs:function ahs(){}, +anw:function anw(){}, +anx:function anx(){}, +any:function any(){}, +aoG:function aoG(){}, +aoH:function aoH(){}, +arF:function arF(){}, +arG:function arG(){}, +arH:function arH(){}, +bhP(a){if(a<0.36363636363636365)return 7.5625*a*a +else if(a<0.7272727272727273){a-=0.5454545454545454 +return 7.5625*a*a+0.75}else if(a<0.9090909090909091){a-=0.8181818181818182 +return 7.5625*a*a+0.9375}a-=0.9545454545454546 +return 7.5625*a*a+0.984375}, +PJ:function PJ(){}, +ho:function ho(){}, +VI:function VI(){}, +ib:function ib(a,b,c){this.a=a +this.b=b +this.c=c}, +SZ:function SZ(a){this.a=a}, +hn:function hn(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +SY:function SY(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +rh:function rh(a){this.a=a}, +ahA:function ahA(){}, +ag3:function ag3(){}, +ag2:function ag2(){}, +KG:function KG(){}, +KF:function KF(){}, +xS:function xS(){}, +ut:function ut(){}, +lB(a,b,c){return new A.br(a,b,c.h("br<0>"))}, +pb(a){return new A.n2(a)}, +bi:function bi(){}, +bz:function bz(a,b,c){this.a=a +this.b=b +this.$ti=c}, +h_:function h_(a,b,c){this.a=a +this.b=b +this.$ti=c}, +br:function br(a,b,c){this.a=a +this.b=b +this.$ti=c}, +R3:function R3(a,b,c,d){var _=this +_.c=a +_.a=b +_.b=c +_.$ti=d}, +fp:function fp(a,b){this.a=a +this.b=b}, +abG:function abG(a,b){this.a=a +this.b=b}, +Qo:function Qo(a,b){this.a=a +this.b=b}, +vp:function vp(a,b){this.a=a +this.b=b}, +acs:function acs(a,b){this.a=a +this.b=b}, +n2:function n2(a){this.a=a}, +Yw:function Yw(){}, +bLL(a,b){var s=new A.Th(A.b([],b.h("v>")),A.b([],t.mz),b.h("Th<0>")) +s.asX(a,b) +return s}, +bqA(a,b,c){return new A.Ip(a,b,c.h("Ip<0>"))}, +Th:function Th(a,b,c){this.a=a +this.b=b +this.$ti=c}, +Ip:function Ip(a,b,c){this.a=a +this.b=b +this.$ti=c}, +ako:function ako(a,b){this.a=a +this.b=b}, +blr(a,b,c,d,e,f,g,h,i){return new A.LX(c,h,d,e,g,f,i,b,a,null)}, +LX:function LX(a,b,c,d,e,f,g,h,i,j){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.a=j}, +Ut:function Ut(a,b,c,d){var _=this +_.d=a +_.f=_.e=$ +_.r=!1 +_.jk$=b +_.dQ$=c +_.a=null +_.b=d +_.c=null}, +b_R:function b_R(a,b){this.a=a +this.b=b}, +YC:function YC(){}, +LY:function LY(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.c=a +_.d=b +_.e=c +_.r=d +_.w=e +_.x=f +_.y=g +_.z=h +_.Q=i +_.as=j +_.a=k}, +Uu:function Uu(a,b,c,d,e,f,g){var _=this +_.d=a +_.e=null +_.f=!1 +_.KS$=b +_.adV$=c +_.WD$=d +_.f2$=e +_.bV$=f +_.a=null +_.b=g +_.c=null}, +agq:function agq(a){var _=this +_.f=_.e=_.d=_.c=_.b=_.a=_.ch=_.ay=_.ax=_.at=_.as=null +_.ac$=0 +_.ah$=a +_.b6$=_.b_$=0 +_.K$=!1}, +YD:function YD(){}, +atj:function atj(){}, +ev:function ev(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j +_.Q=k +_.a=l}, +aAh:function aAh(a){this.a=a}, +ahg:function ahg(){}, +ahf:function ahf(){}, +aAg:function aAg(){}, +atk:function atk(){}, +a1F:function a1F(a,b,c){this.c=a +this.d=b +this.a=c}, +bDa(a,b){return new A.yF(a,b,null)}, +yF:function yF(a,b,c){this.c=a +this.f=b +this.a=c}, +Uv:function Uv(a){var _=this +_.d=!1 +_.a=null +_.b=a +_.c=null}, +b_S:function b_S(a){this.a=a}, +b_T:function b_T(a){this.a=a}, +bls(a,b,c,d,e,f,g,h,i){return new A.a1G(h,c,i,d,f,b,e,g,a)}, +a1G:function a1G(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}, +ahi:function ahi(){}, +a1M:function a1M(a,b){this.a=a +this.b=b}, +ahj:function ahj(){}, +a20:function a20(){}, +M_:function M_(a,b,c){this.d=a +this.w=b +this.a=c}, +Ux:function Ux(a,b,c,d){var _=this +_.d=a +_.e=0 +_.r=_.f=$ +_.jk$=b +_.dQ$=c +_.a=null +_.b=d +_.c=null}, +b00:function b00(a){this.a=a}, +b0_:function b0_(){}, +b_Z:function b_Z(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a1H:function a1H(a,b,c){this.r=a +this.w=b +this.a=c}, +YE:function YE(){}, +bDb(a,b){var s,r=a.a +r.toString +s=a.ay +s.toString +r.aPX() +return new A.Us(s,r,new A.aAi(a),new A.aAj(a),b.h("Us<0>"))}, +bDc(a,b,c,d,e,f){var s,r,q,p=a.a.cx.a,o=p?c:A.dP(B.H8,c,new A.rh(B.H8)),n=$.bzg(),m=t.ve +m.a(o) +s=p?d:A.dP(B.vK,d,B.SQ) +r=$.bz9() +m.a(s) +p=p?c:A.dP(B.vK,c,null) +q=$.byl() +return new A.a1I(new A.bz(o,n,n.$ti.h("bz")),new A.bz(s,r,r.$ti.h("bz")),new A.bz(m.a(p),q,A.w(q).h("bz")),new A.J_(e,new A.aAk(a),new A.aAl(a,f),null,f.h("J_<0>")),null)}, +b_U(a,b,c){var s,r,q,p,o +if(a==b)return a +if(a==null){s=b.a +if(s==null)s=b +else{r=A.a5(s).h("W<1,n>") +r=new A.oT(A.ab(new A.W(s,new A.b_V(c),r),!0,r.h("aI.E"))) +s=r}return s}if(b==null){s=a.a +if(s==null)s=a +else{r=A.a5(s).h("W<1,n>") +r=new A.oT(A.ab(new A.W(s,new A.b_W(c),r),!0,r.h("aI.E"))) +s=r}return s}s=A.b([],t.O) +for(r=b.a,q=a.a,p=0;p"))) +return new A.zd(r)}, +ze(a){return new A.zd(a)}, +bF8(a){return a}, +bmD(a,b){var s +if(a.r)return +s=$.beU +if(s===0)A.bSa(J.i1(a.a),100,a.b) +else A.Zm().$1("Another exception was thrown: "+a.gamx().j(0)) +$.beU=$.beU+1}, +bF9(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=A.b3(["dart:async-patch",0,"dart:async",0,"package:stack_trace",0,"class _AssertionError",0,"class _FakeAsync",0,"class _FrameCallbackEntry",0,"class _Timer",0,"class _RawReceivePortImpl",0],t.N,t.S),d=A.bKp(J.bBo(a,"\n")) +for(s=0,r=0;q=d.length,r0)q.push(h.a)}B.b.kg(q) +if(s===1)j.push("(elided one frame from "+B.b.ge1(q)+")") +else if(s>1){l=q.length +if(l>1)q[l-1]="and "+B.b.ga_(q) +l="(elided "+s +if(q.length>2)j.push(l+" frames from "+B.b.cj(q,", ")+")") +else j.push(l+" frames from "+B.b.cj(q," ")+")")}return j}, +eR(a){var s=$.nR() +if(s!=null)s.$1(a)}, +bSa(a,b,c){var s,r +A.Zm().$1(a) +s=A.b(B.d.rF(J.i1(c==null?A.bpU():A.bF8(c))).split("\n"),t.T) +r=s.length +s=J.ZB(r!==0?new A.BN(s,new A.bc2(),t.Ws):s,b) +A.Zm().$1(B.b.cj(A.bF9(s),"\n"))}, +bMW(a,b,c){return new A.aj5(c,a,!0,!0,null,b)}, +x4:function x4(){}, +EN:function EN(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.f=a +_.r=b +_.w=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.at=h +_.ax=!0 +_.ay=null +_.ch=i +_.CW=j +_.a=k +_.b=l +_.c=m +_.d=n +_.e=o}, +a3l:function a3l(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.f=a +_.r=b +_.w=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.at=h +_.ax=!0 +_.ay=null +_.ch=i +_.CW=j +_.a=k +_.b=l +_.c=m +_.d=n +_.e=o}, +a3i:function a3i(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.f=a +_.r=b +_.w=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.at=h +_.ax=!0 +_.ay=null +_.ch=i +_.CW=j +_.a=k +_.b=l +_.c=m +_.d=n +_.e=o}, +cI:function cI(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.f=e +_.r=f}, +aEp:function aEp(a){this.a=a}, +zd:function zd(a){this.a=a}, +aEq:function aEq(){}, +aEr:function aEr(){}, +aEs:function aEs(){}, +bc2:function bc2(){}, +aj5:function aj5(a,b,c,d,e,f){var _=this +_.f=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f}, +aj7:function aj7(){}, +aj6:function aj6(){}, +a_M:function a_M(){}, +axl:function axl(a){this.a=a}, +aq:function aq(){}, +bu:function bu(a){var _=this +_.ac$=0 +_.ah$=a +_.b6$=_.b_$=0 +_.K$=!1}, +ays:function ays(a){this.a=a}, +CT:function CT(a){this.a=a}, +cD:function cD(a,b,c){var _=this +_.a=a +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1 +_.$ti=c}, +bDD(a,b,c){var s=null +return A.pd("",s,b,B.cC,a,!1,s,s,B.bG,s,!1,!1,!0,c,s,t.H)}, +pd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var s +if(h==null)s=k?"MISSING":null +else s=h +return new A.lc(e,!1,c,s,g,o,k,b,d,i,a,m,l,j,n,p.h("lc<0>"))}, +beu(a,b,c){return new A.a2h(c,a,!0,!0,null,b)}, +bU(a){return B.d.k_(B.f.hZ(J.a1(a)&1048575,16),5,"0")}, +bDC(a,b,c,d,e,f,g){return new A.a2i(b,d,"",g,a,c,!0,!0,null,f)}, +Mf:function Mf(a,b){this.a=a +this.b=b}, +pe:function pe(a,b){this.a=a +this.b=b}, +b4f:function b4f(){}, +iG:function iG(){}, +lc:function lc(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.f=a +_.r=b +_.w=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.at=h +_.ax=!0 +_.ay=null +_.ch=i +_.CW=j +_.a=k +_.b=l +_.c=m +_.d=n +_.e=o +_.$ti=p}, +yM:function yM(){}, +a2h:function a2h(a,b,c,d,e,f){var _=this +_.f=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f}, +b0:function b0(){}, +a2g:function a2g(){}, +n3:function n3(){}, +a2i:function a2i(a,b,c,d,e,f,g,h,i,j){var _=this +_.f=a +_.r=b +_.x=c +_.y=d +_.z=e +_.a=f +_.b=g +_.c=h +_.d=i +_.e=j}, +ahQ:function ahQ(){}, +ha:function ha(){}, +rG:function rG(){}, +qh:function qh(){}, +dp:function dp(a,b){this.a=a +this.$ti=b}, +bhD:function bhD(a){this.$ti=a}, +ne:function ne(){}, +Om:function Om(){}, +Pq(a){return new A.bW(A.b([],a.h("v<0>")),a.h("bW<0>"))}, +bW:function bW(a,b){var _=this +_.a=a +_.b=!1 +_.c=$ +_.$ti=b}, +rs:function rs(a,b){this.a=a +this.$ti=b}, +bPS(a){return A.bc(a,null,!1,t.X)}, +GF:function GF(a,b){this.a=a +this.$ti=b}, +b8_:function b8_(){}, +ajA:function ajA(a){this.a=a}, +x1:function x1(a,b){this.a=a +this.b=b}, +Vn:function Vn(a,b){this.a=a +this.b=b}, +fk:function fk(a,b){this.a=a +this.b=b}, +aXT(a){var s=new DataView(new ArrayBuffer(8)),r=A.jM(s.buffer,0,null) +return new A.aXS(new Uint8Array(a),s,r)}, +aXS:function aXS(a,b,c){var _=this +_.a=a +_.b=0 +_.c=!1 +_.d=b +_.e=c}, +Qm:function Qm(a){this.a=a +this.b=0}, +bKp(a){var s=t.ZK +return A.ab(new A.ca(new A.e7(new A.bg(A.b(B.d.eC(a).split("\n"),t.T),new A.aTP(),t.Hd),A.bVI(),t.C9),s),!0,s.h("z.E"))}, +bKo(a){var s,r,q="",p=$.bxR().iU(a) +if(p==null)return null +s=A.b(p.b[1].split("."),t.T) +r=s.length>1?B.b.ga9(s):q +return new A.oE(a,-1,q,q,q,-1,-1,r,s.length>1?A.fj(s,1,null,t.N).cj(0,"."):B.b.ge1(s))}, +bKq(a){var s,r,q,p,o,n,m,l,k,j,i=null,h="" +if(a==="")return B.a8N +else if(a==="...")return B.a8O +if(!B.d.c4(a,"#"))return A.bKo(a) +s=A.bw("^#(\\d+) +(.+) \\((.+?):?(\\d+){0,1}:?(\\d+){0,1}\\)$",!0,!1,!1).iU(a).b +r=s[2] +r.toString +q=A.ea(r,".","") +if(B.d.c4(q,"new")){p=q.split(" ").length>1?q.split(" ")[1]:h +if(B.d.G(p,".")){o=p.split(".") +p=o[0] +q=o[1]}else q=""}else if(B.d.G(q,".")){o=q.split(".") +p=o[0] +q=o[1]}else p="" +r=s[3] +r.toString +n=A.jn(r,0,i) +m=n.ghg(n) +if(n.gj6()==="dart"||n.gj6()==="package"){l=n.gEZ()[0] +m=B.d.nE(n.ghg(n),A.j(n.gEZ()[0])+"/","")}else l=h +r=s[1] +r.toString +r=A.et(r,i,i) +k=n.gj6() +j=s[4] +if(j==null)j=-1 +else{j=j +j.toString +j=A.et(j,i,i)}s=s[5] +if(s==null)s=-1 +else{s=s +s.toString +s=A.et(s,i,i)}return new A.oE(a,r,k,l,m,j,s,p,q)}, +oE:function oE(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}, +aTP:function aTP(){}, +d9:function d9(a,b){this.a=a +this.$ti=b}, +aUN:function aUN(a){this.a=a}, +a4l:function a4l(a,b){this.a=a +this.b=b}, +ey:function ey(){}, +F8:function F8(a,b,c){this.a=a +this.b=b +this.c=c}, +Jf:function Jf(a){var _=this +_.a=a +_.b=!0 +_.d=_.c=!1 +_.e=null}, +b2p:function b2p(a){this.a=a}, +aFC:function aFC(a){this.a=a}, +aFE:function aFE(a,b){this.a=a +this.b=b}, +aFD:function aFD(a,b,c){this.a=a +this.b=b +this.c=c}, +bF7(a,b,c,d,e,f,g){return new A.N8(c,g,f,a,e,!1)}, +b5N:function b5N(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=!1 +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.y=null}, +F9:function F9(){}, +aFH:function aFH(a){this.a=a}, +aFI:function aFI(a,b){this.a=a +this.b=b}, +N8:function N8(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.f=e +_.r=f}, +bta(a,b){switch(b.a){case 1:case 4:return a +case 0:case 2:case 3:return a===0?1:a +case 5:return a===0?1:a}}, +bIf(a,b){var s=A.a5(a) +return new A.ca(new A.e7(new A.bg(a,new A.aNV(),s.h("bg<1>")),new A.aNW(b),s.h("e7<1,cg?>")),t.FI)}, +aNV:function aNV(){}, +aNW:function aNW(a){this.a=a}, +r8:function r8(a){this.a=a}, +o7:function o7(a,b,c){this.a=a +this.b=b +this.d=c}, +n6:function n6(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +lf:function lf(a,b){this.a=a +this.b=b}, +Q_(a,b){var s,r +if(a==null)return b +s=new A.dX(new Float64Array(3)) +s.kG(b.a,b.b,0) +r=a.Mn(s).a +return new A.i(r[0],r[1])}, +GI(a,b,c,d){if(a==null)return c +if(b==null)b=A.Q_(a,d) +return b.Y(0,A.Q_(a,d.Y(0,c)))}, +bge(a){var s,r,q=new Float64Array(4),p=new A.oN(q) +p.p_(0,0,1,0) +s=new Float64Array(16) +r=new A.by(s) +r.v(a) +s[11]=q[3] +s[10]=q[2] +s[9]=q[1] +s[8]=q[0] +r.O3(2,p) +return r}, +bIb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return new A.AR(o,d,n,0,e,a,h,B.h,0,!1,!1,0,j,i,b,c,0,0,0,l,k,g,m,0,!1,null,null)}, +bIm(a,b,c,d,e,f,g,h,i,j,k,l){return new A.AW(l,c,k,0,d,a,f,B.h,0,!1,!1,0,h,g,0,b,0,0,0,j,i,0,0,0,!1,null,null)}, +bIh(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){return new A.t6(a1,f,a0,0,g,c,j,b,a,!1,!1,0,l,k,d,e,q,m,p,o,n,i,s,0,r,null,null)}, +bIe(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){return new A.w2(a3,g,a2,k,h,c,l,b,a,f,!1,0,n,m,d,e,s,o,r,q,p,j,a1,0,a0,null,null)}, +bIg(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){return new A.w3(a3,g,a2,k,h,c,l,b,a,f,!1,0,n,m,d,e,s,o,r,q,p,j,a1,0,a0,null,null)}, +bId(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){return new A.t5(a0,d,s,h,e,b,i,B.h,a,!0,!1,j,l,k,0,c,q,m,p,o,n,g,r,0,!1,null,null)}, +bIi(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){return new A.AT(a3,e,a2,j,f,c,k,b,a,!0,!1,l,n,m,0,d,s,o,r,q,p,h,a1,i,a0,null,null)}, +bIq(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){return new A.AZ(a1,e,a0,i,f,b,j,B.h,a,!1,!1,k,m,l,c,d,r,n,q,p,o,h,s,0,!1,null,null)}, +bIo(a,b,c,d,e,f,g){return new A.AX(e,g,b,f,0,c,a,d,B.h,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,!1,null,null)}, +bIp(a,b,c,d,e,f){return new A.AY(f,b,e,0,c,a,d,B.h,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,!1,null,null)}, +bIn(a,b,c,d,e,f,g){return new A.a92(e,g,b,f,0,c,a,d,B.h,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,!1,null,null)}, +bIk(a,b,c,d,e,f,g){return new A.t7(g,b,f,c,B.bY,a,d,B.h,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,e,null,null)}, +bIl(a,b,c,d,e,f,g,h,i,j,k){return new A.AV(c,d,h,g,k,b,j,e,B.bY,a,f,B.h,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,i,null,null)}, +bIj(a,b,c,d,e,f,g){return new A.AU(g,b,f,c,B.bY,a,d,B.h,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,e,null,null)}, +boH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){return new A.AS(a0,e,s,i,f,b,j,B.h,a,!1,!1,0,l,k,c,d,q,m,p,o,n,h,r,0,!1,null,null)}, +qz(a,b){var s +switch(a.a){case 1:return 1 +case 2:case 3:case 5:case 0:case 4:s=b==null?null:b.a +return s==null?18:s}}, +bbV(a,b){var s +switch(a.a){case 1:return 2 +case 2:case 3:case 5:case 0:case 4:if(b==null)s=null +else{s=b.a +s=s!=null?s*2:null}return s==null?36:s}}, +bRK(a){switch(a.a){case 1:return 1 +case 2:case 3:case 5:case 0:case 4:return 18}}, +cg:function cg(){}, +hF:function hF(){}, +af4:function af4(){}, +arP:function arP(){}, +agX:function agX(){}, +AR:function AR(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +arL:function arL(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +ah6:function ah6(){}, +AW:function AW(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +arW:function arW(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +ah1:function ah1(){}, +t6:function t6(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +arR:function arR(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +ah_:function ah_(){}, +w2:function w2(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +arO:function arO(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +ah0:function ah0(){}, +w3:function w3(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +arQ:function arQ(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +agZ:function agZ(){}, +t5:function t5(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +arN:function arN(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +ah2:function ah2(){}, +AT:function AT(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +arS:function arS(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +aha:function aha(){}, +AZ:function AZ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +as_:function as_(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +jP:function jP(){}, +ah8:function ah8(){}, +AX:function AX(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8){var _=this +_.a5=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3 +_.dy=a4 +_.fr=a5 +_.fx=a6 +_.fy=a7 +_.go=a8}, +arY:function arY(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +ah9:function ah9(){}, +AY:function AY(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +arZ:function arZ(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +ah7:function ah7(){}, +a92:function a92(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8){var _=this +_.a5=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3 +_.dy=a4 +_.fr=a5 +_.fx=a6 +_.fy=a7 +_.go=a8}, +arX:function arX(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +ah4:function ah4(){}, +t7:function t7(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +arU:function arU(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +ah5:function ah5(){}, +AV:function AV(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1){var _=this +_.id=a +_.k1=b +_.k2=c +_.k3=d +_.a=e +_.b=f +_.c=g +_.d=h +_.e=i +_.f=j +_.r=k +_.w=l +_.x=m +_.y=n +_.z=o +_.Q=p +_.as=q +_.at=r +_.ax=s +_.ay=a0 +_.ch=a1 +_.CW=a2 +_.cx=a3 +_.cy=a4 +_.db=a5 +_.dx=a6 +_.dy=a7 +_.fr=a8 +_.fx=a9 +_.fy=b0 +_.go=b1}, +arV:function arV(a,b){var _=this +_.d=_.c=$ +_.e=a +_.f=b +_.b=_.a=$}, +ah3:function ah3(){}, +AU:function AU(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +arT:function arT(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +agY:function agY(){}, +AS:function AS(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +arM:function arM(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +amW:function amW(){}, +amX:function amX(){}, +amY:function amY(){}, +amZ:function amZ(){}, +an_:function an_(){}, +an0:function an0(){}, +an1:function an1(){}, +an2:function an2(){}, +an3:function an3(){}, +an4:function an4(){}, +an5:function an5(){}, +an6:function an6(){}, +an7:function an7(){}, +an9:function an9(){}, +ana:function ana(){}, +anb:function anb(){}, +anc:function anc(){}, +and:function and(){}, +ane:function ane(){}, +anf:function anf(){}, +ang:function ang(){}, +anh:function anh(){}, +ani:function ani(){}, +anj:function anj(){}, +ank:function ank(){}, +anl:function anl(){}, +anm:function anm(){}, +ann:function ann(){}, +ano:function ano(){}, +anp:function anp(){}, +anq:function anq(){}, +auk:function auk(){}, +aul:function aul(){}, +aum:function aum(){}, +aun:function aun(){}, +auo:function auo(){}, +aup:function aup(){}, +auq:function auq(){}, +aur:function aur(){}, +aus:function aus(){}, +aut:function aut(){}, +auu:function auu(){}, +auv:function auv(){}, +auw:function auw(){}, +aux:function aux(){}, +auy:function auy(){}, +auz:function auz(){}, +auA:function auA(){}, +bFm(a,b,c,d,e,f){var s=t.S,r=A.ek(s),q=a==null?A.Dd():a +return new A.od(e,d,c,B.tA,A.D(s,t.SP),r,b,f,q,A.D(s,t.Au))}, +bFn(a,b,c){var s=(c-a)/(b-a) +return!isNaN(s)?A.U(s,0,1):s}, +CN:function CN(a,b){this.a=a +this.b=b}, +zk:function zk(a){this.a=a}, +od:function od(a,b,c,d,e,f,g,h,i,j){var _=this +_.ch=_.ay=_.ax=_.at=null +_.CW=a +_.cx=b +_.cy=c +_.dx=_.db=$ +_.dy=d +_.f=e +_.r=f +_.w=null +_.a=g +_.b=null +_.c=h +_.d=i +_.e=j}, +aF4:function aF4(a,b){this.a=a +this.b=b}, +aF2:function aF2(a){this.a=a}, +aF3:function aF3(a){this.a=a}, +a2d:function a2d(a){this.a=a}, +aGD(){var s=A.b([],t.om),r=new A.by(new Float64Array(16)) +r.ci() +return new A.rt(s,A.b([r],t.Ji),A.b([],t.cR))}, +m5:function m5(a,b){this.a=a +this.b=null +this.$ti=b}, +K5:function K5(){}, +VQ:function VQ(a){this.a=a}, +Jz:function Jz(a){this.a=a}, +rt:function rt(a,b,c){this.a=a +this.b=b +this.c=c}, +aJD(a,b,c,d,e){var s=c==null?B.hw:c,r=a==null?A.bu7():a,q=t.S,p=A.ek(q) +return new A.lt(s,d,B.dK,A.D(q,t.SP),p,b,e,r,A.D(q,t.Au))}, +bGN(a){return a===1||a===2||a===4}, +FZ:function FZ(a,b){this.a=a +this.b=b}, +Oz:function Oz(a,b,c){this.a=a +this.b=b +this.c=c}, +FY:function FY(a,b){this.b=a +this.c=b}, +lt:function lt(a,b,c,d,e,f,g,h,i){var _=this +_.k2=!1 +_.K=_.b6=_.b_=_.ah=_.ac=_.bn=_.bv=_.y2=_.y1=_.xr=_.x2=_.x1=_.to=_.ry=_.rx=_.RG=_.R8=_.p4=_.p3=_.p2=_.p1=_.ok=_.k4=_.k3=null +_.at=a +_.ay=b +_.ch=c +_.cx=_.CW=null +_.cy=!1 +_.db=null +_.f=d +_.r=e +_.w=null +_.a=f +_.b=null +_.c=g +_.d=h +_.e=i}, +aJG:function aJG(a,b){this.a=a +this.b=b}, +aJF:function aJF(a,b){this.a=a +this.b=b}, +aJE:function aJE(a,b){this.a=a +this.b=b}, +u7:function u7(a,b,c){this.a=a +this.b=b +this.c=c}, +bhu:function bhu(a,b){this.a=a +this.b=b}, +aOb:function aOb(a){this.a=a +this.b=$}, +aOc:function aOc(){}, +a66:function a66(a,b,c){this.a=a +this.b=b +this.c=c}, +bEf(a){return new A.k0(a.gdR(a),A.bc(20,null,!1,t.av))}, +bEg(a){return a===1}, +bqQ(a,b,c){var s=t.S,r=A.b([],t.t),q=a==null?A.bcL():a,p=A.ek(s) +return new A.oO(B.ai,B.i5,A.bcK(),B.e7,A.D(s,t.GY),A.D(s,t.o),B.h,r,A.D(s,t.SP),p,b,c,q,A.D(s,t.Au))}, +aGG(a,b,c){var s=t.S,r=A.b([],t.t),q=a==null?A.bcL():a,p=A.ek(s) +return new A.oi(B.ai,B.i5,A.bcK(),B.e7,A.D(s,t.GY),A.D(s,t.o),B.h,r,A.D(s,t.SP),p,b,c,q,A.D(s,t.Au))}, +bg6(a,b,c){var s=t.S,r=A.b([],t.t),q=a==null?A.bcL():a,p=A.ek(s) +return new A.jO(B.ai,B.i5,A.bcK(),B.e7,A.D(s,t.GY),A.D(s,t.o),B.h,r,A.D(s,t.SP),p,b,c,q,A.D(s,t.Au))}, +bor(a,b,c){return A.bg6(a,b,c)}, +UQ:function UQ(a,b){this.a=a +this.b=b}, +EA:function EA(){}, +aC0:function aC0(a,b){this.a=a +this.b=b}, +aC5:function aC5(a,b){this.a=a +this.b=b}, +aC6:function aC6(a,b){this.a=a +this.b=b}, +aC1:function aC1(){}, +aC2:function aC2(a,b){this.a=a +this.b=b}, +aC3:function aC3(a){this.a=a}, +aC4:function aC4(a,b){this.a=a +this.b=b}, +oO:function oO(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.at=a +_.ax=b +_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=null +_.fr=!1 +_.fx=c +_.fy=d +_.k1=_.id=_.go=$ +_.k4=_.k3=_.k2=null +_.ok=$ +_.p1=!1 +_.p2=e +_.p3=f +_.p4=null +_.R8=g +_.RG=h +_.rx=null +_.f=i +_.r=j +_.w=null +_.a=k +_.b=null +_.c=l +_.d=m +_.e=n}, +oi:function oi(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.at=a +_.ax=b +_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=null +_.fr=!1 +_.fx=c +_.fy=d +_.k1=_.id=_.go=$ +_.k4=_.k3=_.k2=null +_.ok=$ +_.p1=!1 +_.p2=e +_.p3=f +_.p4=null +_.R8=g +_.RG=h +_.rx=null +_.f=i +_.r=j +_.w=null +_.a=k +_.b=null +_.c=l +_.d=m +_.e=n}, +jO:function jO(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.at=a +_.ax=b +_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=null +_.fr=!1 +_.fx=c +_.fy=d +_.k1=_.id=_.go=$ +_.k4=_.k3=_.k2=null +_.ok=$ +_.p1=!1 +_.p2=e +_.p3=f +_.p4=null +_.R8=g +_.RG=h +_.rx=null +_.f=i +_.r=j +_.w=null +_.a=k +_.b=null +_.c=l +_.d=m +_.e=n}, +aie:function aie(a,b){this.a=a +this.b=b}, +bHp(a){return a===1}, +bn7(a,b,c){var s=t.S,r=a==null?A.bTX():a +return new A.rw(A.D(s,t.sc),b,c,r,A.D(s,t.Au))}, +P2:function P2(){}, +P1:function P1(){}, +aL9:function aL9(a,b){this.a=a +this.b=b}, +aL8:function aL8(a,b){this.a=a +this.b=b}, +aka:function aka(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=null +_.f=e +_.w=_.r=null}, +rw:function rw(a,b,c,d,e){var _=this +_.f=null +_.r=a +_.a=b +_.b=null +_.c=c +_.d=d +_.e=e}, +bNL(a,b,c,d){var s=c.gbP(),r=c.gbe(c),q=c.ghs(c),p=new A.Uq() +A.dn(a,p.ga6D()) +return new A.u4(d,s,b,r,q,p)}, +bmi(a,b,c){var s=t.S,r=a==null?A.bTZ():a +return new A.le(A.D(s,t.HE),b,c,r,A.D(s,t.Au))}, +bmj(a,b,c){return A.bmi(a,b,c)}, +bEe(a){return a===1}, +bNK(a,b,c,d){var s=a.geI(),r=a.gbe(a),q=$.hq.r7$.ve(0,a.gbP(),b),p=a.gbP(),o=a.gbe(a),n=a.ghs(a),m=new A.Uq() +A.dn(B.vY,m.ga6D()) +m=new A.K0(b,new A.hS(s,r),c,p,q,o,n,m) +m.at6(a,b,c,d) +return m}, +bob(a,b,c,d){var s=t.S,r=a==null?A.Dd():a +return new A.rO(c,A.D(s,t.Oz),b,d,r,A.D(s,t.Au))}, +Uq:function Uq(){this.a=!1}, +u4:function u4(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=!1}, +le:function le(a,b,c,d,e){var _=this +_.y=_.x=_.w=_.r=_.f=null +_.z=a +_.a=b +_.b=null +_.c=c +_.d=d +_.e=e}, +aBZ:function aBZ(a,b){this.a=a +this.b=b}, +K0:function K0(a,b,c,d,e,f,g,h){var _=this +_.w=a +_.x=!1 +_.y=null +_.z=b +_.Q=null +_.a=c +_.b=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=!1}, +b7k:function b7k(a,b){this.a=a +this.b=b}, +rO:function rO(a,b,c,d,e,f){var _=this +_.x=_.w=_.r=_.f=null +_.y=a +_.z=null +_.Q=b +_.a=c +_.b=null +_.c=d +_.d=e +_.e=f}, +aLy:function aLy(a,b){this.a=a +this.b=b}, +aLu:function aLu(a,b){this.a=a +this.b=b}, +aLw:function aLw(a,b,c){this.a=a +this.b=b +this.c=c}, +aLx:function aLx(a,b){this.a=a +this.b=b}, +aLv:function aLv(a,b,c){this.a=a +this.b=b +this.c=c}, +aNY:function aNY(a,b){this.a=a +this.b=b}, +aO_:function aO_(){}, +aNZ:function aNZ(a,b,c){this.a=a +this.b=b +this.c=c}, +aO0:function aO0(){this.b=this.a=null}, +bFw(a){return!0}, +EB:function EB(a,b){this.a=a +this.b=b}, +a7d:function a7d(a,b){this.a=a +this.b=b}, +ed:function ed(){}, +Pt:function Pt(){}, +Ns:function Ns(a,b){this.a=a +this.b=b}, +GL:function GL(){}, +aOo:function aOo(a,b){this.a=a +this.b=b}, +hS:function hS(a,b){this.a=a +this.b=b}, +ajI:function ajI(){}, +bJr(a,b,c,d,e,f){var s=t.S,r=A.b([],t.t),q=A.ek(s),p=a==null?A.Dd():a +return new A.pY(c,B.iR,e,f,A.D(s,t.o),r,A.D(s,t.GY),A.D(s,t.oi),A.D(s,t.SP),q,b,d,p,A.D(s,t.Au))}, +bpn(a,b,c,d,e,f){return A.bJr(a,b,c,d,e,f)}, +JR:function JR(a,b){this.a=a +this.b=b}, +CV:function CV(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +Ri:function Ri(a,b,c){this.a=a +this.b=b +this.c=c}, +Rj:function Rj(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}, +Hn:function Hn(a,b,c){this.a=a +this.b=b +this.c=c}, +akX:function akX(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +pY:function pY(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.at=a +_.ch=_.ay=_.ax=null +_.CW=b +_.cx=null +_.cy=c +_.db=d +_.dx=$ +_.dy=null +_.k2=_.k1=_.id=_.go=_.fy=_.fx=_.fr=$ +_.k4=_.k3=null +_.ok=e +_.p1=f +_.p2=g +_.p3=null +_.p4=$ +_.R8=h +_.RG=1 +_.rx=0 +_.ry=null +_.f=i +_.r=j +_.w=null +_.a=k +_.b=null +_.c=l +_.d=m +_.e=n}, +aRa:function aRa(){}, +aRb:function aRb(){}, +aRc:function aRc(a,b){this.a=a +this.b=b}, +aRd:function aRd(a){this.a=a}, +aR8:function aR8(a,b){this.a=a +this.b=b}, +aR9:function aR9(a){this.a=a}, +aRe:function aRe(){}, +aRf:function aRf(){}, +I5(a,b,c){var s=t.S,r=A.ek(s),q=a==null?A.Dd():a +return new A.jk(B.b2,18,B.dK,A.D(s,t.SP),r,b,c,q,A.D(s,t.Au))}, +bq5(a,b,c){return A.I5(a,b,c)}, +oH:function oH(a,b,c){this.a=a +this.b=b +this.c=c}, +oI:function oI(a,b){this.a=a +this.c=b}, +a_G:function a_G(){}, +jk:function jk(a,b,c,d,e,f,g,h,i){var _=this +_.aS=_.aM=_.ao=_.av=_.M=_.a5=_.K=_.b6=_.b_=_.ah=_.ac=null +_.k3=_.k2=!1 +_.ok=_.k4=null +_.at=a +_.ay=b +_.ch=c +_.cx=_.CW=null +_.cy=!1 +_.db=null +_.f=d +_.r=e +_.w=null +_.a=f +_.b=null +_.c=g +_.d=h +_.e=i}, +aUW:function aUW(a,b){this.a=a +this.b=b}, +aUX:function aUX(a,b){this.a=a +this.b=b}, +aUY:function aUY(a,b){this.a=a +this.b=b}, +aUZ:function aUZ(a,b){this.a=a +this.b=b}, +aV_:function aV_(a){this.a=a}, +UR:function UR(a,b){this.a=a +this.b=b}, +Sz:function Sz(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +SC:function SC(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +SB:function SB(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +SD:function SD(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h}, +SA:function SA(a,b){this.b=a +this.c=b}, +XJ:function XJ(){}, +KW:function KW(){}, +axf:function axf(a){this.a=a}, +axg:function axg(a,b){this.a=a +this.b=b}, +axd:function axd(a,b){this.a=a +this.b=b}, +axe:function axe(a,b){this.a=a +this.b=b}, +axb:function axb(a,b){this.a=a +this.b=b}, +axc:function axc(a,b){this.a=a +this.b=b}, +axa:function axa(a,b){this.a=a +this.b=b}, +q8:function q8(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.at=a +_.dx=_.db=_.cy=_.cx=_.CW=_.ch=null +_.fx=_.fr=_.dy=!1 +_.go=_.fy=null +_.k1=b +_.k2=null +_.ok=_.k4=_.k3=$ +_.p3=_.p2=_.p1=null +_.p4=c +_.ra$=d +_.zd$=e +_.pG$=f +_.KO$=g +_.DN$=h +_.vX$=i +_.DO$=j +_.KP$=k +_.KQ$=l +_.f=m +_.r=n +_.w=null +_.a=o +_.b=null +_.c=p +_.d=q +_.e=r}, +q9:function q9(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.at=a +_.dx=_.db=_.cy=_.cx=_.CW=_.ch=null +_.fx=_.fr=_.dy=!1 +_.go=_.fy=null +_.k1=b +_.k2=null +_.ok=_.k4=_.k3=$ +_.p3=_.p2=_.p1=null +_.p4=c +_.ra$=d +_.zd$=e +_.pG$=f +_.KO$=g +_.DN$=h +_.vX$=i +_.DO$=j +_.KP$=k +_.KQ$=l +_.f=m +_.r=n +_.w=null +_.a=o +_.b=null +_.c=p +_.d=q +_.e=r}, +TU:function TU(){}, +aqT:function aqT(){}, +aqU:function aqU(){}, +aqV:function aqV(){}, +aqW:function aqW(){}, +aqX:function aqX(){}, +agK:function agK(a,b){this.a=a +this.b=b}, +CI:function CI(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1 +_.f=_.e=null}, +aFF:function aFF(a){this.a=a}, +aFG:function aFG(a,b){this.a=a +this.b=b}, +bFO(a){var s=t.av +return new A.zB(A.bc(20,null,!1,s),a,A.bc(20,null,!1,s))}, +lC:function lC(a){this.a=a}, +wT:function wT(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Wg:function Wg(a,b){this.a=a +this.b=b}, +k0:function k0(a,b){var _=this +_.a=a +_.b=null +_.c=b +_.d=0}, +zB:function zB(a,b,c){var _=this +_.e=a +_.a=b +_.b=null +_.c=c +_.d=0}, +G1:function G1(a,b,c){var _=this +_.e=a +_.a=b +_.b=null +_.c=c +_.d=0}, +bBK(a,b,c){var s,r,q,p,o=null,n=a==null +if(n&&b==null)return o +s=c<0.5 +if(s)r=n?o:a.a +else r=b==null?o:b.a +if(s)q=n?o:a.b +else q=b==null?o:b.b +if(s)p=n?o:a.c +else p=b==null?o:b.c +if(s)n=n?o:a.d +else n=b==null?o:b.d +return new A.ZH(r,q,p,n)}, +ZH:function ZH(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +af6:function af6(){}, +bdU(a){return new A.ZK(a.gaOi(),a.gaOh(),null)}, +bdV(a,b){var s=b.c +if(s!=null)return s +switch(A.am(a).w.a){case 2:case 4:return A.blu(a,b) +case 0:case 1:case 3:case 5:A.nf(a,B.cK,t.c4).toString +switch(b.b.a){case 0:s="Cut" +break +case 1:s="Copy" +break +case 2:s="Paste" +break +case 3:s="Select all" +break +case 4:s="Delete".toUpperCase() +break +case 5:s="Look Up" +break +case 6:s="Search Web" +break +case 7:s="Share" +break +case 8:s="Scan text" +break +case 9:s="" +break +default:s=null}return s}}, +bBN(a,b){var s,r,q,p,o,n,m,l=null +switch(A.am(a).w.a){case 2:return new A.W(b,new A.aw0(),A.a5(b).h("W<1,m>")) +case 1:case 0:s=A.b([],t.p) +for(r=0;q=b.length,r")) +case 4:return new A.W(b,new A.aw2(a),A.a5(b).h("W<1,m>"))}}, +ZK:function ZK(a,b,c){this.c=a +this.e=b +this.a=c}, +aw0:function aw0(){}, +aw1:function aw1(a){this.a=a}, +aw2:function aw2(a){this.a=a}, +bfL(a,b,c,d,e,f,g,h){return new A.OL(d,b,e,h,g,c,f,a,null)}, +bH0(){return new A.NH(new A.aKf(),A.D(t.K,t.Qu))}, +aVZ:function aVZ(a,b){this.a=a +this.b=b}, +OL:function OL(a,b,c,d,e,f,g,h,i){var _=this +_.c=a +_.e=b +_.w=c +_.cx=d +_.db=e +_.k2=f +_.ok=g +_.R8=h +_.a=i}, +aKf:function aKf(){}, +aKi:function aKi(){}, +VM:function VM(a){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null}, +b3K:function b3K(){}, +b3L:function b3L(){}, +bC0(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.Z(a.b,b.b,c) +q=A.ap(a.c,b.c,c) +p=A.ap(a.d,b.d,c) +o=A.Z(a.e,b.e,c) +n=A.Z(a.f,b.f,c) +m=A.fE(a.r,b.r,c) +l=A.ru(a.w,b.w,c) +k=A.ru(a.x,b.x,c) +j=c<0.5 +if(j)i=a.y +else i=b.y +h=A.ap(a.z,b.z,c) +g=A.ap(a.Q,b.Q,c) +f=A.cl(a.as,b.as,c) +e=A.cl(a.at,b.at,c) +if(j)j=a.ax +else j=b.ax +return new A.KJ(s==null?null:s,r,q,p,o,n,m,l,k,i,h,g,f,e,j)}, +KJ:function KJ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){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}, +aft:function aft(){}, +bPT(a,b){var s,r,q,p,o=A.bn("maxValue") +for(s=null,r=0;r<4;++r){q=a[r] +p=b.$1(q) +if(s==null||p>s){o.b=q +s=p}}return o.bl()}, +OO:function OO(a,b){var _=this +_.c=!0 +_.r=_.f=_.e=_.d=null +_.a=a +_.b=b}, +aKg:function aKg(a,b){this.a=a +this.b=b}, +IX:function IX(a,b){this.a=a +this.b=b}, +tV:function tV(a,b){this.a=a +this.b=b}, +G5:function G5(a,b){var _=this +_.e=!0 +_.r=_.f=$ +_.a=a +_.b=b}, +aKh:function aKh(a,b){this.a=a +this.b=b}, +bC6(a,b,c){var s,r,q,p,o,n,m +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.Z(a.b,b.b,c) +q=A.ap(a.c,b.c,c) +p=A.ap(a.d,b.d,c) +o=A.cl(a.e,b.e,c) +n=A.hP(a.f,b.f,c) +m=A.ZN(a.r,b.r,c) +return new A.KT(s,r,q,p,o,n,m,A.pM(a.w,b.w,c))}, +KT:function KT(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +afE:function afE(){}, +OM:function OM(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +alc:function alc(){}, +bCf(a,b,c){var s,r,q,p,o,n +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.ap(a.b,b.b,c) +if(c<0.5)q=a.c +else q=b.c +p=A.ap(a.d,b.d,c) +o=A.Z(a.e,b.e,c) +n=A.Z(a.f,b.f,c) +return new A.L3(s,r,q,p,o,n,A.hP(a.r,b.r,c))}, +L3:function L3(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +ag_:function ag_(){}, +bCg(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.ap(a.b,b.b,c) +q=A.ru(a.c,b.c,c) +p=A.ru(a.d,b.d,c) +o=A.Z(a.e,b.e,c) +n=A.Z(a.f,b.f,c) +m=A.cl(a.r,b.r,c) +l=A.cl(a.w,b.w,c) +k=c<0.5 +if(k)j=a.x +else j=b.x +if(k)i=a.y +else i=b.y +if(k)h=a.z +else h=b.z +if(k)g=a.Q +else g=b.Q +if(k)f=a.as +else f=b.as +if(k)k=a.at +else k=b.at +return new A.L4(s,r,q,p,o,n,m,l,j,i,h,g,f,k)}, +L4:function L4(a,b,c,d,e,f,g,h,i,j,k,l,m,n){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}, +ag0:function ag0(){}, +bCh(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.Z(a.b,b.b,c) +q=A.ap(a.c,b.c,c) +p=A.Z(a.d,b.d,c) +o=A.Z(a.e,b.e,c) +n=A.Z(a.f,b.f,c) +m=A.ap(a.r,b.r,c) +l=A.fE(a.w,b.w,c) +k=c<0.5 +if(k)j=a.x +else j=b.x +i=A.Z(a.y,b.y,c) +h=A.aSV(a.z,b.z,c) +if(k)k=a.Q +else k=b.Q +return new A.L5(s,r,q,p,o,n,m,l,j,i,h,k,A.qN(a.as,b.as,c))}, +L5:function L5(a,b,c,d,e,f,g,h,i,j,k,l,m){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}, +ag1:function ag1(){}, +Ql:function Ql(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.c=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.Q=g +_.as=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.cy=m +_.db=n +_.dy=o +_.fr=p +_.fx=q +_.fy=r +_.go=s +_.id=a0 +_.a=a1}, +anI:function anI(a,b){var _=this +_.zb$=a +_.a=null +_.b=b +_.c=null}, +akj:function akj(a,b,c){this.e=a +this.c=b +this.a=c}, +WF:function WF(a,b,c,d){var _=this +_.V=a +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +b5m:function b5m(a,b){this.a=a +this.b=b}, +atL:function atL(){}, +bCm(a,b,c){var s,r,q,p,o,n,m,l,k +if(a===b)return a +s=c<0.5 +if(s)r=a.a +else r=b.a +if(s)q=a.b +else q=b.b +if(s)p=a.c +else p=b.c +o=A.ap(a.d,b.d,c) +n=A.ap(a.e,b.e,c) +m=A.hP(a.f,b.f,c) +if(s)l=a.r +else l=b.r +if(s)k=a.w +else k=b.w +if(s)s=a.x +else s=b.x +return new A.Ld(r,q,p,o,n,m,l,k,s)}, +Ld:function Ld(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}, +agc:function agc(){}, +a09(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){return new A.cB(a3,d,i,o,q,a1,e,p,m,g,l,j,k,s,r,n,a4,a2,b,f,a,a0,c,h)}, +p6(a8,a9,b0){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=null +if(a8==a9)return a8 +s=a8==null +r=s?a7:a8.a +q=a9==null +p=q?a7:a9.a +p=A.bY(r,p,b0,A.Ko(),t.p8) +r=s?a7:a8.b +o=q?a7:a9.b +n=t.MH +o=A.bY(r,o,b0,A.dq(),n) +r=s?a7:a8.c +r=A.bY(r,q?a7:a9.c,b0,A.dq(),n) +m=s?a7:a8.d +m=A.bY(m,q?a7:a9.d,b0,A.dq(),n) +l=s?a7:a8.e +l=A.bY(l,q?a7:a9.e,b0,A.dq(),n) +k=s?a7:a8.f +k=A.bY(k,q?a7:a9.f,b0,A.dq(),n) +j=s?a7:a8.r +i=q?a7:a9.r +h=t.PM +i=A.bY(j,i,b0,A.Zr(),h) +j=s?a7:a8.w +g=q?a7:a9.w +g=A.bY(j,g,b0,A.bin(),t.pc) +j=s?a7:a8.x +f=q?a7:a9.x +e=t.tW +f=A.bY(j,f,b0,A.Zq(),e) +j=s?a7:a8.y +j=A.bY(j,q?a7:a9.y,b0,A.Zq(),e) +d=s?a7:a8.z +e=A.bY(d,q?a7:a9.z,b0,A.Zq(),e) +d=s?a7:a8.Q +n=A.bY(d,q?a7:a9.Q,b0,A.dq(),n) +d=s?a7:a8.as +h=A.bY(d,q?a7:a9.as,b0,A.Zr(),h) +d=s?a7:a8.at +d=A.bCn(d,q?a7:a9.at,b0) +c=s?a7:a8.ax +b=q?a7:a9.ax +b=A.bY(c,b,b0,A.bbP(),t.KX) +c=b0<0.5 +if(c)a=s?a7:a8.ay +else a=q?a7:a9.ay +if(c)a0=s?a7:a8.ch +else a0=q?a7:a9.ch +if(c)a1=s?a7:a8.CW +else a1=q?a7:a9.CW +if(c)a2=s?a7:a8.cx +else a2=q?a7:a9.cx +if(c)a3=s?a7:a8.cy +else a3=q?a7:a9.cy +a4=s?a7:a8.db +a4=A.ZN(a4,q?a7:a9.db,b0) +if(c)a5=s?a7:a8.dx +else a5=q?a7:a9.dx +if(c)a6=s?a7:a8.dy +else a6=q?a7:a9.dy +if(c)s=s?a7:a8.fr +else s=q?a7:a9.fr +return A.a09(a4,a2,a6,o,i,a3,j,s,r,n,h,e,f,a,m,g,l,b,d,a5,k,a1,p,a0)}, +bCn(a,b,c){if(a==null&&b==null)return null +return new A.akR(a,b,c)}, +cB:function cB(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4}, +akR:function akR(a,b,c){this.a=a +this.b=b +this.c=c}, +agh:function agh(){}, +bkW(a,b,c,d){var s +$label0$0:{if(d<=1){s=a +break $label0$0}if(d<2){s=A.hP(a,b,d-1) +s.toString +break $label0$0}if(d<3){s=A.hP(b,c,d-2) +s.toString +break $label0$0}s=c +break $label0$0}return s}, +aH4:function aH4(a,b){this.a=a +this.b=b}, +Lh:function Lh(){}, +U4:function U4(a,b,c){var _=this +_.r=_.f=_.e=_.d=null +_.f2$=a +_.bV$=b +_.a=null +_.b=c +_.c=null}, +aZW:function aZW(){}, +aZT:function aZT(a,b,c){this.a=a +this.b=b +this.c=c}, +aZU:function aZU(a,b){this.a=a +this.b=b}, +aZV:function aZV(a,b,c){this.a=a +this.b=b +this.c=c}, +aZu:function aZu(){}, +aZv:function aZv(){}, +aZw:function aZw(){}, +aZH:function aZH(){}, +aZM:function aZM(){}, +aZN:function aZN(){}, +aZO:function aZO(){}, +aZP:function aZP(){}, +aZQ:function aZQ(){}, +aZR:function aZR(){}, +aZS:function aZS(){}, +aZx:function aZx(){}, +aZy:function aZy(){}, +aZz:function aZz(){}, +aZK:function aZK(a){this.a=a}, +aZs:function aZs(a){this.a=a}, +aZL:function aZL(a){this.a=a}, +aZr:function aZr(a){this.a=a}, +aZA:function aZA(){}, +aZB:function aZB(){}, +aZC:function aZC(){}, +aZD:function aZD(){}, +aZE:function aZE(){}, +aZF:function aZF(){}, +aZG:function aZG(){}, +aZI:function aZI(){}, +aZJ:function aZJ(a){this.a=a}, +aZt:function aZt(){}, +alt:function alt(a){this.a=a}, +aki:function aki(a,b,c){this.e=a +this.c=b +this.a=c}, +WE:function WE(a,b,c,d){var _=this +_.V=a +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +b5l:function b5l(a,b){this.a=a +this.b=b}, +Yy:function Yy(){}, +bkY(a){var s,r,q,p,o +a.bh(t.Xj) +s=A.am(a) +r=s.xr +if(r.at==null){q=r.at +if(q==null)q=s.ax +p=r.geP(0) +o=r.gcw(0) +r=A.bkX(!1,r.w,q,r.x,r.y,r.b,r.Q,r.z,r.d,r.ax,r.a,p,o,r.as,r.c)}r.toString +return r}, +bkX(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return new A.a0a(k,f,o,i,l,m,!1,b,d,e,h,g,n,c,j)}, +Li:function Li(a,b){this.a=a +this.b=b}, +axY:function axY(a,b){this.a=a +this.b=b}, +a0a:function a0a(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){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}, +agi:function agi(){}, +aym(a,b,c,d,e){return new A.a0g(b,e,c,d,a,null)}, +aZZ:function aZZ(a,b){this.a=a +this.b=b}, +a0g:function a0g(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.f=c +_.y=d +_.Q=e +_.a=f}, +aZY:function aZY(a,b,c,d,e,f,g,h){var _=this +_.w=a +_.x=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h}, +bCt(a,b,c){var s,r,q,p,o,n +if(a===b)return a +if(c<0.5)s=a.a +else s=b.a +r=A.Z(a.b,b.b,c) +q=A.Z(a.c,b.c,c) +p=A.Z(a.d,b.d,c) +o=A.ap(a.e,b.e,c) +n=A.hP(a.f,b.f,c) +return new A.DK(s,r,q,p,o,n,A.fE(a.r,b.r,c))}, +DK:function DK(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +agn:function agn(){}, +bl3(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){return new A.Lo(p,i,h,a,d,c,!1,g,e,j,n,!1,l,m,!1,k,B.air,null)}, +b_8:function b_8(a,b){this.a=a +this.b=b}, +Lo:function Lo(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.as=i +_.at=j +_.ax=k +_.ch=l +_.CW=m +_.cx=n +_.cy=o +_.db=p +_.dx=q +_.a=r}, +agr:function agr(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.d=a +_.e=null +_.Wv$=b +_.Ww$=c +_.KR$=d +_.Wx$=e +_.Wy$=f +_.Wz$=g +_.WA$=h +_.WB$=i +_.WC$=j +_.DP$=k +_.DQ$=l +_.DR$=m +_.f2$=n +_.bV$=o +_.a=null +_.b=p +_.c=null}, +b_6:function b_6(a){this.a=a}, +b_7:function b_7(a,b){this.a=a +this.b=b}, +agp:function agp(a){var _=this +_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=_.f=_.e=_.d=_.c=_.b=_.a=_.fy=_.fx=_.fr=_.dy=_.dx=_.db=null +_.ac$=0 +_.ah$=a +_.b6$=_.b_$=0 +_.K$=!1}, +b_1:function b_1(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.y=a +_.z=b +_.a=c +_.b=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=i +_.w=j +_.x=k}, +b_5:function b_5(a){this.a=a}, +b_3:function b_3(a){this.a=a}, +b_2:function b_2(a){this.a=a}, +b_4:function b_4(a){this.a=a}, +YA:function YA(){}, +YB:function YB(){}, +b_9:function b_9(a,b){this.a=a +this.b=b}, +Lp:function Lp(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.cy=c +_.go=d +_.a=e}, +bCz(a,b,c){var s,r,q,p,o,n,m,l +if(a===b)return a +s=c<0.5 +if(s)r=a.a +else r=b.a +q=t.MH +p=A.bY(a.b,b.b,c,A.dq(),q) +o=A.bY(a.c,b.c,c,A.dq(),q) +q=A.bY(a.d,b.d,c,A.dq(),q) +n=A.ap(a.e,b.e,c) +if(s)m=a.f +else m=b.f +if(s)s=a.r +else s=b.r +l=t.KX.a(A.fE(a.w,b.w,c)) +return new A.DP(r,p,o,q,n,m,s,l,A.bCy(a.x,b.x,c))}, +bCy(a,b,c){if(a==null||b==null)return null +if(a===b)return a +return A.bJ(a,b,c)}, +bl4(a){var s +a.bh(t.ES) +s=A.am(a) +return s.y2}, +DP:function DP(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}, +ags:function ags(){}, +bCD(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 +if(a3===a4)return a3 +s=A.bY(a3.a,a4.a,a5,A.dq(),t.MH) +r=A.Z(a3.b,a4.b,a5) +q=A.Z(a3.c,a4.c,a5) +p=A.Z(a3.d,a4.d,a5) +o=A.Z(a3.e,a4.e,a5) +n=A.Z(a3.f,a4.f,a5) +m=A.Z(a3.r,a4.r,a5) +l=A.Z(a3.w,a4.w,a5) +k=A.Z(a3.x,a4.x,a5) +j=a5<0.5 +if(j)i=a3.y!==!1 +else i=a4.y!==!1 +h=A.Z(a3.z,a4.z,a5) +g=A.hP(a3.Q,a4.Q,a5) +f=A.hP(a3.as,a4.as,a5) +e=A.bCC(a3.at,a4.at,a5) +d=A.bCB(a3.ax,a4.ax,a5) +c=A.cl(a3.ay,a4.ay,a5) +b=A.cl(a3.ch,a4.ch,a5) +if(j){j=a3.CW +if(j==null)j=B.aW}else{j=a4.CW +if(j==null)j=B.aW}a=A.ap(a3.cx,a4.cx,a5) +a0=A.ap(a3.cy,a4.cy,a5) +a1=a3.db +if(a1==null)a2=a4.db!=null +else a2=!0 +if(a2)a1=A.ru(a1,a4.db,a5) +else a1=null +a2=A.qN(a3.dx,a4.dx,a5) +return new A.Lq(s,r,q,p,o,n,m,l,k,i,h,g,f,e,d,c,b,j,a,a0,a1,a2,A.qN(a3.dy,a4.dy,a5))}, +bCC(a,b,c){var s=a==null +if(s&&b==null)return null +if(s){s=b.a +return A.bJ(new A.bL(A.S(0,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255),0,B.J,-1),b,c)}if(b==null){s=a.a +return A.bJ(new A.bL(A.S(0,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255),0,B.J,-1),a,c)}return A.bJ(a,b,c)}, +bCB(a,b,c){if(a==null&&b==null)return null +return t.KX.a(A.fE(a,b,c))}, +Lq:function Lq(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3}, +agv:function agv(){}, +bee(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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){return new A.E2(b,a7,k,a8,l,a9,b0,m,n,b2,o,b3,p,b4,b5,q,r,c7,a1,c8,a2,c9,d0,a3,a4,c,h,d,i,b7,s,c6,c4,b8,c3,c2,b9,c0,c1,a0,a5,a6,b6,b1,f,j,e,c5,a,g)}, +bCX(d5,d6,d7){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,d1,d2,d3,d4 +if(d5===d6)return d5 +s=d7<0.5?d5.a:d6.a +r=d5.b +q=d6.b +p=A.Z(r,q,d7) +p.toString +o=d5.c +n=d6.c +m=A.Z(o,n,d7) +m.toString +l=d5.d +if(l==null)l=r +k=d6.d +l=A.Z(l,k==null?q:k,d7) +k=d5.e +if(k==null)k=o +j=d6.e +k=A.Z(k,j==null?n:j,d7) +j=d5.f +if(j==null)j=r +i=d6.f +j=A.Z(j,i==null?q:i,d7) +i=d5.r +if(i==null)i=r +h=d6.r +i=A.Z(i,h==null?q:h,d7) +h=d5.w +if(h==null)h=o +g=d6.w +h=A.Z(h,g==null?n:g,d7) +g=d5.x +if(g==null)g=o +f=d6.x +g=A.Z(g,f==null?n:f,d7) +f=d5.y +e=d6.y +d=A.Z(f,e,d7) +d.toString +c=d5.z +b=d6.z +a=A.Z(c,b,d7) +a.toString +a0=d5.Q +if(a0==null)a0=f +a1=d6.Q +a0=A.Z(a0,a1==null?e:a1,d7) +a1=d5.as +if(a1==null)a1=c +a2=d6.as +a1=A.Z(a1,a2==null?b:a2,d7) +a2=d5.at +if(a2==null)a2=f +a3=d6.at +a2=A.Z(a2,a3==null?e:a3,d7) +a3=d5.ax +if(a3==null)a3=f +a4=d6.ax +a3=A.Z(a3,a4==null?e:a4,d7) +a4=d5.ay +if(a4==null)a4=c +a5=d6.ay +a4=A.Z(a4,a5==null?b:a5,d7) +a5=d5.ch +if(a5==null)a5=c +a6=d6.ch +a5=A.Z(a5,a6==null?b:a6,d7) +a6=d5.CW +a7=a6==null +a8=a7?f:a6 +a9=d6.CW +b0=a9==null +a8=A.Z(a8,b0?e:a9,d7) +b1=d5.cx +b2=b1==null +b3=b2?c:b1 +b4=d6.cx +b5=b4==null +b3=A.Z(b3,b5?b:b4,d7) +b6=d5.cy +if(b6==null)b6=a7?f:a6 +b7=d6.cy +if(b7==null)b7=b0?e:a9 +b7=A.Z(b6,b7,d7) +b6=d5.db +if(b6==null)b6=b2?c:b1 +b8=d6.db +if(b8==null)b8=b5?b:b4 +b8=A.Z(b6,b8,d7) +b6=d5.dx +if(b6==null)b6=a7?f:a6 +b9=d6.dx +if(b9==null)b9=b0?e:a9 +b9=A.Z(b6,b9,d7) +b6=d5.dy +if(b6==null)f=a7?f:a6 +else f=b6 +a6=d6.dy +if(a6==null)e=b0?e:a9 +else e=a6 +e=A.Z(f,e,d7) +f=d5.fr +if(f==null)f=b2?c:b1 +a6=d6.fr +if(a6==null)a6=b5?b:b4 +a6=A.Z(f,a6,d7) +f=d5.fx +if(f==null)f=b2?c:b1 +c=d6.fx +if(c==null)c=b5?b:b4 +c=A.Z(f,c,d7) +f=d5.fy +b=d6.fy +a7=A.Z(f,b,d7) +a7.toString +a9=d5.go +b0=d6.go +b1=A.Z(a9,b0,d7) +b1.toString +b2=d5.id +f=b2==null?f:b2 +b2=d6.id +f=A.Z(f,b2==null?b:b2,d7) +b=d5.k1 +if(b==null)b=a9 +a9=d6.k1 +b=A.Z(b,a9==null?b0:a9,d7) +a9=d5.k2 +b0=d6.k2 +b2=A.Z(a9,b0,d7) +b2.toString +b4=d5.k3 +b5=d6.k3 +b6=A.Z(b4,b5,d7) +b6.toString +c0=d5.ok +if(c0==null)c0=a9 +c1=d6.ok +c0=A.Z(c0,c1==null?b0:c1,d7) +c1=d5.p1 +if(c1==null)c1=a9 +c2=d6.p1 +c1=A.Z(c1,c2==null?b0:c2,d7) +c2=d5.p2 +if(c2==null)c2=a9 +c3=d6.p2 +c2=A.Z(c2,c3==null?b0:c3,d7) +c3=d5.p3 +if(c3==null)c3=a9 +c4=d6.p3 +c3=A.Z(c3,c4==null?b0:c4,d7) +c4=d5.p4 +if(c4==null)c4=a9 +c5=d6.p4 +c4=A.Z(c4,c5==null?b0:c5,d7) +c5=d5.R8 +if(c5==null)c5=a9 +c6=d6.R8 +c5=A.Z(c5,c6==null?b0:c6,d7) +c6=d5.RG +if(c6==null)c6=a9 +c7=d6.RG +c6=A.Z(c6,c7==null?b0:c7,d7) +c7=d5.rx +if(c7==null)c7=b4 +c8=d6.rx +c7=A.Z(c7,c8==null?b5:c8,d7) +c8=d5.ry +if(c8==null){c8=d5.ac +if(c8==null)c8=b4}c9=d6.ry +if(c9==null){c9=d6.ac +if(c9==null)c9=b5}c9=A.Z(c8,c9,d7) +c8=d5.to +if(c8==null){c8=d5.ac +if(c8==null)c8=b4}d0=d6.to +if(d0==null){d0=d6.ac +if(d0==null)d0=b5}d0=A.Z(c8,d0,d7) +c8=d5.x1 +if(c8==null)c8=B.q +d1=d6.x1 +c8=A.Z(c8,d1==null?B.q:d1,d7) +d1=d5.x2 +if(d1==null)d1=B.q +d2=d6.x2 +d1=A.Z(d1,d2==null?B.q:d2,d7) +d2=d5.xr +if(d2==null)d2=b4 +d3=d6.xr +d2=A.Z(d2,d3==null?b5:d3,d7) +d3=d5.y1 +if(d3==null)d3=a9 +d4=d6.y1 +d3=A.Z(d3,d4==null?b0:d4,d7) +d4=d5.y2 +o=d4==null?o:d4 +d4=d6.y2 +o=A.Z(o,d4==null?n:d4,d7) +n=d5.bv +r=n==null?r:n +n=d6.bv +r=A.Z(r,n==null?q:n,d7) +q=d5.bn +if(q==null)q=a9 +n=d6.bn +q=A.Z(q,n==null?b0:n,d7) +n=d5.ac +if(n==null)n=b4 +b4=d6.ac +n=A.Z(n,b4==null?b5:b4,d7) +b4=d5.k4 +a9=b4==null?a9:b4 +b4=d6.k4 +return A.bee(q,s,a7,f,o,d2,n,b1,b,d3,m,k,h,g,a,a1,a4,a5,b6,c7,b3,b8,a6,c,c9,d0,p,l,j,i,d1,d,a0,a2,a3,c8,b2,c1,c4,c5,c6,c3,c2,c0,r,A.Z(a9,b4==null?b0:b4,d7),a8,b7,b9,e)}, +E2:function E2(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7 +_.id=a8 +_.k1=a9 +_.k2=b0 +_.k3=b1 +_.k4=b2 +_.ok=b3 +_.p1=b4 +_.p2=b5 +_.p3=b6 +_.p4=b7 +_.R8=b8 +_.RG=b9 +_.rx=c0 +_.ry=c1 +_.to=c2 +_.x1=c3 +_.x2=c4 +_.xr=c5 +_.y1=c6 +_.y2=c7 +_.bv=c8 +_.bn=c9 +_.ac=d0}, +agJ:function agJ(){}, +fR:function fR(a,b){this.b=a +this.a=b}, +pG:function pG(a,b){this.b=a +this.a=b}, +bDk(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a===b)return a +s=A.aAE(a.a,b.a,c) +r=t.MH +q=A.bY(a.b,b.b,c,A.dq(),r) +p=A.ap(a.c,b.c,c) +o=A.ap(a.d,b.d,c) +n=A.cl(a.e,b.e,c) +r=A.bY(a.f,b.f,c,A.dq(),r) +m=A.ap(a.r,b.r,c) +l=A.cl(a.w,b.w,c) +k=A.ap(a.x,b.x,c) +j=A.ap(a.y,b.y,c) +i=A.ap(a.z,b.z,c) +h=A.ap(a.Q,b.Q,c) +g=c<0.5 +f=g?a.as:b.as +g=g?a.at:b.at +return new A.M6(s,q,p,o,n,r,m,l,k,j,i,h,f,g)}, +M6:function M6(a,b,c,d,e,f,g,h,i,j,k,l,m,n){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}, +ahx:function ahx(){}, +bDm(b7,b8,b9){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 +if(b7===b8)return b7 +s=A.Z(b7.a,b8.a,b9) +r=A.ap(b7.b,b8.b,b9) +q=A.Z(b7.c,b8.c,b9) +p=A.Z(b7.d,b8.d,b9) +o=A.fE(b7.e,b8.e,b9) +n=A.Z(b7.f,b8.f,b9) +m=A.Z(b7.r,b8.r,b9) +l=A.cl(b7.w,b8.w,b9) +k=A.cl(b7.x,b8.x,b9) +j=A.cl(b7.y,b8.y,b9) +i=A.cl(b7.z,b8.z,b9) +h=t.MH +g=A.bY(b7.Q,b8.Q,b9,A.dq(),h) +f=A.bY(b7.as,b8.as,b9,A.dq(),h) +e=A.bY(b7.at,b8.at,b9,A.dq(),h) +d=A.bY(b7.ax,b8.ax,b9,A.bbP(),t.KX) +c=A.bY(b7.ay,b8.ay,b9,A.dq(),h) +b=A.bY(b7.ch,b8.ch,b9,A.dq(),h) +a=A.bDl(b7.CW,b8.CW,b9) +a0=A.cl(b7.cx,b8.cx,b9) +a1=A.bY(b7.cy,b8.cy,b9,A.dq(),h) +a2=A.bY(b7.db,b8.db,b9,A.dq(),h) +a3=A.bY(b7.dx,b8.dx,b9,A.dq(),h) +a4=A.Z(b7.dy,b8.dy,b9) +a5=A.ap(b7.fr,b8.fr,b9) +a6=A.Z(b7.fx,b8.fx,b9) +a7=A.Z(b7.fy,b8.fy,b9) +a8=A.fE(b7.go,b8.go,b9) +a9=A.Z(b7.id,b8.id,b9) +b0=A.Z(b7.k1,b8.k1,b9) +b1=A.cl(b7.k2,b8.k2,b9) +b2=A.cl(b7.k3,b8.k3,b9) +b3=A.Z(b7.k4,b8.k4,b9) +h=A.bY(b7.ok,b8.ok,b9,A.dq(),h) +b4=A.Z(b7.p1,b8.p1,b9) +if(b9<0.5)b5=b7.p2 +else b5=b8.p2 +b6=A.p6(b7.p3,b8.p3,b9) +return new A.M7(s,r,q,p,o,n,m,l,k,j,i,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,h,b4,b5,b6,A.p6(b7.p4,b8.p4,b9))}, +bDl(a,b,c){var s +if(a==b)return a +if(a==null){s=b.a +return A.bJ(new A.bL(A.S(0,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255),0,B.J,-1),b,c)}s=a.a +return A.bJ(a,new A.bL(A.S(0,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255),0,B.J,-1),c)}, +M7:function M7(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7 +_.id=a8 +_.k1=a9 +_.k2=b0 +_.k3=b1 +_.k4=b2 +_.ok=b3 +_.p1=b4 +_.p2=b5 +_.p3=b6 +_.p4=b7}, +ahz:function ahz(){}, +ahM:function ahM(){}, +aAT:function aAT(){}, +atl:function atl(){}, +a29:function a29(a,b,c){this.c=a +this.d=b +this.a=c}, +bDB(a,b,c){var s=null +return new A.Ev(b,A.dI(c,s,B.cJ,s,B.H4.e2(A.am(a).ax.a===B.b8?B.l:B.an),s,s),s)}, +Ev:function Ev(a,b,c){this.c=a +this.d=b +this.a=c}, +blz(a,b,c,d,e,f,g,h,i){return new A.a2j(b,e,g,i,f,d,h,a,c,null)}, +bBR(a,b,c){return new A.ZL(c,b,a,null)}, +bOk(a,b,c,d){return A.li(!1,d,A.dP(B.fb,b,null))}, +bDF(a,b,c,d,e,f,g,h,i,j,a0){var s,r,q,p,o,n,m,l,k=null +A.nf(f,B.cK,t.c4).toString +s=A.b([],t.Zt) +r=$.aK +q=A.GQ(B.eh) +p=A.b([],t.wi) +o=$.aa() +n=$.aK +m=a0.h("aM<0?>") +l=a0.h("bH<0?>") +return new A.Mg(new A.aAX(e,h,!0),!0,"Dismiss",b,B.hv,A.bSr(),a,k,i,s,A.C(t.kj),new A.cK(k,a0.h("cK>")),new A.cK(k,t.re),new A.PD(),k,0,new A.bH(new A.aM(r,a0.h("aM<0?>")),a0.h("bH<0?>")),q,p,B.re,new A.cD(k,o,t.Ll),new A.bH(new A.aM(n,m),l),new A.bH(new A.aM(n,m),l),a0.h("Mg<0>"))}, +bre(a){var s=null +return new A.b0Y(a,s,6,s,s,B.Fq,B.a5,s,s,s,s,s,s)}, +a2j:function a2j(a,b,c,d,e,f,g,h,i,j){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.x=e +_.y=f +_.z=g +_.Q=h +_.as=i +_.a=j}, +ZL:function ZL(a,b,c,d){var _=this +_.f=a +_.x=b +_.Q=c +_.a=d}, +Mg:function Mg(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){var _=this +_.ce=a +_.dD=b +_.dj=c +_.eB=d +_.fT=e +_.fU=f +_.fV=g +_.go=h +_.id=i +_.k1=!1 +_.k3=_.k2=null +_.k4=j +_.ok=k +_.p1=l +_.p2=m +_.p3=n +_.p4=$ +_.R8=null +_.RG=$ +_.pF$=o +_.KM$=p +_.Q=q +_.as=null +_.at=!1 +_.ay=_.ax=null +_.ch=r +_.cy=_.cx=null +_.f=s +_.a=null +_.b=a0 +_.c=a1 +_.d=a2 +_.e=a3 +_.$ti=a4}, +aAX:function aAX(a,b,c){this.a=a +this.b=b +this.c=c}, +b0Y:function b0Y(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.as=a +_.ax=_.at=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m}, +bDG(a,b,c){var s,r,q,p,o,n,m,l,k,j,i +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.ap(a.b,b.b,c) +q=A.Z(a.c,b.c,c) +p=A.Z(a.d,b.d,c) +o=A.fE(a.e,b.e,c) +n=A.ZN(a.f,b.f,c) +m=A.Z(a.y,b.y,c) +l=A.cl(a.r,b.r,c) +k=A.cl(a.w,b.w,c) +j=A.hP(a.x,b.x,c) +i=A.Z(a.z,b.z,c) +return new A.Ew(s,r,q,p,o,n,l,k,j,m,i,A.a35(a.Q,b.Q,c))}, +Ew:function Ew(a,b,c,d,e,f,g,h,i,j,k,l){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}, +ahR:function ahR(){}, +bDU(a,b,c){var s,r,q,p +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.ap(a.b,b.b,c) +q=A.ap(a.c,b.c,c) +p=A.ap(a.d,b.d,c) +return new A.Mm(s,r,q,p,A.ap(a.e,b.e,c))}, +Mm:function Mm(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +ai_:function ai_(){}, +aCc:function aCc(a,b){this.a=a +this.b=b}, +a2Y:function a2Y(a,b){this.x=a +this.a=b}, +b11:function b11(a,b,c,d,e,f,g,h,i){var _=this +_.x=a +_.y=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i}, +bEm(a,b,c){var s,r,q,p,o,n,m +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.Z(a.b,b.b,c) +q=A.ap(a.c,b.c,c) +p=A.Z(a.d,b.d,c) +o=A.Z(a.e,b.e,c) +n=A.fE(a.f,b.f,c) +m=A.fE(a.r,b.r,c) +return new A.EC(s,r,q,p,o,n,m,A.ap(a.w,b.w,c))}, +bEn(a){var s +a.bh(t.ty) +s=A.am(a) +return s.b6}, +EC:function EC(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +ail:function ail(){}, +bmo(a,b,c){return new A.lg(b,a,B.iT,null,c.h("lg<0>"))}, +beL(a,b,c,d,e){return new A.ED(b,d,c,a,null,e.h("ED<0>"))}, +ain:function ain(a,b,c,d,e,f,g,h){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.a=h}, +J5:function J5(a,b,c,d,e,f,g,h,i){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.a=h +_.$ti=i}, +J6:function J6(a,b){var _=this +_.a=null +_.b=a +_.c=null +_.$ti=b}, +J4:function J4(a,b,c,d,e,f,g,h,i,j){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.a=i +_.$ti=j}, +US:function US(a,b){var _=this +_.e=_.d=$ +_.a=null +_.b=a +_.c=null +_.$ti=b}, +b19:function b19(a){this.a=a}, +aio:function aio(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.$ti=d}, +nD:function nD(a,b){this.a=a +this.$ti=b}, +b42:function b42(a,b,c){this.a=a +this.c=b +this.d=c}, +UT:function UT(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1){var _=this +_.ce=a +_.dD=b +_.dj=c +_.eB=d +_.fT=e +_.fU=f +_.fV=g +_.ea=h +_.eu=i +_.i9=j +_.na=k +_.nb=l +_.pH=m +_.ha=n +_.go=o +_.id=p +_.k1=!1 +_.k3=_.k2=null +_.k4=q +_.ok=r +_.p1=s +_.p2=a0 +_.p3=a1 +_.p4=$ +_.R8=null +_.RG=$ +_.pF$=a2 +_.KM$=a3 +_.Q=a4 +_.as=null +_.at=!1 +_.ay=_.ax=null +_.ch=a5 +_.cy=_.cx=null +_.f=a6 +_.a=null +_.b=a7 +_.c=a8 +_.d=a9 +_.e=b0 +_.$ti=b1}, +b1b:function b1b(a){this.a=a}, +b1c:function b1c(){}, +b1d:function b1d(){}, +CL:function CL(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.y=g +_.Q=h +_.as=i +_.at=j +_.a=k +_.$ti=l}, +UU:function UU(a,b){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null +_.$ti=b}, +b1a:function b1a(a,b,c){this.a=a +this.b=b +this.c=c}, +Jv:function Jv(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.c=c +_.a=d +_.$ti=e}, +aoh:function aoh(a,b,c,d){var _=this +_.V=a +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aim:function aim(){}, +lg:function lg(a,b,c,d,e){var _=this +_.r=a +_.c=b +_.d=c +_.a=d +_.$ti=e}, +ED:function ED(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.r=c +_.CW=d +_.a=e +_.$ti=f}, +J3:function J3(a,b){var _=this +_.r=_.f=_.e=_.d=null +_.w=$ +_.a=null +_.b=a +_.c=null +_.$ti=b}, +b17:function b17(a){this.a=a}, +b18:function b18(a){this.a=a}, +b15:function b15(a){this.a=a}, +b13:function b13(a,b){this.a=a +this.b=b}, +b14:function b14(a){this.a=a}, +b16:function b16(a){this.a=a}, +YI:function YI(){}, +bEp(a,b,c){var s,r +if(a===b)return a +s=A.cl(a.a,b.a,c) +if(c<0.5)r=a.b +else r=b.b +return new A.MA(s,r,A.bfQ(a.c,b.c,c))}, +MA:function MA(a,b,c){this.a=a +this.b=b +this.c=c}, +aip:function aip(){}, +n8(a,b,c){var s=null +return new A.a38(b,s,s,s,c,s,s,!1,s,!0,a,s)}, +bmt(a,b,c,d,e,f,g,h,i,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9){var s,r,q,p,o,n,m,l,k,j=null +$label0$0:{s=a0==null +if(s&&e==null){r=j +break $label0$0}r=new A.V1(a0,e) +break $label0$0}$label1$1:{q=new A.V1(c,d) +break $label1$1}$label2$2:{break $label2$2}$label3$3:{if(s){s=j +break $label3$3}s=new A.aiz(a0) +break $label3$3}$label4$4:{if(g==null){p=j +break $label4$4}p=new A.aix(g) +break $label4$4}o=a4==null?j:new A.d0(a4,t.De) +n=a3==null?j:new A.d0(a3,t.mD) +m=a2==null?j:new A.d0(a2,t.W7) +l=a1==null?j:new A.d0(a1,t.W7) +k=a5==null?j:new A.d0(a5,t.dy) +return A.a09(a,b,j,q,p,h,j,j,r,j,j,l,m,new A.aiy(i,f),s,n,o,k,j,a6,j,a7,new A.d0(a8,t.RP),a9)}, +bQh(a){var s=A.am(a),r=s.p2.as,q=r==null?null:r.r +if(q==null)q=14 +r=A.e8(a,B.d6) +r=r==null?null:r.geS() +if(r==null)r=B.aq +return A.bkW(new A.aS(24,0,24,0),new A.aS(12,0,12,0),new A.aS(6,0,6,0),q*r.a/14)}, +a38:function a38(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.a=l}, +V1:function V1(a,b){this.a=a +this.b=b}, +aiz:function aiz(a){this.a=a}, +aix:function aix(a){this.a=a}, +aiy:function aiy(a,b){this.a=a +this.b=b}, +aiA:function aiA(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5){var _=this +_.fx=a +_.fy=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3 +_.dy=a4 +_.fr=a5}, +b1g:function b1g(a){this.a=a}, +b1i:function b1i(a){this.a=a}, +b1k:function b1k(a){this.a=a}, +b1h:function b1h(){}, +b1j:function b1j(){}, +atn:function atn(){}, +ato:function ato(){}, +atp:function atp(){}, +atq:function atq(){}, +bEC(a,b,c){if(a===b)return a +return new A.EJ(A.p6(a.a,b.a,c))}, +EJ:function EJ(a){this.a=a}, +aiB:function aiB(){}, +bmu(a,b,c){if(b!=null&&!b.k(0,B.B))return A.azB(A.S(B.c.ai(255*A.bED(c)),b.gm(b)>>>16&255,b.gm(b)>>>8&255,b.gm(b)&255),a) +return a}, +bED(a){var s,r,q,p,o,n +if(a<0)return 0 +for(s=0;r=B.xn[s],q=r.a,a>=q;){if(a===q||s+1===6)return r.b;++s}p=B.xn[s-1] +o=p.a +n=p.b +return n+(a-o)/(q-o)*(r.b-n)}, +tW:function tW(a,b){this.a=a +this.b=b}, +brj(a){var s=null +return new A.b1y(a,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +aDR:function aDR(){this.a=null}, +MU:function MU(a,b,c,d){var _=this +_.d=a +_.r=b +_.z=c +_.a=d}, +V9:function V9(a,b,c,d,e,f,g,h){var _=this +_.d=a +_.e=b +_.f=c +_.r=d +_.w=e +_.ax=_.at=_.as=_.Q=_.z=_.y=_.x=$ +_.ay=!1 +_.ch=$ +_.CW=null +_.jk$=f +_.dQ$=g +_.a=null +_.b=h +_.c=null}, +b1B:function b1B(a){this.a=a}, +b1A:function b1A(a){this.a=a}, +b1z:function b1z(){}, +b1C:function b1C(a,b,c){this.a=a +this.b=b +this.c=c}, +b1y:function b1y(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.at=a +_.ay=_.ax=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n}, +YJ:function YJ(){}, +bER(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.Z(a.b,b.b,c) +q=A.hP(a.c,b.c,c) +p=A.ZN(a.d,b.d,c) +o=A.hP(a.e,b.e,c) +n=A.Z(a.f,b.f,c) +m=A.Z(a.r,b.r,c) +l=A.Z(a.w,b.w,c) +k=A.Z(a.x,b.x,c) +j=A.fE(a.y,b.y,c) +i=A.fE(a.z,b.z,c) +h=c<0.5 +if(h)g=a.Q +else g=b.Q +if(h)h=a.as +else h=b.as +return new A.ET(s,r,q,p,o,n,m,l,k,j,i,g,h)}, +aDS(a){var s +a.bh(t.o6) +s=A.am(a) +return s.M}, +ET:function ET(a,b,c,d,e,f,g,h,i,j,k,l,m){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}, +aiO:function aiO(){}, +bEV(a,b,c){if(a===b)return a +return new A.MY(A.p6(a.a,b.a,c))}, +MY:function MY(a){this.a=a}, +aiT:function aiT(){}, +b0K:function b0K(){}, +aj4:function aj4(a,b){this.a=a +this.b=b}, +a3P:function a3P(a,b,c,d){var _=this +_.c=a +_.z=b +_.k1=c +_.a=d}, +aiv:function aiv(a,b){this.a=a +this.b=b}, +agt:function agt(a,b){this.c=a +this.a=b}, +Ww:function Ww(a,b,c,d,e){var _=this +_.V=null +_.aE=a +_.bj=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +b1E:function b1E(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){var _=this +_.dx=a +_.dy=b +_.fr=c +_.fy=_.fx=$ +_.a=d +_.b=e +_.c=f +_.d=g +_.e=h +_.f=i +_.r=j +_.w=k +_.x=l +_.y=m +_.z=n +_.Q=o +_.as=p +_.at=q +_.ax=r +_.ay=s +_.ch=a0 +_.CW=a1 +_.cx=a2 +_.cy=a3 +_.db=a4}, +bKv(a,b){return a.r.a-16-a.e.c-a.a.a+b}, +bra(a,b,c,d,e){return new A.TQ(c,d,a,b,new A.bW(A.b([],t.x8),t.jc),new A.bW(A.b([],t.u),t.fy),0,e.h("TQ<0>"))}, +aEj:function aEj(){}, +aTT:function aTT(){}, +aDX:function aDX(){}, +aDW:function aDW(){}, +b1m:function b1m(){}, +aEi:function aEi(){}, +b6e:function b6e(){}, +TQ:function TQ(a,b,c,d,e,f,g,h){var _=this +_.w=a +_.x=b +_.a=c +_.b=d +_.d=_.c=null +_.eg$=e +_.e8$=f +_.tN$=g +_.$ti=h}, +atr:function atr(){}, +ats:function ats(){}, +bEZ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){return new A.EY(k,a,i,m,a1,c,j,n,b,l,r,d,o,s,a0,p,g,e,f,h,q)}, +bF_(a2,a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1 +if(a2===a3)return a2 +s=A.Z(a2.a,a3.a,a4) +r=A.Z(a2.b,a3.b,a4) +q=A.Z(a2.c,a3.c,a4) +p=A.Z(a2.d,a3.d,a4) +o=A.Z(a2.e,a3.e,a4) +n=A.ap(a2.f,a3.f,a4) +m=A.ap(a2.r,a3.r,a4) +l=A.ap(a2.w,a3.w,a4) +k=A.ap(a2.x,a3.x,a4) +j=A.ap(a2.y,a3.y,a4) +i=A.fE(a2.z,a3.z,a4) +h=a4<0.5 +if(h)g=a2.Q +else g=a3.Q +f=A.ap(a2.as,a3.as,a4) +e=A.qN(a2.at,a3.at,a4) +d=A.qN(a2.ax,a3.ax,a4) +c=A.qN(a2.ay,a3.ay,a4) +b=A.qN(a2.ch,a3.ch,a4) +a=A.ap(a2.CW,a3.CW,a4) +a0=A.hP(a2.cx,a3.cx,a4) +a1=A.cl(a2.cy,a3.cy,a4) +if(h)h=a2.db +else h=a3.db +return A.bEZ(r,k,n,g,a,a0,b,a1,q,m,s,j,p,l,f,c,h,i,e,d,o)}, +EY:function EY(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1}, +aj3:function aj3(){}, +bn1(a,b,c,d,e,f,g,h,i,j,k){return new A.a53(f,h,j,e,d,a,i,c,g,k,b,null)}, +bfj(a,b,c,d,e,f,g,h,i,j,k,l,a0,a1){var s,r,q,p,o=null,n=g==null,m=n?o:new A.ajY(g,b) +if(n)if(i==null)n=h==null +else n=!1 +else n=!1 +s=n?o:new A.ak_(g,f,i,h) +n=a0==null?o:new A.d0(a0,t.mD) +r=l==null?o:new A.d0(l,t.W7) +q=k==null?o:new A.d0(k,t.W7) +p=j==null?o:new A.d0(j,t.XR) +return A.a09(a,o,o,o,o,d,o,o,m,o,p,q,r,new A.ajZ(e,c),s,n,o,o,o,o,o,o,o,a1)}, +b2G:function b2G(a,b){this.a=a +this.b=b}, +a53:function a53(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.c=a +_.e=b +_.r=c +_.w=d +_.y=e +_.z=f +_.Q=g +_.as=h +_.ax=i +_.cx=j +_.db=k +_.a=l}, +Xe:function Xe(a,b,c,d,e,f,g,h){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.a=h}, +apm:function apm(a){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null}, +ak1:function ak1(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.ay=a +_.ch=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.a=n}, +b2F:function b2F(a){this.a=a}, +ajY:function ajY(a,b){this.a=a +this.b=b}, +ak_:function ak_(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +ajZ:function ajZ(a,b){this.a=a +this.b=b}, +ak0:function ak0(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5){var _=this +_.fx=a +_.go=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3 +_.dy=a4 +_.fr=a5}, +b2C:function b2C(a){this.a=a}, +b2E:function b2E(a){this.a=a}, +b2D:function b2D(){}, +aiU:function aiU(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6){var _=this +_.fx=a +_.fy=b +_.go=$ +_.a=c +_.b=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=i +_.w=j +_.x=k +_.y=l +_.z=m +_.Q=n +_.as=o +_.at=p +_.ax=q +_.ay=r +_.ch=s +_.CW=a0 +_.cx=a1 +_.cy=a2 +_.db=a3 +_.dx=a4 +_.dy=a5 +_.fr=a6}, +b1G:function b1G(a){this.a=a}, +b1H:function b1H(a){this.a=a}, +b1J:function b1J(a){this.a=a}, +b1I:function b1I(){}, +aiV:function aiV(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6){var _=this +_.fx=a +_.fy=b +_.go=$ +_.a=c +_.b=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=i +_.w=j +_.x=k +_.y=l +_.z=m +_.Q=n +_.as=o +_.at=p +_.ax=q +_.ay=r +_.ch=s +_.CW=a0 +_.cx=a1 +_.cy=a2 +_.db=a3 +_.dx=a4 +_.dy=a5 +_.fr=a6}, +b1K:function b1K(a){this.a=a}, +b1L:function b1L(a){this.a=a}, +b1N:function b1N(a){this.a=a}, +b1M:function b1M(){}, +amp:function amp(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5){var _=this +_.fx=a +_.go=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3 +_.dy=a4 +_.fr=a5}, +b4i:function b4i(a){this.a=a}, +b4j:function b4j(a){this.a=a}, +b4l:function b4l(a){this.a=a}, +b4m:function b4m(a){this.a=a}, +b4k:function b4k(){}, +atx:function atx(){}, +bFP(a,b,c){if(a===b)return a +return new A.Fj(A.p6(a.a,b.a,c))}, +bn2(a,b){return new A.NO(b,a,null)}, +Fj:function Fj(a){this.a=a}, +NO:function NO(a,b,c){this.w=a +this.b=b +this.a=c}, +ak2:function ak2(){}, +NU:function NU(a,b,c){this.c=a +this.e=b +this.a=c}, +Vy:function Vy(a,b){var _=this +_.d=a +_.a=_.e=null +_.b=b +_.c=null}, +NV:function NV(a,b,c,d){var _=this +_.f=_.e=null +_.r=!0 +_.w=a +_.a=b +_.b=c +_.c=d +_.d=!1}, +vk:function vk(a,b,c,d,e,f,g,h,i,j){var _=this +_.z=a +_.Q=b +_.as=c +_.at=d +_.ax=e +_.ch=_.ay=$ +_.CW=!0 +_.e=f +_.f=g +_.a=h +_.b=i +_.c=j +_.d=!1}, +bPj(a,b,c){if(c!=null)return c +if(b)return new A.b95(a) +return null}, +b95:function b95(a){this.a=a}, +b2X:function b2X(){}, +NX:function NX(a,b,c,d,e,f,g,h,i,j){var _=this +_.z=a +_.Q=b +_.as=c +_.at=d +_.ax=e +_.db=_.cy=_.cx=_.CW=_.ch=_.ay=$ +_.e=f +_.f=g +_.a=h +_.b=i +_.c=j +_.d=!1}, +bPi(a,b,c){if(c!=null)return c +if(b)return new A.b94(a) +return null}, +bPn(a,b,c,d){var s,r,q,p,o,n,m +if(b){if(c!=null){s=c.$0() +r=J.bS(s) +q=new A.Q(r.gaH(s)-r.gae(s),r.gaQ(s)-r.gaj(s))}else q=a.gC(0) +p=d.Y(0,B.h).ge6() +o=d.Y(0,new A.i(0+q.a,0)).ge6() +n=d.Y(0,new A.i(0,0+q.b)).ge6() +m=d.Y(0,q.Js(0,B.h)).ge6() +return Math.ceil(Math.max(Math.max(p,o),Math.max(n,m)))}return 35}, +b94:function b94(a){this.a=a}, +b2Y:function b2Y(){}, +NY:function NY(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.z=a +_.Q=b +_.as=c +_.at=d +_.ax=e +_.ay=f +_.cx=_.CW=_.ch=$ +_.cy=null +_.e=g +_.f=h +_.a=i +_.b=j +_.c=k +_.d=!1}, +a5n(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,a0,a1){var s=null +return new A.a5m(d,p,s,s,s,s,o,s,s,s,s,m,n,k,!0,B.aV,s,b,e,g,j,i,q,r,a0,f!==!1,!1,l,a,h,c,a1,s,s)}, +vq:function vq(){}, +Fw:function Fw(){}, +Wc:function Wc(a,b,c){this.f=a +this.b=b +this.a=c}, +NW:function NW(){}, +Vx:function Vx(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.cy=r +_.db=s +_.dx=a0 +_.dy=a1 +_.fr=a2 +_.fx=a3 +_.fy=a4 +_.go=a5 +_.id=a6 +_.k1=a7 +_.k2=a8 +_.k3=a9 +_.k4=b0 +_.ok=b1 +_.p1=b2 +_.p2=b3 +_.p3=b4 +_.p4=b5 +_.R8=b6 +_.a=b7}, +x7:function x7(a,b){this.a=a +this.b=b}, +Vw:function Vw(a,b,c,d){var _=this +_.e=_.d=null +_.f=!1 +_.r=a +_.w=$ +_.x=null +_.y=b +_.z=null +_.Q=!1 +_.ku$=c +_.a=null +_.b=d +_.c=null}, +b2V:function b2V(){}, +b2R:function b2R(a){this.a=a}, +b2U:function b2U(){}, +b2W:function b2W(a,b){this.a=a +this.b=b}, +b2Q:function b2Q(a,b){this.a=a +this.b=b}, +b2T:function b2T(a){this.a=a}, +b2S:function b2S(a,b){this.a=a +this.b=b}, +a5m:function a5m(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.cy=r +_.db=s +_.dx=a0 +_.dy=a1 +_.fr=a2 +_.fx=a3 +_.fy=a4 +_.go=a5 +_.id=a6 +_.k1=a7 +_.k2=a8 +_.k3=a9 +_.k4=b0 +_.ok=b1 +_.p1=b2 +_.p2=b3 +_.a=b4}, +YN:function YN(){}, +oj:function oj(){}, +mI:function mI(a,b){this.b=a +this.a=b}, +bF0(a){if(a===-1)return"FloatingLabelAlignment.start" +if(a===0)return"FloatingLabelAlignment.center" +return"FloatingLabelAlignment(x: "+B.f.b8(a,1)+")"}, +bG0(a,b,c,d,e,f,g,h,i){return new A.zK(c,a,h,i,f,g,!1,e,b,null)}, +bnb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3){return new A.Fs(b4,b5,b8,c0,b9,a0,a4,a7,a6,a5,b1,b0,b2,a9,a8,k,o,n,m,s,r,b7,d,b6,c2,c4,c1,c6,c5,c3,c9,c8,d3,d2,d0,d1,g,e,f,q,p,a1,b3,l,a2,a3,h,j,b,i,c7,a,c)}, +bG_(a,b,c,d){return new A.Ft(d,b,c,a)}, +VA:function VA(a){var _=this +_.a=null +_.ac$=_.b=0 +_.ah$=a +_.b6$=_.b_$=0 +_.K$=!1}, +VB:function VB(a,b){this.a=a +this.b=b}, +akg:function akg(a,b,c,d,e,f,g,h,i){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.a=i}, +U0:function U0(a,b,c,d,e,f,g){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.a=g}, +afY:function afY(a,b,c){var _=this +_.x=_.w=_.r=_.f=_.e=_.d=$ +_.f2$=a +_.bV$=b +_.a=null +_.b=c +_.c=null}, +apy:function apy(a,b,c){this.e=a +this.c=b +this.a=c}, +Vo:function Vo(a,b,c,d,e,f,g,h,i,j){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.a=j}, +Vp:function Vp(a,b,c){var _=this +_.d=$ +_.f=_.e=null +_.jk$=a +_.dQ$=b +_.a=null +_.b=c +_.c=null}, +b2v:function b2v(){}, +N6:function N6(a,b){this.a=a +this.b=b}, +a3Q:function a3Q(){}, +iU:function iU(a,b){this.a=a +this.b=b}, +ahB:function ahB(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1}, +b5e:function b5e(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +Wz:function Wz(a,b,c,d,e,f,g,h,i,j){var _=this +_.K=a +_.a5=b +_.M=c +_.av=d +_.ao=e +_.aM=f +_.aS=g +_.b2=null +_.hz$=h +_.fx=i +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=j +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +b5i:function b5i(a){this.a=a}, +b5h:function b5h(a,b){this.a=a +this.b=b}, +b5g:function b5g(a,b){this.a=a +this.b=b}, +b5f:function b5f(a,b,c){this.a=a +this.b=b +this.c=c}, +ahE:function ahE(a,b,c,d,e,f,g){var _=this +_.d=a +_.e=b +_.f=c +_.r=d +_.w=e +_.x=f +_.a=g}, +zK:function zK(a,b,c,d,e,f,g,h,i,j){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.a=j}, +VC:function VC(a,b,c,d){var _=this +_.f=_.e=_.d=$ +_.r=a +_.w=null +_.f2$=b +_.bV$=c +_.a=null +_.b=d +_.c=null}, +b39:function b39(){}, +Fs:function Fs(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7 +_.id=a8 +_.k1=a9 +_.k2=b0 +_.k3=b1 +_.k4=b2 +_.ok=b3 +_.p1=b4 +_.p2=b5 +_.p3=b6 +_.p4=b7 +_.R8=b8 +_.RG=b9 +_.rx=c0 +_.ry=c1 +_.to=c2 +_.x1=c3 +_.x2=c4 +_.xr=c5 +_.y1=c6 +_.y2=c7 +_.bv=c8 +_.bn=c9 +_.ac=d0 +_.ah=d1 +_.b_=d2 +_.b6=d3}, +Ft:function Ft(a,b,c,d){var _=this +_.fx=a +_.fy=b +_.go=c +_.k3=d}, +b2Z:function b2Z(a,b,c,d,e){var _=this +_.p1=a +_.p3=_.p2=$ +_.fx=b +_.fy=c +_.go=d +_.k3=e}, +b34:function b34(a){this.a=a}, +b31:function b31(a){this.a=a}, +b3_:function b3_(a){this.a=a}, +b36:function b36(a){this.a=a}, +b37:function b37(a){this.a=a}, +b38:function b38(a){this.a=a}, +b35:function b35(a){this.a=a}, +b32:function b32(a){this.a=a}, +b33:function b33(a){this.a=a}, +b30:function b30(a){this.a=a}, +akh:function akh(){}, +Yx:function Yx(){}, +YM:function YM(){}, +YO:function YO(){}, +atP:function atP(){}, +bnN(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){return new A.a6i(h,r,p,s,!1,c,a0,o,m,b,e,k,j,!1,f,!1,q,n,d,i,null)}, +b5n(a,b){if(a==null)return B.x +a.dc(b,!0) +return a.gC(0)}, +Os:function Os(a,b){this.a=a +this.b=b}, +A7:function A7(a,b){this.a=a +this.b=b}, +a6i:function a6i(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.CW=j +_.cx=k +_.cy=l +_.dx=m +_.fr=n +_.id=o +_.k1=p +_.k2=q +_.k3=r +_.k4=s +_.p3=a0 +_.a=a1}, +aJy:function aJy(a){this.a=a}, +akd:function akd(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +oU:function oU(a,b){this.a=a +this.b=b}, +akY:function akY(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.d=a +_.e=b +_.f=c +_.r=d +_.w=e +_.x=f +_.y=g +_.z=h +_.Q=i +_.as=j +_.at=k +_.ax=l +_.ay=m +_.ch=n +_.CW=o +_.a=p}, +WI:function WI(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.K=a +_.a5=b +_.M=c +_.av=d +_.ao=e +_.aM=f +_.aS=g +_.b2=h +_.bB=i +_.ct=j +_.bD=k +_.hz$=l +_.fx=m +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=n +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +b5p:function b5p(a,b){this.a=a +this.b=b}, +b5o:function b5o(a,b,c){this.a=a +this.b=b +this.c=c}, +b3A:function b3A(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.db=a +_.fr=_.dy=_.dx=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1}, +atU:function atU(){}, +bfC(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){return new A.FW(b,m,n,k,e,p,s,o,f,a,q,l,d,i,g,h,c,j,a0,r)}, +bGI(a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0 +if(a1===a2)return a1 +s=a3<0.5 +if(s)r=a1.a +else r=a2.a +q=A.fE(a1.b,a2.b,a3) +if(s)p=a1.c +else p=a2.c +o=A.Z(a1.d,a2.d,a3) +n=A.Z(a1.e,a2.e,a3) +m=A.Z(a1.f,a2.f,a3) +l=A.cl(a1.r,a2.r,a3) +k=A.cl(a1.w,a2.w,a3) +j=A.cl(a1.x,a2.x,a3) +i=A.hP(a1.y,a2.y,a3) +h=A.Z(a1.z,a2.z,a3) +g=A.Z(a1.Q,a2.Q,a3) +f=A.ap(a1.as,a2.as,a3) +e=A.ap(a1.at,a2.at,a3) +d=A.ap(a1.ax,a2.ax,a3) +c=A.ap(a1.ay,a2.ay,a3) +if(s)b=a1.ch +else b=a2.ch +if(s)a=a1.CW +else a=a2.CW +if(s)a0=a1.cx +else a0=a2.cx +if(s)s=a1.cy +else s=a2.cy +return A.bfC(i,r,b,f,n,j,d,c,e,a,o,g,q,p,k,m,h,s,l,a0)}, +bnO(a,b,c){return new A.A6(b,a,c)}, +bnP(a){var s=a.bh(t.NJ),r=s==null?null:s.gpv(0) +return r==null?A.am(a).aS:r}, +bGJ(a,b,c,d){var s=null +return new A.j1(new A.aJx(s,s,s,c,s,b,d,s,s,s,s,s,s,s,s,s,s,s,s,s,s,a),s)}, +FW:function FW(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){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 +_.CW=r +_.cx=s +_.cy=a0}, +A6:function A6(a,b,c){this.w=a +this.b=b +this.a=c}, +aJx:function aJx(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2}, +akZ:function akZ(){}, +SQ:function SQ(a,b){this.c=a +this.a=b}, +aVM:function aVM(){}, +XO:function XO(a,b){var _=this +_.e=_.d=null +_.f=a +_.a=null +_.b=b +_.c=null}, +b7I:function b7I(a){this.a=a}, +b7H:function b7H(a){this.a=a}, +b7J:function b7J(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a6u:function a6u(a,b){this.c=a +this.a=b}, +me(a,b,c,d,e,f,g,h,i,j,k,l,m){return new A.OK(d,m,g,f,i,k,l,j,!0,e,a,c,h)}, +bFY(a,b){var s,r,q,p,o,n,m,l,k,j,i=t.TT,h=A.b([a],i),g=A.b([b],i) +for(s=b,r=a;r!==s;){q=r.c +p=s.c +if(q>=p){o=r.gbs(r) +if(!(o instanceof A.L)||!o.u6(r))return null +h.push(o) +r=o}if(q<=p){n=s.gbs(s) +if(!(n instanceof A.L)||!n.u6(s))return null +g.push(n) +s=n}}m=new A.by(new Float64Array(16)) +m.ci() +l=new A.by(new Float64Array(16)) +l.ci() +for(k=g.length-1;k>0;k=j){j=k-1 +g[k].eK(g[j],m)}for(k=h.length-1;k>0;k=j){j=k-1 +h[k].eK(h[j],l)}if(l.jR(l)!==0){l.bL(0,m) +i=l}else i=null +return i}, +vG:function vG(a,b){this.a=a +this.b=b}, +OK:function OK(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.a=m}, +alg:function alg(a,b,c,d){var _=this +_.d=a +_.f2$=b +_.bV$=c +_.a=null +_.b=d +_.c=null}, +b40:function b40(a){this.a=a}, +WD:function WD(a,b,c,d,e){var _=this +_.V=a +_.bj=b +_.ce=null +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +akf:function akf(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +pu:function pu(){}, +ws:function ws(a,b){this.a=a +this.b=b}, +VN:function VN(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.r=a +_.w=b +_.x=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.at=h +_.c=i +_.d=j +_.e=k +_.a=l}, +ald:function ald(a,b,c){var _=this +_.db=_.cy=_.cx=_.CW=null +_.e=_.d=$ +_.jk$=a +_.dQ$=b +_.a=null +_.b=c +_.c=null}, +b3M:function b3M(){}, +b3N:function b3N(){}, +b3O:function b3O(){}, +b3P:function b3P(){}, +Xl:function Xl(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +apz:function apz(a,b,c){this.b=a +this.c=b +this.a=c}, +atB:function atB(){}, +ale:function ale(){}, +a22:function a22(){}, +a6H:function a6H(){}, +aKl:function aKl(a,b,c){this.a=a +this.b=b +this.c=c}, +aKj:function aKj(){}, +aKk:function aKk(){}, +bHa(a,b,c){if(a===b)return a +return new A.a6P(A.bfQ(a.a,b.a,c))}, +a6P:function a6P(a){this.a=a}, +bHb(a,b,c){if(a===b)return a +return new A.OS(A.p6(a.a,b.a,c))}, +OS:function OS(a){this.a=a}, +alj:function alj(){}, +bfQ(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=null +if(a==b)return a +s=a==null +r=s?d:a.a +q=b==null +p=q?d:b.a +o=t.MH +p=A.bY(r,p,c,A.dq(),o) +r=s?d:a.b +r=A.bY(r,q?d:b.b,c,A.dq(),o) +n=s?d:a.c +o=A.bY(n,q?d:b.c,c,A.dq(),o) +n=s?d:a.d +m=q?d:b.d +m=A.bY(n,m,c,A.Zr(),t.PM) +n=s?d:a.e +l=q?d:b.e +l=A.bY(n,l,c,A.bin(),t.pc) +n=s?d:a.f +k=q?d:b.f +j=t.tW +k=A.bY(n,k,c,A.Zq(),j) +n=s?d:a.r +n=A.bY(n,q?d:b.r,c,A.Zq(),j) +i=s?d:a.w +j=A.bY(i,q?d:b.w,c,A.Zq(),j) +i=s?d:a.x +h=q?d:b.x +g=s?d:a.y +f=q?d:b.y +f=A.bY(g,f,c,A.bbP(),t.KX) +g=c<0.5 +if(g)e=s?d:a.z +else e=q?d:b.z +if(g)g=s?d:a.Q +else g=q?d:b.Q +s=s?d:a.as +return new A.a6R(p,r,o,m,l,k,n,j,new A.akT(i,h,c),f,e,g,A.ZN(s,q?d:b.as,c))}, +a6R:function a6R(a,b,c,d,e,f,g,h,i,j,k,l,m){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}, +akT:function akT(a,b,c){this.a=a +this.b=b +this.c=c}, +alk:function alk(){}, +bHc(a,b,c){if(a===b)return a +return new A.Ga(A.bfQ(a.a,b.a,c))}, +Ga:function Ga(a){this.a=a}, +all:function all(){}, +bHG(a,b,c){var s,r,q,p,o,n,m,l,k,j +if(a===b)return a +s=A.ap(a.a,b.a,c) +r=A.Z(a.b,b.b,c) +q=A.ap(a.c,b.c,c) +p=A.Z(a.d,b.d,c) +o=A.Z(a.e,b.e,c) +n=A.Z(a.f,b.f,c) +m=A.fE(a.r,b.r,c) +l=A.bY(a.w,b.w,c,A.Ko(),t.p8) +k=A.bY(a.x,b.x,c,A.btV(),t.lF) +if(c<0.5)j=a.y +else j=b.y +return new A.Pg(s,r,q,p,o,n,m,l,k,j,A.bY(a.z,b.z,c,A.dq(),t.MH))}, +Pg:function Pg(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k}, +alW:function alW(){}, +bHH(a,b,c){var s,r,q,p,o,n,m,l,k +if(a===b)return a +s=A.ap(a.a,b.a,c) +r=A.Z(a.b,b.b,c) +q=A.ap(a.c,b.c,c) +p=A.Z(a.d,b.d,c) +o=A.Z(a.e,b.e,c) +n=A.Z(a.f,b.f,c) +m=A.fE(a.r,b.r,c) +l=a.w +l=A.aSV(l,l,c) +k=A.bY(a.x,b.x,c,A.Ko(),t.p8) +return new A.Ph(s,r,q,p,o,n,m,l,k,A.bY(a.y,b.y,c,A.btV(),t.lF))}, +Ph:function Ph(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}, +alX:function alX(){}, +bHI(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.ap(a.b,b.b,c) +q=A.cl(a.c,b.c,c) +p=A.cl(a.d,b.d,c) +o=a.e +if(o==null)n=b.e==null +else n=!1 +if(n)o=null +else o=A.ru(o,b.e,c) +n=a.f +if(n==null)m=b.f==null +else m=!1 +if(m)n=null +else n=A.ru(n,b.f,c) +m=A.ap(a.r,b.r,c) +l=c<0.5 +if(l)k=a.w +else k=b.w +if(l)l=a.x +else l=b.x +j=A.Z(a.y,b.y,c) +i=A.fE(a.z,b.z,c) +h=A.ap(a.Q,b.Q,c) +return new A.Pi(s,r,q,p,o,n,m,k,l,j,i,h,A.ap(a.as,b.as,c))}, +Pi:function Pi(a,b,c,d,e,f,g,h,i,j,k,l,m){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}, +alY:function alY(){}, +bHV(a,b,c){if(a===b)return a +return new A.Py(A.p6(a.a,b.a,c))}, +Py:function Py(a){this.a=a}, +amo:function amo(){}, +bnZ(a,b,c){var s=null,r=A.b([],t.Zt),q=$.aK,p=A.GQ(B.eh),o=A.b([],t.wi),n=$.aa(),m=$.aK,l=c.h("aM<0?>"),k=c.h("bH<0?>"),j=b==null?B.re:b +return new A.ku(a,!1,!0,!1,s,s,r,A.C(t.kj),new A.cK(s,c.h("cK>")),new A.cK(s,t.re),new A.PD(),s,0,new A.bH(new A.aM(q,c.h("aM<0?>")),c.h("bH<0?>")),p,o,j,new A.cD(s,n,t.Ll),new A.bH(new A.aM(m,l),k),new A.bH(new A.aM(m,l),k),c.h("ku<0>"))}, +ku:function ku(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.eB=a +_.av=b +_.ao=c +_.aM=d +_.go=e +_.id=f +_.k1=!1 +_.k3=_.k2=null +_.k4=g +_.ok=h +_.p1=i +_.p2=j +_.p3=k +_.p4=$ +_.R8=null +_.RG=$ +_.pF$=l +_.KM$=m +_.Q=n +_.as=null +_.at=!1 +_.ay=_.ax=null +_.ch=o +_.cy=_.cx=null +_.f=p +_.a=null +_.b=q +_.c=r +_.d=s +_.e=a0 +_.$ti=a1}, +a6G:function a6G(){}, +VO:function VO(){}, +btc(a,b,c){var s,r +a.ci() +if(b===1)return +a.ff(0,b,b) +s=c.a +r=c.b +a.aJ(0,-((s*b-s)/2),-((r*b-r)/2))}, +bs5(a,b,c,d){var s=new A.Yu(c,a,d,b,new A.by(new Float64Array(16)),A.aX(t.o0),A.aX(t.bq),$.aa()),r=s.gfa() +a.an(0,r) +a.kK(s.gBN()) +d.a.an(0,r) +b.an(0,r) +return s}, +bs6(a,b,c,d){var s=new A.Yv(c,d,b,a,new A.by(new Float64Array(16)),A.aX(t.o0),A.aX(t.bq),$.aa()),r=s.gfa() +d.a.an(0,r) +b.an(0,r) +a.kK(s.gBN()) +return s}, +atb:function atb(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f}, +b8t:function b8t(a){this.a=a}, +b8u:function b8u(a){this.a=a}, +b8v:function b8v(a){this.a=a}, +b8w:function b8w(a){this.a=a}, +xt:function xt(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +at7:function at7(a,b,c,d){var _=this +_.d=$ +_.vV$=a +_.r8$=b +_.tO$=c +_.a=null +_.b=d +_.c=null}, +xu:function xu(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +ata:function ata(a,b,c,d){var _=this +_.d=$ +_.vV$=a +_.r8$=b +_.tO$=c +_.a=null +_.b=d +_.c=null}, +rV:function rV(){}, +af2:function af2(){}, +a1J:function a1J(){}, +a8_:function a8_(){}, +aMz:function aMz(a){this.a=a}, +JD:function JD(a,b,c,d,e,f,g){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f +_.$ti=g}, +Wa:function Wa(a,b){var _=this +_.a=_.d=null +_.b=a +_.c=null +_.$ti=b}, +Ka:function Ka(){}, +Yu:function Yu(a,b,c,d,e,f,g,h){var _=this +_.r=a +_.w=b +_.x=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.ac$=0 +_.ah$=h +_.b6$=_.b_$=0 +_.K$=!1}, +b8r:function b8r(a,b){this.a=a +this.b=b}, +Yv:function Yv(a,b,c,d,e,f,g,h){var _=this +_.r=a +_.w=b +_.x=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.ac$=0 +_.ah$=h +_.b6$=_.b_$=0 +_.K$=!1}, +b8s:function b8s(a,b){this.a=a +this.b=b}, +amv:function amv(){}, +Z5:function Z5(){}, +Z6:function Z6(){}, +bIt(a,b,c){var s,r,q,p,o,n,m,l,k,j,i +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.fE(a.b,b.b,c) +q=A.ap(a.c,b.c,c) +p=A.Z(a.d,b.d,c) +o=A.Z(a.e,b.e,c) +n=A.cl(a.f,b.f,c) +m=A.bY(a.r,b.r,c,A.Ko(),t.p8) +l=c<0.5 +if(l)k=a.w +else k=b.w +if(l)j=a.x +else j=b.x +if(l)l=a.y +else l=b.y +i=A.Z(a.z,b.z,c) +return new A.Q4(s,r,q,p,o,n,m,k,j,l,i,A.ap(a.Q,b.Q,c))}, +Q4:function Q4(a,b,c,d,e,f,g,h,i,j,k,l){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}, +ant:function ant(){}, +bIM(a,b,c){var s,r,q,p +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.Z(a.b,b.b,c) +q=A.ap(a.c,b.c,c) +p=A.Z(a.d,b.d,c) +return new A.Q9(s,r,q,p,A.Z(a.e,b.e,c))}, +Q9:function Q9(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +anu:function anu(){}, +bIT(a,b,c){var s,r,q,p,o,n +if(a===b)return a +s=c<0.5 +if(s)r=a.a +else r=b.a +q=t.MH +p=A.bY(a.b,b.b,c,A.dq(),q) +if(s)o=a.e +else o=b.e +q=A.bY(a.c,b.c,c,A.dq(),q) +n=A.ap(a.d,b.d,c) +if(s)s=a.f +else s=b.f +return new A.Qg(r,p,q,n,o,s)}, +Qg:function Qg(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +anD:function anD(){}, +bgx(a){return new A.Bs(a,null)}, +aR7(a){var s=a.tP(t.Np) +if(s!=null)return s +throw A.d(A.ze(A.b([A.ra("Scaffold.of() called with a context that does not contain a Scaffold."),A.cn("No Scaffold ancestor could be found starting from the context that was passed to Scaffold.of(). This usually happens when the context provided is from the same StatefulWidget as that whose build function actually creates the Scaffold widget being sought."),A.MS('There are several ways to avoid this problem. The simplest is to use a Builder to get a context that is "under" the Scaffold. For an example of this, please see the documentation for Scaffold.of():\n https://api.flutter.dev/flutter/material/Scaffold/of.html'),A.MS("A more efficient solution is to split your build function into several widgets. This introduces a new context from which you can obtain the Scaffold. In this solution, you would have an outer widget that creates the Scaffold populated by instances of your new inner widgets, and then in these inner widgets you would use Scaffold.of().\nA less elegant but more expedient solution is assign a GlobalKey to the Scaffold, then use the key.currentState property to obtain the ScaffoldState rather than using the Scaffold.of() function."),a.aPM("The context used was")],t._)))}, +lK:function lK(a,b){this.a=a +this.b=b}, +Re:function Re(a,b){this.c=a +this.a=b}, +Rf:function Rf(a,b,c,d,e,f){var _=this +_.d=a +_.e=b +_.r=c +_.y=_.x=_.w=null +_.f2$=d +_.bV$=e +_.a=null +_.b=f +_.c=null}, +aR1:function aR1(a,b){this.a=a +this.b=b}, +aR2:function aR2(a,b){this.a=a +this.b=b}, +aQY:function aQY(a){this.a=a}, +aQZ:function aQZ(a){this.a=a}, +aR0:function aR0(a,b,c){this.a=a +this.b=b +this.c=c}, +aR_:function aR_(a,b,c){this.a=a +this.b=b +this.c=c}, +X_:function X_(a,b,c){this.f=a +this.b=b +this.a=c}, +aR3:function aR3(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 +_.y=i}, +aaX:function aaX(a,b){this.a=a +this.b=b}, +ap3:function ap3(a,b,c){var _=this +_.a=a +_.b=null +_.c=b +_.ac$=0 +_.ah$=c +_.b6$=_.b_$=0 +_.K$=!1}, +TY:function TY(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.a=d +_.b=e +_.c=f +_.d=g}, +afU:function afU(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +b6c:function b6c(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.d=a +_.e=b +_.f=c +_.r=d +_.w=e +_.x=f +_.y=g +_.z=h +_.Q=i +_.as=j +_.at=k +_.ax=l +_.ay=m +_.c=_.b=null}, +Vc:function Vc(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f}, +Vd:function Vd(a,b,c){var _=this +_.x=_.w=_.r=_.f=_.e=_.d=$ +_.y=null +_.f2$=a +_.bV$=b +_.a=null +_.b=c +_.c=null}, +b1O:function b1O(a,b){this.a=a +this.b=b}, +Bs:function Bs(a,b){this.f=a +this.a=b}, +Hm:function Hm(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.d=a +_.e=b +_.f=c +_.r=null +_.w=d +_.x=e +_.Q=_.z=_.y=null +_.as=f +_.at=null +_.ax=g +_.ay=null +_.CW=_.ch=$ +_.cy=_.cx=null +_.dx=_.db=$ +_.dy=!1 +_.fr=h +_.cS$=i +_.jU$=j +_.vU$=k +_.hM$=l +_.jV$=m +_.f2$=n +_.bV$=o +_.a=null +_.b=p +_.c=null}, +aR5:function aR5(a,b){this.a=a +this.b=b}, +aR4:function aR4(a,b){this.a=a +this.b=b}, +aR6:function aR6(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +ahW:function ahW(a,b){this.e=a +this.a=b +this.b=null}, +Rd:function Rd(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +ap4:function ap4(a,b,c){this.f=a +this.b=b +this.a=c}, +b6d:function b6d(){}, +X0:function X0(){}, +X1:function X1(){}, +X2:function X2(){}, +YK:function YK(){}, +bgA(a,b,c){return new A.ab6(a,b,c,null)}, +ab6:function ab6(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +Ju:function Ju(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.c=a +_.d=b +_.e=c +_.r=d +_.w=e +_.Q=f +_.ay=g +_.ch=h +_.CW=i +_.cx=j +_.cy=k +_.db=l +_.a=m}, +alf:function alf(a,b,c,d){var _=this +_.cy=$ +_.dx=_.db=!1 +_.fx=_.fr=_.dy=$ +_.w=_.r=_.f=_.e=_.d=null +_.y=_.x=$ +_.z=a +_.as=_.Q=!1 +_.at=$ +_.f2$=b +_.bV$=c +_.a=null +_.b=d +_.c=null}, +b3U:function b3U(a){this.a=a}, +b3R:function b3R(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +b3T:function b3T(a,b,c){this.a=a +this.b=b +this.c=c}, +b3S:function b3S(a,b,c){this.a=a +this.b=b +this.c=c}, +b3Q:function b3Q(a){this.a=a}, +b4_:function b4_(a){this.a=a}, +b3Z:function b3Z(a){this.a=a}, +b3Y:function b3Y(a){this.a=a}, +b3W:function b3W(a){this.a=a}, +b3X:function b3X(a){this.a=a}, +b3V:function b3V(a){this.a=a}, +bJB(a,b,c){var s,r,q,p,o,n,m,l,k,j +if(a===b)return a +s=t.X7 +r=A.bY(a.a,b.a,c,A.buD(),s) +q=A.bY(a.b,b.b,c,A.Zr(),t.PM) +s=A.bY(a.c,b.c,c,A.buD(),s) +p=a.d +o=b.d +p=c<0.5?p:o +o=A.Qh(a.e,b.e,c) +n=t.MH +m=A.bY(a.f,b.f,c,A.dq(),n) +l=A.bY(a.r,b.r,c,A.dq(),n) +n=A.bY(a.w,b.w,c,A.dq(),n) +k=A.ap(a.x,b.x,c) +j=A.ap(a.y,b.y,c) +return new A.Rw(r,q,s,p,o,m,l,n,k,j,A.ap(a.z,b.z,c))}, +bPP(a,b,c){return c<0.5?a:b}, +Rw:function Rw(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k}, +aph:function aph(){}, +bJD(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h +if(a===b)return a +s=A.bY(a.a,b.a,c,A.Zr(),t.PM) +r=t.MH +q=A.bY(a.b,b.b,c,A.dq(),r) +p=A.bY(a.c,b.c,c,A.dq(),r) +o=A.bY(a.d,b.d,c,A.dq(),r) +r=A.bY(a.e,b.e,c,A.dq(),r) +n=A.bJC(a.f,b.f,c) +m=A.bY(a.r,b.r,c,A.bbP(),t.KX) +l=A.bY(a.w,b.w,c,A.bin(),t.pc) +k=t.p8 +j=A.bY(a.x,b.x,c,A.Ko(),k) +k=A.bY(a.y,b.y,c,A.Ko(),k) +i=A.qN(a.z,b.z,c) +if(c<0.5)h=a.Q +else h=b.Q +return new A.Rx(s,q,p,o,r,n,m,l,j,k,i,h)}, +bJC(a,b,c){if(a==b)return a +return new A.akS(a,b,c)}, +Rx:function Rx(a,b,c,d,e,f,g,h,i,j,k,l){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}, +akS:function akS(a,b,c){this.a=a +this.b=b +this.c=c}, +api:function api(){}, +bJF(a,b,c){var s,r,q,p,o,n,m,l,k +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.ap(a.b,b.b,c) +q=A.Z(a.c,b.c,c) +p=A.bJE(a.d,b.d,c) +o=A.boo(a.e,b.e,c) +n=A.ap(a.f,b.f,c) +m=a.r +l=b.r +k=A.cl(m,l,c) +m=A.cl(m,l,c) +l=A.qN(a.x,b.x,c) +return new A.Ry(s,r,q,p,o,n,k,m,l,A.Z(a.y,b.y,c))}, +bJE(a,b,c){if(a==null||b==null)return null +if(a===b)return a +return A.bJ(a,b,c)}, +Ry:function Ry(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}, +apj:function apj(){}, +bJH(a,b,c){var s,r +if(a===b)return a +s=A.p6(a.a,b.a,c) +if(c<0.5)r=a.b +else r=b.b +return new A.Rz(s,r)}, +Rz:function Rz(a,b){this.a=a +this.b=b}, +apk:function apk(){}, +brK(a){var s=a.FB(!1) +return new A.arm(a,new A.eN(s,B.lo,B.c9),$.aa())}, +bps(a,b,c,d,e,f){return new A.wn(a,e,f,d,c,b)}, +bJI(a,b){return A.bdU(b)}, +arm:function arm(a,b,c){var _=this +_.ax=a +_.a=b +_.ac$=0 +_.ah$=c +_.b6$=_.b_$=0 +_.K$=!1}, +apn:function apn(a,b){var _=this +_.x=a +_.z=_.y=0 +_.a=b +_.b=!0 +_.c=!1 +_.e=_.d=0 +_.r=_.f=null +_.w=!1}, +wn:function wn(a,b,c,d,e,f){var _=this +_.d=a +_.w=b +_.z=c +_.fy=d +_.k3=e +_.a=f}, +Xf:function Xf(a,b){var _=this +_.d=$ +_.e=null +_.f=!1 +_.w=_.r=$ +_.x=a +_.a=null +_.b=b +_.c=null}, +b6n:function b6n(a,b){this.a=a +this.b=b}, +b6m:function b6m(a,b){this.a=a +this.b=b}, +b6o:function b6o(a){this.a=a}, +bNx(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,a0){var s=null,r=new A.JO(o,A.qd(s,s,s,s,s,B.aA,s,s,B.aq,B.aM),a0,l,j,m,b,f,n,q,k,i,h,g,p,d,e,a,!1,new A.bs(),A.aX(t.v)) +r.by() +r.at5(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,a0) +return r}, +b6R:function b6R(a,b){this.a=a +this.b=b}, +abN:function abN(a,b){this.a=a +this.b=b}, +S3:function S3(a,b,c,d,e,f,g){var _=this +_.c=a +_.e=b +_.w=c +_.x=d +_.y=e +_.z=f +_.a=g}, +Xo:function Xo(a,b,c,d,e){var _=this +_.r=_.f=_.e=_.d=$ +_.w=null +_.x=a +_.y=$ +_.z=null +_.Q=!1 +_.at=_.as=null +_.ay=_.ax=!1 +_.ch=b +_.CW=null +_.f2$=c +_.bV$=d +_.a=null +_.b=e +_.c=null}, +b6O:function b6O(a,b){this.a=a +this.b=b}, +b6P:function b6P(a,b){this.a=a +this.b=b}, +b6M:function b6M(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +b6N:function b6N(a){this.a=a}, +b6L:function b6L(a){this.a=a}, +b6Q:function b6Q(a){this.a=a}, +apT:function apT(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.d=a +_.e=b +_.f=c +_.r=d +_.w=e +_.x=f +_.y=g +_.z=h +_.Q=i +_.as=j +_.at=k +_.ax=l +_.ay=m +_.ch=n +_.CW=o +_.a=p}, +JO:function JO(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.K=a +_.av=_.M=_.a5=$ +_.ao=b +_.aS=_.aM=$ +_.b2=!1 +_.bB=0 +_.ct=null +_.bD=c +_.dg=d +_.R=e +_.S=f +_.aa=g +_.bp=h +_.aN=i +_.cZ=j +_.cL=k +_.d4=l +_.f3=m +_.dh=n +_.c9=o +_.eh=p +_.f4=q +_.eH=!1 +_.e9=r +_.z8$=s +_.fx=a0 +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=a1 +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +b5y:function b5y(a){this.a=a}, +b5w:function b5w(){}, +b5v:function b5v(){}, +b5x:function b5x(a){this.a=a}, +b5z:function b5z(a,b){this.a=a +this.b=b}, +oR:function oR(a){this.a=a}, +JU:function JU(a,b){this.a=a +this.b=b}, +ask:function ask(a,b){this.d=a +this.a=b}, +aou:function aou(a,b,c,d){var _=this +_.K=$ +_.a5=a +_.z8$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +b6I:function b6I(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3){var _=this +_.ok=a +_.p1=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3 +_.dy=a4 +_.fr=a5 +_.fx=a6 +_.fy=a7 +_.go=a8 +_.id=a9 +_.k1=b0 +_.k2=b1 +_.k3=b2 +_.k4=b3}, +b6J:function b6J(a){this.a=a}, +YV:function YV(){}, +YX:function YX(){}, +Z0:function Z0(){}, +bpO(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2){return new A.HL(a7,b,k,a1,e,h,g,a,j,d,f,a3,n,i,o,a9,b1,p,a6,a5,a8,b0,r,q,s,a0,a2,b2,l,a4,m,c)}, +bKc(b3,b4,b5){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 +if(b3===b4)return b3 +s=A.ap(b3.a,b4.a,b5) +r=A.Z(b3.b,b4.b,b5) +q=A.Z(b3.c,b4.c,b5) +p=A.Z(b3.d,b4.d,b5) +o=A.Z(b3.e,b4.e,b5) +n=A.Z(b3.r,b4.r,b5) +m=A.Z(b3.f,b4.f,b5) +l=A.Z(b3.w,b4.w,b5) +k=A.Z(b3.x,b4.x,b5) +j=A.Z(b3.y,b4.y,b5) +i=A.Z(b3.z,b4.z,b5) +h=A.Z(b3.Q,b4.Q,b5) +g=A.Z(b3.as,b4.as,b5) +f=A.Z(b3.at,b4.at,b5) +e=A.Z(b3.ax,b4.ax,b5) +d=A.Z(b3.ay,b4.ay,b5) +c=A.Z(b3.ch,b4.ch,b5) +b=b5<0.5 +a=b?b3.CW:b4.CW +a0=b?b3.cx:b4.cx +a1=b?b3.cy:b4.cy +a2=b?b3.db:b4.db +a3=b?b3.dx:b4.dx +a4=b?b3.dy:b4.dy +a5=b?b3.fr:b4.fr +a6=b?b3.fx:b4.fx +a7=b?b3.fy:b4.fy +a8=b?b3.go:b4.go +a9=A.cl(b3.id,b4.id,b5) +b0=A.ap(b3.k1,b4.k1,b5) +b1=b?b3.k2:b4.k2 +b2=b?b3.k3:b4.k3 +return A.bpO(l,r,b?b3.k4:b4.k4,j,o,i,n,m,f,k,q,b0,b2,g,e,a,a5,a4,a6,a7,p,a8,h,b1,a1,a0,s,a2,d,a3,c,a9)}, +aSJ:function aSJ(a,b){this.a=a +this.b=b}, +HL:function HL(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7 +_.id=a8 +_.k1=a9 +_.k2=b0 +_.k3=b1 +_.k4=b2}, +aT3:function aT3(){}, +aT4:function aT4(){}, +aT5:function aT5(){}, +ax8:function ax8(){}, +aQJ:function aQJ(){}, +aQI:function aQI(){}, +aQH:function aQH(){}, +aQG:function aQG(){}, +aPe:function aPe(){}, +aCf:function aCf(){}, +b12:function b12(){}, +aoZ:function aoZ(){}, +apU:function apU(){}, +q4:function q4(a,b){this.a=a +this.b=b}, +BQ:function BQ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.cy=r +_.a=s}, +Xq:function Xq(a){var _=this +_.d=!1 +_.a=null +_.b=a +_.c=null}, +b6T:function b6T(a){this.a=a}, +b6S:function b6S(a){this.a=a}, +b6U:function b6U(a){this.a=a}, +b6V:function b6V(a){this.a=a}, +b6W:function b6W(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.ay=a +_.CW=_.ch=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o}, +b6X:function b6X(a){this.a=a}, +bKe(a,b,c,d,e,f,g,h,i,j,k,l,m,n){return new A.HP(d,c,i,g,k,m,e,n,l,f,b,a,h,j)}, +bKf(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.Z(a.b,b.b,c) +q=A.Z(a.c,b.c,c) +p=A.cl(a.d,b.d,c) +o=A.ap(a.e,b.e,c) +n=A.fE(a.f,b.f,c) +m=c<0.5 +if(m)l=a.r +else l=b.r +k=A.ap(a.w,b.w,c) +j=A.a35(a.x,b.x,c) +i=A.Z(a.z,b.z,c) +h=A.ap(a.Q,b.Q,c) +g=A.Z(a.as,b.as,c) +f=A.Z(a.at,b.at,c) +if(m)m=a.ax +else m=b.ax +return A.bKe(g,h,r,s,l,i,p,f,q,m,o,j,n,k)}, +abT:function abT(a,b){this.a=a +this.b=b}, +HP:function HP(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.z=j +_.Q=k +_.as=l +_.at=m +_.ax=n}, +aq_:function aq_(){}, +bKL(a,b,c){var s,r,q,p,o,n,m,l,k +if(a===b)return a +s=t.MH +r=A.bY(a.a,b.a,c,A.dq(),s) +q=A.bY(a.b,b.b,c,A.dq(),s) +p=A.bY(a.c,b.c,c,A.dq(),s) +o=A.bY(a.d,b.d,c,A.Zr(),t.PM) +n=c<0.5 +if(n)m=a.e +else m=b.e +if(n)l=a.f +else l=b.f +s=A.bY(a.r,b.r,c,A.dq(),s) +k=A.ap(a.w,b.w,c) +if(n)n=a.x +else n=b.x +return new A.St(r,q,p,o,m,l,s,k,n)}, +St:function St(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}, +aqI:function aqI(){}, +bKP(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a===b)return a +s=A.aAE(a.a,b.a,c) +r=A.Z(a.b,b.b,c) +q=c<0.5 +p=q?a.c:b.c +o=A.Z(a.d,b.d,c) +n=q?a.e:b.e +m=A.Z(a.f,b.f,c) +l=A.hP(a.r,b.r,c) +k=A.cl(a.w,b.w,c) +j=A.Z(a.x,b.x,c) +i=A.cl(a.y,b.y,c) +h=A.bY(a.z,b.z,c,A.dq(),t.MH) +g=q?a.Q:b.Q +f=q?a.as:b.as +return new A.Sv(s,r,p,o,n,m,l,k,j,i,h,g,f,q?a.at:b.at)}, +Sv:function Sv(a,b,c,d,e,f,g,h,i,j,k,l,m,n){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}, +aqO:function aqO(){}, +ada(a,b,c){var s=null +return new A.C3(b,s,s,s,c,s,s,!1,s,!0,a,s)}, +bq8(a,b,c,d,e,f,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2){var s,r,q,p,o,n,m,l,k,j,i,h,g=null +$label0$0:{s=new A.XL(a3,e) +break $label0$0}$label1$1:{r=c==null +if(r){q=d==null +p=q}else{q=g +p=!1}if(p){p=g +break $label1$1}if(r?q:d==null){p=new A.d0(c,t.rc) +break $label1$1}p=new A.XL(c,d) +break $label1$1}$label2$2:{break $label2$2}$label3$3:{o=new A.ar5(a3) +break $label3$3}n=b1==null?g:new A.d0(b1,t.uE) +m=a7==null?g:new A.d0(a7,t.De) +l=a0==null?g:new A.d0(a0,t.XR) +k=new A.d0(a6,t.mD) +j=a5==null?g:new A.d0(a5,t.W7) +i=a4==null?g:new A.d0(a4,t.W7) +h=a8==null?g:new A.d0(a8,t.dy) +return A.a09(a,b,g,p,l,a1,g,g,s,g,g,i,j,new A.ar4(a2,f),o,k,m,h,g,a9,g,b0,n,b2)}, +bQi(a){var s=A.am(a).p2.as,r=s==null?null:s.r +if(r==null)r=14 +s=A.e8(a,B.d6) +s=s==null?null:s.geS() +if(s==null)s=B.aq +return A.bkW(B.w5,B.UO,B.wb,r*s.a/14)}, +C3:function C3(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.a=l}, +XL:function XL(a,b){this.a=a +this.b=b}, +ar5:function ar5(a){this.a=a}, +ar4:function ar4(a,b){this.a=a +this.b=b}, +ar6:function ar6(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5){var _=this +_.fx=a +_.fy=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3 +_.dy=a4 +_.fr=a5}, +b7m:function b7m(a){this.a=a}, +b7o:function b7o(a){this.a=a}, +b7n:function b7n(){}, +aui:function aui(){}, +bKZ(a,b,c){if(a===b)return a +return new A.SI(A.p6(a.a,b.a,c))}, +SI:function SI(a){this.a=a}, +ar7:function ar7(){}, +bgW(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0){var s,r,q,p +if(d8==null)s=B.rH +else s=d8 +if(d9==null)r=B.rI +else r=d9 +if(b2==null)q=b6===1?B.H_:B.ll +else q=b2 +if(a3==null)p=!0 +else p=a3 +return new A.SL(b3,i,a7,a0,q,e8,e6,e3,e2,e4,e5,e7,!1,e1,c0,!1,!0,s,r,!0,b6,b7,!1,!1,e9,d7,b4,b5,c2,c3,c4,c1,a9,a5,a8,o,l,n,m,j,k,d5,d6,b1,d2,p,d4,a1,c5,!1,c7,b8,d,d3,d1,b,f,c9,!0,!0,g,h,!0,f0,e0,b0)}, +bL3(a,b){return A.bdU(b)}, +bL4(a){return B.im}, +bPR(a){return A.Yl(new A.b9o(a))}, +ara:function ara(a,b){var _=this +_.x=a +_.a=b +_.b=!0 +_.c=!1 +_.e=_.d=0 +_.r=_.f=null +_.w=!1}, +SL:function SL(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.cy=r +_.db=s +_.dx=a0 +_.dy=a1 +_.fr=a2 +_.fx=a3 +_.fy=a4 +_.go=a5 +_.id=a6 +_.k1=a7 +_.k2=a8 +_.k3=a9 +_.k4=b0 +_.ok=b1 +_.p1=b2 +_.p2=b3 +_.p3=b4 +_.p4=b5 +_.R8=b6 +_.RG=b7 +_.rx=b8 +_.ry=b9 +_.to=c0 +_.x1=c1 +_.x2=c2 +_.xr=c3 +_.y1=c4 +_.y2=c5 +_.bv=c6 +_.bn=c7 +_.ac=c8 +_.ah=c9 +_.b_=d0 +_.b6=d1 +_.K=d2 +_.a5=d3 +_.M=d4 +_.av=d5 +_.ao=d6 +_.aM=d7 +_.aS=d8 +_.b2=d9 +_.bB=e0 +_.ct=e1 +_.bD=e2 +_.dg=e3 +_.R=e4 +_.S=e5 +_.a=e6}, +XM:function XM(a,b,c,d,e,f,g){var _=this +_.e=_.d=null +_.r=_.f=!1 +_.x=_.w=$ +_.y=a +_.z=null +_.cS$=b +_.jU$=c +_.vU$=d +_.hM$=e +_.jV$=f +_.a=null +_.b=g +_.c=null}, +b7q:function b7q(){}, +b7s:function b7s(a,b){this.a=a +this.b=b}, +b7r:function b7r(a,b){this.a=a +this.b=b}, +b7t:function b7t(){}, +b7v:function b7v(a){this.a=a}, +b7w:function b7w(a){this.a=a}, +b7x:function b7x(a){this.a=a}, +b7y:function b7y(a){this.a=a}, +b7z:function b7z(a){this.a=a}, +b7A:function b7A(a){this.a=a}, +b7B:function b7B(a,b,c){this.a=a +this.b=b +this.c=c}, +b7D:function b7D(a){this.a=a}, +b7E:function b7E(a){this.a=a}, +b7C:function b7C(a,b){this.a=a +this.b=b}, +b7u:function b7u(a){this.a=a}, +b9o:function b9o(a){this.a=a}, +b8A:function b8A(){}, +Z4:function Z4(){}, +bL5(a,b,c,d,e,f){var s=null,r=a.a.a,q=b.ac +return new A.SM(a,f,new A.aVl(b,e,s,s,d,s,s,s,B.aA,s,s,B.lj,!1,s,s,!1,s,"\u2022",!1,!0,s,s,!0,s,1,s,!1,s,s,!1,s,s,s,c,s,s,2,s,s,s,s,B.dJ,s,s,s,s,s,s,s,!0,s,A.bW0(),s,s,s,s,s,B.dA,B.cO,B.ai,s,B.a4,!0,!0),r,q!==!1,B.u5,s,s)}, +bL6(a,b){return A.bdU(b)}, +SM:function SM(a,b,c,d,e,f,g,h){var _=this +_.z=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.a=h}, +aVl:function aVl(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7 +_.id=a8 +_.k1=a9 +_.k2=b0 +_.k3=b1 +_.k4=b2 +_.ok=b3 +_.p1=b4 +_.p2=b5 +_.p3=b6 +_.p4=b7 +_.R8=b8 +_.RG=b9 +_.rx=c0 +_.ry=c1 +_.to=c2 +_.x1=c3 +_.x2=c4 +_.xr=c5 +_.y1=c6 +_.y2=c7 +_.bv=c8 +_.bn=c9 +_.ac=d0 +_.ah=d1 +_.b_=d2 +_.b6=d3 +_.K=d4 +_.a5=d5 +_.M=d6 +_.av=d7 +_.ao=d8 +_.aM=d9 +_.aS=e0 +_.b2=e1 +_.bB=e2 +_.ct=e3 +_.bD=e4}, +aVm:function aVm(a,b){this.a=a +this.b=b}, +K1:function K1(a,b,c,d,e,f,g,h){var _=this +_.ax=null +_.d=$ +_.e=a +_.f=b +_.cS$=c +_.jU$=d +_.vU$=e +_.hM$=f +_.jV$=g +_.a=null +_.b=h +_.c=null}, +a6I:function a6I(){}, +aKm:function aKm(){}, +ard:function ard(a,b){this.b=a +this.a=b}, +alh:function alh(){}, +bL9(a,b,c){var s,r +if(a===b)return a +s=A.Z(a.a,b.a,c) +r=A.Z(a.b,b.b,c) +return new A.SW(s,r,A.Z(a.c,b.c,c))}, +SW:function SW(a,b,c){this.a=a +this.b=b +this.c=c}, +are:function are(){}, +bLa(a,b,c){return new A.adr(a,b,c,null)}, +bLh(a,b){return new A.arf(b,null)}, +bNM(a){var s,r=null,q=a.a.a +switch(q){case 1:s=A.Cd(r,r,r,r,r).ax.k2===a.k2 +break +case 0:s=A.Cd(B.b8,r,r,r,r).ax.k2===a.k2 +break +default:s=r}if(!s)return a.k2 +switch(q){case 1:q=B.l +break +case 0:q=B.dD +break +default:q=r}return q}, +adr:function adr(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +XR:function XR(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +arj:function arj(a,b,c,d){var _=this +_.d=!1 +_.e=a +_.f2$=b +_.bV$=c +_.a=null +_.b=d +_.c=null}, +b7V:function b7V(a){this.a=a}, +b7U:function b7U(a){this.a=a}, +ark:function ark(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +arl:function arl(a,b,c,d,e){var _=this +_.V=null +_.aE=a +_.bj=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +b7W:function b7W(a,b,c){this.a=a +this.b=b +this.c=c}, +arg:function arg(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +arh:function arh(a,b,c){var _=this +_.k4=$ +_.ok=a +_.c=_.b=_.a=_.ch=_.ax=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +aot:function aot(a,b,c,d,e,f,g){var _=this +_.K=-1 +_.a5=a +_.M=b +_.dI$=c +_.aZ$=d +_.f1$=e +_.fx=f +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +b5A:function b5A(a,b,c){this.a=a +this.b=b +this.c=c}, +b5B:function b5B(a,b,c){this.a=a +this.b=b +this.c=c}, +b5C:function b5C(a,b,c){this.a=a +this.b=b +this.c=c}, +b5E:function b5E(a,b){this.a=a +this.b=b}, +b5D:function b5D(a,b,c){this.a=a +this.b=b +this.c=c}, +b5F:function b5F(a){this.a=a}, +arf:function arf(a,b){this.c=a +this.a=b}, +ari:function ari(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +atY:function atY(){}, +auj:function auj(){}, +bLe(a){if(a===B.Ia||a===B.tU)return 14.5 +return 9.5}, +bLg(a){if(a===B.Ib||a===B.tU)return 14.5 +return 9.5}, +bLf(a,b){if(a===0)return b===1?B.tU:B.Ia +if(a===b-1)return B.Ib +return B.ak2}, +bLd(a){var s,r=null,q=a.a.a +switch(q){case 1:s=A.Cd(r,r,r,r,r).ax.k3===a.k3 +break +case 0:s=A.Cd(B.b8,r,r,r,r).ax.k3===a.k3 +break +default:s=r}if(!s)return a.k3 +switch(q){case 1:q=B.q +break +case 0:q=B.l +break +default:q=r}return q}, +K3:function K3(a,b){this.a=a +this.b=b}, +adt:function adt(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +aVU(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return new A.hB(d,e,f,g,h,i,m,n,o,a,b,c,j,k,l)}, +Ii(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a===b)return a +s=A.cl(a.a,b.a,c) +r=A.cl(a.b,b.b,c) +q=A.cl(a.c,b.c,c) +p=A.cl(a.d,b.d,c) +o=A.cl(a.e,b.e,c) +n=A.cl(a.f,b.f,c) +m=A.cl(a.r,b.r,c) +l=A.cl(a.w,b.w,c) +k=A.cl(a.x,b.x,c) +j=A.cl(a.y,b.y,c) +i=A.cl(a.z,b.z,c) +h=A.cl(a.Q,b.Q,c) +g=A.cl(a.as,b.as,c) +f=A.cl(a.at,b.at,c) +return A.aVU(j,i,h,s,r,q,p,o,n,g,f,A.cl(a.ax,b.ax,c),m,l,k)}, +hB:function hB(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){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}, +arp:function arp(){}, +am(a){var s,r=a.bh(t.Nr),q=A.nf(a,B.cK,t.c4)==null?null:B.Ft +if(q==null)q=B.Ft +s=r==null?null:r.w.c +if(s==null)s=$.by_() +return A.bLo(s,s.p3.ajI(q))}, +wJ:function wJ(a,b,c){this.c=a +this.d=b +this.a=c}, +Vv:function Vv(a,b,c){this.w=a +this.b=b +this.a=c}, +Cc:function Cc(a,b){this.a=a +this.b=b}, +KD:function KD(a,b,c,d,e,f){var _=this +_.r=a +_.w=b +_.c=c +_.d=d +_.e=e +_.a=f}, +afm:function afm(a,b,c){var _=this +_.CW=null +_.e=_.d=$ +_.jk$=a +_.dQ$=b +_.a=null +_.b=c +_.c=null}, +aYP:function aYP(){}, +Cd(d1,d2,d3,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=null,c9=A.b([],t.FO),d0=A.b([],t.lY) +if(d3==null)d3=B.Wo +s=A.ci() +switch(s.a){case 0:case 1:case 2:r=B.a25 +break +case 3:case 4:case 5:r=B.CY +break +default:r=c8}q=A.bM6(s) +d5=d5!==!1 +if(d5)p=B.Lx +else p=B.Ly +if(d1==null)o=c8 +else o=d1 +if(o==null)o=B.aW +n=o===B.b8 +if(d5){m=n?B.LT:B.LU +l=n?m.k2:m.b +k=n?m.k3:m.c +j=m.bn +i=j==null?m.k2:j +h=j==null?m.k2:j +g=m.k2 +f=m.ry +if(f==null){e=m.ac +f=e==null?m.k3:e}d=j==null?g:j +c=d1===B.b8 +b=l +a=k +j=i}else{h=c8 +b=h +a=b +f=a +d=f +m=d +g=m +j=g +c=j}if(b==null)b=n?B.v6:B.bi +a0=A.bh0(b) +a1=n?B.vl:B.n9 +a2=n?B.q:B.v4 +a3=a0===B.b8 +a4=n?A.S(31,255,255,255):A.S(31,0,0,0) +a5=n?A.S(10,255,255,255):A.S(10,0,0,0) +if(j==null)j=n?B.n1:B.vu +if(h==null)h=j +if(g==null)g=n?B.dD:B.l +if(f==null)f=n?B.vw:B.cD +if(m==null){a6=n?B.ve:B.v7 +e=n?B.jm:B.vk +a7=A.bh0(B.bi)===B.b8 +a8=A.bh0(a6) +a9=a7?B.l:B.q +a8=a8===B.b8?B.l:B.q +b0=n?B.l:B.q +b1=n?B.q:B.l +m=A.bee(e,o,B.jo,c8,c8,c8,a7?B.l:B.q,b1,c8,c8,a9,c8,c8,c8,a8,c8,c8,c8,b0,c8,c8,c8,c8,c8,c8,c8,B.bi,c8,c8,c8,c8,a6,c8,c8,c8,c8,g,c8,c8,c8,c8,c8,c8,c8,c8,c8,c8,c8,c8,c8)}b2=n?B.a8:B.am +b3=n?B.jm:B.vs +if(d==null)d=n?B.dD:B.l +if(a==null){a=m.y +if(a.k(0,b))a=B.l}b4=n?B.M6:A.S(153,0,0,0) +b5=A.bkX(!1,n?B.v5:B.vr,m,c8,a4,36,c8,a5,B.JZ,r,88,c8,c8,c8,B.ur) +b6=n?B.M_:B.LZ +b7=n?B.uR:B.mU +b8=n?B.uR:B.M1 +if(d5){b9=A.bqC(s,c8,c8,B.aeF,B.aeB,B.aeH) +e=m.a===B.aW +c0=e?m.k3:m.k2 +c1=e?m.k2:m.k3 +e=b9.a.ab7(c0,c0,c0) +a8=b9.b.ab7(c1,c1,c1) +c2=new A.Iq(e,a8,b9.c,b9.d,b9.e)}else c2=A.bLN(s) +c3=n?c2.b:c2.a +c4=a3?c2.b:c2.a +d4=c3.bT(d4) +c5=c4.bT(c8) +c6=n?new A.fr(c8,c8,c8,c8,c8,$.bjY(),c8,c8,c8):new A.fr(c8,c8,c8,c8,c8,$.bjX(),c8,c8,c8) +c7=a3?B.Wa:B.Wb +if(d2==null)d2=B.UR +return A.bh_(c8,A.bLk(d0),B.Io,c===!0,B.Ir,B.a1Y,B.Je,B.Jf,B.Jg,B.K_,b5,j,g,B.LG,B.LJ,B.LM,m,c8,B.T4,B.T5,d,B.TD,b6,f,B.TI,B.TV,B.TW,d2,B.UZ,A.bLm(c9),B.V8,B.Vj,a4,b7,b4,a5,B.VQ,c6,a,d3,B.Xe,r,B.a2b,B.a2c,B.a2d,B.a2k,B.a2l,B.a2n,B.a4_,B.KU,s,B.a4Z,b,a2,a1,c7,c5,B.a51,B.a58,h,B.a5U,B.a5V,B.a5W,b3,B.a5X,B.q,B.a8A,B.a8G,b8,p,B.a9y,B.a9R,B.a9U,B.aan,d4,B.afa,B.afb,B.agh,c2,b2,d5,q)}, +bh_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,g0,g1,g2){return new A.nv(d,r,b0,b,c0,c2,d0,d1,e1,f0,!0,g2,l,m,q,a1,a3,a4,b3,b4,b5,b6,b9,d3,d4,d5,e0,e4,e6,e9,g0,b8,d6,d7,f5,f9,a,c,e,f,g,h,i,j,k,n,o,p,s,a0,a2,a5,a6,a7,a8,a9,b1,b2,b7,c1,c3,c4,c5,c6,c7,c8,c9,d2,d8,d9,e2,e3,e5,e7,e8,f1,f2,f3,f4,f6,f7,f8)}, +bLj(){var s=null +return A.Cd(B.aW,s,s,s,s)}, +bLk(a){var s,r,q=A.D(t.B,t.gj) +for(s=0;!1;++s){r=a[s] +q.u(0,r.gbg(r),r)}return q}, +bLo(a,b){return $.bxZ().cU(0,new A.Jj(a,b),new A.aVY(a,b))}, +bh0(a){var s=0.2126*A.bef((a.gm(a)>>>16&255)/255)+0.7152*A.bef((a.gm(a)>>>8&255)/255)+0.0722*A.bef((a.gm(a)&255)/255)+0.05 +if(s*s>0.15)return B.aW +return B.b8}, +bLl(a,b,c){var s=a.c,r=s.Ey(s,new A.aVW(b,c),t.K,t.Ag) +s=b.c +r.aaR(r,s.ghw(s).mz(0,new A.aVX(a))) +return r}, +bLm(a){var s,r,q=t.K,p=t.Uo,o=A.D(q,p) +for(s=0;!1;++s){r=a[s] +o.u(0,r.gbg(r),p.a(r))}return A.bei(o,q,t.Ag)}, +bLn(d2,d3,d4){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,d1 +if(d2===d3)return d2 +s=d4<0.5 +r=s?d2.d:d3.d +q=s?d2.a:d3.a +p=s?d2.b:d3.b +o=A.bLl(d2,d3,d4) +n=s?d2.e:d3.e +m=s?d2.f:d3.f +l=s?d2.r:d3.r +k=s?d2.w:d3.w +j=A.bJB(d2.x,d3.x,d4) +i=s?d2.y:d3.y +h=A.bM7(d2.Q,d3.Q,d4) +g=A.Z(d2.as,d3.as,d4) +g.toString +f=A.Z(d2.at,d3.at,d4) +f.toString +e=A.bCX(d2.ax,d3.ax,d4) +d=A.Z(d2.ay,d3.ay,d4) +d.toString +c=A.Z(d2.ch,d3.ch,d4) +c.toString +b=A.Z(d2.CW,d3.CW,d4) +b.toString +a=A.Z(d2.cx,d3.cx,d4) +a.toString +a0=A.Z(d2.cy,d3.cy,d4) +a0.toString +a1=A.Z(d2.db,d3.db,d4) +a1.toString +a2=A.Z(d2.dx,d3.dx,d4) +a2.toString +a3=A.Z(d2.dy,d3.dy,d4) +a3.toString +a4=A.Z(d2.fr,d3.fr,d4) +a4.toString +a5=A.Z(d2.fx,d3.fx,d4) +a5.toString +a6=A.Z(d2.fy,d3.fy,d4) +a6.toString +a7=A.Z(d2.go,d3.go,d4) +a7.toString +a8=A.Z(d2.id,d3.id,d4) +a8.toString +a9=A.Z(d2.k1,d3.k1,d4) +a9.toString +b0=A.Z(d2.k2,d3.k2,d4) +b0.toString +b1=A.Z(d2.k3,d3.k3,d4) +b1.toString +b2=A.ru(d2.k4,d3.k4,d4) +b3=A.ru(d2.ok,d3.ok,d4) +b4=A.Ii(d2.p1,d3.p1,d4) +b5=A.Ii(d2.p2,d3.p2,d4) +b6=A.bLO(d2.p3,d3.p3,d4) +b7=A.bBK(d2.p4,d3.p4,d4) +b8=A.bC0(d2.R8,d3.R8,d4) +b9=A.bC6(d2.RG,d3.RG,d4) +c0=d2.rx +c1=d3.rx +c2=A.Z(c0.a,c1.a,d4) +c3=A.Z(c0.b,c1.b,d4) +c4=A.Z(c0.c,c1.c,d4) +c5=A.Z(c0.d,c1.d,d4) +c6=A.cl(c0.e,c1.e,d4) +c7=A.ap(c0.f,c1.f,d4) +c8=A.hP(c0.r,c1.r,d4) +c0=A.hP(c0.w,c1.w,d4) +c1=A.bCf(d2.ry,d3.ry,d4) +c9=A.bCg(d2.to,d3.to,d4) +d0=A.bCh(d2.x1,d3.x1,d4) +d1=A.bCm(d2.x2,d3.x2,d4) +s=s?d2.xr:d3.xr +return A.bh_(b7,r,b8,q,b9,new A.OM(c2,c3,c4,c5,c6,c7,c8,c0),c1,c9,d0,d1,s,g,f,A.bCt(d2.y1,d3.y1,d4),A.bCz(d2.y2,d3.y2,d4),A.bCD(d2.bv,d3.bv,d4),e,p,A.bDk(d2.bn,d3.bn,d4),A.bDm(d2.ac,d3.ac,d4),d,A.bDG(d2.ah,d3.ah,d4),c,b,A.bDU(d2.b_,d3.b_,d4),A.bEm(d2.b6,d3.b6,d4),A.bEp(d2.K,d3.K,d4),A.bEC(d2.a5,d3.a5,d4),A.bER(d2.M,d3.M,d4),o,A.bEV(d2.av,d3.av,d4),A.bF_(d2.ao,d3.ao,d4),a,a0,a1,a2,A.bFP(d2.aM,d3.aM,d4),b2,a3,n,A.bGI(d2.aS,d3.aS,d4),m,A.bHa(d2.b2,d3.b2,d4),A.bHb(d2.bB,d3.bB,d4),A.bHc(d2.ct,d3.ct,d4),A.bHG(d2.bD,d3.bD,d4),A.bHH(d2.dg,d3.dg,d4),A.bHI(d2.R,d3.R,d4),A.bHV(d2.S,d3.S,d4),l,k,A.bIt(d2.aa,d3.aa,d4),a4,a5,a6,b3,b4,A.bIM(d2.bp,d3.bp,d4),A.bIT(d2.aN,d3.aN,d4),a7,j,A.bJD(d2.cZ,d3.cZ,d4),A.bJF(d2.cL,d3.cL,d4),a8,A.bJH(d2.d4,d3.d4,d4),a9,A.bKc(d2.f3,d3.f3,d4),A.bKf(d2.dh,d3.dh,d4),b0,i,A.bKL(d2.c9,d3.c9,d4),A.bKP(d2.eh,d3.eh,d4),A.bKZ(d2.f4,d3.f4,d4),A.bL9(d2.eH,d3.eH,d4),b5,A.bLC(d2.e9,d3.e9,d4),A.bLF(d2.f5,d3.f5,d4),A.bLI(d2.d1,d3.d1,d4),b6,b1,!0,h)}, +bH3(a,b){return new A.a6F(a,b,B.tx,b.a,b.b,b.c,b.d,b.e,b.f,b.r)}, +bM6(a){var s +$label0$0:{if(B.ar===a||B.a6===a||B.dn===a){s=B.fY +break $label0$0}if(B.dp===a||B.ct===a||B.dq===a){s=B.HF +break $label0$0}s=null}return s}, +bM7(a,b,c){var s,r +if(a===b)return a +s=A.ap(a.a,b.a,c) +s.toString +r=A.ap(a.b,b.b,c) +r.toString +return new A.tN(s,r)}, +Ag:function Ag(a,b){this.a=a +this.b=b}, +nv:function nv(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,g0,g1,g2){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7 +_.id=a8 +_.k1=a9 +_.k2=b0 +_.k3=b1 +_.k4=b2 +_.ok=b3 +_.p1=b4 +_.p2=b5 +_.p3=b6 +_.p4=b7 +_.R8=b8 +_.RG=b9 +_.rx=c0 +_.ry=c1 +_.to=c2 +_.x1=c3 +_.x2=c4 +_.xr=c5 +_.y1=c6 +_.y2=c7 +_.bv=c8 +_.bn=c9 +_.ac=d0 +_.ah=d1 +_.b_=d2 +_.b6=d3 +_.K=d4 +_.a5=d5 +_.M=d6 +_.av=d7 +_.ao=d8 +_.aM=d9 +_.aS=e0 +_.b2=e1 +_.bB=e2 +_.ct=e3 +_.bD=e4 +_.dg=e5 +_.R=e6 +_.S=e7 +_.aa=e8 +_.bp=e9 +_.aN=f0 +_.cZ=f1 +_.cL=f2 +_.d4=f3 +_.f3=f4 +_.dh=f5 +_.c9=f6 +_.eh=f7 +_.f4=f8 +_.eH=f9 +_.e9=g0 +_.f5=g1 +_.d1=g2}, +aVY:function aVY(a,b){this.a=a +this.b=b}, +aVW:function aVW(a,b){this.a=a +this.b=b}, +aVX:function aVX(a){this.a=a}, +a6F:function a6F(a,b,c,d,e,f,g,h,i,j){var _=this +_.ay=a +_.ch=b +_.w=c +_.a=d +_.b=e +_.c=f +_.d=g +_.e=h +_.f=i +_.r=j}, +Jj:function Jj(a,b){this.a=a +this.b=b}, +aiQ:function aiQ(a,b,c){this.a=a +this.b=b +this.$ti=c}, +tN:function tN(a,b){this.a=a +this.b=b}, +art:function art(){}, +aso:function aso(){}, +bLC(a4,a5,a6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3 +if(a4===a5)return a4 +s=a4.d +if(s==null)r=a5.d==null +else r=!1 +if(r)s=null +else if(s==null)s=a5.d +else{r=a5.d +if(!(r==null)){s.toString +r.toString +s=A.bJ(s,r,a6)}}r=A.Z(a4.a,a5.a,a6) +q=A.p6(a4.b,a5.b,a6) +p=A.p6(a4.c,a5.c,a6) +o=a4.gDa() +n=a5.gDa() +o=A.Z(o,n,a6) +n=t.KX.a(A.fE(a4.f,a5.f,a6)) +m=A.Z(a4.r,a5.r,a6) +l=A.cl(a4.w,a5.w,a6) +k=A.Z(a4.x,a5.x,a6) +j=A.Z(a4.y,a5.y,a6) +i=A.Z(a4.z,a5.z,a6) +h=A.cl(a4.Q,a5.Q,a6) +g=A.ap(a4.as,a5.as,a6) +f=A.Z(a4.at,a5.at,a6) +e=A.cl(a4.ax,a5.ax,a6) +d=A.Z(a4.ay,a5.ay,a6) +c=A.fE(a4.ch,a5.ch,a6) +b=A.Z(a4.CW,a5.CW,a6) +a=A.cl(a4.cx,a5.cx,a6) +if(a6<0.5)a0=a4.cy +else a0=a5.cy +a1=A.hP(a4.db,a5.db,a6) +a2=A.fE(a4.dx,a5.dx,a6) +a3=A.bY(a4.dy,a5.dy,a6,A.dq(),t.MH) +return new A.T4(r,q,p,s,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,A.bY(a4.fr,a5.fr,a6,A.Ko(),t.p8))}, +T4:function T4(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4}, +aWr:function aWr(a){this.a=a}, +arv:function arv(){}, +bLF(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a===b)return a +s=A.cl(a.a,b.a,c) +r=A.qN(a.b,b.b,c) +q=A.Z(a.c,b.c,c) +p=A.Z(a.d,b.d,c) +o=A.Z(a.e,b.e,c) +n=A.Z(a.f,b.f,c) +m=A.Z(a.r,b.r,c) +l=A.Z(a.w,b.w,c) +k=A.Z(a.y,b.y,c) +j=A.Z(a.x,b.x,c) +i=A.Z(a.z,b.z,c) +h=A.Z(a.Q,b.Q,c) +g=A.Z(a.as,b.as,c) +f=A.qL(a.ax,b.ax,c) +return new A.T5(s,r,q,p,o,n,m,l,j,k,i,h,g,A.ap(a.at,b.at,c),f)}, +T5:function T5(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){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}, +arz:function arz(){}, +T8:function T8(){}, +aWz:function aWz(a,b){this.a=a +this.b=b}, +aWB:function aWB(a){this.a=a}, +aWw:function aWw(a,b){this.a=a +this.b=b}, +aWx:function aWx(a,b){this.a=a +this.b=b}, +T6:function T6(){}, +bri(a,b,c){return new A.aiN(b,null,c,B.m,a,null)}, +bLG(a,b,c,d){return new A.Tc(b,d,c,a,null)}, +bLJ(){var s,r,q +if($.Cm.length!==0){s=A.b($.Cm.slice(0),A.a5($.Cm)) +for(r=s.length,q=0;q>>16&255,r.gm(r)>>>8&255,r.gm(r)&255) +break +default:r=null}switch(q.a){case 1:q=b.a +break +case 0:q=b.a +q=A.S(0,q.gm(q)>>>16&255,q.gm(q)>>>8&255,q.gm(q)&255) +break +default:q=null}p=a.d +o=b.d +if(p!==o){r=A.Z(r,q,c) +r.toString +o=A.ap(p,o,c) +o.toString +return new A.bL(r,s,B.J,o)}r=A.Z(r,q,c) +r.toString +return new A.bL(r,s,B.J,p)}, +fE(a,b,c){var s,r +if(a==b)return a +s=b==null?null:b.hd(a,c) +if(s==null)s=a==null?null:a.he(b,c) +if(s==null)r=c<0.5?a:b +else r=s +return r}, +boo(a,b,c){var s,r +if(a==b)return a +s=b==null?null:b.hd(a,c) +if(s==null)s=a==null?null:a.he(b,c) +if(s==null)r=c<0.5?a:b +else r=s +return r}, +brd(a,b,c){var s,r,q,p,o,n,m=a instanceof A.nC?a.a:A.b([a],t.Fi),l=b instanceof A.nC?b.a:A.b([b],t.Fi),k=A.b([],t.N_),j=Math.max(m.length,l.length) +for(s=1-c,r=0;ro/m?new A.Q(o*p/m,p):new A.Q(q,m*q/o) +r=b +break +case 2:q=c.a +p=c.b +o=b.a +r=q/p>o/m?new A.Q(o,o*p/q):new A.Q(m*q/p,m) +s=c +break +case 3:q=c.a +p=c.b +o=b.a +if(q/p>o/m){r=new A.Q(o,o*p/q) +s=c}else{s=new A.Q(q,m*q/o) +r=b}break +case 4:q=c.a +p=c.b +o=b.a +if(q/p>o/m){s=new A.Q(o*p/m,p) +r=b}else{r=new A.Q(m*q/p,m) +s=c}break +case 5:r=new A.Q(Math.min(b.a,c.a),Math.min(m,c.b)) +s=r +break +case 6:n=b.a/m +q=c.b +s=m>q?new A.Q(q*n,q):b +m=c.a +if(s.a>m)s=new A.Q(m,m/n) +r=b +break +default:r=null +s=null}return new A.a3C(r,s)}, +a_Z:function a_Z(a,b){this.a=a +this.b=b}, +a3C:function a3C(a,b){this.a=a +this.b=b}, +bCl(a,b,c){var s,r,q,p,o +if(a===b)return a +s=A.Z(a.a,b.a,c) +s.toString +r=A.pM(a.b,b.b,c) +r.toString +q=A.ap(a.c,b.c,c) +q.toString +p=A.ap(a.d,b.d,c) +p.toString +o=a.e +return new A.cx(p,o===B.a0?b.e:o,s,r,q)}, +be6(a,b,c){var s,r,q,p,o,n,m,l +if(a==null?b==null:a===b)return a +if(a==null)a=A.b([],t.sq) +if(b==null)b=A.b([],t.sq) +s=Math.min(a.length,b.length) +r=A.b([],t.sq) +for(q=0;q>>16&255)/255,r=(a.gm(a)>>>8&255)/255,q=(a.gm(a)&255)/255,p=Math.max(s,Math.max(r,q)),o=p-Math.min(s,Math.min(r,q)),n=a.gm(a),m=A.bsA(s,r,q,p,o),l=p===0?0:o/p +return new A.dk((n>>>24&255)/255,m,l,p)}, +dk:function dk(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +ee:function ee(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +lb:function lb(){}, +aAE(a,b,c){var s,r=null +if(a==b)return a +if(a==null){s=b.hd(r,c) +return s==null?b:s}if(b==null){s=a.he(r,c) +return s==null?a:s}if(c===0)return a +if(c===1)return b +s=b.hd(a,c) +if(s==null)s=a.he(b,c) +if(s==null)if(c<0.5){s=a.he(r,c*2) +if(s==null)s=a}else{s=b.hd(r,(c-0.5)*2) +if(s==null)s=b}return s}, +km:function km(){}, +uB:function uB(){}, +ahD:function ahD(){}, +beo(a,b,c){if(a==b||c===0)return a +if(c===1)return b +return new A.afR(a,b,c)}, +biF(a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b +if(b1.gaA(0))return +s=b1.gaH(b1)-b1.gae(b1) +r=b1.gaQ(b1)-b1.gaj(b1) +q=new A.Q(s,r) +p=a7.gbW(a7) +o=a7.gb9(a7) +n=A.bi9(B.um,new A.Q(p,o).b1(0,b3),q) +m=n.a.a2(0,b3) +l=n.b +if(b2!==B.dL&&l.k(0,q))b2=B.dL +k=$.G().B() +k.skX(!1) +if(a2!=null)k.sqU(a2) +k.sA(0,A.la(0,0,0,A.U(b0,0,1))) +k.sor(a4) +k.sLn(a8) +k.sde(B.bF) +j=l.a +i=(s-j)/2 +s=l.b +h=(r-s)/2 +r=a.a +if(a6)r=-r +r=b1.gae(b1)+(i+r*i) +g=b1.gaj(b1)+(h+a.b*h) +f=new A.A(r,g,r+j,g+s) +e=b2!==B.dL||a6 +if(e)a0.bU(0) +s=b2===B.dL +if(!s)a0.mZ(b1) +if(a6){d=-(b1.gae(b1)+(b1.gaH(b1)-b1.gae(b1))/2) +a0.aJ(0,-d,0) +a0.ff(0,-1,1) +a0.aJ(0,d,0)}c=a.Li(m,new A.A(0,0,p,o)) +if(s)a0.i6(a7,c,f,k) +else for(s=A.bPf(b1,f,b2),r=s.length,b=0;bk?l:k)){o=t.N +j=A.ek(o) +n=t.kt +i=A.jF(d,d,d,o,n) +for(h=p;h")),o=o.c;n.H();){m=n.d +if(m==null)m=o.a(m) +e=A.bmK(i.i(0,m),g.i(0,m),c) +if(e!=null)s.push(e)}}return s}, +I:function I(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6}, +arn:function arn(){}, +bsS(a,b,c,d,e){var s,r +for(s=c,r=0;r0){n=-n +l=2*l +r=(n-Math.sqrt(j))/l +q=(n+Math.sqrt(j))/l +p=(c-r*b)/(q-r) +return new A.b4n(r,q,b-p,p)}o=Math.sqrt(k-m)/(2*l) +s=-(n/2*l) +return new A.b82(o,s,b,(c-s*b)/o)}, +aTu:function aTu(a,b,c){this.a=a +this.b=b +this.c=c}, +Sb:function Sb(a,b){this.a=a +this.b=b}, +Sa:function Sa(a,b,c){this.b=a +this.c=b +this.a=c}, +By:function By(a,b,c){this.b=a +this.c=b +this.a=c}, +b_O:function b_O(a,b,c){this.a=a +this.b=b +this.c=c}, +b4n:function b4n(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +b82:function b82(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Ta:function Ta(a,b){this.a=a +this.c=b}, +bJ4(a,b,c,d,e,f,g,h){var s=null,r=new A.Qw(new A.abG(s,s),B.Fi,b,h,A.aX(t.O5),a,g,s,new A.bs(),A.aX(t.v)) +r.by() +r.sbt(s) +r.asL(a,s,b,c,d,e,f,g,h) +return r}, +H2:function H2(a,b){this.a=a +this.b=b}, +Qw:function Qw(a,b,c,d,e,f,g,h,i,j){var _=this +_.ef=_.dC=$ +_.dn=a +_.hL=$ +_.bf=null +_.ip=b +_.fo=c +_.pB=d +_.DE=null +_.Kz=e +_.V=null +_.aE=f +_.bj=g +_.a0$=h +_.fx=i +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=j +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPh:function aPh(a){this.a=a}, +bMH(a){}, +Ha:function Ha(){}, +aQj:function aQj(a){this.a=a}, +aQl:function aQl(a){this.a=a}, +aQk:function aQk(a){this.a=a}, +aQi:function aQi(a){this.a=a}, +aQh:function aQh(a){this.a=a}, +TV:function TV(a,b){var _=this +_.a=a +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1}, +ahF:function ahF(a,b,c,d,e,f,g,h){var _=this +_.b=a +_.c=b +_.d=c +_.e=null +_.f=!1 +_.r=d +_.y=_.x=_.w=!1 +_.z=e +_.Q=f +_.as=!1 +_.at=null +_.ax=0 +_.ay=!1 +_.ch=g +_.CW=h +_.cx=null}, +aoF:function aoF(a,b,c,d){var _=this +_.a5=!1 +_.fx=a +_.fy=null +_.go=b +_.k1=null +_.a0$=c +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +L9(a){var s=a.a,r=a.b +return new A.bb(s,s,r,r)}, +jx(a,b){var s,r,q=b==null,p=q?0:b +q=q?1/0:b +s=a==null +r=s?0:a +return new A.bb(p,q,r,s?1/0:a)}, +l7(a,b){var s,r,q=b!==1/0,p=q?b:0 +q=q?b:1/0 +s=a!==1/0 +r=s?a:0 +return new A.bb(p,q,r,s?a:1/0)}, +bkQ(a){return new A.bb(0,a.a,0,a.b)}, +qN(a,b,c){var s,r,q,p +if(a==b)return a +if(a==null)return b.a2(0,c) +if(b==null)return a.a2(0,1-c) +s=a.a +if(isFinite(s)){s=A.ap(s,b.a,c) +s.toString}else s=1/0 +r=a.b +if(isFinite(r)){r=A.ap(r,b.b,c) +r.toString}else r=1/0 +q=a.c +if(isFinite(q)){q=A.ap(q,b.c,c) +q.toString}else q=1/0 +p=a.d +if(isFinite(p)){p=A.ap(p,b.d,c) +p.toString}else p=1/0 +return new A.bb(s,r,q,p)}, +bkS(a){return new A.qO(a.a,a.b,a.c)}, +bkG(a,b){return a==null?null:a+b}, +bC8(a,b){var s,r,q,p,o,n=null +$label0$0:{if(a!=null){s=typeof a=="number" +if(s){r=a +if(b!=null)q=typeof b=="number" +else q=!1 +p=b}else{r=n +p=r +q=!1}}else{r=n +p=r +s=!1 +q=!1}if(q){o=s?p:b +q=r>=(o==null?A.oZ(o):o)?b:a +break $label0$0}if(a!=null){r=a +if(s)q=p +else{q=b +p=q +s=!0}q=q==null}else{r=n +q=!1}if(q){q=r +break $label0$0}q=a==null +if(q)if(!s){p=b +s=!0}if(q){o=s?p:b +q=o +break $label0$0}q=n}return q}, +bb:function bb(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +axK:function axK(){}, +qO:function qO(a,b,c){this.a=a +this.b=b +this.c=c}, +y8:function y8(a,b){this.c=a +this.a=b +this.b=null}, +j0:function j0(a){this.a=a}, +LV:function LV(){}, +b1e:function b1e(){}, +b1f:function b1f(a,b){this.a=a +this.b=b}, +aZ5:function aZ5(){}, +aZ6:function aZ6(a,b){this.a=a +this.b=b}, +CR:function CR(a,b){this.a=a +this.b=b}, +b3c:function b3c(a,b){this.a=a +this.b=b}, +bs:function bs(){var _=this +_.d=_.c=_.b=_.a=null}, +Y:function Y(){}, +aPj:function aPj(a){this.a=a}, +f5:function f5(){}, +aPi:function aPi(a,b,c){this.a=a +this.b=b +this.c=c}, +Un:function Un(){}, +nh:function nh(a,b,c){var _=this +_.e=null +_.dY$=a +_.bd$=b +_.a=c}, +aL0:function aL0(){}, +Qy:function Qy(a,b,c,d,e,f){var _=this +_.K=a +_.dI$=b +_.aZ$=c +_.f1$=d +_.fx=e +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=f +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Wy:function Wy(){}, +aoa:function aoa(){}, +bp9(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=null,d={} +d.a=b +if(a==null)a=B.om +s=J.al(a) +r=s.gF(a)-1 +q=A.bc(0,e,!1,t.LQ) +p=0<=r +while(!0){if(!!1)break +s.i(a,0) +o=b[0] +o.gLx(o) +break}while(!0){if(!!1)break +s.i(a,r) +n=b[-1] +n.gLx(n) +break}m=A.bn("oldKeyedChildren") +if(p){m.shb(A.D(t.D2,t.bu)) +for(l=m.a,k=0;k<=r;){j=s.i(a,k) +i=j.a +if(i!=null){h=m.b +if(h===m)A.X(A.fC(l)) +J.kc(h,i,j)}++k}}else k=0 +for(l=m.a,g=0;!1;){o=d.a[g] +if(p){f=o.gLx(o) +i=m.b +if(i===m)A.X(A.fC(l)) +j=J.bG(i,f) +if(j!=null){o.gLx(o) +j=e}}else j=e +q[g]=A.bp8(j,o);++g}s.gF(a) +while(!0){if(!!1)break +q[g]=A.bp8(s.i(a,k),d.a[g]);++g;++k}return new A.hk(q,A.a5(q).h("hk<1,eo>"))}, +bp8(a,b){var s,r=a==null?A.RE(b.gLx(b),null):a,q=b.gah3(),p=A.q0() +q.gam4() +p.k2=q.gam4() +p.e=!0 +q.gaNu(q) +s=q.gaNu(q) +p.cE(B.l9,!0) +p.cE(B.FL,s) +q.gaVd() +s=q.gaVd() +p.cE(B.l9,!0) +p.cE(B.FN,s) +q.gakK(q) +p.cE(B.FP,q.gakK(q)) +q.gaN9(q) +p.cE(B.FS,q.gaN9(q)) +q.gaRf(q) +s=q.gaRf(q) +p.cE(B.a6k,!0) +p.cE(B.a6e,s) +q.gw9() +p.cE(B.rq,q.gw9()) +q.gaZf() +p.cE(B.FI,q.gaZf()) +q.galH() +p.cE(B.FR,q.galH()) +q.gaUk() +p.cE(B.a6f,q.gaUk()) +q.gYZ(q) +p.cE(B.FG,q.gYZ(q)) +q.gaRL() +p.cE(B.FK,q.gaRL()) +q.gaRM(q) +p.cE(B.rp,q.gaRM(q)) +q.gz2(q) +s=q.gz2(q) +p.cE(B.rr,!0) +p.cE(B.ro,s) +q.gaTr() +p.cE(B.a6g,q.gaTr()) +q.gEI() +p.cE(B.FF,q.gEI()) +q.gaVJ(q) +p.cE(B.FQ,q.gaVJ(q)) +q.gaT8(q) +p.cE(B.la,q.gaT8(q)) +q.gLb() +p.cE(B.a6i,q.gLb()) +q.gakC() +p.cE(B.FJ,q.gakC()) +q.gaVQ() +p.cE(B.FO,q.gaVQ()) +q.gaUy() +p.cE(B.FM,q.gaUy()) +q.gXV() +p.sXV(q.gXV()) +q.gK5() +p.sK5(q.gK5()) +q.gaZz() +s=q.gaZz() +p.cE(B.a6j,!0) +p.cE(B.a6d,s) +q.giv(q) +p.cE(B.FH,q.giv(q)) +q.gEn(q) +p.rx=new A.eH(q.gEn(q),B.b4) +p.e=!0 +q.gm(q) +p.ry=new A.eH(q.gm(q),B.b4) +p.e=!0 +q.gaTv() +p.to=new A.eH(q.gaTv(),B.b4) +p.e=!0 +q.gaPA() +p.x1=new A.eH(q.gaPA(),B.b4) +p.e=!0 +q.gaTd(q) +p.x2=new A.eH(q.gaTd(q),B.b4) +p.e=!0 +q.gcV() +p.bn=q.gcV() +p.e=!0 +q.ghT() +p.shT(q.ghT()) +q.gu4() +p.su4(q.gu4()) +q.gM8() +p.sM8(q.gM8()) +q.gM9() +p.sM9(q.gM9()) +q.gMa() +p.sMa(q.gMa()) +q.gM7() +p.sM7(q.gM7()) +q.gM0() +p.sM0(q.gM0()) +q.gLV() +p.sLV(q.gLV()) +q.gLT(q) +p.sLT(0,q.gLT(q)) +q.gLU(q) +p.sLU(0,q.gLU(q)) +q.gM6(q) +p.sM6(0,q.gM6(q)) +q.gM3() +p.sM3(q.gM3()) +q.gM1() +p.sM1(q.gM1()) +q.gM4() +p.sM4(q.gM4()) +q.gM2() +p.sM2(q.gM2()) +q.gMb() +p.sMb(q.gMb()) +q.gMc() +p.sMc(q.gMc()) +q.gLW() +p.sLW(q.gLW()) +q.gLX() +p.sLX(q.gLX()) +q.gLY() +p.sLY(q.gLY()) +r.rI(0,B.om,p) +r.scg(0,b.gcg(b)) +r.sd3(0,b.gd3(b)) +r.dy=b.gb0s() +return r}, +a1P:function a1P(){}, +Qz:function Qz(a,b,c,d,e,f,g,h){var _=this +_.V=a +_.aE=b +_.bj=c +_.ce=d +_.dD=e +_.fU=_.fT=_.eB=_.dj=null +_.a0$=f +_.fx=g +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=h +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aAB:function aAB(){}, +bpa(a,b){return new A.i(A.U(a.a,b.a,b.c),A.U(a.b,b.b,b.d))}, +brB(a){var s=new A.aob(a,new A.bs(),A.aX(t.v)) +s.by() +return s}, +brJ(){return new A.XN($.G().B(),B.dA,B.cO,$.aa())}, +Ca:function Ca(a,b){this.a=a +this.b=b}, +aXi:function aXi(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=!0 +_.r=f}, +Bc:function Bc(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6){var _=this +_.av=_.M=_.a5=_.K=null +_.ao=$ +_.aM=a +_.aS=b +_.bB=_.b2=null +_.ct=c +_.bD=d +_.dg=e +_.R=f +_.S=g +_.aa=h +_.bp=i +_.aN=j +_.d4=_.cL=_.cZ=null +_.f3=k +_.dh=l +_.c9=m +_.eh=n +_.f4=o +_.eH=p +_.e9=q +_.f5=r +_.d1=s +_.i8=a0 +_.V=a1 +_.aE=a2 +_.bj=a3 +_.ce=a4 +_.dD=a5 +_.eB=!1 +_.fT=$ +_.fU=a6 +_.fV=0 +_.ea=a7 +_.na=_.i9=_.eu=null +_.pH=_.nb=$ +_.kt=_.hJ=_.ha=null +_.hK=$ +_.dP=null +_.fE=a8 +_.kT=null +_.fF=!0 +_.vO=_.r1=_.r0=_.vN=!1 +_.r2=null +_.r3=a9 +_.Vw=b0 +_.dI$=b1 +_.aZ$=b2 +_.f1$=b3 +_.z8$=b4 +_.fx=b5 +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=b6 +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPp:function aPp(a){this.a=a}, +aPo:function aPo(){}, +aPl:function aPl(a,b){this.a=a +this.b=b}, +aPq:function aPq(){}, +aPn:function aPn(){}, +aPm:function aPm(){}, +aPk:function aPk(){}, +aob:function aob(a,b,c){var _=this +_.K=a +_.fx=b +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +wf:function wf(){}, +XN:function XN(a,b,c,d){var _=this +_.r=a +_.x=_.w=null +_.y=b +_.z=c +_.ac$=0 +_.ah$=d +_.b6$=_.b_$=0 +_.K$=!1}, +Ua:function Ua(a,b,c){var _=this +_.r=!0 +_.w=!1 +_.x=a +_.y=$ +_.Q=_.z=null +_.as=b +_.ax=_.at=null +_.ac$=0 +_.ah$=c +_.b6$=_.b_$=0 +_.K$=!1}, +IW:function IW(a,b){var _=this +_.r=a +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1}, +WA:function WA(){}, +WB:function WB(){}, +aoc:function aoc(){}, +QB:function QB(a,b,c){var _=this +_.K=a +_.a5=$ +_.fx=b +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +bt8(a,b,c){var s,r=null +switch(a.a){case 0:switch(b){case B.r:s=!0 +break +case B.ad:s=!1 +break +case null:case void 0:s=r +break +default:s=r}return s +case 1:switch(c){case B.d3:s=!0 +break +case B.tl:s=!1 +break +case null:case void 0:s=r +break +default:s=r}return s}}, +bJ5(a,b,c,d,e,f,g,h){var s,r=null,q=A.aX(t.O5),p=J.vs(4,t.iy) +for(s=0;s<4;++s)p[s]=new A.C9(r,B.aA,B.r,B.aq.k(0,B.aq)?new A.k2(1):B.aq,r,r,r,r,B.aM,r) +q=new A.QD(c,d,e,b,g,h,f,a,q,p,!0,0,r,r,new A.bs(),A.aX(t.v)) +q.by() +q.I(0,r) +return q}, +a3N:function a3N(a,b){this.a=a +this.b=b}, +lk:function lk(a,b,c){var _=this +_.f=_.e=null +_.dY$=a +_.bd$=b +_.a=c}, +a6v:function a6v(a,b){this.a=a +this.b=b}, +vE:function vE(a,b){this.a=a +this.b=b}, +yD:function yD(a,b){this.a=a +this.b=b}, +QD:function QD(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.K=a +_.a5=b +_.M=c +_.av=d +_.ao=e +_.aM=f +_.aS=g +_.b2=0 +_.bB=h +_.ct=i +_.aRk$=j +_.b05$=k +_.dI$=l +_.aZ$=m +_.f1$=n +_.fx=o +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=p +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPv:function aPv(){}, +aPt:function aPt(){}, +aPu:function aPu(){}, +aPs:function aPs(){}, +b3u:function b3u(a,b,c){this.a=a +this.b=b +this.c=c}, +aoe:function aoe(){}, +aof:function aof(){}, +WC:function WC(){}, +QF:function QF(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){var _=this +_.a5=_.K=null +_.M=a +_.av=b +_.ao=c +_.aM=d +_.aS=e +_.b2=null +_.bB=f +_.ct=g +_.bD=h +_.dg=i +_.R=j +_.S=k +_.aa=l +_.bp=m +_.aN=n +_.cZ=o +_.cL=p +_.d4=q +_.fx=r +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=s +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aX(a){return new A.a61(a.h("a61<0>"))}, +bI2(a){return new A.a8L(a,A.D(t.S,t.Q),A.aX(t.kd))}, +bHQ(a){return new A.or(a,A.D(t.S,t.Q),A.aX(t.kd))}, +bqy(a){return new A.qg(a,B.h,A.D(t.S,t.Q),A.aX(t.kd))}, +bg2(){return new A.Pv(B.h,A.D(t.S,t.Q),A.aX(t.kd))}, +bkC(a){return new A.KR(a,B.bF,A.D(t.S,t.Q),A.aX(t.kd))}, +bfA(a,b){return new A.Ol(a,b,A.D(t.S,t.Q),A.aX(t.kd))}, +bmJ(a){var s,r,q=new A.by(new Float64Array(16)) +q.ci() +for(s=a.length-1;s>0;--s){r=a[s] +if(r!=null)r.yv(a[s-1],q)}return q}, +aEJ(a,b,c,d){var s,r +if(a==null||b==null)return null +if(a===b)return a +s=a.z +r=b.z +if(sr){c.push(a.r) +return A.aEJ(a.r,b,c,d)}c.push(a.r) +d.push(b.r) +return A.aEJ(a.r,b.r,c,d)}, +a__:function a__(a,b){this.a=a +this.$ti=b}, +ic:function ic(){}, +aIW:function aIW(a,b){this.a=a +this.b=b}, +aIX:function aIX(a,b){this.a=a +this.b=b}, +a61:function a61(a){this.a=null +this.$ti=a}, +a8L:function a8L(a,b,c){var _=this +_.ax=a +_.ay=null +_.CW=_.ch=!1 +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +j5:function j5(){}, +or:function or(a,b,c){var _=this +_.k3=a +_.ay=_.ax=null +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +yl:function yl(a,b,c){var _=this +_.k3=null +_.k4=a +_.ay=_.ax=null +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +LC:function LC(a,b,c){var _=this +_.k3=null +_.k4=a +_.ay=_.ax=null +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +DZ:function DZ(a,b,c){var _=this +_.k3=null +_.k4=a +_.ay=_.ax=null +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +NQ:function NQ(a,b,c,d){var _=this +_.bv=a +_.k3=b +_.ay=_.ax=null +_.a=c +_.b=0 +_.d=_.c=!1 +_.e=d +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +qg:function qg(a,b,c,d){var _=this +_.bv=a +_.ac=_.bn=null +_.ah=!0 +_.k3=b +_.ay=_.ax=null +_.a=c +_.b=0 +_.d=_.c=!1 +_.e=d +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +Pv:function Pv(a,b,c){var _=this +_.bv=null +_.k3=a +_.ay=_.ax=null +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +KR:function KR(a,b,c,d){var _=this +_.k3=a +_.k4=b +_.ay=_.ax=null +_.a=c +_.b=0 +_.d=_.c=!1 +_.e=d +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +FI:function FI(){var _=this +_.b=_.a=null +_.c=!1 +_.d=null}, +Ol:function Ol(a,b,c,d){var _=this +_.k3=a +_.k4=b +_.ay=_.ax=null +_.a=c +_.b=0 +_.d=_.c=!1 +_.e=d +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +Ne:function Ne(a,b,c,d,e,f){var _=this +_.k3=a +_.k4=b +_.ok=c +_.p1=d +_.p4=_.p3=_.p2=null +_.R8=!0 +_.ay=_.ax=null +_.a=e +_.b=0 +_.d=_.c=!1 +_.e=f +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +akK:function akK(){}, +bHn(a,b){var s +if(a==null)return!0 +s=a.b +if(t.ks.b(b))return!1 +return t.ge.b(s)||t.PB.b(b)||!s.gbe(s).k(0,b.gbe(b))}, +bHm(a5){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.d +if(a4==null)a4=a5.c +s=a5.a +r=a5.b +q=a4.gA7() +p=a4.ghi(a4) +o=a4.gbP() +n=a4.gdR(a4) +m=a4.gof(a4) +l=a4.gbe(a4) +k=a4.gme() +j=a4.ghs(a4) +a4.gEI() +i=a4.gMv() +h=a4.gF4() +g=a4.ge6() +f=a4.gV4() +e=a4.gC(a4) +d=a4.gYS() +c=a4.gYV() +b=a4.gYU() +a=a4.gYT() +a0=a4.grs(a4) +a1=a4.gZp() +s.al(0,new A.aKV(r,A.bIg(j,k,m,g,f,a4.gKp(),0,n,!1,a0,o,l,h,i,d,a,b,c,e,a4.grZ(),a1,p,q).cn(a4.gd3(a4)),s)) +q=A.w(r).h("bk<1>") +p=q.h("bg") +a2=A.ab(new A.bg(new A.bk(r,q),new A.aKW(s),p),!0,p.h("z.E")) +p=a4.gA7() +q=a4.ghi(a4) +a1=a4.gbP() +e=a4.gdR(a4) +c=a4.gof(a4) +b=a4.gbe(a4) +a=a4.gme() +d=a4.ghs(a4) +a4.gEI() +i=a4.gMv() +h=a4.gF4() +l=a4.ge6() +o=a4.gV4() +a0=a4.gC(a4) +n=a4.gYS() +f=a4.gYV() +g=a4.gYU() +m=a4.gYT() +k=a4.grs(a4) +j=a4.gZp() +a3=A.bIe(d,a,c,l,o,a4.gKp(),0,e,!1,k,a1,b,h,i,n,m,g,f,a0,a4.grZ(),j,q,p).cn(a4.gd3(a4)) +for(q=A.a5(a2).h("cz<1>"),p=new A.cz(a2,q),p=new A.cR(p,p.gF(0),q.h("cR")),q=q.h("aI.E");p.H();){o=p.d +if(o==null)o=q.a(o) +if(o.gZR()){n=o.gage(o) +if(n!=null)n.$1(a3.cn(r.i(0,o)))}}}, +alz:function alz(a,b){this.a=a +this.b=b}, +alA:function alA(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a73:function a73(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1 +_.ac$=0 +_.ah$=d +_.b6$=_.b_$=0 +_.K$=!1}, +aKX:function aKX(){}, +aL_:function aL_(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aKZ:function aKZ(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aKY:function aKY(a){this.a=a}, +aKV:function aKV(a,b,c){this.a=a +this.b=b +this.c=c}, +aKW:function aKW(a){this.a=a}, +atD:function atD(){}, +boq(a,b,c){var s,r,q=a.ch,p=t.dJ.a(q.a) +if(p==null){s=a.A6(null) +q.sbr(0,s) +q=s}else{p.Z4() +a.A6(p) +q=p}a.db=!1 +r=new A.vS(q,a.gpX()) +b=r +a.RV(b,B.h) +b.GC()}, +bHX(a){var s=a.ch.a +s.toString +a.A6(t.gY.a(s)) +a.db=!1}, +bI3(a,b,c){var s=t.TT +return new A.t_(a,c,b,A.b([],s),A.b([],s),A.b([],s),A.C(t.I9),A.C(t.NA))}, +bJ8(a){a.a2O()}, +bJ9(a){a.aFO()}, +bNE(a,b,c){var s=new A.aps() +s.a3i(c,b,a) +return s}, +brG(a,b){if(a==null)return null +if(a.gaA(0)||b.afs())return B.M +return A.bo3(b,a)}, +bNF(a,b,c){var s,r,q,p,o,n,m,l +for(s=a,r=b,q=null;r!==s;){p=r.c +o=s.c +if(p>=o){n=r.gbs(r) +n.eK(r,c) +r=n}if(p<=o){m=s.gbs(s) +m.toString +if(q==null){q=new A.by(new Float64Array(16)) +q.ci() +l=q}else l=q +m.eK(s,l) +s=m}}if(q!=null)if(q.jR(q)!==0)c.bL(0,q) +else c.cv()}, +brF(a,b){var s +if(b==null)return a +s=a==null?null:a.fp(b) +return s==null?b:s}, +eg:function eg(){}, +vS:function vS(a,b){var _=this +_.a=a +_.b=b +_.e=_.d=_.c=null}, +aMD:function aMD(a,b,c){this.a=a +this.b=b +this.c=c}, +aMC:function aMC(a,b,c){this.a=a +this.b=b +this.c=c}, +aMB:function aMB(a,b,c){this.a=a +this.b=b +this.c=c}, +aA1:function aA1(){}, +t_:function t_(a,b,c,d,e,f,g,h){var _=this +_.b=a +_.c=b +_.d=c +_.e=null +_.f=!1 +_.r=d +_.y=_.x=_.w=!1 +_.z=e +_.Q=f +_.as=!1 +_.at=null +_.ax=0 +_.ay=!1 +_.ch=g +_.CW=h +_.cx=null}, +aNz:function aNz(){}, +aNy:function aNy(){}, +aNA:function aNA(){}, +aNB:function aNB(){}, +L:function L(){}, +aPE:function aPE(a){this.a=a}, +aPH:function aPH(a,b,c){this.a=a +this.b=b +this.c=c}, +aPF:function aPF(a){this.a=a}, +aPG:function aPG(){}, +aPB:function aPB(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k}, +aPC:function aPC(a,b,c){this.a=a +this.b=b +this.c=c}, +aPD:function aPD(a,b){this.a=a +this.b=b}, +bx:function bx(){}, +h5:function h5(){}, +aZ:function aZ(){}, +we:function we(){}, +aPg:function aPg(a){this.a=a}, +b6s:function b6s(){}, +agS:function agS(a,b,c){this.b=a +this.c=b +this.a=c}, +kV:function kV(){}, +aoQ:function aoQ(a,b,c){var _=this +_.e=a +_.b=b +_.c=null +_.a=c}, +Vs:function Vs(a,b,c){var _=this +_.e=a +_.b=b +_.c=null +_.a=c}, +D1:function D1(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.w=_.r=!1 +_.x=c +_.y=d +_.z=!1 +_.b=e +_.c=null +_.a=f}, +aps:function aps(){var _=this +_.b=_.a=null +_.d=_.c=$ +_.e=!1}, +amI:function amI(){}, +aoi:function aoi(){}, +bJ6(a,b,c){var s,r,q,p,o=a.b +o.toString +s=t.tq.a(o).b +if(s==null)o=B.a4Q +else{o=c.$2(a,new A.bb(0,b,0,1/0)) +r=s.b +q=s.c +$label0$0:{if(B.kH===r||B.kI===r||B.dX===r||B.kK===r||B.kJ===r){p=null +break $label0$0}if(B.kG===r){q.toString +p=a.oS(q) +break $label0$0}p=null}q=new A.GG(o,r,p,q) +o=q}return o}, +bhC(a,b){var s=a.a,r=b.a +if(sr)return-1 +else{s=a.b +if(s===b.b)return 0 +else return s===B.aL?1:-1}}, +t0:function t0(a,b){this.b=a +this.a=b}, +nu:function nu(a,b){var _=this +_.b=_.a=null +_.dY$=a +_.bd$=b}, +aa4:function aa4(){}, +aPz:function aPz(a){this.a=a}, +QN:function QN(a,b,c,d,e,f,g,h,i,j){var _=this +_.K=a +_.aM=_.ao=_.av=_.M=_.a5=null +_.aS=b +_.b2=c +_.bB=d +_.ct=null +_.bD=!1 +_.aa=_.S=_.R=_.dg=null +_.z8$=e +_.dI$=f +_.aZ$=g +_.f1$=h +_.fx=i +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=j +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPN:function aPN(){}, +aPO:function aPO(){}, +aPM:function aPM(){}, +aPL:function aPL(){}, +aPJ:function aPJ(){}, +aPK:function aPK(a,b){this.a=a +this.b=b}, +u1:function u1(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.e=_.d=null +_.f=!1 +_.w=_.r=null +_.x=$ +_.z=_.y=null +_.ac$=0 +_.ah$=d +_.b6$=_.b_$=0 +_.K$=!1}, +WJ:function WJ(){}, +aoj:function aoj(){}, +aok:function aok(){}, +XP:function XP(){}, +au1:function au1(){}, +au2:function au2(){}, +au3:function au3(){}, +bp7(a){var s=new A.Qx(a,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +aPA(a,b){return a}, +bJ7(a,b,c,d,e,f){var s=b==null?B.b9:b +s=new A.QK(!0,c,e,d,a,s,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +aac:function aac(){}, +jh:function jh(){}, +NI:function NI(a,b){this.a=a +this.b=b}, +QP:function QP(){}, +Qx:function Qx(a,b,c,d){var _=this +_.V=a +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aa6:function aa6(a,b,c,d,e){var _=this +_.V=a +_.aE=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +QI:function QI(a,b,c,d,e){var _=this +_.V=a +_.aE=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +QH:function QH(a,b,c){var _=this +_.a0$=a +_.fx=b +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aa8:function aa8(a,b,c,d,e,f){var _=this +_.V=a +_.aE=b +_.bj=c +_.a0$=d +_.fx=e +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=f +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Qv:function Qv(){}, +a9S:function a9S(a,b,c,d,e,f,g){var _=this +_.z9$=a +_.Wq$=b +_.za$=c +_.Wr$=d +_.a0$=e +_.fx=f +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +a9T:function a9T(a,b,c,d,e){var _=this +_.V=a +_.aE=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +M3:function M3(){}, +wr:function wr(a,b,c){this.b=a +this.c=b +this.a=c}, +JM:function JM(){}, +a9X:function a9X(a,b,c,d,e){var _=this +_.V=a +_.aE=null +_.bj=b +_.dD=_.ce=null +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +a9W:function a9W(a,b,c,d,e,f,g){var _=this +_.dn=a +_.hL=b +_.V=c +_.aE=null +_.bj=d +_.dD=_.ce=null +_.a0$=e +_.fx=f +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +a9V:function a9V(a,b,c,d,e){var _=this +_.V=a +_.aE=null +_.bj=b +_.dD=_.ce=null +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +WK:function WK(){}, +aa9:function aa9(a,b,c,d,e,f,g,h,i,j){var _=this +_.vQ=a +_.vR=b +_.dn=c +_.hL=d +_.bf=e +_.V=f +_.aE=null +_.bj=g +_.dD=_.ce=null +_.a0$=h +_.fx=i +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=j +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPP:function aPP(a,b){this.a=a +this.b=b}, +aaa:function aaa(a,b,c,d,e,f,g,h){var _=this +_.dn=a +_.hL=b +_.bf=c +_.V=d +_.aE=null +_.bj=e +_.dD=_.ce=null +_.a0$=f +_.fx=g +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=h +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPQ:function aPQ(a,b){this.a=a +this.b=b}, +a1Y:function a1Y(a,b){this.a=a +this.b=b}, +a9Z:function a9Z(a,b,c,d,e,f){var _=this +_.V=null +_.aE=a +_.bj=b +_.ce=c +_.a0$=d +_.fx=e +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=f +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aaj:function aaj(a,b,c,d){var _=this +_.bj=_.aE=_.V=null +_.ce=a +_.dj=_.dD=null +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aQ7:function aQ7(a){this.a=a}, +QC:function QC(a,b,c,d,e,f,g){var _=this +_.V=null +_.aE=a +_.bj=b +_.ce=c +_.dj=_.dD=null +_.eB=d +_.a0$=e +_.fx=f +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPr:function aPr(a){this.a=a}, +aa1:function aa1(a,b,c,d,e){var _=this +_.V=a +_.aE=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPx:function aPx(a){this.a=a}, +aab:function aab(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.es=a +_.hx=b +_.dC=c +_.ef=d +_.dn=e +_.hL=f +_.bf=g +_.ip=h +_.fo=i +_.V=j +_.a0$=k +_.fx=l +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=m +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +QK:function QK(a,b,c,d,e,f,g,h,i){var _=this +_.es=a +_.hx=b +_.dC=c +_.ef=d +_.dn=e +_.hL=!0 +_.V=f +_.a0$=g +_.fx=h +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=i +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aae:function aae(a,b,c){var _=this +_.aE=_.V=0 +_.a0$=a +_.fx=b +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +QE:function QE(a,b,c,d,e){var _=this +_.V=a +_.aE=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +QL:function QL(a,b,c,d){var _=this +_.V=a +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Qt:function Qt(a,b,c,d,e){var _=this +_.V=a +_.aE=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +tj:function tj(a,b,c,d){var _=this +_.dn=_.ef=_.dC=_.hx=_.es=null +_.V=a +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +QR:function QR(a,b,c,d,e,f,g,h,i){var _=this +_.V=a +_.aE=b +_.bj=c +_.ce=d +_.dD=e +_.fV=_.fU=_.fT=_.eB=_.dj=null +_.ea=f +_.a0$=g +_.fx=h +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=i +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +a9U:function a9U(a,b,c,d){var _=this +_.V=a +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aa7:function aa7(a,b,c){var _=this +_.a0$=a +_.fx=b +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aa_:function aa_(a,b,c,d){var _=this +_.V=a +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aa3:function aa3(a,b,c,d){var _=this +_.V=a +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aa5:function aa5(a,b,c,d){var _=this +_.V=a +_.aE=null +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aa0:function aa0(a,b,c,d,e,f,g,h){var _=this +_.V=a +_.aE=b +_.bj=c +_.ce=d +_.dD=e +_.a0$=f +_.fx=g +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=h +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPw:function aPw(a){this.a=a}, +ao7:function ao7(){}, +WL:function WL(){}, +WM:function WM(){}, +QQ:function QQ(a,b,c,d,e){var _=this +_.K=a +_.a5=null +_.M=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPR:function aPR(a){this.a=a}, +aol:function aol(){}, +aRW(a,b){var s +if(a.G(0,b))return B.bA +s=b.b +if(sa.d)return B.bz +return b.a>=a.c?B.bz:B.c_}, +bpw(a,b,c){var s,r +if(a.G(0,b))return b +s=b.b +r=a.b +if(!(s<=r))s=s<=a.d&&b.a<=a.a +else s=!0 +if(s)return c===B.r?new A.i(a.a,r):new A.i(a.c,r) +else{s=a.d +return c===B.r?new A.i(a.c,s):new A.i(a.a,s)}}, +bpu(a,b){return new A.RB(a,b==null?B.t_:b,B.a5Z)}, +bpt(a,b){return new A.RB(a,b==null?B.t_:b,B.id)}, +wp:function wp(a,b){this.a=a +this.b=b}, +il:function il(){}, +abc:function abc(){}, +RC:function RC(a,b){this.a=a +this.b=b}, +Ic:function Ic(a,b){this.a=a +this.b=b}, +aRP:function aRP(){}, +LA:function LA(a){this.a=a}, +RB:function RB(a,b,c){this.b=a +this.c=b +this.a=c}, +Hu:function Hu(a,b){this.a=a +this.b=b}, +RD:function RD(a,b){this.a=a +this.b=b}, +wo:function wo(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +BA:function BA(a,b,c){this.a=a +this.b=b +this.c=c}, +SV:function SV(a,b){this.a=a +this.b=b}, +app:function app(){}, +Bd:function Bd(){}, +aPS:function aPS(a,b,c){this.a=a +this.b=b +this.c=c}, +QM:function QM(a,b,c,d,e){var _=this +_.V=null +_.aE=a +_.bj=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +a9R:function a9R(){}, +QO:function QO(a,b,c,d,e,f,g){var _=this +_.dC=a +_.ef=b +_.V=null +_.aE=c +_.bj=d +_.a0$=e +_.fx=f +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aSQ:function aSQ(){}, +QA:function QA(a,b,c,d){var _=this +_.V=a +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +WO:function WO(){}, +ug(a,b){var s +switch(b.a){case 0:s=a +break +case 1:s=A.btO(a) +break +default:s=null}return s}, +bR8(a,b){var s +switch(b.a){case 0:s=a +break +case 1:s=A.bSM(a) +break +default:s=null}return s}, +BO(a,b,c,d,e,f,g,h,i){var s=d==null?f:d,r=c==null?f:c,q=a==null?d:a +if(q==null)q=f +return new A.abO(h,g,f,s,e,r,f>0,b,i,q)}, +a4D:function a4D(a,b){this.a=a +this.b=b}, +wv:function wv(a,b,c,d,e,f,g,h,i,j,k,l){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}, +abO:function abO(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j}, +HM:function HM(a,b,c){this.a=a +this.b=b +this.c=c}, +abP:function abP(a,b,c){var _=this +_.c=a +_.d=b +_.a=c +_.b=null}, +ww:function ww(){}, +tx:function tx(a,b){this.dY$=a +this.bd$=b +this.a=null}, +wx:function wx(a){this.a=a}, +ty:function ty(a,b,c){this.dY$=a +this.bd$=b +this.a=c}, +fh:function fh(){}, +aPV:function aPV(){}, +aPW:function aPW(a,b){this.a=a +this.b=b}, +apV:function apV(){}, +apW:function apW(){}, +apZ:function apZ(){}, +aag:function aag(a,b,c,d,e,f){var _=this +_.ac=a +_.ah=b +_.b_=$ +_.b6=!0 +_.dI$=c +_.aZ$=d +_.f1$=e +_.fx=null +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=f +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPX:function aPX(a,b,c){this.a=a +this.b=b +this.c=c}, +py:function py(){}, +aQ0:function aQ0(){}, +q2:function q2(a,b,c){var _=this +_.b=null +_.c=!1 +_.DM$=a +_.dY$=b +_.bd$=c +_.a=null}, +H5:function H5(){}, +aPY:function aPY(a,b,c){this.a=a +this.b=b +this.c=c}, +aQ_:function aQ_(a,b){this.a=a +this.b=b}, +aPZ:function aPZ(){}, +WQ:function WQ(){}, +aop:function aop(){}, +aoq:function aoq(){}, +apX:function apX(){}, +apY:function apY(){}, +QS:function QS(){}, +aPU:function aPU(a,b){this.a=a +this.b=b}, +aPT:function aPT(a,b){this.a=a +this.b=b}, +aah:function aah(a,b,c,d){var _=this +_.c9=null +_.eh=a +_.f4=b +_.a0$=c +_.fx=null +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aoo:function aoo(){}, +bJc(a,b,c,d,e){var s=new A.H6(a,e,d,c,A.aX(t.O5),0,null,null,new A.bs(),A.aX(t.v)) +s.by() +s.I(0,b) +return s}, +Be(a,b){var s,r,q,p +for(s=t.Qv,r=a,q=0;r!=null;){p=r.b +p.toString +s.a(p) +if(!p.gEm())q=Math.max(q,A.hg(b.$1(r))) +r=p.bd$}return q}, +bpb(a,b,c,d){var s,r,q,p,o,n=b.w +if(n!=null&&b.f!=null){s=b.f +s.toString +n.toString +r=B.eb.Fx(c.a-s-n)}else{n=b.x +r=n!=null?B.eb.Fx(n):B.eb}n=b.e +if(n!=null&&b.r!=null){s=b.r +s.toString +n.toString +r=r.MX(c.b-s-n)}else{n=b.y +if(n!=null)r=r.MX(n)}a.dc(r,!0) +q=b.w +if(!(q!=null)){n=b.f +q=n!=null?c.a-n-a.gC(0).a:d.yn(t.o.a(c.Y(0,a.gC(0)))).a}p=q<0||q+a.gC(0).a>c.a +o=b.e +if(!(o!=null)){n=b.r +o=n!=null?c.b-n-a.gC(0).b:d.yn(t.o.a(c.Y(0,a.gC(0)))).b}if(o<0||o+a.gC(0).b>c.b)p=!0 +b.a=new A.i(q,o) +return p}, +hf:function hf(a,b,c){var _=this +_.y=_.x=_.w=_.r=_.f=_.e=null +_.dY$=a +_.bd$=b +_.a=c}, +acm:function acm(a,b){this.a=a +this.b=b}, +H6:function H6(a,b,c,d,e,f,g,h,i,j){var _=this +_.K=!1 +_.a5=null +_.M=a +_.av=b +_.ao=c +_.aM=d +_.aS=e +_.dI$=f +_.aZ$=g +_.f1$=h +_.fx=i +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=j +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aQ4:function aQ4(a){this.a=a}, +aQ2:function aQ2(a){this.a=a}, +aQ3:function aQ3(a){this.a=a}, +aQ1:function aQ1(a){this.a=a}, +QG:function QG(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.fV=a +_.K=!1 +_.a5=null +_.M=b +_.av=c +_.ao=d +_.aM=e +_.aS=f +_.dI$=g +_.aZ$=h +_.f1$=i +_.fx=j +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=k +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPy:function aPy(a,b,c){this.a=a +this.b=b +this.c=c}, +aor:function aor(){}, +aos:function aos(){}, +q6:function q6(a){this.b=null +this.a=a}, +Sx:function Sx(){}, +a3M:function a3M(){}, +acR:function acR(a,b){this.a=a +this.b=b}, +H7:function H7(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.K=a +_.a5=b +_.M=c +_.av=d +_.ao=e +_.aM=f +_.aS=g +_.bB=_.b2=null +_.ct=h +_.bD=i +_.dg=j +_.R=null +_.S=k +_.aa=null +_.bp=$ +_.fx=l +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=m +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aQ5:function aQ5(){}, +aQ6:function aQ6(a,b,c){this.a=a +this.b=b +this.c=c}, +bKR(a,b){var s=new A.bL(a,b,B.J,-1) +return new A.acP(s,s,s,s,s,s,B.aP)}, +acP:function acP(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +bM2(a){var s,r,q,p,o,n=$.cF(),m=n.d +if(m==null){s=self.window.devicePixelRatio +m=s===0?1:s}s=A.bqR(a.as,a.gnv().b1(0,m)).a2(0,m) +r=s.a +q=s.b +p=s.c +s=s.d +o=n.d +if(o==null){n=self.window.devicePixelRatio +o=n===0?1:n}return new A.Tr(new A.bb(r/o,q/o,p/o,s/o),new A.bb(r,q,p,s),o)}, +Tr:function Tr(a,b,c){this.a=a +this.b=b +this.c=c}, +Bf:function Bf(){}, +aov:function aov(){}, +bJ3(a){var s +for(s=t.NW;a!=null;){if(s.b(a))return a +a=a.gbs(a)}return null}, +bJf(a,b,c){var s=b.aq.a)return q +else if(a0)return a.ajE(0,1e5) +return!0}, +Jd:function Jd(a){this.a=a +this.b=null}, +Bt:function Bt(a,b){this.a=a +this.b=b}, +aNr:function aNr(a){this.a=a}, +iQ:function iQ(){}, +aRj:function aRj(a){this.a=a}, +aRl:function aRl(a){this.a=a}, +aRm:function aRm(a,b){this.a=a +this.b=b}, +aRn:function aRn(a){this.a=a}, +aRi:function aRi(a){this.a=a}, +aRk:function aRk(a){this.a=a}, +bh1(){var s=new A.Cf(new A.bH(new A.aM($.aK,t.D),t.h)) +s.a9f() +return s}, +Ce:function Ce(a,b){var _=this +_.a=null +_.b=!1 +_.c=null +_.d=a +_.e=null +_.f=b +_.r=$}, +Cf:function Cf(a){this.a=a +this.c=this.b=null}, +aW_:function aW_(a){this.a=a}, +T_:function T_(a){this.a=a}, +abe:function abe(){}, +aS7:function aS7(a){this.a=a}, +aAv(a){var s=$.ben.i(0,a) +if(s==null){s=$.blw +$.blw=s+1 +$.ben.u(0,a,s) +$.blv.u(0,s,a)}return s}, +bJJ(a,b){var s +if(a.length!==b.length)return!1 +for(s=0;s=0){q.am(r,0,p).split("\n") +q.c5(r,p+2) +n.push(new A.Om())}else n.push(new A.Om())}return n}, +bJP(a){var s +$label0$0:{if("AppLifecycleState.resumed"===a){s=B.d8 +break $label0$0}if("AppLifecycleState.inactive"===a){s=B.iX +break $label0$0}if("AppLifecycleState.hidden"===a){s=B.iY +break $label0$0}if("AppLifecycleState.paused"===a){s=B.iZ +break $label0$0}if("AppLifecycleState.detached"===a){s=B.f0 +break $label0$0}s=null +break $label0$0}return s}, +Hz:function Hz(){}, +aSt:function aSt(a){this.a=a}, +aSs:function aSs(a){this.a=a}, +b0G:function b0G(){}, +b0H:function b0H(a){this.a=a}, +b0I:function b0I(a){this.a=a}, +axP:function axP(){}, +LG(a){var s=0,r=A.r(t.H) +var $async$LG=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(B.c6.eO("Clipboard.setData",A.b3(["text",a.a],t.N,t.z),t.H),$async$LG) +case 2:return A.p(null,r)}}) +return A.q($async$LG,r)}, +azc(a){var s=0,r=A.r(t.VD),q,p +var $async$azc=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=3 +return A.x(B.c6.eO("Clipboard.getData",a,t.a),$async$azc) +case 3:p=c +if(p==null){q=null +s=1 +break}q=new A.ym(A.cE(J.bG(p,"text"))) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$azc,r)}, +ym:function ym(a){this.a=a}, +aEU:function aEU(a,b){this.a=a +this.b=!1 +this.c=b}, +aEV:function aEV(){}, +aEX:function aEX(a){this.a=a}, +aEW:function aEW(a){this.a=a}, +bnw(a,b,c,d,e,f){return new A.iL(d,c,a,f,!0)}, +bfw(a,b,c,d,e){return new A.ol(c,b,null,e,d)}, +bny(a,b,c,d,e){return A.bfw(a,b,c,!0,e)}, +bnx(a,b,c,d,e){return new A.FF(d,c,a,e,!1)}, +bGm(a){var s,r,q=a.d,p=B.a1e.i(0,q) +if(p==null)p=new A.K(q) +q=a.e +s=B.a0U.i(0,q) +if(s==null)s=new A.u(q) +r=a.a +switch(a.b.a){case 0:return new A.iL(p,s,a.f,r,a.r) +case 1:return A.bfw(B.hD,s,p,a.r,r) +case 2:return A.bnx(a.f,B.hD,s,p,r)}}, +FG:function FG(a,b,c){this.c=a +this.a=b +this.b=c}, +kt:function kt(){}, +iL:function iL(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.f=e}, +ol:function ol(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.f=e}, +FF:function FF(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.f=e}, +aGn:function aGn(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1 +_.e=null}, +a5R:function a5R(a,b){this.a=a +this.b=b}, +Oc:function Oc(a,b){this.a=a +this.b=b}, +a5S:function a5S(a,b,c,d){var _=this +_.a=null +_.b=a +_.c=b +_.d=null +_.e=c +_.f=d}, +akA:function akA(){}, +aID:function aID(a,b,c){this.a=a +this.b=b +this.c=c}, +aJB(a){var s=A.w(a).h("m0<1,u>") +return A.jc(new A.m0(a,new A.aJC(),s),s.h("z.E"))}, +aIE:function aIE(){}, +u:function u(a){this.a=a}, +aJC:function aJC(){}, +K:function K(a){this.a=a}, +akC:function akC(){}, +aNF(a,b,c,d){return new A.AP(a,c,b,d)}, +aKK(a){return new A.OV(a)}, +pJ:function pJ(a,b){this.a=a +this.b=b}, +AP:function AP(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +OV:function OV(a){this.a=a}, +aUj:function aUj(){}, +aI5:function aI5(){}, +aI7:function aI7(){}, +aTV:function aTV(){}, +aTX:function aTX(a,b){this.a=a +this.b=b}, +aTZ:function aTZ(){}, +bMI(a){var s,r,q +for(s=A.w(a),s=s.h("@<1>").ak(s.y[1]),r=new A.bt(J.az(a.a),a.b,s.h("bt<1,2>")),s=s.y[1];r.H();){q=r.a +if(q==null)q=s.a(q) +if(!q.k(0,B.m))return q}return null}, +aKU:function aKU(a,b){this.a=a +this.b=b}, +OX:function OX(){}, +f4:function f4(){}, +ahI:function ahI(){}, +aqL:function aqL(a,b){this.a=a +this.b=b}, +nt:function nt(a){this.a=a}, +alv:function alv(){}, +uy:function uy(a,b,c){this.a=a +this.b=b +this.$ti=c}, +axj:function axj(a,b){this.a=a +this.b=b}, +rL:function rL(a,b){this.a=a +this.b=b}, +aKE:function aKE(a,b){this.a=a +this.b=b}, +mm:function mm(a,b){this.a=a +this.b=b}, +aDI:function aDI(a){this.a=a}, +aDM:function aDM(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aDL:function aDL(a,b){this.a=a +this.b=b}, +aDN:function aDN(a,b,c){this.a=a +this.b=b +this.c=c}, +boM(a){var s,r,q,p=t.wh.a(a.i(0,"touchOffset")) +if(p==null)s=null +else{s=J.al(p) +r=s.i(p,0) +r.toString +A.iA(r) +s=s.i(p,1) +s.toString +s=new A.i(r,A.iA(s))}r=a.i(0,"progress") +r.toString +A.iA(r) +q=a.i(0,"swipeEdge") +q.toString +return new A.a9f(s,r,B.Z3[A.dS(q)])}, +Ss:function Ss(a,b){this.a=a +this.b=b}, +a9f:function a9f(a,b,c){this.a=a +this.b=b +this.c=c}, +GO:function GO(a,b){this.a=a +this.b=b}, +aAI:function aAI(){this.a=$}, +bIW(a){var s,r,q,p,o={} +o.a=null +s=new A.aOJ(o,a).$0() +r=$.bjk().d +q=A.w(r).h("bk<1>") +p=A.jc(new A.bk(r,q),q.h("z.E")).G(0,s.goK()) +q=J.bG(a,"type") +q.toString +A.cE(q) +$label0$0:{if("keydown"===q){r=new A.w7(o.a,p,s) +break $label0$0}if("keyup"===q){r=new A.GZ(null,!1,s) +break $label0$0}r=A.X(A.N9("Unknown key event type: "+q))}return r}, +zV:function zV(a,b){this.a=a +this.b=b}, +mf:function mf(a,b){this.a=a +this.b=b}, +Qj:function Qj(){}, +th:function th(){}, +aOJ:function aOJ(a,b){this.a=a +this.b=b}, +w7:function w7(a,b,c){this.a=a +this.b=b +this.c=c}, +GZ:function GZ(a,b,c){this.a=a +this.b=b +this.c=c}, +aOM:function aOM(a,b){this.a=a +this.d=b}, +fm:function fm(a,b){this.a=a +this.b=b}, +anH:function anH(){}, +anG:function anG(){}, +a9F:function a9F(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +R1:function R1(a,b){var _=this +_.b=_.a=null +_.f=_.e=_.d=_.c=!1 +_.r=a +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1}, +aQv:function aQv(a){this.a=a}, +aQw:function aQw(a){this.a=a}, +fV:function fV(a,b,c,d,e,f){var _=this +_.a=a +_.b=null +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.x=_.w=!1}, +aQs:function aQs(){}, +aQt:function aQt(){}, +aQr:function aQr(){}, +aQu:function aQu(){}, +bDx(a,b){var s,r,q,p,o=A.b([],t.bt),n=J.al(a),m=0,l=0 +while(!0){if(!(m1 +if(a1===0)m=0===a1 +else m=!1 +l=n&&a3a +q=!l +i=q&&!m&&sd||!q||k +if(c===o)return new A.Ia(c,p,r) +else if((!h||i)&&s)return new A.adb(new A.cZ(!n?a-1:b,a),c,p,r) +else if((b===a||j)&&s)return new A.adc(B.d.am(a0,d,d+(a1-d)),a,c,p,r) +else if(e)return new A.add(a0,new A.cZ(b,a),c,p,r) +return new A.Ia(c,p,r)}, +wH:function wH(){}, +adc:function adc(a,b,c,d,e){var _=this +_.d=a +_.e=b +_.a=c +_.b=d +_.c=e}, +adb:function adb(a,b,c,d){var _=this +_.d=a +_.a=b +_.b=c +_.c=d}, +add:function add(a,b,c,d,e){var _=this +_.d=a +_.e=b +_.a=c +_.b=d +_.c=e}, +Ia:function Ia(a,b,c){this.a=a +this.b=b +this.c=c}, +ar9:function ar9(){}, +bEW(a){return new A.MZ(a,!0,"")}, +a6M:function a6M(a,b){this.a=a +this.b=b}, +wI:function wI(){}, +alL:function alL(a,b){this.a=a +this.b=b}, +b7p:function b7p(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=!1}, +MZ:function MZ(a,b,c){this.a=a +this.b=b +this.c=c}, +aE8:function aE8(a,b,c){this.a=a +this.b=b +this.c=c}, +bqa(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){return new A.aVs(p,i,l,!1,!0,c,m,n,!0,f,h,o,j,!0,a,!1)}, +bQy(a){var s +$label0$0:{if("TextAffinity.downstream"===a){s=B.v +break $label0$0}if("TextAffinity.upstream"===a){s=B.aL +break $label0$0}s=null +break $label0$0}return s}, +bq9(a){var s,r,q,p,o=J.al(a),n=A.cE(o.i(a,"text")),m=A.lN(o.i(a,"selectionBase")) +if(m==null)m=-1 +s=A.lN(o.i(a,"selectionExtent")) +if(s==null)s=-1 +r=A.bQy(A.eE(o.i(a,"selectionAffinity"))) +if(r==null)r=B.v +q=A.qx(o.i(a,"selectionIsDirectional")) +p=A.dJ(r,m,s,q===!0) +m=A.lN(o.i(a,"composingBase")) +if(m==null)m=-1 +o=A.lN(o.i(a,"composingExtent")) +return new A.eN(n,p,new A.cZ(m,o==null?-1:o))}, +bqb(a){var s=A.b([],t.u1),r=$.bqc +$.bqc=r+1 +return new A.aVt(s,r,a)}, +bQA(a){var s +$label0$0:{if("TextInputAction.none"===a){s=B.aa9 +break $label0$0}if("TextInputAction.unspecified"===a){s=B.aaa +break $label0$0}if("TextInputAction.go"===a){s=B.aad +break $label0$0}if("TextInputAction.search"===a){s=B.aae +break $label0$0}if("TextInputAction.send"===a){s=B.aaf +break $label0$0}if("TextInputAction.next"===a){s=B.aag +break $label0$0}if("TextInputAction.previous"===a){s=B.aah +break $label0$0}if("TextInputAction.continueAction"===a){s=B.aai +break $label0$0}if("TextInputAction.join"===a){s=B.aaj +break $label0$0}if("TextInputAction.route"===a){s=B.aab +break $label0$0}if("TextInputAction.emergencyCall"===a){s=B.aac +break $label0$0}if("TextInputAction.done"===a){s=B.GZ +break $label0$0}if("TextInputAction.newline"===a){s=B.GY +break $label0$0}s=A.X(A.ze(A.b([A.ra("Unknown text input action: "+a)],t._)))}return s}, +bQz(a){var s +$label0$0:{if("FloatingCursorDragState.start"===a){s=B.wx +break $label0$0}if("FloatingCursorDragState.update"===a){s=B.jQ +break $label0$0}if("FloatingCursorDragState.end"===a){s=B.jR +break $label0$0}s=A.X(A.ze(A.b([A.ra("Unknown text cursor action: "+a)],t._)))}return s}, +aTd:function aTd(a,b){this.a=a +this.b=b}, +aTe:function aTe(a,b){this.a=a +this.b=b}, +C8:function C8(a,b,c){this.a=a +this.b=b +this.c=c}, +kP:function kP(a,b){this.a=a +this.b=b}, +aV8:function aV8(a,b){this.a=a +this.b=b}, +aVs:function aVs(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 +_.Q=k +_.as=l +_.at=m +_.ax=n +_.ay=o +_.ch=p}, +N5:function N5(a,b){this.a=a +this.b=b}, +GX:function GX(a,b,c){this.a=a +this.b=b +this.c=c}, +eN:function eN(a,b,c){this.a=a +this.b=b +this.c=c}, +aVc:function aVc(a,b){this.a=a +this.b=b}, +np:function np(a,b){this.a=a +this.b=b}, +aVT:function aVT(){}, +aVq:function aVq(){}, +BB:function BB(a,b,c){this.a=a +this.b=b +this.c=c}, +aVt:function aVt(a,b,c){var _=this +_.d=_.c=_.b=_.a=null +_.e=a +_.f=b +_.r=c}, +adh:function adh(a,b,c){var _=this +_.a=a +_.b=b +_.c=$ +_.d=null +_.e=$ +_.f=c +_.w=_.r=!1}, +aVJ:function aVJ(a){this.a=a}, +aVH:function aVH(){}, +aVG:function aVG(a,b){this.a=a +this.b=b}, +aVI:function aVI(a){this.a=a}, +aVK:function aVK(a){this.a=a}, +SO:function SO(){}, +amK:function amK(){}, +b4A:function b4A(){}, +atI:function atI(){}, +adX:function adX(a,b){this.a=a +this.b=b}, +adY:function adY(){this.a=$ +this.b=null}, +aWV:function aWV(){}, +bPm(a){var s=A.bn("parent") +a.nJ(new A.b96(s)) +return s.bl()}, +xJ(a,b){return new A.qE(a,b,null)}, +ZJ(a,b){var s,r,q +if(a.e==null)return!1 +s=t.L1 +r=a.k9(s) +for(;q=r!=null,q;){if(b.$1(r))break +r=A.bPm(r).k9(s)}return q}, +bdR(a){var s={} +s.a=null +A.ZJ(a,new A.avW(s)) +return B.K3}, +bdT(a,b,c){var s={} +s.a=null +if((b==null?null:A.J(b))==null)A.ay(c) +A.ZJ(a,new A.avZ(s,b,a,c)) +return s.a}, +bdS(a,b){var s={} +s.a=null +A.ay(b) +A.ZJ(a,new A.avX(s,null,b)) +return s.a}, +avV(a,b,c){var s,r=b==null?null:A.J(b) +if(r==null)r=A.ay(c) +s=a.r.i(0,r) +if(c.h("cm<0>?").b(s))return s +else return null}, +xK(a,b,c){var s={} +s.a=null +A.ZJ(a,new A.avY(s,b,a,c)) +return s.a}, +bBL(a,b,c){var s={} +s.a=null +A.ZJ(a,new A.aw_(s,b,a,c)) +return s.a}, +bf0(a,b,c,d,e,f,g,h,i,j){return new A.zh(d,e,!1,a,j,h,i,g,f,c,null)}, +blM(a){return new A.Mn(a,new A.bW(A.b([],t.ot),t.wS))}, +b96:function b96(a){this.a=a}, +c9:function c9(){}, +cm:function cm(){}, +fq:function fq(){}, +e1:function e1(a,b,c){var _=this +_.c=a +_.a=b +_.b=null +_.$ti=c}, +avT:function avT(){}, +qE:function qE(a,b,c){this.d=a +this.e=b +this.a=c}, +avW:function avW(a){this.a=a}, +avZ:function avZ(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +avX:function avX(a,b,c){this.a=a +this.b=b +this.c=c}, +avY:function avY(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aw_:function aw_(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +TM:function TM(a,b,c){var _=this +_.d=a +_.e=b +_.a=null +_.b=c +_.c=null}, +aYA:function aYA(a){this.a=a}, +TL:function TL(a,b,c,d,e){var _=this +_.f=a +_.r=b +_.w=c +_.b=d +_.a=e}, +zh:function zh(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.c=a +_.d=b +_.e=c +_.w=d +_.x=e +_.y=f +_.z=g +_.Q=h +_.as=i +_.ax=j +_.a=k}, +Vg:function Vg(a,b){var _=this +_.f=_.e=_.d=!1 +_.r=a +_.a=null +_.b=b +_.c=null}, +b20:function b20(a){this.a=a}, +b1Z:function b1Z(a){this.a=a}, +b1U:function b1U(a){this.a=a}, +b1V:function b1V(a){this.a=a}, +b1T:function b1T(a,b){this.a=a +this.b=b}, +b1Y:function b1Y(a){this.a=a}, +b1W:function b1W(a){this.a=a}, +b1X:function b1X(a,b){this.a=a +this.b=b}, +b2_:function b2_(a,b){this.a=a +this.b=b}, +aeu:function aeu(a){this.a=a +this.b=null}, +Mn:function Mn(a,b){this.c=a +this.a=b +this.b=null}, +uq:function uq(){}, +uC:function uC(){}, +ld:function ld(){}, +a2t:function a2t(){}, +tb:function tb(){}, +a9k:function a9k(a){var _=this +_.f=_.e=$ +_.a=a +_.b=null}, +JC:function JC(){}, +W7:function W7(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.f=b +_.DK$=c +_.DL$=d +_.aRl$=e +_.aRm$=f +_.a=g +_.b=null +_.$ti=h}, +W8:function W8(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.f=b +_.DK$=c +_.DL$=d +_.aRl$=e +_.aRm$=f +_.a=g +_.b=null +_.$ti=h}, +Uo:function Uo(a,b,c,d){var _=this +_.c=a +_.d=b +_.a=c +_.b=null +_.$ti=d}, +af7:function af7(){}, +af5:function af5(){}, +akn:function akn(){}, +YR:function YR(){}, +YS:function YS(){}, +bkx(a,b,c){return new A.KC(a,b,c,null)}, +KC:function KC(a,b,c,d){var _=this +_.c=a +_.e=b +_.f=c +_.a=d}, +afl:function afl(a,b,c){var _=this +_.jk$=a +_.dQ$=b +_.a=null +_.b=c +_.c=null}, +afk:function afk(a,b,c,d,e,f,g,h,i){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.z=g +_.c=h +_.a=i}, +ate:function ate(){}, +bRj(a,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=null +if(a==null||a.length===0)return B.b.ga9(a0) +s=t.N +r=t.da +q=A.jF(b,b,b,s,r) +p=A.jF(b,b,b,s,r) +o=A.jF(b,b,b,s,r) +n=A.jF(b,b,b,s,r) +m=A.jF(b,b,b,t.ob,r) +for(l=0;l<1;++l){k=a0[l] +s=k.a +r=B.cY.i(0,s) +if(r==null)r=s +j=k.c +i=B.dk.i(0,j) +if(i==null)i=j +i=r+"_null_"+A.j(i) +if(q.i(0,i)==null)q.u(0,i,k) +r=B.cY.i(0,s) +r=(r==null?s:r)+"_null" +if(o.i(0,r)==null)o.u(0,r,k) +r=B.cY.i(0,s) +if(r==null)r=s +i=B.dk.i(0,j) +if(i==null)i=j +i=r+"_"+A.j(i) +if(p.i(0,i)==null)p.u(0,i,k) +r=B.cY.i(0,s) +s=r==null?s:r +if(n.i(0,s)==null)n.u(0,s,k) +s=B.dk.i(0,j) +if(s==null)s=j +if(m.i(0,s)==null)m.u(0,s,k)}for(h=b,g=h,f=0;f"))}, +LT:function LT(a,b){this.a=a +this.b=b}, +kh:function kh(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.$ti=e}, +F4:function F4(a,b,c,d){var _=this +_.c=a +_.d=b +_.a=c +_.$ti=d}, +Vj:function Vj(a,b){var _=this +_.d=null +_.e=$ +_.a=null +_.b=a +_.c=null +_.$ti=b}, +b28:function b28(a,b){this.a=a +this.b=b}, +b27:function b27(a,b){this.a=a +this.b=b}, +b29:function b29(a,b){this.a=a +this.b=b}, +b26:function b26(a,b,c){this.a=a +this.b=b +this.c=c}, +KP:function KP(a,b){this.c=a +this.a=b}, +TS:function TS(a){var _=this +_.d=null +_.e=$ +_.f=!1 +_.a=null +_.b=a +_.c=null}, +aYX:function aYX(a){this.a=a}, +aZ1:function aZ1(a){this.a=a}, +aZ0:function aZ0(a,b,c){this.a=a +this.b=b +this.c=c}, +aYZ:function aYZ(a){this.a=a}, +aZ_:function aZ_(a){this.a=a}, +aYY:function aYY(a){this.a=a}, +FE:function FE(a){this.a=a}, +Oa:function Oa(a){var _=this +_.ac$=0 +_.ah$=a +_.b6$=_.b_$=0 +_.K$=!1}, +uv:function uv(){}, +am8:function am8(a){this.a=a}, +brL(a,b){a.cc(new A.b80(b)) +b.$1(a)}, +bex(a,b){return new A.n4(b,a,null)}, +eP(a){var s=a.bh(t.I) +return s==null?null:s.w}, +bg1(a,b){return new A.Pu(b,a,null)}, +bC5(a,b){return new A.a_o(b,a,null)}, +ew(a,b,c,d,e){return new A.uO(d,b,e,a,c)}, +LD(a,b,c){return new A.uH(c,b,a,null)}, +az_(a,b,c){return new A.a0Y(a,c,b,null)}, +a0W(a,b,c){return new A.DY(c,b,a,null)}, +bCQ(a,b){return new A.j1(new A.ayZ(b,B.ce,a),null)}, +adO(a,b,c,d,e){return new A.In(d,a,e,c,b,null)}, +bh4(a,b){return new A.In(A.bLK(a),B.a5,!0,null,b,null)}, +bqx(a,b){return new A.In(A.pH(b.a,b.b,0),null,!0,null,a,null)}, +bLK(a){var s,r,q +if(a===0){s=new A.by(new Float64Array(16)) +s.ci() +return s}r=Math.sin(a) +if(r===1)return A.aWJ(1,0) +if(r===-1)return A.aWJ(-1,0) +q=Math.cos(a) +if(q===-1)return A.aWJ(0,-1) +return A.aWJ(r,q)}, +aWJ(a,b){var s=new Float64Array(16) +s[0]=b +s[1]=a +s[4]=-a +s[5]=b +s[10]=1 +s[15]=1 +return new A.by(s)}, +beg(a,b,c,d){return new A.E8(b,d,c,a,null)}, +a3B(a){return new A.a3A(a,null)}, +bmL(a,b,c){return new A.a41(c,b,a,null)}, +l8(a,b,c){return new A.iF(B.a5,c,b,a,null)}, +aJ6(a,b){return new A.Ok(b,a,new A.dp(b,t.xe))}, +fF(a,b,c){return new A.iR(c,b,a,null)}, +aSW(a,b){return new A.iR(b.a,b.b,a,null)}, +btR(a,b,c){var s,r +switch(b.a){case 0:s=a.bh(t.I) +s.toString +r=A.biN(s.w) +return r +case 1:return B.a7}}, +kL(a,b,c,d,e){return new A.Sg(a,e,d,c,b,null)}, +kA(a,b,c,d,e,f,g,h){return new A.ta(e,g,f,a,h,c,b,d)}, +GK(a,b,c){return new A.ta(0,0,0,a,null,null,b,c)}, +bIu(a,b,c,d,e,f,g,h){var s,r,q,p,o=null +switch(f.a){case 0:s=new A.bI(c,e) +break +case 1:s=new A.bI(e,c) +break +default:s=o}r=s.a +q=s.b +p=q +return A.kA(a,b,d,o,r,p,g,h)}, +jU(a,b,c,d,e){return new A.aaP(B.b0,c,d,b,null,B.d3,e,a,null)}, +hm(a,b,c,d){return new A.LP(B.b1,c,d,b,null,B.d3,null,a,null)}, +m1(a,b){return new A.EQ(b,B.hB,a,null)}, +IH(a,b,c){return new A.aeG(a,c,b,null)}, +bgt(a,b,c,d,e,f,g,h,i,j,k,l,m){return new A.Hf(h,i,j,!0,c,A.bpi(l,1),b,a,g,m,k,e,d,A.bqW(h,A.bpi(l,1)),null)}, +bpi(a,b){var s,r,q,p,o=null +$label0$0:{s=1===b +r=b +q=a +if(s){s=q +break $label0$0}if(B.aq.k(0,a)){s=r +s=typeof s=="number" +p=!0}else{p=!0 +s=!1}if(s){s=new A.k2(p?r:b) +break $label0$0}s=a +break $label0$0 +s=o}return s}, +blx(a){var s +a.bh(t.l4) +s=$.l3() +return s}, +FX(a,b,c,d,e,f,g){return new A.a6k(d,g,c,e,f,a,b,null)}, +pK(a,b,c,d,e,f){return new A.Gc(d,f,e,b,a,c)}, +zF(a,b,c){return new A.Fk(b,a,c)}, +dg(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4){var s=null +return new A.Hw(new A.aSh(f,b,p,s,s,a9,a,s,s,s,b0,s,s,i,j,s,s,s,s,a8,q,l,n,o,e,s,m,s,s,s,s,s,s,s,k,s,b4,a7!=null?new A.abh(a7,s):s,b3,b1,b2,a6,a4,s,s,s,s,s,s,r,a0,a5,s,s,s,s,a1,a2,a3,s),d,h,g,!1,c,s)}, +bCb(a){return new A.a_Q(a,null)}, +as2:function as2(a,b,c){var _=this +_.y2=a +_.c=_.b=_.a=_.ax=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +b81:function b81(a,b){this.a=a +this.b=b}, +b80:function b80(a){this.a=a}, +as3:function as3(){}, +n4:function n4(a,b,c){this.w=a +this.b=b +this.a=c}, +Pu:function Pu(a,b,c){this.e=a +this.c=b +this.a=c}, +a_o:function a_o(a,b,c){this.e=a +this.c=b +this.a=c}, +uO:function uO(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +uH:function uH(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +a0Y:function a0Y(a,b,c,d){var _=this +_.e=a +_.r=b +_.c=c +_.a=d}, +DY:function DY(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +ayZ:function ayZ(a,b,c){this.a=a +this.b=b +this.c=c}, +a8H:function a8H(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.c=g +_.a=h}, +a8I:function a8I(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.c=f +_.a=g}, +In:function In(a,b,c,d,e,f){var _=this +_.e=a +_.r=b +_.w=c +_.x=d +_.c=e +_.a=f}, +yv:function yv(a,b,c){this.e=a +this.c=b +this.a=c}, +E8:function E8(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.x=c +_.c=d +_.a=e}, +a3A:function a3A(a,b){this.c=a +this.a=b}, +a41:function a41(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +Hh:function Hh(a,b,c){this.e=a +this.c=b +this.a=c}, +cu:function cu(a,b,c){this.e=a +this.c=b +this.a=c}, +ke:function ke(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +iF:function iF(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +o3:function o3(a,b,c){this.e=a +this.c=b +this.a=c}, +Ok:function Ok(a,b,c){this.f=a +this.b=b +this.a=c}, +yH:function yH(a,b,c){this.e=a +this.c=b +this.a=c}, +iR:function iR(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +lW:function lW(a,b,c){this.e=a +this.c=b +this.a=c}, +a6c:function a6c(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +Gp:function Gp(a,b,c){this.e=a +this.c=b +this.a=c}, +amk:function amk(a,b){var _=this +_.c=_.b=_.a=_.ch=_.ax=_.k4=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +a5v:function a5v(a,b){this.c=a +this.a=b}, +a5u:function a5u(a,b){this.c=a +this.a=b}, +abR:function abR(a,b,c){this.e=a +this.c=b +this.a=c}, +Sg:function Sg(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.c=e +_.a=f}, +a5g:function a5g(a,b,c,d){var _=this +_.c=a +_.r=b +_.w=c +_.a=d}, +Wj:function Wj(a,b,c,d,e,f,g){var _=this +_.z=a +_.e=b +_.f=c +_.r=d +_.w=e +_.c=f +_.a=g}, +akc:function akc(a,b,c){var _=this +_.k4=$ +_.ok=a +_.c=_.b=_.a=_.ch=_.ax=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +ta:function ta(a,b,c,d,e,f,g,h){var _=this +_.f=a +_.r=b +_.w=c +_.x=d +_.y=e +_.z=f +_.b=g +_.a=h}, +a9d:function a9d(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.f=c +_.r=d +_.x=e +_.a=f}, +a3L:function a3L(){}, +aaP:function aaP(a,b,c,d,e,f,g,h,i){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.z=g +_.c=h +_.a=i}, +LP:function LP(a,b,c,d,e,f,g,h,i){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.z=g +_.c=h +_.a=i}, +EX:function EX(a,b,c,d){var _=this +_.f=a +_.r=b +_.b=c +_.a=d}, +EQ:function EQ(a,b,c,d){var _=this +_.f=a +_.r=b +_.b=c +_.a=d}, +aeG:function aeG(a,b,c,d){var _=this +_.f=a +_.y=b +_.c=c +_.a=d}, +Hf:function Hf(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.z=g +_.Q=h +_.as=i +_.at=j +_.ax=k +_.ay=l +_.ch=m +_.c=n +_.a=o}, +a9E:function a9E(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.d=a +_.e=b +_.f=c +_.r=d +_.w=e +_.x=f +_.y=g +_.z=h +_.Q=i +_.as=j +_.at=k +_.ax=l +_.ay=m +_.ch=n +_.CW=o +_.cx=p +_.a=q}, +a6k:function a6k(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.r=b +_.x=c +_.y=d +_.as=e +_.at=f +_.c=g +_.a=h}, +Gc:function Gc(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.c=e +_.a=f}, +mx:function mx(a,b){this.c=a +this.a=b}, +Fk:function Fk(a,b,c){this.e=a +this.c=b +this.a=c}, +ZD:function ZD(a,b,c){this.e=a +this.c=b +this.a=c}, +Hw:function Hw(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.c=f +_.a=g}, +OT:function OT(a,b){this.c=a +this.a=b}, +a_Q:function a_Q(a,b){this.c=a +this.a=b}, +uZ:function uZ(a,b,c){this.e=a +this.c=b +this.a=c}, +a5f:function a5f(a,b,c){this.e=a +this.c=b +this.a=c}, +vw:function vw(a,b){this.c=a +this.a=b}, +j1:function j1(a,b){this.c=a +this.a=b}, +uL:function uL(a,b,c){this.e=a +this.c=b +this.a=c}, +Wx:function Wx(a,b,c,d,e){var _=this +_.es=a +_.V=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +bt3(a,b,c){b.akz(a) +b.a_Q()}, +bqX(){var s=null,r=A.b([],t.GA),q=$.aK,p=$.aa(),o=A.b([],t.Jh),n=A.bc(7,s,!1,t.JI),m=t.S,l=t.j2 +m=new A.aeF(s,s,$,r,s,!0,new A.bH(new A.aM(q,t.D),t.h),!1,s,!1,$,s,$,$,$,A.D(t.K,t.Ju),!1,0,!1,$,0,s,$,$,new A.aqK(A.C(t.Q)),$,$,$,new A.cD(s,p,t.Yv),$,s,o,s,A.bRo(),new A.a4O(A.bRn(),n,t.G7),!1,0,A.D(m,t.h1),A.ek(m),A.b([],l),A.b([],l),s,!1,B.fI,!0,!1,s,B.G,B.G,s,0,s,!1,s,s,0,A.mc(s,t.qL),new A.aNY(A.D(m,t.rr),A.D(t.Ld,t.iD)),new A.aFC(A.D(m,t.cK)),new A.aO0(),A.D(m,t.YX),$,!1,B.Ua) +m.kW() +m.arz() +return m}, +b8m:function b8m(a){this.a=a}, +b8n:function b8n(a){this.a=a}, +fY:function fY(){}, +Tx:function Tx(){}, +b8l:function b8l(a,b){this.a=a +this.b=b}, +aXD:function aXD(a,b){this.a=a +this.b=b}, +R8:function R8(a,b,c){this.b=a +this.c=b +this.a=c}, +aQD:function aQD(a,b,c){this.a=a +this.b=b +this.c=c}, +aQE:function aQE(a){this.a=a}, +R6:function R6(a,b){var _=this +_.c=_.b=_.a=_.ay=_.ax=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +aeF:function aeF(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4){var _=this +_.hL$=a +_.bf$=b +_.ip$=c +_.fo$=d +_.pB$=e +_.DE$=f +_.Kz$=g +_.b01$=h +_.Vx$=i +_.Vy$=j +_.Wn$=k +_.DH$=l +_.adP$=m +_.Wo$=n +_.vT$=o +_.z7$=p +_.b04$=q +_.DI$=r +_.KK$=s +_.adT$=a0 +_.Wp$=a1 +_.KL$=a2 +_.tM$=a3 +_.fV$=a4 +_.ea$=a5 +_.aS$=a6 +_.b2$=a7 +_.bB$=a8 +_.ct$=a9 +_.bD$=b0 +_.dg$=b1 +_.eu$=b2 +_.i9$=b3 +_.na$=b4 +_.nb$=b5 +_.pH$=b6 +_.ha$=b7 +_.hJ$=b8 +_.kt$=b9 +_.hK$=c0 +_.dP$=c1 +_.fE$=c2 +_.kT$=c3 +_.fF$=c4 +_.vN$=c5 +_.r0$=c6 +_.r1$=c7 +_.vO$=c8 +_.r2$=c9 +_.r3$=d0 +_.Vw$=d1 +_.es$=d2 +_.hx$=d3 +_.dC$=d4 +_.ef$=d5 +_.dn$=d6 +_.Wk$=d7 +_.mk$=d8 +_.r7$=d9 +_.Wl$=e0 +_.Wm$=e1 +_.adO$=e2 +_.b02$=e3 +_.b03$=e4 +_.a=!1 +_.b=null +_.c=0}, +WU:function WU(){}, +Yn:function Yn(){}, +Yo:function Yo(){}, +Yp:function Yp(){}, +Yq:function Yq(){}, +Yr:function Yr(){}, +Ys:function Ys(){}, +Yt:function Yt(){}, +Eq(a,b,c){return new A.a1W(b,c,a,null)}, +dD(a,b,c,d,e,f,g,h,i,j){var s +if(j!=null||g!=null){s=e==null?null:e.Zo(g,j) +if(s==null)s=A.jx(g,j)}else s=e +return new A.a1w(b,a,i,d,f,s,h,c,null)}, +a1W:function a1W(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +a1w:function a1w(a,b,c,d,e,f,g,h,i){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.x=f +_.y=g +_.as=h +_.a=i}, +ahC:function ahC(a,b,c){this.b=a +this.c=b +this.a=c}, +n1:function n1(a,b){this.a=a +this.b=b}, +fz:function fz(a,b,c){this.a=a +this.b=b +this.c=c}, +bln(){var s=$.yB +if(s!=null)s.hW(0) +s=$.yB +if(s!=null)s.t() +$.yB=null +if($.r0!=null)$.r0=null}, +a1y:function a1y(){}, +aA9:function aA9(a,b){this.a=a +this.b=b}, +aAJ(a,b,c,d,e){return new A.uQ(b,e,d,a,c)}, +bDw(a,b){var s=null +return new A.j1(new A.aAK(s,s,s,b,a),s)}, +uQ:function uQ(a,b,c,d,e){var _=this +_.w=a +_.x=b +_.y=c +_.b=d +_.a=e}, +aAK:function aAK(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +am9:function am9(a){this.a=a}, +bDy(){switch(A.ci().a){case 0:var s=$.bj0() +break +case 1:s=$.bvy() +break +case 2:s=$.bvz() +break +case 3:s=$.bvB() +break +case 4:s=$.bj1() +break +case 5:s=$.bvD() +break +default:s=null}return s}, +a24:function a24(a,b){this.c=a +this.a=b}, +a2a:function a2a(a){this.b=a}, +o5:function o5(a,b){this.a=a +this.b=b}, +Ml:function Ml(a,b,c,d,e,f){var _=this +_.c=a +_.w=b +_.x=c +_.y=d +_.ax=e +_.a=f}, +Vb:function Vb(a,b){this.a=a +this.b=b}, +UI:function UI(a,b,c,d,e){var _=this +_.d=null +_.e=$ +_.r=_.f=null +_.w=0 +_.y=_.x=!1 +_.z=null +_.Q=!1 +_.as=a +_.ku$=b +_.f2$=c +_.bV$=d +_.a=null +_.b=e +_.c=null}, +b1_:function b1_(a){this.a=a}, +b10:function b10(a){this.a=a}, +YG:function YG(){}, +YH:function YH(){}, +bDO(a){var s=a.bh(t.I) +s.toString +switch(s.w.a){case 0:s=B.a3x +break +case 1:s=B.h +break +default:s=null}return s}, +bDP(a){var s=a.cx,r=A.a5(s) +return new A.e7(new A.bg(s,new A.aBu(),r.h("bg<1>")),new A.aBv(),r.h("e7<1,A>"))}, +bDN(a,b){var s,r,q,p,o=B.b.ga9(a),n=A.blD(b,o) +for(s=a.length,r=0;rb.gaQ(b))return a.Y(0,new A.i(b.gae(b),b.gaQ(b))).ge6() +else return b.gae(b)-r}else if(r>b.gaH(b)){s=a.b +if(sb.gaQ(b))return a.Y(0,new A.i(b.gaH(b),b.gaQ(b))).ge6() +else return r-b.gaH(b)}else{r=a.b +if(rb.gaQ(b))return r-b.gaQ(b) +else return 0}}, +bDQ(a,b){var s,r,q,p,o,n,m,l,k,j=t.AO,i=A.b([a],j) +for(s=b.$ti,s=s.h("@<1>").ak(s.y[1]),r=new A.bt(J.az(b.a),b.b,s.h("bt<1,2>")),s=s.y[1];r.H();i=p){q=r.a +if(q==null)q=s.a(q) +p=A.b([],j) +for(o=i.length,n=0;n=q.gaj(q)&&m.gaQ(m)<=q.gaQ(q)){if(m.gae(m)q.gaH(q)){l=q.gaH(q) +k=m.gaj(m) +p.push(new A.A(l,k,l+(m.gaH(m)-q.gaH(q)),k+(m.gaQ(m)-m.gaj(m))))}}else if(m.gae(m)>=q.gae(q)&&m.gaH(m)<=q.gaH(q)){if(m.gaj(m)q.gaQ(q)){l=m.gae(m) +k=q.gaQ(q) +p.push(new A.A(l,k,l+(m.gaH(m)-m.gae(m)),k+(m.gaQ(m)-q.gaQ(q))))}}else p.push(m)}}return i}, +bDM(a,b){var s,r=a.a +if(r>=0)if(r<=b.a){s=a.b +s=s>=0&&s<=b.b}else s=!1 +else s=!1 +if(s)return a +else return new A.i(Math.min(Math.max(0,r),b.a),Math.min(Math.max(0,a.b),b.b))}, +a2x:function a2x(a,b,c){this.c=a +this.d=b +this.a=c}, +aBu:function aBu(){}, +aBv:function aBv(){}, +a2y:function a2y(a,b){this.a=a +this.$ti=b}, +EE:function EE(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +UV:function UV(a,b,c){var _=this +_.d=$ +_.e=a +_.f=b +_.a=null +_.b=c +_.c=null}, +bmq(a,b,c,d,e,f,g,h,i,j,k,l,m,n,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3){var s,r,q,p,o +if(e0==null)s=B.rH +else s=e0 +if(e1==null)r=B.rI +else r=e1 +if(t.qY.b(d5))q=B.Hp +else q=c7?B.agf:B.agg +p=b2==null?A.bEw(d,b4):b2 +if(b4===1){o=A.b([$.bvQ()],t.VS) +B.b.I(o,a9==null?B.Ko:a9)}else o=a9 +return new A.EF(j,a7,b8,!1,e8,f1,c7,a8,q,d9,d8==null?!c7:d8,!0,s,r,!0,e4,f3,e3,e5,e7,e6,f0,k,b,f,b4,b5,!1,!1,d4,d5,p,e9,c0,c1,c4,b9,c2,c3,c5,o,b6,!0,a1,l,a0,n,m,c6,d6,d7,b1,d2,a4,a2,d1,d3,!0,d,c,g,c9,!0,h,i,e2,b3,b0)}, +bEw(a,b){return b===1?B.H_:B.ll}, +bEu(){var s,r,q,p=null,o=$.aa(),n=t.re,m=new A.aAI() +m.a=B.a3S +s=A.b([],t.RW) +r=A.ci() +$label0$0:{if(B.ar===r||B.a6===r){q=!0 +break $label0$0}if(B.dn===r||B.dp===r||B.ct===r||B.dq===r){q=!1 +break $label0$0}q=p}return new A.uX(new A.cD(!0,o,t.uh),new A.cK(p,n),new A.ass(B.mN,B.mO,o),new A.cK(p,n),new A.FI(),new A.FI(),new A.FI(),m,s,q,p,p,p,B.p)}, +bEv(a){var s=a==null,r=s?null:a.a,q=s||a.k(0,B.im) +s=r==null +if(s){$.b1.toString +$.bF()}if(q||s)return B.im +if(s){s=new A.aAL() +s.b=B.a3V}else s=r +return a.aOB(s)}, +xq(a,b,c,d,e,f,g){return new A.Ya(a,e,f,d,b,c,new A.bW(A.b([],t.ot),t.wS),g.h("Ya<0>"))}, +agO:function agO(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +ao8:function ao8(a,b,c,d,e){var _=this +_.V=a +_.aE=null +_.bj=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +wG:function wG(a,b){var _=this +_.a=a +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1}, +Tb:function Tb(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +lI:function lI(a,b){this.a=a +this.b=b}, +b0Z:function b0Z(a,b,c){var _=this +_.b=a +_.c=b +_.d=0 +_.a=c}, +EF:function EF(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.cy=r +_.db=s +_.dx=a0 +_.dy=a1 +_.fy=a2 +_.go=a3 +_.id=a4 +_.k1=a5 +_.k2=a6 +_.k3=a7 +_.k4=a8 +_.ok=a9 +_.p1=b0 +_.p2=b1 +_.p3=b2 +_.p4=b3 +_.R8=b4 +_.RG=b5 +_.rx=b6 +_.ry=b7 +_.to=b8 +_.x1=b9 +_.x2=c0 +_.xr=c1 +_.y1=c2 +_.y2=c3 +_.bv=c4 +_.bn=c5 +_.ac=c6 +_.ah=c7 +_.b_=c8 +_.b6=c9 +_.K=d0 +_.a5=d1 +_.M=d2 +_.av=d3 +_.ao=d4 +_.aM=d5 +_.aS=d6 +_.b2=d7 +_.bB=d8 +_.ct=d9 +_.bD=e0 +_.dg=e1 +_.R=e2 +_.aa=e3 +_.bp=e4 +_.aN=e5 +_.cZ=e6 +_.cL=e7 +_.a=e8}, +uX:function uX(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.e=_.d=null +_.f=$ +_.r=a +_.w=b +_.x=c +_.at=_.as=_.Q=_.z=null +_.ax=!1 +_.ay=d +_.ch=null +_.CW=e +_.cx=f +_.cy=g +_.db=!1 +_.dx=null +_.fr=_.dy=$ +_.fx=null +_.fy=h +_.go=i +_.k1=_.id=null +_.k2=!0 +_.p2=_.p1=_.ok=_.k4=_.k3=null +_.p3=0 +_.R8=_.p4=!1 +_.RG=j +_.ry=_.rx=!1 +_.to=$ +_.x1=0 +_.xr=_.x2=null +_.y1=$ +_.y2=-1 +_.bn=_.bv=null +_.K=_.b6=_.b_=_.ah=_.ac=$ +_.f2$=k +_.bV$=l +_.ku$=m +_.a=null +_.b=n +_.c=null}, +aCt:function aCt(){}, +aCW:function aCW(a){this.a=a}, +aCx:function aCx(a){this.a=a}, +aCK:function aCK(a){this.a=a}, +aCL:function aCL(a){this.a=a}, +aCM:function aCM(a){this.a=a}, +aCN:function aCN(a){this.a=a}, +aCO:function aCO(a){this.a=a}, +aCP:function aCP(a){this.a=a}, +aCQ:function aCQ(a){this.a=a}, +aCR:function aCR(a){this.a=a}, +aCS:function aCS(a){this.a=a}, +aCT:function aCT(a){this.a=a}, +aCU:function aCU(a){this.a=a}, +aCV:function aCV(a){this.a=a}, +aCD:function aCD(a,b,c){this.a=a +this.b=b +this.c=c}, +aCY:function aCY(a,b,c){this.a=a +this.b=b +this.c=c}, +aCZ:function aCZ(a){this.a=a}, +aCy:function aCy(a,b){this.a=a +this.b=b}, +aCX:function aCX(a){this.a=a}, +aCr:function aCr(a){this.a=a}, +aCC:function aCC(a){this.a=a}, +aCu:function aCu(){}, +aCv:function aCv(a){this.a=a}, +aCw:function aCw(a){this.a=a}, +aCq:function aCq(){}, +aCs:function aCs(a){this.a=a}, +aD_:function aD_(a){this.a=a}, +aD0:function aD0(a){this.a=a}, +aD1:function aD1(a,b,c){this.a=a +this.b=b +this.c=c}, +aCz:function aCz(a,b){this.a=a +this.b=b}, +aCA:function aCA(a,b){this.a=a +this.b=b}, +aCB:function aCB(a,b){this.a=a +this.b=b}, +aCp:function aCp(a){this.a=a}, +aCH:function aCH(a){this.a=a}, +aCF:function aCF(a){this.a=a}, +aCG:function aCG(){}, +aCI:function aCI(a){this.a=a}, +aCJ:function aCJ(a,b,c){this.a=a +this.b=b +this.c=c}, +aCE:function aCE(a){this.a=a}, +UW:function UW(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.z=g +_.Q=h +_.as=i +_.at=j +_.ax=k +_.ay=l +_.ch=m +_.CW=n +_.cx=o +_.cy=p +_.db=q +_.dx=r +_.dy=s +_.fr=a0 +_.fx=a1 +_.fy=a2 +_.go=a3 +_.id=a4 +_.k1=a5 +_.k2=a6 +_.k3=a7 +_.k4=a8 +_.ok=a9 +_.p1=b0 +_.p2=b1 +_.p3=b2 +_.p4=b3 +_.R8=b4 +_.RG=b5 +_.rx=b6 +_.ry=b7 +_.to=b8 +_.c=b9 +_.a=c0}, +b6f:function b6f(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}, +X4:function X4(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f}, +apc:function apc(a,b){var _=this +_.d=a +_.a=null +_.b=b +_.c=null}, +b6g:function b6g(a){this.a=a}, +oW:function oW(a,b,c,d,e){var _=this +_.x=a +_.e=b +_.b=c +_.c=d +_.a=e}, +tU:function tU(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.a=d +_.b=null +_.$ti=e}, +Ya:function Ya(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.a=g +_.b=null +_.$ti=h}, +Yb:function Yb(a,b,c){var _=this +_.e=a +_.r=_.f=null +_.a=b +_.b=null +_.$ti=c}, +apl:function apl(a,b){this.e=a +this.a=b +this.b=null}, +ahb:function ahb(a,b){this.e=a +this.a=b +this.b=null}, +ajL:function ajL(a,b){this.a=a +this.b=b}, +ass:function ass(a,b,c){var _=this +_.ay=a +_.w=!1 +_.a=b +_.ac$=0 +_.ah$=c +_.b6$=_.b_$=0 +_.K$=!1}, +UX:function UX(){}, +air:function air(){}, +UY:function UY(){}, +ais:function ais(){}, +ait:function ait(){}, +bii(a){var s,r,q +for(s=a.length,r=!1,q=0;q>"),n=new A.W(a,new A.b4W(),o) +for(s=new A.cR(n,n.gF(0),o.h("cR")),o=o.h("aI.E"),r=null;s.H();){q=s.d +p=q==null?o.a(q):q +r=(r==null?p:r).pN(0,p)}if(r.gaA(r))return B.b.ga9(a).a +return B.b.pI(B.b.ga9(a).gad5(),r.gpt(r)).w}, +brA(a,b){A.um(a,new A.b4Y(b),t.zP)}, +bNt(a,b){A.um(a,new A.b4V(b),t.h7)}, +bgo(){return new A.aP0(A.D(t.l5,t.UJ),A.bSR())}, +bmG(a,b){return new A.Nc(b==null?A.bgo():b,a,null)}, +aEF(a){var s +for(;s=a.Q,s!=null;a=s){if(a.e==null)return null +if(a instanceof A.Vf)return a}return null}, +v9(a){var s,r=A.beZ(a,!1,!0) +if(r==null)return null +s=A.aEF(r) +return s==null?null:s.fr}, +b93:function b93(a){this.a=a}, +J9:function J9(a,b){this.b=a +this.c=b}, +Cq:function Cq(a,b){this.a=a +this.b=b}, +adT:function adT(a,b){this.a=a +this.b=b}, +a3S:function a3S(){}, +aEG:function aEG(){}, +aEI:function aEI(a,b){this.a=a +this.b=b}, +aEH:function aEH(a){this.a=a}, +J2:function J2(a,b){this.a=a +this.b=b}, +ahV:function ahV(a){this.a=a}, +aB8:function aB8(){}, +b4Z:function b4Z(a){this.a=a}, +aBg:function aBg(a,b){this.a=a +this.b=b}, +aBi:function aBi(a){this.a=a}, +aBh:function aBh(a){this.a=a}, +aBj:function aBj(a){this.a=a}, +aBk:function aBk(a){this.a=a}, +aBa:function aBa(a){this.a=a}, +aBb:function aBb(a){this.a=a}, +aBc:function aBc(){}, +aBd:function aBd(a){this.a=a}, +aBe:function aBe(a){this.a=a}, +aBf:function aBf(){}, +aB9:function aB9(a,b,c){this.a=a +this.b=b +this.c=c}, +aBl:function aBl(a){this.a=a}, +aBm:function aBm(a){this.a=a}, +aBn:function aBn(a){this.a=a}, +aBo:function aBo(a){this.a=a}, +hG:function hG(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +b4W:function b4W(){}, +b4Y:function b4Y(a){this.a=a}, +b4X:function b4X(){}, +qq:function qq(a){this.a=a +this.b=null}, +b4U:function b4U(){}, +b4V:function b4V(a){this.a=a}, +aP0:function aP0(a,b){this.DJ$=a +this.a=b}, +aP1:function aP1(){}, +aP2:function aP2(){}, +aP3:function aP3(a){this.a=a}, +Nc:function Nc(a,b,c){this.c=a +this.f=b +this.a=c}, +Vf:function Vf(a,b,c,d,e,f,g,h,i){var _=this +_.fr=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=null +_.f=f +_.r=g +_.y=_.x=_.w=null +_.z=!1 +_.Q=null +_.as=h +_.ay=_.ax=_.at=null +_.ch=!1 +_.ac$=0 +_.ah$=i +_.b6$=_.b_$=0 +_.K$=!1}, +ajd:function ajd(a){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null}, +aar:function aar(a){this.a=a +this.b=null}, +Az:function Az(){}, +a7w:function a7w(a){this.a=a +this.b=null}, +B0:function B0(){}, +a9h:function a9h(a){this.a=a +this.b=null}, +uT:function uT(a){this.a=a}, +Mk:function Mk(a,b){this.c=a +this.a=b +this.b=null}, +aje:function aje(){}, +anS:function anS(){}, +atM:function atM(){}, +atN:function atN(){}, +bf2(a){var s=a.bh(t.Jp) +return s==null?null:s.f}, +bMY(a,b,c){return new A.Vh(b,c,a,null)}, +bFo(a){var s=null,r=$.aa() +return new A.m4(new A.R0(s,r),new A.Bj(!1,r),s,A.D(t.yb,t.Q),s,!0,s,B.p,a.h("m4<0>"))}, +Nk:function Nk(a,b,c){this.c=a +this.w=b +this.a=c}, +Nl:function Nl(a,b){var _=this +_.d=0 +_.e=!1 +_.f=a +_.a=null +_.b=b +_.c=null}, +aF7:function aF7(){}, +aF8:function aF8(a){this.a=a}, +aF9:function aF9(a,b){this.a=a +this.b=b}, +Vh:function Vh(a,b,c,d){var _=this +_.f=a +_.r=b +_.b=c +_.a=d}, +rk:function rk(){}, +m4:function m4(a,b,c,d,e,f,g,h,i){var _=this +_.d=$ +_.e=a +_.f=b +_.cS$=c +_.jU$=d +_.vU$=e +_.hM$=f +_.jV$=g +_.a=null +_.b=h +_.c=null +_.$ti=i}, +aF6:function aF6(a){this.a=a}, +aF5:function aF5(a,b){this.a=a +this.b=b}, +awV:function awV(a,b){this.a=a +this.b=b}, +b21:function b21(){}, +Jb:function Jb(){}, +bN_(a){a.ht() +a.cc(A.bcd())}, +bEz(a,b){var s,r,q,p=a.d +p===$&&A.c() +s=b.d +s===$&&A.c() +r=p-s +if(r!==0)return r +q=b.Q +if(a.Q!==q)return q?-1:1 +return 0}, +bEA(a,b){var s=A.a5(b).h("W<1,iG>") +return A.bDC(!0,A.ab(new A.W(b,new A.aD6(),s),!0,s.h("aI.E")),a,B.ZD,!0,B.TC,null)}, +bEy(a){a.dd() +a.cc(A.btQ())}, +a3n(a){var s=a.a,r=s instanceof A.zd?s:null +return new A.a3m("",r,new A.qh())}, +bKx(a){var s=a.b5(),r=new A.mC(s,a,B.al) +s.c=r +s.a=a +return r}, +bFW(a){return new A.jG(A.jF(null,null,null,t.U,t.X),a,B.al)}, +bHo(a){return new A.mh(A.ek(t.U),a,B.al)}, +bi4(a,b,c,d){var s=new A.cI(b,c,"widgets library",a,d,!1) +A.eR(s) +return s}, +oe:function oe(){}, +cK:function cK(a,b){this.a=a +this.$ti=b}, +zt:function zt(a,b){this.a=a +this.$ti=b}, +m:function m(){}, +aY:function aY(){}, +aw:function aw(){}, +b6Y:function b6Y(a,b){this.a=a +this.b=b}, +aF:function aF(){}, +bN:function bN(){}, +hb:function hb(){}, +cb:function cb(){}, +b6:function b6(){}, +a65:function a65(){}, +c2:function c2(){}, +ih:function ih(){}, +J7:function J7(a,b){this.a=a +this.b=b}, +akb:function akb(a){this.a=!1 +this.b=a}, +b2N:function b2N(a,b){this.a=a +this.b=b}, +axV:function axV(a,b,c,d){var _=this +_.a=null +_.b=a +_.c=b +_.d=!1 +_.e=null +_.f=c +_.r=0 +_.w=!1 +_.y=_.x=null +_.z=d}, +axW:function axW(a,b,c){this.a=a +this.b=b +this.c=c}, +Pn:function Pn(){}, +b4h:function b4h(a,b){this.a=a +this.b=b}, +b7:function b7(){}, +aD9:function aD9(a){this.a=a}, +aD7:function aD7(a){this.a=a}, +aD6:function aD6(){}, +aDb:function aDb(a){this.a=a}, +aDc:function aDc(a){this.a=a}, +aDd:function aDd(a){this.a=a}, +aD4:function aD4(a){this.a=a}, +aD8:function aD8(){}, +aD5:function aD5(a){this.a=a}, +a3m:function a3m(a,b,c){this.d=a +this.e=b +this.a=c}, +LR:function LR(){}, +azH:function azH(){}, +azI:function azI(){}, +HS:function HS(a,b){var _=this +_.c=_.b=_.a=_.ax=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +mC:function mC(a,b,c){var _=this +_.k3=a +_.k4=!1 +_.c=_.b=_.a=_.ax=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +Qd:function Qd(){}, +vU:function vU(a,b,c){var _=this +_.c=_.b=_.a=_.ax=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1 +_.$ti=c}, +aMT:function aMT(a){this.a=a}, +jG:function jG(a,b,c){var _=this +_.y2=a +_.c=_.b=_.a=_.ax=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +bX:function bX(){}, +aQC:function aQC(){}, +a64:function a64(a,b){var _=this +_.c=_.b=_.a=_.ch=_.ax=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +RW:function RW(a,b){var _=this +_.c=_.b=_.a=_.ch=_.ax=_.k4=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +mh:function mh(a,b,c){var _=this +_.k4=$ +_.ok=a +_.c=_.b=_.a=_.ch=_.ax=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +aL1:function aL1(a){this.a=a}, +aak:function aak(){}, +vj:function vj(a,b,c){this.a=a +this.b=b +this.$ti=c}, +am5:function am5(a,b){var _=this +_.c=_.b=_.a=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +ama:function ama(a){this.a=a}, +aqk:function aqk(){}, +iH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6){return new A.Fa(b,a2,a3,a0,a1,p,r,s,q,f,l,a5,a6,a4,h,j,k,i,g,m,o,n,a,d,c,e)}, +zr:function zr(){}, +dU:function dU(a,b,c){this.a=a +this.b=b +this.$ti=c}, +Fa:function Fa(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.ay=j +_.cy=k +_.rx=l +_.ry=m +_.to=n +_.x2=o +_.xr=p +_.y1=q +_.y2=r +_.bv=s +_.bn=a0 +_.ah=a1 +_.b_=a2 +_.b2=a3 +_.bB=a4 +_.ct=a5 +_.a=a6}, +aFP:function aFP(a){this.a=a}, +aFQ:function aFQ(a,b){this.a=a +this.b=b}, +aFR:function aFR(a){this.a=a}, +aFT:function aFT(a,b){this.a=a +this.b=b}, +aFU:function aFU(a){this.a=a}, +aFV:function aFV(a,b){this.a=a +this.b=b}, +aFW:function aFW(a){this.a=a}, +aFX:function aFX(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aFY:function aFY(a){this.a=a}, +aFZ:function aFZ(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aG_:function aG_(a){this.a=a}, +aFS:function aFS(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +lv:function lv(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +GY:function GY(a,b){var _=this +_.d=a +_.a=_.e=null +_.b=b +_.c=null}, +ajJ:function ajJ(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +aS6:function aS6(){}, +b0M:function b0M(a){this.a=a}, +b0R:function b0R(a){this.a=a}, +b0Q:function b0Q(a){this.a=a}, +b0N:function b0N(a){this.a=a}, +b0O:function b0O(a){this.a=a}, +b0P:function b0P(a,b){this.a=a +this.b=b}, +b0S:function b0S(a){this.a=a}, +b0T:function b0T(a){this.a=a}, +b0U:function b0U(a,b){this.a=a +this.b=b}, +bmY(a,b,c){return new A.zx(b,a,c,null)}, +bmZ(a,b,c){var s=A.D(t.K,t.U3) +a.cc(new A.aGC(c,new A.aGB(s,b))) +return s}, +bro(a,b){var s,r=a.gaF() +r.toString +t.x.a(r) +s=r.cW(0,b==null?null:b.gaF()) +r=r.gC(0) +return A.ie(s,new A.A(0,0,0+r.a,0+r.b))}, +Fh:function Fh(a,b){this.a=a +this.b=b}, +zx:function zx(a,b,c,d){var _=this +_.c=a +_.e=b +_.w=c +_.a=d}, +aGB:function aGB(a,b){this.a=a +this.b=b}, +aGC:function aGC(a,b){this.a=a +this.b=b}, +Ji:function Ji(a,b){var _=this +_.d=a +_.e=null +_.f=!0 +_.a=null +_.b=b +_.c=null}, +b2A:function b2A(a,b){this.a=a +this.b=b}, +b2z:function b2z(){}, +b2w:function b2w(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.at=_.as=_.Q=$}, +tY:function tY(a,b){var _=this +_.a=a +_.b=$ +_.c=null +_.d=b +_.f=_.e=$ +_.r=null +_.x=_.w=!1}, +b2x:function b2x(a){this.a=a}, +b2y:function b2y(a,b){this.a=a +this.b=b}, +NH:function NH(a,b){this.a=a +this.b=b}, +aGA:function aGA(){}, +aGz:function aGz(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aGy:function aGy(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +bfi(a,b,c){return new A.zC(a,c,b,null)}, +zC:function zC(a,b,c,d){var _=this +_.c=a +_.d=b +_.x=c +_.a=d}, +fO:function fO(a,b){this.a=a +this.d=b}, +NP(a,b,c){return new A.zD(b,a,c)}, +aH5(a,b){return new A.j1(new A.aH6(null,b,a),null)}, +bn4(a){var s,r,q,p,o,n,m=A.bn3(a).aG(a),l=m.a,k=l==null +if(!k&&m.b!=null&&m.c!=null&&m.d!=null&&m.e!=null&&m.f!=null&&m.gh5(0)!=null&&m.x!=null)l=m +else{if(k)l=24 +k=m.b +if(k==null)k=0 +s=m.c +if(s==null)s=400 +r=m.d +if(r==null)r=0 +q=m.e +if(q==null)q=48 +p=m.f +if(p==null)p=B.q +o=m.gh5(0) +if(o==null)o=B.wR.gh5(0) +n=m.w +if(n==null)n=null +l=m.JT(m.x===!0,p,k,r,o,q,n,l,s)}return l}, +bn3(a){var s=a.bh(t.Oh),r=s==null?null:s.w +return r==null?B.wR:r}, +zD:function zD(a,b,c){this.w=a +this.b=b +this.a=c}, +aH6:function aH6(a,b,c){this.a=a +this.b=b +this.c=c}, +ru(a,b,c){var s,r,q,p,o,n,m,l,k,j,i=null +if(a==b&&a!=null)return a +s=a==null +r=s?i:a.a +q=b==null +r=A.ap(r,q?i:b.a,c) +p=s?i:a.b +p=A.ap(p,q?i:b.b,c) +o=s?i:a.c +o=A.ap(o,q?i:b.c,c) +n=s?i:a.d +n=A.ap(n,q?i:b.d,c) +m=s?i:a.e +m=A.ap(m,q?i:b.e,c) +l=s?i:a.f +l=A.Z(l,q?i:b.f,c) +k=s?i:a.gh5(0) +k=A.ap(k,q?i:b.gh5(0),c) +j=s?i:a.w +j=A.bJU(j,q?i:b.w,c) +if(c<0.5)s=s?i:a.x +else s=q?i:b.x +return new A.fr(r,p,o,n,m,l,k,j,s)}, +fr:function fr(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}, +ak3:function ak3(){}, +Kg(a,b){var s=A.blx(a),r=A.e8(a,B.cy) +r=r==null?null:r.b +if(r==null)r=1 +return new A.zG(s,r,A.Ox(a),A.eP(a),b,A.ci())}, +bfk(a,b,c){var s=null +return new A.vf(A.bgs(s,s,new A.Gm(a,1,s)),c,b,s)}, +vf:function vf(a,b,c,d){var _=this +_.c=a +_.r=b +_.w=c +_.a=d}, +Vr:function Vr(a){var _=this +_.f=_.e=_.d=null +_.r=!1 +_.w=$ +_.x=null +_.y=!1 +_.z=$ +_.a=_.ax=_.at=_.as=_.Q=null +_.b=a +_.c=null}, +b2J:function b2J(a,b,c){this.a=a +this.b=b +this.c=c}, +b2K:function b2K(a){this.a=a}, +b2L:function b2L(a){this.a=a}, +b2M:function b2M(a){this.a=a}, +aty:function aty(){}, +bkw(a,b,c,d,e){return new A.KB(a,d,e,b,c,null,null)}, +bkv(a,b,c,d){return new A.Ky(a,d,b,c,null,null)}, +ZW(a,b,c,d){return new A.Kw(a,d,b,c,null,null)}, +a1Z:function a1Z(a,b){this.a=a +this.b=b}, +MC:function MC(a,b){this.a=a +this.b=b}, +yW:function yW(a,b){this.a=a +this.b=b}, +y6:function y6(a,b){this.a=a +this.b=b}, +Cb:function Cb(a,b){this.a=a +this.b=b}, +a5d:function a5d(){}, +Fo:function Fo(){}, +aHu:function aHu(a){this.a=a}, +aHt:function aHt(a){this.a=a}, +aHs:function aHs(a,b){this.a=a +this.b=b}, +Ds:function Ds(){}, +awe:function awe(){}, +Kz:function Kz(a,b,c,d,e,f){var _=this +_.r=a +_.w=b +_.c=c +_.d=d +_.e=e +_.a=f}, +afh:function afh(a,b,c){var _=this +_.CW=null +_.e=_.d=$ +_.jk$=a +_.dQ$=b +_.a=null +_.b=c +_.c=null}, +aYD:function aYD(){}, +KB:function KB(a,b,c,d,e,f,g){var _=this +_.r=a +_.w=b +_.x=c +_.c=d +_.d=e +_.e=f +_.a=g}, +afj:function afj(a,b,c){var _=this +_.dy=_.dx=_.db=_.cy=_.cx=_.CW=null +_.e=_.d=$ +_.jk$=a +_.dQ$=b +_.a=null +_.b=c +_.c=null}, +aYI:function aYI(){}, +aYJ:function aYJ(){}, +aYK:function aYK(){}, +aYL:function aYL(){}, +aYM:function aYM(){}, +aYN:function aYN(){}, +Ky:function Ky(a,b,c,d,e,f){var _=this +_.r=a +_.w=b +_.c=c +_.d=d +_.e=e +_.a=f}, +afg:function afg(a,b,c){var _=this +_.z=null +_.e=_.d=_.Q=$ +_.jk$=a +_.dQ$=b +_.a=null +_.b=c +_.c=null}, +aYC:function aYC(){}, +Kw:function Kw(a,b,c,d,e,f){var _=this +_.r=a +_.w=b +_.c=c +_.d=d +_.e=e +_.a=f}, +aff:function aff(a,b,c){var _=this +_.CW=null +_.e=_.d=$ +_.jk$=a +_.dQ$=b +_.a=null +_.b=c +_.c=null}, +aYB:function aYB(){}, +KA:function KA(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.r=a +_.w=b +_.x=c +_.z=d +_.Q=e +_.as=f +_.at=g +_.c=h +_.d=i +_.e=j +_.a=k}, +afi:function afi(a,b,c){var _=this +_.db=_.cy=_.cx=_.CW=null +_.e=_.d=$ +_.jk$=a +_.dQ$=b +_.a=null +_.b=c +_.c=null}, +aYE:function aYE(){}, +aYF:function aYF(){}, +aYG:function aYG(){}, +aYH:function aYH(){}, +Jk:function Jk(){}, +bFX(a,b,c,d){var s=a.k9(d) +if(s==null)return +c.push(s) +d.a(s.gba()) +return}, +cj(a,b,c){var s,r,q,p,o,n +if(b==null)return a.bh(c) +s=A.b([],t.Fa) +A.bFX(a,b,s,c) +if(s.length===0)return null +r=B.b.ga_(s) +for(q=s.length,p=0;p>")),i).cu(new A.b9n(k,h),t.e3)}, +Ox(a){var s=a.bh(t.Gk) +return s==null?null:s.r.f}, +nf(a,b,c){var s=a.bh(t.Gk) +return s==null?null:c.h("0?").a(J.bG(s.r.e,b))}, +JF:function JF(a,b){this.a=a +this.b=b}, +b9l:function b9l(a){this.a=a}, +b9m:function b9m(){}, +b9n:function b9n(a,b){this.a=a +this.b=b}, +ls:function ls(){}, +asz:function asz(){}, +a26:function a26(){}, +VK:function VK(a,b,c,d){var _=this +_.r=a +_.w=b +_.b=c +_.a=d}, +Ow:function Ow(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +al1:function al1(a,b,c){var _=this +_.d=a +_.e=b +_.a=_.f=null +_.b=c +_.c=null}, +b3D:function b3D(a){this.a=a}, +b3E:function b3E(a,b){this.a=a +this.b=b}, +b3C:function b3C(a,b,c){this.a=a +this.b=b +this.c=c}, +bGO(a,b){var s +a.bh(t.bS) +s=A.bGP(a,b) +if(s==null)return null +a.GK(s,null) +return b.a(s.gba())}, +bGP(a,b){var s,r,q,p=a.k9(b) +if(p==null)return null +s=a.k9(t.bS) +if(s!=null){r=s.d +r===$&&A.c() +q=p.d +q===$&&A.c() +q=r>q +r=q}else r=!1 +if(r)return null +return p}, +bnS(a,b){var s={} +s.a=null +a.nJ(new A.aJJ(s,b)) +s=s.a +if(s==null)s=null +else{s=s.k3 +s.toString}return b.h("0?").a(s)}, +aJK(a,b){var s={} +s.a=null +a.nJ(new A.aJL(s,b)) +s=s.a +if(s==null)s=null +else{s=s.k3 +s.toString}return b.h("0?").a(s)}, +bfE(a,b){var s={} +s.a=null +a.nJ(new A.aJI(s,b)) +s=s.a +s=s==null?null:s.gaF() +return b.h("0?").a(s)}, +aJJ:function aJJ(a,b){this.a=a +this.b=b}, +aJL:function aJL(a,b){this.a=a +this.b=b}, +aJI:function aJI(a,b){this.a=a +this.b=b}, +bL7(a,b,c){return null}, +bnV(a,b){var s,r=b.a,q=a.a +if(rq?B.h.X(0,new A.i(q-r,0)):B.h}r=b.b +q=a.b +if(rq)s=s.X(0,new A.i(0,q-r))}return b.dz(s)}, +bnW(a,b,c){return new A.OB(a,null,null,null,b,c)}, +pD:function pD(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +adk:function adk(a,b){this.a=a +this.b=b}, +Ad:function Ad(){this.b=this.a=null}, +aK_:function aK_(a,b){this.a=a +this.b=b}, +OB:function OB(a,b,c,d,e,f){var _=this +_.f=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f}, +Qk:function Qk(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f}, +al8:function al8(a,b,c){this.c=a +this.d=b +this.a=c}, +ai9:function ai9(a,b,c){this.b=a +this.c=b +this.a=c}, +al7:function al7(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +aog:function aog(a,b,c,d,e,f){var _=this +_.V=a +_.aE=b +_.bj=c +_.a0$=d +_.fx=e +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=f +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Ak(a,b){return new A.rK(b,a,null)}, +bo4(a,b,c,d,e,f){return new A.rK(A.cj(b,null,t.l).w.ahJ(c,!0,!0,f),a,null)}, +e8(a,b){var s=A.cj(a,b,t.l) +return s==null?null:s.w}, +a7V:function a7V(a,b){this.a=a +this.b=b}, +iz:function iz(a,b){this.a=a +this.b=b}, +OR:function OR(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.a=a +_.b=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j +_.Q=k +_.as=l +_.at=m +_.ax=n +_.ay=o +_.ch=p +_.CW=q +_.cx=r}, +aKq:function aKq(a){this.a=a}, +rK:function rK(a,b,c){this.w=a +this.b=b +this.a=c}, +aKr:function aKr(a,b){this.a=a +this.b=b}, +a7s:function a7s(a,b){this.a=a +this.b=b}, +VR:function VR(a,b,c){this.c=a +this.e=b +this.a=c}, +ali:function ali(a){var _=this +_.a=_.e=_.d=null +_.b=a +_.c=null}, +b41:function b41(a,b){this.a=a +this.b=b}, +atC:function atC(){}, +bfR(a,b,c,d,e,f,g){return new A.a6X(c,d,e,!0,f,b,g,null)}, +a6X:function a6X(a,b,c,d,e,f,g,h){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.a=h}, +aKO:function aKO(a,b){this.a=a +this.b=b}, +ZX:function ZX(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +IS:function IS(a,b,c,d,e,f,g,h,i){var _=this +_.ac=null +_.k3=_.k2=!1 +_.ok=_.k4=null +_.at=a +_.ay=b +_.ch=c +_.cx=_.CW=null +_.cy=!1 +_.db=null +_.f=d +_.r=e +_.w=null +_.a=f +_.b=null +_.c=g +_.d=h +_.e=i}, +afs:function afs(a){this.a=a}, +alr:function alr(a,b,c){this.c=a +this.d=b +this.a=c}, +vM(a,b){var s,r +if(a instanceof A.mC){s=a.k3 +s.toString +s=s instanceof A.oq}else s=!1 +if(s){s=a.k3 +s.toString +t.uK.a(s) +r=s}else r=null +if(r==null)r=a.tP(t.uK) +s=r +s.toString +return s}, +bog(a){var s,r=a.k3 +r.toString +if(r instanceof A.oq)s=r +else s=null +if(s==null)s=a.tP(t.uK) +return s}, +bHJ(a,b){var s,r,q,p,o,n,m,l=null,k=A.b([],t.oP) +if(B.d.c4(b,"/")&&b.length>1){b=B.d.c5(b,1) +s=t.z +k.push(a.Ik("/",!0,l,s)) +r=b.split("/") +if(b.length!==0)for(q=r.length,p=0,o="";p=3}, +bND(a){return a.gb_k()}, +bhB(a){return new A.b63(a)}, +bof(a,b){var s,r,q,p +for(s=a.a,r=s.f,q=r.length,p=0;p") +n.w!==$&&A.aj() +n.w=new A.bz(m,p,q) +n.y!==$&&A.aj() +n.y=new A.bz(m,o,q) +q=c.D8(n.gaKc()) +n.z!==$&&A.aj() +n.z=q +return n}, +Nt:function Nt(a,b,c,d){var _=this +_.e=a +_.f=b +_.w=c +_.a=d}, +Vm:function Vm(a,b,c,d){var _=this +_.r=_.f=_.e=_.d=null +_.w=a +_.f2$=b +_.bV$=c +_.a=null +_.b=d +_.c=null}, +Jg:function Jg(a,b){this.a=a +this.b=b}, +Vl:function Vl(a,b,c,d,e,f){var _=this +_.a=a +_.b=$ +_.c=null +_.e=_.d=0 +_.f=$ +_.r=b +_.w=$ +_.x=c +_.z=_.y=$ +_.Q=null +_.at=_.as=0.5 +_.ax=0 +_.ay=d +_.ch=e +_.ac$=0 +_.ah$=f +_.b6$=_.b_$=0 +_.K$=!1}, +b2s:function b2s(a){this.a=a}, +ajK:function ajK(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +aqu:function aqu(a,b){this.a=a +this.b=b}, +Sk:function Sk(a,b,c,d){var _=this +_.c=a +_.e=b +_.f=c +_.a=d}, +XE:function XE(a,b,c){var _=this +_.d=$ +_.f=_.e=null +_.r=0 +_.w=!0 +_.f2$=a +_.bV$=b +_.a=null +_.b=c +_.c=null}, +b75:function b75(a,b,c){this.a=a +this.b=b +this.c=c}, +JX:function JX(a,b){this.a=a +this.b=b}, +XD:function XD(a,b,c,d){var _=this +_.c=_.b=_.a=$ +_.d=a +_.e=b +_.f=0 +_.r=c +_.ac$=0 +_.ah$=d +_.b6$=_.b_$=0 +_.K$=!1}, +PB:function PB(a,b){this.a=a +this.lz$=b}, +W9:function W9(){}, +YL:function YL(){}, +Z2:function Z2(){}, +bop(a,b){var s=a.gba(),r=s.a +if(r instanceof A.vQ)b.push(r) +return!(s instanceof A.Gv)}, +aMy(a){var s=a.WJ(t.Mf) +return s==null?null:s.d}, +vQ:function vQ(a,b){this.a=a +this.$ti=b}, +XB:function XB(a){this.a=a}, +PD:function PD(){this.a=null}, +aMx:function aMx(a){this.a=a}, +Gv:function Gv(a,b,c){this.c=a +this.d=b +this.a=c}, +PC:function PC(){}, +aKw:function aKw(){}, +aNH:function aNH(){}, +a23:function a23(a,b){this.a=a +this.d=b}, +boN(a,b){return new A.GM(b,B.b1,B.a6A,a,null)}, +boO(a){return new A.GM(null,null,B.a6G,a,null)}, +boP(a,b){var s,r=a.WJ(t.bb) +if(r==null)return!1 +s=A.Rn(a).oT(a) +if(r.w.G(0,s))return r.r===b +return!1}, +Q7(a){var s=a.bh(t.bb) +return s==null?null:s.f}, +GM:function GM(a,b,c,d,e){var _=this +_.f=a +_.r=b +_.w=c +_.b=d +_.a=e}, +wh(a){var s=a.bh(t.gf) +return s==null?null:s.f}, +Tk(a,b){return new A.Ct(a,b,null)}, +wg:function wg(a,b,c){this.c=a +this.d=b +this.a=c}, +aoE:function aoE(a,b,c,d,e,f){var _=this +_.cS$=a +_.jU$=b +_.vU$=c +_.hM$=d +_.jV$=e +_.a=null +_.b=f +_.c=null}, +Ct:function Ct(a,b,c){this.f=a +this.b=b +this.a=c}, +R7:function R7(a,b,c){this.c=a +this.d=b +this.a=c}, +WV:function WV(a){var _=this +_.d=null +_.e=!1 +_.r=_.f=null +_.w=!1 +_.a=null +_.b=a +_.c=null}, +b5U:function b5U(a){this.a=a}, +b5T:function b5T(a,b){this.a=a +this.b=b}, +hw:function hw(){}, +nn:function nn(){}, +aQx:function aQx(a,b){this.a=a +this.b=b}, +b8y:function b8y(){}, +au_:function au_(){}, +dv:function dv(){}, +mO:function mO(){}, +WR:function WR(){}, +R_:function R_(a,b,c){var _=this +_.cy=a +_.y=null +_.a=!1 +_.c=_.b=null +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1 +_.$ti=c}, +Bj:function Bj(a,b){var _=this +_.cy=a +_.y=null +_.a=!1 +_.c=_.b=null +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1}, +R0:function R0(a,b){var _=this +_.cy=a +_.y=null +_.a=!1 +_.c=_.b=null +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1}, +b8z:function b8z(){}, +wl:function wl(a,b){this.b=a +this.c=b}, +aaO:function aaO(a,b,c,d,e,f,g){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f +_.$ti=g}, +aaN:function aaN(a,b){this.a=a +this.b=b}, +JQ:function JQ(a,b,c,d,e,f,g,h){var _=this +_.e=_.d=null +_.f=a +_.r=$ +_.w=!1 +_.cS$=b +_.jU$=c +_.vU$=d +_.hM$=e +_.jV$=f +_.a=null +_.b=g +_.c=null +_.$ti=h}, +b6a:function b6a(a){this.a=a}, +b6b:function b6b(a){this.a=a}, +b69:function b69(a){this.a=a}, +b67:function b67(a,b,c){this.a=a +this.b=b +this.c=c}, +b64:function b64(a){this.a=a}, +b65:function b65(a,b){this.a=a +this.b=b}, +b68:function b68(){}, +b66:function b66(){}, +ap_:function ap_(a,b,c,d,e,f,g){var _=this +_.f=a +_.r=b +_.w=c +_.x=d +_.y=e +_.b=f +_.a=g}, +aoB:function aoB(a){var _=this +_.y=null +_.a=!1 +_.c=_.b=null +_.ac$=0 +_.ah$=a +_.b6$=_.b_$=0 +_.K$=!1}, +Kb:function Kb(){}, +aKQ(a,b){var s=a.bh(t.Fe),r=s==null?null:s.x +return b.h("ig<0>?").a(r)}, +Gs:function Gs(){}, +hX:function hX(){}, +aWN:function aWN(a,b,c){this.a=a +this.b=b +this.c=c}, +aWL:function aWL(a,b,c){this.a=a +this.b=b +this.c=c}, +aWM:function aWM(a,b,c){this.a=a +this.b=b +this.c=c}, +aWK:function aWK(a,b){this.a=a +this.b=b}, +a6m:function a6m(){}, +ahX:function ahX(a,b){this.e=a +this.a=b +this.b=null}, +VT:function VT(a,b,c,d,e,f){var _=this +_.f=a +_.r=b +_.w=c +_.x=d +_.b=e +_.a=f}, +Jw:function Jw(a,b,c){this.c=a +this.a=b +this.$ti=c}, +u_:function u_(a,b,c,d){var _=this +_.d=null +_.e=$ +_.f=a +_.r=b +_.a=null +_.b=c +_.c=null +_.$ti=d}, +b43:function b43(a){this.a=a}, +b47:function b47(a){this.a=a}, +b48:function b48(a){this.a=a}, +b46:function b46(a){this.a=a}, +b44:function b44(a){this.a=a}, +b45:function b45(a){this.a=a}, +ig:function ig(){}, +aKR:function aKR(a,b){this.a=a +this.b=b}, +aKP:function aKP(){}, +Q5:function Q5(){}, +Qi:function Qi(){}, +CU:function CU(){}, +aaU(a,b,c,d){return new A.aaT(d,a,c,b,null)}, +aaT:function aaT(a,b,c,d,e){var _=this +_.d=a +_.f=b +_.r=c +_.x=d +_.a=e}, +ab_:function ab_(){}, +ve:function ve(a){this.a=a +this.b=!1}, +aGE:function aGE(a,b){this.c=a +this.a=b +this.b=!1}, +aRw:function aRw(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}, +aC7:function aC7(a,b){this.c=a +this.a=b +this.b=!1}, +a_x:function a_x(a,b){var _=this +_.c=$ +_.d=a +_.a=b +_.b=!1}, +a2Z:function a2Z(a){var _=this +_.d=_.c=$ +_.a=a +_.b=!1}, +Rl:function Rl(a,b,c){this.a=a +this.b=b +this.$ti=c}, +aRs:function aRs(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aRr:function aRr(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +bpr(a,b){return new A.Rm(a,b,null)}, +Rn(a){var s=a.bh(t.Cz),r=s==null?null:s.f +return r==null?B.L4:r}, +ab0:function ab0(){}, +aRt:function aRt(){}, +aRu:function aRu(){}, +aRv:function aRv(){}, +b8o:function b8o(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +Rm:function Rm(a,b,c){this.f=a +this.b=b +this.a=c}, +Rp(a){return new A.Ro(a,A.b([],t.Va),$.aa())}, +Ro:function Ro(a,b,c){var _=this +_.a=a +_.f=b +_.ac$=0 +_.ah$=c +_.b6$=_.b_$=0 +_.K$=!1}, +bsG(a,b){return b}, +aT6:function aT6(){}, +WZ:function WZ(a){this.a=a}, +aT7:function aT7(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.f=d +_.r=e}, +Xi:function Xi(a,b){this.c=a +this.a=b}, +Xj:function Xj(a,b){var _=this +_.f=_.e=_.d=null +_.r=!1 +_.ku$=a +_.a=null +_.b=b +_.c=null}, +b6r:function b6r(a,b){this.a=a +this.b=b}, +au5:function au5(){}, +tp:function tp(){}, +a3F:function a3F(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +aj0:function aj0(){}, +bgy(a,b,c,d,e){var s=new A.q_(c,e,d,a,0) +if(b!=null)s.lz$=b +return s}, +bSj(a){return a.lz$===0}, +lE:function lE(){}, +aem:function aem(){}, +kD:function kD(){}, +Hq:function Hq(a,b,c,d){var _=this +_.d=a +_.a=b +_.b=c +_.lz$=d}, +q_:function q_(a,b,c,d,e){var _=this +_.d=a +_.e=b +_.a=c +_.b=d +_.lz$=e}, +pN:function pN(a,b,c,d,e,f){var _=this +_.d=a +_.e=b +_.f=c +_.a=d +_.b=e +_.lz$=f}, +pZ:function pZ(a,b,c,d){var _=this +_.d=a +_.a=b +_.b=c +_.lz$=d}, +ae5:function ae5(a,b,c,d){var _=this +_.d=a +_.a=b +_.b=c +_.lz$=d}, +X7:function X7(){}, +bJx(a){var s=a.bh(t.yd) +return s==null?null:s.f}, +X6:function X6(a,b,c){this.f=a +this.b=b +this.a=c}, +xc:function xc(a){var _=this +_.a=a +_.n9$=_.n8$=_.n7$=null}, +Rr:function Rr(a,b){this.c=a +this.a=b}, +Rs:function Rs(a,b){var _=this +_.d=a +_.a=null +_.b=b +_.c=null}, +aRx:function aRx(a){this.a=a}, +aRy:function aRy(a){this.a=a}, +aRz:function aRz(a){this.a=a}, +bCi(a,b,c){var s,r +if(a>0){s=a/c +if(b"))}, +bhY(a,b){var s=$.b1.bf$.z.i(0,a).gaF() +s.toString +return t.x.a(s).e5(b)}, +Hr:function Hr(a,b){this.a=a +this.b=b}, +Hs:function Hs(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=null +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j +_.Q=k +_.as=l +_.at=m +_.ax=n +_.ay=!1 +_.CW=_.ch=null +_.cy=_.cx=$ +_.dx=_.db=null +_.ac$=0 +_.ah$=o +_.b6$=_.b_$=0 +_.K$=!1}, +aRN:function aRN(){}, +H0:function H0(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.c=a +_.d=b +_.e=c +_.r=d +_.w=e +_.Q=f +_.ay=g +_.ch=h +_.CW=i +_.cx=j +_.cy=k +_.db=l +_.a=m}, +pS:function pS(a,b,c,d,e){var _=this +_.w=_.r=_.f=_.e=_.d=null +_.y=_.x=$ +_.z=a +_.as=_.Q=!1 +_.at=$ +_.f2$=b +_.bV$=c +_.a=null +_.b=d +_.c=null +_.$ti=e}, +aOW:function aOW(a){this.a=a}, +aOS:function aOS(a){this.a=a}, +aOT:function aOT(a){this.a=a}, +aOP:function aOP(a){this.a=a}, +aOQ:function aOQ(a){this.a=a}, +aOR:function aOR(a){this.a=a}, +aOU:function aOU(a){this.a=a}, +aOV:function aOV(a){this.a=a}, +aOX:function aOX(a){this.a=a}, +aOY:function aOY(a){this.a=a}, +qu:function qu(a,b,c,d,e,f,g,h,i,j){var _=this +_.cZ=a +_.k2=!1 +_.K=_.b6=_.b_=_.ah=_.ac=_.bn=_.bv=_.y2=_.y1=_.xr=_.x2=_.x1=_.to=_.ry=_.rx=_.RG=_.R8=_.p4=_.p3=_.p2=_.p1=_.ok=_.k4=_.k3=null +_.at=b +_.ay=c +_.ch=d +_.cx=_.CW=null +_.cy=!1 +_.db=null +_.f=e +_.r=f +_.w=null +_.a=g +_.b=null +_.c=h +_.d=i +_.e=j}, +qv:function qv(a,b,c,d,e,f,g,h,i,j){var _=this +_.f5=a +_.aS=_.aM=_.ao=_.av=_.M=_.a5=_.K=_.b6=_.b_=_.ah=_.ac=null +_.k3=_.k2=!1 +_.ok=_.k4=null +_.at=b +_.ay=c +_.ch=d +_.cx=_.CW=null +_.cy=!1 +_.db=null +_.f=e +_.r=f +_.w=null +_.a=g +_.b=null +_.c=h +_.d=i +_.e=j}, +JI:function JI(){}, +bHs(a,b){var s,r=a.b,q=b.b,p=r-q +if(!(p<3&&a.d-b.d>-3))s=q-r<3&&b.d-a.d>-3 +else s=!0 +if(s)return 0 +if(Math.abs(p)>3)return r>q?1:-1 +return a.d>b.d?1:-1}, +bHr(a,b){var s=a.a,r=b.a,q=s-r +if(q<1e-10&&a.c-b.c>-1e-10)return-1 +if(r-s<1e-10&&b.c-a.c>-1e-10)return 1 +if(Math.abs(q)>1e-10)return s>r?1:-1 +return a.c>b.c?1:-1}, +Ge:function Ge(){}, +aLg:function aLg(a){this.a=a}, +aLh:function aLh(a,b,c){this.a=a +this.b=b +this.c=c}, +aLi:function aLi(){}, +aLe:function aLe(a,b){this.a=a +this.b=b}, +aLf:function aLf(a){this.a=a}, +aLj:function aLj(a,b){this.a=a +this.b=b}, +aLk:function aLk(a){this.a=a}, +alG:function alG(){}, +aba(a){var s=a.bh(t.Wu) +return s==null?null:s.f}, +bpv(a,b){return new A.Hv(b,a,null)}, +Ht:function Ht(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +apo:function apo(a,b,c,d){var _=this +_.d=a +_.zc$=b +_.vW$=c +_.a=null +_.b=d +_.c=null}, +Hv:function Hv(a,b,c){this.f=a +this.b=b +this.a=c}, +ab9:function ab9(){}, +au4:function au4(){}, +YY:function YY(){}, +RQ:function RQ(a,b){this.c=a +this.a=b}, +apC:function apC(a){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null}, +apD:function apD(a,b,c){this.x=a +this.b=b +this.a=c}, +im(a,b,c,d,e){return new A.b9(a,c,e,b,d,B.D)}, +bK4(a){var s=A.D(t.oC,t.Xw) +a.al(0,new A.aSI(s)) +return s}, +abw(a,b,c){return new A.BK(null,c,a,b,null)}, +Oy:function Oy(a,b){this.a=a +this.b=b}, +b9:function b9(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +wY:function wY(a,b){this.a=a +this.b=b}, +HI:function HI(a,b){var _=this +_.b=a +_.c=null +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1}, +aSI:function aSI(a){this.a=a}, +aSH:function aSH(){}, +BK:function BK(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +Xn:function Xn(a){var _=this +_.a=_.d=null +_.b=a +_.c=null}, +RS:function RS(a,b){var _=this +_.c=a +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1}, +RR:function RR(a,b){this.c=a +this.a=b}, +Xm:function Xm(a,b,c){var _=this +_.d=a +_.e=b +_.a=null +_.b=c +_.c=null}, +apH:function apH(a,b,c){this.f=a +this.b=b +this.a=c}, +apF:function apF(){}, +apG:function apG(){}, +apI:function apI(){}, +apL:function apL(){}, +apM:function apM(){}, +atd:function atd(){}, +bgF(a,b,c,d,e){return new A.abB(e,d,b,a,c)}, +abB:function abB(a,b,c,d,e){var _=this +_.c=a +_.e=b +_.f=c +_.x=d +_.a=e}, +aSR:function aSR(a,b,c){this.a=a +this.b=b +this.c=c}, +JT:function JT(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +apO:function apO(a,b){var _=this +_.c=_.b=_.a=_.ch=_.ax=_.k4=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +WP:function WP(a,b,c,d,e,f,g){var _=this +_.K=a +_.a5=b +_.M=c +_.av=d +_.a0$=e +_.fx=f +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +b5u:function b5u(a,b){this.a=a +this.b=b}, +b5t:function b5t(a,b){this.a=a +this.b=b}, +YU:function YU(){}, +au6:function au6(){}, +au7:function au7(){}, +abD:function abD(){}, +abE:function abE(a,b){this.c=a +this.a=b}, +aSU:function aSU(a){this.a=a}, +aon:function aon(a,b,c,d){var _=this +_.V=a +_.aE=null +_.a0$=b +_.fx=c +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +bpP(a,b){return new A.HN(b,A.bgL(t.S,t.Dv),a,B.al)}, +bKd(a,b,c,d,e){if(b===e-1)return d +return d+(d-c)/(b-a+1)*(e-b-1)}, +bGl(a,b){return new A.O9(b,a,null)}, +abS:function abS(){}, +HO:function HO(){}, +abQ:function abQ(a,b){this.d=a +this.a=b}, +HN:function HN(a,b,c,d){var _=this +_.k4=a +_.ok=b +_.p2=_.p1=null +_.p3=!1 +_.c=_.b=_.a=_.ch=_.ax=null +_.d=$ +_.e=c +_.f=null +_.r=d +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +aTb:function aTb(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aT9:function aT9(){}, +aTa:function aTa(a,b){this.a=a +this.b=b}, +aT8:function aT8(a,b,c){this.a=a +this.b=b +this.c=c}, +aTc:function aTc(a,b){this.a=a +this.b=b}, +O9:function O9(a,b,c){this.f=a +this.b=b +this.a=c}, +S4:function S4(){}, +lz:function lz(){}, +q3:function q3(){}, +S5:function S5(a,b,c,d,e){var _=this +_.k4=a +_.ok=b +_.c=_.b=_.a=_.ch=_.ax=_.p1=null +_.d=$ +_.e=c +_.f=null +_.r=d +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1 +_.$ti=e}, +Xp:function Xp(){}, +bpQ(a,b,c,d,e){return new A.abW(c,d,!0,e,b,null)}, +abU:function abU(a,b){this.a=a +this.b=b}, +S6:function S6(a){var _=this +_.a=!1 +_.ac$=0 +_.ah$=a +_.b6$=_.b_$=0 +_.K$=!1}, +abW:function abW(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.c=e +_.a=f}, +JP:function JP(a,b,c,d,e,f,g,h){var _=this +_.V=a +_.aE=b +_.bj=c +_.ce=d +_.dD=e +_.eB=_.dj=null +_.fT=!1 +_.fU=null +_.a0$=f +_.fx=g +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=h +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +abV:function abV(){}, +UD:function UD(){}, +ac0:function ac0(a){this.a=a}, +bOL(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=A.b([],t.bt) +for(s=J.al(c),r=0,q=0,p=0;r=0){g=p+k +f=g+(n-m) +p=f+1 +q=g-m +e.push(new A.wD(new A.cZ(g,f),o.b))}++r}return e}, +bRs(a,b,c,d,e){var s=null,r=e.b,q=e.a,p=a.a +if(q!==p)r=A.bOL(p,q,r) +if(A.ci()===B.ar)return A.cS(A.bOl(r,a,c,d,b),s,s,c,s) +return A.cS(A.bOm(r,a,c,d,a.b.c),s,s,c,s)}, +bOm(a,b,c,d,e){var s,r,q,p,o=null,n=A.b([],t.Ne),m=b.a,l=c.bT(d),k=m.length,j=J.al(a),i=0,h=0 +while(!0){if(!(ii){r=r=e?c:l +n.push(A.cS(o,o,o,s,B.d.am(m,r,p)));++h +i=p}}j=m.length +if(ie){r=r=e&&g<=r&&f){o.push(A.cS(p,p,p,c,B.d.am(n,e,j))) +o.push(A.cS(p,p,p,l,B.d.am(n,j,g))) +o.push(A.cS(p,p,p,c,B.d.am(n,g,r)))}else o.push(A.cS(p,p,p,c,B.d.am(n,e,r))) +e=r}else{q=s.b +q=q=j&&q<=g&&f?l:k +o.push(A.cS(p,p,p,s,B.d.am(n,r,q)));++d +e=q}}j=n.length +if(e") +s=A.ab(new A.W(b,new A.aUS(),s),!1,s.h("aI.E"))}else s=null +return new A.Sw(b,c,a,d,s,null)}, +q7:function q7(a,b){this.b=a +this.c=b}, +lL:function lL(a,b){this.a=a +this.b=b}, +Sw:function Sw(a,b,c,d,e,f){var _=this +_.c=a +_.e=b +_.r=c +_.w=d +_.y=e +_.a=f}, +aUR:function aUR(){}, +aUS:function aUS(){}, +aqP:function aqP(a,b,c,d){var _=this +_.k4=a +_.ok=!1 +_.p1=b +_.c=_.b=_.a=_.ch=_.ax=null +_.d=$ +_.e=c +_.f=null +_.r=d +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +b7g:function b7g(a,b){this.a=a +this.b=b}, +b7f:function b7f(a,b,c){this.a=a +this.b=b +this.c=c}, +b7h:function b7h(){}, +b7i:function b7i(a){this.a=a}, +b7e:function b7e(){}, +b7d:function b7d(){}, +b7j:function b7j(){}, +acQ:function acQ(a,b){this.b=a +this.a=b}, +K_:function K_(a,b){this.a=a +this.b=b}, +auf:function auf(){}, +adg(a,b,c){return new A.adf(!0,c,null,B.agy,!1,a,null)}, +acZ:function acZ(a,b){this.c=a +this.a=b}, +QT:function QT(a,b,c,d,e,f,g){var _=this +_.es=a +_.hx=b +_.dC=c +_.V=d +_.a0$=e +_.fx=f +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +acY:function acY(){}, +H8:function H8(a,b,c,d,e,f,g,h,i,j){var _=this +_.es=!1 +_.hx=a +_.dC=b +_.dn=c +_.hL=d +_.bf=e +_.ip=f +_.V=g +_.a0$=h +_.fx=i +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=j +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +adf:function adf(a,b,c,d,e,f,g){var _=this +_.e=a +_.r=b +_.w=c +_.x=d +_.y=e +_.c=f +_.a=g}, +r2(a,b,c,d,e,f,g,h,i){return new A.Er(f,g,!0,d,c,i,h,a,b)}, +bep(a){var s=a.bh(t.uy) +return s==null?null:s.gwx()}, +dI(a,b,c,d,e,f,g){return new A.f7(a,null,e,f,g,c,null,b,d,null)}, +bKW(a,b,c,d,e){var s=null +return new A.f7(s,a,c,d,s,s,e,s,s,b)}, +Er:function Er(a,b,c,d,e,f,g,h,i){var _=this +_.w=a +_.x=b +_.y=c +_.z=d +_.Q=e +_.as=f +_.at=g +_.b=h +_.a=i}, +amb:function amb(a){this.a=a}, +f7:function f7(a,b,c,d,e,f,g,h,i,j){var _=this +_.c=a +_.d=b +_.e=c +_.r=d +_.w=e +_.z=f +_.as=g +_.at=h +_.ax=i +_.a=j}, +Mo:function Mo(){}, +a2q:function a2q(){}, +yJ:function yJ(a){this.a=a}, +yL:function yL(a){this.a=a}, +yK:function yK(a){this.a=a}, +jA:function jA(){}, +rb:function rb(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +re:function re(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +z7:function z7(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +z3:function z3(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +z4:function z4(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +m2:function m2(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +v0:function v0(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +rf:function rf(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +rd:function rd(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +z6:function z6(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +rc:function rc(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +tr:function tr(a){this.a=a}, +ts:function ts(){}, +pa:function pa(a){this.b=a}, +vW:function vW(){}, +wd:function wd(){}, +ox:function ox(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +wR:function wR(){}, +nz:function nz(a,b,c){this.a=a +this.b=b +this.c=c}, +wO:function wO(){}, +brE(a,b,c,d,e,f,g,h,i,j){return new A.Xg(b,f,d,e,c,h,j,g,i,a,null)}, +K2(a){var s +switch(A.ci().a){case 0:case 1:case 3:if(a<=3)s=a +else{s=B.f.bx(a,3) +if(s===0)s=3}return s +case 2:case 4:return Math.min(a,3) +case 5:return a<2?a:2+B.f.bx(a,2)}}, +jZ:function jZ(a,b,c){var _=this +_.e=!1 +_.dY$=a +_.bd$=b +_.a=c}, +aVS:function aVS(){}, +adq:function adq(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=$ +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=!1 +_.ax=_.at=_.as=_.Q=$}, +abb:function abb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=!1 +_.w=g +_.x=h +_.y=i +_.z=j +_.Q=k +_.as=l +_.at=!1 +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.cy=r +_.db=s +_.dx=a0 +_.dy=a1 +_.fr=a2 +_.fx=a3 +_.fy=a4 +_.go=a5 +_.id=a6 +_.k1=a7 +_.k2=a8 +_.k4=_.k3=null +_.ok=a9 +_.p1=b0 +_.p2=!1}, +aRU:function aRU(a){this.a=a}, +aRS:function aRS(a,b){this.a=a +this.b=b}, +aRT:function aRT(a,b){this.a=a +this.b=b}, +aRV:function aRV(a,b,c){this.a=a +this.b=b +this.c=c}, +aRR:function aRR(a){this.a=a}, +aRQ:function aRQ(a,b,c){this.a=a +this.b=b +this.c=c}, +xn:function xn(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +Xk:function Xk(a,b,c){var _=this +_.d=$ +_.jk$=a +_.dQ$=b +_.a=null +_.b=c +_.c=null}, +Xg:function Xg(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.a=k}, +Xh:function Xh(a,b,c){var _=this +_.d=$ +_.jk$=a +_.dQ$=b +_.a=null +_.b=c +_.c=null}, +b6p:function b6p(a){this.a=a}, +b6q:function b6q(a){this.a=a}, +SU:function SU(){}, +ST:function ST(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.cy=r +_.db=s +_.dx=a0 +_.dy=a1 +_.a=a2}, +XQ:function XQ(a){this.a=null +this.b=a +this.c=null}, +b7K:function b7K(a){this.a=a}, +b7L:function b7L(a){this.a=a}, +b7M:function b7M(a){this.a=a}, +b7N:function b7N(a){this.a=a}, +b7O:function b7O(a){this.a=a}, +b7P:function b7P(a){this.a=a}, +b7Q:function b7Q(a){this.a=a}, +b7R:function b7R(a){this.a=a}, +b7S:function b7S(a){this.a=a}, +b7T:function b7T(a){this.a=a}, +LF:function LF(){}, +E_:function E_(a,b){this.a=a +this.b=b}, +oJ:function oJ(){}, +agy:function agy(){}, +YZ:function YZ(){}, +Z_:function Z_(){}, +bLb(a,b,c,d){var s,r,q,p,o=A.dx(b.cW(0,null),B.h),n=b.gC(0).Js(0,B.h),m=A.pT(o,A.dx(b.cW(0,null),n)) +o=m.a +if(isNaN(o)||isNaN(m.b)||isNaN(m.c)||isNaN(m.d))return B.aao +s=B.b.ga_(c).a.b-B.b.ga9(c).a.b>a/2 +n=s?o:o+B.b.ga9(c).a.a +r=m.b +q=B.b.ga9(c) +o=s?m.c:o+B.b.ga_(c).a.a +p=B.b.ga_(c) +n+=(o-n)/2 +o=m.d +return new A.SX(new A.i(n,A.U(r+q.a.b-d,r,o)),new A.i(n,A.U(r+p.a.b,r,o)))}, +SX:function SX(a,b){this.a=a +this.b=b}, +bLc(a,b,c){var s=b/2,r=a-s +if(r<0)return 0 +if(a+s>c)return c-b +return r}, +ads:function ads(a,b,c){this.b=a +this.c=b +this.d=c}, +bh2(a){var s=a.bh(t.l3),r=s==null?null:s.f +return r!==!1}, +bqk(a){var s=a.Nx(t.l3),r=s==null?null:s.r +return r==null?B.Lq:r}, +Cg:function Cg(a,b,c){this.c=a +this.d=b +this.a=c}, +aru:function aru(a,b){var _=this +_.d=!0 +_.e=a +_.a=null +_.b=b +_.c=null}, +UZ:function UZ(a,b,c,d){var _=this +_.f=a +_.r=b +_.b=c +_.a=d}, +ly:function ly(){}, +fw:function fw(){}, +asy:function asy(a,b,c){var _=this +_.w=a +_.a=null +_.b=!1 +_.c=null +_.d=b +_.e=null +_.f=c +_.r=$}, +Um:function Um(a){this.$ti=a}, +adD:function adD(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +bgJ(a,b,c,d){return new A.abM(c,d,a,b,null)}, +bpo(a,b){return new A.aaY(A.bWr(),B.a5,null,a,b,null)}, +bJs(a){return A.G6(a,a,1)}, +aQF(a,b){return new A.aaI(A.bWq(),B.a5,null,a,b,null)}, +bJi(a){var s,r,q=a*3.141592653589793*2,p=new Float64Array(16) +p[15]=1 +s=Math.cos(q) +r=Math.sin(q) +p[0]=s +p[1]=r +p[2]=0 +p[4]=-r +p[5]=s +p[6]=0 +p[8]=0 +p[9]=0 +p[10]=1 +p[3]=0 +p[7]=0 +p[11]=0 +return new A.by(p)}, +li(a,b,c){return new A.a3s(c,!1,b,null)}, +mX(a,b,c){return new A.ZU(b,c,a,null)}, +KE:function KE(){}, +TP:function TP(a){this.a=null +this.b=a +this.c=null}, +aYO:function aYO(){}, +abM:function abM(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +a6J:function a6J(){}, +aaY:function aaY(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.c=e +_.a=f}, +aaI:function aaI(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.c=e +_.a=f}, +abF:function abF(a,b,c,d){var _=this +_.e=a +_.w=b +_.c=c +_.a=d}, +a3s:function a3s(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +a1X:function a1X(a,b,c,d){var _=this +_.e=a +_.r=b +_.c=c +_.a=d}, +Ot:function Ot(){}, +ZU:function ZU(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +bQs(a,b,c){var s={} +s.a=null +return new A.b9z(s,A.bn("arg"),a,b,c)}, +Is:function Is(a,b,c,d,e,f,g,h,i){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.a=h +_.$ti=i}, +It:function It(a,b,c){var _=this +_.d=a +_.e=$ +_.f=null +_.r=!1 +_.a=_.x=_.w=null +_.b=b +_.c=null +_.$ti=c}, +aWU:function aWU(a){this.a=a}, +Iu:function Iu(a,b){this.a=a +this.b=b}, +Tj:function Tj(a,b,c,d){var _=this +_.w=a +_.x=b +_.a=c +_.ac$=0 +_.ah$=d +_.b6$=_.b_$=0 +_.K$=!1}, +as4:function as4(a,b){this.a=a +this.b=-1 +this.$ti=b}, +b9z:function b9z(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +b9y:function b9y(a,b,c){this.a=a +this.b=b +this.c=c}, +Y2:function Y2(){}, +Cx(a){var s=A.bGO(a,t._l) +return s==null?null:s.f}, +bqS(a){var s=a.bh(t.Lo) +s=s==null?null:s.f +if(s==null){s=$.Bg.vT$ +s===$&&A.c()}return s}, +aeh:function aeh(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +aXp:function aXp(a){this.a=a}, +Wk:function Wk(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +anJ:function anJ(a,b){var _=this +_.bn=$ +_.c=_.b=_.a=_.ch=_.ax=_.ah=_.ac=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +D4:function D4(a,b,c){this.f=a +this.b=b +this.a=c}, +Wf:function Wf(a,b,c){this.f=a +this.b=b +this.a=c}, +UF:function UF(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +aXq(a,b){var s +switch(b.a){case 0:s=a.bh(t.I) +s.toString +return A.biN(s.w) +case 1:return B.a7 +case 2:s=a.bh(t.I) +s.toString +return A.biN(s.w) +case 3:return B.a7}}, +Tt:function Tt(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.r=b +_.w=c +_.x=d +_.y=e +_.Q=f +_.c=g +_.a=h}, +asm:function asm(a,b,c){var _=this +_.ah=!1 +_.b_=null +_.k4=$ +_.ok=a +_.c=_.b=_.a=_.ch=_.ax=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +abx:function abx(a,b,c,d,e){var _=this +_.e=a +_.r=b +_.w=c +_.c=d +_.a=e}, +auH:function auH(){}, +auI:function auI(){}, +bqU(a){var s,r,q,p={} +p.a=a +s=t.ps +r=a.k9(s) +q=!0 +while(!0){if(!(q&&r!=null))break +q=s.a(a.Ke(r)).f +r.nJ(new A.aXs(p)) +r=p.a.k9(s)}return q}, +aep:function aep(a,b,c){this.c=a +this.e=b +this.a=c}, +aXs:function aXs(a){this.a=a}, +Yh:function Yh(a,b,c){this.f=a +this.b=b +this.a=c}, +asn:function asn(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +aow:function aow(a,b,c,d,e){var _=this +_.V=a +_.aE=b +_.a0$=c +_.fx=d +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +bqW(a,b){var s={},r=A.b([],t.p),q=A.b([14],t.n) +s.a=0 +new A.aXB(s,q,b,r).$1(a) +return r}, +IF:function IF(){}, +aXB:function aXB(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +asw:function asw(a,b,c){this.f=a +this.b=b +this.a=c}, +afA:function afA(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +WN:function WN(a,b,c,d,e,f){var _=this +_.K=a +_.a5=b +_.M=c +_.a0$=d +_.fx=e +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=f +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +b5s:function b5s(a){this.a=a}, +b5r:function b5r(a){this.a=a}, +atX:function atX(){}, +Yk(a){return new A.Yj(a,J.l5(a.$1(B.a6F)))}, +bhM(a){return new A.Yi(a,B.q,1,B.J,-1)}, +Yl(a){var s=null +return new A.asx(a,!0,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +ei(a,b,c){if(c.h("cf<0>").b(a))return a.aG(b) +return a}, +bY(a,b,c,d,e){if(a==null&&b==null)return null +return new A.VH(a,b,c,d,e.h("VH<0>"))}, +aXC(a){var s=A.C(t.EK) +if(a!=null)s.I(0,a) +return new A.aeE(s,$.aa())}, +dM:function dM(a,b){this.a=a +this.b=b}, +aeB:function aeB(){}, +Yj:function Yj(a,b){this.c=a +this.a=b}, +aeC:function aeC(){}, +V3:function V3(a,b){this.a=a +this.c=b}, +aeA:function aeA(){}, +Yi:function Yi(a,b,c,d,e){var _=this +_.x=a +_.a=b +_.b=c +_.c=d +_.d=e}, +aeD:function aeD(){}, +asx:function asx(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.b6=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3 +_.dy=a4 +_.fr=a5 +_.fx=a6 +_.fy=a7}, +cf:function cf(){}, +VH:function VH(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.$ti=e}, +d1:function d1(a,b){this.a=a +this.$ti=b}, +d0:function d0(a,b){this.a=a +this.$ti=b}, +aeE:function aeE(a,b){var _=this +_.a=a +_.ac$=0 +_.ah$=b +_.b6$=_.b_$=0 +_.K$=!1}, +Tz:function Tz(a,b,c){this.c=a +this.d=b +this.a=c}, +asA:function asA(a){var _=this +_.a=_.d=null +_.b=a +_.c=null}, +LN:function LN(a,b,c,d){var _=this +_.c=a +_.d=b +_.ax=c +_.a=d}, +Uh:function Uh(a,b,c){var _=this +_.d=a +_.e=b +_.a=null +_.b=c +_.c=null}, +b_v:function b_v(a){this.a=a}, +b_u:function b_u(a,b){this.a=a +this.b=b}, +b_w:function b_w(a,b){this.a=a +this.b=b}, +b_p:function b_p(a){this.a=a}, +b_o:function b_o(a){this.a=a}, +b_q:function b_q(a,b){this.a=a +this.b=b}, +b_r:function b_r(a){this.a=a}, +b_n:function b_n(a){this.a=a}, +b_t:function b_t(a,b){this.a=a +this.b=b}, +b_s:function b_s(a,b){this.a=a +this.b=b}, +b_m:function b_m(){}, +a8o:function a8o(a,b){this.a=a +this.b=b}, +adL:function adL(a,b){this.a=a +this.b=b}, +lV:function lV(a,b){this.a=a +this.b=b}, +a4H:function a4H(a,b){this.b=a +this.a=b}, +a4I:function a4I(a,b){this.b=a +this.a=b}, +a4J:function a4J(a,b){this.b=a +this.a=b}, +a4E:function a4E(a,b){this.b=a +this.a=b}, +a4G:function a4G(a,b){this.b=a +this.a=b}, +a4F:function a4F(a,b){this.b=a +this.a=b}, +a9w:function a9w(a,b){this.b=a +this.a=b}, +a9v:function a9v(a,b){this.b=a +this.a=b}, +a9u:function a9u(a,b){this.b=a +this.a=b}, +a4K:function a4K(a,b){this.b=a +this.a=b}, +b6K:function b6K(){this.c=this.b=null}, +adK:function adK(a,b,c){this.b=a +this.c=b +this.a=c}, +aWG:function aWG(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aWF:function aWF(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +adw:function adw(a,b,c){this.b=a +this.c=b +this.a=c}, +a5h:function a5h(a,b){this.b=a +this.a=b}, +aHA:function aHA(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aHz:function aHz(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +E1:function E1(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +agI:function agI(a){var _=this +_.e=$ +_.a=null +_.b=a +_.c=null}, +b_l:function b_l(a){this.a=a}, +b_k:function b_k(a,b){this.a=a +this.b=b}, +a1e:function a1e(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +azv:function azv(a){this.a=a}, +azu:function azu(a){this.a=a}, +azs:function azs(a,b,c){this.a=a +this.b=b +this.c=c}, +azt:function azt(a,b,c){this.a=a +this.b=b +this.c=c}, +yp:function yp(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +a1d:function a1d(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +azr:function azr(a){this.a=a}, +azp:function azp(){}, +azq:function azq(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +azm:function azm(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +azn:function azn(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +azo:function azo(a){this.a=a}, +ql:function ql(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.at=a +_.ax=b +_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=null +_.fr=!1 +_.fx=c +_.fy=d +_.k1=_.id=_.go=$ +_.k4=_.k3=_.k2=null +_.ok=$ +_.p1=!1 +_.p2=e +_.p3=f +_.p4=null +_.R8=g +_.RG=h +_.rx=null +_.f=i +_.r=j +_.w=null +_.a=k +_.b=null +_.c=l +_.d=m +_.e=n}, +bPo(a,b,c){var s=null,r=a.gpv(a).gaV6(0) +if(B.d.c4(r,"image/"))return new A.vf(A.bgs(s,s,new A.pI(a.gpv(a).ace(),1)),b,c,s) +else if(B.d.c4(r,"text/"))return A.dI(a.gpv(a).aOf(),s,s,s,s,s,s) +return B.fP}, +bcA:function bcA(){}, +bcB:function bcB(){}, +TW:function TW(a,b){this.a=a +this.b=b +this.c=0}, +aqQ:function aqQ(a){this.a=a}, +Vz:function Vz(a,b){this.b=a +this.c=b}, +aK6:function aK6(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){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 +_.CW=r +_.cx=s +_.cy=a0 +_.dx=_.db=null +_.dy=!1}, +aK9:function aK9(){}, +aKa:function aKa(a){this.a=a}, +aKb:function aKb(a){this.a=a}, +aK8:function aK8(a){this.a=a}, +aK7:function aK7(a,b){this.a=a +this.b=b}, +bfI(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,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,d1,d2,d3){var s +if(d2==null)s=null +else s=d2 +return new A.Ae(a,b9,c0,h,n,p,q,a0,a1,a3,a4,a6,a7,a9,b0,b2,m,c1,l,c,b4,g,b,b7,b5,b6,c7,c2,c8,c3,c6,c5,c4,c9,f,e,k,j,b3,d0,o,r,a2,a5,a8,b1,d3,b8,d,i,s,d1,A.b3(["a",a,"p",b9,"li",b9,"code",h,"pre",b9,"h1",n,"h2",q,"h3",a1,"h4",a4,"h5",a7,"h6",b0,"em",m,"strong",c1,"del",l,"blockquote",c,"img",b4,"table",b9,"th",c7,"tr",c2,"td",c2],t.N,t.p8))}, +Ae:function Ae(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7 +_.id=a8 +_.k1=a9 +_.k2=b0 +_.k3=b1 +_.k4=b2 +_.ok=b3 +_.p1=b4 +_.p2=b5 +_.p3=b6 +_.p4=b7 +_.R8=b8 +_.RG=b9 +_.rx=c0 +_.ry=c1 +_.to=c2 +_.x1=c3 +_.x2=c4 +_.xr=c5 +_.y1=c6 +_.y2=c7 +_.bv=c8 +_.bn=c9 +_.ac=d0 +_.ah=d1 +_.b_=d2 +_.b6=d3}, +a6A:function a6A(a,b){this.a=a +this.b=b}, +OH:function OH(){}, +ala:function ala(a,b){var _=this +_.d=null +_.e=a +_.a=null +_.b=b +_.c=null}, +b3J:function b3J(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a6z:function a6z(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.db=r +_.dx=s +_.a=a0}, +ay4:function ay4(a,b){this.a=a +this.b=b}, +ay6:function ay6(a,b,c){this.a=a +this.b=b +this.c=c}, +acK:function acK(){}, +q5:function q5(){}, +aUy:function aUy(a,b){this.a=a +this.b=b}, +aUx:function aUx(a,b){this.a=a +this.b=b}, +aUz:function aUz(a,b){this.a=a +this.b=b}, +acI:function acI(a,b,c){this.a=a +this.b=b +this.c=c}, +Sp:function Sp(a,b,c){this.c=a +this.a=b +this.b=c}, +aUt:function aUt(a){this.b=a}, +a9P:function a9P(){}, +aNQ:function aNQ(a){this.a=a}, +i5:function i5(){}, +aA2:function aA2(a,b){this.a=a +this.b=b}, +aA3:function aA3(){}, +aOZ:function aOZ(){}, +bkq(a,b){var s=b.a.a,r=a.b.a +if(s[0]-r[0]>0||s[1]-r[1]>0)return!1 +s=a.a.a +r=b.b.a +if(s[0]-r[0]>0||s[1]-r[1]>0)return!1 +return!0}, +cH:function cH(a,b){this.a=a +this.b=b}, +i7:function i7(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=-1}, +jC(){var s,r,q,p,o,n,m,l,k=A.lr(16,A.btH(),t.Ys),j=J.el(4,t.yw) +for(s=0;s<4;++s)j[s]=new A.a(new Float64Array(2)) +r=A.lr(20,A.btH(),t.ik) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new A.aCh(k,j,r,new A.a(q),new A.cH(new A.a(p),new A.a(o)),new A.dz(new A.a(n),new A.a(m)),new A.cH(new A.a(l),new A.a(new Float64Array(2))),new A.ec(0,0,0)) +k.asp() +return k}, +aCh:function aCh(a,b,c,d,e,f,g,h){var _=this +_.a=null +_.b=a +_.c=0 +_.d=16 +_.e=0 +_.f=b +_.r=c +_.w=0 +_.x=d +_.y=e +_.z=f +_.Q=g +_.as=h}, +bEr(a){var s=new Float64Array(2) +return new A.n7(a,new A.cH(new A.a(s),new A.a(new Float64Array(2))))}, +n7:function n7(a,b){var _=this +_.a=a +_.b=b +_.f=_.e=_.d=_.c=null +_.r=0}, +Gy:function Gy(a,b){this.a=a +this.b=b}, +o1(){var s=new Float64Array(2) +return new A.a10(new A.a(s),new A.yA(new Int8Array(4)))}, +bmp(){return new A.aCi(B.jC)}, +bKT(){var s,r,q=t.yw,p=J.el(8,q) +for(s=0;s<8;++s)p[s]=new A.a(new Float64Array(2)) +r=J.el(8,q) +for(s=0;s<8;++s)r[s]=new A.a(new Float64Array(2)) +return new A.aV3(p,r)}, +azh(a,b,c,d,e){var s,r,q,p,o,n,m,l,k=b[0],j=b[1],i=k.a,h=j.a,g=c.bO(i)-d,f=c.bO(h)-d +if(g<=0){a[0].jB(0,k) +s=1}else s=0 +if(f<=0){r=s+1 +a[s].jB(0,j) +s=r}if(g*f<0){q=g/(g-f) +p=a[s] +o=p.a +n=i.a +m=n[0] +l=h.a +o.sN(0,m+q*(l[0]-m)) +n=n[1] +o.sO(0,n+q*(l[1]-n)) +n=p.b.a +n[0]=e&255 +n[1]=k.b.a[1] +n[2]=0 +n[3]=1;++s}return s}, +a36:function a36(){this.b=this.a=0}, +a10:function a10(a,b){this.a=a +this.b=b}, +MB:function MB(a,b){this.a=a +this.b=b}, +aCi:function aCi(a){this.a=a +this.c=this.b=0}, +aV3:function aV3(a,b){this.a=a +this.b=b +this.c=0}, +b56:function b56(a,b,c,d,e){var _=this +_.b=_.a=0 +_.c=a +_.d=b +_.e=c +_.f=d +_.r=0 +_.w=e +_.x=0}, +azf:function azf(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5}, +aCl:function aCl(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.at=l +_.ax=m +_.ay=0 +_.ch=!1 +_.CW=n +_.cx=o +_.cy=p +_.db=q +_.dx=r +_.dy=s +_.fr=a0 +_.fx=a1 +_.fy=a2 +_.go=a3 +_.id=a4 +_.k1=a5}, +bD4(){return new A.yA(new Int8Array(4))}, +yA:function yA(a){this.a=a}, +bpB(){var s=t.S,r=A.bc(3,0,!1,s) +s=A.bc(3,0,!1,s) +r[0]=1073741823 +r[1]=1073741823 +r[2]=1073741823 +s[0]=1073741823 +s[1]=1073741823 +s[2]=1073741823 +return new A.aSO(r,s)}, +bNH(){var s,r,q,p,o,n,m,l,k,j,i=J.el(3,t.wU) +for(s=0;s<3;++s){r=new Float64Array(2) +q=new Float64Array(2) +i[s]=new A.apK(new A.a(r),new A.a(q),new A.a(new Float64Array(2)))}r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +return new A.b6G(i,new A.a(r),new A.a(q),new A.a(p),new A.a(o),new A.a(n),new A.a(m),new A.a(l),new A.a(k),new A.a(j),new A.a(new Float64Array(2)))}, +dQ(){var s,r,q=t.yw,p=J.el(8,q) +for(s=0;s<8;++s)p[s]=new A.a(new Float64Array(2)) +r=J.el(2,q) +for(s=0;s<2;++s)r[s]=new A.a(new Float64Array(2)) +return new A.aBz(p,r)}, +apK:function apK(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.f=_.e=_.d=0}, +aSO:function aSO(a,b){var _=this +_.b=_.a=0 +_.c=a +_.d=b}, +b6G:function b6G(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=0 +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j +_.Q=k}, +aBz:function aBz(a,b){var _=this +_.a=a +_.c=_.b=0 +_.d=b}, +aBw:function aBw(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +blE(){var s=A.dQ(),r=A.dQ(),q=new Float64Array(2) +return new A.aBx(s,r,new A.be(new A.a(q),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1)))}, +aBx:function aBx(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=!1}, +blI(){var s=new Float64Array(2) +return new A.aBy(new A.a(s),new A.a(new Float64Array(2)))}, +aBy:function aBy(a,b){this.a=a +this.b=b +this.c=0}, +md(){var s,r,q=J.el(2,t.Kz) +for(s=0;s<2;++s){r=new Float64Array(2) +q[s]=new A.a6x(new A.a(r),new A.yA(new Int8Array(4)))}r=new Float64Array(2) +return new A.aK1(q,new A.a(r),new A.a(new Float64Array(2)),B.ky)}, +OC:function OC(a,b){this.a=a +this.b=b}, +aK1:function aK1(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=0}, +a6x:function a6x(a,b){var _=this +_.a=a +_.c=_.b=0 +_.d=b}, +dz:function dz(a,b){this.a=a +this.b=b +this.c=0}, +dG:function dG(a){this.a=a +this.b=0}, +bl0(){var s=A.b([],t.d),r=new Float64Array(2) +s=new A.a0l(s,new A.a(r),new A.a(new Float64Array(2)),B.rx) +s.b=$.avB() +return s}, +a0l:function a0l(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.r=_.f=!1 +_.a=d +_.b=0}, +ayr:function ayr(){}, +ayq:function ayq(){}, +a0w(){return new A.DR(new A.a(new Float64Array(2)),B.ik)}, +DR:function DR(a,b){this.c=a +this.a=b +this.b=0}, +aCm(){var s=new Float64Array(2),r=new Float64Array(2),q=new Float64Array(2) +s=new A.a37(new A.a(s),new A.a(r),new A.a(q),new A.a(new Float64Array(2)),B.rw) +s.b=$.avB() +return s}, +a37:function a37(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.w=_.r=!1 +_.a=e +_.b=0}, +aKe:function aKe(a){this.a=0 +this.b=a +this.c=0}, +nj(){var s=t.d +s=new A.a99(new A.a(new Float64Array(2)),A.b([],s),A.b([],s),B.il) +s.b=$.avB() +return s}, +a99:function a99(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d +_.b=0}, +aO6:function aO6(a){this.a=a}, +aO7:function aO7(a){this.a=a}, +aO8:function aO8(a){this.a=a}, +aSx:function aSx(){}, +HC:function HC(a,b){this.a=a +this.b=b}, +ir:function ir(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=0}, +C_:function C_(a,b){this.a=a +this.b=b}, +is:function is(a){this.a=a +this.b=0}, +aWq:function aWq(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}, +RI:function RI(a,b){this.a=a +this.b=b}, +aSn:function aSn(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.c=_.b=_.a=$ +_.d=a +_.e=b +_.r=_.f=$ +_.w=c +_.x=d +_.y=e +_.z=f +_.Q=g +_.as=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.CW=m +_.cx=n +_.cy=o +_.db=p}, +bMh(){var s,r,q,p=new Float64Array(2),o=J.el(2,t.yw) +for(s=0;s<2;++s)o[s]=new A.a(new Float64Array(2)) +r=new Float64Array(2) +q=new Float64Array(2) +return new A.aXJ(new A.a(p),o,r,new A.a(q),new A.a(new Float64Array(2)))}, +aXJ:function aXJ(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +ec:function ec(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=1}, +ck(a,b){var s,r=a.b,q=b.a,p=q[0],o=a.a +q=q[1] +s=new A.a(new Float64Array(2)) +s.p(r*p-o*q,o*p+r*q) +return s}, +tn(a,b){var s,r=a.b,q=b.a,p=q[0],o=a.a +q=q[1] +s=new A.a(new Float64Array(2)) +s.p(r*p+o*q,-o*p+r*q) +return s}, +av:function av(a,b){this.a=a +this.b=b}, +bq1(){var s=new Float64Array(2),r=new Float64Array(2) +return new A.bP(new A.a(s),new A.a(r),new A.a(new Float64Array(2)))}, +bP:function bP(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.f=_.e=_.d=0}, +ct:function ct(a){this.a=a}, +Te(){return new A.be(new A.a(new Float64Array(2)),new A.av(0,1))}, +dh(a,b){var s,r,q,p=a.b,o=p.b,n=b.a,m=n[0] +p=p.a +n=n[1] +s=a.a.a +r=s[0] +s=s[1] +q=new A.a(new Float64Array(2)) +q.p(o*m-p*n+r,p*m+o*n+s) +return q}, +k_(a,b){var s,r=b.a,q=a.a.a,p=r[0]-q[0],o=r[1]-q[1] +q=a.b +r=q.b +q=q.a +s=new A.a(new Float64Array(2)) +s.p(r*p+q*o,-q*p+r*o) +return s}, +bqz(a,b){var s,r=a.b,q=A.tn(r,b.a.Y(0,a.a)),p=b.b,o=r.b,n=p.a +r=r.a +p=p.b +s=new A.a(new Float64Array(2)) +s.v(q) +return new A.be(s,new A.av(o*n-r*p,o*p+r*n))}, +be:function be(a,b){this.a=a +this.b=b}, +ki:function ki(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.a=a +_.c=_.b=0 +_.d=b +_.e=c +_.f=d +_.r=e +_.w=0 +_.x=f +_.y=0 +_.z=g +_.Q=h +_.as=i +_.at=j +_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=0 +_.dx=_.db=null +_.dy=0 +_.fr=null +_.fx=k +_.fy=l}, +fb(a,b,c,d,e,f,g,h){var s,r +if(f==null)s=new A.a(new Float64Array(2)) +else s=f +if(e==null)r=new A.a(new Float64Array(2)) +else r=e +return new A.axA(g,h,s,a,r,c,b,d)}, +axA:function axA(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.w=g +_.z=h}, +L_:function L_(a,b){this.a=a +this.b=b}, +hM:function hM(a,b){var _=this +_.a=a +_.b=b +_.d=_.c=null}, +a0j:function a0j(a,b,c,d,e,f,g,h){var _=this +_.a=0 +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.Q=_.z=_.y=_.x=0 +_.at=h}, +a0k:function a0k(a,b,c,d,e,f,g,h){var _=this +_.a=0 +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.Q=_.z=_.y=_.x=0 +_.at=h}, +bl6(a,b){var s=new A.a0t(a,b,0,0,A.Ec(),A.Ed(),A.md(),A.md()) +s.uP(a,0,b,0) +return s}, +a0t:function a0t(a,b,c,d,e,f,g,h){var _=this +_.a=0 +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.Q=_.z=_.y=_.x=0 +_.at=h}, +bD5(a,b,c,d){var s,r,q,p,o,n,m,l,k=a.c +k===$&&A.c() +s=k.a +k=c.c +k===$&&A.c() +r=k.a +q=s.a")),r=A.b([],t.kH),q=new Float64Array(2) +return new A.a1u(s,r,new A.a(q),new A.a(new Float64Array(2)),!1,a.h("a1u<0>"))}, +a1u:function a1u(a,b,c,d,e,f){var _=this +_.w=_.r=0 +_.x=a +_.y=b +_.a=c +_.b=d +_.e=_.d=$ +_.f=e +_.$ti=f}, +blF(a){var s=new Float64Array(2),r=new Float64Array(2),q=new Float64Array(2),p=new Float64Array(2),o=new Float64Array(2),n=new A.ec(0,0,0) +n.a=B.c.bK(127.5) +n.b=B.f.bK(204) +n.c=B.f.bK(204) +n.d=1 +s=new A.uU(new A.a(s),new A.a(r),new A.a(q),new A.a(p),new A.a(o),a.a,a.b,n) +s.qs(a) +s.as=a.r +s.w=a.w +s.x=a.x +return s}, +uU:function uU(a,b,c,d,e,f,g,h){var _=this +_.ax=_.at=_.as=_.Q=_.z=_.y=_.x=_.w=0 +_.ay=a +_.ch=b +_.CW=c +_.cx=d +_.cy=e +_.fx=_.fr=_.dy=_.dx=_.db=0 +_.b=_.a=$ +_.d=_.c=!1 +_.e=f +_.f=g +_.r=h}, +blG(a,b){var s=new Float64Array(2) +return new A.a2z(new A.a(s),new A.a(new Float64Array(2)),!1,a.h("@<0>").ak(b).h("a2z<1,2>"))}, +a2z:function a2z(a,b,c,d){var _=this +_.r=1 +_.x=_.w=0 +_.a=a +_.b=b +_.e=_.d=$ +_.f=c +_.$ti=d}, +a44:function a44(a,b,c,d,e,f,g,h,i){var _=this +_.w=a +_.as=_.Q=_.z=_.y=_.x=0 +_.at=b +_.ax=c +_.ay=d +_.ch=e +_.db=_.cy=_.cx=_.CW=0 +_.dx=f +_.dy=0 +_.b=_.a=$ +_.d=_.c=!1 +_.e=g +_.f=h +_.r=i}, +a45:function a45(a,b,c,d){var _=this +_.w=_.r=0 +_.a=a +_.b=b +_.e=_.d=$ +_.f=c +_.$ti=d}, +a4g:function a4g(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.w=a +_.x=b +_.y=c +_.z=d +_.Q=e +_.as=f +_.at=g +_.ax=h +_.fr=_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=0 +_.fx=i +_.fy=j +_.go=k +_.id=l +_.p3=_.p2=_.p1=_.ok=_.k4=_.k3=_.k2=_.k1=0 +_.p4=m +_.R8=n +_.x1=_.to=_.ry=_.rx=_.RG=0 +_.b=_.a=$ +_.d=_.c=!1 +_.e=o +_.f=p +_.r=q}, +a4h:function a4h(a,b,c,d){var _=this +_.w=_.r=$ +_.x=0 +_.a=a +_.b=b +_.e=_.d=$ +_.f=c +_.$ti=d}, +ks:function ks(){}, +a5C:function a5C(){}, +FL:function FL(a,b){this.a=a +this.b=b}, +a6Y:function a6Y(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.w=a +_.x=0 +_.y=b +_.ay=_.ax=_.at=_.as=_.Q=_.z=0 +_.ch=c +_.CW=d +_.cx=e +_.cy=f +_.db=g +_.fy=_.fx=_.fr=_.dy=_.dx=0 +_.go=h +_.id=0 +_.b=_.a=$ +_.d=_.c=!1 +_.e=i +_.f=j +_.r=k}, +a6Z:function a6Z(a,b,c,d,e){var _=this +_.r=a +_.w=0 +_.y=_.x=1 +_.z=0.3 +_.a=b +_.b=c +_.e=_.d=$ +_.f=d +_.$ti=e}, +bo6(a){var s,r=new A.a(new Float64Array(2)),q=new A.a(new Float64Array(2)),p=new Float64Array(2),o=new Float64Array(2),n=new Float64Array(4),m=new Float64Array(2),l=new A.ec(0,0,0) +l.a=B.c.bK(127.5) +l.b=B.f.bK(204) +l.c=B.f.bK(204) +l.d=1 +s=a.b +l=new A.a70(r,q,new A.a(p),new A.a(o),new A.jL(n),new A.a(m),a.a,s,l) +l.qs(a) +r.v(a.r) +m=l.b +m===$&&A.c() +s.v(A.k_(m.d,r)) +l.as=a.w +q.cv() +l.x=a.x +l.y=a.y +return l}, +a70:function a70(a,b,c,d,e,f,g,h,i){var _=this +_.w=a +_.z=_.y=_.x=0 +_.Q=b +_.ax=_.at=_.as=0 +_.ay=c +_.ch=d +_.cx=_.CW=0 +_.cy=e +_.db=f +_.b=_.a=$ +_.d=_.c=!1 +_.e=g +_.f=h +_.r=i}, +bo7(a,b){var s=new Float64Array(2),r=new Float64Array(2) +return new A.a71(new A.a(s),new A.a(r),new A.a(new Float64Array(2)),!1,a.h("@<0>").ak(b).h("a71<1,2>"))}, +a71:function a71(a,b,c,d,e){var _=this +_.r=a +_.w=0 +_.x=5 +_.y=0.7 +_.a=b +_.b=c +_.e=_.d=$ +_.f=d +_.$ti=e}, +bgh(a){var s,r,q,p,o,n=new Float64Array(3),m=new Float64Array(2),l=new Float64Array(2),k=new Float64Array(2),j=new Float64Array(2),i=new Float64Array(9),h=a.a,g=new A.a(new Float64Array(2)) +g.v(h) +s=a.b +r=new A.a(new Float64Array(2)) +r.v(s) +q=new A.a(new Float64Array(2)) +q.v(a.r) +q.e0(0) +p=new A.a(new Float64Array(2)) +o=new A.ec(0,0,0) +o.a=B.c.bK(127.5) +o.b=B.f.bK(204) +o.c=B.f.bK(204) +o.d=1 +n=new A.Q8(g,r,q,p,new A.dX(n),new A.a(m),new A.a(l),new A.a(k),new A.a(j),new A.id(i),h,s,o) +n.qs(a) +q.hm(1,p) +n.Q=a.w +n.ax=a.y +n.ay=a.z +n.ch=a.as +n.CW=a.at +n.cx=a.x +n.cy=a.Q +n.db=B.di +return n}, +Q8:function Q8(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.w=a +_.x=b +_.y=c +_.z=d +_.Q=$ +_.as=e +_.CW=_.ch=_.ay=_.ax=_.at=0 +_.cy=_.cx=!1 +_.db=$ +_.dy=_.dx=0 +_.fr=f +_.fx=g +_.k1=_.id=_.go=_.fy=0 +_.k2=h +_.k3=i +_.p2=_.p1=_.ok=_.k4=0 +_.p3=j +_.p4=0 +_.b=_.a=$ +_.d=_.c=!1 +_.e=k +_.f=l +_.r=m}, +bgi(a,b){var s,r=new A.a(new Float64Array(2)) +r.p(1,0) +s=new Float64Array(2) +return new A.a9l(r,new A.a(s),new A.a(new Float64Array(2)),!1,a.h("@<0>").ak(b).h("a9l<1,2>"))}, +a9l:function a9l(a,b,c,d,e){var _=this +_.r=a +_.w=0 +_.x=!1 +_.z=_.y=0 +_.Q=!1 +_.at=_.as=0 +_.a=b +_.b=c +_.e=_.d=$ +_.f=d +_.$ti=e}, +a9o:function a9o(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.w=a +_.x=b +_.ay=_.ax=_.at=_.as=_.Q=0 +_.ch=c +_.CW=d +_.cx=e +_.cy=f +_.db=g +_.dx=h +_.go=_.fy=_.fx=_.fr=_.dy=0 +_.b=_.a=$ +_.d=_.c=!1 +_.e=i +_.f=j +_.r=k}, +a9p:function a9p(a,b,c,d,e,f){var _=this +_.r=a +_.w=b +_.y=_.x=0 +_.z=1 +_.a=c +_.b=d +_.e=_.d=$ +_.f=e +_.$ti=f}, +aQy(a){var s,r,q=new A.a(new Float64Array(2)),p=new A.a(new Float64Array(2)),o=new Float64Array(3),n=new Float64Array(2),m=new Float64Array(2),l=new Float64Array(2),k=new Float64Array(2),j=new Float64Array(9),i=new A.ec(0,0,0) +i.a=B.c.bK(127.5) +i.b=B.f.bK(204) +i.c=B.f.bK(204) +i.d=1 +s=a.a +r=a.b +i=new A.wi(q,p,new A.dX(o),new A.a(n),new A.a(m),new A.a(l),new A.a(k),new A.id(j),B.di,s,r,i) +i.qs(a) +q.v(s) +p.v(r) +i.ay=a.r +i.ch=a.x +i.CW=a.y +i.as=a.as +i.at=a.Q +i.ax=a.w +i.Q=a.z +return i}, +wi:function wi(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.w=a +_.x=b +_.y=c +_.z=0 +_.Q=!1 +_.at=_.as=0 +_.ax=!1 +_.cy=_.cx=_.CW=_.ch=_.ay=0 +_.db=d +_.dx=e +_.dy=f +_.fr=g +_.id=_.go=_.fy=_.fx=0 +_.k1=h +_.k2=0 +_.k3=i +_.b=_.a=$ +_.d=_.c=!1 +_.e=j +_.f=k +_.r=l}, +aQz(a,b){var s=new Float64Array(2) +return new A.aaA(new A.a(s),new A.a(new Float64Array(2)),!1,a.h("@<0>").ak(b).h("aaA<1,2>"))}, +aaA:function aaA(a,b,c,d){var _=this +_.r=0 +_.w=!1 +_.y=_.x=0 +_.z=!1 +_.as=_.Q=0 +_.a=a +_.b=b +_.e=_.d=$ +_.f=c +_.$ti=d}, +aaF:function aaF(a,b,c,d,e,f,g,h,i,j){var _=this +_.w=a +_.x=b +_.at=_.as=_.Q=_.z=_.y=0 +_.ax=c +_.ay=d +_.ch=e +_.CW=f +_.cx=g +_.fr=_.dy=_.dx=_.db=_.cy=0 +_.b=_.a=$ +_.d=_.c=!1 +_.e=h +_.f=i +_.r=j}, +bgu:function bgu(a,b,c,d){var _=this +_.r=0 +_.a=a +_.b=b +_.e=_.d=$ +_.f=c +_.$ti=d}, +aex:function aex(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.y=_.x=_.w=0 +_.z=a +_.Q=b +_.at=_.as=0 +_.ax=c +_.ch=_.ay=0 +_.CW=d +_.cx=e +_.cy=f +_.db=g +_.fx=_.fr=_.dy=_.dx=0 +_.fy=h +_.b=_.a=$ +_.d=_.c=!1 +_.e=i +_.f=j +_.r=k}, +bhb:function bhb(a,b,c,d){var _=this +_.r=0 +_.a=a +_.b=b +_.e=_.d=$ +_.f=c +_.$ti=d}, +ak:function ak(){var _=this +_.b=_.a=0 +_.c=17976931348623157e292 +_.d=-17976931348623157e292 +_.e=0}, +ij:function ij(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}, +aTf:function aTf(){this.c=this.b=this.a=$}, +dK:function dK(){var _=this +_.e=_.d=_.c=_.b=_.a=0 +_.f=!1}, +iv:function iv(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){var _=this +_.a=0 +_.b=$ +_.c=a +_.d=b +_.e=c +_.f=!1 +_.y=0 +_.at=_.as=_.Q=_.z=!1 +_.ay=_.ax=$ +_.ch=d +_.CW=e +_.cx=f +_.cy=g +_.db=h +_.dx=i +_.dy=j +_.fr=k +_.fx=l +_.fy=m +_.go=n +_.id=o +_.k1=p +_.k2=q +_.k3=r +_.k4=s +_.ok=a0 +_.p1=a1 +_.p2=a2}, +aXK:function aXK(){}, +ix:function ix(){this.a=$ +this.b=null}, +iy:function iy(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=$ +_.e=null}, +GB:function GB(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=c +_.e=0}, +aWW:function aWW(a){this.a=a}, +io:function io(a,b){var _=this +_.b=_.a=$ +_.c=a +_.d=b}, +bHZ(a,b,c){return a.X(0,c<<19>>>0).X(0,b<<7>>>0)}, +boz(a,b){return A.boy(a,b,new A.aMY())}, +boA(a,b){return A.boy(a,b,new A.aN6())}, +boy(a,b,c){var s,r,q,p=a.length,o=J.na(a.slice(0),A.a5(a).c) +for(s=0;p>0;){r=B.f.cN(p,2) +q=s+r +if(c.$2(J.bBg(o[q]),b)){s=q+1 +p-=r+1}else p=r}return s}, +ii:function ii(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.c=_.b=_.a=0 +_.y=a +_.z=b +_.Q=c +_.as=d +_.at=e +_.ax=f +_.ay=g +_.go=h +_.id=i +_.k1=j +_.k2=k +_.k3=l +_.k4=m +_.ok=n +_.p1=o +_.p2=p +_.p3=q}, +aN5:function aN5(){}, +aMZ:function aMZ(a,b){this.a=a +this.b=b}, +aN_:function aN_(a){this.a=a}, +aN0:function aN0(a){this.a=a}, +aN1:function aN1(a){this.a=a}, +aN2:function aN2(a){this.a=a}, +aN3:function aN3(a){this.a=a}, +aN4:function aN4(a,b){this.a=a +this.b=b}, +aMY:function aMY(){}, +aN6:function aN6(){}, +a4s(a,b,c){var s,r,q=null,p=A.b3([B.VA,new A.a4r("351bb21ecaae045391ee603df58d4f2cf9a3d586c5fd3743fee2257bd3223ae4",102756)],t.gm,t.Ks),o=B.eW.aOD(q,q,a,q,q,q,q,q,b,q,c,q,q,q,q,q,q,q),n=o.w +if(n==null)n=B.A +s=o.x +r=A.bOB(new A.Nv(n,s==null?B.jT:s),new A.bk(p,A.w(p).h("bk<1>"))) +n=p.i(0,r) +n.toString +A.Kk(new A.aG9(new A.aGa("VT323",r),n)) +return o.aOL("VT323_"+r.j(0),A.b(["VT323"],t.T))}, +b_G:function b_G(){}, +bC1(a){var s,r,q,p=t.N,o=A.D(p,t.yp) +for(s=J.bdI(t.a.a(B.db.hH(0,a))),s=s.gar(s),r=t.j;s.H();){q=s.ga1(s) +o.u(0,q.a,J.nT(r.a(q.b),p))}return new A.d9(o,t.Zl)}, +awu:function awu(){}, +aG9:function aG9(a,b){this.a=a +this.b=b}, +a4r:function a4r(a,b){this.a=a +this.b=b}, +aGa:function aGa(a,b){this.a=a +this.b=b}, +Nv:function Nv(a,b){this.a=a +this.b=b}, +bSX(a){return A.b9C(new A.bcj(a,null),t.Wd)}, +b9C(a,b){return A.bQG(a,b,b)}, +bQG(a,b,c){var s=0,r=A.r(c),q,p=2,o,n=[],m,l,k +var $async$b9C=A.t(function(d,e){if(d===1){o=e +s=p}while(true)switch(s){case 0:l=A.bWw() +k=l==null?new A.Lb(A.C(t.lZ)):l +p=3 +s=6 +return A.x(a.$1(k),$async$b9C) +case 6:m=e +q=m +n=[1] +s=4 +break +n.push(5) +s=4 +break +case 3:n=[2] +case 4:p=2 +J.bdG(k) +s=n.pop() +break +case 5:case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$b9C,r)}, +bcj:function bcj(a,b){this.a=a +this.b=b}, +a_C:function a_C(){}, +a_E:function a_E(){}, +ax5:function ax5(){}, +ax6:function ax6(){}, +ax7:function ax7(){}, +bsv(a){var s,r,q,p,o,n,m=t.N,l=A.D(m,m),k=a.getAllResponseHeaders().split("\r\n") +for(m=k.length,s=0;s=2?r[s-2]:"" +o=p==="s" +if(!(o&&q==="s"))if(!(p==="c"&&q==="h"))o=o&&q==="h"||q==="x" +else o=!0 +else o=!0 +if(o)return r+"es" +if(q==="y"&&!B.a6t.G(0,p))return B.d.am(r,0,s-1)+"ies" +return r+"s"}, +bQ8(a,b){return J.bG(b,0)}, +bQ9(a,b){var s=B.c.aw(a),r=s===0||s===1,q=J.al(b) +return r?q.i(b,0):q.i(b,1)}, +bQc(a,b){if(a===1)return J.bG(b,0) +return J.bG(b,1)}, +bQd(a,b){var s=J.al(b) +return Math.abs(a)===1?s.i(b,0):s.i(b,1)}, +bQa(a,b){var s,r=B.c.aw(a),q=B.f.bx(r,10),p=B.f.bx(r,100) +if(r===1)return J.bG(b,0) +if(q>=2)if(q<=4)s=p<12||p>14 +else s=!1 +else s=!1 +if(s)return J.bG(b,1) +return J.bG(b,2)}, +bQb(a,b){var s,r,q,p=B.c.aw(a) +if(p===a){s=B.f.bx(p,10) +r=B.f.bx(p,100) +if(s===1&&r!==11)return J.bG(b,0) +if(s>=2)if(s<=4)q=r<12||r>14 +else q=!1 +else q=!1 +if(q)return J.bG(b,1)}return J.bG(b,2)}, +pC:function pC(a,b,c){this.a=a +this.b=b +this.c=c}, +Wd:function Wd(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null +_.e=0 +_.f=$}, +b4t:function b4t(a){this.a=a}, +b4g:function b4g(a,b){this.a=a +this.b=b}, +alb:function alb(a){var _=this +_.b=_.a=!1 +_.r=_.f=_.e=_.d=_.c=null +_.w=a}, +bp:function bp(a,b){this.a=a +this.b=b}, +bT:function bT(a,b){this.a=a +this.b=b}, +bhq(a,b){return new A.akW(a,A.b([],t.uj),A.b([],t.rS),A.b([],t.t),b)}, +bhr(a){var s +if(!(a>=97&&a<=122))s=a>=65&&a<=90||a===95 +else s=!0 +return s}, +bN5(a){var s +if(!A.bhr(a))s=a>=48&&a<=57 +else s=!0 +return s}, +brq(a){var s +if(a<128)return A.bhr(a) +else if(a<=8191){if(a!==168)if(a!==170)if(a!==173)if(a!==175)if(!(a>=178&&a<=190&&a!==182&&a!==187))if(!(a>=192&&a<=767&&a!==215&&a!==247))if(!(a>=880&&a<=7615&&a!==5760&&a!==6158))s=a>=7680 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +return s}else{if(!(a>=8203&&a<=8205))if(!(a>=8234&&a<=8238))if(!(a>=8255&&a<=8256))if(a!==8276)if(!(a>=8288&&a<=8399))if(!(a>=8448&&a<=8591))if(!(a>=9312&&a<=9471))if(!(a>=10102&&a<=10131))if(!(a>=11264&&a<=11775))if(!(a>=11904&&a<=12287))if(!(a>=12292&&a<=12295))if(!(a>=12321&&a<=55295&&a!==12336))if(!(a>=63744&&a<=64829))if(!(a>=64832&&a<=64975))if(!(a>=65008&&a<=65055))if(!(a>=65072&&a<=65092))if(!(a>=65095&&a<=65533))s=a>=65536&&a<=983039&&(a+2&65535)>=2 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +return s}}, +bN6(a){var s +if(a<128)return A.bN5(a) +else{if(!A.brq(a))if(!(a>=768&&a<=879))if(!(a>=7616&&a<=7679))if(!(a>=8400&&a<=8447))s=a>=65056&&a<=65071 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +return s}}, +akW:function akW(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=0 +_.r=1 +_.w=0}, +b3v:function b3v(){}, +KY:function KY(a){this.a=a}, +DO:function DO(){}, +a1g:function a1g(){}, +Ep:function Ep(){}, +a54:function a54(a){this.a=a}, +zE:function zE(a,b){this.a=a +this.b=b}, +a5Q:function a5Q(a){this.a=a}, +a6l:function a6l(a,b,c){this.a=a +this.b=b +this.c=c}, +abl:function abl(a,b,c){this.a=a +this.b=b +this.c=c}, +act:function act(){}, +To:function To(a,b){this.a=a +this.b=b +this.c=$}, +aeq:function aeq(a){this.a=a}, +aew:function aew(a){this.a=a}, +Ey:function Ey(a){this.a=a}, +hN:function hN(){}, +o4:function o4(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Mj:function Mj(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=!0 +_.a=c +_.b=d +_.c=e +_.d=f}, +aN:function aN(){}, +EU:function EU(a,b){this.a=a +this.b=b}, +d7:function d7(){}, +jX:function jX(){}, +fo:function fo(){}, +Km(a,b,c,d){var s=c.length +if(s!==1){s=s===0?null:c[1].b +d.$2("function "+a+"() requires a single argument",s)}if(c[0].a.gbg(0)!==B.aj)d.$2("the argument in "+a+"() should be numeric",c[0].b) +return b.$1(t.y3.a(c[0].a))}, +zm:function zm(a,b){this.a=a +this.b=b}, +bCe(a,b,c){var s=a.length +if(s!==1)c.$2("function bool() requires a single argument",s===0?null:a[1].b) +return new A.a_T(a[0].a)}, +a_T:function a_T(a){this.a=a}, +bCu(a){return new A.DL(a)}, +bCv(a,b,c){return A.Km("ceil",A.bRv(),a,c)}, +DL:function DL(a){this.a=a}, +bDr(a){return new A.En(a)}, +bDs(a,b,c){return A.Km("dec",A.bSb(),a,c)}, +En:function En(a){this.a=a}, +bDt(a){return new A.Eo(a)}, +bDu(a,b,c){return A.Km("decimal",A.bSd(),a,c)}, +Eo:function Eo(a){this.a=a}, +bDH(a,b,c){var s=a.length +if(s!==1)c.$2("function dice() requires a single argument",s===0?null:a[1].b) +if(a[0].a.gbg(0)!==B.aj)c.$2("the argument should be numeric",a[0].b) +return new A.a2o(t.y3.a(a[0].a),b)}, +a2o:function a2o(a,b){this.a=a +this.b=b}, +bF1(a){return new A.EZ(a)}, +bF2(a,b,c){return A.Km("floor",A.bSP(),a,c)}, +EZ:function EZ(a){this.a=a}, +bTQ(a,b,c){var s,r,q,p=a.length +if(p!==3)c.$2("function if() requires three arguments",p<3?null:a[3].b) +if(a[0].a.gbg(0)!==B.bu)c.$2("first argument in if() should be a boolean condition",a[0].b) +s=a[1].a.gbg(0) +r=a[2].a.gbg(0) +if(s!==r)c.$2("the types of the second and the third arguments in if() must be the same, instead they were "+s.b+" and "+r.b,a[2].b) +if(a[1].a.gbg(0)===B.bu){p=t.LK +return new A.ak4(p.a(a[0].a),p.a(a[1].a),p.a(a[2].a))}else{p=t.LK +if(a[1].a.gbg(0)===B.aj){q=t.y3 +return new A.ak5(p.a(a[0].a),q.a(a[1].a),q.a(a[2].a))}else{q=t.gV +return new A.ak6(p.a(a[0].a),q.a(a[1].a),q.a(a[2].a))}}}, +ak4:function ak4(a,b,c){this.a=a +this.b=b +this.c=c}, +ak5:function ak5(a,b,c){this.a=a +this.b=b +this.c=c}, +ak6:function ak6(a,b,c){this.a=a +this.b=b +this.c=c}, +bFS(a){return new A.Fp(a)}, +bFT(a,b,c){return A.Km("inc",A.bTa(),a,c)}, +Fp:function Fp(a){this.a=a}, +bG2(a){return new A.Fv(a)}, +bG3(a,b,c){return A.Km("int",A.bTi(),a,c)}, +Fv:function Fv(a){this.a=a}, +bHM(a,b,c){var s=a.length +if(s!==1)c.$2("function number() requires a single argument",s===0?null:a[1].b) +return new A.a7J(a[0].a)}, +a7J:function a7J(a){this.a=a}, +bI8(a,b,c){var s,r,q,p,o,n,m,l=b.x +l===$&&A.c() +s=1+l.b +r=1+l.c +if(a.lengthr)c.$2("function plural() requires at most "+r+" arguments",a[r].b) +if(a[0].a.gbg(0)!==B.aj)c.$2("the first argument in plural() should be numeric",a[0].b) +q=A.b([],t.yy) +for(l=A.fj(a,1,null,A.a5(a).c),p=l.$ti,l=new A.cR(l,l.gF(0),p.h("cR")),o=t.gV,p=p.h("aI.E");l.H();){n=l.d +if(n==null)n=p.a(n) +m=n.a +if(m.gbg(0)!==B.bQ)c.$2("a string argument is expected",n.b) +q.push(o.a(m))}return new A.a8Y(t.y3.a(a[0].a),q,b)}, +a8Y:function a8Y(a,b,c){this.a=a +this.b=b +this.c=c}, +aNR:function aNR(){}, +bIU(a,b,c){if(a.length!==0)c.$2("function random() requires no arguments",a[0].b) +return new A.a9A(b)}, +a9A:function a9A(a){this.a=a}, +bIV(a,b,c){var s +if(a.length!==2)c.$1("function random_range() requires two arguments") +if(a[0].a.gbg(0)!==B.aj)c.$2("the first argument should be numeric",a[0].b) +if(a[1].a.gbg(0)!==B.aj)c.$2("the second argument should be numeric",a[1].b) +s=t.y3 +return new A.a9B(s.a(a[0].a),s.a(a[1].a),b)}, +a9B:function a9B(a,b,c){this.a=a +this.b=b +this.c=c}, +bJj(a){return new A.Hi(a)}, +bJk(a,b,c){return A.Km("round",A.bUU(),a,c)}, +Hi:function Hi(a){this.a=a}, +bJl(a,b,c){var s=a.length +if(s!==2)c.$2("function round_places() requires two arguments",s<2?null:a[2].b) +if(a[0].a.gbg(0)!==B.aj)c.$2("first argument in round_places() should be numeric",a[0].b) +if(a[1].a.gbg(0)!==B.aj)c.$2("second argument in round_places() should be numeric",a[1].b) +s=t.y3 +return new A.aaJ(s.a(a[0].a),s.a(a[1].a))}, +aaJ:function aaJ(a,b){this.a=a +this.b=b}, +bKC(a,b,c){var s=a.length +if(s!==1)c.$2("function string() requires a single argument",s===0?null:a[1].b) +return new A.Sl(a[0].a)}, +Sl:function Sl(a){this.a=a}, +bM4(a,b,c){var s=a.length +if(s!==1)c.$2("function visit_count() requires a single argument",s===0?null:a[1].b) +if(a[0].a.gbg(0)!==B.bQ)c.$2("the argument should be a string",a[0].b) +return new A.aer(t.gV.a(a[0].a),b)}, +aer:function aer(a,b){this.a=a +this.b=b}, +bM5(a,b,c){var s=a.length +if(s!==1)c.$2("function visited() requires a single argument",s===0?null:a[1].b) +if(a[0].a.gbg(0)!==B.bQ)c.$2("the argument should be a string",a[0].b) +return new A.aes(t.gV.a(a[0].a),b)}, +aes:function aes(a,b){this.a=a +this.b=b}, +AC:function AC(a){this.a=a}, +HT:function HT(a){this.a=a}, +DC:function DC(a){this.a=a}, +aev:function aev(){}, +bBP(a,b,c,d){return A.bBO(a,b,c,d)}, +bBO(a,b,c,d){var s +if(a.gbg(0)===B.aj&&b.gbg(0)===B.aj){s=t.y3 +return new A.amc(s.a(a),s.a(b))}if(a.gbg(0)===B.bQ&&b.gbg(0)===B.bQ){s=t.gV +return new A.aqv(s.a(a),s.a(b))}d.$2("both left and right sides of `+` must be numeric or strings, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +amc:function amc(a,b){this.a=a +this.b=b}, +aqv:function aqv(a,b){this.a=a +this.b=b}, +bBV(a,b,c,d){return A.bBU(a,b,c,d)}, +bBU(a,b,c,d){var s +if(a.gbg(0)===B.bu&&b.gbg(0)===B.bu){s=t.LK +return new A.Dr(s.a(a),s.a(b))}d.$2("both left and right sides of `&&` must be boolean, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +Dr:function Dr(a,b){this.a=a +this.b=b}, +bDT(a,b,c,d){return A.bDS(a,b,c,d)}, +bDS(a,b,c,d){var s +if(a.gbg(0)===B.aj&&b.gbg(0)===B.aj){s=t.y3 +return new A.Ez(s.a(a),s.a(b))}d.$2("both left and right sides of `/` must be numeric, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +Ez:function Ez(a,b){this.a=a +this.b=b}, +bEO(a,b,c,d){return A.bEN(a,b,c,d)}, +bEN(a,b,c,d){var s +if(a.gbg(0)===B.aj&&b.gbg(0)===B.aj){s=t.y3 +return new A.amg(s.a(a),s.a(b))}if(a.gbg(0)===B.bQ&&b.gbg(0)===B.bQ){s=t.gV +return new A.aqx(s.a(a),s.a(b))}if(a.gbg(0)===B.bu&&b.gbg(0)===B.bu){s=t.LK +return new A.afW(s.a(a),s.a(b))}d.$2("equality operator between operands of unrelated types "+a.gbg(0).b+" and "+b.gbg(0).b,c)}, +amg:function amg(a,b){this.a=a +this.b=b}, +aqx:function aqx(a,b){this.a=a +this.b=b}, +afW:function afW(a,b){this.a=a +this.b=b}, +bFD(a,b,c,d){return A.bFC(a,b,c,d)}, +bFC(a,b,c,d){var s +if(a.gbg(0)===B.aj&&b.gbg(0)===B.aj){s=t.y3 +return new A.Fe(s.a(a),s.a(b))}d.$2("both left and right sides of `>=` must be numeric, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +Fe:function Fe(a,b){this.a=a +this.b=b}, +bFF(a,b,c,d){return A.bFE(a,b,c,d)}, +bFE(a,b,c,d){var s +if(a.gbg(0)===B.aj&&b.gbg(0)===B.aj){s=t.y3 +return new A.Ff(s.a(a),s.a(b))}d.$2("both left and right sides of `>` must be numeric, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +Ff:function Ff(a,b){this.a=a +this.b=b}, +bGy(a,b,c,d){return A.bGx(a,b,c,d)}, +bGx(a,b,c,d){var s +if(a.gbg(0)===B.aj&&b.gbg(0)===B.aj){s=t.y3 +return new A.FJ(s.a(a),s.a(b))}d.$2("both left and right sides of `<=` must be numeric, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +FJ:function FJ(a,b){this.a=a +this.b=b}, +bGA(a,b,c,d){return A.bGz(a,b,c,d)}, +bGz(a,b,c,d){var s +if(a.gbg(0)===B.aj&&b.gbg(0)===B.aj){s=t.y3 +return new A.FK(s.a(a),s.a(b))}d.$2("both left and right sides of `<` must be numeric, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +FK:function FK(a,b){this.a=a +this.b=b}, +bHj(a,b,c,d){return A.bHi(a,b,c,d)}, +bHi(a,b,c,d){var s +if(a.gbg(0)===B.aj&&b.gbg(0)===B.aj){s=t.y3 +return new A.Gb(s.a(a),s.a(b))}d.$2("both left and right sides of `%` must be numeric, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +Gb:function Gb(a,b){this.a=a +this.b=b}, +bHv(a,b,c,d){return A.bHu(a,b,c,d)}, +bHu(a,b,c,d){var s +if(a.gbg(0)===B.aj&&b.gbg(0)===B.aj){s=t.y3 +return new A.Gg(s.a(a),s.a(b))}d.$2("both left and right sides of `*` must be numeric, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +Gg:function Gg(a,b){this.a=a +this.b=b}, +a7t:function a7t(a){this.a=a}, +a7C:function a7C(a){this.a=a}, +bHL(a,b,c,d){return A.bHK(a,b,c,d)}, +bHK(a,b,c,d){var s +if(a.gbg(0)===B.aj&&b.gbg(0)===B.aj){s=t.y3 +return new A.amh(s.a(a),s.a(b))}if(a.gbg(0)===B.bQ&&b.gbg(0)===B.bQ){s=t.gV +return new A.aqA(s.a(a),s.a(b))}if(a.gbg(0)===B.bu&&b.gbg(0)===B.bu){s=t.LK +return new A.afX(s.a(a),s.a(b))}d.$2("inequality operator between operands of unrelated types "+a.gbg(0).b+" and "+b.gbg(0).b,c)}, +amh:function amh(a,b){this.a=a +this.b=b}, +aqA:function aqA(a,b){this.a=a +this.b=b}, +afX:function afX(a,b){this.a=a +this.b=b}, +bHU(a,b,c,d){return A.bHT(a,b,c,d)}, +bHT(a,b,c,d){var s +if(a.gbg(0)===B.bu&&b.gbg(0)===B.bu){s=t.LK +return new A.Gq(s.a(a),s.a(b))}d.$2("both left and right sides of `||` must be boolean, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +Gq:function Gq(a,b){this.a=a +this.b=b}, +bKI(a,b,c,d){return A.bKH(a,b,c,d)}, +bKH(a,b,c,d){var s +if(a.gbg(0)===B.aj&&b.gbg(0)===B.aj){s=t.y3 +return new A.amd(s.a(a),s.a(b))}if(a.gbg(0)===B.bQ&&b.gbg(0)===B.bQ){s=t.gV +return new A.aqC(s.a(a),s.a(b))}d.$2("both left and right sides of `-` must be numeric or strings, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +amd:function amd(a,b){this.a=a +this.b=b}, +aqC:function aqC(a,b){this.a=a +this.b=b}, +bMo(a,b,c,d){return A.bMn(a,b,c,d)}, +bMn(a,b,c,d){var s +if(a.gbg(0)===B.bu&&b.gbg(0)===B.bu){s=t.LK +return new A.IN(s.a(a),s.a(b))}d.$2("both left and right sides of `^` must be boolean, instead the types are ("+a.gbg(0).b+", "+b.gbg(0).b+")",c)}, +IN:function IN(a,b){this.a=a +this.b=b}, +a7M:function a7M(a,b){this.a=a +this.b=b}, +acB:function acB(a,b){this.a=a +this.b=b}, +a_W:function a_W(a,b){this.a=a +this.b=b}, +aJf:function aJf(a,b,c){this.a=a +this.b=b +this.c=c}, +aJg:function aJg(){}, +aJh:function aJh(a,b,c){this.a=a +this.b=b +this.c=c}, +a5o:function a5o(a,b){this.a=a +this.b=b}, +bfJ(a,b,c,d,e,f){var s=f==null?null:A.D(t.N,t.z) +s=new A.G2(b+d*0.0009765625,c+e*0.0009765625,f,s) +s.bF(0) +return s}, +G2:function G2(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.r=_.f=0}, +aKc:function aKc(a){this.a=a}, +Pl:function Pl(a,b){this.a=a +this.c=b}, +a7A:function a7A(a,b,c){this.a=a +this.b=b +this.c=c}, +ae8:function ae8(a){this.a=a}, +br5(){var s,r=t.N,q=A.D(r,t._A) +r=new A.IO(q,new A.ae8(A.D(r,t.z)),new A.aFf(A.D(r,t.gQ)),new A.azE(A.D(r,t.Ek)),new A.ayw(A.D(r,t.zR)),B.O) +s=$.bAC().i(0,"en") +if(s==null)A.X(A.hp('Unknown locale "en"')) +if(q.a!==0)A.X(A.hp("The locale cannot be changed after nodes have been added")) +r.x=s +return r}, +IO:function IO(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.w=f +_.x=$}, +Dz:function Dz(){}, +a_F:function a_F(){}, +ax9:function ax9(){}, +We:function We(a,b){this.a=a +this.b=b}, +Ea:function Ea(a){this.a=a}, +bD7(a,b,c){var s,r,q=A.b([],t.kQ) +for(s=0;s") +a2=A.ab(new A.W(i,new A.a_F(),a2),!0,a2.h("aI.E")) +q=new A.a4x(a8.a,a8.as,A.D(a3,a4),A.D(a3,a4),a8.b,a5,s,o,r,f,e,a6,a7,d,A.bc(i.length,0,!1,c),g,new A.cQ(b,a),new A.pv(a0,a1),a2,q) +q.a1G(a6,a7,m,h,i,l,a8.y,k,j) +j=q.gES() +s.a.push(j) +a7.cr(s) +p.push(j) +a7.cr(o) +n.push(j) +a7.cr(r) +return q}, +a4x:function a4x(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){var _=this +_.ay=a +_.ch=b +_.CW=c +_.cx=d +_.cy=e +_.db=f +_.dx=g +_.dy=h +_.fr=i +_.a=j +_.b=k +_.c=l +_.d=m +_.e=n +_.f=o +_.r=p +_.w=q +_.x=r +_.y=s +_.z=a0 +_.as=null +_.at=0 +_.ax=null}, +Q2:function Q2(a,b,c,d,e,f,g,h,i,j,k){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=!1}, +Qp:function Qp(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=null +_.y=!1}, +QW:function QW(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=null}, +Bp:function Bp(a,b){this.a=a +this.c=b +this.d=null}, +RP:function RP(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=!1 +_.f=e}, +bKF(a0,a1,a2){var s,r,q,p,o,n,m=t.u,l=A.b([],m),k=new A.qW(l,A.bZ(a2.d.a,t.G)),j=A.bu2(a2.r),i=A.bu3(a2.w),h=a2.e,g=a2.f,f=a2.c,e=a2.b,d=$.G(),c=d.Z(),b=d.Z(),a=A.b([],t.CH) +d=d.B() +d.sU(0,B.u) +s=t.V +r=A.b([],m) +q=A.bZ(g.a,s) +p=A.b([],m) +o=A.bZ(h.a,t.S) +if(e==null)m=null +else{n=e.a +n=new A.cQ(A.b([],m),A.bZ(n,s)) +m=n}n=A.a5(f).h("W<1,cQ>") +n=A.ab(new A.W(f,new A.a_F(),n),!0,n.h("aI.E")) +m=new A.acC(a2.a,a2.y,k,c,b,a0,a1,a,A.bc(f.length,0,!1,s),d,new A.cQ(r,q),new A.pv(p,o),n,m) +m.a1G(a0,a1,j,e,f,i,a2.x,h,g) +l.push(m.gES()) +a1.cr(k) +return m}, +acC:function acC(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.ay=a +_.ch=b +_.CW=c +_.a=d +_.b=e +_.c=f +_.d=g +_.e=h +_.f=i +_.r=j +_.w=k +_.x=l +_.y=m +_.z=n +_.as=null +_.at=0 +_.ax=null}, +ny:function ny(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f}, +bZ(a,b){var s=a.length +if(s===0)return new A.aiC(b.h("aiC<0>")) +if(s===1)return new A.apP(B.b.ga9(a),b.h("apP<0>")) +s=new A.akF(a,b.h("akF<0>")) +s.b=s.ae0(0) +return s}, +ju:function ju(){}, +aiC:function aiC(a){this.$ti=a}, +apP:function apP(a,b){this.a=a +this.b=-1 +this.$ti=b}, +akF:function akF(a,b){var _=this +_.a=a +_.c=_.b=null +_.d=-1 +_.$ti=b}, +qW:function qW(a,b){var _=this +_.a=a +_.b=!1 +_.c=b +_.d=0 +_.f=null +_.w=_.r=-1}, +cQ:function cQ(a,b){var _=this +_.a=a +_.b=!1 +_.c=b +_.d=0 +_.f=null +_.w=_.r=-1}, +beK(a,b,c){var s,r=new A.a30(a),q=t.u,p=A.b([],q),o=new A.qW(p,A.bZ(c.a.a,t.G)),n=r.gwj() +p.push(n) +r.b!==$&&A.aj() +r.b=o +b.cr(o) +o=t.V +p=A.b([],q) +s=new A.cQ(p,A.bZ(c.b.a,o)) +p.push(n) +r.c!==$&&A.aj() +r.c=s +b.cr(s) +s=A.b([],q) +p=new A.cQ(s,A.bZ(c.c.a,o)) +s.push(n) +r.d!==$&&A.aj() +r.d=p +b.cr(p) +p=A.b([],q) +s=new A.cQ(p,A.bZ(c.d.a,o)) +p.push(n) +r.e!==$&&A.aj() +r.e=s +b.cr(s) +q=A.b([],q) +o=new A.cQ(q,A.bZ(c.e.a,o)) +q.push(n) +r.f!==$&&A.aj() +r.f=o +b.cr(o) +return r}, +a30:function a30(a){var _=this +_.a=a +_.f=_.e=_.d=_.c=_.b=$ +_.r=null}, +bmV(a){var s=new A.Nw(A.b([],t.u),A.bZ(a,t.cU)) +s.a1K(a) +return s}, +Nw:function Nw(a,b){var _=this +_.ch=$ +_.a=a +_.b=!1 +_.c=b +_.d=0 +_.f=null +_.w=_.r=-1}, +pv:function pv(a,b){var _=this +_.a=a +_.b=!1 +_.c=b +_.d=0 +_.f=null +_.w=_.r=-1}, +Oh:function Oh(){}, +aKd:function aKd(a,b,c){this.a=a +this.b=b +this.c=c}, +PL:function PL(a,b,c,d,e,f,g,h,i){var _=this +_.as=null +_.at=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.y=_.x=5e-324 +_.Q=_.z=null}, +a8B:function a8B(a,b){var _=this +_.ch=null +_.CW=$ +_.a=a +_.b=!1 +_.c=b +_.d=0 +_.f=null +_.w=_.r=-1}, +mr:function mr(a,b){var _=this +_.a=a +_.b=!1 +_.c=b +_.d=0 +_.f=null +_.w=_.r=-1}, +bJY(a){var s=t.hN +s=A.b(A.b([],s).slice(0),s) +return new A.HB(new A.oD(s,B.h,!1),$.G().Z(),A.b([],t.u),A.bZ(a,t.hd))}, +HB:function HB(a,b,c,d){var _=this +_.x=a +_.y=b +_.z=null +_.a=c +_.b=!1 +_.c=d +_.d=0 +_.f=null +_.w=_.r=-1}, +ac7:function ac7(a,b,c,d){var _=this +_.x=$ +_.y=a +_.z=b +_.a=c +_.b=!1 +_.c=d +_.d=0 +_.f=null +_.w=_.r=-1}, +SP:function SP(a,b){var _=this +_.a=a +_.b=!1 +_.c=b +_.d=0 +_.f=null +_.w=_.r=-1}, +Cp(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=null,e=new A.by(new Float64Array(16)) +e.ci() +s=a.f +r=s==null +if(r)q=f +else{q=new A.by(new Float64Array(16)) +q.ci()}if(r)p=f +else{p=new A.by(new Float64Array(16)) +p.ci()}if(r)o=f +else{o=new A.by(new Float64Array(16)) +o.ci()}n=a.a +n=n==null?f:n.ls() +m=a.b +m=m==null?f:m.ls() +l=a.c +if(l==null)l=f +else{l=l.a +l=new A.mr(A.b([],t.u),A.bZ(l,t.o))}k=a.d +if(k==null)k=f +else{k=k.a +k=new A.cQ(A.b([],t.u),A.bZ(k,t.V))}j=a.y +if(r)s=f +else{s=s.a +s=new A.cQ(A.b([],t.u),A.bZ(s,t.V))}r=a.r +if(r==null)r=f +else{r=r.a +r=new A.cQ(A.b([],t.u),A.bZ(r,t.V))}i=a.e +if(i==null)i=f +else{i=i.a +i=new A.pv(A.b([],t.u),A.bZ(i,t.S))}h=a.w +if(h==null)h=f +else{h=h.a +h=new A.cQ(A.b([],t.u),A.bZ(h,t.V))}g=a.x +if(g==null)g=f +else{g=g.a +g=new A.cQ(A.b([],t.u),A.bZ(g,t.V))}return new A.aWI(e,q,p,o,n,m,l,k,s,r,i,h,g,j)}, +aWI:function aWI(a,b,c,d,e,f,g,h,i,j,k,l,m,n){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}, +aJT(a,b){var s=0,r=A.r(t.zI),q,p +var $async$aJT=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:s=3 +return A.x((b==null?A.bRE():b).$1(a),$async$aJT) +case 3:p=d +if(p!=null){q=p +s=1 +break}q=A.bnU(A.bnT(),A.bnu(new A.a04(a))) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$aJT,r)}, +a6s(a,b,c){return A.bGV(a,b,c)}, +bGV(a1,a2,a3){var s=0,r=A.r(t.cV),q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0 +var $async$a6s=A.t(function(a4,a5){if(a4===1)return A.o(a5,r) +while(true)switch(s){case 0:a=J.al(a1) +s=J.f(a.i(a1,0),80)&&J.f(a.i(a1,1),75)?3:4 +break +case 3:p=new A.aYy().aPv(A.rA(a1,0,null,0),null,!1) +a=p.a +o=t.B4 +n=new A.oL(a,o) +m=n.pI(n,new A.aJP()) +n=t.H3 +l=n.a(m.gyM(0)) +k=A.bnU(A.bnT(),A.bnu(new A.a04(l))) +l=k.c,j=l.w.gbm(0),i=A.w(j),i=i.h("@<1>").ak(i.y[1]),j=new A.bt(J.az(j.a),j.b,i.h("bt<1,2>")),h=t._m,g=t.Ri,i=i.y[1] +case 5:if(!j.H()){s=6 +break}f=j.a +if(f==null)f=i.a(f) +e=$.bAJ() +d=A.b([f.e,f.d,null,null,null,null,null,null,null,null,null,null,null,null,null,null],h) +A.bi7("join",d) +c=A.bng(new A.oL(a,o),new A.aJQ(e.XE(new A.ca(d,g)))) +s=c!=null?7:8 +break +case 7:s=f.f==null?9:10 +break +case 9:e=c.ax +if((e instanceof A.CA?c.ax=e.gyM(0):e)==null)c.UF() +a0=f +s=11 +return A.x(A.bu5(k,f,new A.pI(n.a(c.ax),1)),$async$a6s) +case 11:a0.f=a5 +case 10:case 8:s=5 +break +case 6:for(a=new A.oL(a,o),a=a.gar(a),o=new A.fG(a,new A.aJR(),o.h("fG")),l=l.y,j=k.f;o.H();){i=a.ga1(0) +h=A.bg9(i.a,$.avw().a).aJD()[0] +b=A.bng(l.gbm(0),new A.aJS(h.toLowerCase())) +h=i.ax +if((h instanceof A.CA?i.ax=h.gyM(0):h)==null)i.UF() +i=n.a(i.ax) +j.push(new A.a3X(i,b==null?null:b.a))}q=k +s=1 +break +case 4:q=null +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$a6s,r)}, +bnT(){var s=t.N,r=t.S +return new A.hR(new A.aNs(A.C(t.VX),A.D(s,t.Yt)),A.C(s),new A.azT(new A.P9(0,0,0,0,t.ff),A.b([],t.fQ),A.D(r,t.IE),A.D(s,t.aa),A.D(s,t.CW),A.D(r,t.dg),A.D(s,t.t1),A.b([],t._I)),A.b([],t.i0))}, +bFi(a){var s,r=a.f +if(r.length!==0){s=A.b(r.slice(0),A.a5(r)) +B.b.af(r) +return s}return null}, +azT:function azT(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.d=_.c=_.b=0 +_.e=b +_.f=c +_.r=d +_.w=e +_.x=f +_.y=g +_.z=h}, +hR:function hR(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.e=0 +_.f=d +_.r=null}, +aJP:function aJP(){}, +aJQ:function aJQ(a){this.a=a}, +aJR:function aJR(){}, +aJS:function aJS(a){this.a=a}, +a3X:function a3X(a,b){this.a=a +this.b=b}, +No:function No(a){this.a=a}, +OA:function OA(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.a=p}, +al6:function al6(a,b,c){var _=this +_.d=$ +_.f2$=a +_.bV$=b +_.a=null +_.b=c +_.c=null}, +b3I:function b3I(a){this.a=a}, +YQ:function YQ(){}, +G_:function G_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.cy=r +_.db=s +_.a=a0}, +al4:function al4(a){var _=this +_.a=_.d=null +_.b=a +_.c=null}, +b3G:function b3G(a,b){this.a=a +this.b=b}, +b3F:function b3F(a,b,c){this.a=a +this.b=b +this.c=c}, +b3H:function b3H(a){this.a=a}, +bfF(a,b){var s,r,q,p,o,n=null,m=new A.by(new Float64Array(16)) +m.ci() +s=t.V +r=A.b([],t.ZB) +q=a.c +p=q.a +r=new A.aJU(a,m,new A.Q(p.c,p.d),b,A.D(s,s),r) +r.sUL(n) +s=A.b([],t.qa) +m=A.b([],t.cc) +o=p.c +p=p.d +r.c=A.blg(r,A.bnB(n,n,a,n,-1,A.b([],t.ML),!1,B.x4,m,B.oO,"__container",-1,p,o,n,s,B.B,0,0,0,n,n,n,0,new A.xQ(n,n,n,n,n,n,n,n,n)),q.e,a) +return r}, +aJU:function aJU(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=$ +_.d=c +_.e=d +_.f=null +_.r=!0 +_.w=!1 +_.x=null +_.z=!1 +_.Q=e +_.as=null +_.ax=f}, +aJV:function aJV(a,b){this.a=a +this.b=b}, +G0:function G0(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=null}, +xP:function xP(a){this.a=a}, +dw:function dw(a){this.a=a}, +bkt(a){var s +for(s=0;s"))}, +bBX(a,b){var s,r,q,p,o=a.length+b.length,n=A.bc(o,0,!1,t.V) +B.b.dL(n,0,a.length,a) +s=a.length +B.b.dL(n,s,s+b.length,b) +B.b.kg(n) +for(r=0,q=0/0,p=0;p>>16&255,e>>>8&255,e&255)) +return l +case 2:e=$.G() +s=e.B() +r=new A.by(new Float64Array(16)) +r.ci() +q=e.B() +p=e.B() +p.sde(B.da) +o=e.B() +o.sde(B.dz) +n=e.B() +e=e.B() +e.skX(!1) +e.sde(B.e9) +m=new A.by(new Float64Array(16)) +m.ci() +m=new A.a59(s,r,q,p,o,n,e,b.c+"#draw",m,c,b,A.b([],t.ca),A.Cp(b.x)) +m.xj(c,b) +return m +case 3:e=new A.by(new Float64Array(16)) +e.ci() +s=$.G() +r=s.B() +q=s.B() +q.sde(B.da) +p=s.B() +p.sde(B.dz) +o=s.B() +s=s.B() +s.skX(!1) +s.sde(B.e9) +n=new A.by(new Float64Array(16)) +n.ci() +n=new A.a7G(e,r,q,p,o,s,b.c+"#draw",n,c,b,A.b([],t.ca),A.Cp(b.x)) +n.xj(c,b) +return n +case 5:e=new A.by(new Float64Array(16)) +e.ci() +s=$.G() +r=s.B() +r.sU(0,B.i) +q=s.B() +q.sU(0,B.u) +p=A.b([],t.NB) +o=b.ch.a +n=t.u +m=A.b([],n) +o=new A.SP(m,A.bZ(o,t.HU)) +l=new A.by(new Float64Array(16)) +l.ci() +k=s.B() +j=s.B() +j.sde(B.da) +i=s.B() +i.sde(B.dz) +h=s.B() +s=s.B() +s.skX(!1) +s.sde(B.e9) +g=new A.by(new Float64Array(16)) +g.ci() +g=new A.adi(e,r,q,A.D(t.dg,t.gZ),p,o,b.b,l,k,j,i,h,s,b.c+"#draw",g,c,b,A.b([],t.ca),A.Cp(b.x)) +g.xj(c,b) +s=g.gXs() +m.push(s) +g.cr(o) +f=b.CW +e=f!=null +if(e&&f.a!=null){r=f.a.a +q=A.b([],n) +r=new A.qW(q,A.bZ(r,t.G)) +q.push(s) +g.k1=r +g.cr(r)}if(e&&f.b!=null){r=f.b.a +q=A.b([],n) +r=new A.qW(q,A.bZ(r,t.G)) +q.push(s) +g.k3=r +g.cr(r)}if(e&&f.c!=null){r=f.c.a +q=A.b([],n) +r=new A.cQ(q,A.bZ(r,t.V)) +q.push(s) +g.ok=r +g.cr(r)}if(e&&f.d!=null){e=f.d.a +n=A.b([],n) +e=new A.cQ(n,A.bZ(e,t.V)) +n.push(s) +g.p2=e +g.cr(e)}return g +case 6:c.a.qM("Unknown layer type "+e.j(0)) +return null}}, +jv:function jv(){}, +ax3:function ax3(a,b){this.a=a +this.b=b}, +blg(a,b,c,d){var s,r,q,p,o,n=A.b([],t.fn),m=$.G(),l=m.B(),k=new A.by(new Float64Array(16)) +k.ci() +s=m.B() +r=m.B() +r.sde(B.da) +q=m.B() +q.sde(B.dz) +p=m.B() +m=m.B() +m.skX(!1) +m.sde(B.e9) +o=new A.by(new Float64Array(16)) +o.ci() +o=new A.a1p(n,l,k,s,r,q,p,m,b.c+"#draw",o,a,b,A.b([],t.ca),A.Cp(b.x)) +o.xj(a,b) +o.asl(a,b,c,d) +return o}, +a1p:function a1p(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.db=null +_.dx=a +_.dy=b +_.a=c +_.b=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=i +_.w=j +_.x=k +_.y=l +_.ax=_.at=_.as=_.Q=_.z=null +_.ay=m +_.ch=n +_.CW=!0 +_.cx=0 +_.cy=null}, +a59:function a59(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.db=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.ax=_.at=_.as=_.Q=_.z=null +_.ay=l +_.ch=m +_.CW=!0 +_.cx=0 +_.cy=null}, +bnB(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5){return new A.FH(p,c,k,e,h,l,o,i,a5,s,r,q,a4,a0,n,m,a1,a2,f,j,a3,g,b,d,a)}, +pA:function pA(a,b){this.a=a +this.b=b}, +rJ:function rJ(a,b){this.a=a +this.b=b}, +FH:function FH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5}, +a7G:function a7G(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.ax=_.at=_.as=_.Q=_.z=null +_.ay=k +_.ch=l +_.CW=!0 +_.cx=0 +_.cy=null}, +abp:function abp(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.db=$ +_.dx=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.ax=_.at=_.as=_.Q=_.z=null +_.ay=l +_.ch=m +_.CW=!0 +_.cx=0 +_.cy=null}, +abZ:function abZ(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.db=a +_.dx=b +_.a=c +_.b=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=i +_.w=j +_.x=k +_.y=l +_.ax=_.at=_.as=_.Q=_.z=null +_.ay=m +_.ch=n +_.CW=!0 +_.cx=0 +_.cy=null}, +adi:function adi(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){var _=this +_.dx=a +_.dy=b +_.fr=c +_.fx=d +_.fy=e +_.go=f +_.id=g +_.p2=_.ok=_.k3=_.k1=null +_.a=h +_.b=i +_.c=j +_.d=k +_.e=l +_.f=m +_.r=n +_.w=o +_.x=p +_.y=q +_.ax=_.at=_.as=_.Q=_.z=null +_.ay=r +_.ch=s +_.CW=!0 +_.cx=0 +_.cy=null}, +aVL:function aVL(){}, +aro:function aro(a){this.a=a +this.b=0}, +a6B:function a6B(){}, +aCe:function aCe(){var _=this +_.e=_.d=_.c=_.b=_.a=null}, +bFy(a,b){var s,r,q,p,o,n,m,l,k,j,i=a.length +if(i===0)return b +else{s=b.length +if(s===0)return a}i+=s +r=A.bc(i,0,!1,t.V) +for(q=a.length,p=0,o=0,n=0,m=0;m") +return new A.aIj(a,A.ab(new A.W(a,new A.aIk(),s),!0,s.h("aI.E")))}, +j9(a){return new A.a5L(a)}, +bns(a){return new A.a5O(a)}, +iK:function iK(){}, +aIj:function aIj(a,b){this.a=a +this.b=b}, +aIk:function aIk(){}, +nx:function nx(a,b){this.a=a +this.b=b}, +a5L:function a5L(a){this.a=a}, +a5O:function a5O(a){this.a=a}, +bnu(a){var s=t.S +s=new A.a5P(a,A.bc(32,0,!1,s),A.bc(32,null,!1,t.ob),A.bc(32,0,!1,s)) +s.F5(6) +return s}, +a5P:function a5P(a,b,c,d){var _=this +_.r=a +_.w=0 +_.y=_.x=$ +_.z=null +_.a=0 +_.b=b +_.c=c +_.d=d}, +aNs:function aNs(a,b){this.a=a +this.b=b}, +a_c:function a_c(a,b,c,d,e,f){var _=this +_.d=a +_.e=b +_.f=c +_.a=d +_.b=e +_.c=f}, +aws:function aws(a,b){this.a=a +this.b=b}, +bu5(a,b,c){var s=new A.aM($.aK,t.OZ),r=new A.bH(s,t.BT),q=c.aG(B.Wf),p=A.bn("listener") +p.b=new A.kq(new A.bcD(q,p,r),null,new A.bcE(q,p,a,b,r)) +q.an(0,p.bl()) +return s}, +bSV(a){var s +if(B.d.c4(a,"data:")){s=A.jn(a,0,null) +return new A.pI(s.gpv(s).ace(),1)}return null}, +bcD:function bcD(a,b,c){this.a=a +this.b=b +this.c=c}, +bcE:function bcE(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aJW:function aJW(){}, +aJM:function aJM(a,b){this.a=a +this.b=b}, +aJN:function aJN(a,b,c){this.a=a +this.b=b +this.c=c}, +aJO:function aJO(a,b){this.a=a +this.b=b}, +H_:function H_(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.d=a +_.e=b +_.f=c +_.r=d +_.w=e +_.x=f +_.y=g +_.z=h +_.Q=i +_.as=j +_.at=k +_.a=l}, +QJ:function QJ(a,b,c,d,e,f,g,h,i){var _=this +_.K=a +_.a5=b +_.M=c +_.av=d +_.ao=e +_.aM=f +_.aS=g +_.fx=h +_.go=_.fy=!1 +_.id=null +_.k1=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=i +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +bH6(a,b){var s,r,q +for(s=0;s<8;s+=2){r=s+1 +q=A.dx(a,new A.i(b[s],b[r])) +b[s]=q.a +b[r]=q.b}}, +bfM(a){var s,r,q,p,o,n,m=new Float64Array(3),l=new A.dX(m) +l.kG(0,0,0) +l.Jo(a) +s=Math.sqrt(2) +r=Math.sqrt(2) +q=new Float64Array(3) +p=new A.dX(q) +p.kG(1/s,1/r,0) +p.Jo(a) +o=q[0]-m[0] +n=q[1]-m[1] +return Math.sqrt(o*o+n*n)}, +bng(a,b){var s,r +for(s=J.az(a);s.H();){r=s.ga1(s) +if(b.$1(r))return r}return null}, +FT:function FT(a){this.$ti=a}, +bS9(a,b,c){var s,r,q,p,o=$.G().Z() +for(s=a.tu(),s=s.gar(s);s.H();){r=s.ga1(s) +for(q=A.bsn(r.gF(r),b,c),q=new A.fH(q.a(),q.$ti.h("fH<1>"));q.H();){p=q.b +o.mU(0,r.DD(p.gae(p),p.gaH(p)),B.h)}}return o}, +bsn(a,b,c){return new A.eW(A.bOO(a,b,c),t.Ln)}, +bOO(a,b,c){return function(){var s=a,r=b,q=c +var p=0,o=1,n,m,l,k,j,i,h,g,f,e +return function $async$bsn(d,a0,a1){if(a0===1){n=a1 +p=o}while(true)switch(p){case 0:e=B.b.nd(r,0,new A.b8Y()) +m=r.length,l=m-1,k=0 +case 2:if(!(kj||h===l?7:8 +break +case 7:g=Math.max(0.1,i-j) +p=(h&1)===0?9:10 +break +case 9:p=11 +return d.b=new A.A(k,0,Math.min(s,k+g),0),1 +case 11:case 10:f=k+g +k=f +p=6 +break +case 8:case 5:++h +p=4 +break +case 6:p=2 +break +case 3:return 0 +case 1:return d.c=n,3}}}}, +b8Y:function b8Y(){}, +boB(a,b,c,d){return new A.a8A(a,b,c,d)}, +a8A:function a8A(a,b,c,d){var _=this +_.b=_.a=$ +_.c=!1 +_.d=a +_.e=b +_.f=c +_.r=d}, +Of(a,b,c,d,e,f,g,h,i){return new A.hs(a,f,c,d,g,h,e,b,i.h("hs<0>"))}, +Og(a,b){var s=null +return new A.hs(s,a,a,s,s,s,5e-324,17976931348623157e292,b.h("hs<0>"))}, +hs:function hs(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 +_.y=_.x=5e-324 +_.Q=_.z=null +_.$ti=i}, +cq:function cq(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.e=null}, +aDa:function aDa(){}, +e9:function e9(a){this.a=a}, +wS:function wS(a){this.a=a}, +axp(a,b){var s=t.vA,r=A.b([],s) +s=A.b([B.Kl,B.Ky,B.L7,B.Kw,B.Kb,B.K6,B.Kx,B.Lk,B.KR,B.KH,B.KW],s) +B.b.I(r,b.x) +B.b.I(r,s) +return new A.axo(a,b,r,s)}, +axo:function axo(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.e=_.d=0 +_.f=!1 +_.r=d +_.w=null +_.x=!1 +_.z=_.y=null}, +be2(a){if(a.d>=a.a.length)return!0 +return B.b.fk(a.c,new A.axq(a))}, +fa:function fa(){}, +axq:function axq(a){this.a=a}, +a_R:function a_R(){}, +axs:function axs(a){this.a=a}, +LK:function LK(){}, +azd:function azd(){}, +MK:function MK(){}, +brk(a){var s,r,q,p,o="backtick" +if(a.zC(o)!=null){s=a.zC(o) +s.toString +r=a.zC("backtickInfo") +r.toString +q=r +p=s}else{s=a.zC("tilde") +s.toString +r=a.zC("tildeInfo") +r.toString +q=r +p=s}return new A.b1F(a.b[1].length,p,B.d.eC(q))}, +a3v:function a3v(){}, +aE2:function aE2(){}, +b1F:function b1F(a,b,c){this.a=a +this.b=b +this.c=c}, +bFj(a,b){return J.bk7(a,new A.aEY(b))}, +a3Y:function a3Y(){}, +aF_:function aF_(a){this.a=a}, +aEZ:function aEZ(){}, +aEY:function aEY(a){this.a=a}, +a4N:function a4N(){}, +a4T:function a4T(){}, +a4X:function a4X(){}, +aGH:function aGH(){}, +Oo:function Oo(){}, +aJn:function aJn(){}, +aJo:function aJo(a,b){this.a=a +this.b=b}, +FU:function FU(a,b){this.a=a +this.b=b}, +ad6:function ad6(a,b){this.a=a +this.b=b}, +A5:function A5(){}, +aJt:function aJt(a,b){this.a=a +this.b=b}, +aJu:function aJu(a,b){this.a=a +this.b=b}, +aJv:function aJv(a){this.a=a}, +aJw:function aJw(a,b){this.a=a +this.b=b}, +Pw:function Pw(){}, +Px:function Px(){}, +Gz:function Gz(){}, +RN:function RN(){}, +aSv:function aSv(){}, +acS:function acS(){}, +Tl:function Tl(){}, +Tm:function Tm(){}, +aBA:function aBA(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.f=d +_.x=e +_.y=f +_.z=g}, +aBC:function aBC(a){this.a=a}, +FQ:function FQ(a,b){this.b=a +this.c=b}, +bET(a,b){return new A.aDU(a,b)}, +aDU:function aDU(a,b){this.a=a +this.b=b}, +aHC:function aHC(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.e=_.d=0 +_.f=d +_.r=e}, +aHL:function aHL(a){this.a=a}, +aHD:function aHD(){}, +aHE:function aHE(){}, +aHF:function aHF(a){this.a=a}, +aHG:function aHG(a,b,c){this.a=a +this.b=b +this.c=c}, +aHH:function aHH(a){this.a=a}, +aHI:function aHI(a,b){this.a=a +this.b=b}, +aHJ:function aHJ(a,b){this.a=a +this.b=b}, +aHK:function aHK(a,b,c){this.a=a +this.b=b +this.c=c}, +a_l:function a_l(a,b){this.a=a +this.b=b}, +a_m:function a_m(a,b){this.a=a +this.b=b}, +a13:function a13(a,b){this.a=a +this.b=b}, +a1U:function a1U(a,b){this.a=a +this.b=b}, +beq(a,b){return new A.pc(a,b)}, +bDA(a,b,c,d,e,f,g){var s,r,q,p,o,n,m,l,k,j,i,h=" \t\n\f\r\xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000" +if(b===0){s=!0 +r=!1}else{q=B.d.am(a.a,b-1,b) +s=B.d.G(h,q) +if(!s){p=$.bj2() +r=p.b.test(q)}else r=!1}p=a.a +if(c===p.length){o=!0 +n=!1}else{m=B.d.am(p,c,c+1) +o=B.d.G(h,m) +if(!o){l=$.bj2() +n=l.b.test(m)}else n=!1}l=!o +if(l)k=!n||s||r +else k=!1 +if(!s)j=!r||!l||n +else j=!1 +B.b.i1(g,new A.aAQ()) +if(k)l=!j||d||r +else l=!1 +if(j)i=!k||d||n +else i=!1 +return new A.Eu(e,p.charCodeAt(b),f,l,i,g)}, +a28:function a28(){}, +pc:function pc(a,b){this.a=a +this.b=b}, +RT:function RT(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=!0 +_.e=d +_.f=e +_.r=f +_.w=g}, +Eu:function Eu(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.d=c +_.f=d +_.r=e +_.w=f}, +aAQ:function aAQ(){}, +a39:function a39(a,b){this.a=a +this.b=b}, +MJ:function MJ(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.a=d +_.b=e}, +a3o:function a3o(a,b){this.a=a +this.b=b}, +bFk(a){if(a.length===0||a.charCodeAt(0)!==94)return null +a=B.d.eC(B.d.c5(a,1)).toLowerCase() +if(a.length===0)return null +return a}, +bFl(a,b,c){var s,r,q,p,o,n,m,l,k,j=A.bFk(b),i=a.a.b,h=i.b,g=new A.bk(h,A.w(h).h("bk<1>")).pJ(0,new A.aF0(j),new A.aF1()),f=h.i(0,g) +if(j==null||f==null)return null +s=t.c +r=A.b([],s) +if(a.b.b===33)r.push(new A.e9("!"));++f +h.u(0,g,f) +q=i.c +p=B.b.f7(q,j) +if(p<0){p=q.length +q.push(j)}o=a.c.$0() +if(c===!0){r.push(new A.e9("[")) +B.b.I(r,o) +r.push(new A.e9("]"))}n=A.lM(B.kj,g,B.a1,!1) +m=f>1?"-"+f:"" +i=A.b([new A.e9(""+(p+1))],s) +l=t.N +k=A.D(l,l) +k.u(0,"href","#fn-"+n) +k.u(0,"id","fnref-"+n+m) +s=A.b([new A.cq("a",i,k)],s) +l=A.D(l,l) +l.u(0,"class","footnote-ref") +r.push(new A.cq("sup",s,l)) +return r}, +aF0:function aF0(a){this.a=a}, +aF1:function aF1(){}, +bFR(a){return new A.a5c(new A.a6h(),!1,!1,null,A.bw("!\\[",!0,!0,!1),33)}, +a5c:function a5c(a,b,c,d,e,f){var _=this +_.w=a +_.c=b +_.d=c +_.e=d +_.a=e +_.b=f}, +aHq:function aHq(){}, +bFZ(){return new A.a5p(A.bw("(?:<[a-z][a-z0-9-]*(?:\\s+[a-z_:][a-z0-9._:-]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+?|'[^']*?'|\"[^\"]*?\"))?)*\\s*/?>|)||<\\?.*?\\?>|()|()",!1,!0,!1),60)}, +a5p:function a5p(a,b){this.a=a +this.b=b}, +h9:function h9(){}, +a6d:function a6d(a,b){this.a=a +this.b=b}, +bGC(a,b,c){return new A.A0(new A.a6h(),!1,!1,null,A.bw(b,!0,!0,!1),c)}, +aJl:function aJl(a,b,c){this.a=a +this.b=b +this.c=c}, +A0:function A0(a,b,c,d,e,f){var _=this +_.w=a +_.c=b +_.d=c +_.e=d +_.a=e +_.b=f}, +a6h:function a6h(){}, +Fr:function Fr(a,b){this.a=a +this.b=b}, +abY:function abY(a,b){this.a=a +this.b=b}, +acy:function acy(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.a=d +_.b=e}, +Ih:function Ih(a,b){this.a=a +this.b=b}, +bnK(a,b){var s=$.nS() +return new A.ja(a,b,s.b.test(a))}, +ja:function ja(a,b,c){this.a=a +this.b=b +this.c=c}, +aJm:function aJm(a){var _=this +_.c=!1 +_.f=_.e=_.d=null +_.r=0 +_.a=a +_.b=0}, +adn:function adn(a){this.a=a +this.b=0}, +bug(a){var s,r,q,p=B.d.eC(a),o=$.bzn(),n=A.ea(p,o," ") +for(s=0;p=n.length,s1?A.et(B.f.hZ(o,16),m,16):65533)}else if(q!=null){n=A.et(q,m,16) +return A.cs(n>1114111||n===0?65533:n)}return l}, +bc7(a){var s,r,q,p,o,n +for(s=a.length,r=0,q="";r?@[\\]^_`{|}~",o,0) +else n=!1 +if(n)r=p}q+=a[r]}return q.charCodeAt(0)==0?q:q}, +bKB(a){var s,r,q,p +for(s=new A.l9(a),r=t.Hz,s=new A.cR(s,s.gF(0),r.h("cR")),r=r.h("O.E"),q=0;s.H();){p=s.d +if(p==null)p=r.a(p) +if(p!==32&&p!==9)break +q+=p===9?4-B.f.bx(q,4):1}return q}, +bpW(a,b){var s,r,q,p,o,n=A.bw("^[ \t]{0,"+b+"}",!0,!1,!1).iU(a),m=n==null?null:n.b[0] +if(m!=null)for(s=m.length,r=null,q=0,p=0;q=b){if(r!=null)r=p-b +if(p===b||o)++q +break}if(r!=null)r=0}else{r=null +q=0}return new A.aAH(B.d.c5(a,q),r)}, +aAH:function aAH(a,b){this.a=a +this.b=b}, +bK5(a){return new A.RX(null,a,B.al)}, +Gl:function Gl(){}, +alZ:function alZ(a,b,c,d){var _=this +_.y2=a +_.r9$=b +_.c=_.b=_.a=_.ax=null +_.d=$ +_.e=c +_.f=null +_.r=d +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +xf:function xf(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +xg:function xg(a,b){var _=this +_.c=_.b=_.a=_.ax=_.bv=_.y2=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +b4e:function b4e(){}, +abC:function abC(){}, +b6H:function b6H(a){this.a=a}, +b8x:function b8x(a){this.a=a}, +tu:function tu(){}, +RX:function RX(a,b,c){var _=this +_.r9$=a +_.c=_.b=_.a=_.ax=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +apN:function apN(){}, +atG:function atG(){}, +bCZ(a,b){return new A.azG(a,b)}, +azG:function azG(a,b){this.a=a +this.b=b}, +kx:function kx(){}, +aMb:function aMb(a,b){this.a=a +this.b=b}, +aMc:function aMc(a){this.a=a}, +aMe:function aMe(a,b){this.a=a +this.b=b}, +aMd:function aMd(a,b){this.a=a +this.b=b}, +x0:function x0(a,b){this.a=a +this.$ti=b}, +jQ:function jQ(){}, +aOC:function aOC(a,b){this.a=a +this.b=b}, +aOE:function aOE(a,b){this.a=a +this.b=b}, +aOD:function aOD(a){this.a=a}, +bkE(a,b,c,d){var s=null,r=A.ar(),q=B.t.aW() +r=new A.KU(c,a,d,b,B.O,s,s,s,s,s,s,!0,r,$,q,s,s,3,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.iI(s,s,s,s,s,3,!0) +return r}, +bRV(a,b,c){var s,r,q,p,o,n,m,l=A.b([],t.hb) +for(s=c.rx,r=c.RG;l.length<20;){q=B.O.aV() +p=B.O.aV() +o=new Float64Array(2) +n=new A.a(o) +o[0]=q +o[1]=p +n.bL(0,a) +p=B.O.f9(5) +q=B.O.wc()?1:-1 +m=A.bkE(n,!0,3+p,q*B.O.f9(5)) +if(!(Math.sqrt(m.rx.n2(s))=1;s=q){q=s-1 +if(b[q]!=null)break}p=new A.d8("") +o=""+(a+"(") +p.a=o +n=A.a5(b) +m=n.h("aT<1>") +l=new A.aT(b,0,s,m) +l.cq(b,0,s,n.c) +m=o+new A.W(l,new A.b9B(),m.h("W")).cj(0,", ") +p.a=m +p.a=m+("): part "+(r-1)+" was null, but part "+r+" was not.") +throw A.d(A.c3(p.j(0),null))}}, +a1x:function a1x(a,b){this.a=a +this.b=b}, +aAb:function aAb(){}, +b9B:function b9B(){}, +aHU:function aHU(){}, +bg9(a,b){var s,r,q,p,o,n=b.akg(a) +b.zs(a) +if(n!=null)a=B.d.c5(a,n.length) +s=t.T +r=A.b([],s) +q=A.b([],s) +s=a.length +if(s!==0&&b.Ls(a.charCodeAt(0))){q.push(a[0]) +p=1}else{q.push("") +p=0}for(o=p;o").ak(e).h("OE<1,2>"))}, +OE:function OE(a,b,c,d){var _=this +_.b=a +_.c=b +_.a=c +_.$ti=d}, +T9:function T9(a,b){this.a=a +this.$ti=b}, +bic(a,b){var s=new A.W(new A.l9(a),A.bto(),t.Hz.h("W")).mq(0) +return new A.BM(new A.RV(a.charCodeAt(0)),'"'+s+'" expected')}, +RV:function RV(a){this.a=a}, +yx:function yx(a){this.a=a}, +a6q:function a6q(a,b,c){this.a=a +this.b=b +this.c=c}, +a7D:function a7D(a){this.a=a}, +bU9(a){var s,r,q,p,o,n,m,l,k=A.ab(a,!1,t.eg) +B.b.i1(k,new A.bcO()) +s=A.b([],t.Am) +for(r=k.length,q=0;q=p.a){n=p.b +s[s.length-1]=new A.hd(o.a,n)}else s.push(p)}}m=B.b.nd(s,0,new A.bcP()) +if(m===0)return B.SH +else if(m-1===65535)return B.SI +else if(s.length===1){r=s[0] +n=r.a +return n===r.b?new A.RV(n):r}else{r=B.b.ga9(s) +n=B.b.ga_(s) +l=B.f.dU(B.b.ga_(s).b-B.b.ga9(s).a+1+31,5) +r=new A.a6q(r.a,n.b,new Uint32Array(l)) +r.asA(s) +return r}}, +bcO:function bcO(){}, +bcP:function bcP(){}, +buv(a,b){var s=$.bzo().cm(new A.Ef(a,0)) +s=s.gm(s) +return new A.BM(s,b==null?"["+new A.W(new A.l9(a),A.bto(),t.Hz.h("W")).mq(0)+"] expected":b)}, +b9w:function b9w(){}, +b9s:function b9s(){}, +b9q:function b9q(){}, +hJ:function hJ(){}, +hd:function hd(a,b){this.a=a +this.b=b}, +aez:function aez(){}, +bCE(a,b,c){var s=b==null?A.btK():b +return new A.yf(s,A.ab(a,!1,c.h("ba<0>")),c.h("yf<0>"))}, +uE(a,b,c){var s=b==null?A.btK():b +return new A.yf(s,A.ab(a,!1,c.h("ba<0>")),c.h("yf<0>"))}, +yf:function yf(a,b,c){this.b=a +this.a=b +this.$ti=c}, +h6:function h6(){}, +buE(a,b,c,d){return new A.BF(a,b,c.h("@<0>").ak(d).h("BF<1,2>"))}, +bJM(a,b,c,d){return new A.BF(a,b,c.h("@<0>").ak(d).h("BF<1,2>"))}, +bp2(a,b,c,d,e){return A.vF(a,new A.aP4(b,c,d,e),!1,c.h("@<0>").ak(d).h("+(1,2)"),e)}, +BF:function BF(a,b,c){this.a=a +this.b=b +this.$ti=c}, +aP4:function aP4(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +p1(a,b,c,d,e,f){return new A.BG(a,b,c,d.h("@<0>").ak(e).ak(f).h("BG<1,2,3>"))}, +bJN(a,b,c,d,e,f){return new A.BG(a,b,c,d.h("@<0>").ak(e).ak(f).h("BG<1,2,3>"))}, +B8(a,b,c,d,e,f){return A.vF(a,new A.aP5(b,c,d,e,f),!1,c.h("@<0>").ak(d).ak(e).h("+(1,2,3)"),f)}, +BG:function BG(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +aP5:function aP5(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +bd1(a,b,c,d,e,f,g,h){return new A.RK(a,b,c,d,e.h("@<0>").ak(f).ak(g).ak(h).h("RK<1,2,3,4>"))}, +aP6(a,b,c,d,e,f,g){return A.vF(a,new A.aP7(b,c,d,e,f,g),!1,c.h("@<0>").ak(d).ak(e).ak(f).h("+(1,2,3,4)"),g)}, +RK:function RK(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.$ti=e}, +aP7:function aP7(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +buF(a,b,c,d,e,f,g,h,i,j){return new A.RL(a,b,c,d,e,f.h("@<0>").ak(g).ak(h).ak(i).ak(j).h("RL<1,2,3,4,5>"))}, +bp3(a,b,c,d,e,f,g,h){return A.vF(a,new A.aP8(b,c,d,e,f,g,h),!1,c.h("@<0>").ak(d).ak(e).ak(f).ak(g).h("+(1,2,3,4,5)"),h)}, +RL:function RL(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.$ti=f}, +aP8:function aP8(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +bJ_(a,b,c,d,e,f,g,h,i,j,k){return A.vF(a,new A.aP9(b,c,d,e,f,g,h,i,j,k),!1,c.h("@<0>").ak(d).ak(e).ak(f).ak(g).ak(h).ak(i).ak(j).h("+(1,2,3,4,5,6,7,8)"),k)}, +RM:function RM(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}, +aP9:function aP9(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}, +A4:function A4(){}, +bHS(a,b){return new A.mn(null,a,b.h("mn<0?>"))}, +mn:function mn(a,b,c){this.b=a +this.a=b +this.$ti=c}, +S2:function S2(a,b,c,d){var _=this +_.b=a +_.c=b +_.a=c +_.$ti=d}, +z1:function z1(a,b){this.a=a +this.$ti=b}, +a7v:function a7v(a){this.a=a}, +bi8(){return new A.mZ("input expected")}, +mZ:function mZ(a){this.a=a}, +BM:function BM(a,b){this.a=a +this.b=b}, +a9e:function a9e(a,b,c){this.a=a +this.b=b +this.c=c}, +df(a){var s=a.length +if(s===0)return new A.z1(a,t.oy) +else if(s===1){s=A.bic(a,null) +return s}else{s=A.bVJ(a,null) +return s}}, +bVJ(a,b){return new A.a9e(a.length,new A.bd7(a),'"'+a+'" expected')}, +bd7:function bd7(a){this.a=a}, +bpf(a,b,c,d){return new A.aaq(a.a,d,b,c)}, +aaq:function aaq(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +lp:function lp(a,b,c,d,e){var _=this +_.e=a +_.b=b +_.c=c +_.a=d +_.$ti=e}, +On:function On(){}, +bIv(a,b){return A.bgg(a,0,9007199254740991,b)}, +bgg(a,b,c,d){return new A.Q6(b,c,a,d.h("Q6<0>"))}, +Q6:function Q6(a,b,c,d){var _=this +_.b=a +_.c=b +_.a=c +_.$ti=d}, +QX:function QX(){}, +boF(a,b,c){var s,r=$.bdo() +A.ES(a) +s=r.a.get(a)===B.mF +if(s)throw A.d(A.kg("`const Object()` cannot be used as the token.")) +A.ES(a) +if(b!==r.a.get(a))throw A.d(A.kg("Platform interfaces must not be implemented with `implements`"))}, +aNG:function aNG(){}, +bCw(a,b){if(b!=null)b.t()}, +Lm:function Lm(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e +_.$ti=f}, +bGL(a,b){if(b!=null)b.an(0,a.gafN()) +return new A.aJA(b,a)}, +Ou:function Ou(){}, +aJA:function aJA(a,b){this.a=a +this.b=b}, +bHq(a,b){return new A.a7a(b,a,null)}, +boW(a,b,c){var s,r=c.h("CQ<0?>?").a(a.k9(c.h("hE<0?>"))),q=r==null +if(q&&!c.b(null))A.X(new A.a9m(A.ay(c),A.J(a.gba()))) +if(b)a.bh(c.h("hE<0?>")) +if(q)s=null +else{q=r.gBg() +s=q.gm(q)}if($.byZ()){if(!c.b(s))throw A.d(new A.a9n(A.ay(c),A.J(a.gba()))) +return s}return s==null?c.a(s):s}, +zJ:function zJ(){}, +Vu:function Vu(a,b,c,d){var _=this +_.r9$=a +_.c=_.b=_.a=_.ax=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1 +_.$ti=d}, +hE:function hE(a,b,c,d){var _=this +_.f=a +_.b=b +_.a=c +_.$ti=d}, +CQ:function CQ(a,b,c,d){var _=this +_.dg=_.bD=!1 +_.R=!0 +_.aa=_.S=!1 +_.bp=$ +_.y2=a +_.c=_.b=_.a=_.ax=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1 +_.$ti=d}, +b2O:function b2O(a,b){this.a=a +this.b=b}, +ahL:function ahL(){}, +kU:function kU(){}, +IY:function IY(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.$ti=g}, +Ur:function Ur(a){var _=this +_.b=null +_.c=!1 +_.a=_.f=_.e=_.d=null +_.$ti=a}, +K9:function K9(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +Yg:function Yg(a){this.a=this.b=null +this.$ti=a}, +a7a:function a7a(a,b,c){this.c=a +this.d=b +this.a=c}, +Qc:function Qc(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e +_.$ti=f}, +a9n:function a9n(a,b){this.a=a +this.b=b}, +a9m:function a9m(a,b){this.a=a +this.b=b}, +DE:function DE(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){var _=this +_.ao=$ +_.aM=a +_.h9$=b +_.is$=c +_.it$=d +_.iu$=e +_.h2$=f +_.k4=g +_.ok=h +_.p1=i +_.p2=j +_.p3=!1 +_.R$=k +_.S$=l +_.aa$=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=r +_.w=!1 +_.y=s +_.z=a0 +_.Q=a1 +_.as=a2}, +ag8:function ag8(){}, +ag9:function ag9(){}, +EK:function EK(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.h9$=a +_.is$=b +_.it$=c +_.iu$=d +_.M$=e +_.k4=f +_.ok=g +_.p1=h +_.p2=i +_.p3=!1 +_.R$=j +_.S$=k +_.aa$=l +_.at=m +_.ax=n +_.ay=o +_.ch=p +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=q +_.w=!1 +_.y=r +_.z=s +_.Q=a0 +_.as=a1}, +aiE:function aiE(){}, +aiF:function aiF(){}, +MM:function MM(a,b,c,d,e,f,g,h,i,j){var _=this +_.k2=a +_.k3=b +_.h2$=c +_.at=$ +_.ax=d +_.ay=e +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=f +_.w=!1 +_.y=g +_.z=h +_.Q=i +_.as=j}, +aiG:function aiG(){}, +a3r:function a3r(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.h2$=a +_.k4=b +_.ok=c +_.p1=d +_.p2=e +_.p3=!1 +_.R$=f +_.S$=g +_.aa$=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +aiP:function aiP(){}, +PZ:function PZ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){var _=this +_.ao=$ +_.aM=a +_.h9$=b +_.is$=c +_.it$=d +_.iu$=e +_.h2$=f +_.k4=g +_.ok=h +_.p1=i +_.p2=j +_.p3=!1 +_.R$=k +_.S$=l +_.aa$=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=r +_.w=!1 +_.y=s +_.z=a0 +_.Q=a1 +_.as=a2}, +aNN:function aNN(a){this.a=a}, +amL:function amL(){}, +amM:function amM(){}, +acp:function acp(a,b,c,d,e,f,g){var _=this +_.ax=$ +_.ay=a +_.h2$=b +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=c +_.w=!1 +_.y=d +_.z=e +_.Q=f +_.as=g}, +aU_:function aU_(a){this.a=a}, +aqi:function aqi(){}, +acq:function acq(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.h2$=a +_.k4=b +_.ok=c +_.p1=d +_.p2=e +_.p3=!1 +_.R$=f +_.S$=g +_.aa$=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.CW=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=m +_.w=!1 +_.y=n +_.z=o +_.Q=p +_.as=q}, +aqj:function aqj(){}, +wj:function wj(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){var _=this +_.aa=_.S=_.R=$ +_.bp=a +_.aN=b +_.cZ=0 +_.adQ$=c +_.adR$=d +_.adS$=e +_.dq$=f +_.k3=g +_.k4=h +_.ok=$ +_.p2=!1 +_.cy$=i +_.db$=j +_.dx$=$ +_.fx$=_.fr$=_.dy$=null +_.fy$=$ +_.id$=!1 +_.k1$=$ +_.k2$=k +_.k3$=l +_.k4$=!1 +_.at=m +_.ax=n +_.ay=o +_.ch=$ +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=p +_.w=!1 +_.y=q +_.z=r +_.Q=s +_.as=a0}, +aoP:function aoP(){}, +WS:function WS(){}, +WT:function WT(){}, +Hg:function Hg(a){this.a=a}, +aQB:function aQB(){}, +abv(){var s=0,r=A.r(t.cZ),q,p=2,o,n,m,l,k,j,i +var $async$abv=A.t(function(a,b){if(a===1){o=b +s=p}while(true)switch(s){case 0:s=$.aSF==null?3:4 +break +case 3:n=new A.bH(new A.aM($.aK,t.Gl),t.Iy) +$.aSF=n +p=6 +s=9 +return A.x(A.aSG(),$async$abv) +case 9:m=b +J.bB6(n,new A.HG(m)) +p=2 +s=8 +break +case 6:p=5 +i=o +l=A.b2(i) +n.n_(l) +k=n.a +$.aSF=null +q=k +s=1 +break +s=8 +break +case 5:s=2 +break +case 8:case 4:q=$.aSF.a +s=1 +break +case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$abv,r)}, +aSG(){var s=0,r=A.r(t.nf),q,p,o,n,m,l,k,j +var $async$aSG=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:n=t.N +m=t.K +l=A.D(n,m) +k=J +j=l +s=3 +return A.x($.bdr().uq(0),$async$aSG) +case 3:k.Zy(j,b) +p=A.D(n,m) +for(n=l,n=A.jb(n,n.r,A.w(n).c);n.H();){m=n.d +o=B.d.c5(m,8) +m=J.bG(l,m) +m.toString +p.u(0,o,m)}q=p +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$aSG,r)}, +HG:function HG(a){this.a=a}, +aKA:function aKA(){}, +aSE:function aSE(){}, +aOk:function aOk(a,b){this.a=a +this.b=b}, +aG1:function aG1(a){this.a=a}, +aSC:function aSC(){}, +aSD:function aSD(a,b){this.a=a +this.b=b}, +Zf(a){var s=0,r=A.r(t.x6),q,p,o,n,m,l,k +var $async$Zf=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=$.bsR +s=o==null?3:4 +break +case 3:o=t.AC +$.kb.u(0,A.ay(o),4) +A.l0(o) +o=t.DL +$.kb.u(0,A.ay(o),8) +A.l0(o) +o=t.ZP +$.kb.u(0,A.ay(o),1) +A.l0(o) +o=t.di +$.kb.u(0,A.ay(o),1) +A.l0(o) +o=t.pT +$.kb.u(0,A.ay(o),2) +A.l0(o) +o=t.i2 +$.kb.u(0,A.ay(o),2) +A.l0(o) +o=t._Y +$.kb.u(0,A.ay(o),4) +A.l0(o) +o=t.QG +$.kb.u(0,A.ay(o),4) +A.l0(o) +o=t.UD +$.kb.u(0,A.ay(o),8) +A.l0(o) +o=t.cG +$.kb.u(0,A.ay(o),8) +A.l0(o) +o=t.EV +$.kb.u(0,A.ay(o),1) +A.l0(o) +o=t.g9 +$.kb.u(0,A.ay(o),1) +A.l0(o) +o=t.wt +$.kb.u(0,A.ay(o),4) +A.l0(o) +o=t.er +$.kb.u(0,A.ay(o),4) +A.l0(o) +A.l0(t.ke) +A.l0(t.FM) +A.di(t.Zk) +A.di(t.q6) +A.di(t.If) +A.di(t.CF) +A.di(t.Qh) +A.di(t.sf) +A.di(t.Az) +A.di(t.PD) +A.di(t.lO) +A.di(t.JF) +A.di(t.A2) +A.di(t.qR) +A.di(t.jZ) +A.di(t.bW) +A.di(t.CC) +A.di(t.lp) +A.di(t.ac) +A.di(t.ap) +A.di(t.DM) +A.di(t.Pd) +A.di(t.LA) +A.di(t.LT) +A.di(t.P5) +A.di(t.dk) +A.di(t.dX) +A.di(t.JP) +A.di(t.U7) +A.di(t.Ao) +A.di(t.P8) +A.di(t.KQ) +A.di(t.vt) +A.di(t.sG) +A.di(t.SB) +A.di(t.F3) +A.di(t.cx) +A.di(t.P1) +A.di(t.zb) +A.di(t.M4) +A.di(t.xJ) +A.di(t.rv) +A.di(t.z1) +s=5 +return A.x(A.bPt(A.b(["assets/packages/spine_flutter/lib/assets/libspine_flutter.js"],t.T)),$async$Zf) +case 5:n=$ +m=A +l=J +k=J +s=7 +return A.x($.l3().d_(0,"packages/spine_flutter/lib/assets/libspine_flutter.wasm"),$async$Zf) +case 7:s=6 +return A.x(m.aDf(l.xF(k.nU(c)),"libspine_flutter"),$async$Zf) +case 6:o=n.bsR=c +case 4:if(o!=null){p=A.bEq(o) +q=new A.ac5(p,p.a) +s=1 +break}else throw A.d(A.c1("Couldn't load libspine-flutter.js/.wasm")) +case 1:return A.p(q,r)}}) +return A.q($async$Zf,r)}, +ac5:function ac5(a,b){this.a=a +this.b=b}, +av4(){var s=0,r=A.r(t.H),q,p +var $async$av4=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:s=3 +return A.x(A.Zf(!1),$async$av4) +case 3:p=b +$.c7.b=new A.aTo(p.a.gaUQ()) +$.xv.b=p.b +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$av4,r)}, +Dx(a9,b0){var s=0,r=A.r(t.aM),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 +var $async$Dx=A.t(function(b1,b2){if(b1===1)return A.o(b2,r) +while(true)switch(s){case 0:a7=A +a8=B.a1 +s=3 +return A.x(b0.$1(a9),$async$Dx) +case 3:a5=a7.bgQ(a8.hH(0,b2),$.xv.bb()) +a6=$.c7.bb().aIJ(a5.eq(0,t.g9)) +$.xv.bb().DW(a5) +if($.c7.bb().a8w(a6).a!==$.Dl().a){p=A.aX7($.c7.bb().a8w(a6).eq(0,t.EV)) +$.c7.bb().a8v(a6) +throw A.d(A.c1("Couldn't load atlas: "+p))}o=$.avw().ad6(a9) +n=A.b([],t.jm) +m=A.b([],t.tn) +l=$.c7.bb().aIH(a6) +k=t._4,j=o+"/",i=t.dP,h=t.Q2,g=t.EV,f=$.c7.a,e=0 +case 4:if(!(e>>0)+p,31)!==0)A.X(A.e_("Invalid FCHECK")) +if((p>>>5&1)!==0){s.fs() +A.X(A.e_("FDICT Encoding not currently supported"))}n=A.bn8(s,g).c +m=t.Cm.a(B.aw.lo(n.c.buffer,0,n.a)) +s.fs() +l=m +break +case B.vA:s=A.rA(r,0,g,0) +if(s.ej()!==35615)A.X(A.e_("Invalid GZip Signature")) +if(s.fc()!==8)A.X(A.e_("Invalid GZip Compression Methos")) +k=s.fc() +s.fs() +s.fc() +s.fc() +if((k&4)!==0)s.nx(s.ej()) +if((k&8)!==0)s.ahp() +if((k&16)!==0)s.ahp() +if((k&2)!==0)s.ej() +s=A.bn8(s,g).c +m=t.Cm.a(B.aw.lo(s.c.buffer,0,s.a)) +l=m +break +case B.vB:throw A.d(A.af("zstd is an unsupported compression")) +case null:case void 0:l=r +break +default:l=g}j=B.aw.im(new Uint8Array(A.eG(l)).buffer,0,g) +i=A.b([],t.t) +for(s=l.length,h=0;h") +s=3 +return A.x(A.f2(new A.e7(new A.bg(new A.e7(new A.bg(new A.ca(A.aY_(a).gMU(0).ly$.a,o),new A.aWe(),o.h("bg")),new A.aWf(),n),new A.aWg(),n.h("bg")),new A.aWh(b),n.h("e7>")),t.Fv),$async$aWd) +case 3:m=d +o=J.kd(m)?null:m +p=A.aY_(a).gMU(0) +if(p.b.gEv()!=="map")A.X("XML is not in TMX format") +q=A.bLx(new A.dB(p),o) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$aWd,r)}, +bLx(a,b){var s,r,q,p,o,n,m,l,k,j,i="backgroundcolor" +a.hk(i) +s=a.Nu(i) +a.lJ("compressionlevel",-1) +r=a.ii("height") +a.l5("hexsidelength") +a.kF("infinite",!1) +a.l5("nextlayerid") +a.l5("nextobjectid") +q=A.bGY(a,"orientation") +A.bJb(a,"renderorder",B.Fj) +p=A.bKs(a,"staggeraxis") +o=A.bKu(a,"staggerindex") +a.hk("tiledversion") +n=a.ii("tileheight") +m=a.ii("tilewidth") +A.bLr(a,"type",B.H9) +a.l7(0,"version","1.0") +l=a.ii("width") +k=a.mB("tileset",new A.aWc(b),t.gM) +j=A.bnF(a) +A.B1(a) +a.mB("editorsettings",A.bW6(),t.Cv) +return new A.adz(l,r,m,n,k,j,s,q,p,o)}, +bFI(a){a.ii("width") +a.ii("height") +A.bFH(a,"orientation") +return new A.NA()}, +bKV(a){a.oV(0,"name") +a.ii("name") +A.B1(a) +return new A.I6()}, +bLt(a){return A.bLp(a)}, +bLp(a){var s,r,q=a.ii("id") +if(a.hk("class")==null)a.hk("type") +a.lI("probability",0) +s=a.hk("terrain") +if(s!=null){r=t.An +A.ab(new A.W(A.b(s.split(","),t.T),new A.aW0(),r),!0,r.h("aI.E"))}s=a.nP("image",A.buP()) +a.FZ("x") +a.FZ("y") +a.FZ("width") +a.FZ("height") +a.nP("objectgroup",A.buO()) +r=new A.aW1().$1(a) +A.B1(a) +return new A.mG(q,s,r)}, +bLs(a){return new A.T1(a.lJ("x",0),a.lJ("y",0))}, +bqn(a,b){return A.aWn(a,b)}, +aWn(a6,a7){var s,r,q,p,o,n,m,l,k,j,i,h,g=a6.hk("backgroundcolor"),f=a6.l5("columns"),e=a6.l5("firstgid"),d=a6.lJ("margin",0),c=a6.hk("name"),b=A.bHO(a6.l7(0,"objectalignment","unspecified")),a=a6.hk("source"),a0=a6.lJ("spacing",0),a1=a6.l5("tilecount"),a2=a6.l5("tilewidth"),a3=a6.l5("tileheight"),a4=a6.hk("tiledversion"),a5=a6.hk("transparentcolor") +A.bLA(a6,"type",B.Ha) +a6.l7(0,"version","1.0") +s=a6.nP("image",A.buP()) +r=a6.nP("grid",A.bW9()) +q=a6.nP("tileoffset",A.bWf()) +p=A.B1(a6) +o=a6.mB("terrains",A.bWd(),t.uB) +n=new A.aWo().$1(a6) +m=new A.aWp().$1(a6) +l=A.bLB(n,a1==null?0:a1,f,a2,a3) +k=new A.nw(e,a,c,a2,a3,a0,d,a1,f,b,l,s,q,r,p,o,m,a4,g,a5) +j=k.w=l.length +if(a7!=null&&a!=null){i=a7.ajP() +h=A.aWn(i==null?new A.dB(A.aY_(a7.a).gMU(0)):i,null) +i=h.cy +k.cy=i==null?g:i +i=h.x +k.x=i==null?f:i +i=h.a +k.a=i==null?e:i +i=h.at +k.at=i==null?r:i +i=h.Q +k.Q=i==null?s:i +i=h.c +k.c=i==null?c:i +k.y=h.y +k.f=h.f +k.r=h.r +i=h.w +k.w=i==null?j:i +j=h.cx +k.cx=j==null?a4:j +j=h.as +k.as=j==null?q:j +j=h.e +k.e=j==null?a3:j +j=h.d +k.d=j==null?a2:j +j=h.db +k.db=j==null?a5:j +p.a.I(0,h.ax.a) +B.b.I(o,h.ay) +B.b.I(l,h.z) +J.Zy(m,h.ch)}return k}, +bLB(a,b,c,d,e){var s,r,q,p,o=A.b([],t.hp) +for(s=c!=null,r=d!=null,q=e!=null,p=0;p=o.length)o.push(r) +else o[q]=r}return o}, +bM8(a){a.oV(0,"name") +a.oV(0,"color") +a.ii("tile") +a.lI("probability",0) +A.B1(a) +return new A.qj()}, +bMa(a){return A.bM9(a)}, +bM9(a){var s,r=new A.aXu().$1(a) +a.oV(0,"name") +a.ii("tile") +s=J.al(r) +s.i(r,0) +s.i(r,1) +a.mB("wangtiles",A.bWk(),t.TQ) +A.B1(a) +return new A.tO()}, +bMc(a){return A.bMb(a)}, +bMb(a){a.ii("tileid") +A.bMd(new A.aXv().$1(a)) +a.kF("hflip",!1) +a.kF("vflip",!1) +a.kF("dflip",!1) +return new A.IE()}, +bMd(a){var s,r,q=B.aw.im(new Uint8Array(A.eG(a)).buffer,0,null),p=A.b([],t.t) +for(s=J.al(a),r=0;rb?a:b,r=c>d?c:d +return s>r?s:r}, +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}, +blq(a,b,c,d,e){var s=A.AQ(a,b,e),r=A.AQ(b,c,e),q=A.AQ(c,d,e),p=A.AQ(s,r,e),o=A.AQ(r,q,e) +return A.b([a,s,p,A.AQ(p,o,e),o,q,d],t.sK)}, +a8y(a,b){var s=A.b([],t.H9) +B.b.I(s,a) +return new A.jf(s,b)}, +bup(a,b){var s,r,q,p +if(a==="")return A.a8y(B.ZE,b==null?B.cG:b) +s=new A.aUJ(a,B.eU,a.length) +s.BZ() +r=A.b([],t.H9) +q=new A.mp(r,b==null?B.cG:b) +p=new A.aUI(B.h7,B.h7,B.h7,B.eU) +for(r=s.agM(),r=new A.fH(r.a(),r.$ti.h("fH<1>"));r.H();)p.aQO(r.b,q) +return q.wz()}, +a8z:function a8z(a,b){this.a=a +this.b=b}, +GC:function GC(a,b){this.a=a +this.b=b}, +vX:function vX(){}, +iM:function iM(a,b,c){this.b=a +this.c=b +this.a=c}, +mg:function mg(a,b,c){this.b=a +this.c=b +this.a=c}, +i6:function i6(a,b,c,d,e,f,g){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.a=g}, +aAf:function aAf(){}, +LH:function LH(a){this.a=a}, +mp:function mp(a,b){this.a=a +this.b=b}, +jf:function jf(a,b){this.a=a +this.b=b}, +b_g:function b_g(a){this.a=a +this.b=0}, +b4v:function b4v(a,b,c,d){var _=this +_.a=a +_.b=$ +_.c=b +_.d=c +_.e=$ +_.f=d}, +PM:function PM(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +bFQ(a){var s,r,q=null +if(a.length===0)throw A.d(A.c3("bytes was empty",q)) +s=a.byteLength +if(s>20&&a[0]===137&&a[1]===80&&a[2]===78&&a[3]===71&&a[4]===13&&a[5]===10&&a[6]===26&&a[7]===10){s=A.kw(a.buffer,0,q) +return new A.aNS(B.wT,s.getUint32(16,!1),s.getUint32(20,!1))}if(s>8)if(a[0]===71)if(a[1]===73)if(a[2]===70)if(a[3]===56){r=a[4] +r=(r===55||r===57)&&a[5]===97}else r=!1 +else r=!1 +else r=!1 +else r=!1 +else r=!1 +if(r){s=A.kw(a.buffer,0,q) +return new A.aG3(B.wV,s.getUint16(6,!0),s.getUint16(8,!0))}if(s>12&&a[0]===255&&a[1]===216&&a[2]===255)return A.bGf(A.kw(a.buffer,0,q)) +if(s>28&&a[0]===82&&a[1]===73&&a[2]===70&&a[3]===70&&a[8]===87&&a[9]===69&&a[10]===66&&a[11]===80){s=A.kw(a.buffer,0,q) +return new A.aXx(B.wU,s.getUint16(26,!0),s.getUint16(28,!0))}if(s>22&&a[0]===66&&a[1]===77){s=A.kw(a.buffer,0,q) +return new A.axv(B.wW,s.getInt32(18,!0),s.getInt32(22,!0))}throw A.d(A.c3("unknown image type",q))}, +bGf(a){var s,r=4+a.getUint16(4,!1) +for(;r>>0)}, +blc(a,b,c,d){return new A.as(((a&255)<<24|(b&255)<<16|(c&255)<<8|d&255)>>>0)}, +as:function as(a){this.a=a}, +of:function of(){}, +vC:function vC(a,b,c,d,e,f,g,h){var _=this +_.r=a +_.w=b +_.a=c +_.b=d +_.c=e +_.d=f +_.e=g +_.f=h}, +Nz:function Nz(a,b){this.a=a +this.b=b}, +w5:function w5(a,b,c,d,e,f,g,h,i){var _=this +_.r=a +_.w=b +_.x=c +_.a=d +_.b=e +_.c=f +_.d=g +_.e=h +_.f=i}, +pO:function pO(a,b,c){this.a=a +this.b=b +this.c=c}, +Sm:function Sm(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +z8:function z8(a,b){this.a=a +this.b=b}, +i2:function i2(a,b){this.a=a +this.b=b}, +a8n:function a8n(a,b){this.a=a +this.b=b}, +Sn:function Sn(a,b){this.a=a +this.b=b}, +So:function So(a,b){this.a=a +this.b=b}, +T0:function T0(a,b){this.a=a +this.b=b}, +SS:function SS(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +SK:function SK(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +oc:function oc(a,b){this.a=a +this.b=b}, +C5:function C5(a,b){this.a=a +this.b=b}, +C4:function C4(a){this.a=a}, +bh7(a,b,c,d,e){var s=b==null?A.b([],t.wP):b +return new A.aeo(e,c,s,a,d)}, +AL(a,b,c){var s=b==null?A.b([],t.wP):b +return new A.GA(s,a,c==null?a.r:c)}, +bqh(a,b){var s=A.b([],t.wP) +return new A.ado(b,s,a,a.r)}, +bJq(a,b,c){return new A.aaV(c,b,a,B.br)}, +boC(a,b){return new A.GD(a,b,b.r)}, +bly(a,b,c){return new A.Es(b,c,a,a.r)}, +bqe(a,b){return new A.adl(a,b,b.r)}, +bn6(a,b,c){return new A.a5a(a,b,c,c.r)}, +ef:function ef(){}, +aiD:function aiD(){}, +adR:function adR(){}, +j_:function j_(){}, +aeo:function aeo(a,b,c,d,e){var _=this +_.r=a +_.w=b +_.d=c +_.b=d +_.a=e}, +GA:function GA(a,b,c){this.d=a +this.b=b +this.a=c}, +ado:function ado(a,b,c,d){var _=this +_.r=a +_.d=b +_.b=c +_.a=d}, +aaV:function aaV(a,b,c,d){var _=this +_.r=a +_.d=b +_.b=c +_.a=d}, +LB:function LB(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +OI:function OI(a,b,c,d,e){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.a=e}, +GD:function GD(a,b,c){this.d=a +this.b=b +this.a=c}, +Es:function Es(a,b,c,d){var _=this +_.d=a +_.e=b +_.b=c +_.a=d}, +adl:function adl(a,b,c){this.d=a +this.b=b +this.a=c}, +a5a:function a5a(a,b,c,d){var _=this +_.d=a +_.e=b +_.b=c +_.a=d}, +PN:function PN(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +bMR(a,b){var s,r,q=a.a6Y() +if(a.Q!=null){a.r.ho(0,new A.XH("svg",A.bh7(a.as,null,q.b,q.c,q.a))) +return}s=A.bh7(a.as,null,q.b,q.c,q.a) +a.Q=s +r=a.at +r.toString +a.yj(r,s) +return}, +bMM(a,b){var s,r,q,p,o=a.at +if((o==null?null:o.r)===!0)return +s=a.r.ga_(0).b +o=a.as +r=A.AL(o,null,null) +q=a.f +p=q.gus() +s.Cl(r,o.y,q.gwH(),a.i4("mask"),p,q.G2(a),p) +p=a.at +p.toString +a.yj(p,r) +return}, +bMT(a,b){var s,r,q,p,o=a.at +if((o==null?null:o.r)===!0)return +s=a.r.ga_(0).b +r=a.at +q=A.bqh(a.as,r.gXP(0)==="text") +o=a.f +p=o.gus() +s.Cl(q,a.as.y,o.gwH(),a.i4("mask"),p,o.G2(a),p) +a.yj(r,q) +return}, +bMS(a,b){var s=A.AL(a.as,null,null),r=a.at +r.toString +a.yj(r,s) +return}, +bMP(a,b){var s,r,q,p,o,n,m,l,k=null,j=a.as,i=a.i4("width") +if(i==null)i="" +s=a.i4("height") +if(s==null)s="" +r=A.bum(i,"width",a.Q) +q=A.bum(s,"height",a.Q) +if(r==null||q==null){p=a.a6Y() +r=p.a +q=p.b}o=j.a +n=o.i(0,"x") +m=o.i(0,"y") +a.z.E(0,"url(#"+A.j(a.as.b)+")") +l=A.AL(A.bq_(j.z,j.y,j.x,j.d,k,k,j.f,j.w,j.Q,j.at,j.as,q,j.c,j.b,o,j.e,k,k,k,k,j.r,r,A.Mx(n),A.Mx(m)),k,k) +o=a.at +o.toString +a.yj(o,l) +return}, +bMU(a,b){var s,r,q,p,o=a.r.ga_(0).b,n=a.as.c +if(n==null||n.length===0)return +s=A.av9(a.i4("transform")) +if(s==null)s=B.br +r=a.a +q=A.h2(a.f_("x","0"),r,!1) +q.toString +r=A.h2(a.f_("y","0"),r,!1) +r.toString +p=A.AL(B.eT,null,s.FF(q,r)) +r=a.f +q=r.gus() +s=r.gwH() +p.Tr(A.bly(a.as,"url("+A.j(n)+")",q),s,q,q) +if("#"+A.j(a.as.b)!==n)a.JA(p) +o.Cl(p,a.as.y,s,a.i4("mask"),q,r.G2(a),q) +return}, +brg(a,b,c){var s,r,q,p,o="stop-color" +for(s=a.I6(),s=new A.fH(s.a(),s.$ti.h("fH<1>"));s.H();){r=s.b +if(r instanceof A.jo)continue +if(r instanceof A.hZ){r=a.as.a.i(0,"stop-opacity") +if(r==null)r="1" +q=a.as.a.i(0,o) +if(q==null)q=null +p=a.EY(q,o,a.as.b) +if(p==null)p=B.ei +r=A.iW(r,!1) +r.toString +q=p.a +b.push(A.E0(q>>>16&255,q>>>8&255,q&255,r)) +r=a.as.a.i(0,"offset") +c.push(A.un(r==null?"0%":r))}}return}, +bMQ(a,b){var s,r,q,p,o,n,m,l,k=a.agJ(),j=a.f_("cx","50%"),i=a.f_("cy","50%"),h=a.f_("r","50%"),g=a.f_("fx",j),f=a.f_("fy",i),e=a.agN(),d=a.as,c=A.av9(a.i4("gradientTransform")) +if(!a.at.r){s=A.b([],t.n) +r=A.b([],t.Ai) +A.brg(a,r,s)}else{s=null +r=null}j.toString +q=A.un(j) +i.toString +p=A.un(i) +h.toString +o=A.un(h) +g.toString +n=A.un(g) +f.toString +m=A.un(f) +l=n!==q||m!==p?new A.de(n,m):null +a.f.aaT(new A.w5(new A.de(q,p),o,l,"url(#"+A.j(d.b)+")",r,s,e,k,c),a.as.c) +return}, +bMO(a,b){var s,r,q,p,o,n,m,l,k=a.agJ(),j=a.f_("x1","0%") +j.toString +s=a.f_("x2","100%") +s.toString +r=a.f_("y1","0%") +r.toString +q=a.f_("y2","0%") +q.toString +p=a.as +o=A.av9(a.i4("gradientTransform")) +n=a.agN() +if(!a.at.r){m=A.b([],t.n) +l=A.b([],t.Ai) +A.brg(a,l,m)}else{m=null +l=null}a.f.aaT(new A.vC(new A.de(A.un(j),A.un(r)),new A.de(A.un(s),A.un(q)),"url(#"+A.j(p.b)+")",l,m,n,k,o),a.as.c) +return}, +bML(a,b){var s,r,q,p,o,n,m,l,k,j=a.as,i=A.b([],t.wP) +for(s=a.I6(),s=new A.fH(s.a(),s.$ti.h("fH<1>")),r=a.f,q=r.gus(),p=t.H9,o=a.r;s.H();){n=s.b +if(n instanceof A.jo)continue +if(n instanceof A.hZ){n=n.e +m=B.CH.i(0,n) +if(m!=null){n=m.$1(a) +n.toString +l=o.ga_(0).b +n=a.aMy(n,l.a).a +n=A.b(n.slice(0),A.a5(n)) +l=a.as.x +if(l==null)l=B.cG +k=A.b([],p) +B.b.I(k,n) +n=a.as +i.push(new A.GD(new A.jf(k,l),n,n.r))}else if(n==="use"){n=a.as +i.push(new A.Es("url("+A.j(n.c)+")",q,n,n.r))}}}r.aLV("url(#"+A.j(j.b)+")",i) +return}, +bMN(a,b){var s,r,q,p,o,n,m,l=a.as.c +if(l==null)return +if(B.d.c4(l,"data:")){s=B.d.f7(l,";")+1 +r=B.d.jX(l,",",s) +q=B.d.am(l,B.d.f7(l,"/")+1,s-1) +p=$.bjQ() +o=A.ea(q,p,"").toLowerCase() +n=B.a1n.i(0,o) +if(n==null){A.xA("Warning: Unsupported image format "+o) +return}r=B.d.c5(l,r+1) +m=A.bn6(B.f3.dB(A.ea(r,p,"")),n,a.as) +r=a.f +q=r.gus() +a.r.ga_(0).b.Tr(m,r.gwH(),q,q) +a.JA(m) +return}return}, +bNk(a){var s,r,q,p=a.a,o=A.h2(a.f_("cx","0"),p,!1) +o.toString +s=A.h2(a.f_("cy","0"),p,!1) +s.toString +p=A.h2(a.f_("r","0"),p,!1) +p.toString +r=a.as.w +q=A.b([],t.H9) +return new A.mp(q,r==null?B.cG:r).hq(new A.lw(o-p,s-p,o+p,s+p)).wz()}, +bNn(a){var s=a.f_("d","") +s.toString +return A.bup(s,a.as.w)}, +bNq(a){var s,r,q,p,o,n,m,l,k=a.a,j=A.h2(a.f_("x","0"),k,!1) +j.toString +s=A.h2(a.f_("y","0"),k,!1) +s.toString +r=A.h2(a.f_("width","0"),k,!1) +r.toString +q=A.h2(a.f_("height","0"),k,!1) +q.toString +p=a.i4("rx") +o=a.i4("ry") +if(p==null)p=o +if(o==null)o=p +if(p!=null&&p!==""){n=A.h2(p,k,!1) +n.toString +k=A.h2(o,k,!1) +k.toString +m=a.as.w +l=A.b([],t.H9) +return new A.mp(l,m==null?B.cG:m).aM8(new A.lw(j,s,j+r,s+q),n,k).wz()}k=a.as.w +n=A.b([],t.H9) +return new A.mp(n,k==null?B.cG:k).m3(new A.lw(j,s,j+r,s+q)).wz()}, +bNo(a){return A.bry(a,!0)}, +bNp(a){return A.bry(a,!1)}, +bry(a,b){var s,r=a.f_("points","") +r.toString +if(r==="")return null +s=b?"z":"" +return A.bup("M"+r+s,a.as.w)}, +bNl(a){var s,r,q,p,o=a.a,n=A.h2(a.f_("cx","0"),o,!1) +n.toString +s=A.h2(a.f_("cy","0"),o,!1) +s.toString +r=A.h2(a.f_("rx","0"),o,!1) +r.toString +o=A.h2(a.f_("ry","0"),o,!1) +o.toString +n-=r +s-=o +q=a.as.w +p=A.b([],t.H9) +return new A.mp(p,q==null?B.cG:q).hq(new A.lw(n,s,n+r*2,s+o*2)).wz()}, +bNm(a){var s,r,q,p,o=a.a,n=A.h2(a.f_("x1","0"),o,!1) +n.toString +s=A.h2(a.f_("x2","0"),o,!1) +s.toString +r=A.h2(a.f_("y1","0"),o,!1) +r.toString +o=A.h2(a.f_("y2","0"),o,!1) +o.toString +q=a.as.w +p=A.b([],t.H9) +if(q==null)q=B.cG +p.push(new A.mg(n,r,B.dV)) +p.push(new A.iM(s,o,B.c7)) +return new A.mp(p,q).wz()}, +bq_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){return new A.I1(o,n,m,d,p,g,a1,h,c,b,a,i,k,j,r,a0,s,a2,l,a3,q,a4,e,f)}, +Mx(a){var s +if(a==null||a==="")return null +if(A.bu0(a))return new A.Mw(A.bun(a,1),!0) +s=A.iW(a,!1) +s.toString +return new A.Mw(s,!1)}, +XH:function XH(a,b){this.a=a +this.b=b}, +oG:function oG(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 +_.y=_.x=_.w=!0 +_.z=h +_.Q=null +_.as=i +_.at=null +_.ax=0 +_.ay=null +_.ch=!1}, +aUA:function aUA(){}, +aUB:function aUB(){}, +aUC:function aUC(){}, +aUD:function aUD(a){this.a=a}, +aUE:function aUE(a){this.a=a}, +aUF:function aUF(a){this.a=a}, +aUG:function aUG(){}, +aUH:function aUH(){}, +aoA:function aoA(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1 +_.e=d}, +b5S:function b5S(a,b){this.a=a +this.b=b}, +b5R:function b5R(){}, +b5P:function b5P(){}, +b5O:function b5O(a){this.a=a}, +b5Q:function b5Q(a){this.a=a}, +asl:function asl(a,b,c){this.a=a +this.b=b +this.c=c}, +I1:function I1(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){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 +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4}, +aUu:function aUu(){}, +Mw:function Mw(a,b){this.a=a +this.b=b}, +Sq:function Sq(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k}, +I2:function I2(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +qX:function qX(a,b){this.a=a +this.b=b}, +aQo:function aQo(){this.a=$}, +aax:function aax(a,b){this.a=a +this.b=b}, +aaw:function aaw(a,b){this.a=a +this.b=b}, +Hc:function Hc(a,b,c){this.a=a +this.b=b +this.c=c}, +aat:function aat(a,b){this.a=a +this.b=b}, +aau:function aau(a,b,c){this.a=a +this.b=b +this.c=c}, +QY:function QY(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aav:function aav(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +acL:function acL(a,b,c){this.a=a +this.b=b +this.c=c}, +aet:function aet(){}, +a3j:function a3j(){}, +azC:function azC(a){var _=this +_.a=a +_.c=_.b=$ +_.d=null}, +azD:function azD(a,b){this.a=a +this.b=b}, +agL:function agL(){}, +aec:function aec(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k}, +o8:function o8(a,b){this.a=a +this.b=b}, +m_:function m_(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +Ah:function Ah(a){this.a=a}, +Cv:function Cv(a){this.a=a}, +bBJ(){var s=new Float64Array(2) +return new A.mV(new A.a(s),new A.a(new Float64Array(2)))}, +bo_(a,b,c){var s,r,q,p=a.a,o=p[0],n=p[2],m=p[1],l=p[3] +p=c.a +s=p[0] +r=p[1] +q=o*l-n*m +if(q!==0)q=1/q +b.sN(0,q*(l*s-n*r)) +b.sO(0,q*(o*r-m*s))}, +OP(a,b,c){var s=a.a,r=s[0],q=s[3],p=s[1],o=s[4],n=c.a,m=n[0]-s[6],l=n[1]-s[7],k=r*o-q*p +if(k!==0)k=1/k +b.sN(0,k*(o*m-q*l)) +b.sO(0,k*(r*l-p*m))}, +aKo(a,b,c){var s,r,q=a.a,p=q[0],o=q[1],n=q[2],m=q[3],l=q[4],k=q[5],j=q[6],i=q[7],h=q[8],g=l*h-k*i,f=k*j-m*h,e=m*i-l*j,d=p*g+o*f+n*e +if(d!==0)d=1/d +q=c.a +s=q[0] +r=q[1] +q=q[2] +b.sN(0,d*(s*g+r*f+q*e)) +b.sO(0,d*(p*-(i*q-h*r)+o*-(h*s-j*q)+n*-(j*r-i*s))) +b.sjy(0,d*(p*-(r*k-q*l)+o*-(q*m-s*k)+n*-(s*l-r*m)))}, +Ai(a){var s=new A.by(new Float64Array(16)) +if(s.jR(a)===0)return null +return s}, +bH5(){return new A.by(new Float64Array(16))}, +bH7(){var s=new A.by(new Float64Array(16)) +s.ci() +return s}, +pH(a,b,c){var s=new Float64Array(16),r=new A.by(s) +r.ci() +s[14]=c +s[13]=b +s[12]=a +return r}, +G6(a,b,c){var s=new Float64Array(16) +s[15]=1 +s[10]=c +s[5]=b +s[0]=a +return new A.by(s)}, +bM1(a,b,c){var s=a.a,r=b.a +c.sN(0,Math.min(s[0],r[0])) +c.sO(0,Math.min(s[1],r[1]))}, +bM0(a,b,c){var s=a.a,r=b.a +c.sN(0,Math.max(s[0],r[0])) +c.sO(0,Math.max(s[1],r[1]))}, +Iz(a,b){var s=new A.a(new Float64Array(2)) +s.p(a,b) +return s}, +bQ(){return new A.a(new Float64Array(2))}, +IA(a){var s=new A.a(new Float64Array(2)) +s.ag(a) +return s}, +oM(a){var s,r,q +if(a==null)a=B.O +s=a.aV() +r=a.aV() +q=new A.a(new Float64Array(2)) +q.p(s,r) +return q}, +mV:function mV(a,b){this.a=a +this.b=b}, +jL:function jL(a){this.a=a}, +id:function id(a){this.a=a}, +by:function by(a){this.a=a}, +a:function a(a){this.a=a}, +dX:function dX(a){this.a=a}, +oN:function oN(a){this.a=a}, +V7(a,b,c,d,e){var s +if(c==null)s=null +else{s=A.bte(new A.b1v(c),t.lZ) +s=s==null?null:t.L.a(A.cd(s))}s=new A.aiM(a,b,s,!1,e.h("aiM<0>")) +s.SF() +return s}, +bte(a,b){var s=$.aK +if(s===B.aE)return a +return s.TP(a,b)}, +beQ:function beQ(a,b){this.a=a +this.$ti=b}, +x5:function x5(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +aiw:function aiw(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +aiM:function aiM(a,b,c,d,e){var _=this +_.a=0 +_.b=a +_.c=b +_.d=c +_.e=d +_.$ti=e}, +b1v:function b1v(a){this.a=a}, +b1x:function b1x(a){this.a=a}, +avc(a){var s=B.d.c4(A.fy(A.ay(a).a,null),$.bzp())?$.kb.i(0,B.agH):$.kb.i(0,A.ay(a)) +if(s!=null)return s +else throw A.d(A.c3("The type "+A.ay(a).j(0)+" is not known!",null))}, +em(a,b,c){var s +b=$.bfO +if(b==null)throw A.d(A.ad("No global memory set and no explcity memory to bind to given!")) +s=B.d.c4(A.fy(A.ay(c).a,null),$.avs())||A.ay(c)===$.bdk()?null:A.avc(c) +return new A.a0(a,b,s,c.h("a0<0>"))}, +bIa(a,b,c,d){return new A.a0(a,b,c,d.h("a0<0>"))}, +bEq(a){var s=A.bH9(a) +switch(2){case 2:if($.bfO==null)$.bfO=s +break}return new A.a32(s)}, +Gh:function Gh(){}, +a0:function a0(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +a32:function a32(a){this.a=a}, +aHW(a,b,c){return new A.fe(b,a,c.h("fe<0>"))}, +AF:function AF(a,b,c){this.a=a +this.b=b +this.$ti=c}, +AG:function AG(a,b,c){this.a=a +this.b=b +this.$ti=c}, +fe:function fe(a,b,c){this.a=a +this.b=b +this.$ti=c}, +bs9(a,b){return"CRITICAL EXCEPTION! Address double use! This should never happen, please report this issue on github immediately at https://github.com/EPNW/web_ffi"+("\r\nOriginal: "+A.j(a))+("\r\nTried: "+b.j(0))}, +bP9(a,b){var s,r,q=null,p=" does not seem to be a function symbol!",o=b.name +if(o!=null){s=A.pR(o,q) +if(s!=null){r=b.length +if(r!=null)return new A.va(r,b,s,a) +else throw A.d(A.c3(a+p,q))}else throw A.d(A.c3(a+p,q))}else throw A.d(A.c3(a+p,q))}, +bEF(a){var s=self.globalThis[a] +if(s!=null)return s +else throw A.d(A.ad("Could not find a emscripten module named "+a))}, +aDf(a,b){var s=0,r=A.r(t._H),q,p,o,n +var $async$aDf=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:p=A.bEF(b) +o={wasmBinary:a} +n=p.$1(o) +s=n!=null?3:5 +break +case 3:s=6 +return A.x(A.ka(n,t.z),$async$aDf) +case 6:q=A.bEE(o) +s=1 +break +s=4 +break +case 5:throw A.d(A.ad("Could not instantiate an emscripten module!")) +case 4:case 1:return A.p(q,r)}}) +return A.q($async$aDf,r)}, +bEE(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=J.bBb(a) +if(d!=null){s=A.D(t.S,t.Zh) +r=A.b([],t.BB) +q=self.Object.entries(d) +if(q!=null){for(p=J.az(q),o=t._8,n=t.j,m=t.EC,l=t.ng,k=null,j=null;p.H();){i=p.ga1(p) +if(n.b(i)){h=J.cV(i) +g=h.ga_(i) +if(A.cU(g)){f=new A.Fb(g,A.cE(h.ga9(i))) +if(s.aR(0,g)&&!(s.i(0,g) instanceof A.Fb))throw A.d(A.ad(A.bs9(s.i(0,g),f))) +s.u(0,g,f) +r.push(f)}else if(o.b(g)){e=A.bP9(A.cE(h.ga9(i)),g) +h=e.a +if(s.aR(0,h)&&!(s.i(0,h) instanceof A.va))throw A.d(A.ad(A.bs9(s.i(0,h),e))) +s.u(0,h,e) +r.push(e) +h=e.b +if(h==="malloc")k=l.a(e.d) +else if(h==="free")j=m.a(e.d)}}else throw A.d(A.ad("Unexpected entry in entries(Module['asm'])!"))}if(k!=null)if(j!=null)return new A.a3b(a,r,k,j) +else throw A.d(A.ad("Module does not export the free function!")) +else throw A.d(A.ad("Module does not export the malloc function!"))}else throw A.d(A.ad("JavaScript error: Could not access entries of Module['asm']!"))}else throw A.d(A.ad("Could not access Module['asm'], are your sure your module was compiled using emscripten?"))}, +b1l:function b1l(){}, +a3b:function a3b(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a6C(a){return new A.G3(a)}, +eS(a){return new A.G3("Expected a address (int) but found "+J.ai(a).j(0))}, +bfK(a,b){return new A.G3("Expected a type of "+a.j(0)+" but object has type "+J.ai(b).j(0))}, +G3:function G3(a){this.a=a}, +di(a){var s,r=null +$.kb.u(0,A.ay(a),A.avc(t.er)) +s=$.bdx() +s.u(0,A.fy(A.ay(a.h("a0<0>")).a,r),new A.AF(r,r,a.h("AF<0>"))) +s.u(0,A.fy(A.ay(a.h("a0>")).a,r),new A.AG(r,r,a.h("AG<0>")))}, +bH9(a){var s=a.b,r=A.a5(s),q=t.Zh,p=A.OG(new A.W(s,new A.aKt(),r.h("W<1,bK>")),t.S,q) +return new A.aKs(a,A.OG(new A.W(s,new A.aKu(),r.h("W<1,bK>")),t.N,q),p)}, +bVT(a,b){var s=a.ga8O().i(0,b) +if(s!=null)return s +else throw A.d(A.c3("Could not find symbol at "+b+"!",null))}, +bVU(a,b){var s=a.b.i(0,b) +if(s!=null)return s +else throw A.d(A.c3("Could not find symbol "+b+"!",null))}, +aKs:function aKs(a,b,c){this.a=a +this.b=b +this.c=c}, +aKt:function aKt(){}, +aKu:function aKu(){}, +aKv:function aKv(a,b){this.a=a +this.b=b}, +aKS:function aKS(){}, +it:function it(){}, +Fb:function Fb(a,b){this.a=a +this.b=b}, +va:function va(a,b,c,d){var _=this +_.c=a +_.d=b +_.a=c +_.b=d}, +aLX:function aLX(){}, +hO:function hO(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +bQr(a){var s=a.wP(0) +s.toString +switch(s){case"<":return"<" +case"&":return"&" +case"]]>":return"]]>" +default:return A.bhO(s)}}, +bQm(a){var s=a.wP(0) +s.toString +switch(s){case"'":return"'" +case"&":return"&" +case"<":return"<" +default:return A.bhO(s)}}, +bOV(a){var s=a.wP(0) +s.toString +switch(s){case'"':return""" +case"&":return"&" +case"<":return"<" +default:return A.bhO(s)}}, +bhO(a){return A.rI(new A.Rb(a),new A.b8B(),t.Dc.h("z.E"),t.N).mq(0)}, +aeM:function aeM(){}, +b8B:function b8B(){}, +wV:function wV(){}, +fl:function fl(a,b,c){this.c=a +this.a=b +this.b=c}, +mN:function mN(a,b){this.a=a +this.b=b}, +aeR:function aeR(){}, +aeS:function aeS(){}, +bhe(a,b,c){return new A.aeX(c,a)}, +IL(a){if(a.gbs(a)!=null)throw A.d(A.bhe(u.x,a,a.gbs(a)))}, +aeX:function aeX(a,b){this.c=a +this.a=b}, +IM(a,b,c){return new A.aeY(b,c,$,$,$,a)}, +aeY:function aeY(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.KE$=c +_.KF$=d +_.KG$=e +_.a=f}, +at1:function at1(){}, +bhf(a,b,c,d,e){return new A.af0(c,e,$,$,$,a)}, +br2(a,b,c,d){return A.bhf("Expected , but found ",b,c,a,d)}, +br4(a,b,c){return A.bhf("Unexpected ",a,b,null,c)}, +br3(a,b,c){return A.bhf("Missing ",null,b,a,c)}, +af0:function af0(a,b,c,d,e,f){var _=this +_.d=a +_.e=b +_.KE$=c +_.KF$=d +_.KG$=e +_.a=f}, +at3:function at3(){}, +bMj(a,b,c){return new A.TH(a)}, +aYp(a,b){if(!b.G(0,a.gkz(a)))throw A.d(new A.TH("Got "+a.gkz(a).j(0)+", but expected one of "+b.cj(0,", ")))}, +TH:function TH(a){this.a=a}, +TB:function TB(a){this.a=a}, +aXZ:function aXZ(a){this.a=a +this.b=$}, +bMm(a){var s=t.St +return new A.e7(new A.bg(new A.TB(a),new A.aYt(),s.h("bg")),new A.aYu(),s.h("e7")).mq(0)}, +aYt:function aYt(){}, +aYu:function aYu(){}, +aXW:function aXW(){}, +aeT:function aeT(){}, +aXX:function aXX(){}, +IK:function IK(){}, +wW:function wW(){}, +aYq:function aYq(){}, +tQ:function tQ(){}, +aYv:function aYv(){}, +aeV:function aeV(){}, +aeW:function aeW(){}, +aXV(a,b,c){A.IL(a) +return a.ir$=new A.lF(a,b,c,null)}, +lF:function lF(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.ir$=d}, +asB:function asB(){}, +asC:function asC(){}, +II:function II(a,b){this.a=a +this.ir$=b}, +TA:function TA(a,b){this.a=a +this.ir$=b}, +aeK:function aeK(){}, +asD:function asD(){}, +bqZ(a){var s=A.TG(t.Qx),r=new A.aeL(s,null) +s.b!==$&&A.aj() +s.b=r +s.c!==$&&A.aj() +s.c=B.rt +s.I(0,a) +return r}, +aeL:function aeL(a,b){this.pE$=a +this.ir$=b}, +aXY:function aXY(){}, +asE:function asE(){}, +asF:function asF(){}, +TC:function TC(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.ir$=d}, +asG:function asG(){}, +aY_(a){var s=A.buj(a,null,!0,!0),r=A.b([],t.ov) +s.al(0,new A.b8p(new A.Eg(B.b.gaLR(r),t.OS)).gNi()) +return A.br_(r)}, +br_(a){var s=A.TG(t.hh),r=new A.aeN(s) +s.b!==$&&A.aj() +s.b=r +s.c!==$&&A.aj() +s.c=B.a6x +s.I(0,a) +return r}, +aeN:function aeN(a){this.ly$=a}, +aY0:function aY0(){}, +asH:function asH(){}, +bMi(a,b,c,d){var s,r=A.TG(t.hh),q=A.TG(t.Qx) +A.IL(a) +s=a.ir$=new A.lG(d,a,r,q,null) +q.b!==$&&A.aj() +q.b=s +q.c!==$&&A.aj() +q.c=B.rt +q.I(0,b) +r.b!==$&&A.aj() +r.b=s +r.c!==$&&A.aj() +r.c=B.FV +r.I(0,c) +return s}, +br0(a,b,c,d){var s=A.br1(a),r=A.TG(t.hh),q=A.TG(t.Qx) +A.IL(s) +s=s.ir$=new A.lG(d,s,r,q,null) +q.b!==$&&A.aj() +q.b=s +q.c!==$&&A.aj() +q.c=B.rt +q.I(0,b) +r.b!==$&&A.aj() +r.b=s +r.c!==$&&A.aj() +r.c=B.FV +r.I(0,c) +return s}, +lG:function lG(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.ly$=c +_.pE$=d +_.ir$=e}, +aY1:function aY1(){}, +aY2:function aY2(){}, +asI:function asI(){}, +asJ:function asJ(){}, +asK:function asK(){}, +asL:function asL(){}, +er:function er(){}, +asW:function asW(){}, +asX:function asX(){}, +asY:function asY(){}, +asZ:function asZ(){}, +at_:function at_(){}, +at0:function at0(){}, +TI:function TI(a,b,c){this.c=a +this.a=b +this.ir$=c}, +Cz:function Cz(a,b){this.a=a +this.ir$=b}, +aeJ:function aeJ(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +IJ:function IJ(a,b){this.a=a +this.b=b}, +br1(a){var s=B.d.f7(a,":") +if(s>0)return new A.aeZ(B.d.am(a,0,s),B.d.c5(a,s+1),a,null) +else return new A.af_(a,null)}, +aYn:function aYn(){}, +asT:function asT(){}, +asU:function asU(){}, +asV:function asV(){}, +bS1(a,b){if(a==="*")return new A.bbZ() +else return new A.bc_(a)}, +bbZ:function bbZ(){}, +bc_:function bc_(a){this.a=a}, +TG(a){return new A.TF(A.b([],a.h("v<0>")),a.h("TF<0>"))}, +TF:function TF(a,b){var _=this +_.c=_.b=$ +_.a=a +_.$ti=b}, +aYo:function aYo(a){this.a=a}, +aeZ:function aeZ(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.ir$=d}, +af_:function af_(a,b){this.b=a +this.ir$=b}, +aYw:function aYw(){}, +aYx:function aYx(a,b){this.a=a +this.b=b}, +at4:function at4(){}, +aXU:function aXU(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +aYl:function aYl(){}, +aYm:function aYm(){}, +aeU:function aeU(){}, +aeO:function aeO(a){this.a=a}, +asP:function asP(a,b){this.a=a +this.b=b}, +auK:function auK(){}, +b8p:function b8p(a){this.a=a +this.b=null}, +b8q:function b8q(){}, +auL:function auL(){}, +eO:function eO(){}, +asQ:function asQ(){}, +asR:function asR(){}, +asS:function asS(){}, +nB:function nB(a,b,c,d,e){var _=this +_.e=a +_.r6$=b +_.r5$=c +_.vS$=d +_.op$=e}, +oP:function oP(a,b,c,d,e){var _=this +_.e=a +_.r6$=b +_.r5$=c +_.vS$=d +_.op$=e}, +mL:function mL(a,b,c,d,e){var _=this +_.e=a +_.r6$=b +_.r5$=c +_.vS$=d +_.op$=e}, +mM:function mM(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.r6$=d +_.r5$=e +_.vS$=f +_.op$=g}, +jo:function jo(a,b,c,d,e){var _=this +_.e=a +_.r6$=b +_.r5$=c +_.vS$=d +_.op$=e}, +asM:function asM(){}, +oQ:function oQ(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r6$=c +_.r5$=d +_.vS$=e +_.op$=f}, +hZ:function hZ(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.r6$=d +_.r5$=e +_.vS$=f +_.op$=g}, +at2:function at2(){}, +wX:function wX(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=$ +_.r6$=c +_.r5$=d +_.vS$=e +_.op$=f}, +aeP:function aeP(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +aY3:function aY3(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +aeQ:function aeQ(a){this.a=a}, +aYa:function aYa(a){this.a=a}, +aYk:function aYk(){}, +aY8:function aY8(a){this.a=a}, +aY4:function aY4(){}, +aY5:function aY5(){}, +aY7:function aY7(){}, +aY6:function aY6(){}, +aYh:function aYh(){}, +aYb:function aYb(){}, +aY9:function aY9(){}, +aYc:function aYc(){}, +aYi:function aYi(){}, +aYj:function aYj(){}, +aYg:function aYg(){}, +aYe:function aYe(){}, +aYd:function aYd(){}, +aYf:function aYf(){}, +bc8:function bc8(){}, +Eg:function Eg(a,b){this.a=a +this.$ti=b}, +hD:function hD(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.op$=d}, +asN:function asN(){}, +asO:function asO(){}, +TE:function TE(){}, +TD:function TD(){}, +bcG(){var s=0,r=A.r(t.H) +var $async$bcG=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:s=2 +return A.x(A.bbM(new A.bcH(),new A.bcI()),$async$bcG) +case 2:return A.p(null,r)}}) +return A.q($async$bcG,r)}, +bcI:function bcI(){}, +bcH:function bcH(){}, +bgf(a){var s,r=a.cC() +if(r.cl(B.mE,t.F)==null){s=new A.Q1(A.C(t.Nl),0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +r.gc8().u(0,B.mE,s) +r.J(s)}}, +bCM(){var s=$.aK.i(0,B.GG),r=s==null?null:t.Kb.a(s).$0() +return r==null?new A.Lb(A.C(t.lZ)):r}, +bWw(){var s=$.aK.i(0,B.GG) +return s==null?null:t.Kb.a(s).$0()}, +bGE(a){return $.bGD.i(0,a).gb_B()}, +aX7(a){var s,r,q=$.Dl() +if(q instanceof A.a0&&q.a===a.a)A.X(A.af("Operation 'toDartString' not allowed on a 'nullptr'.")) +s=a.eq(0,t.di) +r=A.bLW(s) +q=s.b +return B.a1.hH(0,J.iZ(q.gdl(q),s.a,r))}, +bLW(a){var s +for(s=0;J.bdN(a.b_7(s),0)!==0;)++s +return s}, +bgQ(a,b){var s,r=B.bn.dB(a),q=r.length,p=q+1,o=t.di,n=b.Tz(A.avc(o)*p,o) +o=n.b +s=J.iZ(o.gdl(o),n.a,p) +p=J.cV(s) +p.jC(s,0,r) +p.u(s,q,0) +return n.eq(0,t.EV)}, +bux(a){if(typeof dartPrint=="function"){dartPrint(a) +return}if(typeof console=="object"&&typeof console.log!="undefined"){console.log(a) +return}if(typeof print=="function"){print(a) +return}throw"Unable to print message: "+String(a)}, +bmO(a){return t.L.a(A.cd(a))}, +bmk(a){return a}, +bGe(a){return a}, +bKD(a){return a}, +bkZ(a,b){return(B.Zf[(a^b)&255]^a>>>8)>>>0}, +bLR(a){var s,r +try{s=A.nI(a,0,a.length,B.a1,!1) +if(!J.f(s,a))return a}catch(r){if(!(A.b2(r) instanceof A.n_))throw r}return A.lM(B.dR,a,B.a1,!1)}, +bgN(a,b,c){var s=0,r=A.r(t.H),q +var $async$bgN=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:q=a.lm(b,c,!1,t.H) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$bgN,r)}, +bgO(a,b,c,d){return A.bKw(a,b,c,d,d.h("0?"))}, +bKw(a,b,c,d,e){var s=0,r=A.r(e),q +var $async$bgO=A.t(function(f,g){if(f===1)return A.o(g,r) +while(true)switch(s){case 0:q=a.lm(b,c,!1,d) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$bgO,r)}, +bol(a){return A.dE(0,B.c.ai((isNaN(a)||a==1/0||a==-1/0?0:a)*1000))}, +Dc(a){var s=u.R.charCodeAt(a>>>6)+(a&63),r=s&1,q=u.I.charCodeAt(s>>>1) +return q>>>4&-r|q&15&r-1}, +qA(a,b){var s=(a&1023)<<10|b&1023,r=u.R.charCodeAt(1024+(s>>>9))+(s&511),q=r&1,p=u.I.charCodeAt(r>>>1) +return p>>>4&-q|p&15&q-1}, +bG6(a,b){var s,r,q,p,o +for(s=A.bht(a,a.$ti.c),r=s.$ti.c,q=0;s.H();q=o){p=s.e +if(p==null)p=r.a(p) +o=q+1 +b.$2(q,p)}}, +bnj(a,b,c,d){return new A.eW(A.bG8(a,b,c,d),d.h("eW<0>"))}, +bG8(a,b,c,d){return function(){var s=a,r=b,q=c,p=d +var o=0,n=1,m,l,k,j +return function $async$bnj(e,f,g){if(f===1){m=g +o=n}while(true)switch(o){case 0:l=0,k=0 +case 2:if(!(k<5)){o=4 +break}j=l+1 +o=5 +return e.b=r.$2(l,s[k]),1 +case 5:case 3:++k,l=j +o=2 +break +case 4:return 0 +case 1:return e.c=m,3}}}}, +bnh(a,b){var s,r +for(s=J.az(a);s.H();){r=s.ga1(s) +if(b.$1(r))return r}return null}, +aI2(a){var s=J.az(a) +if(s.H())return s.ga1(s) +return null}, +bni(a){if(a.b===a.c)return null +return a.ga_(0)}, +bG7(a,b,c,d,e,f){var s,r,q,p=A.D(e,f) +for(s=J.az(a);s.H();){r=s.ga1(s) +q=b.$1(r) +p.u(0,q,c.$2(p.i(0,q),r))}return p}, +bGb(a){var s,r,q,p +for(s=a.$ti,r=new A.cR(a,a.gF(0),s.h("cR")),s=s.h("aI.E"),q=0;r.H();){p=r.d +q+=p==null?s.a(p):p}return q}, +bG5(a){var s,r,q,p +for(s=A.w(a),s=s.h("@<1>").ak(s.y[1]),r=new A.bt(J.az(a.a),a.b,s.h("bt<1,2>")),s=s.y[1],q=0;r.H();){p=r.a +q+=p==null?s.a(p):p}return q}, +bGG(a,b){var s +for(s=0;s768?0.5:1 +return r.a.a*q}, +bd2(a,b){var s=0,r=A.r(t.H),q,p,o,n +var $async$bd2=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:n=A.vM(b,!1).c +n.toString +p=A.a5k(b,n) +n=A.vM(b,!1) +o=A.am(b).ah.z +if(o==null)o=B.am +q=n.q1(A.bDF(null,o,!0,null,a,b,null,p,B.Ht,!0,t.H)) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$bd2,r)}, +bTN(){var s,r,q,p,o,n,m=null,l=window.location.search +if(l==null)l="" +if(B.d.c4(l,"?"))l=B.d.c5(l,1) +s=A.b3(["constant_volume_joint",A.bRN(),"distance_joint",A.bSt(),"friction_joint",A.bSU(),"gear_joint",A.bSW(),"motor_joint",A.bTV(),"mouse_joint",A.bTW(),"pulley_joint",A.bUJ(),"prismatic_joint",A.bUI(),"revolute_joint",A.bUS(),"rope_joint",A.bUT(),"weld_joint",A.bWu()],t.N,t.zS).i(0,l) +r=s==null?m:s.$0() +if(r!=null){s=A.aO(r,m,m,m,m,t.J) +if($.b1==null)A.bqX() +q=$.b1 +A.bt3(q.ajc(s),q,"runApp")}else{s=A.Cd(B.b8,m,m,m,m) +p=A.b([],t.hF) +o=new A.M5(p,s,"Flame Examples",m) +A.bQT(o) +A.bR0(o) +A.bQI(o) +A.bQH(o) +A.bQJ(o) +A.bQK(o) +A.bQL(o) +A.bQM(o) +A.bQN(o) +A.bQV(o) +A.bQX(o) +A.bQY(o) +A.bQZ(o) +A.bR3(o) +A.bR_(o) +A.bR1(o) +A.bR2(o) +A.bR4(o) +n=new A.eM("Widgets",A.b([],t.C)) +p.push(n) +n.c=new A.a0i() +n.aP(0,"Nine Tile Box",A.bU2(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/widgets/nine_tile_box_example.dart"," If you want to create a background for something that can stretch you\n can use the `NineTileBox` which is showcased here, don't forget to check\n out the settings on the pen icon.\n ") +n.aP(0,"Sprite Button",A.bVG(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/widgets/sprite_button_example.dart"," If you want to use sprites as a buttons within the flutter widget tree\n you can create a `SpriteButton`, don't forget to check out the settings\n on the pen icon.\n ") +n.aP(0,"Sprite Widget (full image)",A.bVH(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/widgets/sprite_widget_example.dart"," If you want to use a sprite within the flutter widget tree\n you can create a `SpriteWidget`, don't forget to check out the settings\n on the pen icon.\n ") +n.aP(0,"Sprite Widget (section of image)",A.bUB(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/widgets/partial_sprite_widget_example.dart"," In this example we show how you can render only parts of a sprite within\n a `SpriteWidget`, don't forget to check out the settings on the pen\n icon.\n ") +n.aP(0,"Sprite Animation Widget",A.bVF(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/widgets/sprite_animation_widget_example.dart"," If you want to use a sprite animation directly on the flutter widget\n tree you can create a `SpriteAnimationWidget`, don't forget to check out\n the settings on the pen icon.\n ") +n.aP(0,"CustomPainterComponent",A.bS8(),"https://github.com/flame-engine/flame/blob/main/examples/lib/stories/widgets/custom_painter_example.dart"," Example demonstration of how to use the CustomPainterComponent.\n\n On the screen you can see a component using a custom painter being\n rendered on a FlameGame, and if you tap, that same painter is used to\n show a smiley on a widget overlay.\n ") +A.bQU(o) +A.bQS(o) +A.bQO(o) +A.bQP(o) +A.bQQ(o) +A.bQR(o) +if($.b1==null)A.bqX() +q=$.b1 +A.bt3(q.ajc(o),q,"runApp")}}, +bU1(a){var s=null,r=a.hS("width",200),q=a.hS("height",200),p=$.aC() +return A.dD(s,new A.a7y(p.d_(0,"nine-box.png"),22,50,B.LI,s),B.y,s,s,s,q,s,s,r)}, +bck(a,b,c,d,e){var s,r=new A.kr((a&2147483647)-(a&2147483648)).pa(0,1619*b).pa(0,31337*c) +r=r.a2(0,r).a2(0,r).a2(0,60493) +s=B.Yj[r.AE(0,13).pa(0,r).aw(0)&7] +return d*s.a+e*s.b}, +bmg(a){return a*a*a*(a*(a*6-15)+10)}, +bl_(a,b,c,d){var s,r,q,p=new A.a(new Float64Array(2)) +p.ag(d/2) +p=b.Y(0,p) +s=new Float64Array(2) +new A.a(s).ag(d) +p=p.a +r=p[0] +p=p[1] +q=s[0] +s=s[1] +a.b7(new A.A(r,p,r+q,p+s),c)}, +yR(a){if(a===1/0)return 17976931348623157e292 +else if(a===-1/0)return-17976931348623157e292 +else return a}, +aHc(a,b){var s=0,r=A.r(t.lu),q,p,o,n,m,l,k +var $async$aHc=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:l=$.G() +k=l.lu() +l=l.lt(k,null) +p=new Float64Array(2) +o=a.gbW(a) +n=a.gb9(a) +m=new Float64Array(2) +new A.a(m).p(o,n) +n=p[0] +p=p[1] +o=b.a +l.i6(a,new A.A(n,p,n+m[0],p+m[1]),new A.A(0,0,0+o[0],0+o[1]),$.bwf()) +s=3 +return A.x(A.a8J(k.jT(),B.c.aw(o[0]),B.c.aw(o[1])),$async$aHc) +case 3:q=d +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$aHc,r)}, +bGF(a){var s,r,q +for(s=a.length-1,r=0;r=0){q=Math.sqrt(s) +p=-b +o=2*a +return A.b([(p-q)/o,(p+q)/o],r)}else return A.b([],r)}, +btp(a,b){if(a>=0)return b<0?a+b:Math.max(a,b) +else return b<0?Math.min(a,b):a+b}, +bua(a,b,c){var s,r,q,p,o,n,m,l,k +if(a==null)return null +s=A.b([],t.Of) +r=a.a +q=a.b +p=a.d +o=a.c +if(r!=null)if(o===0)s.push(new A.Qn(new A.A(0,0,0+b,0+c),r)) +else s.push(new A.Qf(A.GS(0,0,b,c,new A.bl(o,o)),r)) +if(q!=null){n=p.a/2 +m=p.b/2 +if(o===0){l=new A.A(0,0,0+(b-p.ge_()/2),0+(c-(p.gcO(0)+p.gcX(0))/2)) +k=new A.Qn(l,q) +k.a=l.aJ(0,n,m) +s.push(k)}else{l=A.GS(0,0,b-p.ge_()/2,c-(p.gcO(0)+p.gcX(0))/2,new A.bl(o,o)) +k=new A.Qf(l,q) +k.a=l.dz(new A.i(n,m)) +s.push(k)}}n=s.length +if(n===0)return null +if(n===1)return B.b.ga9(s) +else return new A.Fg(s,c)}, +bqi(a){var s=$.bxY().i(0,A.ay(a)) +if(s!=null)return a.a(s.$0()) +else throw A.d("Unknown implementation of TextRenderer: "+A.ay(a).j(0)+". Please register it under [TextRendererFactory.defaultRegistry].")}, +a3I(a,b,c,d){var s=0,r=A.r(t.ag),q,p +var $async$a3I=A.t(function(e,f){if(e===1)return A.o(f,r) +while(true)switch(s){case 0:p=A.be0() +p.b=$.bdl() +s=3 +return A.x(p.wU(c),$async$a3I) +case 3:s=4 +return A.x(p.wp(0,new A.Dv(a,null),d,b),$async$a3I) +case 4:q=p +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$a3I,r)}, +bDd(a){return B.im}, +bbU(a,b,c,d,e){return A.bRG(a,b,c,d,e,e)}, +bRG(a,b,c,d,e,f){var s=0,r=A.r(f),q,p +var $async$bbU=A.t(function(g,h){if(g===1)return A.o(h,r) +while(true)switch(s){case 0:p=A.cO(null,t.P) +s=3 +return A.x(p,$async$bbU) +case 3:q=a.$1(b) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$bbU,r)}, +avb(a,b){var s +if(a==null)return b==null +if(b==null||a.gF(a)!==b.gF(b))return!1 +if(a===b)return!0 +for(s=a.gar(a);s.H();)if(!b.G(0,s.ga1(s)))return!1 +return!0}, +eu(a,b){var s,r,q +if(a==null)return b==null +if(b==null||J.bo(a)!==J.bo(b))return!1 +if(a===b)return!0 +for(s=J.al(a),r=J.al(b),q=0;q1e6){if(p.b==null)p.b=$.GN.$0() +p.bF(0) +$.auN=0}while(!0){if(!($.auN<12288?!$.avo().gaA(0):q))break +s=$.avo().ue() +$.auN=$.auN+s.length +r=$.buy +if(r==null)A.bux(s) +else r.$1(s)}if(!$.avo().gaA(0)){$.bhU=!0 +$.auN=0 +A.dn(B.cU,A.bUH()) +if($.b8Z==null)$.b8Z=new A.bH(new A.aM($.aK,t.D),t.h)}else{$.bjD().bR(0) +q=$.b8Z +if(q!=null)q.fl(0) +$.b8Z=null}}, +aE1(a){var s=0,r=A.r(t.H),q +var $async$aE1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)$async$outer:switch(s){case 0:a.gaF().Au(B.rY) +switch(A.am(a).w.a){case 0:case 1:q=A.acO(B.a9M) +s=1 +break $async$outer +case 2:case 3:case 4:case 5:q=A.e5(null,t.H) +s=1 +break $async$outer}case 1:return A.p(q,r)}}) +return A.q($async$aE1,r)}, +beR(a){a.gaF().Au(B.a0K) +switch(A.am(a).w.a){case 0:case 1:return A.aGm() +case 2:case 3:case 4:case 5:return A.e5(null,t.H)}}, +bUF(a,b,c,d,e){var s,r,q=d.b,p=q+e,o=a.b,n=c.b-10,m=p+o<=n +o=q-e-o +s=(o>=10===m?b:m)?Math.min(p,n):Math.max(o,10) +q=a.a +r=c.a-q +return new A.i(r<=20?r/2:A.U(d.a-q/2,10,r-10),s)}, +Kh(a){var s=0,r=A.r(t.lu),q,p,o +var $async$Kh=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=3 +return A.x(A.Fn(a),$async$Kh) +case 3:o=c +$.jN.toString +s=5 +return A.x(A.Zg(o,null),$async$Kh) +case 5:s=4 +return A.x(c.lK(),$async$Kh) +case 4:p=c +q=p.giv(p) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Kh,r)}, +a6K(a){var s=a.a +if(s[0]===1&&s[1]===0&&s[2]===0&&s[3]===0&&s[4]===0&&s[5]===1&&s[6]===0&&s[7]===0&&s[8]===0&&s[9]===0&&s[10]===1&&s[11]===0&&s[14]===0&&s[15]===1)return new A.i(s[12],s[13]) +return null}, +bfN(a,b){var s,r,q +if(a==b)return!0 +if(a==null){b.toString +return A.a6L(b)}if(b==null)return A.a6L(a) +s=a.a +r=s[0] +q=b.a +return r===q[0]&&s[1]===q[1]&&s[2]===q[2]&&s[3]===q[3]&&s[4]===q[4]&&s[5]===q[5]&&s[6]===q[6]&&s[7]===q[7]&&s[8]===q[8]&&s[9]===q[9]&&s[10]===q[10]&&s[11]===q[11]&&s[12]===q[12]&&s[13]===q[13]&&s[14]===q[14]&&s[15]===q[15]}, +a6L(a){var s=a.a +return s[0]===1&&s[1]===0&&s[2]===0&&s[3]===0&&s[4]===0&&s[5]===1&&s[6]===0&&s[7]===0&&s[8]===0&&s[9]===0&&s[10]===1&&s[11]===0&&s[12]===0&&s[13]===0&&s[14]===0&&s[15]===1}, +dx(a,b){var s=a.a,r=b.a,q=b.b,p=s[0]*r+s[4]*q+s[12],o=s[1]*r+s[5]*q+s[13],n=s[3]*r+s[7]*q+s[15] +if(n===1)return new A.i(p,o) +else return new A.i(p/n,o/n)}, +aKp(a,b,c,d,e){var s,r=e?1:1/(a[3]*b+a[7]*c+a[15]),q=(a[0]*b+a[4]*c+a[12])*r,p=(a[1]*b+a[5]*c+a[13])*r +if(d){s=$.bdn() +s[2]=q +s[0]=q +s[3]=p +s[1]=p}else{s=$.bdn() +if(qs[2])s[2]=q +if(p>s[3])s[3]=p}}, +ie(b1,b2){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=b1.a,a7=b2.gae(b2),a8=b2.gaj(b2),a9=b2.gaH(b2)-a7,b0=b2.gaQ(b2)-a8 +if(!isFinite(a9)||!isFinite(b0)){s=a6[3]===0&&a6[7]===0&&a6[15]===1 +A.aKp(a6,b2.gae(b2),b2.gaj(b2),!0,s) +A.aKp(a6,b2.gaH(b2),b2.gaj(b2),!1,s) +A.aKp(a6,b2.gae(b2),b2.gaQ(b2),!1,s) +A.aKp(a6,b2.gaH(b2),b2.gaQ(b2),!1,s) +r=$.bdn() +return new A.A(r[0],r[1],r[2],r[3])}r=a6[0] +q=r*a9 +p=a6[4] +o=p*b0 +n=r*a7+p*a8+a6[12] +p=a6[1] +m=p*a9 +r=a6[5] +l=r*b0 +k=p*a7+r*a8+a6[13] +r=a6[3] +if(r===0&&a6[7]===0&&a6[15]===1){j=n+q +if(q<0)i=n +else{i=j +j=n}if(o<0)j+=o +else i+=o +h=k+m +if(m<0)g=k +else{g=h +h=k}if(l<0)h+=l +else g+=l +return new A.A(j,h,i,g)}else{p=a6[7] +f=p*b0 +e=r*a7+p*a8+a6[15] +d=n/e +c=k/e +p=n+q +r=e+r*a9 +b=p/r +a=k+m +a0=a/r +a1=e+f +a2=(n+o)/a1 +a3=(k+l)/a1 +r+=f +a4=(p+o)/r +a5=(a+l)/r +return new A.A(A.bo1(d,b,a2,a4),A.bo1(c,a0,a3,a5),A.bo0(d,b,a2,a4),A.bo0(c,a0,a3,a5))}}, +bo1(a,b,c,d){var s=ab?a:b,r=c>d?c:d +return s>r?s:r}, +bo3(a,b){var s +if(A.a6L(a))return b +s=new A.by(new Float64Array(16)) +s.v(a) +s.jR(s) +return A.ie(s,b)}, +bo2(a){var s,r=new A.by(new Float64Array(16)) +r.ci() +s=new A.oN(new Float64Array(4)) +s.p_(0,0,0,a.a) +r.O3(0,s) +s=new A.oN(new Float64Array(4)) +s.p_(0,0,0,a.b) +r.O3(1,s) +return r}, +Zk(a,b,c){if(a==null)return a===b +return a>b-c&&a>>16&255,2)*0.299+Math.pow(s>>>8&255,2)*0.587+Math.pow(s&255,2)*0.114)) +return r<130}, +nP(a){var s,r=a.c,q=a.d,p=(2-r)*q/2 +if(p!==0)if(p===1)s=0 +else{r*=q +q=p*2 +s=p<0.5?r/q:r/(2-q)}else s=0 +return new A.ee(a.a,a.b,B.c.bX(s,0,1),B.c.bX(p,0,1))}, +av3(a){var s=a.d,r=s<0.5?s:1-s,q=s+a.c*r +return new A.dk(a.a,a.b,B.c.bX(q!==0?2-2*s/q:0,0,1),B.c.bX(q,0,1))}, +bQq(a,b,c,d,e){var s=a.$1(b) +if(e.h("an<0>").b(s))return s +return new A.d9(s,e.h("d9<0>"))}, +Kk(a){return A.bTD(a)}, +bTD(a){var s=0,r=A.r(t.H),q,p=2,o,n,m,l,k,j,i,h,g,f,e,d,c,b +var $async$Kk=A.t(function(a0,a1){if(a0===1){o=a1 +s=p}while(true)switch(s){case 0:g=a.a +f=g.a +e=g.b +d=f+"_"+e.j(0) +c=f+"-"+e.aim() +e=a.b +n=e.a +if($.bi2.G(0,d)){s=1 +break}else $.bi2.E(0,d) +p=4 +m=null +f=$.bAe() +i=$.bkA +if(i==null){f=f.HI() +$.bkA=f}else f=i +s=7 +return A.x(t.Yf.b(f)?f:A.cO(f,t.f9),$async$Kk) +case 7:l=a1 +k=A.bP6(g,l) +if(k!=null)m=$.l3().d_(0,k) +g=m +f=t.CD +s=8 +return A.x(t.T8.b(g)?g:A.cO(g,f),$async$Kk) +case 8:if(a1!=null){g=A.Kj(d,m) +q=g +s=1 +break}m=A.e5(null,f) +s=9 +return A.x(m,$async$Kk) +case 9:if(a1!=null){g=A.Kj(d,m) +q=g +s=1 +break}$.bvZ() +m=A.b98(d,e) +s=10 +return A.x(m,$async$Kk) +case 10:if(a1!=null){g=A.Kj(d,m) +q=g +s=1 +break}p=2 +s=6 +break +case 4:p=3 +b=o +j=A.b2(b) +$.bi2.P(0,d) +A.xA("Error: google_fonts was unable to load font "+A.j(c)+" because the following exception occurred:\n"+A.j(j)) +A.xA("If troubleshooting doesn't solve the problem, please file an issue at https://github.com/material-foundation/flutter-packages/issues/new/choose.\n") +throw b +s=6 +break +case 3:s=2 +break +case 6:case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$Kk,r)}, +Kj(a,b){var s=0,r=A.r(t.H),q,p,o +var $async$Kj=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:if(b==null){s=1 +break}s=3 +return A.x(b,$async$Kj) +case 3:p=d +if(p==null){s=1 +break}o=new A.aEU(a,A.b([],t.SR)) +o.aM1(A.e5(p,t.V4)) +s=4 +return A.x(o.iz(0),$async$Kj) +case 4:case 1:return A.p(q,r)}}) +return A.q($async$Kj,r)}, +bOB(a,b){var s,r,q,p,o=A.bn("bestMatch") +for(s=b.a,s=A.jb(s,s.r,b.$ti.c),r=null;s.H();){q=s.d +p=A.bOG(a,q) +if(r==null||p0){$.bnA=s-1 +return 0}return 0}, +bSk(a){var s,r=null,q=a.b.toLowerCase(),p=B.d.G(q,"italic")?B.jU:r +if(B.d.G(q,"semibold")||B.d.G(q,"semi bold"))s=B.jW +else s=B.d.G(q,"bold")?B.b3:r +return A.ep(r,r,r,r,r,r,r,r,a.a,r,r,r,p,r,s,r,r,!0,r,r,r,r,r,r,r,r)}, +bku(a,b){var s,r,q,p,o,n=A.b([],t.G5) +if(a.d6()===B.ds){a.ep() +s=t.o +while(!0){r=a.w +if(r===0)r=a.bz() +if(!(r!==2&&r!==4&&r!==18))break +q=A.aIP(a,b,A.bUD(),a.d6()===B.fS,!1,s) +p=q.c +o=q.w +n.push(new A.PL(q,b,q.b,p,q.d,q.e,q.f,q.r,o))}a.er() +A.bnz(n)}else n.push(A.Og(A.nb(a),t.o)) +return new A.aw9(n)}, +awa(a,b){var s,r,q,p,o +a.eF() +for(s=t.V,r=null,q=null,p=null,o=!1;a.d6()!==B.Hd;)switch(a.d8($.bv3())){case 0:r=A.bku(a,b) +break +case 1:if(a.d6()===B.lu){a.co() +o=!0}else q=new A.dw(A.co(a,b,A.es(),!1,s)) +break +case 2:if(a.d6()===B.lu){a.co() +o=!0}else p=new A.dw(A.co(a,b,A.es(),!1,s)) +break +default:a.em() +a.co()}a.eM() +if(o)b.qM("Lottie doesn't support expressions.") +if(r!=null)return r +q.toString +p.toString +return new A.ZR(q,p)}, +bBZ(a,b){var s,r,q=null +a.eF() +s=q +while(!0){r=a.w +if(r===0)r=a.bz() +if(!(r!==2&&r!==4&&r!==18))break +switch(a.d8($.bv5())){case 0:s=A.bBY(a,b) +break +default:a.em() +a.co()}}a.eM() +if(s==null)return new A.ZS(q,q,q,q) +return s}, +bBY(a,b){var s,r,q,p,o,n,m,l=null +a.eF() +s=t.V +r=t.G +q=l +p=q +o=p +n=o +while(!0){m=a.w +if(m===0)m=a.bz() +if(!(m!==2&&m!==4&&m!==18))break +switch(a.d8($.bv4())){case 0:n=new A.xP(A.co(a,b,A.auY(),!1,r)) +break +case 1:o=new A.xP(A.co(a,b,A.auY(),!1,r)) +break +case 2:p=new A.dw(A.co(a,b,A.es(),!1,s)) +break +case 3:q=new A.dw(A.co(a,b,A.es(),!1,s)) +break +default:a.em() +a.co()}}a.eM() +return new A.ZS(n,o,p,q)}, +bdZ(a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=null,a1=a2.d6()===B.fS +if(a1)a2.eF() +s=t.V +r=t.S +q=a3.b +p=t.XK +o=a3.c +n=t.o +m=a0 +l=m +k=l +j=k +i=j +h=i +g=h +f=g +e=f +while(!0){d=a2.w +if(d===0)d=a2.bz() +if(!(d!==2&&d!==4&&d!==18))break +c=a2.d8($.bv7()) +switch(c){case 0:a2.eF() +while(!0){d=a2.w +if(d===0)d=a2.bz() +if(!(d!==2&&d!==4&&d!==18))break +switch(a2.d8($.bv6())){case 0:e=A.bku(a2,a3) +break +default:a2.em() +a2.co()}}a2.eM() +break +case 1:f=A.awa(a2,a3) +break +case 2:g=new A.awb(A.co(a2,a3,A.bV_(),!1,n)) +break +case 3:case 4:if(c===3)q.E(0,"Lottie doesn't support 3D layers.") +b=A.co(a2,a3,A.es(),!1,s) +h=new A.dw(b) +if(b.length===0){a=o.c +b.push(new A.hs(a3,0,0,a0,a0,a0,0,a,p))}else if(B.b.ga9(b).b==null){a=o.c +B.b.sa9(b,new A.hs(a3,0,0,a0,a0,a0,0,a,p))}break +case 5:i=new A.mW(A.co(a2,a3,A.Zh(),!1,r)) +break +case 6:j=new A.dw(A.co(a2,a3,A.es(),!1,s)) +break +case 7:k=new A.dw(A.co(a2,a3,A.es(),!1,s)) +break +case 8:l=new A.dw(A.co(a2,a3,A.es(),!1,s)) +break +case 9:m=new A.dw(A.co(a2,a3,A.es(),!1,s)) +break +default:a2.em() +a2.co()}}if(a1)a2.eM() +if(e!=null)s=e.gjn()&&J.f(B.b.ga9(e.a).b,B.h) +else s=!0 +if(s)e=a0 +if(f!=null)s=!(f instanceof A.ZR)&&f.gjn()&&J.f(B.b.ga9(f.gafy()).b,B.h) +else s=!0 +if(s)f=a0 +if(h!=null)s=h.gjn()&&J.f(B.b.ga9(h.a).b,0) +else s=!0 +if(s)h=a0 +if(g!=null)s=g.gjn()&&J.f(B.b.ga9(g.a).b,B.oY) +else s=!0 +if(s)g=a0 +if(l!=null)s=l.gjn()&&J.f(B.b.ga9(l.a).b,0) +else s=!0 +if(s)l=a0 +if(m!=null)s=m.gjn()&&J.f(B.b.ga9(m.a).b,0) +else s=!0 +return new A.xQ(e,f,g,h,i,l,s?a0:m,j,k)}, +bCd(a,b){var s,r,q=null +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +switch(a.d8($.bvi())){case 0:a.ep() +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +r=A.bCc(a,b) +if(r!=null)q=r}a.er() +break +default:a.em() +a.co()}}return q}, +bCc(a,b){var s,r,q,p +a.eF() +s=t.V +r=null +q=!1 +while(!0){p=a.w +if(p===0)p=a.bz() +if(!(p!==2&&p!==4&&p!==18))break +switch(a.d8($.bvj())){case 0:q=a.ev()===0 +break +case 1:if(q)r=new A.axt(new A.dw(A.co(a,b,A.es(),!1,s))) +else a.co() +break +default:a.em() +a.co()}}a.eM() +return r}, +bCG(a,b,c){var s,r=A.bn("position"),q=A.bn("size"),p=c===3,o=t.o,n=null,m=!1 +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +switch(a.d8($.bvp())){case 0:n=a.e4() +break +case 1:r.b=A.awa(a,b) +break +case 2:q.b=new A.ur(A.co(a,b,A.Zl(),!0,o)) +break +case 3:m=a.jq() +break +case 4:p=a.ev()===3 +break +default:a.em() +a.co()}}return new A.a0x(n,r.bl(),q.bl(),p,m)}, +bRC(a){var s,r,q,p,o=a.d6()===B.ds +if(o)a.ep() +s=a.aV() +r=a.aV() +q=a.aV() +p=a.d6()===B.cu?a.aV():1 +if(o)a.er() +if(s<=1&&r<=1&&q<=1){s*=255 +r*=255 +q*=255 +if(p<=1)p*=255}return A.S(B.c.ai(p),B.c.ai(s),B.c.ai(r),B.c.ai(q))}, +bel(a,b){var s,r,q,p +a.eF() +r=2 +$label0$1:while(!0){q=a.w +if(q===0)q=a.bz() +if(!(q!==2&&q!==4&&q!==18)){s=null +break}c$1:{switch(a.d8($.bvt())){case 0:s=a.e4() +break $label0$1 +case 1:r=a.ev() +break +default:a.em() +a.co()}}}if(s==null)return null +switch(s){case"gr":p=A.bJX(a,b) +break +case"st":p=A.bK_(a,b) +break +case"gs":p=A.bFB(a,b) +break +case"fl":p=A.bJW(a,b) +break +case"gf":p=A.bFz(a,b) +break +case"tr":p=A.bdZ(a,b) +break +case"sh":p=A.bJZ(a,b) +break +case"el":p=A.bCG(a,b,r) +break +case"rc":p=A.bJ1(a,b) +break +case"tm":p=A.bK0(a,b) +break +case"sr":p=A.bIr(a,b,r) +break +case"mm":p=A.bHd(a) +break +case"rp":p=A.bJd(a,b) +break +case"rd":p=A.bJm(a,b) +break +default:b.qM("Unknown shape type "+s) +p=null}while(!0){q=a.w +if(q===0)q=a.bz() +if(!(q!==2&&q!==4&&q!==18))break +a.co()}a.eM() +return p}, +bSv(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=null +a.eF() +s=d +r=s +q=r +p=q +o=0 +n=B.o2 +m=0 +l=0 +k=0 +j=B.B +i=B.B +h=0 +g=!0 +while(!0){f=a.w +if(f===0)f=a.bz() +if(!(f!==2&&f!==4&&f!==18))break +switch(a.d8($.bzm())){case 0:p=a.e4() +break +case 1:q=a.e4() +break +case 2:o=a.aV() +break +case 3:e=a.ev() +n=e>2||e<0?B.o2:B.a_5[e] +break +case 4:m=a.ev() +break +case 5:l=a.aV() +break +case 6:k=a.aV() +break +case 7:j=A.bnv(a) +break +case 8:i=A.bnv(a) +break +case 9:h=a.aV() +break +case 10:g=a.jq() +break +case 11:a.ep() +r=new A.i(a.aV(),a.aV()) +a.er() +break +case 12:a.ep() +s=new A.i(a.aV(),a.aV()) +a.er() +break +default:a.em() +a.co()}}a.eM() +return new A.r6(p==null?"":p,q,o,n,m,l,k,j,i,h,g,r,s)}, +bSO(a){return A.aIl(a)}, +bFd(a,b){var s,r,q,p,o,n,m,l,k=A.b([],t.bP) +a.eF() +s=t.C0 +r="" +q=0 +p=0 +o=null +n=null +while(!0){m=a.w +if(m===0)m=a.bz() +if(!(m!==2&&m!==4&&m!==18))break +switch(a.d8($.bvU())){case 0:r=a.e4() +break +case 1:q=a.aV() +break +case 2:p=a.aV() +break +case 3:o=a.e4() +break +case 4:n=a.e4() +break +case 5:a.eF() +while(!0){m=a.w +if(m===0)m=a.bz() +if(!(m!==2&&m!==4&&m!==18))break +switch(a.d8($.bvT())){case 0:a.ep() +while(!0){m=a.w +if(m===0)m=a.bz() +if(!(m!==2&&m!==4&&m!==18))break +l=A.bel(a,b) +if(l!=null)k.push(s.a(l))}a.er() +break +default:a.em() +a.co()}}a.eM() +break +default:a.em() +a.co()}}a.eM() +s=o==null?"":o +return new A.Nf(k,r,q,p,s,n==null?"":n)}, +bFh(a){var s,r,q,p,o,n +a.eF() +s=null +r=null +q=null +while(!0){p=a.w +if(p===0)p=a.bz() +if(!(p!==2&&p!==4&&p!==18))break +switch(a.d8($.bvV())){case 0:s=a.e4() +break +case 1:r=a.e4() +break +case 2:q=a.e4() +break +case 3:a.aV() +break +default:a.em() +a.co()}}a.eM() +o=s==null?"":s +n=r==null?"":r +return new A.F0(o,n,q==null?"":q)}, +bFz(a,b){var s,r,q,p=null,o=t.o,n=t.S,m=t.cU,l=p,k=l,j=k,i=j,h=i,g=h,f=B.bX,e=!1 +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +switch(a.d8($.bw0())){case 0:g=a.e4() +break +case 1:a.eF() +r=-1 +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +switch(a.d8($.bw_())){case 0:r=a.ev() +break +case 1:q=new A.Nx(r) +h=new A.ZP(A.bkt(A.co(a,b,q.gagG(q),!1,m))) +break +default:a.em() +a.co()}}a.eM() +break +case 2:i=new A.mW(A.co(a,b,A.Zh(),!1,n)) +break +case 3:j=a.ev()===1?B.fk:B.wM +break +case 4:k=new A.ur(A.co(a,b,A.Zl(),!0,o)) +break +case 5:l=new A.ur(A.co(a,b,A.Zl(),!0,o)) +break +case 6:f=a.ev()===1?B.bX:B.aD +break +case 7:e=a.jq() +break +default:a.em() +a.co()}}if(i==null)i=new A.mW(A.b([A.Og(100,n)],t.q1)) +o=j==null?B.fk:j +h.toString +k.toString +l.toString +return new A.a4u(g,o,f,h,i,k,l,e)}, +bFB(a4,a5){var s,r,q,p,o,n=null,m=A.b([],t.WC),l=t.V,k=t.o,j=t.S,i=t.cU,h=n,g=h,f=g,e=f,d=e,c=d,b=c,a=b,a0=a,a1=a0,a2=0,a3=!1 +while(!0){s=a4.w +if(s===0)s=a4.bz() +if(!(s!==2&&s!==4&&s!==18))break +switch(a4.d8($.bw3())){case 0:a1=a4.e4() +break +case 1:a4.eF() +r=-1 +while(!0){s=a4.w +if(s===0)s=a4.bz() +if(!(s!==2&&s!==4&&s!==18))break +switch(a4.d8($.bw2())){case 0:r=a4.ev() +break +case 1:q=new A.Nx(r) +a0=new A.ZP(A.bkt(A.co(a4,a5,q.gagG(q),!1,i))) +break +default:a4.em() +a4.co()}}a4.eM() +break +case 2:a=new A.mW(A.co(a4,a5,A.Zh(),!1,j)) +break +case 3:b=a4.ev()===1?B.fk:B.wM +break +case 4:c=new A.ur(A.co(a4,a5,A.Zl(),!0,k)) +break +case 5:d=new A.ur(A.co(a4,a5,A.Zl(),!0,k)) +break +case 6:e=new A.dw(A.co(a4,a5,A.es(),!1,l)) +break +case 7:f=B.xH[a4.ev()-1] +break +case 8:g=B.xA[a4.ev()-1] +break +case 9:a2=a4.aV() +break +case 10:a3=a4.jq() +break +case 11:a4.ep() +while(!0){s=a4.w +if(s===0)s=a4.bz() +if(!(s!==2&&s!==4&&s!==18))break +a4.eF() +p=n +o=p +while(!0){s=a4.w +if(s===0)s=a4.bz() +if(!(s!==2&&s!==4&&s!==18))break +switch(a4.d8($.bw1())){case 0:o=a4.e4() +break +case 1:p=new A.dw(A.co(a4,a5,A.es(),!1,l)) +break +default:a4.em() +a4.co()}}a4.eM() +if(o==="o")h=p +else if(o==="d"||o==="g"){p.toString +m.push(p)}}a4.er() +if(m.length===1)m.push(m[0]) +break +default:a4.em() +a4.co()}}if(a==null)a=new A.mW(A.b([A.Og(100,j)],t.q1)) +l=b==null?B.fk:b +a0.toString +c.toString +d.toString +e.toString +return new A.a4w(a1,l,a0,a,c,d,e,f,g,a2,m,h,a3)}, +bTk(a){return B.c.ai(A.aIl(a))}, +bnv(a){var s,r,q,p +a.ep() +s=B.c.ai(a.aV()*255) +r=B.c.ai(a.aV()*255) +q=B.c.ai(a.aV()*255) +while(!0){p=a.w +if(p===0)p=a.bz() +if(!(p!==2&&p!==4&&p!==18))break +a.co()}a.er() +return A.S(255,s,r,q)}, +bfv(a){var s=A.b([],t.yv) +a.ep() +for(;a.d6()===B.ds;){a.ep() +s.push(A.nb(a)) +a.er()}a.er() +return s}, +nb(a){switch(a.d6().a){case 6:return A.bGj(a) +case 0:return A.bGi(a) +case 2:return A.bGk(a) +case 8:return B.h +case 1:case 3:case 4:case 5:case 7:case 9:throw A.d(A.c1("Unknown point starts with "+a.d6().j(0)))}}, +bGj(a){var s,r=a.aV(),q=a.aV() +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +a.co()}return new A.i(r,q)}, +bGi(a){var s,r +a.ep() +s=a.aV() +r=a.aV() +for(;a.d6()!==B.t4;)a.co() +a.er() +return new A.i(s,r)}, +bGk(a){var s,r,q +a.eF() +s=0 +r=0 +while(!0){q=a.w +if(q===0)q=a.bz() +if(!(q!==2&&q!==4&&q!==18))break +switch(a.d8($.bwl())){case 0:s=A.aIl(a) +break +case 1:r=A.aIl(a) +break +default:a.em() +a.co()}}a.eM() +return new A.i(s,r)}, +aIl(a){var s,r,q=a.d6() +switch(q.a){case 6:return a.aV() +case 0:a.ep() +s=a.aV() +while(!0){r=a.w +if(r===0)r=a.bz() +if(!(r!==2&&r!==4&&r!==18))break +a.co()}a.er() +return s +case 1:case 2:case 3:case 4:case 5:case 7:case 8:case 9:throw A.d(A.c1("Unknown value for token of type "+q.j(0)))}}, +co(a,b,c,d,e){var s,r=A.b([],e.h("v>")) +if(a.d6()===B.lu){b.qM("Lottie doesn't support expressions.") +return r}a.eF() +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +switch(a.d8($.bwq())){case 0:if(a.d6()===B.ds){a.ep() +if(a.d6()===B.cu)r.push(A.aIP(a,b,c,!1,d,e)) +else while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +r.push(A.aIP(a,b,c,!0,d,e))}a.er()}else r.push(A.aIP(a,b,c,!1,d,e)) +break +default:a.co()}}a.eM() +A.bnz(r) +return r}, +bnz(a){var s,r,q,p,o +for(s=a.length-1,r=0;r1)B.b.P(a,o)}, +bnC(c2,c3){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=null,c0=A.b([],t.cc),c1=A.b([],t.qa) +c2.eF() +s=c3.b +r=t.V +q=t.T +p=t.HU +o=c3.gaMc() +n=b9 +m=n +l=m +k=l +j=k +i=j +h=i +g=h +f=g +e="UNSET" +d=B.o5 +c=0 +b=0 +a=0 +a0=B.B +a1=0 +a2=0 +a3=-1 +a4=1 +a5=0 +a6=0 +a7=0 +a8=!1 +a9=!1 +b0=B.oO +while(!0){b1=c2.w +if(b1===0)b1=c2.bz() +if(!(b1!==2&&b1!==4&&b1!==18))break +switch(c2.d8($.bws())){case 0:e=c2.e4() +break +case 1:c=c2.ev() +break +case 2:f=c2.e4() +break +case 3:b2=c2.ev() +d=b2<6?B.Zc[b2]:B.o5 +break +case 4:a3=c2.ev() +break +case 5:b=c2.ev() +break +case 6:a=c2.ev() +break +case 7:a0=A.bHh(c2.e4(),o) +break +case 8:k=A.bdZ(c2,c3) +break +case 9:b3=c2.ev() +if(b3>=6){s.E(0,"Unsupported matte type: "+b3) +break}b0=B.Zg[b3] +if(b0===B.CZ)s.E(0,"Unsupported matte type: Luma") +else if(b0===B.D_)s.E(0,"Unsupported matte type: Luma Inverted");++c3.e +break +case 10:c2.ep() +while(!0){b1=c2.w +if(b1===0)b1=c2.bz() +if(!(b1!==2&&b1!==4&&b1!==18))break +c0.push(A.bH_(c2,c3))}c3.e+=c0.length +c2.er() +break +case 11:c2.ep() +while(!0){b1=c2.w +if(b1===0)b1=c2.bz() +if(!(b1!==2&&b1!==4&&b1!==18))break +b4=A.bel(c2,c3) +if(b4!=null)c1.push(b4)}c2.er() +break +case 12:c2.eF() +while(!0){b1=c2.w +if(b1===0)b1=c2.bz() +if(!(b1!==2&&b1!==4&&b1!==18))break +switch(c2.d8($.bwt())){case 0:l=new A.awc(A.co(c2,c3,A.bSw(),!1,p)) +break +case 1:c2.ep() +b1=c2.w +if(b1===0)b1=c2.bz() +if(b1!==2&&b1!==4&&b1!==18)m=A.bBZ(c2,c3) +while(!0){b1=c2.w +if(b1===0)b1=c2.bz() +if(!(b1!==2&&b1!==4&&b1!==18))break +c2.co()}c2.er() +break +default:c2.em() +c2.co()}}c2.eM() +break +case 13:c2.ep() +b5=A.b([],q) +while(!0){b1=c2.w +if(b1===0)b1=c2.bz() +if(!(b1!==2&&b1!==4&&b1!==18))break +c2.eF() +while(!0){b1=c2.w +if(b1===0)b1=c2.bz() +if(!(b1!==2&&b1!==4&&b1!==18))break +switch(c2.d8($.bwr())){case 0:b6=c2.ev() +if(b6===29)h=A.bCd(c2,c3) +else if(b6===25)i=new A.aCe().aX9(0,c2,c3) +break +case 1:b5.push(c2.e4()) +break +default:c2.em() +c2.co()}}c2.eM()}c2.er() +s.E(0,"Lottie doesn't support layer effects. If you are using them for fills, strokes, trim paths etc. then try adding them directly as contents in your shape. Found: "+A.j(b5)) +break +case 14:a4=c2.aV() +break +case 15:a5=c2.aV() +break +case 16:a1=B.c.aw(c2.aV()) +break +case 17:a2=B.c.aw(c2.aV()) +break +case 18:a6=c2.aV() +break +case 19:a7=c2.aV() +break +case 20:n=new A.dw(A.co(c2,c3,A.es(),!1,r)) +break +case 21:g=c2.e4() +break +case 22:a8=c2.jq() +break +case 23:a9=c2.ev()===1 +break +case 24:b7=c2.ev() +if(b7>=18){s.E(0,"Unsupported Blend Mode: "+b7) +break}j=$.bRp[b7] +break +default:c2.em() +c2.co()}}c2.eM() +b8=A.b([],t.ML) +if(a6>0)b8.push(A.Of(c3,a6,0,b9,0,0,b9,b9,r)) +a7=a7>0?a7:c3.c.c +b8.push(A.Of(c3,a7,1,b9,a6,1,b9,b9,r)) +b8.push(A.Of(c3,17976931348623157e292,0,b9,a7,0,b9,b9,r)) +if(B.d.iT(e,".ai")||"ai"===g)c3.qM("Convert your Illustrator layers to shape layers.") +if(a9){if(k==null)k=new A.xQ(b9,b9,b9,b9,b9,b9,b9,b9,b9) +k.y=!0}k.toString +return A.bnB(j,h,c3,i,c,b8,a8,d,c0,b0,e,a3,a2,a1,f,c1,a0,a,b,a5,l,m,n,a4,k)}, +bnU(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=null,e=a.c +b.eF() +s=e.z +r=e.x +q=e.y +p=e.r +o=e.w +n=e.e +m=e.f +l=a.b +k=e.a +while(!0){j=b.w +if(j===0)j=b.bz() +if(!(j!==2&&j!==4&&j!==18))break +switch(b.d8($.bwz())){case 0:i=B.c.aw(b.aV()) +k.c=i<0?A.bsf(i):i +break +case 1:h=B.c.aw(b.aV()) +k.d=h<0?A.bsf(h):h +break +case 2:e.b=b.aV() +break +case 3:e.c=b.aV()-0.01 +break +case 4:e.d=b.aV() +break +case 5:g=b.e4().split(".") +if(!A.bHg(A.et(g[0],f,f),A.et(g[1],f,f),A.et(g[2],f,f),4,4,0))l.E(0,"Lottie only supports bodymovin >= 4.4.0") +break +case 6:A.bGT(b,a,n,m) +break +case 7:A.bGQ(b,a,p,o) +break +case 8:A.bGS(b,q) +break +case 9:A.bGR(b,a,r) +break +case 10:A.bGU(b,a,s) +break +default:b.em() +b.co()}}return a}, +bGT(a,b,c,d){var s,r,q +a.ep() +s=0 +while(!0){r=a.w +if(r===0)r=a.bz() +if(!(r!==2&&r!==4&&r!==18))break +q=A.bnC(a,b) +if(q.e===B.x6)++s +c.push(q) +d.u(0,q.d,q)}if(s>4)b.qM("You have "+s+" images. Lottie should primarily be used with shapes. If you are using Adobe Illustrator, convert the Illustrator layers to shape layers.") +a.er()}, +bGQ(a,b,c,d){var s,r,q,p,o,n,m,l,k,j,i,h,g +a.ep() +s=t.fQ +r=t.S +q=t.IE +while(!0){p=a.w +if(p===0)p=a.bz() +if(!(p!==2&&p!==4&&p!==18))break +o=A.bn("id") +n=A.b([],s) +m=A.D(r,q) +a.eF() +l=0 +k=0 +j=null +i=null +while(!0){p=a.w +if(p===0)p=a.bz() +if(!(p!==2&&p!==4&&p!==18))break +switch(a.d8($.bww())){case 0:o.b=a.e4() +break +case 1:a.ep() +while(!0){p=a.w +if(p===0)p=a.bz() +if(!(p!==2&&p!==4&&p!==18))break +h=A.bnC(a,b) +m.u(0,h.d,h) +n.push(h)}a.er() +break +case 2:l=a.ev() +break +case 3:k=a.ev() +break +case 4:j=a.e4() +break +case 5:i=a.e4() +break +default:a.em() +a.co()}}a.eM() +if(j!=null){g=o.b +if(g===o)A.X(A.fC(o.a)) +d.u(0,g,new A.G0(l,k,g,j,i==null?"":i))}else{g=o.b +if(g===o)A.X(A.fC(o.a)) +c.u(0,g,n)}}a.er()}, +bGS(a,b){var s,r +a.eF() +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +switch(a.d8($.bwx())){case 0:a.ep() +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +r=A.bFh(a) +b.u(0,r.b,r)}a.er() +break +default:a.em() +a.co()}}a.eM()}, +bGR(a,b,c){var s,r +a.ep() +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +r=A.bFd(a,b) +c.u(0,31*(31*B.d.gL(r.b)+B.d.gL(r.f))+B.d.gL(r.e),r)}a.er()}, +bGU(a,b,c){var s +a.ep() +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +a.eF() +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +switch(a.d8($.bwy())){case 0:a.e4() +break +case 1:a.aV() +break +case 2:a.aV() +break +default:a.em() +a.co()}}a.eM() +c.push(new A.a6B())}a.er()}, +bH_(a,b){var s,r,q,p,o,n,m=A.bn("maskMode"),l=A.bn("maskPath"),k=A.bn("opacity") +a.eF() +s=t.S +r=t.hd +q=b.b +p=!1 +while(!0){o=a.w +if(o===0)o=a.bz() +if(!(o!==2&&o!==4&&o!==18))break +switch(a.ag4()){case"mode":n=a.e4() +switch(n){case"a":m.b=B.CQ +break +case"s":m.b=B.a1T +break +case"n":m.b=B.CR +break +case"i":q.E(0,"Animation contains intersect masks. They are not supported but will be treated like add masks.") +m.b=B.a1U +break +default:q.E(0,"Unknown mask mode "+n+". Defaulting to Add.") +m.b=B.CQ}break +case"pt":l.b=new A.ZQ(A.co(a,b,A.buI(),!1,r)) +break +case"o":k.b=new A.mW(A.co(a,b,A.Zh(),!1,s)) +break +case"inv":p=a.jq() +break +default:a.co()}}a.eM() +return new A.a6D(m.bl(),l.bl(),k.bl(),p)}, +bHd(a){var s,r=A.bn("mode"),q=!1 +while(!0){s=a.w +if(s===0)s=a.bz() +if(!(s!==2&&s!==4&&s!==18))break +switch(a.d8($.bwE())){case 0:a.e4() +break +case 1:r.b=A.bHe(a.ev()) +break +case 2:q=a.jq() +break +default:a.em() +a.co()}}return new A.a6S(r.bl(),q)}, +bGg(a,b,c,d){var s,r,q,p=new A.d8("") +p.a=""+"$" +for(s=0;s=b.gF(0)&&a.nO(0,s-b.gF(0),s).k(0,b)))break +s-=b.gF(0)}return a.nO(0,0,s)}, +bl1(a,b){var s +if(b.a.length===0)return a +s=0 +while(!0){if(!(s<=a.gF(0)-b.gF(0)&&a.nO(0,s,s+b.gF(0)).k(0,b)))break +s+=b.gF(0)}return a.a_y(0,s)}, +bRk(a,b,c){return A.bia(a,A.biw(A.bif(),c),A.bie(),b)}, +bia(a,b,c,d){var s,r,q,p,o=A.dl(0,null,a.length,null,null),n=b.$1(d) +for(s=o,r=0;r=1)return c +s=(b.gm(b)>>>24&255)/255 +r=b.gm(b) +q=b.gm(b) +p=b.gm(b) +o=c.gm(c) +n=c.gm(c) +m=c.gm(c) +l=c.gm(c) +k=A.Nr((r>>>16&255)/255) +j=A.Nr((q>>>8&255)/255) +i=A.Nr((p&255)/255) +h=A.Nr((n>>>16&255)/255) +g=A.Nr((m>>>8&255)/255) +f=A.Nr((l&255)/255) +l=A.bf9(k+a*(h-k)) +m=A.bf9(j+a*(g-j)) +n=A.bf9(i+a*(f-i)) +return A.S(B.c.ai((s+a*((o>>>24&255)/255-s))*255),B.c.ai(l*255),B.c.ai(m*255),B.c.ai(n*255))}, +bHf(a,b){var s,r,q,p,o,n,m,l,k,j,i +b.bF(0) +s=a.b +b.a4(0,s.a,s.b) +for(r=a.a,q=s,p=0;pd)return!0 +if(be)return!0 +return c>=f}, +bHh(a,b){var s,r=a.length +if(r!==0&&a[0]==="#"){s=A.et(B.d.c5(a,1),null,16) +if(r===7)s|=4278190080 +else if(r!==9){b.$1("Unknown color colorString: "+a) +return B.l}return new A.n(s>>>0)}b.$1("Unknown colorString is empty or format incorrect: "+a) +return B.l}, +aKJ(a,b){var s=B.c.aw(a),r=B.c.aw(b) +return s-r*A.OU(s,r)}, +OU(a,b){var s=B.f.eY(a,b),r=B.f.gAF(a),q=B.f.gAF(b),p=B.f.bx(a,b) +return r!==q&&p!==0?s-1:s}, +bLX(a,b){if(b.b)return +A.bh6(a,b.e.gm(0)/100,b.f.gm(0)/100,b.r.gm(0)/360)}, +bh6(a,b,c,d){var s,r,q,p,o,n,m,l,k,j,i="applyTrimPathIfNeeded" +A.fP(i) +s=a.tu() +r=A.ab(s,!0,A.w(s).h("z.E")) +if(r.length===0){A.dV(i) +return}q=B.b.ga9(r) +if(b===1&&c===0){A.dV(i) +return}p=q.gF(q) +if(p<1||Math.abs(c-b-1)<0.01){A.dV(i) +return}o=p*b +n=p*c +m=d*p +l=Math.min(o,n)+m +k=Math.max(o,n)+m +if(l>=p&&k>=p){l=A.aKJ(l,p) +k=A.aKJ(k,p)}if(l<0)l=A.aKJ(l,p) +if(k<0)k=A.aKJ(k,p) +if(l===k){a.bF(0) +A.dV(i) +return}if(l>=k)l-=p +j=q.DD(l,k) +if(k>p)j.mU(0,q.DD(0,B.c.bx(k,p)),B.h) +else if(l<0)j.mU(0,q.DD(p+l,p),B.h) +a.bF(0) +a.mU(0,j,B.h) +A.dV(i)}, +btB(){var s,r,q,p,o=null +try{o=A.aX_()}catch(s){if(t.VI.b(A.b2(s))){r=$.b8X +if(r!=null)return r +throw s}else throw s}if(J.f(o,$.bsm)){r=$.b8X +r.toString +return r}$.bsm=o +if($.bds()===$.avk())r=$.b8X=o.aG(".").j(0) +else{q=o.Zq() +p=q.length-1 +r=$.b8X=p===0?q:B.d.am(q,0,p)}return r}, +bTy(a,b){var s=null +return $.avw().aUh(0,a,b,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +btZ(a){var s +if(!(a>=65&&a<=90))s=a>=97&&a<=122 +else s=!0 +return s}, +bSx(a,b){var s,r,q=null,p=a.length,o=b+2 +if(p"),p=A.C(q) +for(;q.b(a);){if(b.aR(0,a))return c.h("ba<0>").a(b.i(0,a)) +else if(!p.E(0,a))throw A.d(A.ad("Recursive references detected: "+p.j(0))) +a=a.$ti.h("ba<1>").a(A.boS(a.a,a.b,null))}for(q=A.cT(p,p.r,p.$ti.c),s=q.$ti.c;q.H();){r=q.d +b.u(0,r==null?s.a(r):r,a)}return a}, +bQv(a){switch(a){case 8:return"\\b" +case 9:return"\\t" +case 10:return"\\n" +case 11:return"\\v" +case 12:return"\\f" +case 13:return"\\r" +case 34:return'\\"' +case 39:return"\\'" +case 92:return"\\\\"}if(a<32)return"\\x"+B.d.k_(B.f.hZ(a,16),2,"0") +return A.cs(a)}, +bV1(a,b){return a}, +bV2(a,b){return b}, +bV0(a,b){return a.b<=b.b?b:a}, +bGt(a){var s,r,q=A.b([],t.T) +for(s=0;s>>10&31,m=p&1023 +if(n===0){if(m!==0){a.setUint32(0,1056964608+m,!1) +s=a.getFloat32(0,!1)-$.bvP().getFloat32(0,!1) +return o===0?s:-s}r=0 +q=0}else{q=m<<13 +if(n===31){if(q!==0)q|=4194304 +r=255}else r=n-15+127}a.setUint32(0,(o<<16|r<<23|q)>>>0,!1) +return a.getFloat32(0,!1)}, +iW(a,b){if(a==null)return null +a=B.d.eC(B.d.nE(B.d.nE(B.d.nE(B.d.nE(B.d.nE(a,"rem",""),"em",""),"ex",""),"px",""),"pt","")) +if(b)return A.ow(a) +return A.nM(a)}, +h2(a,b,c){var s,r,q=null,p=a==null,o=p?q:B.d.G(a,"pt") +if(o===!0)s=1.3333333333333333 +else{o=p?q:B.d.G(a,"rem") +if(o===!0)s=b.b +else{o=p?q:B.d.G(a,"em") +if(o===!0)s=b.b +else{p=p?q:B.d.G(a,"ex") +s=p===!0?b.c:1}}}r=A.iW(a,c) +return r!=null?r*s:q}, +bQ5(a){var s,r,q,p,o,n,m,l=A.b([],t.n) +for(s=a.length,r="",q=0;q0&&a[q-1].toLowerCase()==="e" +if(o&&!n){if(r!==""){m=A.iW(r,!1) +m.toString +l.push(m)}r=p==="-"?"-":""}else{if(p===".")if(A.Kn(r,".",0)){m=A.iW(r,!1) +m.toString +l.push(m) +r=""}r+=p}}if(r.length!==0){s=A.iW(r,!1) +s.toString +l.push(s)}return l}, +av9(a){var s,r,q,p,o,n,m,l,k +if(a==null||a==="")return null +s=$.bA8() +if(!s.b.test(a))throw A.d(A.ad("illegal or unsupported transform: "+a)) +s=$.bA7().Cs(0,a) +s=A.ab(s,!0,A.w(s).h("z.E")) +r=A.a5(s).h("cz<1>") +q=new A.cz(s,r) +for(s=new A.cR(q,q.gF(0),r.h("cR")),r=r.h("aI.E"),p=B.br;s.H();){o=s.d +if(o==null)o=r.a(o) +n=o.wP(1) +n.toString +m=B.d.eC(n) +o=o.wP(2) +o.toString +l=A.bQ5(B.d.eC(o)) +k=B.a1O.i(0,m) +if(k==null)throw A.d(A.ad("Unsupported transform: "+m)) +p=k.$2(l,p)}return p}, +bQ_(a,b){return A.qF(a[0],a[1],a[2],a[3],a[4],a[5],null).iV(b)}, +bQ2(a,b){return A.qF(1,0,Math.tan(B.b.ga9(a)),1,0,0,null).iV(b)}, +bQ3(a,b){return A.qF(1,Math.tan(B.b.ga9(a)),0,1,0,0,null).iV(b)}, +bQ4(a,b){var s=a.length<2?0:a[1] +return A.qF(1,0,0,1,B.b.ga9(a),s,null).iV(b)}, +bQ1(a,b){var s=a[0] +return A.qF(s,0,0,a.length<2?s:a[1],0,0,null).iV(b)}, +bQ0(a,b){var s,r,q=B.br.aZ7(a[0]*3.141592653589793/180),p=a.length +if(p>1){s=a[1] +r=p===3?a[2]:s +return A.qF(1,0,0,1,s,r,null).iV(q).FF(-s,-r).iV(b)}else return q.iV(b)}, +buo(a){if(a==="inherit"||a==null)return null +return a!=="evenodd"?B.cG:B.a4a}, +un(a){var s +if(A.bu0(a))return A.bun(a,1) +else{s=A.iW(a,!1) +s.toString +return s}}, +bun(a,b){var s=A.iW(B.d.am(a,0,a.length-1),!1) +s.toString +return s/100*b}, +bu0(a){var s=B.d.iT(a,"%") +return s}, +bum(a,b,c){var s,r,q +if(c!=null)if(b==="width")s=c.r +else s=b==="height"?c.w:null +else s=null +if(B.d.G(a,"%")){r=A.nM(B.d.am(a,0,a.length-1)) +s.toString +q=r/100*s}else if(B.d.c4(a,"0.")){r=A.nM(a) +s.toString +q=r*s}else q=a.length!==0?A.nM(a):null +return q}, +mQ(a,b){var s +if(a==null)return b==null +if(b==null||a.length!==b.length)return!1 +if(a===b)return!0 +for(s=0;s")) +g.cq(i,0,2,h.h("O.E")) +B.b.I(j,g) +c4.a.push(l) +l=k.length +c3.setUint32(0,l,!0) +g=c4.a +j=c4.d +i=A.b8(j) +h=new A.aT(j,0,4,i.h("aT")) +h.cq(j,0,4,i.h("O.E")) +B.b.I(g,h) +h=c4.a +g=k.buffer +k=k.byteOffset +l=new Uint8Array(g,k,l) +B.b.I(h,l)}for(p=c5.c,o=p.length,n=0;l=p.length,n")) +g.cq(i,0,4,h.h("O.E")) +B.b.I(o,g) +c4.a.push(k.a) +c3.setUint16(0,j,!0) +k=c4.a +g=c4.d +o=A.b8(g) +i=new A.aT(g,0,2,o.h("aT")) +i.cq(g,0,2,o.h("O.E")) +B.b.I(k,i) +c3.setUint16(0,b==null?c0:b,!0) +o=c4.a +k=c4.d +i=A.b8(k) +h=new A.aT(k,0,2,i.h("aT")) +h.cq(k,0,2,i.h("O.E")) +B.b.I(o,h) +s.u(0,e,j)}if(c!=null){b=q.i(0,c.b) +o=c.a +k=c.c +k=k==null?b9:k.a +if(k==null)k=0 +j=c.d +j=j==null?b9:j.a +if(j==null)j=0 +i=f.a +h=c.e +if(h==null)h=4 +g=c.f +if(g==null)g=1 +c4.jb(B.HS) +a=c4.e++ +c4.a.push(29) +c3.setUint32(0,o.a,!0) +o=c4.a +a0=c4.d +a1=A.b8(a0) +a2=new A.aT(a0,0,4,a1.h("aT")) +a2.cq(a0,0,4,a1.h("O.E")) +B.b.I(o,a2) +c4.a.push(k) +c4.a.push(j) +c4.a.push(i.a) +c3.setFloat32(0,h,!0) +h=c4.a +i=c4.d +o=A.b8(i) +k=new A.aT(i,0,4,o.h("aT")) +k.cq(i,0,4,o.h("O.E")) +B.b.I(h,k) +c3.setFloat32(0,g,!0) +g=c4.a +k=c4.d +o=A.b8(k) +j=new A.aT(k,0,4,o.h("aT")) +j.cq(k,0,4,o.h("O.E")) +B.b.I(g,j) +c3.setUint16(0,a,!0) +j=c4.a +g=c4.d +o=A.b8(g) +k=new A.aT(g,0,2,o.h("aT")) +k.cq(g,0,2,o.h("O.E")) +B.b.I(j,k) +c3.setUint16(0,b==null?c0:b,!0) +o=c4.a +k=c4.d +j=A.b8(k) +i=new A.aT(k,0,2,j.h("aT")) +i.cq(k,0,2,j.h("O.E")) +B.b.I(o,i) +r.u(0,e,a)}++e}a3=A.D(c2,c2) +for(c2=c5.d,p=c2.length,o=t.ZC,l=t.n,k=t.JO,j=t.wd,a4=0,n=0;n")) +a2.cq(a0,0,2,a1.h("O.E")) +B.b.I(g,a2) +a2=i.length +c3.setUint32(0,a2,!0) +g=c4.a +a1=c4.d +a0=A.b8(a1) +b0=new A.aT(a1,0,4,a0.h("aT")) +b0.cq(a1,0,4,a0.h("O.E")) +B.b.I(g,b0) +b0=c4.a +g=i.buffer +i=i.byteOffset +i=new Uint8Array(g,i,a2) +B.b.I(b0,i) +i=h.length +c3.setUint32(0,i,!0) +g=c4.a +a0=c4.d +a1=A.b8(a0) +a2=new A.aT(a0,0,4,a1.h("aT")) +a2.cq(a0,0,4,a1.h("O.E")) +B.b.I(g,a2) +g=c4.a +b1=B.f.bx(g.length,4) +if(b1!==0){a0=$.Dj() +a1=4-b1 +a2=A.b8(a0) +b0=new A.aT(a0,0,a1,a2.h("aT")) +b0.cq(a0,0,a1,a2.h("O.E")) +B.b.I(g,b0)}g=c4.a +a0=h.buffer +h=h.byteOffset +i=new Uint8Array(a0,h,4*i) +B.b.I(g,i) +a3.u(0,a4,a);++a4}for(c2=c5.y,p=c2.length,n=0;n")) +a1.cq(a,0,2,a0.h("O.E")) +B.b.I(g,a1) +c3.setFloat32(0,o==null?0/0:o,!0) +o=c4.a +g=c4.d +a=A.b8(g) +a0=new A.aT(g,0,4,a.h("aT")) +a0.cq(g,0,4,a.h("O.E")) +B.b.I(o,a0) +c3.setFloat32(0,l==null?0/0:l,!0) +o=c4.a +l=c4.d +g=A.b8(l) +a=new A.aT(l,0,4,g.h("aT")) +a.cq(l,0,4,g.h("O.E")) +B.b.I(o,a) +c3.setFloat32(0,k==null?0/0:k,!0) +o=c4.a +l=c4.d +k=A.b8(l) +g=new A.aT(l,0,4,k.h("aT")) +g.cq(l,0,4,k.h("O.E")) +B.b.I(o,g) +c3.setFloat32(0,j==null?0/0:j,!0) +o=c4.a +l=c4.d +k=A.b8(l) +j=new A.aT(l,0,4,k.h("aT")) +j.cq(l,0,4,k.h("O.E")) +B.b.I(o,j) +o=i?1:0 +c4.a.push(o) +o=c4.a +if(h!=null){l=h.length +o.push(l) +o=c4.a +b1=B.f.bx(o.length,8) +if(b1!==0){k=$.Dj() +j=8-b1 +i=A.b8(k) +g=new A.aT(k,0,j,i.h("aT")) +g.cq(k,0,j,i.h("O.E")) +B.b.I(o,g)}o=c4.a +k=h.buffer +h=h.byteOffset +l=new Uint8Array(k,h,8*l) +B.b.I(o,l)}else o.push(0)}for(c2=c5.f,p=c2.length,n=0;n")) +b0.cq(a1,0,2,a2.h("O.E")) +B.b.I(a0,b0) +c3.setFloat32(0,k,!0) +k=c4.a +b0=c4.d +a0=A.b8(b0) +a1=new A.aT(b0,0,4,a0.h("aT")) +a1.cq(b0,0,4,a0.h("O.E")) +B.b.I(k,a1) +c3.setFloat32(0,i,!0) +i=c4.a +a1=c4.d +k=A.b8(a1) +a0=new A.aT(a1,0,4,k.h("aT")) +a0.cq(a1,0,4,k.h("O.E")) +B.b.I(i,a0) +c4.a.push(j.a) +c4.a.push(h.a) +c4.a.push(g.a) +c3.setUint32(0,a.a,!0) +a=c4.a +g=c4.d +k=A.b8(g) +j=new A.aT(g,0,4,k.h("aT")) +j.cq(g,0,4,k.h("O.E")) +B.b.I(a,j) +if(l!=null){b4=B.bn.dB(l) +l=b4.length +c3.setUint16(0,l,!0) +k=c4.a +j=c4.d +i=A.b8(j) +h=new A.aT(j,0,2,i.h("aT")) +h.cq(j,0,2,i.h("O.E")) +B.b.I(k,h) +h=c4.a +k=b4.buffer +i=b4.byteOffset +l=new Uint8Array(k,i,l) +B.b.I(h,l)}else{c3.setUint16(0,0,!0) +l=c4.a +k=c4.d +j=A.b8(k) +i=new A.aT(k,0,2,j.h("aT")) +i.cq(k,0,2,j.h("O.E")) +B.b.I(l,i)}b4=B.bn.dB(o) +o=b4.length +c3.setUint16(0,o,!0) +l=c4.a +k=c4.d +j=A.b8(k) +i=new A.aT(k,0,2,j.h("aT")) +i.cq(k,0,2,j.h("O.E")) +B.b.I(l,i) +i=c4.a +l=b4.buffer +j=b4.byteOffset +o=new Uint8Array(l,j,o) +B.b.I(i,o)}for(c2=c5.z,p=c2.length,o=c5.w,l=c5.x,k=c5.e,n=0;n")) +a0.cq(g,0,2,a.h("O.E")) +B.b.I(j,a0) +c3.setUint16(0,i.gF(i),!0) +a0=c4.a +j=c4.d +g=A.b8(j) +a=new A.aT(j,0,2,g.h("aT")) +a.cq(j,0,2,g.h("O.E")) +B.b.I(a0,a) +a=c4.a +b1=B.f.bx(a.length,4) +if(b1!==0){j=$.Dj() +g=4-b1 +a0=A.b8(j) +a1=new A.aT(j,0,g,a0.h("aT")) +a1.cq(j,0,g,a0.h("O.E")) +B.b.I(a,a1)}j=c4.a +g=i.buffer +a=i.byteOffset +i=i.gF(i) +i=new Uint8Array(g,a,4*i) +B.b.I(j,i) +c3.setUint16(0,h.gF(h),!0) +j=c4.a +i=c4.d +g=A.b8(i) +a=new A.aT(i,0,2,g.h("aT")) +a.cq(i,0,2,g.h("O.E")) +B.b.I(j,a) +a=c4.a +b1=B.f.bx(a.length,2) +if(b1!==0){j=$.Dj() +i=2-b1 +g=A.b8(j) +a0=new A.aT(j,0,i,g.h("aT")) +a0.cq(j,0,i,g.h("O.E")) +B.b.I(a,a0)}j=c4.a +i=h.buffer +g=h.byteOffset +h=h.gF(h) +i=new Uint8Array(i,g,2*h) +B.b.I(j,i) +break +case 2:j=s.i(0,a9.d) +j.toString +c4.jb(B.d4) +c4.qu() +c4.a.push(37) +c3.setUint16(0,j,!0) +j=c4.a +i=c4.d +h=A.b8(i) +g=new A.aT(i,0,2,h.h("aT")) +g.cq(i,0,2,h.h("O.E")) +B.b.I(j,g) +break +case 3:c4.jb(B.d4) +c4.qu() +c4.a.push(38) +break +case 4:j=a3.i(0,a9.c) +j.toString +c4.jb(B.d4) +c4.qu() +c4.a.push(42) +c3.setUint16(0,j,!0) +j=c4.a +i=c4.d +h=A.b8(i) +g=new A.aT(i,0,2,h.h("aT")) +g.cq(i,0,2,h.h("O.E")) +B.b.I(j,g) +break +case 5:c4.jb(B.d4) +c4.qu() +c4.a.push(43) +break +case 8:j=a9.f +j.toString +b6=l[j] +j=b6.a +i=b6.b +h=b6.c +g=b6.d +a=b6.e.wy() +c4.jb(B.d4) +a0=c4.z++ +c4.a.push(49) +c3.setUint16(0,a0,!0) +a0=c4.a +a1=c4.d +a2=A.b8(a1) +b0=new A.aT(a1,0,2,a2.h("aT")) +b0.cq(a1,0,2,a2.h("O.E")) +B.b.I(a0,b0) +c3.setFloat32(0,j,!0) +j=c4.a +b0=c4.d +a0=A.b8(b0) +a1=new A.aT(b0,0,4,a0.h("aT")) +a1.cq(b0,0,4,a0.h("O.E")) +B.b.I(j,a1) +c3.setFloat32(0,i,!0) +i=c4.a +a1=c4.d +j=A.b8(a1) +a0=new A.aT(a1,0,4,j.h("aT")) +a0.cq(a1,0,4,j.h("O.E")) +B.b.I(i,a0) +c3.setFloat32(0,h,!0) +h=c4.a +a0=c4.d +j=A.b8(a0) +i=new A.aT(a0,0,4,j.h("aT")) +i.cq(a0,0,4,j.h("O.E")) +B.b.I(h,i) +c3.setFloat32(0,g,!0) +g=c4.a +i=c4.d +j=A.b8(i) +h=new A.aT(i,0,4,j.h("aT")) +h.cq(i,0,4,j.h("O.E")) +B.b.I(g,h) +j=a.length +c4.a.push(j) +i=c4.a +b1=B.f.bx(i.length,8) +if(b1!==0){h=$.Dj() +g=8-b1 +a0=A.b8(h) +a1=new A.aT(h,0,g,a0.h("aT")) +a1.cq(h,0,g,a0.h("O.E")) +B.b.I(i,a1)}i=c4.a +h=a.buffer +a=a.byteOffset +j=new Uint8Array(h,a,8*j) +B.b.I(i,j) +break +case 9:j=a9.c +j.toString +c4.jb(B.d4) +c4.qu() +c4.a.push(51) +c3.setUint16(0,j,!0) +j=c4.a +i=c4.d +h=A.b8(i) +g=new A.aT(i,0,2,h.h("aT")) +g.cq(i,0,2,h.h("O.E")) +B.b.I(j,g) +break +case 6:j=a9.c +j.toString +i=a9.d +h=s.i(0,i) +i=r.i(0,i) +g=a9.e +c4.jb(B.d4) +c4.qu() +c4.a.push(44) +c3.setUint16(0,j,!0) +j=c4.a +a=c4.d +a0=A.b8(a) +a1=new A.aT(a,0,2,a0.h("aT")) +a1.cq(a,0,2,a0.h("O.E")) +B.b.I(j,a1) +c3.setUint16(0,h==null?c0:h,!0) +j=c4.a +h=c4.d +a=A.b8(h) +a0=new A.aT(h,0,2,a.h("aT")) +a0.cq(h,0,2,a.h("O.E")) +B.b.I(j,a0) +c3.setUint16(0,i==null?c0:i,!0) +j=c4.a +i=c4.d +h=A.b8(i) +a=new A.aT(i,0,2,h.h("aT")) +a.cq(i,0,2,h.h("O.E")) +B.b.I(j,a) +c3.setUint16(0,g==null?c0:g,!0) +j=c4.a +i=c4.d +h=A.b8(i) +g=new A.aT(i,0,2,h.h("aT")) +g.cq(i,0,2,h.h("O.E")) +B.b.I(j,g) +break +case 7:j=a9.c +j.toString +b7=o[j] +j=b7.a +i=b7.b +h=i.a +g=i.b +a=b7.c +a=a==null?b9:a.wy() +c4.jb(B.d4) +c4.qu() +c4.a.push(47) +c3.setUint16(0,j,!0) +j=c4.a +a0=c4.d +a1=A.b8(a0) +a2=new A.aT(a0,0,2,a1.h("aT")) +a2.cq(a0,0,2,a1.h("O.E")) +B.b.I(j,a2) +c3.setFloat32(0,h,!0) +a2=c4.a +j=c4.d +a0=A.b8(j) +a1=new A.aT(j,0,4,a0.h("aT")) +a1.cq(j,0,4,a0.h("O.E")) +B.b.I(a2,a1) +c3.setFloat32(0,g,!0) +a1=c4.a +a2=c4.d +j=A.b8(a2) +a0=new A.aT(a2,0,4,j.h("aT")) +a0.cq(a2,0,4,j.h("O.E")) +B.b.I(a1,a0) +c3.setFloat32(0,i.c-h,!0) +h=c4.a +a0=c4.d +j=A.b8(a0) +a1=new A.aT(a0,0,4,j.h("aT")) +a1.cq(a0,0,4,j.h("O.E")) +B.b.I(h,a1) +c3.setFloat32(0,i.d-g,!0) +g=c4.a +i=c4.d +j=A.b8(i) +h=new A.aT(i,0,4,j.h("aT")) +h.cq(i,0,4,j.h("O.E")) +B.b.I(g,h) +j=c4.a +if(a!=null){i=a.length +j.push(i) +j=c4.a +b1=B.f.bx(j.length,8) +if(b1!==0){h=$.Dj() +g=8-b1 +a0=A.b8(h) +a1=new A.aT(h,0,g,a0.h("aT")) +a1.cq(h,0,g,a0.h("O.E")) +B.b.I(j,a1)}j=c4.a +h=a.buffer +a=a.byteOffset +i=new Uint8Array(h,a,8*i) +B.b.I(j,i)}else j.push(0) +break}}if(c4.b)A.X(A.ad("done() must not be called more than once on the same VectorGraphicsBuffer.")) +b8=A.kw(new Uint8Array(A.eG(c4.a)).buffer,0,b9) +c4.a=A.b([],c1) +c4.b=!0 +return A.jM(b8.buffer,0,b9)}, +d6(a,b,c){var s=a.b,r=a.a,q=A.bVT(s,r) +if(q instanceof A.va)return c.a(A.bPv(A.fy(A.ay(c).a,null)).Um(q.d,s).gZh()) +else throw A.d(A.c3("No function at address "+r+" was found (but a global symbol)!",null))}, +bSE(a,b,c,d){var s=A.a5(b).h("W<1,B>") +if(A.ay(d)===$.bvx()){A.bf6(a,A.ab(new A.W(b,A.bub(),s),!0,s.h("aI.E")),null) +d.a(null) +return null}else return A.bQu(A.bf6(a,A.ab(new A.W(b,A.bub(),s),!0,s.h("aI.E")),null),c,d)}, +bQw(a){if(A.cU(a)||typeof a=="number"||A.kZ(a))return a +else if(a instanceof A.a0)return a.a +else throw A.d(A.a6C("Could not convert dart type "+J.ai(a).j(0)+" to a JavaScript type!"))}, +bPv(a){var s,r,q=J.bdQ(B.b.ga_(a.split("=>"))) +if(B.d.c4(q,$.bAI()))throw A.d(A.a6C("Nesting pointers is only supported to a deepth of 2!\nThis means that you can write Pointer> but not Pointer>>, ...")) +s=$.bdx() +r=s.i(0,q) +if(r!=null)return r +else if(B.d.c4(q,$.bAH()))throw A.d(A.a6C("Using pointers to native functions as return type is only allowed if the type of the native function is dynamic!\nThis means that only Pointer> is allowed!")) +else throw A.d(A.a6C("Unknown type "+q+" (infered from "+a+"), all marshallable types: "+A.j(A.ab(s.gdv(0),!1,t.N))))}, +l0(a){var s=null,r=$.bdx() +r.u(0,A.fy(A.ay(a.h("a0<0>")).a,s),new A.fe(s,s,a.h("fe>"))) +r.u(0,A.fy(A.ay(a.h("a0>")).a,s),new A.fe(s,s,a.h("fe>>")))}, +bQu(a,b,c){if(A.ay(c)===B.HA)if(A.cU(a))return c.a(a) +else throw A.d(A.bfK(A.ay(c),a)) +else if(A.ay(c)===B.Hz)if(typeof a=="number")return c.a(a) +else throw A.d(A.bfK(A.ay(c),a)) +else if(A.ay(c)===B.Hy)if(A.kZ(a))return c.a(a) +else throw A.d(A.bfK(A.ay(c),a)) +else if(A.ay(c)===$.bxm())if(A.cU(a))return c.a(A.em(a,b,t.ke)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bx1())if(A.cU(a))return c.a(A.em(a,b,t.wt)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bx0())if(A.cU(a))return c.a(A.em(a,b,t.ZP)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bwY())if(A.cU(a))return c.a(A.em(a,b,t.pT)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bwZ())if(A.cU(a))return c.a(A.em(a,b,t._Y)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bx_())if(A.cU(a))return c.a(A.em(a,b,t.UD)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bwW())if(A.cU(a))return c.a(A.em(a,b,t.DL)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxl())if(A.cU(a))return c.a(A.em(a,b,t.di)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxi())if(A.cU(a))return c.a(A.em(a,b,t.i2)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxj())if(A.cU(a))return c.a(A.em(a,b,t.QG)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxk())if(A.cU(a))return c.a(A.em(a,b,t.cG)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bwX())if(A.cU(a))return c.a(A.em(a,b,t.AC)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bwV())if(A.cU(a))return c.a(A.em(a,b,t.g9)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bx3())if(A.cU(a))return c.a(A.em(a,b,t.er)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bx2())if(A.cU(a))return c.a(A.em(a,b,t.FM)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxh())if(A.cU(a))return c.a(A.em(a,b,t.uX)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxb())if(A.cU(a))return c.a(A.em(a,b,t.Gf)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxa())if(A.cU(a))return c.a(A.em(a,b,t.uU)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bx7())if(A.cU(a))return c.a(A.em(a,b,t.oa)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bx8())if(A.cU(a))return c.a(A.em(a,b,t.ic)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bx9())if(A.cU(a))return c.a(A.em(a,b,t.qc)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bx5())if(A.cU(a))return c.a(A.em(a,b,t.g6)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxg())if(A.cU(a))return c.a(A.em(a,b,t.Ob)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxd())if(A.cU(a))return c.a(A.em(a,b,t.Fg)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxe())if(A.cU(a))return c.a(A.em(a,b,t.Bl)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxf())if(A.cU(a))return c.a(A.em(a,b,t.nr)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bx4())if(A.cU(a))return c.a(A.em(a,b,t.ru)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bx6())if(A.cU(a))return c.a(A.em(a,b,t.Gj)) +else throw A.d(A.eS(a)) +else if(A.ay(c)===$.bxc())if(A.cU(a))return c.a(A.em(a,b,t.P6)) +else throw A.d(A.eS(a)) +else throw A.d(A.a6C("Can not back-marshall to type "+A.ay(c).j(0)+" (object type is "+J.ai(a).j(0)))}, +xD(a){return A.fy(A.ay(a).a,null)}, +bMk(a){var s +for(s=a.ir$;s!=null;s=s.gbs(s))if(s instanceof A.lG)return s +return null}, +buj(a,b,c,d){return new A.aeP(a,B.mI,d,c,!1,!1,!1)}},B={} +var w=[A,J,B] +var $={} +A.Ku.prototype={ +sUC(a){var s,r,q,p=this +if(J.f(a,p.c))return +if(a==null){p.Pk() +p.c=null +return}s=p.a.$0() +r=a.a +q=s.a +if(rr){p.Pk() +p.b=A.dn(A.dE(0,r-q),p.gSN())}p.c=a}, +Pk(){var s=this.b +if(s!=null)s.bq(0) +this.b=null}, +aKe(){var s=this,r=s.a.$0(),q=s.c,p=r.a +q=q.a +if(p>=q){s.b=null +q=s.d +if(q!=null)q.$0()}else s.b=A.dn(A.dE(0,q-p),s.gSN())}} +A.awi.prototype={ +yy(){var s=0,r=A.r(t.H),q=this,p +var $async$yy=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:s=2 +return A.x(q.a.$0(),$async$yy) +case 2:p=q.b.$0() +s=3 +return A.x(t.L0.b(p)?p:A.cO(p,t.z),$async$yy) +case 3:return A.p(null,r)}}) +return A.q($async$yy,r)}, +aXN(){return A.bF6(new A.awm(this),new A.awn(this))}, +aFG(){return A.bF3(new A.awj(this))}, +a78(){return A.bF4(new A.awk(this),new A.awl(this))}} +A.awm.prototype={ +$0(){var s=0,r=A.r(t.e),q,p=this,o +var $async$$0=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:o=p.a +s=3 +return A.x(o.yy(),$async$$0) +case 3:q=o.a78() +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$$0,r)}, +$S:394} +A.awn.prototype={ +$1(a){return this.ajp(a)}, +$0(){return this.$1(null)}, +ajp(a){var s=0,r=A.r(t.e),q,p=this,o +var $async$$1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=p.a +s=3 +return A.x(o.a.$1(a),$async$$1) +case 3:q=o.aFG() +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$$1,r)}, +$S:269} +A.awj.prototype={ +$1(a){return this.ajo(a)}, +$0(){return this.$1(null)}, +ajo(a){var s=0,r=A.r(t.e),q,p=this,o,n +var $async$$1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=p.a +n=o.b.$0() +s=3 +return A.x(t.L0.b(n)?n:A.cO(n,t.z),$async$$1) +case 3:q=o.a78() +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$$1,r)}, +$S:269} +A.awk.prototype={ +$1(a){var s,r,q,p=$.bF().geV(),o=p.a,n=a.hostElement +n.toString +s=a.viewConstraints +r=$.bsT +$.bsT=r+1 +q=new A.aiJ(r,o,A.bmv(n),s,B.fX,A.blB(n)) +q.a1J(r,o,n,s) +p.ahC(q,a) +return r}, +$S:366} +A.awl.prototype={ +$1(a){return $.bF().geV().ada(a)}, +$S:267} +A.Lc.prototype={ +W(){return"BrowserEngine."+this.b}} +A.rS.prototype={ +W(){return"OperatingSystem."+this.b}} +A.ayj.prototype={ +gcQ(a){var s=this.d +if(s==null){this.PU() +s=this.d}s.toString +return s}, +gdX(){if(this.y==null)this.PU() +var s=this.e +s.toString +return s}, +PU(){var s,r,q,p,o,n,m,l,k=this,j=!1,i=null,h=k.y +if(h!=null){A.yP(h,0) +h=k.y +h.toString +A.yO(h,0) +k.y=null}h=k.x +s=h!=null&&h.length!==0 +if(s){h.toString +r=B.b.di(h,0) +k.y=r +i=r +j=!0}else{h=k.f +$.cF() +q=self.window.devicePixelRatio +if(q===0)q=1 +p=k.r +o=self.window.devicePixelRatio +if(o===0)o=1 +i=k.a28(h,p) +n=i +k.y=n +if(n==null){A.buB() +i=k.a28(h,p)}n=i.style +A.M(n,"position","absolute") +A.M(n,"width",A.j(h/q)+"px") +A.M(n,"height",A.j(p/o)+"px")}if(!J.f(k.z.lastChild,i))k.z.append(i) +try{if(j)i.style.removeProperty("z-index") +h=A.lZ(i,"2d",null) +h.toString +k.d=t.e.a(h)}catch(m){}h=k.d +if(h==null){A.buB() +h=A.lZ(i,"2d",null) +h.toString +h=k.d=t.e.a(h)}q=k.as +k.e=new A.aAa(h,k,q,B.bF,B.eR,B.fQ) +l=k.gcQ(0) +l.save();++k.Q +A.blQ(l,1,0,0,1,0,0) +if(s)l.clearRect(0,0,k.f*q,k.r*q) +$.cF() +h=self.window.devicePixelRatio +if(h===0)h=1 +p=self.window.devicePixelRatio +if(p===0)p=1 +l.scale(h*q,p*q) +k.aGu()}, +a28(a,b){var s=this.as +return A.bWs(B.c.d0(a*s),B.c.d0(b*s))}, +af(a){var s,r,q,p,o,n=this +n.aqV(0) +if(n.y!=null){s=n.d +if(s!=null)try{s.font=""}catch(q){r=A.b2(q) +if(!J.f(r.name,"NS_ERROR_FAILURE"))throw q}}if(n.y!=null){n.Sg() +n.e.bF(0) +p=n.w +if(p==null)p=n.w=A.b([],t.A) +o=n.y +o.toString +p.push(o) +n.e=n.d=null}n.x=n.w +n.e=n.d=n.y=n.w=null}, +a7D(a,b,c,d){var s,r,q,p,o,n,m,l,k,j=this,i=j.gcQ(0) +if(d!=null)for(s=d.length,r=j.as,q=t.Ci;a>>16&255,m>>>8&255,m&255).a)) +s.translate(-5e4,0) +l=new Float32Array(2) +m=$.cF().d +if(m==null){m=self.window.devicePixelRatio +if(m===0)m=1}l[0]=5e4*m +m=i.b +m.c.aiC(l) +k=l[0] +j=l[1] +l[1]=0 +l[0]=0 +m.c.aiC(l) +A.beB(s,k-l[0]) +A.beC(s,j-l[1])}}, +qb(){var s,r=this,q=r.z +if((q==null?null:q.x)!=null){q=$.eb() +q=q===B.au}else q=!1 +if(q)r.a.restore() +q=r.Q +if(q!=null){q=q.gae(q) +s=r.Q +r.a.translate(-q,-s.gaj(s)) +r.Q=null}}, +lD(a){var s=this.a +if(a===B.u)s.stroke() +else A.aBF(s,null)}, +bF(a){var s,r=this,q=r.a +A.aBG(q,"") +s=q.fillStyle +r.r=s==null?null:s +A.aBH(q,"") +s=q.strokeStyle +r.w=s==null?null:s +q.shadowBlur=0 +A.beA(q,"none") +A.beB(q,0) +A.beC(q,0) +q.globalCompositeOperation="source-over" +r.d=B.bF +A.bez(q,1) +r.x=1 +q.lineCap="butt" +r.e=B.eR +q.lineJoin="miter" +r.f=B.fQ +r.Q=null}} +A.ap2.prototype={ +af(a){B.b.af(this.a) +this.b=null +this.c=A.fu()}, +bU(a){var s=this.c,r=new A.cL(new Float32Array(16)) +r.v(s) +s=this.b +s=s==null?null:A.iN(s,!0,t.Sv) +this.a.push(new A.aaW(r,s))}, +bw(a){var s,r=this.a +if(r.length===0)return +s=r.pop() +this.c=s.a +this.b=s.b}, +aJ(a,b,c){this.c.aJ(0,b,c)}, +ff(a,b,c){this.c.ff(0,b,c)}, +oO(a,b){this.c.ai7(0,B.Fg,b)}, +az(a,b){this.c.bL(0,new A.cL(b))}, +mZ(a){var s,r,q=this.b +if(q==null)q=this.b=A.b([],t.CK) +s=this.c +r=new A.cL(new Float32Array(16)) +r.v(s) +q.push(new A.Br(a,null,null,r))}, +vp(a){var s,r,q=this.b +if(q==null)q=this.b=A.b([],t.CK) +s=this.c +r=new A.cL(new Float32Array(16)) +r.v(s) +q.push(new A.Br(null,a,null,r))}, +m9(a,b){var s,r,q=this.b +if(q==null)q=this.b=A.b([],t.CK) +s=this.c +r=new A.cL(new Float32Array(16)) +r.v(s) +q.push(new A.Br(null,null,b,r))}} +A.n0.prototype={ +i6(a,b,c,d){var s=d.ay,r=this.a,q=a.b,p=d.a +if(s===B.hA){q===$&&A.c() +q=q.a +q===$&&A.c() +q=q.a +q.toString +A.a3(r,"drawImageRectCubic",[q,A.iY(b),A.iY(c),0.3333333333333333,0.3333333333333333,p])}else{q===$&&A.c() +q=q.a +q===$&&A.c() +q=q.a +q.toString +A.a3(r,"drawImageRectOptions",[q,A.iY(b),A.iY(c),A.bdc(s),A.biP(s),p])}}, +tD(a){var s=a.a +s===$&&A.c() +s=s.a +s.toString +this.a.drawPicture(s)}, +hl(a,b){var s=b==null?null:b.a +A.bgH(this.a,s,A.iY(a),null,null)}, +akx(a,b,c){t.p1.a(b) +b.Xk(new A.ayD(this,c,a))}} +A.ayD.prototype={ +$1(a){A.bgH(this.a.a,this.b.a,A.iY(this.c),a,0)}, +$S:2} +A.b8K.prototype={ +$1(a){var s=A.hh().b +if(s==null)s=null +else{s=s.canvasKitBaseUrl +if(s==null)s=null}return(s==null?"https://www.gstatic.com/flutter-canvaskit/55eae6864b296dd9f43b2cc7577ec256e5c32a8d/":s)+a}, +$S:45} +A.b90.prototype={ +$1(a){this.a.remove() +this.b.fC(0,!0)}, +$S:2} +A.b9_.prototype={ +$1(a){this.a.remove() +this.b.fC(0,!1)}, +$S:2} +A.a0c.prototype={ +bU(a){B.c.aw(this.a.a.save())}, +hl(a,b){var s=t.qo,r=this.a +if(a==null){s.a(b) +A.bgH(r.a,b.a,null,null,null)}else r.hl(a,s.a(b))}, +bw(a){this.a.a.restore()}, +aJ(a,b,c){this.a.a.translate(b,c)}, +ff(a,b,c){var s=c==null?b:c +this.a.a.scale(b,s) +return null}, +au(a,b){return this.ff(0,b,null)}, +oO(a,b){this.a.a.rotate(b*180/3.141592653589793,0,0)}, +az(a,b){if(J.bo(b)!==16)throw A.d(A.c3('"matrix4" must have 16 entries.',null)) +this.a.a.concat(A.buT(A.xC(b)))}, +CR(a,b,c){this.a.a.clipRect(A.iY(a),$.bjL()[b.a],c)}, +mZ(a){return this.CR(a,B.f7,!0)}, +JE(a,b){return this.CR(a,B.f7,b)}, +JD(a,b){this.a.a.clipRRect(A.Zp(a),$.avn(),b)}, +vp(a){return this.JD(a,!0)}, +CQ(a,b,c){var s=t.E_.a(b).a +s===$&&A.c() +s=s.a +s.toString +this.a.a.clipPath(s,$.avn(),c)}, +m9(a,b){return this.CQ(0,b,!0)}, +Ds(a,b){this.a.a.drawColorInt(a.a,$.Ks()[b.a])}, +e7(a,b,c){A.a3(this.a.a,"drawLine",[a.a,a.b,b.a,b.b,t.qo.a(c).a])}, +vF(a){this.a.a.drawPaint(t.qo.a(a).a)}, +b7(a,b){t.qo.a(b) +this.a.a.drawRect(A.iY(a),b.a)}, +dm(a,b){t.qo.a(b) +this.a.a.drawRRect(A.Zp(a),b.a)}, +vD(a,b,c){t.qo.a(c) +this.a.a.drawDRRect(A.Zp(a),A.Zp(b),c.a)}, +z0(a,b){t.qo.a(b) +this.a.a.drawOval(A.iY(a),b.a)}, +cs(a,b,c){this.a.a.drawCircle(a.a,a.b,b,t.qo.a(c).a)}, +a3(a,b){var s +t.E_.a(a) +t.qo.a(b) +s=a.a +s===$&&A.c() +s=s.a +s.toString +this.a.a.drawPath(s,b.a)}, +mg(a,b,c,d){var s,r,q,p,o,n +t.XY.a(b) +t.qo.a(d) +s=d.ay +r=this.a.a +q=b.b +p=c.a +o=c.b +n=d.a +if(s===B.hA){q===$&&A.c() +q=q.a +q===$&&A.c() +q=q.a +q.toString +A.a3(r,"drawImageCubic",[q,p,o,0.3333333333333333,0.3333333333333333,n])}else{q===$&&A.c() +q=q.a +q===$&&A.c() +q=q.a +q.toString +A.a3(r,"drawImageOptions",[q,p,o,A.bdc(s),A.biP(s),n])}}, +i6(a,b,c,d){this.a.i6(t.XY.a(a),b,c,t.qo.a(d))}, +adl(a,b,c,d){var s +t.XY.a(a) +t.qo.a(d) +s=a.b +s===$&&A.c() +s=s.a +s===$&&A.c() +s=s.a +s.toString +A.a3(this.a.a,"drawImageNine",[s,A.iY(b),A.iY(c),A.bdc(d.ay),d.a])}, +tD(a){var s=t.Bn.a(a).a +s===$&&A.c() +s=s.a +s.toString +this.a.a.drawPicture(s)}, +qZ(a,b){var s=t.z7.a(a).a +s===$&&A.c() +s=s.a +s.toString +this.a.a.drawParagraph(s,b.a,b.b)}, +tE(a,b,c){var s,r=A.buS(b) +t.qo.a(c) +s=r.toTypedArray() +this.a.a.drawPoints($.bzT()[a.a],s,c.a) +self.window.flutterCanvasKit.Free(r)}, +z1(a,b,c){var s +t.V1.a(a) +t.qo.a(c) +s=a.f +s===$&&A.c() +s=s.a +s.toString +this.a.a.drawVertices(s,$.Ks()[b.a],c.a)}, +adj(a,b,c,d,e,f,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g=c.length +if(b.length!==g)throw A.d(A.c3(u.v,null)) +s=d!=null +if(s){r=d.length +r=r!==0&&r!==g}else r=!1 +if(r)throw A.d(A.c3(u.d,null)) +r=g*4 +q=new Float32Array(r) +p=new Float32Array(r) +for(o=0;o>>24&255)*0.039),b.gm(b)>>>16&255,b.gm(b)>>>8&255,b.gm(b)&255) +p=A.S(B.c.ai((b.gm(b)>>>24&255)*0.25),b.gm(b)>>>16&255,b.gm(b)>>>8&255,b.gm(b)&255) +o=t.e.a({ambient:A.Kl(q),spot:A.Kl(p)}) +n=$.cp.bb().computeTonalColors(o) +m=a.a +m===$&&A.c() +m=m.a +m.toString +l=new Float32Array(3) +l[2]=s*c +s=new Float32Array(3) +s[0]=0 +s[1]=-1 +s[2]=1 +A.a3(this.a.a,"drawShadow",[m,l,s,1.3333333333333333,n.ambient,n.spot,r|4])}, +$iDI:1} +A.a6w.prototype={ +gL(a){var s=this.a +return s.gL(s)}, +k(a,b){if(b==null)return!1 +if(A.J(this)!==J.ai(b))return!1 +return b instanceof A.a6w&&b.a.k(0,this.a)}, +j(a){return this.a.j(0)}} +A.a0D.prototype={$io0:1} +A.Lt.prototype={ +By(){return A.bS5(this.a,this.b)}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +if(A.J(this)!==J.ai(b))return!1 +return b instanceof A.Lt&&b.a.k(0,this.a)&&b.b===this.b}, +j(a){return"ColorFilter.mode("+this.a.j(0)+", "+this.b.j(0)+")"}} +A.DT.prototype={ +gaDs(){var s,r,q=new Float32Array(20) +for(s=this.a,r=0;r<20;++r)if(B.b.G(B.XX,r))q[r]=s[r]/255 +else q[r]=s[r] +return q}, +By(){return $.cp.bb().ColorFilter.MakeMatrix(this.gaDs())}, +gL(a){return A.bM(this.a)}, +k(a,b){if(b==null)return!1 +return A.J(this)===J.ai(b)&&b instanceof A.DT&&A.lO(this.a,b.a)}, +j(a){return"ColorFilter.matrix("+A.j(this.a)+")"}} +A.a0L.prototype={ +By(){return $.cp.bb().ColorFilter.MakeLinearToSRGBGamma()}, +k(a,b){if(b==null)return!1 +return A.J(this)===J.ai(b)}, +gL(a){return A.eT(A.J(this))}, +j(a){return"ColorFilter.linearToSrgbGamma()"}} +A.a0Q.prototype={ +By(){return $.cp.bb().ColorFilter.MakeSRGBToLinearGamma()}, +k(a,b){if(b==null)return!1 +return A.J(this)===J.ai(b)}, +gL(a){return A.eT(A.J(this))}, +j(a){return"ColorFilter.srgbToLinearGamma()"}} +A.DS.prototype={ +By(){var s,r=$.cp.bb().ColorFilter,q=this.a.b +q===$&&A.c() +q=q.a +q.toString +s=this.b.b +s===$&&A.c() +s=s.a +s.toString +return r.MakeCompose(q,s)}, +k(a,b){if(b==null)return!1 +if(!(b instanceof A.DS))return!1 +return b.a.k(0,this.a)&&b.b.k(0,this.b)}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"ColorFilter.compose("+this.a.j(0)+", "+this.b.j(0)+")"}} +A.a2v.prototype={ +gTL(){var s,r=this,q=r.b +if(q===$){s=r.a.$0() +J.bki(s) +r.b!==$&&A.N() +r.b=s +q=s}return q}, +ajQ(){var s,r=this.d,q=this.c +if(r.length!==0){s=r.pop() +q.push(s) +return s}else{s=this.a.$0() +J.bki(s) +q.push(s) +return s}}, +t(){var s,r,q,p +for(s=this.d,r=s.length,q=0;q"))}, +auN(a){var s,r,q,p,o,n,m=this.at +if(m.aR(0,a)){s=null.querySelector("#sk_path_defs") +s.toString +r=A.b([],t.A) +q=m.i(0,a) +q.toString +for(p=t.qr,p=A.j3(new A.x3(s.children,p),p.h("z.E"),t.e),s=J.az(p.a),p=A.w(p),p=p.h("@<1>").ak(p.y[1]).y[1];s.H();){o=p.a(s.ga1(s)) +if(q.G(0,o.id))r.push(o)}for(s=r.length,n=0;n0;--p){n=q[p] +if(n instanceof A.hU){if(!o){B.b.hO(r,0,n.a) +o=!0 +continue}B.b.di(q,p) +B.b.hO(r,0,n.a);--s +if(s===0)break}}for(p=q.length-1;p>0;--p){n=q[p] +if(n instanceof A.hU){l=n.a +B.b.af(l) +B.b.I(l,r) +break}}B.b.I(m.a,q) +return m}, +aKT(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this +if(a.vK(d.x))return +s=d.aye(d.x,a) +r=A.a5(s).h("bg<1>") +q=A.ab(new A.bg(s,new A.aGQ(),r),!0,r.h("z.E")) +p=A.biA(q) +for(r=p.length,o=0;o") +B.b.al(A.ab(new A.bk(r,q),!0,q.h("z.E")),s.gadc()) +q=t.qN +s.c=new A.MI(A.b([],q),A.b([],q)) +q=s.d +q.af(0) +s.aPq() +q.af(0) +r.af(0) +s.f.af(0) +B.b.af(s.w) +B.b.af(s.r) +s.x=new A.Hb(A.b([],t.RX))}} +A.aGS.prototype={ +$1(a){var s=a.b +s.toString +return s}, +$S:356} +A.aGQ.prototype={ +$1(a){return a!==-1}, +$S:40} +A.aGR.prototype={ +$2(a,b){var s=this.b[b],r=this.a +if(s!==-1){s=t.mg.a(r.x.a[s]) +a.b=s.b +s.b=null}else a.b=r.b.gKn().ajQ()}, +$S:390} +A.At.prototype={ +W(){return"MutatorType."+this.b}} +A.op.prototype={ +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(!(b instanceof A.op))return!1 +s=r.a +if(s!==b.a)return!1 +switch(s.a){case 0:return J.f(r.b,b.b) +case 1:return J.f(r.c,b.c) +case 2:return r.d==b.d +case 3:return r.e==b.e +case 4:return r.f==b.f +default:return!1}}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.Pa.prototype={ +k(a,b){if(b==null)return!1 +if(b===this)return!0 +return b instanceof A.Pa&&A.lO(b.a,this.a)}, +gL(a){return A.bM(this.a)}, +gar(a){var s=this.a,r=A.a5(s).h("cz<1>") +s=new A.cz(s,r) +return new A.cR(s,s.gF(0),r.h("cR"))}} +A.MI.prototype={} +A.abJ.prototype={ +gWP(){var s,r=this.b +if(r===$){s=A.hh().b +if(s==null)s=null +else{s=s.useColorEmoji +if(s==null)s=null}s=s===!0 +r=this.b=A.bFg(new A.aSZ(this),A.b([A.aA("Noto Sans","notosans/v32/o-0IIpQlx3QUlC5A4PNb4j5Ba_2c7A.ttf",!0),A.aA("Noto Color Emoji","notocoloremoji/v25/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFab5s79iz64w.ttf",s),A.aA("Noto Emoji","notoemoji/v47/bMrnmSyK7YY-MEu6aWjPDs-ar6uWaGWuob-r0jwvS-FGJCMY.ttf",!s),A.aA("Noto Music","notomusic/v20/pe0rMIiSN5pO63htf1sxIteQB9Zra1U.ttf",!0),A.aA("Noto Sans Symbols","notosanssymbols/v41/rP2up3q65FkAtHfwd-eIS2brbDN6gxP34F9jRRCe4W3gfQ8gavVFRkzrbQ.ttf",!0),A.aA("Noto Sans Symbols 2","notosanssymbols2/v22/I_uyMoGduATTei9eI8daxVHDyfisHr71ypPqfX71-AI.ttf",!0),A.aA("Noto Sans Adlam","notosansadlam/v22/neIczCCpqp0s5pPusPamd81eMfjPonvqdbYxxpgufnv0TGnBZLwhuvk.ttf",!0),A.aA("Noto Sans Anatolian Hieroglyphs","notosansanatolianhieroglyphs/v16/ijw9s4roRME5LLRxjsRb8A0gKPSWq4BbDmHHu6j2pEtUJzZWXybIymc5QYo.ttf",!0),A.aA("Noto Sans Arabic","notosansarabic/v18/nwpxtLGrOAZMl5nJ_wfgRg3DrWFZWsnVBJ_sS6tlqHHFlhQ5l3sQWIHPqzCfyGyvu3CBFQLaig.ttf",!0),A.aA("Noto Sans Armenian","notosansarmenian/v42/ZgN0jOZKPa7CHqq0h37c7ReDUubm2SEdFXp7ig73qtTY5idb74R9UdM3y2nZLorxb60iYy6zF3Eg.ttf",!0),A.aA("Noto Sans Avestan","notosansavestan/v21/bWti7ejKfBziStx7lIzKOLQZKhIJkyu9SASLji8U.ttf",!0),A.aA("Noto Sans Balinese","notosansbalinese/v24/NaPwcYvSBuhTirw6IaFn6UrRDaqje-lpbbRtYf-Fwu2Ov7fdhE5Vd222PPY.ttf",!0),A.aA("Noto Sans Bamum","notosansbamum/v27/uk-0EGK3o6EruUbnwovcbBTkkklK_Ya_PBHfNGTPEddO-_gLykxEkxA.ttf",!0),A.aA("Noto Sans Bassa Vah","notosansbassavah/v17/PN_bRee-r3f7LnqsD5sax12gjZn7mBpL5YwUpA2MBdcFn4MaAc6p34gH-GD7.ttf",!0),A.aA("Noto Sans Batak","notosansbatak/v19/gok2H6TwAEdtF9N8-mdTCQvT-Zdgo4_PHuk74A.ttf",!0),A.aA("Noto Sans Bengali","notosansbengali/v20/Cn-SJsCGWQxOjaGwMQ6fIiMywrNJIky6nvd8BjzVMvJx2mcSPVFpVEqE-6KmsolLudCk8izI0lc.ttf",!0),A.aA("Noto Sans Bhaiksuki","notosansbhaiksuki/v17/UcC63EosKniBH4iELXATsSBWdvUHXxhj8rLUdU4wh9U.ttf",!0),A.aA("Noto Sans Brahmi","notosansbrahmi/v18/vEFK2-VODB8RrNDvZSUmQQIIByV18tK1W77HtMo.ttf",!0),A.aA("Noto Sans Buginese","notosansbuginese/v18/esDM30ldNv-KYGGJpKGk18phe_7Da6_gtfuEXLmNtw.ttf",!0),A.aA("Noto Sans Buhid","notosansbuhid/v22/Dxxy8jiXMW75w3OmoDXVWJD7YwzAe6tgnaFoGA.ttf",!0),A.aA("Noto Sans Canadian Aboriginal","notosanscanadianaboriginal/v22/4C_TLjTuEqPj-8J01CwaGkiZ9os0iGVkezM1mUT-j_Lmlzda6uH_nnX1bzigWLn_yAsg0q0uhQ.ttf",!0),A.aA("Noto Sans Carian","notosanscarian/v16/LDIpaoiONgYwA9Yc6f0gUILeMIOgs7ob9yGLmfI.ttf",!0),A.aA("Noto Sans Caucasian Albanian","notosanscaucasianalbanian/v16/nKKA-HM_FYFRJvXzVXaANsU0VzsAc46QGOkWytlTs-TXrYDmoVmRSZo.ttf",!0),A.aA("Noto Sans Chakma","notosanschakma/v17/Y4GQYbJ8VTEp4t3MKJSMjg5OIzhi4JjTQhYBeYo.ttf",!0),A.aA("Noto Sans Cham","notosanscham/v29/pe06MIySN5pO62Z5YkFyQb_bbuRhe6D4yip43qfcERwcv7GykboaLg.ttf",!0),A.aA("Noto Sans Cherokee","notosanscherokee/v20/KFOPCm6Yu8uF-29fiz9vQF9YWK6Z8O10cHNA0cSkZCHYWi5PDkm5rAffjl0.ttf",!0),A.aA("Noto Sans Coptic","notosanscoptic/v20/iJWfBWmUZi_OHPqn4wq6kgqumOEd78u_VG0xR4Y.ttf",!0),A.aA("Noto Sans Cuneiform","notosanscuneiform/v17/bMrrmTWK7YY-MF22aHGGd7H8PhJtvBDWgb9JlRQueeQ.ttf",!0),A.aA("Noto Sans Cypriot","notosanscypriot/v15/8AtzGta9PYqQDjyp79a6f8Cj-3a3cxIsK5MPpahF.ttf",!0),A.aA("Noto Sans Deseret","notosansdeseret/v17/MwQsbgPp1eKH6QsAVuFb9AZM6MMr2Vq9ZnJSZtQG.ttf",!0),A.aA("Noto Sans Devanagari","notosansdevanagari/v25/TuGoUUFzXI5FBtUq5a8bjKYTZjtRU6Sgv3NaV_SNmI0b8QQCQmHn6B2OHjbL_08AlXQly-AzoFoW4Ow.ttf",!0),A.aA("Noto Sans Duployan","notosansduployan/v17/gokzH7nwAEdtF9N8-mdTDx_X9JM5wsvrFsIn6WYDvA.ttf",!0),A.aA("Noto Sans Egyptian Hieroglyphs","notosansegyptianhieroglyphs/v28/vEF42-tODB8RrNDvZSUmRhcQHzx1s7y_F9-j3qSzEcbEYindSVK8xRg7iw.ttf",!0),A.aA("Noto Sans Elbasan","notosanselbasan/v16/-F6rfiZqLzI2JPCgQBnw400qp1trvHdlre4dFcFh.ttf",!0),A.aA("Noto Sans Elymaic","notosanselymaic/v15/UqyKK9YTJW5liNMhTMqe9vUFP65ZD4AjWOT0zi2V.ttf",!0),A.aA("Noto Sans Georgian","notosansgeorgian/v42/PlIaFke5O6RzLfvNNVSitxkr76PRHBC4Ytyq-Gof7PUs4S7zWn-8YDB09HFNdpvnzFj-f5WK0OQV.ttf",!0),A.aA("Noto Sans Glagolitic","notosansglagolitic/v17/1q2ZY4-BBFBst88SU_tOj4J-4yuNF_HI4ERK4Amu7nM1.ttf",!0),A.aA("Noto Sans Gothic","notosansgothic/v16/TuGKUUVzXI5FBtUq5a8bj6wRbzxTFMX40kFQRx0.ttf",!0),A.aA("Noto Sans Grantha","notosansgrantha/v17/3y976akwcCjmsU8NDyrKo3IQfQ4o-r8cFeulHc6N.ttf",!0),A.aA("Noto Sans Gujarati","notosansgujarati/v23/wlpWgx_HC1ti5ViekvcxnhMlCVo3f5pv17ivlzsUB14gg1TMR2Gw4VceEl7MA_ypFwPM_OdiEH0s.ttf",!0),A.aA("Noto Sans Gunjala Gondi","notosansgunjalagondi/v19/bWtX7e7KfBziStx7lIzKPrcSMwcEnCv6DW7n5g0ef3PLtymzNxYL4YDE4J4vCTxEJQ.ttf",!0),A.aA("Noto Sans Gurmukhi","notosansgurmukhi/v26/w8g9H3EvQP81sInb43inmyN9zZ7hb7ATbSWo4q8dJ74a3cVrYFQ_bogT0-gPeG1OenbxZ_trdp7h.ttf",!0),A.aA("Noto Sans HK","notosanshk/v31/nKKF-GM_FYFRJvXzVXaAPe97P1KHynJFP716qHB--oWTiYjNvVA.ttf",!0),A.aA("Noto Sans Hanunoo","notosanshanunoo/v20/f0Xs0fCv8dxkDWlZSoXOj6CphMloFsEsEpgL_ix2.ttf",!0),A.aA("Noto Sans Hatran","notosanshatran/v16/A2BBn4Ne0RgnVF3Lnko-0sOBIfL_mM83r1nwzDs.ttf",!0),A.aA("Noto Sans Hebrew","notosanshebrew/v43/or3HQ7v33eiDljA1IufXTtVf7V6RvEEdhQlk0LlGxCyaeNKYZC0sqk3xXGiXd4qtoiJltutR2g.ttf",!0),A.aA("Noto Sans Imperial Aramaic","notosansimperialaramaic/v16/a8IMNpjwKmHXpgXbMIsbTc_kvks91LlLetBr5itQrtdml3YfPNno.ttf",!0),A.aA("Noto Sans Indic Siyaq Numbers","notosansindicsiyaqnumbers/v16/6xK5dTJFKcWIu4bpRBjRZRpsIYHabOeZ8UZLubTzpXNHKx2WPOpVd5Iu.ttf",!0),A.aA("Noto Sans Inscriptional Pahlavi","notosansinscriptionalpahlavi/v16/ll8UK3GaVDuxR-TEqFPIbsR79Xxz9WEKbwsjpz7VklYlC7FCVtqVOAYK0QA.ttf",!0),A.aA("Noto Sans Inscriptional Parthian","notosansinscriptionalparthian/v16/k3k7o-IMPvpLmixcA63oYi-yStDkgXuXncL7dzfW3P4TAJ2yklBJ2jNkLlLr.ttf",!0),A.aA("Noto Sans JP","notosansjp/v52/-F6jfjtqLzI2JPCgQBnw7HFyzSD-AsregP8VFBEj75vY0rw-oME.ttf",!0),A.aA("Noto Sans Javanese","notosansjavanese/v23/2V01KJkDAIA6Hp4zoSScDjV0Y-eoHAHT-Z3MngEefiidxJnkFFliZYWj4O8.ttf",!0),A.aA("Noto Sans KR","notosanskr/v36/PbyxFmXiEBPT4ITbgNA5Cgms3VYcOA-vvnIzzuoyeLTq8H4hfeE.ttf",!0),A.aA("Noto Sans Kaithi","notosanskaithi/v20/buEtppS9f8_vkXadMBJJu0tWjLwjQi0KdoZIKlo.ttf",!0),A.aA("Noto Sans Kannada","notosanskannada/v26/8vIs7xs32H97qzQKnzfeXycxXZyUmySvZWItmf1fe6TVmgop9ndpS-BqHEyGrDvNzSIMLsPKrkY.ttf",!0),A.aA("Noto Sans Kayah Li","notosanskayahli/v21/B50nF61OpWTRcGrhOVJJwOMXdca6Yecki3E06x2jVTX3WCc3CZH4EXLuKVM.ttf",!0),A.aA("Noto Sans Kharoshthi","notosanskharoshthi/v16/Fh4qPiLjKS30-P4-pGMMXCCfvkc5Vd7KE5z4rFyx5mR1.ttf",!0),A.aA("Noto Sans Khmer","notosanskhmer/v23/ijw3s5roRME5LLRxjsRb-gssOenAyendxrgV2c-Zw-9vbVUti_Z_dWgtWYuNAJz4kAbrddiA.ttf",!0),A.aA("Noto Sans Khojki","notosanskhojki/v18/-nFnOHM29Oofr2wohFbTuPPKVWpmK_d709jy92k.ttf",!0),A.aA("Noto Sans Khudawadi","notosanskhudawadi/v21/fdNi9t6ZsWBZ2k5ltHN73zZ5hc8HANlHIjRnVVXz9MY.ttf",!0),A.aA("Noto Sans Lao","notosanslao/v30/bx6lNx2Ol_ixgdYWLm9BwxM3NW6BOkuf763Clj73CiQ_J1Djx9pidOt4ccbdf5MK3riB2w.ttf",!0),A.aA("Noto Sans Lepcha","notosanslepcha/v19/0QI7MWlB_JWgA166SKhu05TekNS32AJstqBXgd4.ttf",!0),A.aA("Noto Sans Limbu","notosanslimbu/v22/3JnlSDv90Gmq2mrzckOBBRRoNJVj0MF3OHRDnA.ttf",!0),A.aA("Noto Sans Linear A","notosanslineara/v18/oPWS_l16kP4jCuhpgEGmwJOiA18FZj22zmHQAGQicw.ttf",!0),A.aA("Noto Sans Linear B","notosanslinearb/v17/HhyJU4wt9vSgfHoORYOiXOckKNB737IV3BkFTq4EPw.ttf",!0),A.aA("Noto Sans Lisu","notosanslisu/v25/uk-3EGO3o6EruUbnwovcYhz6kh57_nqbcTdjJnHP2Vwt29IlxkVdig.ttf",!0),A.aA("Noto Sans Lycian","notosanslycian/v15/QldVNSNMqAsHtsJ7UmqxBQA9r8wA5_naCJwn00E.ttf",!0),A.aA("Noto Sans Lydian","notosanslydian/v17/c4m71mVzGN7s8FmIukZJ1v4ZlcPReUPXMoIjEQI.ttf",!0),A.aA("Noto Sans Mahajani","notosansmahajani/v19/-F6sfiVqLzI2JPCgQBnw60Agp0JrvD5Fh8ARHNh4zg.ttf",!0),A.aA("Noto Sans Malayalam","notosansmalayalam/v26/sJoi3K5XjsSdcnzn071rL37lpAOsUThnDZIfPdbeSNzVakglNM-Qw8EaeB8Nss-_RuD9BFzEr6HxEA.ttf",!0),A.aA("Noto Sans Mandaic","notosansmandaic/v16/cIfnMbdWt1w_HgCcilqhKQBo_OsMI5_A_gMk0izH.ttf",!0),A.aA("Noto Sans Manichaean","notosansmanichaean/v17/taiVGntiC4--qtsfi4Jp9-_GkPZZCcrfekqCNTtFCtdX.ttf",!0),A.aA("Noto Sans Marchen","notosansmarchen/v19/aFTO7OZ_Y282EP-WyG6QTOX_C8WZMHhPk652ZaHk.ttf",!0),A.aA("Noto Sans Masaram Gondi","notosansmasaramgondi/v17/6xK_dThFKcWIu4bpRBjRYRV7KZCbUq6n_1kPnuGe7RI9WSWX.ttf",!0),A.aA("Noto Sans Math","notosansmath/v15/7Aump_cpkSecTWaHRlH2hyV5UHkG-V048PW0.ttf",!0),A.aA("Noto Sans Mayan Numerals","notosansmayannumerals/v16/PlIuFk25O6RzLfvNNVSivR09_KqYMwvvDKYjfIiE68oo6eepYQ.ttf",!0),A.aA("Noto Sans Medefaidrin","notosansmedefaidrin/v23/WwkzxOq6Dk-wranENynkfeVsNbRZtbOIdLb1exeM4ZeuabBfmErWlT318e5A3rw.ttf",!0),A.aA("Noto Sans Meetei Mayek","notosansmeeteimayek/v15/HTxAL3QyKieByqY9eZPFweO0be7M21uSphSdhqILnmrRfJ8t_1TJ_vTW5PgeFYVa.ttf",!0),A.aA("Noto Sans Meroitic","notosansmeroitic/v17/IFS5HfRJndhE3P4b5jnZ3ITPvC6i00UDgDhTiKY9KQ.ttf",!0),A.aA("Noto Sans Miao","notosansmiao/v17/Dxxz8jmXMW75w3OmoDXVV4zyZUjgUYVslLhx.ttf",!0),A.aA("Noto Sans Modi","notosansmodi/v23/pe03MIySN5pO62Z5YkFyT7jeav5qWVAgVol-.ttf",!0),A.aA("Noto Sans Mongolian","notosansmongolian/v17/VdGCAYADGIwE0EopZx8xQfHlgEAMsrToxLsg6-av1x0.ttf",!0),A.aA("Noto Sans Mro","notosansmro/v18/qWcsB6--pZv9TqnUQMhe9b39WDzRtjkho4M.ttf",!0),A.aA("Noto Sans Multani","notosansmultani/v20/9Bty3ClF38_RfOpe1gCaZ8p30BOFO1A0pfCs5Kos.ttf",!0),A.aA("Noto Sans Myanmar","notosansmyanmar/v20/AlZq_y1ZtY3ymOryg38hOCSdOnFq0En23OU4o1AC.ttf",!0),A.aA("Noto Sans NKo","notosansnko/v6/esDX31ZdNv-KYGGJpKGk2_RpMpCMHMLBrdA.ttf",!0),A.aA("Noto Sans Nabataean","notosansnabataean/v16/IFS4HfVJndhE3P4b5jnZ34DfsjO330dNoBJ9hK8kMK4.ttf",!0),A.aA("Noto Sans New Tai Lue","notosansnewtailue/v22/H4cKBW-Pl9DZ0Xe_nHUapt7PovLXAhAnY7wqaLy-OJgU3p_pdeXAYUbghFPKzeY.ttf",!0),A.aA("Noto Sans Newa","notosansnewa/v16/7r3fqXp6utEsO9pI4f8ok8sWg8n_qN4R5lNU.ttf",!0),A.aA("Noto Sans Nushu","notosansnushu/v19/rnCw-xRQ3B7652emAbAe_Ai1IYaFWFAMArZKqQ.ttf",!0),A.aA("Noto Sans Ogham","notosansogham/v17/kmKlZqk1GBDGN0mY6k5lmEmww4hrt5laQxcoCA.ttf",!0),A.aA("Noto Sans Ol Chiki","notosansolchiki/v29/N0b92TJNOPt-eHmFZCdQbrL32r-4CvhzDzRwlxOQYuVALWk267I6gVrz5gQ.ttf",!0),A.aA("Noto Sans Old Hungarian","notosansoldhungarian/v18/E213_cD6hP3GwCJPEUssHEM0KqLaHJXg2PiIgRfjbg5nCYXt.ttf",!0),A.aA("Noto Sans Old Italic","notosansolditalic/v16/TuGOUUFzXI5FBtUq5a8bh68BJxxEVam7tWlRdRhtCC4d.ttf",!0),A.aA("Noto Sans Old North Arabian","notosansoldnortharabian/v16/esDF30BdNv-KYGGJpKGk2tNiMt7Jar6olZDyNdr81zBQmUo_xw4ABw.ttf",!0),A.aA("Noto Sans Old Permic","notosansoldpermic/v17/snf1s1q1-dF8pli1TesqcbUY4Mr-ElrwKLdXgv_dKYB5.ttf",!0),A.aA("Noto Sans Old Persian","notosansoldpersian/v16/wEOjEAbNnc5caQTFG18FHrZr9Bp6-8CmIJ_tqOlQfx9CjA.ttf",!0),A.aA("Noto Sans Old Sogdian","notosansoldsogdian/v16/3JnjSCH90Gmq2mrzckOBBhFhdrMst48aURt7neIqM-9uyg.ttf",!0),A.aA("Noto Sans Old South Arabian","notosansoldsoutharabian/v16/3qT5oiOhnSyU8TNFIdhZTice3hB_HWKsEnF--0XCHiKx1OtDT9HwTA.ttf",!0),A.aA("Noto Sans Old Turkic","notosansoldturkic/v17/yMJNMJVya43H0SUF_WmcGEQVqoEMKDKbsE2RjEw-Vyws.ttf",!0),A.aA("Noto Sans Oriya","notosansoriya/v27/AYCppXfzfccDCstK_hrjDyADv5e9748vhj3CJBLHIARtgD6TJQS0dJT5Ivj0f6_c6LhHBRe-.ttf",!0),A.aA("Noto Sans Osage","notosansosage/v18/oPWX_kB6kP4jCuhpgEGmw4mtAVtXRlaSxkrMCQ.ttf",!0),A.aA("Noto Sans Osmanya","notosansosmanya/v18/8vIS7xs32H97qzQKnzfeWzUyUpOJmz6kR47NCV5Z.ttf",!0),A.aA("Noto Sans Pahawh Hmong","notosanspahawhhmong/v18/bWtp7e_KfBziStx7lIzKKaMUOBEA3UPQDW7krzc_c48aMpM.ttf",!0),A.aA("Noto Sans Palmyrene","notosanspalmyrene/v16/ZgNPjOdKPa7CHqq0h37c_ASCWvH93SFCPnK5ZpdNtcA.ttf",!0),A.aA("Noto Sans Pau Cin Hau","notosanspaucinhau/v20/x3d-cl3IZKmUqiMg_9wBLLtzl22EayN7ehIdjEWqKMxsKw.ttf",!0),A.aA("Noto Sans Phags Pa","notosansphagspa/v15/pxiZyoo6v8ZYyWh5WuPeJzMkd4SrGChkqkSsrvNXiA.ttf",!0),A.aA("Noto Sans Phoenician","notosansphoenician/v17/jizFRF9Ksm4Bt9PvcTaEkIHiTVtxmFtS5X7Jot-p5561.ttf",!0),A.aA("Noto Sans Psalter Pahlavi","notosanspsalterpahlavi/v16/rP2Vp3K65FkAtHfwd-eISGznYihzggmsicPfud3w1G3KsUQBct4.ttf",!0),A.aA("Noto Sans Rejang","notosansrejang/v21/Ktk2AKuMeZjqPnXgyqrib7DIogqwN4O3WYZB_sU.ttf",!0),A.aA("Noto Sans Runic","notosansrunic/v17/H4c_BXWPl9DZ0Xe_nHUaus7W68WWaxpvHtgIYg.ttf",!0),A.aA("Noto Sans SC","notosanssc/v36/k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaG9_FnYxNbPzS5HE.ttf",!0),A.aA("Noto Sans Saurashtra","notosanssaurashtra/v23/ea8GacQ0Wfz_XKWXe6OtoA8w8zvmYwTef9ndjhPTSIx9.ttf",!0),A.aA("Noto Sans Sharada","notosanssharada/v16/gok0H7rwAEdtF9N8-mdTGALG6p0kwoXLPOwr4H8a.ttf",!0),A.aA("Noto Sans Shavian","notosansshavian/v17/CHy5V_HZE0jxJBQlqAeCKjJvQBNF4EFQSplv2Cwg.ttf",!0),A.aA("Noto Sans Siddham","notosanssiddham/v20/OZpZg-FwqiNLe9PELUikxTWDoCCeGqndk3Ic92ZH.ttf",!0),A.aA("Noto Sans Sinhala","notosanssinhala/v26/yMJ2MJBya43H0SUF_WmcBEEf4rQVO2P524V5N_MxQzQtb-tf5dJbC30Fu9zUwg2a5lgLpJwbQRM.ttf",!0),A.aA("Noto Sans Sogdian","notosanssogdian/v16/taiQGn5iC4--qtsfi4Jp6eHPnfxQBo--Pm6KHidM.ttf",!0),A.aA("Noto Sans Sora Sompeng","notosanssorasompeng/v24/PlIRFkO5O6RzLfvNNVSioxM2_OTrEhPyDLolKvCsHzCxWuGkYHR818DpZXJQd4Mu.ttf",!0),A.aA("Noto Sans Soyombo","notosanssoyombo/v17/RWmSoL-Y6-8q5LTtXs6MF6q7xsxgY0FrIFOcK25W.ttf",!0),A.aA("Noto Sans Sundanese","notosanssundanese/v24/FwZw7_84xUkosG2xJo2gm7nFwSLQkdymq2mkz3Gz1_b6ctxpNNHCizv7fQES.ttf",!0),A.aA("Noto Sans Syloti Nagri","notosanssylotinagri/v20/uU9eCAQZ75uhfF9UoWDRiY3q7Sf_VFV3m4dGFVfxN87gsj0.ttf",!0),A.aA("Noto Sans Syriac","notosanssyriac/v16/Ktk7AKuMeZjqPnXgyqribqzQqgW0LYiVqV7dXcP0C-VD9MaJyZfUL_FC.ttf",!0),A.aA("Noto Sans TC","notosanstc/v35/-nFuOG829Oofr2wohFbTp9ifNAn722rq0MXz76Cy_CpOtma3uNQ.ttf",!0),A.aA("Noto Sans Tagalog","notosanstagalog/v22/J7aFnoNzCnFcV9ZI-sUYuvote1R0wwEAA8jHexnL.ttf",!0),A.aA("Noto Sans Tagbanwa","notosanstagbanwa/v18/Y4GWYbB8VTEp4t3MKJSMmQdIKjRtt_nZRjQEaYpGoQ.ttf",!0),A.aA("Noto Sans Tai Le","notosanstaile/v17/vEFK2-VODB8RrNDvZSUmVxEATwR58tK1W77HtMo.ttf",!0),A.aA("Noto Sans Tai Tham","notosanstaitham/v20/kJEbBv0U4hgtwxDUw2x9q7tbjLIfbPGHBoaVSAZ3MdLJBCUbPgquyaRGKMw.ttf",!0),A.aA("Noto Sans Tai Viet","notosanstaiviet/v19/8QIUdj3HhN_lv4jf9vsE-9GMOLsaSPZr644fWsRO9w.ttf",!0),A.aA("Noto Sans Takri","notosanstakri/v23/TuGJUVpzXI5FBtUq5a8bnKIOdTwQNO_W3khJXg.ttf",!0),A.aA("Noto Sans Tamil","notosanstamil/v27/ieVc2YdFI3GCY6SyQy1KfStzYKZgzN1z4LKDbeZce-0429tBManUktuex7vGo70RqKDt_EvT.ttf",!0),A.aA("Noto Sans Tamil Supplement","notosanstamilsupplement/v21/DdTz78kEtnooLS5rXF1DaruiCd_bFp_Ph4sGcn7ax_vsAeMkeq1x.ttf",!0),A.aA("Noto Sans Telugu","notosanstelugu/v25/0FlxVOGZlE2Rrtr-HmgkMWJNjJ5_RyT8o8c7fHkeg-esVC5dzHkHIJQqrEntezbqQUbf-3v37w.ttf",!0),A.aA("Noto Sans Thaana","notosansthaana/v23/C8c14dM-vnz-s-3jaEsxlxHkBH-WZOETXfoQrfQ9Y4XrbhLhnu4-tbNu.ttf",!0),A.aA("Noto Sans Thai","notosansthai/v20/iJWnBXeUZi_OHPqn4wq6hQ2_hbJ1xyN9wd43SofNWcd1MKVQt_So_9CdU5RtpzF-QRvzzXg.ttf",!0),A.aA("Noto Sans Tifinagh","notosanstifinagh/v20/I_uzMoCduATTei9eI8dawkHIwvmhCvbn6rnEcXfs4Q.ttf",!0),A.aA("Noto Sans Tirhuta","notosanstirhuta/v16/t5t6IQYRNJ6TWjahPR6X-M-apUyby7uGUBsTrn5P.ttf",!0),A.aA("Noto Sans Ugaritic","notosansugaritic/v16/3qTwoiqhnSyU8TNFIdhZVCwbjCpkAXXkMhoIkiazfg.ttf",!0),A.aA("Noto Sans Vai","notosansvai/v17/NaPecZTSBuhTirw6IaFn_UrURMTsDIRSfr0.ttf",!0),A.aA("Noto Sans Wancho","notosanswancho/v17/zrf-0GXXyfn6Fs0lH9P4cUubP0GBqAPopiRfKp8.ttf",!0),A.aA("Noto Sans Warang Citi","notosanswarangciti/v17/EYqtmb9SzL1YtsZSScyKDXIeOv3w-zgsNvKRpeVCCXzdgA.ttf",!0),A.aA("Noto Sans Yi","notosansyi/v19/sJoD3LFXjsSdcnzn071rO3apxVDJNVgSNg.ttf",!0),A.aA("Noto Sans Zanabazar Square","notosanszanabazarsquare/v19/Cn-jJsuGWQxOjaGwMQ6fOicyxLBEMRfDtkzl4uagQtJxOCEgN0Gc.ttf",!0)],t.Qg))}return r}, +a7s(){var s,r,q,p,o,n,m,l=this,k=l.r +if(k!=null){k.delete() +l.r=null +k=l.w +if(k!=null)k.delete() +l.w=null}l.r=$.cp.bb().TypefaceFontProvider.Make() +k=$.cp.bb().FontCollection.Make() +l.w=k +k.enableFontFallback() +l.w.setDefaultFontManager(l.r) +k=l.f +k.af(0) +for(s=l.d,r=s.length,q=t.zd,p=0;p"),s=new A.cz(s,r),s=new A.cR(s,s.gF(0),r.h("cR")),r=r.h("aI.E"),q=B.eP;s.H();){p=s.d +if(p==null)p=r.a(p) +switch(p.a.a){case 0:p=p.b +p.toString +o=p +break +case 1:p=p.c +o=new A.A(p.a,p.b,p.c,p.d) +break +case 2:p=p.d.a +p===$&&A.c() +p=p.a.getBounds() +o=new A.A(p[0],p[1],p[2],p[3]) +break +default:continue $label0$1}q=q.fp(o)}return q}} +A.aMA.prototype={} +A.Ee.prototype={ +q_(a,b){this.b=this.ua(a,b)}, +ua(a,b){var s,r,q,p,o,n +for(s=this.c,r=s.length,q=B.M,p=0;p=q.c||q.b>=q.d)q=o.b +else{n=o.b +if(!(n.a>=n.c||n.b>=n.d))q=q.jj(n)}}return q}, +rt(a){var s,r,q,p,o +for(s=this.c,r=s.length,q=0;q=o.c||o.b>=o.d))p.lD(a)}}} +A.aaD.prototype={ +lD(a){this.rt(a)}} +A.a_p.prototype={ +q_(a,b){this.b=this.ua(a,b).jj(a.gaPh())}, +lD(a){var s,r,q=this,p=A.a0N() +p.sde(q.r) +s=a.b +s.akx(q.b,q.f,p) +r=p.b +r===$&&A.c() +r.t() +q.rt(a) +s.a.restore()}, +$iawX:1} +A.a0X.prototype={ +q_(a,b){var s,r,q=null,p=this.f,o=a.c.a +o.push(new A.op(B.D6,q,q,p,q,q)) +s=this.ua(a,b) +p=p.a +p===$&&A.c() +r=A.bce(p.a.getBounds()) +if(s.wk(r))this.b=s.fp(r) +o.pop()}, +lD(a){var s,r=this,q=a.a +q.bU(0) +s=r.r +q.aND(0,r.f,s!==B.a4) +s=s===B.f8 +if(s)q.hl(r.b,null) +r.rt(a) +if(s)q.bw(0) +q.bw(0)}, +$iayY:1} +A.a1_.prototype={ +q_(a,b){var s,r=null,q=this.f,p=a.c.a +p.push(new A.op(B.D4,q,r,r,r,r)) +s=this.ua(a,b) +if(s.wk(q))this.b=s.fp(q) +p.pop()}, +lD(a){var s,r,q=a.a +q.bU(0) +s=this.f +r=this.r +q.aNH(s,B.f7,r!==B.a4) +r=r===B.f8 +if(r)q.hl(s,null) +this.rt(a) +if(r)q.bw(0) +q.bw(0)}, +$iaz1:1} +A.a0Z.prototype={ +q_(a,b){var s,r,q,p,o=null,n=this.f,m=a.c.a +m.push(new A.op(B.D5,o,n,o,o,o)) +s=this.ua(a,b) +r=n.a +q=n.b +p=n.c +n=n.d +if(s.wk(new A.A(r,q,p,n)))this.b=s.fp(new A.A(r,q,p,n)) +m.pop()}, +lD(a){var s,r=this,q=a.a +q.bU(0) +s=r.r +q.aNF(r.f,s!==B.a4) +s=s===B.f8 +if(s)q.hl(r.b,null) +r.rt(a) +if(s)q.bw(0) +q.bw(0)}, +$iaz0:1} +A.a7U.prototype={ +q_(a,b){var s,r,q,p,o=this,n=null,m=new A.cL(new Float32Array(16)) +m.v(b) +s=o.r +r=s.a +s=s.b +m.aJ(0,r,s) +q=A.fu() +q.qm(r,s,0) +p=a.c.a +p.push(A.bfU(q)) +p.push(new A.op(B.D8,n,n,n,n,o.f)) +o.an2(a,m) +p.pop() +p.pop() +o.b=o.b.aJ(0,r,s)}, +lD(a){var s,r,q,p=this,o=A.a0N() +o.sA(0,A.S(p.f,0,0,0)) +s=a.a +s.bU(0) +r=p.r +q=r.a +r=r.b +s.aJ(0,q,r) +s.hl(p.b.dz(new A.i(-q,-r)),o) +r=o.b +r===$&&A.c() +r.t() +p.rt(a) +s.bw(0) +s.bw(0)}, +$iaMa:1} +A.Tf.prototype={ +q_(a,b){var s=this.f,r=b.iV(s),q=a.c.a +q.push(A.bfU(s)) +this.b=A.Dh(s,this.ua(a,r)) +q.pop()}, +lD(a){var s=a.a +s.bU(0) +s.az(0,this.f.a) +this.rt(a) +s.bw(0)}, +$iadP:1} +A.a7R.prototype={$iaM7:1} +A.a58.prototype={ +q_(a,b){var s,r,q,p,o=this,n=new A.cL(new Float32Array(16)) +n.v(b) +s=o.f +r=s.a +s=s.b +n.aJ(0,r,s) +q=A.fu() +q.qm(r,s,0) +s=a.c.a +s.push(A.bfU(q)) +p=o.ua(a,n) +q=t.p1.a(o.r).d +q===$&&A.c() +q=q.a +q.toString +new A.aHe(o,p).$1(q) +s.pop()}, +lD(a){var s,r,q=this,p=a.a +p.bU(0) +s=q.f +p.aJ(0,s.a,s.b) +r=A.a0N() +r.saTo(q.r) +p.hl(q.b,r) +s=r.b +s===$&&A.c() +s.t() +q.rt(a) +p.bw(0) +p.bw(0)}, +$iaHd:1} +A.aHe.prototype={ +$1(a){var s=a.getOutputBounds(A.iY(this.b)) +this.a.b=new A.A(s[0],s[1],s[2],s[3])}, +$S:2} +A.a8K.prototype={ +q_(a,b){var s=this.c.a +s===$&&A.c() +this.b=A.bce(s.a.cullRect()).dz(this.d)}, +lD(a){var s,r=a.b.a +B.c.aw(r.save()) +s=this.d +r.translate(s.a,s.b) +s=this.c.a +s===$&&A.c() +s=s.a +s.toString +r.drawPicture(s) +r.restore()}} +A.a62.prototype={ +t(){}} +A.aIT.prototype={ +aaX(a,b,c,d){var s,r=this.b +r===$&&A.c() +s=new A.a8K(t.Bn.a(b),a,B.M) +s.a=r +r.c.push(s)}, +aaZ(a){var s=this.b +s===$&&A.c() +t.L7.a(a) +a.a=s +s.c.push(a)}, +cY(){return new A.a62(new A.aIU(this.a))}, +ie(){var s=this.b +s===$&&A.c() +if(s===this.a)return +s=s.a +s.toString +this.b=s}, +ah5(a,b,c){return this.ud(new A.a_p(a,b,A.b([],t.k5),B.M))}, +ah6(a,b,c){return this.ud(new A.a0X(t.E_.a(a),b,A.b([],t.k5),B.M))}, +ah7(a,b,c){return this.ud(new A.a0Z(a,b,A.b([],t.k5),B.M))}, +ah9(a,b,c){return this.ud(new A.a1_(a,b,A.b([],t.k5),B.M))}, +aha(a,b,c){return this.ud(new A.a58(b,a,A.b([],t.k5),B.M))}, +YP(a,b,c){var s=A.fu() +s.qm(a,b,0) +return this.ud(new A.a7R(s,A.b([],t.k5),B.M))}, +ahb(a,b,c){return this.ud(new A.a7U(a,b,A.b([],t.k5),B.M))}, +F6(a,b){return this.ud(new A.Tf(new A.cL(A.xC(a)),A.b([],t.k5),B.M))}, +aXZ(a){var s=this.b +s===$&&A.c() +a.a=s +s.c.push(a) +return this.b=a}, +ud(a){return this.aXZ(a,t.vn)}} +A.aIU.prototype={} +A.aFa.prototype={ +aY2(a,b){A.bda("preroll_frame",new A.aFb(this,a,!0)) +A.bda("apply_frame",new A.aFc(this,a,!0)) +return!0}} +A.aFb.prototype={ +$0(){var s=this.b.a +s.b=s.ua(new A.aOl(new A.Pa(A.b([],t.YE))),A.fu())}, +$S:0} +A.aFc.prototype={ +$0(){var s=this.a,r=A.b([],t.iW),q=new A.a0M(r),p=s.a +r.push(p) +s.c.ak8().al(0,q.gaLT()) +s=this.b.a +if(!s.b.gaA(0))s.rt(new A.aMA(q,p))}, +$S:0} +A.a1q.prototype={} +A.ayG.prototype={} +A.aLl.prototype={ +Uy(a){return this.a.cU(0,a,new A.aLm(this,a))}, +a09(a){var s,r,q,p +for(s=this.a.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a +q=(q==null?r.a(q):q).r +p=new A.aLn(a) +p.$1(q.gTL()) +B.b.al(q.d,p) +B.b.al(q.c,p)}}} +A.aLm.prototype={ +$0(){return A.bHt(this.b,this.a)}, +$S:431} +A.aLn.prototype={ +$1(a){a.y=this.a +a.SI()}, +$S:433} +A.Ao.prototype={ +agY(){this.r.gTL().D6(this.c)}, +Fa(a,b){var s,r,q +t.NU.a(a) +a.D6(this.c) +s=this.c +r=$.cF().d +if(r==null){q=self.window.devicePixelRatio +r=q===0?1:q}q=a.ax +A.M(a.Q.style,"transform","translate(0px, "+A.j(s.b/r-q/r)+"px)") +q=a.a.a.getCanvas() +q.clear(A.b9r($.avt(),B.B)) +B.b.al(b,new A.n0(q).gadm()) +a.a.a.flush() +return A.e5(null,t.H)}, +gKn(){return this.r}} +A.aLo.prototype={ +$0(){var s=A.c8(self.document,"flt-canvas-container") +if($.bdz())$.eb() +return new A.oF(!1,!0,s)}, +$S:621} +A.a0M.prototype={ +aLU(a){this.a.push(a)}, +bU(a){var s,r,q +for(s=this.a,r=0,q=0;q0)){p.ax=null +s=null}else{r=a.a +q=new A.ayG(r,s) +s=$.cp.bb().MaskFilter.MakeBlur($.bzO()[r.a],s,!0) +s.toString +r=new A.hY(o,t.gA) +r.kH(q,s,o,t.e) +q.c!==$&&A.aj() +q.c=r +p.ax=q +s=q}}else s=p.ax=null +if(s==null)s=null +else{s=s.c +s===$&&A.c() +s=s.a +s.toString}p.a.setMaskFilter(s)}, +sor(a){var s,r=this +if(r.ay===a)return +r.ay=a +s=r.as +s=s==null?null:s.NF(a) +r.a.setShader(s)}, +gqU(){return this.ch}, +sqU(a){var s,r=this +if(r.ch==a)return +r.ch=a +r.Q=null +if(a==null){r.CW=null +s=null}else{s=A.bRW(a) +s.toString +s=A.aK0(s) +r.CW=s}if(r.z){r.Q=s +if(s==null){s=$.avq() +r.CW=s}else{s=A.aK0(new A.DS($.avq(),s)) +r.CW=s}}if(s==null)s=null +else{s=s.b +s===$&&A.c() +s=s.a +s.toString}r.a.setColorFilter(s)}, +sOi(a){if(this.cx===a)return +this.cx=a +this.a.setStrokeMiter(a)}, +saTo(a){if(J.f(this.c,a))return +t.fz.a(a) +a.Xk(new A.ayH(this)) +this.c=a}, +j(a){return"Paint()"}, +$ije:1} +A.ayH.prototype={ +$1(a){this.a.a.setImageFilter(a)}, +$S:2} +A.Lx.prototype={ +gfW(){return this.b}, +sfW(a){var s +if(this.b===a)return +this.b=a +s=this.a +s===$&&A.c() +s=s.a +s.toString +s.setFillType($.Zt()[a.a])}, +Tq(a,b,c){var s=this.a +s===$&&A.c() +s=s.a +s.toString +s.addArc(A.iY(a),b*57.29577951308232,c*57.29577951308232)}, +hq(a){var s=this.a +s===$&&A.c() +s=s.a +s.toString +s.addOval(A.iY(a),!1,1)}, +pp(a,b,c,d){var s,r,q=c.a,p=c.b +if(d==null){s=A.fu() +s.qm(q,p,0) +r=A.Zo(s.a)}else{r=A.ave(d) +r[2]=r[2]+q +r[5]=r[5]+p}t.E_.a(b) +q=this.a +q===$&&A.c() +q=q.a +q.toString +p=b.a +p===$&&A.c() +p=p.a +p.toString +A.a3(q,"addPath",[p,r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],!1])}, +mU(a,b,c){return this.pp(0,b,c,null)}, +Cq(a,b){var s=A.buS(a),r=this.a +r===$&&A.c() +r=r.a +r.toString +r.addPoly(s.toTypedArray(),b) +self.window.flutterCanvasKit.Free(s)}, +h_(a){var s=this.a +s===$&&A.c() +s=s.a +s.toString +s.addRRect(A.Zp(a),!1)}, +m3(a){var s=this.a +s===$&&A.c() +s=s.a +s.toString +s.addRect(A.iY(a))}, +vj(a,b,c,d,e){var s=this.a +s===$&&A.c() +s=s.a +s.toString +s.arcToOval(A.iY(b),c*57.29577951308232,d*57.29577951308232,!1)}, +abe(a,b){var s=this.a +s===$&&A.c() +s=s.a +s.toString +A.a3(s,"arcToRotated",[b.a,b.b,0,!0,!1,a.a,a.b])}, +T(a){var s=this.a +s===$&&A.c() +s.a.close()}, +tu(){return new A.a0P(this,!1)}, +G(a,b){var s=this.a +s===$&&A.c() +return s.a.contains(b.a,b.b)}, +l(a,b,c,d,e,f){var s=this.a +s===$&&A.c() +s=s.a +s.toString +A.a3(s,"cubicTo",[a,b,c,d,e,f])}, +hB(a){var s=this.a +s===$&&A.c() +return A.bce(s.a.getBounds())}, +q(a,b,c){var s=this.a +s===$&&A.c() +s.a.lineTo(b,c)}, +a4(a,b,c){var s=this.a +s===$&&A.c() +s.a.moveTo(b,c)}, +YR(a,b,c,d){var s=this.a +s===$&&A.c() +s.a.quadTo(a,b,c,d)}, +bF(a){var s +this.b=B.bX +s=this.a +s===$&&A.c() +s.a.reset()}, +dz(a){var s,r=this.a +r===$&&A.c() +s=r.a.copy() +A.bpH(s,1,0,a.a,0,1,a.b,0,0,1) +r=this.b +s.setFillType($.Zt()[r.a]) +return A.ayJ(s,r)}, +az(a,b){var s,r,q=this.a +q===$&&A.c() +s=q.a.copy() +r=A.ave(b) +A.bpH(s,r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8]) +q=this.b +s.setFillType($.Zt()[q.a]) +return A.ayJ(s,q)}, +$irZ:1} +A.a0P.prototype={ +gar(a){var s,r,q,p=this,o="Iterator",n=p.c +if(n===$){s=p.a.a +s===$&&A.c() +if(s.a.isEmpty())r=B.K9 +else{r=new A.ayE(p) +s=s.a +s.toString +q=new A.hY(o,t.gA) +q.kH(r,new self.window.flutterCanvasKit.ContourMeasureIter(s,!1,1),o,t.e) +r.b!==$&&A.aj() +r.b=q}p.c!==$&&A.N() +n=p.c=r}return n}} +A.ayE.prototype={ +ga1(a){var s=this.d +if(s==null)throw A.d(A.w6(u.g)) +return s}, +H(){var s,r,q=this,p="PathMetric",o=q.b +o===$&&A.c() +s=o.a.next() +if(s==null){q.d=null +return!1}o=new A.a0E(q.a) +r=new A.hY(p,t.gA) +r.kH(o,s,p,t.e) +o.b!==$&&A.aj() +o.b=r +q.d=o;++q.c +return!0}} +A.a0E.prototype={ +DD(a,b){var s,r=this.b +r===$&&A.c() +r=r.a.getSegment(a,b,!0) +s=this.a.a.b +r.setFillType($.Zt()[s.a]) +return A.ayJ(r,s)}, +qh(a){var s=this.b +s===$&&A.c() +s=s.a.getPosTan(a) +return new A.acV(new A.i(s[0],s[1]),new A.i(s[2],s[3]))}, +gF(a){var s=this.b +s===$&&A.c() +return s.a.length()}, +$ivY:1} +A.ayK.prototype={ +ga1(a){throw A.d(A.w6("PathMetric iterator is empty."))}, +H(){return!1}} +A.yi.prototype={ +t(){this.b=!0 +var s=this.a +s===$&&A.c() +s.t()}, +rB(a,b){return this.aZr(a,b)}, +aZr(a,b){var s=0,r=A.r(t.lu),q,p=this +var $async$rB=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:q=p.FA(a,b) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$rB,r)}, +FA(a,b){var s,r,q,p=$.ayf.bb().e.D6(new A.Q(a,b)).a,o=p.getCanvas() +o.clear(A.b9r($.avt(),B.B)) +s=this.a +s===$&&A.c() +s=s.a +s.toString +o.drawPicture(s) +r=p.makeImageSnapshot() +p=$.cp.bb().AlphaType.Premul +s=$.cp.bb().ColorType.RGBA_8888 +q=A.bK9(p,self.window.flutterCanvasKit.ColorSpace.SRGB,s,b,a) +s=r.readPixels(0,0,q) +s=$.cp.bb().MakeImage(q,s,4*a) +if(s==null)throw A.d(A.ad("Unable to convert image pixels into SkImage.")) +return A.ayF(s,null)}} +A.qU.prototype={ +yB(a){var s=new self.window.flutterCanvasKit.PictureRecorder() +this.a=s +return this.b=new A.n0(s.beginRecording(A.iY(a),!0))}, +jT(){var s,r,q,p=this.a +if(p==null)throw A.d(A.ad("PictureRecorder is not recording")) +s=p.finishRecordingAsPicture() +p.delete() +this.a=null +r=new A.yi() +q=new A.hY("Picture",t.gA) +q.kH(r,s,"Picture",t.e) +r.a!==$&&A.aj() +r.a=q +return r}, +gafn(){return this.a!=null}} +A.aOI.prototype={} +A.IC.prototype={ +gNg(){var s,r,q,p,o,n,m,l=this,k=l.e +if(k===$){s=l.a.ghv() +r=t.qN +q=A.b([],r) +r=A.b([],r) +p=t.S +o=t.t +n=A.b([],o) +o=A.b([],o) +m=A.b([],t.RX) +l.e!==$&&A.N() +k=l.e=new A.a5_(s.d,l,new A.MI(q,r),A.D(p,t.GB),A.D(p,t.JH),A.C(p),n,o,new A.Hb(m),A.D(p,t.kL))}return k}, +kr(a){return this.aQu(a)}, +aQu(a){var s=0,r=A.r(t.H),q,p=this,o,n,m +var $async$kr=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:m=p.a.gnv() +if(m.gaA(0)){s=1 +break}p.c=m +p.agY() +o=p.gNg().z=p.c +n=new A.qU() +n.yB(new A.A(0,0,0+o.a,0+o.b)) +o=n.b +o.toString +new A.aFa(o,null,p.gNg()).aY2(a,!0) +s=3 +return A.x(p.gNg().GE(0,n.jT()),$async$kr) +case 3:case 1:return A.p(q,r)}}) +return A.q($async$kr,r)}} +A.aBs.prototype={} +A.aad.prototype={} +A.H3.prototype={ +vb(){var s,r,q,p=this,o=$.cF().d +if(o==null){s=self.window.devicePixelRatio +o=s===0?1:s}s=p.c +r=p.d +q=p.b.style +A.M(q,"width",A.j(s/o)+"px") +A.M(q,"height",A.j(r/o)+"px") +p.r=o}, +a41(a){var s=this,r=a.a +if(B.c.d0(r)===s.c&&B.c.d0(a.b)===s.d){r=$.cF().d +if(r==null){r=self.window.devicePixelRatio +if(r===0)r=1}if(r!==s.r)s.vb() +return}s.c=B.c.d0(r) +s.d=B.c.d0(a.b) +r=s.b +A.yP(r,s.c) +A.yO(r,s.d) +s.vb()}, +oy(a){}, +t(){this.a.remove()}, +gzn(){return this.a}} +A.DJ.prototype={ +W(){return"CanvasKitVariant."+this.b}} +A.Ll.prototype={ +gZ8(){return"canvaskit"}, +gaxE(){var s,r,q,p,o=this.b +if(o===$){s=t.N +r=A.b([],t.LX) +q=t.Pc +p=A.b([],q) +q=A.b([],q) +this.b!==$&&A.N() +o=this.b=new A.abJ(A.C(s),r,p,q,A.D(s,t.Ip))}return o}, +gzj(){var s,r,q,p,o=this.b +if(o===$){s=t.N +r=A.b([],t.LX) +q=t.Pc +p=A.b([],q) +q=A.b([],q) +this.b!==$&&A.N() +o=this.b=new A.abJ(A.C(s),r,p,q,A.D(s,t.Ip))}return o}, +oy(a){var s=0,r=A.r(t.H),q,p=this,o +var $async$oy=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=p.a +q=o==null?p.a=new A.ayg(p).$0():o +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$oy,r)}, +B(){return A.a0N()}, +Ux(a,b,c,d,e){return A.bCK(a,b,c,d,e)}, +lt(a,b){if(a.gafn())A.X(A.c3(u.r,null)) +if(b==null)b=B.eP +return new A.a0c(t.wW.a(a).yB(b))}, +acz(a,b,c,d,e,f,g){var s=new A.a0G(b,c,d,e,f,g) +s.GT() +return s}, +acE(a,b,c,d,e,f,g){var s=new A.a0H(b,c,d,e,f,g) +s.GT() +return s}, +acv(a,b,c,d,e,f,g,h){var s=new A.a0F(a,b,c,d,e,f,g,h) +s.GT() +return s}, +acI(a,b,c,d,e,f,g){var s=new A.a0I(a,b,c,d,e,f,g) +s.GT() +A.buV(b,c) +return s}, +lu(){return new A.qU()}, +acG(){var s=new A.aaD(A.b([],t.k5),B.M),r=new A.aIT(s) +r.b=s +return r}, +act(a,b,c){var s,r,q,p="ImageFilter.blur",o=new A.Uf(a,b,c),n=a===0&&b===0 +if(n){n=$.cp.bb().ImageFilter +s=A.Zo(A.fu().a) +r=$.bjE().i(0,B.av) +r.toString +q=A.a3(n,"MakeMatrixTransform",[s,r,null])}else q=A.a3($.cp.bb().ImageFilter,"MakeBlur",[a,b,$.Dk()[c.a],null]) +n=new A.hY(p,t.gA) +n.kH(o,q,p,t.e) +o.d!==$&&A.aj() +o.d=n +return o}, +acA(a,b){var s,r,q,p,o="ImageFilter.matrix",n=new Float64Array(A.eG(a)) +A.xC(a) +n=new A.Ug(n,b) +s=$.cp.bb().ImageFilter +r=A.ave(a) +q=$.bjE().i(0,b) +q.toString +p=new A.hY(o,t.gA) +p.kH(n,A.a3(s,"MakeMatrixTransform",[r,q,null]),o,t.e) +n.d!==$&&A.aj() +n.d=p +return n}, +oz(a,b,c,d){return this.aTK(a,b,c,d)}, +Xp(a){return this.oz(a,!0,null,null)}, +aTK(a,b,c,d){var s=0,r=A.r(t.hP),q +var $async$oz=A.t(function(e,f){if(e===1)return A.o(f,r) +while(true)switch(s){case 0:q=A.bV6(a,d,c) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$oz,r)}, +Lk(a,b){return A.bd4(a.j(0),b)}, +Uu(a,b,c,d,e){var s=new A.a0K(b,c,d,e,t.XY.a(a)) +s.a5N(e==null?B.av:e) +return s}, +Z(){var s=new self.window.flutterCanvasKit.Path() +s.setFillType($.Zt()[0]) +return A.ayJ(s,B.bX)}, +acJ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,a0,a1,a2){var s=t.eQ +s.a(a) +s.a(n) +return A.be9(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,g,h,a0,a1,a2)}, +acB(a,b,c,d,e,f,g,h,i,j,k,l){var s,r,q=t.e,p=q.a({}) +if(j!=null)p.textAlign=$.bzY()[j.a] +if(k!=null)p.textDirection=$.bA_()[k.a] +if(h!=null)p.maxLines=h +s=f!=null +if(s)p.heightMultiplier=f +if(l!=null)p.textHeightBehavior=$.bA0()[0] +if(a!=null)p.ellipsis=a +if(i!=null)p.strutStyle=A.bCJ(i,l) +p.replaceTabCharacters=!0 +r=q.a({}) +if(e!=null||d!=null)r.fontStyle=A.biO(e,d) +if(c!=null)A.bpK(r,c) +if(s)A.bpM(r,f) +A.bpJ(r,A.bhT(b,null)) +p.textStyle=r +p.applyRoundingHack=!1 +q=$.cp.bb().ParagraphStyle(p) +return new A.Lw(q,j,k,e,d,h,b,b,c,f,l,i,a,g)}, +acH(a,b,c,d,e,f,g,h,i){return new A.Ly(a,b,c,g,h,e,d,f,i)}, +D7(a){var s,r,q,p,o=null +t.m6.a(a) +s=A.b([],t.n) +r=A.b([],t.Cw) +q=$.cp.bb().ParagraphBuilder.MakeFromFontCollection(a.a,$.ayf.bb().gaxE().w) +p=a.z +p=p==null?o:p.c +r.push(A.be9(o,o,o,o,o,o,a.w,o,o,a.x,a.e,o,a.d,o,a.y,p,o,o,a.r,o,o,o,o)) +return new A.ayI(q,a,s,r)}, +zZ(a,b){return this.aYG(a,b)}, +aYG(a,b){var s=0,r=A.r(t.H),q,p=this,o,n,m,l +var $async$zZ=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:n=p.w.i(0,b.a) +m=n.b +l=$.bF().dx!=null?new A.a43($.bf4,$.bf3):null +if(m.a!=null){o=m.b +if(o!=null)o.a.fl(0) +o=new A.aM($.aK,t.D) +m.b=new A.Wr(new A.bH(o,t.h),l,a) +q=o +s=1 +break}o=new A.aM($.aK,t.D) +m.a=new A.Wr(new A.bH(o,t.h),l,a) +p.BF(n) +q=o +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$zZ,r)}, +BF(a){return this.aCm(a)}, +aCm(a){var s=0,r=A.r(t.H),q,p=2,o,n=this,m,l,k,j,i,h,g +var $async$BF=A.t(function(b,c){if(b===1){o=c +s=p}while(true)switch(s){case 0:i=a.b +h=i.a +h.toString +m=h +p=4 +s=7 +return A.x(n.Ia(m.c,a,m.b),$async$BF) +case 7:m.a.fl(0) +p=2 +s=6 +break +case 4:p=3 +g=o +l=A.b2(g) +k=A.bC(g) +m.a.lq(l,k) +s=6 +break +case 3:s=2 +break +case 6:h=i.b +i.a=h +i.b=null +if(h==null){s=1 +break}else{q=n.BF(a) +s=1 +break}case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$BF,r)}, +Ia(a,b,c){return this.aGn(a,b,c)}, +aGn(a,b,c){var s=0,r=A.r(t.H),q +var $async$Ia=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:q=c==null +if(!q)c.aht() +if(!q)c.ahv() +s=2 +return A.x(b.kr(t.h_.a(a).a),$async$Ia) +case 2:if(!q)c.ahu() +if(!q)c.a0t() +return A.p(null,r)}}) +return A.q($async$Ia,r)}, +aEi(a){var s=$.bF().geV().b.i(0,a) +this.w.u(0,s.a,this.d.Uy(s))}, +aEk(a){var s=this.w +if(!s.aR(0,a))return +s=s.P(0,a) +s.toString +s.gNg().t() +s.gKn().t()}, +abU(){$.bCs.af(0)}, +acy(a,b,c,d,e,f,g,h,i){return new A.pi(d,a,c,h,e,i,f,b,g)}} +A.ayg.prototype={ +$0(){var s=0,r=A.r(t.P),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b +var $async$$0=A.t(function(a,a0){if(a===1)return A.o(a0,r) +while(true)switch(s){case 0:s=self.window.flutterCanvasKit!=null?2:4 +break +case 2:p=self.window.flutterCanvasKit +p.toString +$.cp.b=p +s=3 +break +case 4:s=self.window.flutterCanvasKitLoaded!=null?5:7 +break +case 5:p=self.window.flutterCanvasKitLoaded +p.toString +b=$.cp +s=8 +return A.x(A.ka(p,t.e),$async$$0) +case 8:b.b=a0 +s=6 +break +case 7:b=$.cp +s=9 +return A.x(A.auZ(),$async$$0) +case 9:b.b=a0 +self.window.flutterCanvasKit=$.cp.bb() +case 6:case 3:p=$.bF() +o=p.geV() +n=q.a +if(n.f==null)for(m=o.b.gbm(0),l=A.w(m),l=l.h("@<1>").ak(l.y[1]),m=new A.bt(J.az(m.a),m.b,l.h("bt<1,2>")),l=l.y[1],k=t.mm,j=t.S,i=t.lz,h=t.e,g=n.w,f=n.d;m.H();){e=m.a +e=(e==null?l.a(e):e).a +d=p.r +if(d===$){d!==$&&A.N() +d=p.r=new A.Na(p,A.D(j,i),A.D(j,h),new A.qt(null,null,k),new A.qt(null,null,k))}c=d.b.i(0,e) +g.u(0,c.a,f.Uy(c))}if(n.f==null){p=o.d +n.f=new A.f8(p,A.w(p).h("f8<1>")).oF(n.gaEh())}if(n.r==null){p=o.e +n.r=new A.f8(p,A.w(p).h("f8<1>")).oF(n.gaEj())}$.ayf.b=n +return A.p(null,r)}}) +return A.q($async$$0,r)}, +$S:109} +A.abA.prototype={ +GT(){var s=this,r=s.K3(),q=s.gK8(),p=new A.hY(q,t.gA) +p.kH(s,r,q,t.e) +s.a!==$&&A.aj() +s.a=p}, +NF(a){var s=this.a +s===$&&A.c() +s=s.a +s.toString +return s}, +j(a){return"Gradient()"}, +$iyj:1, +$ijV:1} +A.a0I.prototype={ +gK8(){return"Gradient.sweep"}, +K3(){var s=this,r=$.cp.bb().Shader,q=s.b,p=A.avd(s.c),o=A.bdb(s.d),n=$.Dk()[s.e.a],m=s.w +m=m!=null?A.Zo(m):null +if(m==null)m=null +return A.a3(r,"MakeSweepGradient",[q.a,q.b,p,o,n,m,0,57.29577951308232*s.f,57.29577951308232*s.r])}, +$ilm:1} +A.a0G.prototype={ +gK8(){return"Gradient.linear"}, +K3(){var s=this,r=$.cp.bb().Shader,q=A.avf(s.b),p=A.avf(s.c),o=A.avd(s.d),n=A.bdb(s.e),m=$.Dk()[s.f.a],l=s.r +l=l!=null?A.Zo(l):null +return A.a3(r,"MakeLinearGradient",[q,p,o,n,m,l==null?null:l])}, +j(a){return"Gradient()"}, +$ilm:1} +A.a0H.prototype={ +gK8(){return"Gradient.radial"}, +K3(){var s=this,r=$.cp.bb().Shader,q=A.avf(s.b),p=A.avd(s.d),o=A.bdb(s.e),n=$.Dk()[s.f.a],m=s.r +m=m!=null?A.Zo(m):null +if(m==null)m=null +return A.a3(r,"MakeRadialGradient",[q,s.c,p,o,n,m,0])}, +j(a){return"Gradient()"}, +$ilm:1} +A.a0F.prototype={ +gK8(){return"Gradient.radial(conical)"}, +K3(){var s=this,r=$.cp.bb().Shader,q=A.avf(s.b),p=A.avf(s.d),o=A.avd(s.f),n=A.bdb(s.r),m=$.Dk()[s.w.a],l=s.x +l=l!=null?A.Zo(l):null +if(l==null)l=null +return A.a3(r,"MakeTwoPointConicalGradient",[q,s.c,p,s.e,o,n,m,l,0])}, +$ilm:1} +A.a0K.prototype={ +NF(a){var s,r=this,q=r.d +if(q==null)q=a +s=r.r +s===$&&A.c() +if(s!==q)r.a5N(q) +s=r.f.a +s.toString +return s}, +a5N(a){var s,r,q,p=this,o="ImageShader",n=p.c,m=p.e.b,l=p.a.a,k=p.b.a +if(a===B.hA){m===$&&A.c() +m=m.a +m===$&&A.c() +m=m.a +m.toString +s=$.Dk() +l=s[l] +k=s[k] +n=A.ave(n) +r=A.a3(m,"makeShaderCubic",[l,k,0.3333333333333333,0.3333333333333333,n])}else{m===$&&A.c() +m=m.a +m===$&&A.c() +m=m.a +m.toString +s=$.Dk() +l=s[l] +k=s[k] +s=A.bdc(a) +q=A.biP(a) +n=A.ave(n) +r=A.a3(m,"makeShaderOptions",[l,k,s,q,n])}p.r=a +n=p.f +if(n!=null)n.t() +n=new A.hY(o,t.gA) +n.kH(p,r,o,t.e) +p.f=n}, +t(){var s,r=this +r.w=!0 +r.e.t() +s=r.f +if(s!=null)s.t() +r.f=null}, +$iyj:1, +$ijV:1} +A.oF.prototype={ +SI(){var s,r=this.y +if(r!=null){s=this.w +if(s!=null)s.setResourceCacheLimitBytes(r)}}, +MA(a,b,c){return this.aY4(a,b,c)}, +aY4(a,b,c){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$MA=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:i=q.a.a.getCanvas() +i.clear(A.b9r($.avt(),B.B)) +B.b.al(c,new A.n0(i).gadm()) +q.a.a.flush() +if(self.window.createImageBitmap!=null)i=!A.bTp() +else i=!1 +s=i?2:4 +break +case 2:if(q.b){i=q.z +i.toString +p=i}else{i=q.Q +i.toString +p=i}i=q.ax +o=B.c.aw(a.b) +o=[o,B.c.aw(a.a),0,i-o] +n=self.createImageBitmap(p,o[2],o[3],o[1],o[0]) +n=n +i=t.e +s=5 +return A.x(A.ka(n,i),$async$MA) +case 5:m=e +b.a41(new A.Q(m.width,m.height)) +l=b.e +if(l===$){o=A.lZ(b.b,"bitmaprenderer",null) +o.toString +i.a(o) +b.e!==$&&A.N() +b.e=o +l=o}l.transferFromImageBitmap(m) +s=3 +break +case 4:if(q.b){i=q.z +i.toString +k=i}else{i=q.Q +i.toString +k=i}i=q.ax +b.a41(a) +l=b.f +if(l===$){o=A.lZ(b.b,"2d",null) +o.toString +t.e.a(o) +b.f!==$&&A.N() +b.f=o +l=o}o=a.b +j=a.a +A.blO(l,k,0,i-o,j,o,0,0,j,o) +case 3:return A.p(null,r)}}) +return A.q($async$MA,r)}, +vb(){var s,r,q,p=this,o=$.cF().d +if(o==null){s=self.window.devicePixelRatio +o=s===0?1:s}s=p.at +r=p.ax +q=p.Q.style +A.M(q,"width",A.j(s/o)+"px") +A.M(q,"height",A.j(r/o)+"px") +p.ay=o}, +aR2(){if(this.a!=null)return +this.D6(B.a80)}, +D6(a){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f="webglcontextrestored",e="webglcontextlost" +if(a.gaA(0))throw A.d(A.bCq("Cannot create surfaces of empty size.")) +if(!g.d){s=g.cy +if(s!=null&&a.a===s.a&&a.b===s.b){r=$.cF().d +if(r==null){q=self.window.devicePixelRatio +r=q===0?1:q}if(g.c&&r!==g.ay)g.vb() +q=g.a +q.toString +return q}p=g.cx +if(p!=null)q=a.a>p.a||a.b>p.b +else q=!1 +if(q){o=a.a2(0,1.4) +q=g.a +if(q!=null)q.t() +g.a=null +g.at=B.c.d0(o.a) +g.ax=B.c.d0(o.b) +q=g.at +if(g.b){n=g.z +n.toString +A.bm6(n,q) +q=g.z +q.toString +A.bm5(q,g.ax)}else{n=g.Q +n.toString +A.yP(n,q) +q=g.Q +q.toString +A.yO(q,g.ax)}g.cx=new A.Q(g.at,g.ax) +if(g.c)g.vb()}}if(g.d||g.cx==null){q=g.a +if(q!=null)q.t() +g.a=null +q=g.w +if(q!=null)q.releaseResourcesAndAbandonContext() +q=g.w +if(q!=null)q.delete() +g.w=null +q=g.z +if(q!=null){A.eQ(q,f,g.r,!1) +q=g.z +q.toString +A.eQ(q,e,g.f,!1) +g.f=g.r=g.z=null}else{q=g.Q +if(q!=null){A.eQ(q,f,g.r,!1) +q=g.Q +q.toString +A.eQ(q,e,g.f,!1) +g.Q.remove() +g.f=g.r=g.Q=null}}g.at=B.c.d0(a.a) +q=g.ax=B.c.d0(a.b) +n=g.b +m=g.at +if(n){l=g.z=new self.OffscreenCanvas(m,q) +g.Q=null}else{k=g.Q=A.Da(q,m) +g.z=null +if(g.c){q=A.bf("true") +A.a3(k,"setAttribute",["aria-hidden",q==null?t.K.a(q):q]) +A.M(g.Q.style,"position","absolute") +q=g.Q +q.toString +g.as.append(q) +g.vb()}l=k}q=t.L +g.r=q.a(A.cd(g.gavk())) +q=q.a(A.cd(g.gavi())) +g.f=q +A.dc(l,e,q,!1) +A.dc(l,f,g.r,!1) +g.e=g.d=!1 +q=$.eF +if((q==null?$.eF=A.kY():q)!==-1&&!A.hh().gabK()){q=$.eF +if(q==null)q=$.eF=A.kY() +j=t.e.a({antialias:0,majorVersion:q}) +if(n){q=$.cp.bb() +m=g.z +m.toString +i=B.c.aw(q.GetWebGLContext(m,j))}else{q=$.cp.bb() +m=g.Q +m.toString +i=B.c.aw(q.GetWebGLContext(m,j))}g.x=i +if(i!==0){g.w=$.cp.bb().MakeGrContext(i) +if(g.ch===-1||g.CW===-1){q=$.eF +if(n){n=g.z +n.toString +h=A.bEc(n,q==null?$.eF=A.kY():q)}else{n=g.Q +n.toString +h=A.bE3(n,q==null?$.eF=A.kY():q)}g.ch=B.c.aw(h.getParameter(B.c.aw(h.SAMPLES))) +g.CW=B.c.aw(h.getParameter(B.c.aw(h.STENCIL_BITS)))}g.SI()}}g.cx=a}g.cy=a +q=g.a +if(q!=null)q.t() +return g.a=g.avE(a)}, +avl(a){this.e=!1 +$.bF().Xt() +a.stopPropagation() +a.preventDefault()}, +avj(a){this.d=this.e=!0 +a.preventDefault()}, +avE(a){var s,r=this,q=$.eF +if((q==null?$.eF=A.kY():q)===-1)return r.HL("WebGL support not detected") +else if(A.hh().gabK())return r.HL("CPU rendering forced by application") +else if(r.x===0)return r.HL("Failed to initialize WebGL context") +else{q=$.cp.bb() +s=r.w +s.toString +s=A.a3(q,"MakeOnScreenGLSurface",[s,Math.ceil(a.a),Math.ceil(a.b),self.window.flutterCanvasKit.ColorSpace.SRGB,r.ch,r.CW]) +if(s==null)return r.HL("Failed to initialize WebGL surface") +return new A.a0R(s,r.x)}}, +HL(a){var s,r,q +if(!$.bpZ){$.fK().$1("WARNING: Falling back to CPU-only rendering. "+a+".") +$.bpZ=!0}if(this.b){s=$.cp.bb() +r=this.z +r.toString +q=s.MakeSWCanvasSurface(r)}else{s=$.cp.bb() +r=this.Q +r.toString +q=s.MakeSWCanvasSurface(r)}return new A.a0R(q,null)}, +oy(a){this.aR2()}, +t(){var s=this,r=s.z +if(r!=null)A.eQ(r,"webglcontextlost",s.f,!1) +r=s.z +if(r!=null)A.eQ(r,"webglcontextrestored",s.r,!1) +s.r=s.f=null +r=s.a +if(r!=null)r.t()}, +gzn(){return this.as}} +A.a0R.prototype={ +t(){if(this.c)return +this.a.dispose() +this.c=!0}} +A.Lw.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.Lw&&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.x==s.x&&b.y==s.y&&J.f(b.z,s.z)&&J.f(b.Q,s.Q)&&b.as==s.as&&J.f(b.at,s.at)}, +gL(a){var s=this +return A.a6(s.b,s.c,s.d,s.e,s.f,s.r,s.x,s.y,s.z,s.Q,s.as,s.at,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return this.du(0)}} +A.DV.prototype={ +ga0i(){var s,r=this,q=r.fx +if(q===$){s=new A.ayL(r).$0() +r.fx!==$&&A.N() +r.fx=s +q=s}return q}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return b instanceof A.DV&&J.f(b.a,s.a)&&J.f(b.b,s.b)&&J.f(b.c,s.c)&&b.d==s.d&&b.f==s.f&&b.r==s.r&&b.w==s.w&&b.ch==s.ch&&b.x==s.x&&b.as==s.as&&b.at==s.at&&b.ax==s.ax&&b.ay==s.ay&&b.e==s.e&&J.f(b.CW,s.CW)&&b.cx==s.cx&&b.cy==s.cy&&A.lO(b.db,s.db)&&A.lO(b.z,s.z)&&A.lO(b.dx,s.dx)&&A.lO(b.dy,s.dy)}, +gL(a){var s=this,r=null,q=s.db,p=s.dx,o=s.dy,n=s.z,m=n==null?r:A.bM(n),l=q==null?r:A.bM(q),k=p==null?r:A.bM(p) +return A.a6(s.a,s.b,s.c,s.d,s.f,s.r,s.w,s.ch,s.x,m,s.as,s.at,s.ax,s.ay,s.CW,s.cx,s.cy,l,s.e,A.a6(k,o==null?r:A.bM(o),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a))}, +j(a){return this.du(0)}, +gkV(a){return this.f}, +gov(a){return this.r}} +A.ayL.prototype={ +$0(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this.a,c=d.a,b=d.b,a=d.c,a0=d.d,a1=d.e,a2=d.f,a3=d.r,a4=d.w,a5=d.as,a6=d.at,a7=d.ax,a8=d.ay,a9=d.CW,b0=d.cx,b1=d.cy,b2=d.db,b3=d.dx,b4=d.dy,b5=t.e,b6=b5.a({}) +if(b0!=null){s=A.Kl(new A.n(b0.y)) +b6.backgroundColor=s}if(c!=null){s=A.Kl(c) +b6.color=s}if(b!=null){r=B.c.aw($.cp.bb().NoDecoration) +s=b.a +if((s|1)===s)r=(r|B.c.aw($.cp.bb().UnderlineDecoration))>>>0 +if((s|2)===s)r=(r|B.c.aw($.cp.bb().OverlineDecoration))>>>0 +if((s|4)===s)r=(r|B.c.aw($.cp.bb().LineThroughDecoration))>>>0 +b6.decoration=r}if(a1!=null)b6.decorationThickness=a1 +if(a!=null){s=A.Kl(a) +b6.decorationColor=s}if(a0!=null)b6.decorationStyle=$.bzZ()[a0.a] +if(a4!=null)b6.textBaseline=$.bjM()[a4.a] +if(a5!=null)A.bpK(b6,a5) +if(a6!=null)b6.letterSpacing=a6 +if(a7!=null)b6.wordSpacing=a7 +if(a8!=null)A.bpM(b6,a8) +switch(d.ch){case null:case void 0:break +case B.U:A.bpL(b6,!0) +break +case B.t0:A.bpL(b6,!1) +break}if(a9!=null){s=a9.S3("-") +b6.locale=s}q=d.fr +if(q===$){p=A.bhT(d.y,d.Q) +d.fr!==$&&A.N() +d.fr=p +q=p}A.bpJ(b6,q) +if(a2!=null||a3!=null)b6.fontStyle=A.biO(a2,a3) +if(b1!=null){d=A.Kl(new A.n(b1.y)) +b6.foregroundColor=d}if(b2!=null){o=A.b([],t.A) +for(d=b2.length,n=0;n")),o=o.h("O.E");q.H();){p=q.d +if(p==null)p=o.a(p) +if(r>=p.startIndex&&r<=p.endIndex)return new A.cZ(B.c.aw(p.startIndex),B.c.aw(p.endIndex))}return B.c9}, +yJ(){var s,r,q,p,o=this.a +o===$&&A.c() +o=o.a.getLineMetrics() +s=B.b.eq(o,t.e) +r=A.b([],t.ER) +for(o=s.$ti,q=new A.cR(s,s.gF(0),o.h("cR")),o=o.h("O.E");q.H();){p=q.d +r.push(new A.Lv(p==null?o.a(p):p))}return r}, +NA(a){var s=this.a +s===$&&A.c() +s=s.a.getLineMetricsAt(a) +return s==null?null:new A.Lv(s)}, +gY7(){var s=this.a +s===$&&A.c() +return B.c.aw(s.a.getNumberOfLines())}, +t(){var s=this.a +s===$&&A.c() +s.t() +this.as=!0}} +A.Lv.prototype={ +gabm(){return this.a.ascent}, +gUN(){return this.a.descent}, +gaiF(){return this.a.ascent}, +gaeF(){return this.a.isHardBreak}, +gmW(){return this.a.baseline}, +gb9(a){var s=this.a +return B.c.ai(s.ascent+s.descent)}, +gae(a){return this.a.left}, +gbW(a){return this.a.width}, +gXM(a){return B.c.aw(this.a.lineNumber)}, +$ivB:1} +A.ayI.prototype={ +Jc(a,b,c,d,e){var s;++this.c +this.d.push(1) +s=e==null?b:e +A.a3(this.a,"addPlaceholder",[a,b,$.bzS()[c.a],$.bjM()[0],s])}, +aaY(a,b,c){return this.Jc(a,b,c,null,null)}, +yk(a){var s=A.b([],t.T),r=B.b.ga_(this.e),q=r.y +if(q!=null)s.push(q) +q=r.Q +if(q!=null)B.b.I(s,q) +$.G().gzj().gWP().aR1(a,s) +this.a.addText(a)}, +cY(){var s,r,q,p,o,n,m,l,k,j="Paragraph" +if($.byP()){s=this.a +r=B.a1.hH(0,new A.l9(s.getText())) +q=A.bJG($.bAM(),r) +p=q==null +o=p?null:q.i(0,r) +if(o!=null)n=o +else{m=A.btP(r,B.wZ) +l=A.btP(r,B.wY) +n=new A.anY(A.bST(r),l,m)}if(!p){p=q.c +k=p.i(0,r) +if(k==null)q.a1M(0,r,n) +else{m=k.d +if(!J.f(m.b,n)){k.hW(0) +q.a1M(0,r,n)}else{k.hW(0) +l=q.b +l.Cn(m) +l=l.a.b.H_() +l.toString +p.u(0,r,l)}}}r=t.Gb +s.setWordsUtf16(r.a(n.c)) +s.setGraphemeBreaksUtf16(r.a(n.b)) +s.setLineBreaksUtf16(r.a(n.a))}s=this.a +n=s.build() +s.delete() +s=new A.a0O(this.b) +r=new A.hY(j,t.gA) +r.kH(s,n,j,t.e) +s.a!==$&&A.aj() +s.a=r +return s}, +gagT(){return this.c}, +ie(){var s=this.e +if(s.length<=1)return +s.pop() +this.a.pop()}, +ws(a9){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=this.e,a8=B.b.ga_(a7) +t.BQ.a(a9) +s=a9.a +if(s==null)s=a8.a +r=a9.b +if(r==null)r=a8.b +q=a9.c +if(q==null)q=a8.c +p=a9.d +if(p==null)p=a8.d +o=a9.e +if(o==null)o=a8.e +n=a9.f +if(n==null)n=a8.f +m=a9.r +if(m==null)m=a8.r +l=a9.w +if(l==null)l=a8.w +k=a9.x +if(k==null)k=a8.x +j=a9.y +if(j==null)j=a8.y +i=a9.z +if(i==null)i=a8.z +h=a9.Q +if(h==null)h=a8.Q +g=a9.as +if(g==null)g=a8.as +f=a9.at +if(f==null)f=a8.at +e=a9.ax +if(e==null)e=a8.ax +d=a9.ay +if(d==null)d=a8.ay +c=a9.ch +if(c==null)c=a8.ch +b=a9.CW +if(b==null)b=a8.CW +a=a9.cx +if(a==null)a=a8.cx +a0=a9.cy +if(a0==null)a0=a8.cy +a1=a9.db +if(a1==null)a1=a8.db +a2=a9.dx +if(a2==null)a2=a8.dx +a3=a9.dy +a4=A.be9(a,s,r,q,p,o,j,h,a2,g,m,a3==null?a8.dy:a3,n,a0,d,c,f,b,k,i,a1,l,e) +a7.push(a4) +a7=a4.cy +s=a7==null +if(!s||a4.cx!=null){a5=s?null:a7.a +if(a5==null){a5=$.bvr() +a7=a4.a +a7=a7==null?null:a7.gm(a7) +if(a7==null)a7=4278190080 +a5.setColorInt(a7)}a7=a4.cx +a6=a7==null?null:a7.a +if(a6==null)a6=$.bvq() +this.a.pushPaintStyle(a4.ga0i(),a5,a6)}else this.a.pushStyle(a4.ga0i())}} +A.b8N.prototype={ +$1(a){return this.a===a}, +$S:25} +A.O1.prototype={ +W(){return"IntlSegmenterGranularity."+this.b}} +A.a0d.prototype={ +j(a){return"CanvasKitError: "+this.a}} +A.a0S.prototype={ +t(){var s=this.f +s===$&&A.c() +s.t()}} +A.ayM.prototype={ +$1(a){return a<0||a>=J.bo(this.a)}, +$S:40} +A.LE.prototype={ +akY(a,b){var s={} +s.a=!1 +this.a.Aw(0,A.eE(J.bG(a.b,"text"))).cu(new A.aza(s,b),t.P).ts(new A.azb(s,b))}, +ajX(a){this.b.Af(0).cu(new A.az5(a),t.P).ts(new A.az6(this,a))}, +aT4(a){this.b.Af(0).cu(new A.az8(a),t.P).ts(new A.az9(a))}} +A.aza.prototype={ +$1(a){var s=this.b +if(a){s.toString +s.$1(B.aC.e3([!0]))}else{s.toString +s.$1(B.aC.e3(["copy_fail","Clipboard.setData failed",null])) +this.a.a=!0}}, +$S:113} +A.azb.prototype={ +$1(a){var s +if(!this.a.a){s=this.b +s.toString +s.$1(B.aC.e3(["copy_fail","Clipboard.setData failed",null]))}}, +$S:38} +A.az5.prototype={ +$1(a){var s=A.b3(["text",a],t.N,t.z),r=this.a +r.toString +r.$1(B.aC.e3([s]))}, +$S:129} +A.az6.prototype={ +$1(a){var s +if(a instanceof A.Cs){A.vb(B.G,null,t.H).cu(new A.az4(this.b),t.P) +return}s=this.b +A.xA("Could not get text from clipboard: "+A.j(a)) +s.toString +s.$1(B.aC.e3(["paste_fail","Clipboard.getData failed",null]))}, +$S:38} +A.az4.prototype={ +$1(a){var s=this.a +if(s!=null)s.$1(null)}, +$S:22} +A.az8.prototype={ +$1(a){var s=A.b3(["value",a.length!==0],t.N,t.z),r=this.a +r.toString +r.$1(B.aC.e3([s]))}, +$S:129} +A.az9.prototype={ +$1(a){var s,r +if(a instanceof A.Cs){A.vb(B.G,null,t.H).cu(new A.az7(this.a),t.P) +return}s=A.b3(["value",!1],t.N,t.z) +r=this.a +r.toString +r.$1(B.aC.e3([s]))}, +$S:38} +A.az7.prototype={ +$1(a){var s=this.a +if(s!=null)s.$1(null)}, +$S:22} +A.az2.prototype={ +Aw(a,b){return this.akX(0,b)}, +akX(a,b){var s=0,r=A.r(t.w),q,p=2,o,n,m,l,k +var $async$Aw=A.t(function(c,d){if(c===1){o=d +s=p}while(true)switch(s){case 0:p=4 +m=self.window.navigator.clipboard +m.toString +b.toString +s=7 +return A.x(A.ka(m.writeText(b),t.z),$async$Aw) +case 7:p=2 +s=6 +break +case 4:p=3 +k=o +n=A.b2(k) +A.xA("copy is not successful "+A.j(n)) +m=A.e5(!1,t.w) +q=m +s=1 +break +s=6 +break +case 3:s=2 +break +case 6:q=A.e5(!0,t.w) +s=1 +break +case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$Aw,r)}} +A.az3.prototype={ +Af(a){var s=0,r=A.r(t.N),q +var $async$Af=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q=A.ka(self.window.navigator.clipboard.readText(),t.N) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Af,r)}} +A.aDP.prototype={ +Aw(a,b){return A.e5(this.aHC(b),t.w)}, +aHC(a){var s,r,q,p,o="-99999px",n="transparent",m=A.c8(self.document,"textarea"),l=m.style +A.M(l,"position","absolute") +A.M(l,"top",o) +A.M(l,"left",o) +A.M(l,"opacity","0") +A.M(l,"color",n) +A.M(l,"background-color",n) +A.M(l,"background",n) +self.document.body.append(m) +s=m +A.bm0(s,a) +s.focus() +s.select() +r=!1 +try{r=self.document.execCommand("copy") +if(!r)A.xA("copy is not successful")}catch(p){q=A.b2(p) +A.xA("copy is not successful "+A.j(q))}finally{s.remove()}return r}} +A.aDQ.prototype={ +Af(a){return A.bf8(new A.Cs("Paste is not implemented for this browser."),null,t.N)}} +A.a1c.prototype={ +W(){return"ColorFilterType."+this.b}} +A.MO.prototype={ +j(a){var s=this +switch(s.d.a){case 0:return"ColorFilter.mode("+A.j(s.a)+", "+A.j(s.b)+")" +case 1:return"ColorFilter.matrix("+A.j(s.c)+")" +case 2:return"ColorFilter.linearToSrgbGamma()" +case 3:return"ColorFilter.srgbToLinearGamma()"}}} +A.aEm.prototype={ +gabK(){var s=this.b +if(s==null)s=null +else{s=s.canvasKitForceCpuOnly +if(s==null)s=null}return s===!0}, +gK9(){var s=this.b +if(s==null)s=null +else{s=s.debugShowSemanticsNodes +if(s==null)s=null}return s===!0}, +gai_(){var s=this.b +if(s==null)s=null +else{s=s.renderer +if(s==null)s=null}if(s==null){s=self.window.flutterWebRenderer +if(s==null)s=null}return s}, +gWO(){var s=this.b +if(s==null)s=null +else{s=s.fontFallbackBaseUrl +if(s==null)s=null}return s==null?"https://fonts.gstatic.com/s/":s}} +A.a3d.prototype={ +gpw(a){var s=this.d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}return s}} +A.aRo.prototype={ +Gn(a){return this.al6(a)}, +al6(a){var s=0,r=A.r(t.w),q,p=2,o,n,m,l,k,j,i +var $async$Gn=A.t(function(b,c){if(b===1){o=c +s=p}while(true)switch(s){case 0:j=self.window.screen +s=j!=null?3:4 +break +case 3:n=j.orientation +s=n!=null?5:6 +break +case 5:l=J.al(a) +s=l.gaA(a)?7:9 +break +case 7:n.unlock() +q=!0 +s=1 +break +s=8 +break +case 9:m=A.bJu(A.eE(l.ga9(a))) +s=m!=null?10:11 +break +case 10:p=13 +s=16 +return A.x(A.ka(n.lock(m),t.z),$async$Gn) +case 16:q=!0 +s=1 +break +p=2 +s=15 +break +case 13:p=12 +i=o +l=A.e5(!1,t.w) +q=l +s=1 +break +s=15 +break +case 12:s=2 +break +case 15:case 11:case 8:case 6:case 4:q=!1 +s=1 +break +case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$Gn,r)}} +A.aBI.prototype={ +$1(a){return this.a.warn(a)}, +$S:11} +A.aBL.prototype={ +$1(a){a.toString +return A.cE(a)}, +$S:440} +A.a51.prototype={ +gcz(a){return A.dS(this.b.status)}, +gaOg(){var s=this.b.headers,r=s.get("Content-Length") +if(r==null)r=null +if(r==null)return null +return A.pR(r,null)}, +gLa(){var s=this.b,r=A.dS(s.status)>=200&&A.dS(s.status)<300,q=A.dS(s.status),p=A.dS(s.status),o=A.dS(s.status)>307&&A.dS(s.status)<400 +return r||q===0||p===304||o}, +gzM(){var s=this +if(!s.gLa())throw A.d(new A.a50(s.a,s.gcz(0))) +return new A.aGT(s.b)}, +$ibn_:1} +A.aGT.prototype={ +Fb(a,b,c){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$Fb=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:n=q.a.body.getReader() +p=t.e +case 2:if(!!0){s=3 +break}s=4 +return A.x(A.ka(n.read(),p),$async$Fb) +case 4:o=e +if(o.done){s=3 +break}b.$1(c.a(o.value)) +s=2 +break +case 3:return A.p(null,r)}}) +return A.q($async$Fb,r)}, +vk(){var s=0,r=A.r(t.pI),q,p=this,o +var $async$vk=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:s=3 +return A.x(A.ka(p.a.arrayBuffer(),t.X),$async$vk) +case 3:o=b +o.toString +q=t.pI.a(o) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$vk,r)}} +A.a50.prototype={ +j(a){return'Flutter Web engine failed to fetch "'+this.a+'". HTTP request succeeded, but the server responded with HTTP status '+this.b+"."}, +$ic4:1} +A.NM.prototype={ +j(a){return'Flutter Web engine failed to complete HTTP request to fetch "'+this.a+'": '+A.j(this.b)}, +$ic4:1} +A.a2G.prototype={} +A.Mr.prototype={} +A.bbY.prototype={ +$2(a,b){this.a.$2(B.b.eq(a,t.e),b)}, +$S:462} +A.b9A.prototype={ +$1(a){var s=A.jn(a,0,null) +if(B.a6C.G(0,B.b.ga_(s.gEZ())))return s.j(0) +self.window.console.error("URL rejected by TrustedTypes policy flutter-engine: "+a+"(download prevented)") +return null}, +$S:496} +A.ai1.prototype={ +H(){var s=++this.b,r=this.a +if(s>r.length)throw A.d(A.ad("Iterator out of bounds")) +return s"))}, +gF(a){return B.c.aw(this.a.length)}} +A.ai6.prototype={ +H(){var s=++this.b,r=this.a +if(s>r.length)throw A.d(A.ad("Iterator out of bounds")) +return s"))}, +gF(a){return B.c.aw(this.a.length)}} +A.a2D.prototype={ +ga1(a){var s=this.b +s===$&&A.c() +return s}, +H(){var s=this.a.next() +if(s.done)return!1 +this.b=this.$ti.c.a(s.value) +return!0}} +A.aDj.prototype={} +A.aaW.prototype={} +A.Br.prototype={} +A.ap1.prototype={} +A.aQX.prototype={ +bU(a){var s,r,q=this,p=q.zg$ +p=p.length===0?q.a:B.b.ga_(p) +s=q.rb$ +r=new A.cL(new Float32Array(16)) +r.v(s) +q.adY$.push(new A.ap1(p,r))}, +bw(a){var s,r,q,p=this,o=p.adY$ +if(o.length===0)return +s=o.pop() +p.rb$=s.b +o=p.zg$ +r=s.a +q=p.a +while(!0){if(!!J.f(o.length===0?q:B.b.ga_(o),r))break +o.pop()}}, +aJ(a,b,c){this.rb$.aJ(0,b,c)}, +ff(a,b,c){this.rb$.ff(0,b,c)}, +oO(a,b){this.rb$.ai7(0,B.Fg,b)}, +az(a,b){this.rb$.bL(0,new A.cL(b))}} +A.bd0.prototype={ +$1(a){$.bhW=!1 +$.bF().ng("flutter/system",$.byU(),new A.bd_())}, +$S:54} +A.bd_.prototype={ +$1(a){}, +$S:29} +A.aEK.prototype={ +aR1(a,b){var s,r,q,p,o,n=this,m=A.C(t.S) +for(s=new A.Ra(a,0,0),r=n.d,q=n.c;s.H();){p=s.d +if(!(p<160||r.G(0,p)||q.G(0,p)))m.E(0,p)}if(m.a===0)return +o=A.ab(m,!0,m.$ti.c) +if(n.a.ak4(o,b).length!==0)n.aM4(o)}, +aM4(a){var s=this +s.at.I(0,a) +if(!s.ax){s.ax=!0 +s.Q=A.vb(B.G,new A.aES(s),t.H)}}, +awX(){var s,r +this.ax=!1 +s=this.at +if(s.a===0)return +r=A.ab(s,!0,A.w(s).c) +s.af(0) +this.aRs(r)}, +aRs(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=A.b([],t.t),d=A.b([],t.XS),c=t.Qg,b=A.b([],c) +for(s=a.length,r=t.Ie,q=0;qr){B.b.af(k) +k.push(o) +r=o.e +q=o}else if(n===r){k.push(o) +if(o.d1)if(B.b.h8(k,new A.aER(l))){s=self.window.navigator.language +if(s==="zh-Hans"||s==="zh-CN"||s==="zh-SG"||s==="zh-MY"){m=l.f +if(B.b.G(k,m))q=m}else if(s==="zh-Hant"||s==="zh-TW"||s==="zh-MO"){m=l.r +if(B.b.G(k,m))q=m}else if(s==="zh-HK"){m=l.w +if(B.b.G(k,m))q=m}else if(s==="ja"){m=l.x +if(B.b.G(k,m))q=m}else if(s==="ko"){m=l.y +if(B.b.G(k,m))q=m}else{m=l.f +if(B.b.G(k,m))q=m}}else{m=l.z +if(B.b.G(k,m))q=m +else{m=l.f +if(B.b.G(k,m))q=m}}q.toString +return q}, +avP(a){var s,r,q,p=A.b([],t.XS) +for(s=a.split(","),r=s.length,q=0;q=q[r])s=r+1 +else p=r}}} +A.a3t.prototype={ +b_g(){var s=this.e +if(s==null)return A.e5(null,t.H) +else return s.a}, +E(a,b){var s,r,q=this +if(q.b.G(0,b)||q.c.aR(0,b.b))return +s=q.c +r=s.a +s.u(0,b.b,b) +if(q.e==null)q.e=new A.bH(new A.aM($.aK,t.D),t.h) +if(r===0)A.dn(B.G,q.gamg())}, +x4(){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$x4=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:j=A.D(t.N,t.r) +i=A.b([],t.T) +for(p=q.c,o=p.gbm(0),n=A.w(o),n=n.h("@<1>").ak(n.y[1]),o=new A.bt(J.az(o.a),o.b,n.h("bt<1,2>")),m=t.H,n=n.y[1];o.H();){l=o.a +if(l==null)l=n.a(l) +j.u(0,l.b,A.bmP(new A.aDZ(q,l,i),m))}s=2 +return A.x(A.f2(j.gbm(0),m),$async$x4) +case 2:B.b.kg(i) +for(o=i.length,n=q.a,m=n.as,k=0;k").ak(s.y[1]),o=new A.bt(J.az(o.a),o.b,s.h("bt<1,2>")),s=s.y[1];o.H();){r=o.a +for(r=J.az(r==null?s.a(r):r);r.H();){q=r.ga1(r) +q.b.$1(q.a)}}p.b=p.a +p.a=null}, +a1Z(a,b){var s,r=this,q=r.a +if(q==null)q=r.a=A.D(t.N,r.$ti.h("H>")) +s=q.i(0,a) +if(s==null){s=A.b([],r.$ti.h("v>")) +q.u(0,a,s) +q=s}else q=s +q.push(b)}, +aYZ(a){var s,r,q=this.b +if(q==null)return null +s=q.i(0,a) +if(s==null||s.length===0)return null +r=(s&&B.b).di(s,0) +this.a1Z(a,r) +return r.a}} +A.IZ.prototype={} +A.a43.prototype={ +aht(){var s=A.F3() +this.c=s}, +ahv(){var s=A.F3() +this.d=s}, +ahu(){var s=A.F3() +this.e=s}, +a0t(){var s,r,q,p=this,o=p.c +o.toString +s=p.d +s.toString +r=p.e +r.toString +r=A.b([p.a,p.b,o,s,r,r,0,0,0,0,1],t.t) +$.bf5.push(new A.rm(r)) +q=A.F3() +if(q-$.bvX()>1e5){$.bFp=q +o=$.bF() +s=$.bf5 +A.uk(o.dx,o.dy,s,t.Px) +$.bf5=A.b([],t.no)}}} +A.PQ.prototype={ +glp(){return this.cx}, +ym(a){var s=this +s.GN(a) +s.cx=a.cx +s.cy=a.cy +s.db=a.db +a.cx=null}, +cJ(a){var s,r=this,q="transform-origin",p=r.ty("flt-backdrop") +A.M(p.style,q,"0 0 0") +s=A.c8(self.document,"flt-backdrop-interior") +r.cx=s +A.M(s.style,"position","absolute") +s=r.ty("flt-backdrop-filter") +r.cy=s +A.M(s.style,q,"0 0 0") +s=r.cy +s.toString +p.append(s) +s=r.cx +s.toString +p.append(s) +return p}, +oh(){var s=this +s.AX() +$.QZ.ML(s.db) +s.cy=s.cx=s.db=null}, +iN(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=t.m1.a(g.CW) +$.QZ.ML(g.db) +g.db=null +s=g.fr +r=g.f +if(s!=r){r.toString +q=new A.cL(new Float32Array(16)) +if(q.jR(r)===0)A.X(A.hH(r,"other","Matrix cannot be inverted")) +g.dy=q +g.fr=g.f}$.nK.toString +p=$.cF().d +if(p==null){s=self.window.devicePixelRatio +p=s===0?1:s}s=g.dy +s===$&&A.c() +o=A.Dh(s,new A.A(0,0,$.nK.gnv().a*p,$.nK.gnv().b*p)) +n=o.a +m=o.b +l=o.c-n +k=o.d-m +j=g.e +for(;j!=null;){if(j.gEh()){i=g.dx=j.w +n=i.a +m=i.b +l=i.c-n +k=i.d-m +break}j=j.e}h=g.cy.style +A.M(h,"position","absolute") +A.M(h,"left",A.j(n)+"px") +A.M(h,"top",A.j(m)+"px") +A.M(h,"width",A.j(l)+"px") +A.M(h,"height",A.j(k)+"px") +s=$.eb() +if(s===B.cP){A.M(h,"background-color","#000") +A.M(h,"opacity","0.2")}else{if(s===B.au){s=g.cy +s.toString +A.h4(s,"-webkit-backdrop-filter",f.gKU())}s=g.cy +s.toString +A.h4(s,"backdrop-filter",f.gKU())}}, +a8(a,b){var s=this +s.rV(0,b) +if(!s.CW.k(0,b.CW))s.iN() +else s.a2F()}, +a2F(){var s=this.e +for(;s!=null;){if(s.gEh()){if(!J.f(s.w,this.dx))this.iN() +break}s=s.e}}, +q9(){this.aot() +this.a2F()}, +$iawX:1} +A.qI.prototype={ +soa(a,b){var s,r,q=this +q.a=b +s=B.c.bK(b.a)-1 +r=B.c.bK(q.a.b)-1 +if(q.z!==s||q.Q!==r){q.z=s +q.Q=r +q.aab()}}, +aab(){A.M(this.c.style,"transform","translate("+this.z+"px, "+this.Q+"px)")}, +a8l(){var s=this,r=s.a,q=r.a +r=r.b +s.d.aJ(0,-q+(q-1-s.z)+1,-r+(r-1-s.Q)+1)}, +adg(a,b){return this.r>=A.axn(a.c-a.a)&&this.w>=A.axm(a.d-a.b)&&this.ay===b}, +af(a){var s,r,q,p,o,n=this +n.at=!1 +n.d.af(0) +s=n.f +r=s.length +for(q=n.c,p=0;po){l=o +o=p +p=l}if(n>m){l=m +m=n +n=l}k=Math.abs(a2.r) +j=Math.abs(a2.e) +i=Math.abs(a2.w) +h=Math.abs(a2.f) +g=Math.abs(a2.z) +f=Math.abs(a2.x) +e=Math.abs(a2.Q) +d=Math.abs(a2.y) +b.beginPath() +b.moveTo(p+k,n) +a=o-k +b.lineTo(a,n) +A.Zc(b,a,n+i,k,i,0,4.71238898038469,6.283185307179586,!1) +a=m-d +b.lineTo(o,a) +A.Zc(b,o-f,a,f,d,0,0,1.5707963267948966,!1) +a=p+g +b.lineTo(a,m) +A.Zc(b,a,m-e,g,e,0,1.5707963267948966,3.141592653589793,!1) +a=n+h +b.lineTo(p,a) +A.Zc(b,p+j,a,j,h,0,3.141592653589793,4.71238898038469,!1) +a1.gdX().lD(c) +a1.gdX().qb()}}, +z0(a,b){var s,r,q,p,o,n,m=this.d +if(this.Cc(b)){a=A.Za(a,b) +s=A.Zb(a,b,"draw-oval",m.c) +this.Bi(s,new A.i(a.gae(a),a.gaj(a)),b) +A.M(s.style,"border-radius",A.j((a.gaH(a)-a.gae(a))/2)+"px / "+A.j((a.gaQ(a)-a.gaj(a))/2)+"px")}else{m.gdX().oZ(b,a) +r=b.b +m.gcQ(0).beginPath() +q=m.gdX().Q +p=q==null +o=p?a.gbC().a:a.gbC().a-q.gae(q) +n=p?a.gbC().b:a.gbC().b-q.gaj(q) +A.Zc(m.gcQ(0),o,n,(a.c-a.a)/2,(a.d-a.b)/2,0,0,6.283185307179586,!1) +m.gdX().lD(r) +m.gdX().qb()}}, +cs(a,b,c){var s,r,q,p,o,n,m,l,k=this +if(k.Ta(c)){s=A.Za(A.jT(a,b),c) +r=A.Zb(s,c,"draw-circle",k.d.c) +k.Bi(r,new A.i(s.gae(s),s.gaj(s)),c) +A.M(r.style,"border-radius","50%")}else{q=c.w!=null?A.jT(a,b):null +p=k.d +p.gdX().oZ(c,q) +q=c.b +p.gcQ(0).beginPath() +o=p.gdX().Q +n=o==null +m=a.a +m=n?m:m-o.gae(o) +l=a.b +l=n?l:l-o.gaj(o) +A.Zc(p.gcQ(0),m,l,b,b,0,0,6.283185307179586,!1) +p.gdX().lD(q) +p.gdX().qb()}}, +a3(a,b){var s,r,q,p,o,n,m,l,k,j,i,h=this,g="setAttribute" +if(h.Cc(b)){s=h.d +r=s.c +t.Ci.a(a) +q=a.a.a_z() +if(q!=null){h.b7(q,b) +return}p=a.a +o=p.ax?p.a4G():null +if(o!=null){h.dm(o,b) +return}n=A.bty() +p=A.bf("visible") +A.a3(n,g,["overflow",p==null?t.K.a(p):p]) +p=self.document.createElementNS("http://www.w3.org/2000/svg","path") +n.append(p) +m=b.b +if(m!==B.u)if(m!==B.i){m=b.c +m=m!==0&&m!=null}else m=!1 +else m=!0 +l=b.r +if(m){m=A.bf(A.eX(l)) +A.a3(p,g,["stroke",m==null?t.K.a(m):m]) +m=b.c +m=A.bf(A.j(m==null?1:m)) +A.a3(p,g,["stroke-width",m==null?t.K.a(m):m]) +m=b.d +if(m!=null){m=A.bf(A.j(A.buJ(m))) +A.a3(p,g,["stroke-linecap",m==null?t.K.a(m):m])}m=A.bf("none") +A.a3(p,g,["fill",m==null?t.K.a(m):m])}else{m=A.bf(A.eX(l)) +A.a3(p,g,["fill",m==null?t.K.a(m):m])}if(a.b===B.aD){m=A.bf("evenodd") +A.a3(p,g,["fill-rule",m==null?t.K.a(m):m])}m=A.bf(A.buu(a.a,0,0)) +A.a3(p,g,["d",m==null?t.K.a(m):m]) +if(s.b==null){k=n.style +A.M(k,"position","absolute") +if(!r.Ek(0)){A.M(k,"transform",A.nN(r.a)) +A.M(k,"transform-origin","0 0 0")}}if(b.x!=null){s=b.b +j=A.eX(b.r) +i=b.x.b +p=$.eb() +if(p===B.au&&s!==B.u)A.M(n.style,"box-shadow","0px 0px "+A.j(i*2)+"px "+j) +else A.M(n.style,"filter","blur("+A.j(i)+"px)")}h.Bi(n,B.h,b)}else{s=b.w!=null?a.hB(0):null +p=h.d +p.gdX().oZ(b,s) +s=b.b +if(s==null&&b.c!=null)p.a3(a,B.u) +else p.a3(a,s) +p.gdX().qb()}}, +tF(a,b,c,d){var s,r,q,p,o,n=this.d,m=A.bRL(a.hB(0),c) +if(m!=null){s=(B.c.ai(0.3*(b.gm(b)>>>24&255))&255)<<24|b.gm(b)&16777215 +r=A.bRB(s>>>16&255,s>>>8&255,s&255,255) +n.gcQ(0).save() +q=n.gcQ(0) +q.globalAlpha=(s>>>24&255)/255 +if(d){s=$.eb() +s=s!==B.au}else s=!1 +q=m.b +p=m.a +o=q.a +q=q.b +if(s){n.gcQ(0).translate(o,q) +A.bey(n.gcQ(0),A.buc(new A.pF(B.a0,p))) +A.aBH(n.gcQ(0),"") +A.aBG(n.gcQ(0),r)}else{A.bey(n.gcQ(0),"none") +A.aBH(n.gcQ(0),"") +A.aBG(n.gcQ(0),r) +n.gcQ(0).shadowBlur=p +A.beA(n.gcQ(0),r) +A.beB(n.gcQ(0),o) +A.beC(n.gcQ(0),q)}n.y3(n.gcQ(0),a) +A.aBF(n.gcQ(0),null) +n.gcQ(0).restore()}}, +mg(a,b,c,d){var s=this,r=s.Qc(b,c,d) +if(d.z!=null)s.a2g(r,b.gbW(b),b.gb9(b)) +if(!s.ax)s.H8()}, +Sh(a){var s,r,q,p=a.a,o=A.aBJ(p) +o.toString +s=this.b +if(s!=null){r=s.aYZ(o) +if(r!=null)return r}if(!a.b){a.b=!0 +A.M(p.style,"position","absolute")}q=A.aBM(p,!0) +p=this.b +if(p!=null)p.a1Z(o,new A.IZ(q,A.bP0(),p.$ti.h("IZ<1>"))) +return q}, +Qc(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null +t.gc.a(a) +s=c.a +r=A.bS0(c.z) +if(r instanceof A.OW)q=h.avC(a,r.b,r.c,c) +else if(r instanceof A.OQ){p=A.bVS(r.b) +o=p.b +h.c.append(o) +h.f.push(o) +q=h.Sh(a) +A.M(q.style,"filter","url(#"+p.a+")")}else q=h.Sh(a) +o=q.style +n=A.bbL(s) +A.M(o,"mix-blend-mode",n==null?"":n) +o=h.ax +if(o){o=h.d +o.gdX().oZ(c,g) +A.blO(o.gcQ(0),q,b.a,b.b,g,g,g,g,g,g) +o.gdX().qb()}else{o=h.d +if(o.b!=null){n=q.style +n.removeProperty("width") +n.removeProperty("height") +n=o.b +n.toString +m=A.bhS(n,q,b,o.c) +for(o=m.length,n=h.c,l=h.f,k=0;k=m){p=e+m*s/q +return A.b([a,e,b,p,c,p,d,f],t.n)}o=e+s +n=f-r +return A.b([a,e,b,o,b,o,c,n,c,n,d,f],t.n)}, +adl(a,b,c,d){var s,r,q,p,o,n,m,l,k,j,i,h +if(c.gaA(0))return +s=this.a5H(0,b.a,b.c,a.gbW(a),c.a,c.c) +r=this.a5H(0,b.b,b.d,a.gb9(a),c.b,c.d) +for(q=this.a,p=t.Vh,o=0;o=0)s.c=-r +s.e=s.d=-1}, +m3(a){this.Je(a,0,0)}, +HE(){var s,r=this.a,q=r.w +for(r=r.r,s=0;s359){j=c4<0?-0.001953125:0.001953125 +i=p +do{i-=j +m=Math.cos(i) +l=Math.sin(i)}while(o===m&&n===l)}}h=c4>0?0:1 +g=c0/2 +f=(c2.d-c2.b)/2 +e=c2.gbC().a+g*Math.cos(p) +d=c2.gbC().b+f*Math.sin(p) +if(o===m&&n===l){if(c5)b9.a4(0,e,d) +else b9.Ro(e,d) +return}c=o*m+n*l +b=o*l-n*m +if(Math.abs(b)<=0.000244140625)if(c>0)if(!(b>=0&&h===0))c0=b<=0&&h===1 +else c0=!0 +else c0=!1 +else c0=!1 +if(c0){if(c5)b9.a4(0,e,d) +else b9.Ro(e,d) +return}c0=h===1 +if(c0)b=-b +if(0===b)a=2 +else if(0===c)a=b>0?1:3 +else{r=b<0 +a=r?2:0 +if(c<0!==r)++a}a0=A.b([],t.td) +for(a1=0;a11){d=Math.sqrt(d) +l*=d +k*=d}c=(q*h+p*g)/l +b=(p*h-q*g)/k +a=(n*h+m*g)/l +a0=(m*h-n*g)/k +a1=a-c +a2=a0-b +a3=Math.sqrt(Math.max(1/(a1*a1+a2*a2)-0.25,0)) +a4=(c+a)/2-a2*a3 +a5=(b+a0)/2+a1*a3 +a6=Math.atan2(b-a5,c-a4) +a7=Math.atan2(a0-a5,a-a4)-a6 +if(a7<0)a7+=6.283185307179586 +if(Math.abs(a7)<0.0000031415926535897933){c2.q(0,n,m) +return}a8=B.c.d0(Math.abs(a7/2.0943951023931953)) +a9=a7/a8 +b0=Math.tan(a9/2) +if(!isFinite(b0))return +b1=Math.sqrt(0.5+Math.cos(a9)*0.5) +b2=Math.abs(1.5707963267948966-Math.abs(a9)-0)<0.000244140625&&B.c.bK(l)===l&&B.c.bK(k)===k&&B.c.bK(n)===n&&B.c.bK(m)===m +for(b3=a6,b4=0;b4=6.283185307179586||c<=-6.283185307179586){s=b/1.5707963267948966 +r=Math.floor(s+0.5) +if(Math.abs(s-r-0)<0.000244140625){q=r+1 +if(q<0)q+=4 +p=c>0?0:1 +this.P3(a,p,B.c.aw(q)) +return}}this.vj(0,a,b,c,!0)}, +Cq(a,b){var s,r,q,p,o,n,m=this,l=a.length +if(l<=0)return +s=m.a.l9(0,0) +m.c=s+1 +r=m.a +q=a[0] +r.j8(s,q.a,q.b) +m.a.akt(1,l-1) +for(r=m.a.f,p=1;p=c||d>=b)g.Je(a,0,3) +else if(A.bTw(a1))g.P3(a,0,3) +else{r=c-e +q=b-d +p=Math.max(0,a0) +o=Math.max(0,a1.r) +n=Math.max(0,a1.z) +m=Math.max(0,a1.x) +l=Math.max(0,a1.f) +k=Math.max(0,a1.w) +j=Math.max(0,a1.Q) +i=Math.max(0,a1.y) +h=A.b8Q(j,i,q,A.b8Q(l,k,q,A.b8Q(n,m,r,A.b8Q(p,o,r,1)))) +a0=b-h*j +g.a4(0,e,a0) +g.q(0,e,d+h*l) +g.kO(e,d,e+h*p,d,0.707106781) +g.q(0,c-h*o,d) +g.kO(c,d,c,d+h*k,0.707106781) +g.q(0,c,b-h*i) +g.kO(c,b,c-h*m,b,0.707106781) +g.q(0,e+h*n,b) +g.kO(e,b,e,a0,0.707106781) +g.T(0) +g.e=f?0:-1 +e=g.a +e.ax=f +e.ch=!1 +e.CW=6}}, +pp(a,b,c,d){var s=d==null?null:A.xC(d) +this.aM7(b,c.a,c.b,s,0)}, +mU(a,b,c){return this.pp(0,b,c,null)}, +aM7(a9,b0,b1,b2,b3){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 +t.Ci.a(a9) +s=a9.a +if(s.w===0)return +r=s.k(0,a8.a)?A.bpY(a8):a9 +s=a8.a +q=s.d +if(b3===0)if(b2!=null)p=b2[15]===1&&b2[14]===0&&b2[11]===0&&b2[10]===1&&b2[9]===0&&b2[8]===0&&b2[7]===0&&b2[6]===0&&b2[3]===0&&b2[2]===0 +else p=!0 +else p=!1 +o=r.a +if(p)s.Jm(0,o) +else{n=new A.vZ(o) +n.xk(o) +m=new Float32Array(8) +for(s=b2==null,l=2*(q-1),k=l+1,p=q===0,j=!0;i=n.pU(0,m),i!==6;j=!1)switch(i){case 0:if(s){h=m[0] +g=h+b0}else{h=b2[0] +f=m[0] +g=h*(f+b0)+b2[4]*(m[1]+b1)+b2[12] +h=f}if(s){f=m[1] +e=f+b1}else{f=b2[1] +d=b2[5] +c=m[1] +e=f*(h+b0)+d*(c+b1)+b2[13]+b1 +f=c}if(j&&a8.a.w!==0){a8.xN() +if(p){b=0 +a=0}else{h=a8.a.f +b=h[l] +a=h[k]}if(a8.c<=0||!p||b!==g||a!==e)a8.q(0,m[0],m[1])}else{a0=a8.a.l9(0,0) +a8.c=a0+1 +a1=a0*2 +d=a8.a.f +d[a1]=h +d[a1+1]=f +a8.e=a8.d=-1}break +case 1:a8.q(0,m[2],m[3]) +break +case 2:h=m[2] +f=m[3] +d=m[4] +c=m[5] +a0=a8.a.l9(2,0) +a1=a0*2 +a2=a8.a.f +a2[a1]=h +a2[a1+1]=f +a1=(a0+1)*2 +a2[a1]=d +a2[a1+1]=c +a8.e=a8.d=-1 +break +case 3:a8.kO(m[2],m[3],m[4],m[5],o.y[n.b]) +break +case 4:a8.l(m[2],m[3],m[4],m[5],m[6],m[7]) +break +case 5:a8.T(0) +break}}s=r.c +if(s>=0)a8.c=q+s +s=a8.a +a3=s.d +a4=s.f +for(a5=q*2,s=a3*2,p=b2==null;a5s.c||q>s.d)return!1 +p=a3.a +o=new A.aNo(p,r,q,new Float32Array(18)) +o.aLE() +n=B.aD===a3.b +m=o.d +if((n?m&1:m)!==0)return!0 +l=o.e +if(l<=1)return l!==0 +p=(l&1)===0 +if(!p||n)return!p +k=A.bgb(a3.a,!0) +j=new Float32Array(18) +i=A.b([],t.yv) +p=k.a +h=!1 +do{g=i.length +switch(k.pU(0,j)){case 0:case 5:break +case 1:A.bVX(j,r,q,i) +break +case 2:A.bVY(j,r,q,i) +break +case 3:f=k.f +A.bVV(j,r,q,p.y[f],i) +break +case 4:A.bVW(j,r,q,i) +break +case 6:h=!0 +break}f=i.length +if(f>g){e=f-1 +d=i[e] +c=d.a +b=d.b +if(Math.abs(c*c+b*b-0)<0.000244140625)B.b.di(i,e) +else for(a=0;a0?1:0 +if(f<=0){f=b*a1 +if(f<0)f=-1 +else f=f>0?1:0 +f=f<=0}else f=!1}else f=!1 +if(f){a2=B.b.di(i,e) +if(a!==i.length)i[a]=a2 +break}}}}while(!h) +return i.length!==0}, +dz(a){var s,r=a.a,q=a.b,p=this.a,o=A.bI_(p,r,q),n=p.e,m=new Uint8Array(n) +B.L.jC(m,0,p.r) +o=new A.GE(o,m) +n=p.x +o.x=n +o.z=p.z +s=p.y +if(s!=null){n=new Float32Array(n) +o.y=n +B.eF.jC(n,0,s)}o.e=p.e +o.w=p.w +o.c=p.c +o.d=p.d +n=p.Q +o.Q=n +if(!n){o.a=p.a.aJ(0,r,q) +n=p.b +o.b=n==null?null:n.aJ(0,r,q) +o.as=p.as}o.cx=p.cx +o.at=p.at +o.ax=p.ax +o.ay=p.ay +o.ch=p.ch +o.CW=p.CW +r=new A.wE(o,B.bX) +r.PS(this) +return r}, +az(a,b){var s=A.bpY(this) +s.aKw(b) +return s}, +aKw(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +this.a.x5() +s=this.a +r=s.d +q=s.f +p=r*2 +for(o=0;o0.000244140625){b0=(a-a2)/a9 +if(b0>=0&&b0<=1){b1=1-b0 +b2=b1*b1 +b3=2*b0*b1 +b0*=b0 +b4=b2*a+b3*a2+b0*a4 +b5=b2*a1+b3*a3+b0*a5 +s=Math.min(s,b4) +f.a=s +a7=Math.max(a7,b4) +f.c=a7 +a6=Math.min(a6,b5) +f.b=a6 +a8=Math.max(a8,b5) +f.d=a8}}a9=a1-2*a3+a5 +if(Math.abs(a9)>0.000244140625){b6=(a1-a3)/a9 +if(b6>=0&&b6<=1){b7=1-b6 +b2=b7*b7 +b3=2*b6*b7 +b6*=b6 +b8=b2*a+b3*a2+b6*a4 +b9=b2*a1+b3*a3+b6*a5 +s=Math.min(s,b8) +f.a=s +a7=Math.max(a7,b8) +f.c=a7 +a6=Math.min(a6,b9) +f.b=a6 +a8=Math.max(a8,b9) +f.d=a8}h=a8 +j=a7 +i=a6 +k=s}else{h=a8 +j=a7 +i=a6 +k=s}break +case 3:if(e==null)e=new A.azW() +s=e1.y[r.b] +b=c+1 +a=q[c] +a0=b+1 +a1=q[b] +b=a0+1 +a2=q[a0] +a0=b+1 +a3=q[b] +a4=q[a0] +a5=q[a0+1] +e.a=Math.min(a,a4) +e.b=Math.min(a1,a5) +e.c=Math.max(a,a4) +e.d=Math.max(a1,a5) +c0=new A.tf() +c1=a4-a +c2=s*(a2-a) +if(c0.tQ(s*c1-c1,c1-2*c2,c2)!==0){a6=c0.a +a6.toString +if(a6>=0&&a6<=1){c3=2*(s-1) +a9=(-c3*a6+c3)*a6+1 +c4=a2*s +b4=(((a4-2*c4+a)*a6+2*(c4-a))*a6+a)/a9 +c4=a3*s +b5=(((a5-2*c4+a1)*a6+2*(c4-a1))*a6+a1)/a9 +e.a=Math.min(e.a,b4) +e.c=Math.max(e.c,b4) +e.b=Math.min(e.b,b5) +e.d=Math.max(e.d,b5)}}c5=a5-a1 +c6=s*(a3-a1) +if(c0.tQ(s*c5-c5,c5-2*c6,c6)!==0){a6=c0.a +a6.toString +if(a6>=0&&a6<=1){c3=2*(s-1) +a9=(-c3*a6+c3)*a6+1 +c4=a2*s +b8=(((a4-2*c4+a)*a6+2*(c4-a))*a6+a)/a9 +c4=a3*s +b9=(((a5-2*c4+a1)*a6+2*(c4-a1))*a6+a1)/a9 +e.a=Math.min(e.a,b8) +e.c=Math.max(e.c,b8) +e.b=Math.min(e.b,b9) +e.d=Math.max(e.d,b9)}}k=e.a +i=e.b +j=e.c +h=e.d +break +case 4:if(g==null)g=new A.aAe() +b=c+1 +c7=q[c] +a0=b+1 +c8=q[b] +b=a0+1 +c9=q[a0] +a0=b+1 +d0=q[b] +b=a0+1 +d1=q[a0] +a0=b+1 +d2=q[b] +d3=q[a0] +d4=q[a0+1] +s=Math.min(c7,d3) +g.a=s +g.c=Math.min(c8,d4) +a6=Math.max(c7,d3) +g.b=a6 +g.d=Math.max(c8,d4) +if(!(c7c9&&c9>d1&&d1>d3 +else a7=!0 +if(!a7){a7=-c7 +d5=a7+3*(c9-d1)+d3 +d6=2*(c7-2*c9+d1) +d7=d6*d6-4*d5*(a7+c9) +if(d7>=0&&Math.abs(d5)>0.000244140625){a7=-d6 +a8=2*d5 +if(d7===0){d8=a7/a8 +b1=1-d8 +if(d8>=0&&d8<=1){a7=3*b1 +b4=b1*b1*b1*c7+a7*b1*d8*c9+a7*d8*d8*d1+d8*d8*d8*d3 +g.a=Math.min(b4,s) +g.b=Math.max(b4,a6)}}else{d7=Math.sqrt(d7) +d8=(a7-d7)/a8 +b1=1-d8 +if(d8>=0&&d8<=1){s=3*b1 +b4=b1*b1*b1*c7+s*b1*d8*c9+s*d8*d8*d1+d8*d8*d8*d3 +g.a=Math.min(b4,g.a) +g.b=Math.max(b4,g.b)}d8=(a7+d7)/a8 +b1=1-d8 +if(d8>=0&&d8<=1){s=3*b1 +b4=b1*b1*b1*c7+s*b1*d8*c9+s*d8*d8*d1+d8*d8*d8*d3 +g.a=Math.min(b4,g.a) +g.b=Math.max(b4,g.b)}}}}if(!(c8d0&&d0>d2&&d2>d4 +else s=!0 +if(!s){s=-c8 +d5=s+3*(d0-d2)+d4 +d6=2*(c8-2*d0+d2) +d7=d6*d6-4*d5*(s+d0) +if(d7>=0&&Math.abs(d5)>0.000244140625){s=-d6 +a6=2*d5 +if(d7===0){d8=s/a6 +b1=1-d8 +if(d8>=0&&d8<=1){s=3*b1 +b5=b1*b1*b1*c8+s*b1*d8*d0+s*d8*d8*d2+d8*d8*d8*d4 +g.c=Math.min(b5,g.c) +g.d=Math.max(b5,g.d)}}else{d7=Math.sqrt(d7) +d8=(s-d7)/a6 +b1=1-d8 +if(d8>=0&&d8<=1){a7=3*b1 +b5=b1*b1*b1*c8+a7*b1*d8*d0+a7*d8*d8*d2+d8*d8*d8*d4 +g.c=Math.min(b5,g.c) +g.d=Math.max(b5,g.d)}s=(s+d7)/a6 +b7=1-s +if(s>=0&&s<=1){a6=3*b7 +b5=b7*b7*b7*c8+a6*b7*s*d0+a6*s*s*d2+s*s*s*d4 +g.c=Math.min(b5,g.c) +g.d=Math.max(b5,g.d)}}}}k=g.a +i=g.c +j=g.b +h=g.d +break}if(!p){l=h +m=j +n=i +o=k +p=!0}else{o=Math.min(o,k) +m=Math.max(m,j) +n=Math.min(n,i) +l=Math.max(l,h)}}d9=p?new A.A(o,n,m,l):B.M +e0.a.hB(0) +return e0.a.b=d9}, +tu(){var s=A.boD(this.a),r=A.b([],t._k) +return new A.acF(new A.aUn(new A.aqF(s,A.bgb(s,!1),r,!1)))}, +j(a){return this.du(0)}, +$irZ:1} +A.aNn.prototype={ +Pc(a){var s=this,r=s.r,q=s.x +if(r!==q||s.w!==s.y){if(isNaN(r)||isNaN(s.w)||isNaN(q)||isNaN(s.y))return 5 +a[0]=r +a[1]=s.w +a[2]=q +r=s.y +a[3]=r +s.r=q +s.w=r +return 1}else{a[0]=q +a[1]=s.y +return 5}}, +Hb(){var s,r,q=this +if(q.e===1){q.e=2 +return new A.i(q.x,q.y)}s=q.a.f +r=q.Q +return new A.i(s[r-2],s[r-1])}, +d6(){var s=this,r=s.z,q=s.a +if(rs)a=s}r=this.c +q=r.length +if(q===0)return-1 +p=q-1 +for(o=0;os)b=s +r=$.G().Z() +if(a>b||h.c.length===0)return r +q=h.Sn(a) +p=h.Sn(b) +if(q===-1||p===-1)return r +o=h.c +n=o[q] +m=h.QL(q,a) +l=m.a +r.a4(0,l.a,l.b) +k=m.c +j=h.QL(p,b).c +if(q===p)h.RR(n,k,j,r) +else{i=q +do{h.RR(n,k,1,r);++i +n=o[i] +if(i!==p){k=0 +continue}else break}while(!0) +h.RR(n,0,j,r)}return r}, +RR(a,b,c,d){var s,r=a.c +switch(a.a){case 1:s=1-c +d.q(0,r[2]*c+r[0]*s,r[3]*c+r[1]*s) +break +case 4:s=$.bjA() +A.bRy(r,b,c,s) +d.l(s[2],s[3],s[4],s[5],s[6],s[7]) +break +case 2:s=$.bjA() +A.bOA(r,b,c,s) +d.YR(s[2],s[3],s[4],s[5]) +break +case 3:throw A.d(A.d_(null)) +default:throw A.d(A.af("Invalid segment type"))}}, +aub(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=1073741823,a={} +c.f=!1 +a.a=0 +s=new A.b4u(a,c) +r=new Float32Array(8) +q=a0.a +p=c.c +o=!1 +do{if(a0.d6()===0&&o)break +n=a0.pU(0,r) +switch(n){case 0:o=!0 +break +case 1:s.$4(r[0],r[1],r[2],r[3]) +break +case 4:a.a=A.bhw(r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7],a.a,0,b,p) +break +case 3:m=a0.f +l=q.y[m] +k=new A.kj(r[0],r[1],r[2],r[3],r[4],r[5],l).N0() +j=k.length +m=k[0] +i=m.a +h=m.b +for(g=1;g>>1 +g=this.H9(o,n,q,p,e,f,this.H9(a,b,s,r,o,n,g,h,m),h,m)}else{l=a-e +k=b-f +j=g+Math.sqrt(l*l+k*k) +if(j>g)this.c.push(new A.JE(2,j,A.b([a,b,c,d,e,f],t.n))) +g=j}return g}} +A.b4u.prototype={ +$4(a,b,c,d){var s=a-c,r=b-d,q=this.a,p=q.a,o=q.a=p+Math.sqrt(s*s+r*r) +if(o>p)this.b.c.push(new A.JE(1,o,A.b([a,b,c,d],t.n)))}, +$S:332} +A.aUn.prototype={ +ga1(a){var s=this.a +if(s==null)throw A.d(A.w6(u.g)) +return s}, +H(){var s,r=this.b,q=r.aDl() +if(q)++r.e +if(q){s=r.e +this.a=new A.acE(r.c[s].e,s,r) +return!0}this.a=null +return!1}} +A.acE.prototype={ +qh(a){return this.d.c[this.c].qh(a)}, +DD(a,b){return this.d.c[this.c].aRh(a,b,!0)}, +j(a){return"PathMetric"}, +$ivY:1, +gF(a){return this.a}} +A.XG.prototype={} +A.JE.prototype={ +aO9(a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this +switch(a1.a){case 1:s=a1.c +r=s[2] +q=s[0] +p=1-a2 +o=s[3] +s=s[1] +return new A.XG(a2,new A.i(r*a2+q*p,o*a2+s*p),A.auR(r-q,o-s)) +case 4:s=a1.c +r=s[0] +q=s[1] +p=s[2] +o=s[3] +n=s[4] +m=s[5] +l=s[6] +s=s[7] +k=n-2*p+r +j=m-2*o+q +i=p-r +h=o-q +g=(l+3*(p-n)-r)*a2 +f=(s+3*(o-m)-q)*a2 +e=a2===0 +if(!(e&&r===p&&q===o))d=a2===1&&n===l&&m===s +else d=!0 +if(d){c=e?n-r:l-p +b=e?m-q:s-o +if(c===0&&b===0){c=l-r +b=s-q}a=A.auR(c,b)}else a=A.auR((g+2*k)*a2+i,(f+2*j)*a2+h) +return new A.XG(a2,new A.i(((g+3*k)*a2+3*i)*a2+r,((f+3*j)*a2+3*h)*a2+q),a) +case 2:s=a1.c +r=s[0] +q=s[1] +p=s[2] +o=s[3] +n=s[4] +s=s[5] +a0=A.bgI(r,q,p,o,n,s) +m=a0.Vs(a2) +l=a0.Vt(a2) +if(!(a2===0&&r===p&&q===o))k=a2===1&&p===n&&o===s +else k=!0 +n-=r +s-=q +a=k?A.auR(n,s):A.auR(2*(n*a2+(p-r)),2*(s*a2+(o-q))) +return new A.XG(a2,new A.i(m,l),a) +default:throw A.d(A.af("Invalid segment type"))}}} +A.GE.prototype={ +j8(a,b,c){var s=a*2,r=this.f +r[s]=b +r[s+1]=c}, +m7(a){var s=this.f,r=a*2 +return new A.i(s[r],s[r+1])}, +a_z(){var s=this +if(s.ay)return new A.A(s.m7(0).a,s.m7(0).b,s.m7(1).a,s.m7(2).b) +else return s.w===4?s.aw4():null}, +hB(a){var s +if(this.Q)this.PF() +s=this.a +s.toString +return s}, +aw4(){var s,r,q,p,o,n,m,l,k=this,j=null,i=k.m7(0).a,h=k.m7(0).b,g=k.m7(1).a,f=k.m7(1).b +if(k.r[1]!==1||f!==h)return j +s=g-i +r=k.m7(2).a +q=k.m7(2).b +if(k.r[2]!==1||r!==g)return j +p=q-f +o=k.m7(3) +n=k.m7(3).b +if(k.r[3]!==1||n!==q)return j +if(r-o.a!==s||n-h!==p)return j +m=Math.min(i,g) +l=Math.min(h,q) +return new A.A(m,l,m+Math.abs(s),l+Math.abs(p))}, +akn(){var s,r,q,p,o +if(this.w===2){s=this.r +s=s[0]!==0||s[1]!==1}else s=!0 +if(s)return null +s=this.f +r=s[0] +q=s[1] +p=s[2] +o=s[3] +if(q===o||r===p)return new A.A(r,q,p,o) +return null}, +a4G(){var s,r,q,p,o,n,m,l,k,j,i,h={},g=this.hB(0),f=A.b([],t.kG),e=new A.vZ(this) +e.xk(this) +s=new Float32Array(8) +h.a=e.pU(0,s) +h.b=0 +for(;r=h.a=e.pU(0,s),r!==6;)if(3===r){q=s[2] +p=s[3] +o=q-s[0] +n=p-s[1] +m=s[4] +l=s[5] +if(o!==0){k=Math.abs(o) +j=Math.abs(l-p)}else{j=Math.abs(n) +k=n!==0?Math.abs(m-q):Math.abs(o)}f.push(new A.bl(k,j));++h.b}m=f[0] +l=f[1] +i=f[2] +return A.aOG(g,f[3],i,m,l)}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.GE&&this.aR6(b)}, +gL(a){var s=this +return A.a6(s.cx,s.f,s.y,s.r,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +aR6(a){var s,r,q,p,o,n,m,l=this +if(l.cx!==a.cx)return!1 +s=l.d +if(s!==a.d)return!1 +r=s*2 +for(q=l.f,p=a.f,o=0;oq.c){s=a+10 +q.c=s +r=new Float32Array(s*2) +B.eF.jC(r,0,q.f) +q.f=r}q.d=a}, +Ii(a){var s,r,q=this +if(a>q.e){s=a+8 +q.e=s +r=new Uint8Array(s) +B.L.jC(r,0,q.r) +q.r=r}q.w=a}, +Ig(a){var s,r,q=this +if(a>q.x){s=a+4 +q.x=s +r=new Float32Array(s) +s=q.y +if(s!=null)B.eF.jC(r,0,s) +q.y=r}q.z=a}, +Jm(a,b){var s,r,q,p,o,n,m,l,k,j,i=this,h=b.d,g=i.d+h +i.x5() +i.Ih(g) +s=b.f +for(r=h*2-1,q=g*2-1,p=i.f;r>=0;--r,--q)p[q]=s[r] +o=i.w +n=b.w +i.Ii(o+n) +for(p=i.r,m=b.r,l=0;lm){l.a=m +l.b=s}else if(s===m)return 1}return o}} +A.aSX.prototype={ +Vs(a){return(this.a*a+this.c)*a+this.e}, +Vt(a){return(this.b*a+this.d)*a+this.f}} +A.aNo.prototype={ +aLE(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=e.a,c=A.bgb(d,!0) +for(s=e.f,r=t.td;q=c.pU(0,s),q!==6;)switch(q){case 0:case 5:break +case 1:e.av8() +break +case 2:p=!A.boE(s)?A.bI1(s):0 +o=e.a3e(s[0],s[1],s[2],s[3],s[4],s[5]) +if(p>0)o+=e.a3e(s[4],s[5],s[6],s[7],s[8],s[9]) +e.d+=o +break +case 3:n=d.y[c.f] +m=s[0] +l=s[1] +k=s[2] +j=s[3] +i=s[4] +h=s[5] +g=A.boE(s) +f=A.b([],r) +new A.kj(m,l,k,j,i,h,n).aNz(f) +e.a3d(f[0]) +if(!g&&f.length===2)e.a3d(f[1]) +break +case 4:e.av2() +break}}, +av8(){var s,r,q,p,o,n=this,m=n.f,l=m[0],k=m[1],j=m[2],i=m[3] +if(k>i){s=k +r=i +q=-1}else{s=i +r=k +q=1}m=n.c +if(ms)return +p=n.b +if(A.aNp(p,m,l,k,j,i)){++n.e +return}if(m===s)return +o=(j-l)*(m-k)-(i-k)*(p-l) +if(o===0){if(p!==j||m!==i)++n.e +q=0}else if(A.bJp(o)===q)q=0 +n.d+=q}, +a3e(a,b,c,d,e,f){var s,r,q,p,o,n,m,l,k=this +if(b>f){s=b +r=f +q=-1}else{s=f +r=b +q=1}p=k.c +if(ps)return 0 +o=k.b +if(A.aNp(o,p,a,b,e,f)){++k.e +return 0}if(p===s)return 0 +n=new A.tf() +if(0===n.tQ(b-2*d+f,2*(d-b),b-p))m=q===1?a:e +else{l=n.a +l.toString +m=((e-2*c+a)*l+2*(c-a))*l+a}if(Math.abs(m-o)<0.000244140625)if(o!==e||p!==f){++k.e +return 0}return mg){s=h +r=g +q=-1}else{s=g +r=h +q=1}p=i.c +if(ps)return +o=i.b +if(A.aNp(o,p,a.a,h,a.e,g)){++i.e +return}if(p===s)return +n=a.r +m=a.d*n-p*n+p +l=new A.tf() +if(0===l.tQ(g+(h-2*m),2*(m-h),h-p))k=q===1?a.a:a.e +else{j=l.a +j.toString +k=A.bD2(a.a,a.c,a.e,n,j)/A.bD1(n,j)}if(Math.abs(k-o)<0.000244140625)if(o!==a.e||p!==a.f){++i.e +return}p=i.d +i.d=p+(kq){p=b +o=q +n=-1}else{p=q +o=b +n=1}m=g.c +if(mp)return +l=g.b +if(A.aNp(l,m,d,b,r,q)){++g.e +return}if(m===p)return +k=Math.min(d,Math.min(a,Math.min(s,r))) +j=Math.max(d,Math.max(a,Math.max(s,r))) +if(lj){g.d+=n +return}i=A.btn(f,a0,m) +if(i==null)return +h=A.btJ(d,a,s,r,i) +if(Math.abs(h-l)<0.000244140625)if(l!==r||m!==q){++g.e +return}f=g.d +g.d=f+(h1,o=null,n=1/0,m=0;m<$.ue.length;++m){l=$.ue[m] +$.cF() +k=self.window.devicePixelRatio +if(k===0)k=1 +if(l.y!==k)continue +k=l.a +j=k.c-k.a +k=k.d-k.b +i=j*k +h=c.dy +g=self.window.devicePixelRatio +if(l.r>=B.c.d0(s*(g===0?1:g))+2){g=self.window.devicePixelRatio +f=l.w>=B.c.d0(r*(g===0?1:g))+2&&l.ay===h}else f=!1 +e=i4)){if(j===b&&k===a){o=l +break}n=i +o=l}}if(o!=null){B.b.P($.ue,o) +o.soa(0,a0) +o.b=c.fx +return o}d=A.bkH(a0,c.cy.b.d,c.dy) +d.b=c.fx +return d}, +a2h(){A.M(this.d.style,"transform","translate("+A.j(this.CW)+"px, "+A.j(this.cx)+"px)")}, +iN(){this.a2h() +this.GZ(null)}, +cY(){this.PJ(null) +this.fr=!0 +this.a0Z()}, +a8(a,b){var s,r,q=this +q.a12(0,b) +q.fx=b.fx +if(b!==q)b.fx=null +if(q.CW!==b.CW||q.cx!==b.cx)q.a2h() +q.PJ(b) +if(q.cy===b.cy){s=q.ch +r=s instanceof A.qI&&q.dy!==s.ay +if(q.fr||r)q.GZ(b) +else q.ch=b.ch}else q.GZ(b)}, +q9(){var s=this +s.a11() +s.PJ(s) +if(s.fr)s.GZ(s)}, +oh(){A.auT(this.ch) +this.ch=null +this.a1_()}} +A.aNu.prototype={ +$0(){var s,r=this.a,q=r.fy +q.toString +s=r.ch=r.axw(q) +s.b=r.fx +q=r.d +q.toString +A.biG(q) +r.d.append(s.c) +s.af(0) +q=r.cy.b +q.toString +r=r.fy +r.toString +q.Jn(s,r) +s.vJ()}, +$S:0} +A.aPa.prototype={ +Jn(a,b){var s,r,q,p,o,n,m,l,k,j +try{m=this.b +m.toString +m=A.buA(b,m) +l=this.c +k=l.length +if(m){s=k +for(r=0;r1){s=q.a +s.y=s.r.pop() +r=s.w.pop() +if(r!=null){s.Q=r.a +s.as=r.b +s.at=r.c +s.ax=r.d +s.z=!0}else if(s.z)s.z=!1}s=q.c +if(s.length!==0&&B.b.ga_(s) instanceof A.PF)s.pop() +else s.push(B.KV);--q.r}, +qS(a,b){var s=new A.a82(a,b) +switch(b.a){case 1:this.a.qS(a,s) +break +case 0:break}this.d.c=!0 +this.c.push(s)}, +b7(a,b){var s,r,q=this,p=b.a +if(p.w!=null)q.d.c=!0 +q.e=!0 +s=A.D5(b) +b.e=!0 +r=new A.a8e(a,p) +p=q.a +if(s!==0)p.oX(a.ei(s),r) +else p.oX(a,r) +q.c.push(r)}, +dm(a,b){var s,r,q,p,o,n,m,l,k=this,j=b.a +if(j.w!=null||!a.as)k.d.c=!0 +k.e=!0 +s=A.D5(b) +r=a.a +q=a.c +p=Math.min(r,q) +o=a.b +n=a.d +m=Math.min(o,n) +q=Math.max(r,q) +n=Math.max(o,n) +b.e=!0 +l=new A.a8d(a,j) +k.a.rN(p-s,m-s,q+s,n+s,l) +k.c.push(l)}, +vD(b0,b1,b2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3=this,a4=new A.A(b1.a,b1.b,b1.c,b1.d),a5=b0.a,a6=b0.b,a7=b0.c,a8=b0.d,a9=new A.A(a5,a6,a7,a8) +if(a9.k(0,a4)||!a9.fp(a4).k(0,a4))return +s=b0.Ao() +r=b1.Ao() +q=s.e +p=s.f +o=s.r +n=s.w +m=s.z +l=s.Q +k=s.x +j=s.y +i=r.e +h=r.f +g=r.r +f=r.w +e=r.z +d=r.Q +c=r.x +b=r.y +if(i*i+h*h>q*q+p*p||g*g+f*f>o*o+n*n||e*e+d*d>m*m+l*l||c*c+b*b>k*k+j*j)return +a3.e=a3.d.c=!0 +a=A.D5(b2) +b2.e=!0 +a0=new A.a85(b0,b1,b2.a) +q=$.G().Z() +q.sfW(B.aD) +q.h_(b0) +q.h_(b1) +q.T(0) +a0.x=q +a1=Math.min(a5,a7) +a2=Math.max(a5,a7) +a3.a.rN(a1-a,Math.min(a6,a8)-a,a2+a,Math.max(a6,a8)+a,a0) +a3.c.push(a0)}, +a3(a,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this +if(a0.a.w==null){t.Ci.a(a) +s=a.a.a_z() +if(s!=null){b.b7(s,a0) +return}r=a.a +q=r.ax?r.a4G():null +if(q!=null){b.dm(q,a0) +return}p=a.a.akn() +if(p!=null){r=a0.a.c +r=(r==null?0:r)===0}else r=!1 +if(r){r=p.a +o=p.c +n=Math.min(r,o) +m=p.b +l=p.d +k=Math.min(m,l) +r=o-r +j=Math.abs(r) +m=l-m +i=Math.abs(m) +h=m===0?1:i +g=r===0?1:j +a0.sU(0,B.i) +b.b7(new A.A(n,k,n+g,k+h),a0) +return}}t.Ci.a(a) +if(a.a.w!==0){b.e=b.d.c=!0 +f=a.hB(0) +e=A.D5(a0) +if(e!==0)f=f.ei(e) +d=new A.wE(A.boD(a.a),B.bX) +d.PS(a) +a0.e=!0 +c=new A.a8b(d,a0.a) +b.a.oX(f,c) +d.b=a.b +b.c.push(c)}}, +tD(a){var s,r,q=this,p=t.S9.a(a).b +if(p==null)return +if(p.e)q.e=!0 +s=q.d +r=p.d +s.a=B.cE.nR(s.a,r.a) +s.b=B.cE.nR(s.b,r.b) +s.c=B.cE.nR(s.c,r.c) +q.bU(0) +B.b.I(q.c,p.c) +q.bw(0) +p=p.b +if(p!=null)q.a.aks(p)}, +i6(a,b,c,d){var s,r=this,q=r.d +d.e=r.e=q.a=q.c=!0 +s=new A.PE(a,b,c,d.a) +r.a.oX(c,s) +r.c.push(s)}, +qZ(a,b){var s,r,q,p,o=this +t.Ak.a(a) +if(!a.e)return +o.e=!0 +s=o.d +s.c=!0 +s.b=!0 +r=new A.a8a(a,b) +q=a.geZ().z +s=b.a +p=b.b +o.a.rN(s+q.a,p+q.b,s+q.c,p+q.d,r) +o.c.push(r)}, +a4V(a,b,c,d){var s,r,q,p,o,n,m,l=J.al(a),k=l.i(a,0),j=l.i(a,1),i=l.gF(a) +for(s=j,r=k,q=2;qa.d||s.da.c}} +A.PF.prototype={ +d9(a){a.bU(0)}, +j(a){return this.du(0)}} +A.a8h.prototype={ +d9(a){a.bw(0)}, +j(a){return this.du(0)}} +A.a8l.prototype={ +d9(a){a.aJ(0,this.a,this.b)}, +j(a){return this.du(0)}} +A.a8j.prototype={ +d9(a){a.ff(0,this.a,this.b)}, +j(a){return this.du(0)}} +A.a8i.prototype={ +d9(a){a.oO(0,this.a)}, +j(a){return this.du(0)}} +A.a8k.prototype={ +d9(a){a.az(0,this.a)}, +j(a){return this.du(0)}} +A.a82.prototype={ +d9(a){a.qS(this.f,this.r)}, +j(a){return this.du(0)}} +A.a81.prototype={ +d9(a){a.vp(this.f)}, +j(a){return this.du(0)}} +A.a80.prototype={ +d9(a){a.m9(0,this.f)}, +j(a){return this.du(0)}} +A.a84.prototype={ +d9(a){a.Ds(this.f,this.r)}, +j(a){return this.du(0)}} +A.a87.prototype={ +d9(a){a.e7(this.f,this.r,this.w)}, +j(a){return this.du(0)}} +A.a89.prototype={ +d9(a){a.vF(this.f)}, +j(a){return this.du(0)}} +A.a8g.prototype={ +d9(a){a.z1(this.f,this.r,this.w)}, +j(a){return this.du(0)}} +A.a8c.prototype={ +d9(a){a.tE(this.r,this.f,this.w)}, +j(a){return this.du(0)}} +A.a8e.prototype={ +d9(a){a.b7(this.f,this.r)}, +j(a){return this.du(0)}} +A.a8d.prototype={ +d9(a){a.dm(this.f,this.r)}, +j(a){return this.du(0)}} +A.a85.prototype={ +d9(a){var s=this.w +if(s.b==null)s.b=B.i +a.a3(this.x,s)}, +j(a){return this.du(0)}} +A.a88.prototype={ +d9(a){a.z0(this.f,this.r)}, +j(a){return this.du(0)}} +A.a83.prototype={ +d9(a){a.cs(this.f,this.r,this.w)}, +j(a){return this.du(0)}} +A.a8b.prototype={ +d9(a){a.a3(this.f,this.r)}, +j(a){return this.du(0)}} +A.a8f.prototype={ +d9(a){var s=this +a.tF(s.f,s.r,s.w,s.x)}, +j(a){return this.du(0)}} +A.a86.prototype={ +d9(a){a.mg(0,this.f,this.r,this.w)}, +j(a){return this.du(0)}} +A.PE.prototype={ +d9(a){var s=this +a.i6(s.f,s.r,s.w,s.x)}, +j(a){return this.du(0)}} +A.a8a.prototype={ +d9(a){a.qZ(this.f,this.r)}, +j(a){return this.du(0)}} +A.b4s.prototype={ +qS(a,b){var s,r,q,p,o=this,n=a.gae(a),m=a.gaj(a),l=a.gaH(a),k=a.gaQ(a) +if(!o.x){s=$.bdt() +s[0]=n +s[1]=m +s[2]=l +s[3]=k +A.bde(o.y,s) +n=s[0] +m=s[1] +l=s[2] +k=s[3]}if(!o.z){o.Q=n +o.as=m +o.at=l +o.ax=k +o.z=!0 +r=k +q=l +p=m +s=n}else{s=o.Q +if(n>s){o.Q=n +s=n}p=o.as +if(m>p){o.as=m +p=m}q=o.at +if(l=q||p>=r)b.a=!0 +else{b.b=s +b.c=p +b.d=q +b.e=r}}, +oX(a,b){this.rN(a.gae(a),a.gaj(a),a.gaH(a),a.gaQ(a),b)}, +rN(a,b,c,d,e){var s,r,q,p,o,n,m,l,k,j=this +if(a===c||b===d){e.a=!0 +return}if(!j.x){s=$.bdt() +s[0]=a +s[1]=b +s[2]=c +s[3]=d +A.bde(j.y,s) +r=s[0] +q=s[1] +p=s[2] +o=s[3]}else{o=d +p=c +q=b +r=a}if(j.z){n=j.at +if(r>=n){e.a=!0 +return}m=j.Q +if(p<=m){e.a=!0 +return}l=j.ax +if(q>=l){e.a=!0 +return}k=j.as +if(o<=k){e.a=!0 +return}if(rn)p=n +if(ql)o=l}e.b=r +e.c=q +e.d=p +e.e=o +if(j.b){j.c=Math.min(Math.min(j.c,r),p) +j.e=Math.max(Math.max(j.e,r),p) +j.d=Math.min(Math.min(j.d,q),o) +j.f=Math.max(Math.max(j.f,q),o)}else{j.c=Math.min(r,p) +j.e=Math.max(r,p) +j.d=Math.min(q,o) +j.f=Math.max(q,o)}j.b=!0}, +aks(a){var s,r,q,p,o,n=this,m=a.a,l=a.b,k=a.c,j=a.d +if(m===k||l===j)return +if(!n.x){s=$.bdt() +s[0]=m +s[1]=l +s[2]=k +s[3]=j +A.bde(n.y,s) +r=s[0] +q=s[1] +p=s[2] +o=s[3]}else{o=j +p=k +q=l +r=m}if(n.b){n.c=Math.min(Math.min(n.c,r),p) +n.e=Math.max(Math.max(n.e,r),p) +n.d=Math.min(Math.min(n.d,q),o) +n.f=Math.max(Math.max(n.f,q),o)}else{n.c=Math.min(r,p) +n.e=Math.max(r,p) +n.d=Math.min(q,o) +n.f=Math.max(q,o)}n.b=!0}, +NO(){var s=this,r=s.y,q=new A.cL(new Float32Array(16)) +q.v(r) +s.r.push(q) +r=s.z?new A.A(s.Q,s.as,s.at,s.ax):null +s.w.push(r)}, +aO5(){var s,r,q,p,o,n,m,l,k,j,i=this +if(!i.b)return B.M +s=i.a +r=s.a +if(isNaN(r))r=-1/0 +q=s.c +if(isNaN(q))q=1/0 +p=s.b +if(isNaN(p))p=-1/0 +o=s.d +if(isNaN(o))o=1/0 +s=i.c +n=i.e +m=Math.min(s,n) +l=Math.max(s,n) +n=i.d +s=i.f +k=Math.min(n,s) +j=Math.max(n,s) +if(lc0||b6>c1)return +if(b7-b5$.bfb||r>$.bfa){k=$.aG4 +if(k!=null){h=k.a.getExtension("WEBGL_lose_context") +if(h!=null)h.loseContext()}$.bfc=$.aG4=null +$.bfb=Math.max($.bfb,s) +$.bfa=Math.max($.bfa,s)}k=$.bfc +if(k==null)k=$.bfc=A.aM3(s,r) +g=$.aG4 +k=g==null?$.aG4=A.bfd(k):g +k.fr=s +k.fx=r +f=k.CM(l,i) +g=k.a +e=f.a +A.a3(g,"useProgram",[e]) +d=k.Np(e,"position") +A.buH(k,f,q,p,s,r,c2) +c=!o +if(c){b=m.e +A.a3(g,"uniform4f",[k.jA(0,e,"u_textransform"),1/b.d,1/b.e,0,0])}b=g.createBuffer() +b.toString +if(c)if(n){a=g.createVertexArray() +a.toString +A.a3(g,"bindVertexArray",[a])}else a=null +else a=null +A.a3(g,a8,[d]) +A.a3(g,a9,[k.glC(),b]) +A.btl(k,b3,1) +A.a3(g,b0,[d,2,k.gXG(),!1,0,0]) +a0=J.bo(b3)/2|0 +if(o){a1=g.createBuffer() +A.a3(g,a9,[k.glC(),a1]) +o=c3.c +if(o==null){a2=new Uint32Array(a0) +for(o=c5.r,a3=0;a31;)s.pop() +t.on.a(B.b.ga9(s)).F3(new A.aOm())}, +$S:0} +A.aUr.prototype={ +$0(){var s,r,q=t.on,p=this.a.a +if($.aUp==null)q.a(B.b.ga9(p)).cY() +else{s=q.a(B.b.ga9(p)) +r=$.aUp +r.toString +s.a8(0,r)}A.bRD(q.a(B.b.ga9(p))) +$.aUp=q.a(B.b.ga9(p)) +return new A.I0(q.a(B.b.ga9(p)).d,this.b)}, +$S:342} +A.z0.prototype={ +yS(b0,b1,b2){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=this,a5="createPattern",a6="bindBuffer",a7="texParameteri",a8=a4.a,a9=a4.b +if(a8!==B.N&&a9!==B.N){s=a4.aGG(a4.e,a8,a9) +s.toString +r=a8===B.iu||a8===B.iv +q=a9===B.iu||a9===B.iv +if(r)p=q?"repeat":"repeat-x" +else p=q?"repeat-y":"no-repeat" +p=A.a3(b0,a5,[s,p]) +p.toString +return p}else{if($.k9==null)$.k9=new A.xs() +b1.toString +$.nK.toString +s=$.cF() +o=s.d +if(o==null){p=self.window.devicePixelRatio +o=p===0?1:p}n=B.c.d0((b1.gaH(b1)-b1.gae(b1))*o) +m=B.c.d0((b1.gaQ(b1)-b1.gaj(b1))*o) +p=$.eF +l=(p==null?$.eF=A.kY():p)===2 +k=A.bqP() +j=A.bmM(l,a8,a9) +i=A.bfd(A.aM3(n,m)) +i.fr=n +i.fx=m +h=i.CM(k,j) +p=i.a +g=h.a +A.a3(p,"useProgram",[g]) +f=new Float32Array(12) +e=b1.aJ(0,-b1.gae(b1),-b1.gaj(b1)) +d=e.a +f[0]=d +c=e.b +f[1]=c +b=e.c +f[2]=b +f[3]=c +f[4]=b +a=e.d +f[5]=a +f[6]=b +f[7]=a +f[8]=d +f[9]=a +f[10]=d +f[11]=c +a0=i.Np(g,"position") +A.buH(i,h,0,0,n,m,new A.cL(a4.c)) +a4.f=b1.gae(b1)!==0||b1.gaj(b1)!==0 +d=b1.gae(b1) +c=b1.gaj(b1) +b=a4.e +A.a3(p,"uniform4f",[i.jA(0,g,"u_textransform"),1/b.d,1/b.e,d,c]) +c=p.createBuffer() +c.toString +if(l){a1=p.createVertexArray() +a1.toString +A.a3(p,"bindVertexArray",[a1])}else a1=null +A.a3(p,"enableVertexAttribArray",[a0]) +A.a3(p,a6,[i.glC(),c]) +$.nK.toString +s=s.d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}A.btl(i,f,s) +A.a3(p,"vertexAttribPointer",[a0,2,i.gXG(),!1,0,0]) +a2=p.createTexture() +p.activeTexture(i.gafv()) +A.a3(p,"bindTexture",[i.gkx(),a2]) +i.aig(0,i.gkx(),0,i.gLt(),i.gLt(),i.gLw(),b.a) +if(l){A.a3(p,a7,[i.gkx(),i.gLu(),A.bd9(i,a8)]) +A.a3(p,a7,[i.gkx(),i.gLv(),A.bd9(i,a9)]) +A.a3(p,"generateMipmap",[i.gkx()])}else{A.a3(p,a7,[i.gkx(),i.gLu(),i.gzt()]) +A.a3(p,a7,[i.gkx(),i.gLv(),i.gzt()]) +A.a3(p,a7,[i.gkx(),i.gafw(),i.gafu()])}A.a3(p,"clear",[i.gXF()]) +i.adp(6,B.lS) +if(a1!=null)p.bindVertexArray(null) +a3=i.ahn(!1) +A.a3(p,a6,[i.glC(),null]) +A.a3(p,a6,[i.gw8(),null]) +a3.toString +s=A.a3(b0,a5,[a3,"no-repeat"]) +s.toString +return s}}, +aGG(a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=a2===B.iv?2:1,a0=a3===B.iv?2:1 +if(a===1&&a0===1)return a1.a +s=a1.d +r=a1.e +q=s*a +p=r*a0 +o=A.aM3(q,p) +n=o.a +if(n!=null)n=A.aBN(n,"2d",null) +else{n=o.b +n.toString +n=A.lZ(n,"2d",null)}n.toString +for(m=-2*r,l=-2*s,k=a1.a,j=0;j>>24&255)<1}, +$S:350} +A.aSA.prototype={ +U0(a,b){var s,r,q=this +q.b=!0 +s=q.a +if(s==null)q.a=A.aM3(a,b) +else if(a!==s.c&&b!==s.d){s.c=a +s.d=b +r=s.a +if(r!=null){A.bm6(r,a) +s=s.a +s.toString +A.bm5(s,b)}else{r=s.b +if(r!=null){A.yP(r,a) +r=s.b +r.toString +A.yO(r,b) +r=s.b +r.toString +s.a9G(r)}}}s=q.a +s.toString +return A.bfd(s)}} +A.EM.prototype={ +j(a){return"Gradient()"}, +$ijV:1, +$ilm:1} +A.a4y.prototype={ +vu(a9,b0,b1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2=this,a3="u_tile_offset",a4="angle_range",a5="m_gradient",a6="uniform2f",a7=B.c.d0(a9.gaH(a9)-a9.gae(a9)),a8=B.c.d0(a9.gaQ(a9)-a9.gaj(a9)) +if($.k9==null)$.k9=new A.xs() +s=$.Kr().U0(a7,a8) +s.fr=a7 +s.fx=a8 +r=A.bfZ(a2.c,a2.d) +q=A.aXh() +p=$.eF +o=A.RO(p==null?$.eF=A.kY():p) +o.e=1 +o.qL(11,"v_color") +o.h0(9,"u_resolution") +o.h0(9,a3) +o.h0(9,a4) +o.h0(14,a5) +n=o.gtT() +p=A.b([],t.T) +m=new A.oB("main",p) +o.c.push(m) +p.push(u.J) +p.push(u.E) +p.push("float angle = atan(-localCoord.y, -localCoord.x) + 3.141592653589793;") +p.push("float sweep = angle_range.y - angle_range.x;") +p.push("angle = (angle - angle_range.x) / sweep;") +p.push("float st = angle;") +p.push(n.a+" = "+A.b9E(o,m,r,a2.e)+" * scale + bias;") +l=s.CM(q,o.cY()) +q=s.a +p=l.a +A.a3(q,"useProgram",[p]) +k=s.jA(0,p,a3) +j=a2.b +i=j.a +h=a9.gae(a9) +g=a9.gaH(a9) +f=a9.gae(a9) +j=j.b +e=a9.gaj(a9) +d=a9.gaQ(a9) +c=a9.gaj(a9) +A.a3(q,a6,[k,2*((a9.gaH(a9)-a9.gae(a9))*((i-h)/(g-f)-0.5)),2*((a9.gaQ(a9)-a9.gaj(a9))*(0.5-(j-e)/(d-c)))]) +A.a3(q,a6,[s.jA(0,p,a4),a2.f,a2.r]) +r.O6(s,l) +b=s.jA(0,p,a5) +a=A.fu() +p=a2.w +if(p!=null){a0=new A.cL(new Float32Array(16)) +a0.jR(new A.cL(p)) +a.aJ(0,-i,-j) +a.bL(0,a0) +a.aJ(0,i,j)}A.a3(q,"uniformMatrix4fv",[b,!1,a.a]) +a1=new A.aGe(b1,a9,s,l,r,a7,a8).$0() +$.Kr().b=!1 +return a1}, +yS(a,b,c){var s=A.a3(a,"createPattern",[this.vu(b,c,!1),"no-repeat"]) +s.toString +return s}} +A.aGe.prototype={ +$0(){var s=this,r=$.k9,q=s.b,p=s.c,o=s.d,n=s.e,m=s.f,l=s.r +if(s.a){r.toString +return r.Vc(new A.A(0,0,0+(q.gaH(q)-q.gae(q)),0+(q.gaQ(q)-q.gaj(q))),p,o,n,m,l)}else{r.toString +r=r.Vb(new A.A(0,0,0+(q.gaH(q)-q.gae(q)),0+(q.gaQ(q)-q.gaj(q))),p,o,n,m,l) +r.toString +return r}}, +$S:162} +A.a4v.prototype={ +yS(a,b,c){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.f +if(h===B.N||h===B.eX){s=i.r +r=b.gae(b) +q=b.gaj(b) +p=i.b +o=i.c +n=p.a +m=o.a +p=p.b +o=o.b +if(s!=null){l=(n+m)/2-b.gae(b) +k=(p+o)/2-b.gaj(b) +s.aiB(0,n-l,p-k) +p=s.b +n=s.c +s.aiB(0,m-l,o-k) +j=a.createLinearGradient(p+l-r,n+k-q,s.b+l-r,s.c+k-q)}else j=a.createLinearGradient(n-r,p-q,m-r,o-q) +A.bs7(j,i.d,i.e,h===B.eX) +return j}else{h=A.a3(a,"createPattern",[i.vu(b,c,!1),"no-repeat"]) +h.toString +return h}}, +vu(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=this,b1="u_resolution",b2="m_gradient",b3=B.c.d0(b5.gaH(b5)-b5.gae(b5)),b4=B.c.d0(b5.gaQ(b5)-b5.gaj(b5)) +if($.k9==null)$.k9=new A.xs() +s=$.Kr().U0(b3,b4) +s.fr=b3 +s.fx=b4 +r=A.bfZ(b0.d,b0.e) +q=A.aXh() +p=b0.f +o=$.eF +n=A.RO(o==null?$.eF=A.kY():o) +n.e=1 +n.qL(11,"v_color") +n.h0(9,b1) +n.h0(14,b2) +m=n.gtT() +o=A.b([],t.T) +l=new A.oB("main",o) +n.c.push(l) +o.push("vec4 localCoord = m_gradient * vec4(gl_FragCoord.x, u_resolution.y - gl_FragCoord.y, 0, 1);") +o.push("float st = localCoord.x;") +o.push(m.a+" = "+A.b9E(n,l,r,p)+" * scale + bias;") +k=s.CM(q,n.cY()) +q=s.a +o=k.a +A.a3(q,"useProgram",[o]) +j=b0.b +i=j.a +h=j.b +j=b0.c +g=j.a +f=j.b +e=g-i +d=f-h +c=Math.sqrt(e*e+d*d) +j=c<11920929e-14 +b=j?0:-d/c +a=j?1:e/c +a0=p!==B.N +a1=a0?(b5.gaH(b5)-b5.gae(b5))/2:(i+g)/2-b5.gae(b5) +a2=a0?(b5.gaQ(b5)-b5.gaj(b5))/2:(h+f)/2-b5.gaj(b5) +a3=A.fu() +a3.qm(-a1,-a2,0) +a4=A.fu() +a5=a4.a +a5[0]=a +a5[1]=b +a5[4]=-b +a5[5]=a +a6=A.fu() +a6.aZI(0,0.5) +if(c>11920929e-14)a6.au(0,1/c) +p=b0.r +if(p!=null){a7=new A.cL(new Float32Array(16)) +a7.jR(new A.cL(p.a)) +a8=b5.gbC() +p=a8.a +j=a8.b +a6.aJ(0,-p,-j) +a6.bL(0,a7) +a6.aJ(0,p,j)}a6.bL(0,a4) +a6.bL(0,a3) +r.O6(s,k) +A.a3(q,"uniformMatrix4fv",[s.jA(0,o,b2),!1,a6.a]) +A.a3(q,"uniform2f",[s.jA(0,o,b1),b3,b4]) +a9=new A.aGc(b7,b5,s,k,r,b3,b4).$0() +$.Kr().b=!1 +return a9}} +A.aGc.prototype={ +$0(){var s=this,r=$.k9,q=s.b,p=s.c,o=s.d,n=s.e,m=s.f,l=s.r +if(s.a){r.toString +return r.Vc(new A.A(0,0,0+(q.gaH(q)-q.gae(q)),0+(q.gaQ(q)-q.gaj(q))),p,o,n,m,l)}else{r.toString +r=r.Vb(new A.A(0,0,0+(q.gaH(q)-q.gae(q)),0+(q.gaQ(q)-q.gaj(q))),p,o,n,m,l) +r.toString +return r}}, +$S:162} +A.Fc.prototype={ +yS(a,b,c){var s,r=this +if(r.r==null){s=r.f +s=s===B.N||s===B.eX}else s=!1 +if(s)return r.a3p(a,b,c) +else{s=A.a3(a,"createPattern",[r.vu(b,c,!1),"no-repeat"]) +s.toString +return s}}, +a3p(a,b,c){var s=this,r=s.b,q=r.a-b.gae(b) +r=r.b-b.gaj(b) +r=A.a3(a,"createRadialGradient",[q,r,0,q,r,s.c]) +A.bs7(r,s.d,s.e,s.f===B.eX) +return r}, +vu(a2,a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=this,a0=B.c.d0(a2.gaH(a2)-a2.gae(a2)),a1=B.c.d0(a2.gaQ(a2)-a2.gaj(a2)) +if($.k9==null)$.k9=new A.xs() +s=$.Kr().U0(a0,a1) +s.fr=a0 +s.fx=a1 +r=A.bfZ(a.d,a.e) +q=s.CM(A.aXh(),a.PX(r,a2,a.f)) +p=s.a +o=q.a +A.a3(p,"useProgram",[o]) +n=s.jA(0,o,"u_tile_offset") +m=a.b +l=m.a +k=a2.gae(a2) +j=a2.gaH(a2) +i=a2.gae(a2) +m=m.b +h=a2.gaj(a2) +g=a2.gaQ(a2) +f=a2.gaj(a2) +A.a3(p,"uniform2f",[n,2*((a2.gaH(a2)-a2.gae(a2))*((l-k)/(j-i)-0.5)),2*((a2.gaQ(a2)-a2.gaj(a2))*(0.5-(m-h)/(g-f)))]) +A.a3(p,"uniform1f",[s.jA(0,o,"u_radius"),a.c]) +r.O6(s,q) +e=s.jA(0,o,"m_gradient") +d=A.fu() +o=a.r +if(o!=null){c=new A.cL(new Float32Array(16)) +c.jR(new A.cL(o)) +d.aJ(0,-l,-m) +d.bL(0,c) +d.aJ(0,l,m)}A.a3(p,"uniformMatrix4fv",[e,!1,d.a]) +b=new A.aGd(a4,a2,s,q,r,a0,a1).$0() +$.Kr().b=!1 +return b}, +PX(a,b,c){var s,r,q=$.eF,p=A.RO(q==null?$.eF=A.kY():q) +p.e=1 +p.qL(11,"v_color") +p.h0(9,"u_resolution") +p.h0(9,"u_tile_offset") +p.h0(2,"u_radius") +p.h0(14,"m_gradient") +s=p.gtT() +q=A.b([],t.T) +r=new A.oB("main",q) +p.c.push(r) +q.push(u.J) +q.push(u.E) +q.push("float dist = length(localCoord);") +q.push("float st = abs(dist / u_radius);") +q.push(s.a+" = "+A.b9E(p,r,a,c)+" * scale + bias;") +return p.cY()}} +A.aGd.prototype={ +$0(){var s=this,r=$.k9,q=s.b,p=s.c,o=s.d,n=s.e,m=s.f,l=s.r +if(s.a){r.toString +return r.Vc(new A.A(0,0,0+(q.gaH(q)-q.gae(q)),0+(q.gaQ(q)-q.gaj(q))),p,o,n,m,l)}else{r.toString +r=r.Vb(new A.A(0,0,0+(q.gaH(q)-q.gae(q)),0+(q.gaQ(q)-q.gaj(q))),p,o,n,m,l) +r.toString +return r}}, +$S:162} +A.a4t.prototype={ +yS(a,b,c){var s=this,r=s.f +if((r===B.N||r===B.eX)&&s.y===0&&s.x.k(0,B.h))return s.a3p(a,b,c) +else{if($.k9==null)$.k9=new A.xs() +r=A.a3(a,"createPattern",[s.vu(b,c,!1),"no-repeat"]) +r.toString +return r}}, +PX(a,b,c){var s,r,q,p,o=this,n=o.b,m=o.x,l=n.a-m.a,k=n.b-m.b,j=l*l+k*k +if(j<14210854822304103e-30)return o.anG(a,b,c) +Math.sqrt(j) +n=$.eF +s=A.RO(n==null?$.eF=A.kY():n) +s.e=1 +s.qL(11,"v_color") +s.h0(9,"u_resolution") +s.h0(9,"u_tile_offset") +s.h0(2,"u_radius") +s.h0(14,"m_gradient") +r=s.gtT() +n=A.b([],t.T) +q=new A.oB("main",n) +s.c.push(q) +n.push(u.J) +n.push(u.E) +n.push("float dist = length(localCoord);") +m=o.y +p=B.c.Zv(m/(Math.min(b.gaH(b)-b.gae(b),b.gaQ(b)-b.gaj(b))/2),8) +n.push(m===0?"float st = dist / u_radius;":"float st = ((dist / u_radius) - "+p+") / (1.0 - "+p+");") +if(c===B.N)n.push("if (st < 0.0) { st = -1.0; }") +n.push(r.a+" = "+A.b9E(s,q,a,c)+" * scale + bias;") +return s.cY()}} +A.ph.prototype={ +gKU(){return""}} +A.TX.prototype={ +gKU(){return"blur("+A.j((this.a+this.b)*0.5)+"px)"}, +k(a,b){var s=this +if(b==null)return!1 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.TX&&b.c===s.c&&b.a===s.a&&b.b===s.b}, +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"ImageFilter.blur("+this.a+", "+this.b+", "+A.buN(this.c)+")"}} +A.VP.prototype={ +gaZH(){return A.nN(this.a)}, +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.VP&&b.b===this.b&&A.lO(b.a,this.a)}, +gL(a){return A.a6(A.bM(this.a),this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"ImageFilter.matrix("+A.j(this.a)+", "+this.b.j(0)+")"}} +A.a3e.prototype={$iph:1} +A.OW.prototype={} +A.OQ.prototype={} +A.abm.prototype={ +gtT(){var s=this.Q +if(s==null)s=this.Q=new A.BH(this.y?"gFragColor":"gl_FragColor",11,3) +return s}, +qL(a,b){var s=new A.BH(b,a,1) +this.b.push(s) +return s}, +h0(a,b){var s=new A.BH(b,a,2) +this.b.push(s) +return s}, +aaW(a,b){var s=new A.BH(b,a,3) +this.b.push(s) +return s}, +aaG(a,b){var s,r,q=this,p="varying ",o=b.c +switch(o){case 0:q.as.a+="const " +break +case 1:s=q.as +if(q.y)r="in " +else r=q.z?p:"attribute " +s.a+=r +break +case 2:q.as.a+="uniform " +break +case 3:s=q.as +r=q.y?"out ":p +s.a+=r +break}s=q.as +r=s.a+=A.bJR(b.b)+" "+b.a +if(o===0)o=s.a=r+" = " +else o=r +s.a=o+";\n"}, +cY(){var s,r,q,p,o,n=this,m=n.y +if(m)n.as.a+="#version 300 es\n" +s=n.e +if(s!=null){r=n.as +if(s===0)s="lowp" +else s=s===1?"mediump":"highp" +s="precision "+s+" float;\n" +r.a+=s}if(m&&n.Q!=null){m=n.Q +m.toString +n.aaG(n.as,m)}for(m=n.b,s=m.length,r=n.as,q=0;q=0;--r,p=n){a.toString +o=B.b.f7(a,r)!==-1&&B.b.G(m,r) +n=s[r].d +n.toString +if(!o)if(p==null)q.append(n) +else q.insertBefore(n,p)}}, +aCV(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this.x,d=e.length,c=a0.x,b=c.length,a=A.b([],t.cD) +for(s=0;s1&&d.charCodeAt(0)<127&&d.charCodeAt(1)<127) +o=A.bOn(new A.aIu(g,d,a,p,q),t.S) +if(e.type!=="keydown")if(g.b){r=A.r7(e) +r.toString +r=r==="CapsLock" +n=r}else n=!1 +else n=!0 +if(g.b){r=A.r7(e) +r.toString +r=r==="CapsLock"}else r=!1 +if(r){g.a7Q(B.G,new A.aIv(s,q,o),new A.aIw(g,q)) +m=B.cX}else if(n){r=g.f +if(r.i(0,q)!=null){l=e.repeat +if(l==null)l=f +if(l===!0)m=B.WX +else{l=g.d +l.toString +k=r.i(0,q) +k.toString +l.$1(new A.lo(s,B.cj,q,k,f,!0)) +r.P(0,q) +m=B.cX}}else m=B.cX}else{if(g.f.i(0,q)==null){e.preventDefault() +return}m=B.cj}r=g.f +j=r.i(0,q) +switch(m.a){case 0:i=o.$0() +break +case 1:i=f +break +case 2:i=j +break +default:i=f}l=i==null +if(l)r.P(0,q) +else r.u(0,q,i) +$.bz3().al(0,new A.aIx(g,o,a,s)) +if(p)if(!l)g.aJL(q,o.$0(),s) +else{r=g.r.P(0,q) +if(r!=null)r.$0()}if(p)h=d +else h=f +d=j==null?o.$0():j +r=m===B.cj?f:h +if(g.d.$1(new A.lo(s,m,q,d,r,!1)))e.preventDefault()}, +jW(a){var s=this,r={},q=a.a +if(A.n5(q)==null||A.r7(q)==null)return +r.a=!1 +s.d=new A.aIC(r,s) +try{s.azB(a)}finally{if(!r.a)s.d.$1(B.WW) +s.d=null}}, +IH(a,b,c,d,e){var s,r=this,q=r.f,p=q.aR(0,a),o=q.aR(0,b),n=p||o,m=d===B.cX&&!n,l=d===B.cj&&n +if(m){r.a.$1(new A.lo(A.bhV(e),B.cX,a,c,null,!0)) +q.u(0,a,c)}if(l&&p){s=q.i(0,a) +s.toString +r.a8Q(e,a,s)}if(l&&o){q=q.i(0,b) +q.toString +r.a8Q(e,b,q)}}, +a8Q(a,b,c){this.a.$1(new A.lo(A.bhV(a),B.cj,b,c,null,!0)) +this.f.P(0,b)}} +A.aIy.prototype={ +$1(a){var s=this +if(!s.a.a&&!s.b.e){s.c.$0() +s.b.a.$1(s.d.$0())}}, +$S:22} +A.aIz.prototype={ +$0(){this.a.a=!0}, +$S:0} +A.aIA.prototype={ +$0(){return new A.lo(new A.bv(this.a.a+2e6),B.cj,this.b,this.c,null,!0)}, +$S:257} +A.aIB.prototype={ +$0(){this.a.f.P(0,this.b)}, +$S:0} +A.aIu.prototype={ +$0(){var s,r,q,p,o,n=this,m=n.b,l=B.a1I.i(0,m) +if(l!=null)return l +s=n.c.a +if(B.CG.aR(0,A.n5(s))){m=A.n5(s) +m.toString +m=B.CG.i(0,m) +r=m==null?null:m[B.c.aw(s.location)] +r.toString +return r}if(n.d){q=n.a.c.ak3(A.r7(s),A.n5(s),B.c.aw(s.keyCode)) +if(q!=null)return q}if(m==="Dead"){m=s.altKey +p=s.ctrlKey +o=s.shiftKey +s=s.metaKey +m=m?1073741824:0 +p=p?268435456:0 +o=o?536870912:0 +s=s?2147483648:0 +return n.e+(m+p+o+s)+98784247808}return B.d.gL(m)+98784247808}, +$S:106} +A.aIv.prototype={ +$0(){return new A.lo(this.a,B.cj,this.b,this.c.$0(),null,!0)}, +$S:257} +A.aIw.prototype={ +$0(){this.a.f.P(0,this.b)}, +$S:0} +A.aIx.prototype={ +$2(a,b){var s,r,q=this +if(J.f(q.b.$0(),a))return +s=q.a +r=s.f +if(r.acd(0,a)&&!b.$1(q.c))r.MM(r,new A.aIt(s,a,q.d))}, +$S:437} +A.aIt.prototype={ +$2(a,b){var s=this.b +if(b!==s)return!1 +this.a.d.$1(new A.lo(this.c,B.cj,a,s,null,!0)) +return!0}, +$S:144} +A.aIC.prototype={ +$1(a){this.a.a=!0 +return this.b.a.$1(a)}, +$S:164} +A.aA8.prototype={ +mf(a){if(!this.b)return +this.b=!1 +A.dc(this.a,"contextmenu",$.bdD(),null)}, +aQP(a){if(this.b)return +this.b=!0 +A.eQ(this.a,"contextmenu",$.bdD(),null)}} +A.aKT.prototype={} +A.bcS.prototype={ +$1(a){a.preventDefault()}, +$S:2} +A.axQ.prototype={ +gaKM(){var s=this.a +s===$&&A.c() +return s}, +t(){var s=this +if(s.c||s.gum()==null)return +s.c=!0 +s.aKN()}, +DA(){var s=0,r=A.r(t.H),q=this +var $async$DA=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:s=q.gum()!=null?2:3 +break +case 2:s=4 +return A.x(q.qa(),$async$DA) +case 4:s=5 +return A.x(q.gum().G6(0,-1),$async$DA) +case 5:case 3:return A.p(null,r)}}) +return A.q($async$DA,r)}, +gqX(){var s=this.gum() +s=s==null?null:s.dw() +return s==null?"/":s}, +gap(){var s=this.gum() +return s==null?null:s.a_C(0)}, +aKN(){return this.gaKM().$0()}} +A.P3.prototype={ +asE(a){var s,r=this,q=r.d +if(q==null)return +r.a=q.Tt(r.gYp(r)) +if(!r.Ra(r.gap())){s=t.z +q.wv(0,A.b3(["serialCount",0,"state",r.gap()],s,s),"flutter",r.gqX())}r.e=r.gPY()}, +gPY(){if(this.Ra(this.gap())){var s=this.gap() +s.toString +return B.c.aw(A.oZ(J.bG(t.f.a(s),"serialCount")))}return 0}, +Ra(a){return t.f.b(a)&&J.bG(a,"serialCount")!=null}, +Gp(a,b,c){var s,r,q=this.d +if(q!=null){s=t.z +r=this.e +if(b){r===$&&A.c() +s=A.b3(["serialCount",r,"state",c],s,s) +a.toString +q.wv(0,s,"flutter",a)}else{r===$&&A.c();++r +this.e=r +s=A.b3(["serialCount",r,"state",c],s,s) +a.toString +q.ahd(0,s,"flutter",a)}}}, +a0a(a){return this.Gp(a,!1,null)}, +Yq(a,b){var s,r,q,p,o=this +if(!o.Ra(b)){s=o.d +s.toString +r=o.e +r===$&&A.c() +q=t.z +s.wv(0,A.b3(["serialCount",r+1,"state",b],q,q),"flutter",o.gqX())}o.e=o.gPY() +s=$.bF() +r=o.gqX() +t.Xy.a(b) +q=b==null?null:J.bG(b,"state") +p=t.z +s.ng("flutter/navigation",B.bM.ol(new A.ng("pushRouteInformation",A.b3(["location",r,"state",q],p,p))),new A.aLa())}, +qa(){var s=0,r=A.r(t.H),q,p=this,o,n,m +var $async$qa=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:p.t() +if(p.b||p.d==null){s=1 +break}p.b=!0 +o=p.gPY() +s=o>0?3:4 +break +case 3:s=5 +return A.x(p.d.G6(0,-o),$async$qa) +case 5:case 4:n=p.gap() +n.toString +t.f.a(n) +m=p.d +m.toString +m.wv(0,J.bG(n,"state"),"flutter",p.gqX()) +case 1:return A.p(q,r)}}) +return A.q($async$qa,r)}, +gum(){return this.d}} +A.aLa.prototype={ +$1(a){}, +$S:29} +A.RY.prototype={ +asR(a){var s,r=this,q=r.d +if(q==null)return +r.a=q.Tt(r.gYp(r)) +s=r.gqX() +if(!A.bgG(A.bm1(self.window.history))){q.wv(0,A.b3(["origin",!0,"state",r.gap()],t.N,t.z),"origin","") +r.aHN(q,s)}}, +Gp(a,b,c){var s=this.d +if(s!=null)this.Ss(s,a,!0)}, +a0a(a){return this.Gp(a,!1,null)}, +Yq(a,b){var s,r=this,q="flutter/navigation" +if(A.bpD(b)){s=r.d +s.toString +r.aHM(s) +$.bF().ng(q,B.bM.ol(B.a2i),new A.aSS())}else if(A.bgG(b)){s=r.f +s.toString +r.f=null +$.bF().ng(q,B.bM.ol(new A.ng("pushRoute",s)),new A.aST())}else{r.f=r.gqX() +r.d.G6(0,-1)}}, +Ss(a,b,c){var s +if(b==null)b=this.gqX() +s=this.e +if(c)a.wv(0,s,"flutter",b) +else a.ahd(0,s,"flutter",b)}, +aHN(a,b){return this.Ss(a,b,!1)}, +aHM(a){return this.Ss(a,null,!1)}, +qa(){var s=0,r=A.r(t.H),q,p=this,o,n +var $async$qa=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:p.t() +if(p.b||p.d==null){s=1 +break}p.b=!0 +o=p.d +s=3 +return A.x(o.G6(0,-1),$async$qa) +case 3:n=p.gap() +n.toString +o.wv(0,J.bG(t.f.a(n),"state"),"flutter",p.gqX()) +case 1:return A.p(q,r)}}) +return A.q($async$qa,r)}, +gum(){return this.d}} +A.aSS.prototype={ +$1(a){}, +$S:29} +A.aST.prototype={ +$1(a){}, +$S:29} +A.rR.prototype={} +A.MW.prototype={ +gOZ(){var s,r,q=this,p=q.b +if(p===$){s=q.a +r=A.A8(new A.bg(s,new A.aDY(),A.a5(s).h("bg<1>")),t.Te) +q.b!==$&&A.N() +q.b=r +p=r}return p}} +A.aDY.prototype={ +$1(a){return a.c}, +$S:34} +A.a3g.prototype={ +yB(a){var s +this.b=a +this.c=!0 +s=A.b([],t.W5) +return this.a=new A.aPa(new A.b4s(a,A.b([],t.Xr),A.b([],t.cA),A.fu()),s,new A.aai())}, +gafn(){return this.c}, +jT(){var s,r=this +if(!r.c)r.yB(B.eP) +r.c=!1 +s=r.a +s.b=s.a.aO5() +s.f=!0 +s=r.a +r.b===$&&A.c() +return new A.a3f(s)}} +A.a3f.prototype={ +rB(a,b){return this.aZs(a,b)}, +aZs(a,b){var s=0,r=A.r(t.lu),q,p=this,o,n,m,l,k,j,i,h +var $async$rB=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:i=new A.A(0,0,a,b) +h=A.bkH(i,new A.aai(),1) +h.ax=!0 +p.b.Jn(h,i) +h.vJ() +o=h.d +if(o.y==null)o.PU() +o=o.y.toDataURL("image/png") +n=A.c8(self.document,"img") +A.beD(n,o) +n.width=a +n.height=b +o=new A.aM($.aK,t.Ou) +m=new A.D2(o,t.IM) +l=A.bn("errorListener") +k=t.L +l.shb(k.a(A.cd(new A.aDn(m,n,l)))) +A.dc(n,"error",l.bl(),null) +j=A.bn("loadListener") +j.shb(k.a(A.cd(new A.aDo(m,n,a,b,j)))) +A.dc(n,"load",j.bl(),null) +q=o +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$rB,r)}, +FA(a,b){throw A.d(A.af("toImageSync is not supported on the HTML backend. Use drawPicture instead, or toImage."))}, +t(){this.a=!0}} +A.aDn.prototype={ +$1(a){this.a.n_(a) +A.eQ(this.b,"error",this.c.bl(),null)}, +$S:2} +A.aDo.prototype={ +$1(a){var s=this,r=s.b +s.a.fC(0,A.bfg(r,s.c,s.d)) +A.eQ(r,"load",s.e.bl(),null)}, +$S:2} +A.a4Q.prototype={ +ga6B(){var s,r=this,q=r.c +if(q===$){s=t.L.a(A.cd(r.gaDT())) +r.c!==$&&A.N() +r.c=s +q=s}return q}, +aDU(a){var s,r,q,p=A.bm2(a) +p.toString +for(s=this.a,r=s.length,q=0;q")).oF(s.gaBF()) +s=self.document.body +if(s!=null)s.prepend(p.b) +s=p.geV().e +p.a=new A.f8(s,A.w(s).h("f8<1>")).oF(new A.aDx(p))}, +t(){var s,r,q,p=this,o=null +p.p1.removeListener(p.p2) +p.p2=null +s=p.k3 +if(s!=null)s.disconnect() +p.k3=null +s=p.id +if(s!=null)s.b.removeEventListener(s.a,s.c) +p.id=null +s=$.bdm() +r=s.a +B.b.P(r,p.ga9Y()) +if(r.length===0)s.b.removeListener(s.ga6B()) +s=$.biT() +r=s.b +B.b.P(r,p.ga8b()) +if(r.length===0){A.eQ(self.window,"focus",s.ga4f(),o) +A.eQ(self.window,"blur",s.ga2o(),o) +A.eQ(self.window,"beforeunload",s.ga2n(),o) +A.eQ(self.document,"visibilitychange",s.gaax(),o)}s=p.gaav() +r=self.document.body +if(r!=null)A.eQ(r,"keydown",s.ga5c(),o) +r=self.document.body +if(r!=null)A.eQ(r,"keyup",s.ga5d(),o) +r=self.document.body +if(r!=null)A.eQ(r,"focusin",s.ga56(),o) +r=self.document.body +if(r!=null)A.eQ(r,"focusout",s.ga57(),o) +s=s.e +if(s!=null)s.bq(0) +p.b.remove() +s=p.a +s===$&&A.c() +s.bq(0) +s=p.geV() +r=s.b +q=A.w(r).h("bk<1>") +B.b.al(A.ab(new A.bk(r,q),!0,q.h("z.E")),s.gaQ3()) +s.d.T(0) +s.e.T(0)}, +geV(){var s,r,q=null,p=this.r +if(p===$){s=t.S +r=t.mm +p!==$&&A.N() +p=this.r=new A.Na(this,A.D(s,t.lz),A.D(s,t.e),new A.qt(q,q,r),new A.qt(q,q,r))}return p}, +gaTp(){return t.e8.a(this.geV().b.i(0,0))}, +Xt(){var s=this.w +if(s!=null)A.uj(s,this.x)}, +gaav(){var s,r=this,q=r.y +if(q===$){s=r.geV() +r.y!==$&&A.N() +q=r.y=new A.aei(s,r.gaU0(),B.HE)}return q}, +aU1(a){A.uk(null,null,a,t.Hi)}, +aU_(a,b){var s=this.cy +if(s!=null)A.uj(new A.aDy(b,s,a),this.db) +else b.$1(!1)}, +ng(a,b,c){var s +if(a==="dev.flutter/channel-buffers")try{s=$.avu() +b.toString +s.aSh(b)}finally{c.$1(null)}else $.avu().aXX(a,b,c)}, +aHs(a,b,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=null +switch(a){case"flutter/skia":s=B.bM.n1(b) +switch(s.a){case"Skia.setResourceCacheMaxBytes":if($.G() instanceof A.Ll){r=A.dS(s.b) +$.ayf.bb().d.a09(r)}d.ju(a0,B.aC.e3([A.b([!0],t.HZ)])) +break}return +case"flutter/assets":d.Bw(B.a1.hH(0,A.jM(b.buffer,0,c)),a0) +return +case"flutter/platform":s=B.bM.n1(b) +switch(s.a){case"SystemNavigator.pop":q=t.e8 +if(q.a(d.geV().b.i(0,0))!=null)q.a(d.geV().b.i(0,0)).gJt().DA().cu(new A.aDs(d,a0),t.P) +else d.ju(a0,B.aC.e3([!0])) +return +case"HapticFeedback.vibrate":q=d.aya(A.eE(s.b)) +p=self.window.navigator +if("vibrate" in p)p.vibrate(q) +d.ju(a0,B.aC.e3([!0])) +return +case u.p:o=t.xE.a(s.b) +q=J.al(o) +n=A.eE(q.i(o,"label")) +if(n==null)n="" +m=A.lN(q.i(o,"primaryColor")) +if(m==null)m=4278190080 +q=self.document +q.title=n +A.buG(new A.n(m>>>0)) +d.ju(a0,B.aC.e3([!0])) +return +case"SystemChrome.setSystemUIOverlayStyle":l=A.lN(J.bG(t.xE.a(s.b),"statusBarColor")) +A.buG(l==null?c:new A.n(l>>>0)) +d.ju(a0,B.aC.e3([!0])) +return +case"SystemChrome.setPreferredOrientations":B.L3.Gn(t.j.a(s.b)).cu(new A.aDt(d,a0),t.P) +return +case"SystemSound.play":d.ju(a0,B.aC.e3([!0])) +return +case"Clipboard.setData":new A.LE(A.bem(),A.bga()).akY(s,a0) +return +case"Clipboard.getData":new A.LE(A.bem(),A.bga()).ajX(a0) +return +case"Clipboard.hasStrings":new A.LE(A.bem(),A.bga()).aT4(a0) +return}break +case"flutter/service_worker":q=self.window +k=self.document.createEvent("Event") +k.initEvent("flutter-first-frame",!0,!0) +q.dispatchEvent(k) +return +case"flutter/textinput":$.Zw().gCO(0).aSZ(b,a0) +return +case"flutter/contextmenu":switch(B.bM.n1(b).a){case"enableContextMenu":t.e8.a(d.geV().b.i(0,0)).gacf().aQP(0) +d.ju(a0,B.aC.e3([!0])) +return +case"disableContextMenu":t.e8.a(d.geV().b.i(0,0)).gacf().mf(0) +d.ju(a0,B.aC.e3([!0])) +return}return +case"flutter/mousecursor":s=B.f4.n1(b) +o=t.f.a(s.b) +switch(s.a){case"activateSystemCursor":q=A.bG9(d.geV().b.gbm(0)) +if(q!=null){if(q.x===$){q.ghv() +q.x!==$&&A.N() +q.x=new A.aKT()}j=B.a1d.i(0,A.eE(J.bG(o,"kind"))) +if(j==null)j="default" +if(j==="default")self.document.body.style.removeProperty("cursor") +else A.M(self.document.body.style,"cursor",j)}break}return +case"flutter/web_test_e2e":d.ju(a0,B.aC.e3([A.bPp(B.bM,b)])) +return +case"flutter/platform_views":i=B.f4.n1(b) +h=i.b +o=h +q=$.bwS() +a0.toString +q.aSz(i.a,o,a0) +return +case"flutter/accessibility":q=t.e8.a(d.geV().b.i(0,0)) +if(q!=null){q=q.gaaL() +k=t.f +g=k.a(J.bG(k.a(B.dC.kQ(b)),"data")) +f=A.eE(J.bG(g,"message")) +if(f!=null&&f.length!==0){e=A.bft(g,"assertiveness") +q.ab5(f,B.Yn[e==null?0:e])}}d.ju(a0,B.dC.e3(!0)) +return +case"flutter/navigation":q=t.e8 +if(q.a(d.geV().b.i(0,0))!=null)q.a(d.geV().b.i(0,0)).WY(b).cu(new A.aDu(d,a0),t.P) +else if(a0!=null)a0.$1(c) +d.y1="/" +return}q=$.buw +if(q!=null){q.$3(a,b,a0) +return}d.ju(a0,c)}, +Bw(a,b){return this.azE(a,b)}, +azE(a,b){var s=0,r=A.r(t.H),q=1,p,o=this,n,m,l,k,j,i,h +var $async$Bw=A.t(function(c,d){if(c===1){p=d +s=q}while(true)switch(s){case 0:q=3 +k=$.Kc +h=t.Lk +s=6 +return A.x(A.Db(k.FR(a)),$async$Bw) +case 6:n=h.a(d) +s=7 +return A.x(n.gzM().vk(),$async$Bw) +case 7:m=d +o.ju(b,J.bB0(m)) +q=1 +s=5 +break +case 3:q=2 +i=p +l=A.b2(i) +$.fK().$1("Error while trying to load an asset: "+A.j(l)) +o.ju(b,null) +s=5 +break +case 2:s=1 +break +case 5:return A.p(null,r) +case 1:return A.o(p,r)}}) +return A.q($async$Bw,r)}, +aya(a){switch(a){case"HapticFeedbackType.lightImpact":return 10 +case"HapticFeedbackType.mediumImpact":return 20 +case"HapticFeedbackType.heavyImpact":return 30 +case"HapticFeedbackType.selectionClick":return 10 +default:return 50}}, +qk(){var s=$.buC +if(s==null)throw A.d(A.c1("scheduleFrameCallback must be initialized first.")) +s.$0()}, +mv(a,b){return this.aYD(a,b)}, +aYD(a,b){var s=0,r=A.r(t.H),q=this,p +var $async$mv=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:p=q.as +p=p==null?null:p.E(0,b) +s=p===!0||$.G().gZ8()==="html"?2:3 +break +case 2:s=4 +return A.x($.G().zZ(a,b),$async$mv) +case 4:case 3:return A.p(null,r)}}) +return A.q($async$mv,r)}, +atu(){var s=this +if(s.id!=null)return +s.c=s.c.acl(A.beO()) +s.id=A.f_(self.window,"languagechange",new A.aDr(s))}, +atp(){var s,r,q,p=new self.MutationObserver(t.L.a(A.cd(new A.aDq(this)))) +this.k3=p +s=self.document.documentElement +s.toString +r=A.b(["style"],t.T) +q=A.D(t.N,t.z) +q.u(0,"attributes",!0) +q.u(0,"attributeFilter",r) +r=A.bf(q) +A.a3(p,"observe",[s,r==null?t.K.a(r):r])}, +aHv(a){this.ng("flutter/lifecycle",A.kw(B.bn.dB(a.W()).buffer,0,null),new A.aDv())}, +aa6(a){var s=this,r=s.c +if(r.d!==a){s.c=r.aOy(a) +A.uj(null,null) +A.uj(s.p3,s.p4)}}, +aKY(a){var s=this.c,r=s.a +if((r.a&32)!==0!==a){this.c=s.aci(r.aOw(a)) +A.uj(null,null)}}, +atk(){var s,r=this,q=r.p1 +r.aa6(q.matches?B.b8:B.aW) +s=t.L.a(A.cd(new A.aDp(r))) +r.p2=s +q.addListener(s)}, +nh(a,b,c){A.uk(this.to,this.x1,new A.BC(b,0,a,c),t.KL)}, +gUG(){var s=this.y1 +if(s==null){s=t.e8.a(this.geV().b.i(0,0)) +s=s==null?null:s.gJt().gqX() +s=this.y1=s==null?"/":s}return s}, +ju(a,b){A.vb(B.G,null,t.H).cu(new A.aDz(a,b),t.P)}} +A.aDx.prototype={ +$1(a){this.a.Xt()}, +$S:13} +A.aDy.prototype={ +$0(){return this.a.$1(this.b.$1(this.c))}, +$S:0} +A.aDw.prototype={ +$1(a){this.a.Fu(this.b,a,t.CD)}, +$S:29} +A.aDs.prototype={ +$1(a){this.a.ju(this.b,B.aC.e3([!0]))}, +$S:22} +A.aDt.prototype={ +$1(a){this.a.ju(this.b,B.aC.e3([a]))}, +$S:113} +A.aDu.prototype={ +$1(a){var s=this.b +if(a)this.a.ju(s,B.aC.e3([!0])) +else if(s!=null)s.$1(null)}, +$S:113} +A.aDr.prototype={ +$1(a){var s=this.a +s.c=s.c.acl(A.beO()) +A.uj(s.k1,s.k2)}, +$S:2} +A.aDq.prototype={ +$2(a,b){var s,r,q,p,o=null,n=B.b.gar(a),m=t.e,l=this.a +for(;n.H();){s=n.ga1(0) +s.toString +m.a(s) +r=s.type +if((r==null?o:r)==="attributes"){r=s.attributeName +r=(r==null?o:r)==="style"}else r=!1 +if(r){r=self.document.documentElement +r.toString +q=A.bUf(r) +p=(q==null?16:q)/16 +r=l.c +if(r.e!==p){l.c=r.Uk(p) +A.uj(o,o) +A.uj(l.k4,l.ok)}}}}, +$S:469} +A.aDv.prototype={ +$1(a){}, +$S:29} +A.aDp.prototype={ +$1(a){var s=A.bm2(a) +s.toString +s=s?B.b8:B.aW +this.a.aa6(s)}, +$S:2} +A.aDz.prototype={ +$1(a){var s=this.a +if(s!=null)s.$1(this.b)}, +$S:22} +A.bcy.prototype={ +$0(){this.a.$2(this.b,this.c)}, +$S:0} +A.aXj.prototype={ +j(a){return A.J(this).j(0)+"[view: null]"}} +A.a8Q.prototype={ +D2(a,b,c,d,e){var s=this,r=a==null?s.a:a,q=d==null?s.c:d,p=c==null?s.d:c,o=e==null?s.e:e,n=b==null?s.f:b +return new A.a8Q(r,!1,q,p,o,n,s.r,s.w)}, +aci(a){var s=null +return this.D2(a,s,s,s,s)}, +acl(a){var s=null +return this.D2(s,a,s,s,s)}, +Uk(a){var s=null +return this.D2(s,s,s,s,a)}, +aOy(a){var s=null +return this.D2(s,s,a,s,s)}, +aOz(a){var s=null +return this.D2(s,s,s,a,s)}} +A.awo.prototype={ +EM(a){var s,r,q +if(a!==this.a){this.a=a +for(s=this.b,r=s.length,q=0;q.")) +return}if(s.b.aR(0,c)){a.$1(B.f4.vI("recreating_view","view id: "+c,"trying to create an already created view")) +return}s.aYF(d,c,b) +a.$1(B.f4.Dw(null))}, +aSz(a,b,c){var s,r,q +switch(a){case"create":t.f.a(b) +s=J.al(b) +r=B.c.aw(A.iA(s.i(b,"id"))) +q=A.cE(s.i(b,"viewType")) +this.avH(c,s.i(b,"params"),r,q) +return +case"dispose":s=this.b.b.P(0,A.dS(b)) +if(s!=null)s.remove() +c.$1(B.f4.Dw(null)) +return}c.$1(null)}} +A.aQV.prototype={ +b_m(){if(this.a==null){this.a=t.L.a(A.cd(new A.aQW())) +A.dc(self.document,"touchstart",this.a,null)}}} +A.aQW.prototype={ +$1(a){}, +$S:2} +A.aNT.prototype={ +avs(){if("PointerEvent" in self.window){var s=new A.b4B(A.D(t.S,t.ZW),this,A.b([],t.he)) +s.alj() +return s}throw A.d(A.af("This browser does not support pointer events which are necessary to handle interactions with Flutter Web apps."))}} +A.a0T.prototype={ +aWt(a,b){var s,r,q,p=this,o=$.bF() +if(!o.c.c){s=A.b(b.slice(0),A.a5(b)) +A.uk(o.CW,o.cx,new A.t4(s),t.kf) +return}s=p.a +if(s!=null){o=s.a +r=A.o6(a) +r.toString +o.push(new A.Ws(b,a,A.TT(r))) +if(a.type==="pointerup")if(!J.f(a.target,s.b))p.Qs()}else if(a.type==="pointerdown"){q=a.target +if(t.e.b(q)&&q.hasAttribute("flt-tappable")){o=A.dn(B.ab,p.gaEb()) +s=A.o6(a) +s.toString +p.a=new A.ao_(A.b([new A.Ws(b,a,A.TT(s))],t.U4),q,o)}else{s=A.b(b.slice(0),A.a5(b)) +A.uk(o.CW,o.cx,new A.t4(s),t.kf)}}else{s=A.b(b.slice(0),A.a5(b)) +A.uk(o.CW,o.cx,new A.t4(s),t.kf)}}, +aW1(a,b,c,d){var s=this,r=s.a +if(r==null){if(d&&s.aHU(b)){b.stopPropagation() +$.bF().nh(c,B.dm,null)}return}if(d){s.a=null +r.c.bq(0) +b.stopPropagation() +$.bF().nh(c,B.dm,null)}else s.Qs()}, +aEc(){if(this.a==null)return +this.Qs()}, +aHU(a){var s,r=this.b +if(r==null)return!0 +s=A.o6(a) +s.toString +return A.TT(s).a-r.a>=5e4}, +Qs(){var s,r,q,p,o,n,m=this.a +m.c.bq(0) +s=t.D9 +r=A.b([],s) +for(q=m.a,p=q.length,o=0;o1}, +aCk(a){var s,r,q,p,o,n=this,m=$.eb() +if(m===B.cP)return!1 +if(n.a5U(a.deltaX,A.bmc(a))||n.a5U(a.deltaY,A.bmd(a)))return!1 +if(!(B.c.bx(a.deltaX,120)===0&&B.c.bx(a.deltaY,120)===0)){m=A.bmc(a) +if(B.c.bx(m==null?1:m,120)===0){m=A.bmd(a) +m=B.c.bx(m==null?1:m,120)===0}else m=!1}else m=!0 +if(m){m=a.deltaX +s=n.c +r=s==null +q=r?null:s.deltaX +p=Math.abs(m-(q==null?0:q)) +m=a.deltaY +q=r?null:s.deltaY +o=Math.abs(m-(q==null?0:q)) +if(!r)if(!(p===0&&o===0))m=!(p<20&&o<20) +else m=!0 +else m=!0 +if(m){if(A.o6(a)!=null)m=(r?null:A.o6(s))!=null +else m=!1 +if(m){m=A.o6(a) +m.toString +s.toString +s=A.o6(s) +s.toString +if(m-s<50&&n.d)return!0}return!1}}return!0}, +avq(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this +if(c.aCk(a)){s=B.bY +r=-2}else{s=B.cq +r=-1}q=a.deltaX +p=a.deltaY +switch(B.c.aw(a.deltaMode)){case 1:o=$.bs4 +if(o==null){n=A.c8(self.document,"div") +o=n.style +A.M(o,"font-size","initial") +A.M(o,"display","none") +self.document.body.append(n) +o=A.beH(self.window,n).getPropertyValue("font-size") +if(B.d.G(o,"px"))m=A.ow(A.ea(o,"px","")) +else m=null +n.remove() +o=$.bs4=m==null?16:m/4}q*=o +p*=o +break +case 2:o=c.a.b +q*=o.gnv().a +p*=o.gnv().b +break +case 0:o=$.hj() +if(o===B.cZ){o=$.cF() +l=o.d +if(l==null){l=self.window.devicePixelRatio +if(l===0)l=1}q*=l +o=o.d +if(o==null){o=self.window.devicePixelRatio +if(o===0)o=1}p*=o}break +default:break}k=A.b([],t.D9) +o=c.a +l=o.b +j=A.btr(a,l) +i=$.hj() +if(i===B.cZ){i=o.e +h=i==null +if(h)g=null +else{g=$.bjZ() +g=i.f.aR(0,g)}if(g!==!0){if(h)i=null +else{h=$.bk_() +h=i.f.aR(0,h) +i=h}f=i===!0}else f=!0}else f=!1 +i=a.ctrlKey&&!f +o=o.d +l=l.a +h=j.a +if(i){i=A.o6(a) +i.toString +i=A.TT(i) +g=$.cF() +e=g.d +if(e==null){e=self.window.devicePixelRatio +if(e===0)e=1}g=g.d +if(g==null){g=self.window.devicePixelRatio +if(g===0)g=1}d=A.Mq(a) +d.toString +o.aOk(k,B.c.aw(d),B.eN,r,s,h*e,j.b*g,1,1,Math.exp(-p/200),B.a4X,i,l)}else{i=A.o6(a) +i.toString +i=A.TT(i) +g=$.cF() +e=g.d +if(e==null){e=self.window.devicePixelRatio +if(e===0)e=1}g=g.d +if(g==null){g=self.window.devicePixelRatio +if(g===0)g=1}d=A.Mq(a) +d.toString +o.aOm(k,B.c.aw(d),B.eN,r,s,h*e,j.b*g,1,1,q,p,B.a4W,i,l)}c.c=a +c.d=s===B.bY +return k}} +A.qr.prototype={ +j(a){return A.J(this).j(0)+"(change: "+this.a.j(0)+", buttons: "+this.b+")"}} +A.IU.prototype={ +aku(a,b){var s +if(this.a!==0)return this.a_N(b) +s=(b===0&&a>-1?A.bRO(a):b)&1073741823 +this.a=s +return new A.qr(B.a4V,s)}, +a_N(a){var s=a&1073741823,r=this.a +if(r===0&&s!==0)return new A.qr(B.eN,r) +this.a=s +return new A.qr(s===0?B.eN:B.kO,s)}, +a_M(a){if(this.a!==0&&(a&1073741823)===0){this.a=0 +return new A.qr(B.F1,0)}return null}, +akv(a){if((a&1073741823)===0){this.a=0 +return new A.qr(B.eN,0)}return null}, +akw(a){var s +if(this.a===0)return null +s=this.a=(a==null?0:a)&1073741823 +if(s===0)return new A.qr(B.F1,s) +else return new A.qr(B.kO,s)}} +A.b4B.prototype={ +Qh(a){return this.e.cU(0,a,new A.b4D())}, +a7z(a){if(A.beG(a)==="touch")this.e.P(0,A.bm7(a))}, +P5(a,b,c,d){this.Ts(0,a,b,new A.b4C(this,d,c))}, +P4(a,b,c){return this.P5(a,b,c,!0)}, +alj(){var s,r=this,q=r.a.b +r.P4(q.ghv().a,"pointerdown",new A.b4E(r)) +s=q.c +r.P4(s.gNK(),"pointermove",new A.b4F(r)) +r.P5(q.ghv().a,"pointerleave",new A.b4G(r),!1) +r.P4(s.gNK(),"pointerup",new A.b4H(r)) +r.P5(q.ghv().a,"pointercancel",new A.b4I(r),!1) +r.b.push(A.brr("wheel",new A.b4J(r),!1,q.ghv().a))}, +uU(a,b,c){var s,r,q,p,o,n,m,l,k,j,i=A.beG(c) +i.toString +s=this.a73(i) +i=A.bm8(c) +i.toString +r=A.bm9(c) +r.toString +i=Math.abs(i)>Math.abs(r)?A.bm8(c):A.bm9(c) +i.toString +r=A.o6(c) +r.toString +q=A.TT(r) +p=c.pressure +if(p==null)p=null +r=this.a +o=r.b +n=A.btr(c,o) +m=this.xL(c) +l=$.cF() +k=l.d +if(k==null){k=self.window.devicePixelRatio +if(k===0)k=1}l=l.d +if(l==null){l=self.window.devicePixelRatio +if(l===0)l=1}j=p==null?0:p +r.d.aOl(a,b.b,b.a,m,s,n.a*k,n.b*l,j,1,B.kP,i/180*3.141592653589793,q,o.a)}, +ax6(a){var s,r +if("getCoalescedEvents" in a){s=a.getCoalescedEvents() +s=B.b.eq(s,t.e) +r=new A.hk(s.a,s.$ti.h("hk<1,l>")) +if(!r.gaA(r))return r}return A.b([a],t.A)}, +a73(a){switch(a){case"mouse":return B.cq +case"pen":return B.cr +case"touch":return B.ba +default:return B.c8}}, +xL(a){var s=A.beG(a) +s.toString +if(this.a73(s)===B.cq)s=-1 +else{s=A.bm7(a) +s.toString +s=B.c.aw(s)}return s}} +A.b4D.prototype={ +$0(){return new A.IU()}, +$S:480} +A.b4C.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k +if(this.b){s=this.a.a.e +if(s!=null){r=a.getModifierState("Alt") +q=a.getModifierState("Control") +p=a.getModifierState("Meta") +o=a.getModifierState("Shift") +n=A.o6(a) +n.toString +m=$.bza() +l=$.bzb() +k=$.bjF() +s.IH(m,l,k,r?B.cX:B.cj,n) +m=$.bjZ() +l=$.bk_() +k=$.bjG() +s.IH(m,l,k,q?B.cX:B.cj,n) +r=$.bzc() +m=$.bzd() +l=$.bjH() +s.IH(r,m,l,p?B.cX:B.cj,n) +r=$.bze() +q=$.bzf() +m=$.bjI() +s.IH(r,q,m,o?B.cX:B.cj,n)}}this.c.$1(a)}, +$S:2} +A.b4E.prototype={ +$1(a){var s,r,q=this.a,p=q.xL(a),o=A.b([],t.D9),n=q.Qh(p),m=A.Mq(a) +m.toString +s=n.a_M(B.c.aw(m)) +if(s!=null)q.uU(o,s,a) +m=B.c.aw(a.button) +r=A.Mq(a) +r.toString +q.uU(o,n.aku(m,B.c.aw(r)),a) +q.xu(a,o)}, +$S:82} +A.b4F.prototype={ +$1(a){var s,r,q,p,o=this.a,n=o.Qh(o.xL(a)),m=A.b([],t.D9) +for(s=J.az(o.ax6(a));s.H();){r=s.ga1(s) +q=r.buttons +if(q==null)q=null +q.toString +p=n.a_M(B.c.aw(q)) +if(p!=null)o.uU(m,p,r) +q=r.buttons +if(q==null)q=null +q.toString +o.uU(m,n.a_N(B.c.aw(q)),r)}o.xu(a,m)}, +$S:82} +A.b4G.prototype={ +$1(a){var s,r=this.a,q=r.Qh(r.xL(a)),p=A.b([],t.D9),o=A.Mq(a) +o.toString +s=q.akv(B.c.aw(o)) +if(s!=null){r.uU(p,s,a) +r.xu(a,p)}}, +$S:82} +A.b4H.prototype={ +$1(a){var s,r,q,p=this.a,o=p.xL(a),n=p.e +if(n.aR(0,o)){s=A.b([],t.D9) +n=n.i(0,o) +n.toString +r=A.Mq(a) +q=n.akw(r==null?null:B.c.aw(r)) +p.a7z(a) +if(q!=null){p.uU(s,q,a) +p.xu(a,s)}}}, +$S:82} +A.b4I.prototype={ +$1(a){var s,r=this.a,q=r.xL(a),p=r.e +if(p.aR(0,q)){s=A.b([],t.D9) +p.i(0,q).a=0 +r.a7z(a) +r.uU(s,new A.qr(B.F0,0),a) +r.xu(a,s)}}, +$S:82} +A.b4J.prototype={ +$1(a){var s=this.a +s.xu(a,s.avq(a)) +a.preventDefault()}, +$S:2} +A.JH.prototype={} +A.b2q.prototype={ +Kw(a,b,c){return this.a.cU(0,a,new A.b2r(b,c))}} +A.b2r.prototype={ +$0(){return new A.JH(this.a,this.b)}, +$S:522} +A.aNU.prototype={ +uX(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0){var s,r=$.qD().a.i(0,c),q=r.b,p=r.c +r.b=i +r.c=j +s=r.a +if(s==null)s=0 +return A.boI(a,b,c,d,e,f,!1,h,i-q,j-p,i,j,k,s,l,m,n,o,a0,a1,a2,a3,a4,a5,a6,a7,!1,a8,a9,b0)}, +Rt(a,b,c){var s=$.qD().a.i(0,a) +return s.b!==b||s.c!==c}, +tl(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9){var s,r=$.qD().a.i(0,c),q=r.b,p=r.c +r.b=i +r.c=j +s=r.a +if(s==null)s=0 +return A.boI(a,b,c,d,e,f,!1,h,i-q,j-p,i,j,k,s,l,m,n,o,a0,a1,a2,a3,a4,a5,B.kP,a6,!0,a7,a8,a9)}, +Ud(a,b,c,d,e,f,g,h,i,j,k,l,m,a0,a1,a2){var s,r,q,p,o,n=this +if(m===B.kP)switch(c.a){case 1:$.qD().Kw(d,f,g) +a.push(n.uX(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,a0,a1,a2)) +break +case 3:s=$.qD() +r=s.a.aR(0,d) +s.Kw(d,f,g) +if(!r)a.push(n.tl(b,B.qZ,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,a0,a1,a2)) +a.push(n.uX(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,a0,a1,a2)) +s.b=b +break +case 4:s=$.qD() +r=s.a.aR(0,d) +s.Kw(d,f,g).a=$.brz=$.brz+1 +if(!r)a.push(n.tl(b,B.qZ,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,a0,a1,a2)) +if(n.Rt(d,f,g))a.push(n.tl(0,B.eN,d,0,0,e,!1,0,f,g,0,0,i,0,0,0,0,0,j,k,l,0,a0,a1,a2)) +a.push(n.uX(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,a0,a1,a2)) +s.b=b +break +case 5:a.push(n.uX(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,a0,a1,a2)) +$.qD().b=b +break +case 6:case 0:s=$.qD() +q=s.a +p=q.i(0,d) +p.toString +if(c===B.F0){f=p.b +g=p.c}if(n.Rt(d,f,g))a.push(n.tl(s.b,B.kO,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,a0,a1,a2)) +a.push(n.uX(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,a0,a1,a2)) +if(e===B.ba){a.push(n.tl(0,B.a4U,d,0,0,e,!1,0,f,g,0,0,i,0,0,0,0,0,j,k,l,0,a0,a1,a2)) +q.P(0,d)}break +case 2:s=$.qD().a +o=s.i(0,d) +a.push(n.uX(b,c,d,0,0,e,!1,0,o.b,o.c,0,h,i,0,0,0,0,0,j,k,l,m,0,a0,a1,a2)) +s.P(0,d) +break +case 7:case 8:case 9:break}else switch(m.a){case 1:case 2:case 3:s=$.qD() +r=s.a.aR(0,d) +s.Kw(d,f,g) +if(!r)a.push(n.tl(b,B.qZ,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,a0,a1,a2)) +if(n.Rt(d,f,g))if(b!==0)a.push(n.tl(b,B.kO,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,a0,a1,a2)) +else a.push(n.tl(b,B.eN,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,a0,a1,a2)) +a.push(n.uX(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,a0,a1,a2)) +break +case 0:break +case 4:break}}, +aOk(a,b,c,d,e,f,g,h,i,j,k,l,m){return this.Ud(a,b,c,d,e,f,g,h,i,j,0,0,k,0,l,m)}, +aOm(a,b,c,d,e,f,g,h,i,j,k,l,m,n){return this.Ud(a,b,c,d,e,f,g,h,i,1,j,k,l,0,m,n)}, +aOl(a,b,c,d,e,f,g,h,i,j,k,l,m){return this.Ud(a,b,c,d,e,f,g,h,i,1,0,0,j,k,l,m)}} +A.bgj.prototype={} +A.aOK.prototype={ +asI(a){$.ud.push(new A.aOL(this))}, +t(){var s,r +for(s=this.a,r=A.jb(s,s.r,A.w(s).c);r.H();)s.i(0,r.d).bq(0) +s.af(0) +$.a9G=null}, +aev(a){var s,r,q,p,o,n,m=this,l=globalThis.KeyboardEvent +if(!(l!=null&&a instanceof l))return +s=new A.pk(a) +r=A.r7(a) +r.toString +if(a.type==="keydown"&&A.n5(a)==="Tab"&&a.isComposing)return +q=A.n5(a) +q.toString +if(!(q==="Meta"||q==="Shift"||q==="Alt"||q==="Control")&&m.c){q=m.a +p=q.i(0,r) +if(p!=null)p.bq(0) +if(a.type==="keydown")p=a.ctrlKey||a.shiftKey||a.altKey||a.metaKey +else p=!1 +if(p)q.u(0,r,A.dn(B.nA,new A.aON(m,r,s))) +else q.P(0,r)}o=a.getModifierState("Shift")?1:0 +if(a.getModifierState("Alt")||a.getModifierState("AltGraph"))o|=2 +if(a.getModifierState("Control"))o|=4 +if(a.getModifierState("Meta"))o|=8 +m.b=o +if(a.type==="keydown")if(A.n5(a)==="CapsLock"){r=o|32 +m.b=r}else if(A.r7(a)==="NumLock"){r=o|16 +m.b=r}else if(A.n5(a)==="ScrollLock"){r=o|64 +m.b=r}else{if(A.n5(a)==="Meta"){r=$.hj() +r=r===B.oZ}else r=!1 +if(r){r=o|8 +m.b=r}else if(A.r7(a)==="MetaLeft"&&A.n5(a)==="Process"){r=o|8 +m.b=r}else r=o}else r=o +n=A.b3(["type",a.type,"keymap","web","code",A.r7(a),"key",A.n5(a),"location",B.c.aw(a.location),"metaState",r,"keyCode",B.c.aw(a.keyCode)],t.N,t.z) +$.bF().ng("flutter/keyevent",B.aC.e3(n),new A.aOO(s))}} +A.aOL.prototype={ +$0(){this.a.t()}, +$S:0} +A.aON.prototype={ +$0(){var s,r,q=this.a +q.a.P(0,this.b) +s=this.c.a +r=A.b3(["type","keyup","keymap","web","code",A.r7(s),"key",A.n5(s),"location",B.c.aw(s.location),"metaState",q.b,"keyCode",B.c.aw(s.keyCode)],t.N,t.z) +$.bF().ng("flutter/keyevent",B.aC.e3(r),A.bP1())}, +$S:0} +A.aOO.prototype={ +$1(a){var s +if(a==null)return +if(A.u9(J.bG(t.a.a(B.aC.kQ(a)),"handled"))){s=this.a.a +s.preventDefault() +s.stopPropagation()}}, +$S:29} +A.a4p.prototype={} +A.a4o.prototype={ +mg(a,b,c,d){var s=this.dy,r=this.fr,q=this.fx +A.a3(b,"drawImage",[s,0,0,r,q,c,d,r,q])}, +CM(a,b){var s,r,q,p,o,n=this,m="attachShader",l=a+"||"+b,k=J.bG($.aG5.bb(),l) +if(k==null){s=n.ac2(0,"VERTEX_SHADER",a) +r=n.ac2(0,"FRAGMENT_SHADER",b) +q=n.a +p=q.createProgram() +A.a3(q,m,[p,s]) +A.a3(q,m,[p,r]) +A.a3(q,"linkProgram",[p]) +o=n.ay +if(!A.a3(q,"getProgramParameter",[p,o==null?n.ay=q.LINK_STATUS:o]))A.X(A.c1(A.a3(q,"getProgramInfoLog",[p]))) +k=new A.a4p(p) +J.kc($.aG5.bb(),l,k)}return k}, +ac2(a,b,c){var s,r=this.a,q=r.createShader(r[b]) +if(q==null)throw A.d(A.c1(A.bOq(r,"getError"))) +A.a3(r,"shaderSource",[q,c]) +A.a3(r,"compileShader",[q]) +s=this.c +if(!A.a3(r,"getShaderParameter",[q,s==null?this.c=r.COMPILE_STATUS:s]))throw A.d(A.c1("Shader compilation failed: "+A.j(A.a3(r,"getShaderInfoLog",[q])))) +return q}, +aig(a,b,c,d,e,f,g){A.a3(this.a,"texImage2D",[b,c,d,e,f,g])}, +adp(a,b){A.a3(this.a,"drawArrays",[this.aKz(b),0,a])}, +aKz(a){var s,r=this +switch(a.a){case 0:return r.gXH() +case 2:s=r.ax +return s==null?r.ax=r.a.TRIANGLE_FAN:s +case 1:s=r.ax +return s==null?r.ax=r.a.TRIANGLE_STRIP:s}}, +glC(){var s=this.d +return s==null?this.d=this.a.ARRAY_BUFFER:s}, +gw8(){var s=this.e +return s==null?this.e=this.a.ELEMENT_ARRAY_BUFFER:s}, +gXG(){var s=this.r +return s==null?this.r=this.a.FLOAT:s}, +gLt(){var s=this.cx +return s==null?this.cx=this.a.RGBA:s}, +gLw(){var s=this.ch +return s==null?this.ch=this.a.UNSIGNED_BYTE:s}, +gafx(){var s=this.CW +return s==null?this.CW=this.a.UNSIGNED_SHORT:s}, +gtW(){var s=this.f +return s==null?this.f=this.a.STATIC_DRAW:s}, +gXH(){var s=this.ax +return s==null?this.ax=this.a.TRIANGLES:s}, +gXF(){var s=this.w +return s==null?this.w=this.a.COLOR_BUFFER_BIT:s}, +gkx(){var s=this.x +return s==null?this.x=this.a.TEXTURE_2D:s}, +gafv(){var s=this.dx +return s==null?this.dx=this.a.TEXTURE0:s}, +gLu(){var s=this.y +return s==null?this.y=this.a.TEXTURE_WRAP_S:s}, +gLv(){var s=this.z +return s==null?this.z=this.a.TEXTURE_WRAP_T:s}, +gzt(){var s=this.as +return s==null?this.as=this.a.CLAMP_TO_EDGE:s}, +gafu(){var s=this.cy +return s==null?this.cy=this.a.LINEAR:s}, +gafw(){var s=this.db +return s==null?this.db=this.a.TEXTURE_MIN_FILTER:s}, +jA(a,b,c){var s=A.a3(this.a,"getUniformLocation",[b,c]) +if(s==null)throw A.d(A.c1(c+" not found")) +else return s}, +Np(a,b){var s=A.a3(this.a,"getAttribLocation",[a,b]) +if(s==null)throw A.d(A.c1(b+" not found")) +else return s}, +ahn(a){var s,r,q=this +if("transferToImageBitmap" in q.dy&&a){q.dy.getContext("webgl2") +return q.dy.transferToImageBitmap()}else{s=q.fr +r=A.Da(q.fx,s) +s=A.lZ(r,"2d",null) +s.toString +q.mg(0,t.e.a(s),0,0) +return r}}} +A.aM2.prototype={ +a9G(a){var s,r,q,p,o=this.c +$.cF() +s=self.window.devicePixelRatio +if(s===0)s=1 +r=this.d +q=self.window.devicePixelRatio +if(q===0)q=1 +p=a.style +A.M(p,"position","absolute") +A.M(p,"width",A.j(o/s)+"px") +A.M(p,"height",A.j(r/q)+"px")}} +A.KL.prototype={ +W(){return"Assertiveness."+this.b}} +A.avN.prototype={ +aMz(a){switch(a.a){case 0:return this.a +case 1:return this.b}}, +ab5(a,b){var s=this,r=s.aMz(b),q=A.c8(self.document,"div") +A.bm4(q,s.c?a+"\xa0":a) +s.c=!s.c +r.append(q) +A.dn(B.df,new A.avO(q))}} +A.avO.prototype={ +$0(){return this.a.remove()}, +$S:0} +A.Ue.prototype={ +W(){return"_CheckableKind."+this.b}} +A.ayx.prototype={ +fd(a){var s,r,q,p=this,o="setAttribute",n="true" +p.qq(0) +s=p.c +if((s.k2&1)!==0){switch(p.r.a){case 0:r=p.a +r===$&&A.c() +q=A.bf("checkbox") +A.a3(r,o,["role",q==null?t.K.a(q):q]) +break +case 1:r=p.a +r===$&&A.c() +q=A.bf("radio") +A.a3(r,o,["role",q==null?t.K.a(q):q]) +break +case 2:r=p.a +r===$&&A.c() +q=A.bf("switch") +A.a3(r,o,["role",q==null?t.K.a(q):q]) +break}r=s.Vo() +q=p.a +if(r===B.jG){q===$&&A.c() +r=A.bf(n) +A.a3(q,o,["aria-disabled",r==null?t.K.a(r):r]) +r=A.bf(n) +A.a3(q,o,["disabled",r==null?t.K.a(r):r])}else{q===$&&A.c() +q.removeAttribute("aria-disabled") +q.removeAttribute("disabled")}s=s.a +s=(s&2)!==0||(s&131072)!==0?n:"false" +r=p.a +r===$&&A.c() +s=A.bf(s) +A.a3(r,o,["aria-checked",s==null?t.K.a(s):s])}}, +t(){this.AY() +var s=this.a +s===$&&A.c() +s.removeAttribute("aria-disabled") +s.removeAttribute("disabled")}, +pK(){var s=this.e +if(s==null)s=null +else{s=s.c.a +s===$&&A.c() +s.focus() +s=!0}return s===!0}} +A.a2k.prototype={ +aso(a){var s=this,r=s.c,q=A.bf_(r,s) +s.e=q +s.jO(q) +s.jO(new A.A9(B.l_,r,s)) +a.k1.r.push(new A.aAZ(s,a))}, +aHD(){this.c.Th(new A.aAY())}, +fd(a){var s,r,q,p="setAttribute" +this.qq(0) +s=this.c +if((s.a&4096)!==0){r=s.z +s=r==null?"":r +q=this.a +q===$&&A.c() +s=A.bf(s) +A.a3(q,p,["aria-label",s==null?t.K.a(s):s]) +s=A.bf("dialog") +A.a3(q,p,["role",s==null?t.K.a(s):s])}}, +acZ(a){var s,r,q="setAttribute" +if((this.c.a&4096)!==0)return +s=this.a +s===$&&A.c() +r=A.bf("dialog") +A.a3(s,q,["role",r==null?t.K.a(r):r]) +r=a.b.p1.a +r===$&&A.c() +r=A.bf(r.id) +A.a3(s,q,["aria-describedby",r==null?t.K.a(r):r])}, +pK(){return!1}} +A.aAZ.prototype={ +$0(){if(this.b.k1.w)return +this.a.aHD()}, +$S:0} +A.aAY.prototype={ +$1(a){var s=a.p1 +if(s==null)return!0 +return!s.pK()}, +$S:256} +A.Hj.prototype={ +fd(a){var s,r=this,q=r.b +if((q.a&4096)===0)return +if((q.k2&1024)!==0){s=r.e +if(s!=null)s.acZ(r) +else q.k1.r.push(new A.aQK(r))}}, +aCM(){var s,r,q=this.b.k4 +while(!0){s=q!=null +if(s){r=q.p1 +r=(r==null?null:r.b)!==B.kQ}else r=!1 +if(!r)break +q=q.k4}if(s){s=q.p1 +s=(s==null?null:s.b)===B.kQ}else s=!1 +if(s){s=q.p1 +s.toString +this.e=t.JX.a(s)}}} +A.aQK.prototype={ +$0(){var s,r=this.a +if(!r.d){r.aCM() +s=r.e +if(s!=null)s.acZ(r)}}, +$S:0} +A.a3T.prototype={ +fd(a){var s,r,q=this,p=q.b +if((p.a&2097152)!==0){s=q.e +if(s.b==null){r=q.c.a +r===$&&A.c() +s.afL(p.id,r)}p=p.a +if((p&32)!==0)p=(p&64)===0||(p&128)!==0 +else p=!1 +s.abM(p)}else q.e.Oh()}} +A.ZE.prototype={ +afL(a,b){var s,r,q=this,p=q.b,o=p==null +if(b===(o?null:p.a[2])){o=p.a +if(a===o[3])return +s=o[2] +r=o[1] +q.b=new A.Wu([o[0],r,s,a]) +return}if(!o)q.Oh() +o=t.L +s=o.a(A.cd(new A.avQ(q))) +s=[o.a(A.cd(new A.avR(q))),s,b,a] +q.b=new A.Wu(s) +A.blT(b,0) +A.dc(b,"focus",s[1],null) +A.dc(b,"blur",s[0],null)}, +Oh(){var s,r=this.b +this.c=this.b=null +if(r==null)return +s=r.a +A.eQ(s[2],"focus",s[1],null) +A.eQ(s[2],"blur",s[0],null)}, +a8d(a){var s,r,q=this.b +if(q==null)return +s=$.bF() +r=q.a[3] +s.nh(r,a?B.rm:B.rn,null)}, +abM(a){var s,r=this,q=r.b +if(q==null){r.c=null +return}if(a===r.c)return +r.c=a +if(a){s=r.a +s.w=!0}else return +s.r.push(new A.avP(r,q))}} +A.avQ.prototype={ +$1(a){return this.a.a8d(!0)}, +$S:2} +A.avR.prototype={ +$1(a){return this.a.a8d(!1)}, +$S:2} +A.avP.prototype={ +$0(){var s=this.b +if(!J.f(this.a.b,s))return +s.a[2].focus()}, +$S:0} +A.aHl.prototype={ +pK(){var s=this.e +if(s==null)s=null +else{s=s.c.a +s===$&&A.c() +s.focus() +s=!0}return s===!0}, +fd(a){var s,r,q,p=this,o="setAttribute" +p.qq(0) +s=p.c +if(s.gXC()){r=s.dy +r=r!=null&&!B.eG.gaA(r)}else r=!1 +if(r){if(p.r==null){p.r=A.c8(self.document,"flt-semantics-img") +r=s.dy +if(r!=null&&!B.eG.gaA(r)){r=p.r.style +A.M(r,"position","absolute") +A.M(r,"top","0") +A.M(r,"left","0") +q=s.y +A.M(r,"width",A.j(q.c-q.a)+"px") +s=s.y +A.M(r,"height",A.j(s.d-s.b)+"px")}A.M(p.r.style,"font-size","6px") +s=p.r +s.toString +r=p.a +r===$&&A.c() +r.append(s)}s=p.r +s.toString +r=A.bf("img") +A.a3(s,o,["role",r==null?t.K.a(r):r]) +p.a8f(p.r)}else if(s.gXC()){s=p.a +s===$&&A.c() +r=A.bf("img") +A.a3(s,o,["role",r==null?t.K.a(r):r]) +p.a8f(s) +p.Pt()}else{p.Pt() +s=p.a +s===$&&A.c() +s.removeAttribute("aria-label")}}, +a8f(a){var s=this.c.z +if(s!=null&&s.length!==0){a.toString +s.toString +s=A.bf(s) +A.a3(a,"setAttribute",["aria-label",s==null?t.K.a(s):s])}}, +Pt(){var s=this.r +if(s!=null){s.remove() +this.r=null}}, +t(){this.AY() +this.Pt() +var s=this.a +s===$&&A.c() +s.removeAttribute("aria-label")}} +A.aHv.prototype={ +asx(a){var s,r,q=this,p=q.c +q.jO(new A.A9(B.l_,p,q)) +q.jO(new A.Hj(B.rc,p,q)) +q.jO(new A.Oj(B.k3,B.Fl,p,q)) +p=q.r +s=q.a +s===$&&A.c() +s.append(p) +A.aBK(p,"range") +s=A.bf("slider") +A.a3(p,"setAttribute",["role",s==null?t.K.a(s):s]) +A.dc(p,"change",t.L.a(A.cd(new A.aHw(q,a))),null) +s=new A.aHx(q) +q.y!==$&&A.aj() +q.y=s +r=$.dd;(r==null?$.dd=A.hQ():r).r.push(s) +q.w.afL(a.id,p)}, +pK(){this.r.focus() +return!0}, +fd(a){var s,r=this +r.qq(0) +s=$.dd +switch((s==null?$.dd=A.hQ():s).e.a){case 1:r.awQ() +r.aL0() +break +case 0:r.a3I() +break}r.w.abM((r.c.a&32)!==0)}, +awQ(){var s=this.r,r=A.beE(s) +r.toString +if(!r)return +A.blW(s,!1)}, +aL0(){var s,r,q,p,o,n,m,l=this,k="setAttribute" +if(!l.z){s=l.c.k2 +r=(s&4096)!==0||(s&8192)!==0||(s&16384)!==0}else r=!0 +if(!r)return +l.z=!1 +q=""+l.x +s=l.r +A.blX(s,q) +p=A.bf(q) +A.a3(s,k,["aria-valuenow",p==null?t.K.a(p):p]) +p=l.c +o=p.ax +o.toString +o=A.bf(o) +A.a3(s,k,["aria-valuetext",o==null?t.K.a(o):o]) +n=p.ch.length!==0?""+(l.x+1):q +s.max=n +o=A.bf(n) +A.a3(s,k,["aria-valuemax",o==null?t.K.a(o):o]) +m=p.cx.length!==0?""+(l.x-1):q +s.min=m +p=A.bf(m) +A.a3(s,k,["aria-valuemin",p==null?t.K.a(p):p])}, +a3I(){var s=this.r,r=A.beE(s) +r.toString +if(r)return +A.blW(s,!0)}, +t(){var s,r,q=this +q.AY() +q.w.Oh() +s=$.dd +if(s==null)s=$.dd=A.hQ() +r=q.y +r===$&&A.c() +B.b.P(s.r,r) +q.a3I() +q.r.remove()}} +A.aHw.prototype={ +$1(a){var s,r=null,q=this.a,p=q.r,o=A.beE(p) +o.toString +if(o)return +q.z=!0 +p=A.beF(p) +p.toString +s=A.et(p,r,r) +p=q.x +if(s>p){q.x=p+1 +$.bF().nh(this.b.id,B.FE,r)}else if(sr){s=q.b +s.toString +if((s&32)!==0||(s&16)!==0)$.bF().nh(p,B.ig,n) +else $.bF().nh(p,B.ii,n)}else{s=q.b +s.toString +if((s&32)!==0||(s&16)!==0)$.bF().nh(p,B.ih,n) +else $.bF().nh(p,B.ij,n)}}}, +fd(a){var s,r,q,p=this +p.qq(0) +p.c.k1.r.push(new A.aRK(p)) +if(p.x==null){s=p.a +s===$&&A.c() +A.M(s.style,"touch-action","none") +p.a4l() +r=new A.aRL(p) +p.r=r +q=$.dd;(q==null?$.dd=A.hQ():q).r.push(r) +r=t.L.a(A.cd(new A.aRM(p))) +p.x=r +A.dc(s,"scroll",r,null)}}, +ga3T(){var s,r=this.c.b +r.toString +r=(r&32)!==0||(r&16)!==0 +s=this.a +if(r){s===$&&A.c() +return B.c.aw(s.scrollTop)}else{s===$&&A.c() +return B.c.aw(s.scrollLeft)}}, +a6s(){var s,r,q,p,o=this,n="transform",m=o.c,l=m.y +if(l==null){$.fK().$1("Warning! the rect attribute of semanticsObject is null") +return}s=m.b +s.toString +s=(s&32)!==0||(s&16)!==0 +r=o.w +q=l.d-l.b +p=l.c-l.a +if(s){s=B.c.d0(q) +r=r.style +A.M(r,n,"translate(0px,"+(s+10)+"px)") +A.M(r,"width",""+B.c.ai(p)+"px") +A.M(r,"height","10px") +r=o.a +r===$&&A.c() +r.scrollTop=10 +m.p2=o.y=B.c.aw(r.scrollTop) +m.p3=0}else{s=B.c.d0(p) +r=r.style +A.M(r,n,"translate("+(s+10)+"px,0px)") +A.M(r,"width","10px") +A.M(r,"height",""+B.c.ai(q)+"px") +q=o.a +q===$&&A.c() +q.scrollLeft=10 +q=B.c.aw(q.scrollLeft) +o.y=q +m.p2=0 +m.p3=q}}, +a4l(){var s,r=this,q="overflow-y",p="overflow-x",o=$.dd +switch((o==null?$.dd=A.hQ():o).e.a){case 1:o=r.c.b +o.toString +o=(o&32)!==0||(o&16)!==0 +s=r.a +if(o){s===$&&A.c() +A.M(s.style,q,"scroll")}else{s===$&&A.c() +A.M(s.style,p,"scroll")}break +case 0:o=r.c.b +o.toString +o=(o&32)!==0||(o&16)!==0 +s=r.a +if(o){s===$&&A.c() +A.M(s.style,q,"hidden")}else{s===$&&A.c() +A.M(s.style,p,"hidden")}break}}, +t(){var s,r,q,p=this +p.AY() +s=p.a +s===$&&A.c() +r=s.style +r.removeProperty("overflowY") +r.removeProperty("overflowX") +r.removeProperty("touch-action") +q=p.x +if(q!=null){A.eQ(s,"scroll",q,null) +p.x=null}s=p.r +if(s!=null){q=$.dd +B.b.P((q==null?$.dd=A.hQ():q).r,s) +p.r=null}}, +pK(){var s=this.e +if(s==null)s=null +else{s=s.c.a +s===$&&A.c() +s.focus() +s=!0}return s===!0}} +A.aRK.prototype={ +$0(){var s=this.a +s.a6s() +s.c.Z0()}, +$S:0} +A.aRL.prototype={ +$1(a){this.a.a4l()}, +$S:255} +A.aRM.prototype={ +$1(a){this.a.aG3()}, +$S:2} +A.MN.prototype={ +j(a){var s=A.b([],t.T),r=this.a +if((r&1)!==0)s.push("accessibleNavigation") +if((r&2)!==0)s.push("invertColors") +if((r&4)!==0)s.push("disableAnimations") +if((r&8)!==0)s.push("boldText") +if((r&16)!==0)s.push("reduceMotion") +if((r&32)!==0)s.push("highContrast") +if((r&64)!==0)s.push("onOffSwitchLabels") +return"AccessibilityFeatures"+A.j(s)}, +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.MN&&b.a===this.a}, +gL(a){return B.f.gL(this.a)}, +acm(a,b){var s=(a==null?(this.a&1)!==0:a)?1:0,r=this.a +s=(r&2)!==0?s|2:s&4294967293 +s=(r&4)!==0?s|4:s&4294967291 +s=(r&8)!==0?s|8:s&4294967287 +s=(r&16)!==0?s|16:s&4294967279 +s=(b==null?(r&32)!==0:b)?s|32:s&4294967263 +return new A.MN((r&64)!==0?s|64:s&4294967231)}, +aOw(a){return this.acm(null,a)}, +aOo(a){return this.acm(a,null)}} +A.abj.prototype={$ibgC:1} +A.abi.prototype={} +A.nk.prototype={ +W(){return"PrimaryRole."+this.b}} +A.Bn.prototype={ +W(){return"Role."+this.b}} +A.a9i.prototype={ +xl(a,b,c){var s=this,r=s.c,q=A.a9j(s.cJ(0),r) +s.a!==$&&A.aj() +s.a=q +q=A.bf_(r,s) +s.e=q +s.jO(q) +s.jO(new A.A9(B.l_,r,s)) +s.jO(new A.Hj(B.rc,r,s)) +s.jO(new A.Oj(c,B.Fl,r,s))}, +cJ(a){return A.c8(self.document,"flt-semantics")}, +jO(a){var s=this.d;(s==null?this.d=A.b([],t.VM):s).push(a)}, +fd(a){var s,r,q=this.d +if(q==null)return +for(s=q.length,r=0;r1)for(p=0;p=0;--p,a1=s){g=l[p] +s=g.id +if(!B.b.G(a0,s)){k=g.p1 +if(a1==null){m.toString +k=k.a +k===$&&A.c() +m.append(k)}else{m.toString +k=k.a +k===$&&A.c() +m.insertBefore(k,a1)}g.k4=a2 +q.e.u(0,s,a2)}s=g.p1.a +s===$&&A.c()}a2.ok=l}, +aym(){var s,r,q=this +if(q.go!==-1)return B.r4 +else if((q.a&16)!==0)return B.F7 +else{s=q.b +s.toString +if((s&64)!==0||(s&128)!==0)return B.F6 +else if(q.gXC())return B.F8 +else{s=q.a +if((s&1)!==0||(s&65536)!==0)return B.r3 +else if((s&8)!==0)return B.r2 +else{r=q.b +r.toString +if((r&32)!==0||(r&16)!==0||(r&4)!==0||(r&8)!==0)return B.r1 +else if((s&2048)!==0)return B.kQ +else if((s&4194304)!==0)return B.r6 +else return B.r5}}}}, +avJ(a){var s,r,q,p=this +switch(a.a){case 3:s=new A.aVd(B.F7,p) +r=A.a9j(s.cJ(0),p) +s.a!==$&&A.aj() +s.a=r +s.aHL() +break +case 1:s=A.c8(self.document,"flt-semantics-scroll-overflow") +r=new A.aRD(s,B.r1,p) +r.xl(B.r1,p,B.k3) +q=s.style +A.M(q,"position","absolute") +A.M(q,"transform-origin","0 0 0") +A.M(q,"pointer-events","none") +q=r.a +q===$&&A.c() +q.append(s) +s=r +break +case 0:s=A.bFU(p) +break +case 2:s=new A.axX(B.r2,p) +s.xl(B.r2,p,B.k4) +s.jO(A.ad1(p,s)) +r=s.a +r===$&&A.c() +q=A.bf("button") +A.a3(r,"setAttribute",["role",q==null?t.K.a(q):q]) +break +case 4:s=new A.ayx(A.bOx(p),B.r3,p) +s.xl(B.r3,p,B.k3) +s.jO(A.ad1(p,s)) +break +case 6:s=A.bDE(p) +break +case 5:s=new A.aHl(B.F8,p) +r=A.a9j(s.cJ(0),p) +s.a!==$&&A.aj() +s.a=r +r=A.bf_(p,s) +s.e=r +s.jO(r) +s.jO(new A.A9(B.l_,p,s)) +s.jO(new A.Hj(B.rc,p,s)) +s.jO(A.ad1(p,s)) +break +case 7:s=new A.aNM(B.r4,p) +s.xl(B.r4,p,B.k3) +break +case 9:s=new A.aJk(B.r6,p) +s.xl(B.r6,p,B.k4) +s.jO(A.ad1(p,s)) +break +case 8:s=new A.aFB(B.r5,p) +s.xl(B.r5,p,B.k4) +r=p.b +r.toString +if((r&1)!==0)s.jO(A.ad1(p,s)) +break +default:s=null}return s}, +aLa(){var s,r,q,p=this,o=p.p1,n=p.aym(),m=p.p1 +if(m==null)s=null +else{m=m.a +m===$&&A.c() +s=m}if(o!=null)if(o.b===n){o.fd(0) +return}else{o.t() +o=p.p1=null}if(o==null){o=p.avJ(n) +p.p1=o +o.fd(0)}m=p.p1.a +m===$&&A.c() +if(!J.f(s,m)){r=p.k3 +if(r!=null){m=p.p1.a +m===$&&A.c() +m.append(r)}q=s==null?null:s.parentElement +if(q!=null){m=p.p1.a +m===$&&A.c() +q.insertBefore(m,s) +s.remove()}}}, +Z0(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.p1.a +f===$&&A.c() +f=f.style +s=g.y +A.M(f,"width",A.j(s.c-s.a)+"px") +s=g.y +A.M(f,"height",A.j(s.d-s.b)+"px") +f=g.dy +r=f!=null&&!B.eG.gaA(f)?g.a_w():null +f=g.y +q=f.b===0&&f.a===0 +p=g.dx +f=p==null +o=f||A.bdd(p)===B.Hq +if(q&&o&&g.p2===0&&g.p3===0){f=g.p1.a +f===$&&A.c() +A.aSc(f) +if(r!=null)A.aSc(r) +return}n=A.bn("effectiveTransform") +if(!q)if(f){f=g.y +m=f.a +l=f.b +f=A.fu() +f.qm(m,l,0) +n.b=f +k=m===0&&l===0}else{f=new A.cL(new Float32Array(16)) +f.v(new A.cL(p)) +s=g.y +f.aJ(0,s.a,s.b) +n.b=f +k=J.bBn(n.bl())}else{if(!o)n.b=new A.cL(p) +k=o}f=g.p1 +if(!k){f=f.a +f===$&&A.c() +f=f.style +A.M(f,"transform-origin","0 0 0") +A.M(f,"transform",A.nN(n.bl().a))}else{f=f.a +f===$&&A.c() +A.aSc(f)}if(r!=null)if(!q||g.p2!==0||g.p3!==0){f=g.y +s=f.a +j=g.p3 +f=f.b +i=g.p2 +h=r.style +A.M(h,"top",A.j(-f+i)+"px") +A.M(h,"left",A.j(-s+j)+"px")}else A.aSc(r)}, +Th(a){var s,r,q,p +if(!a.$1(this))return!1 +s=this.dy +if(s==null)return!0 +for(r=s.length,q=this.k1.d,p=0;p>>0}p=o.cy +if(n.ax!==p){n.ax=p +n.k2=(n.k2|4096)>>>0}p=o.db +if(n.ay!==p){n.ay=p +n.k2=(n.k2|4096)>>>0}p=o.ay +if(n.z!==p){n.z=p +n.k2=(n.k2|1024)>>>0}p=o.ch +if(n.Q!==p){n.Q=p +n.k2=(n.k2|1024)>>>0}p=o.at +if(!J.f(n.y,p)){n.y=p +n.k2=(n.k2|512)>>>0}p=o.id +if(n.dx!==p){n.dx=p +n.k2=(n.k2|65536)>>>0}p=o.z +if(n.r!==p){n.r=p +n.k2=(n.k2|64)>>>0}p=o.c +if(n.b!==p){n.b=p +n.k2=(n.k2|2)>>>0}p=o.f +if(n.c!==p){n.c=p +n.k2=(n.k2|4)>>>0}p=o.r +if(n.d!==p){n.d=p +n.k2=(n.k2|8)>>>0}p=o.x +if(n.e!==p){n.e=p +n.k2=(n.k2|16)>>>0}p=o.y +if(n.f!==p){n.f=p +n.k2=(n.k2|32)>>>0}p=o.Q +if(n.w!==p){n.w=p +n.k2=(n.k2|128)>>>0}p=o.as +if(n.x!==p){n.x=p +n.k2=(n.k2|256)>>>0}p=o.CW +if(n.as!==p){n.as=p +n.k2=(n.k2|2048)>>>0}p=o.cx +if(n.at!==p){n.at=p +n.k2=(n.k2|2048)>>>0}p=o.dx +if(n.ch!==p){n.ch=p +n.k2=(n.k2|8192)>>>0}p=o.dy +if(n.CW!==p){n.CW=p +n.k2=(n.k2|8192)>>>0}p=o.fr +if(n.cx!==p){n.cx=p +n.k2=(n.k2|16384)>>>0}p=o.fx +if(n.cy!==p){n.cy=p +n.k2=(n.k2|16384)>>>0}p=o.fy +if(n.fy!==p){n.fy=p +n.k2=(n.k2|4194304)>>>0}p=o.go +if(n.db!=p){n.db=p +n.k2=(n.k2|32768)>>>0}p=o.k2 +if(n.fr!==p){n.fr=p +n.k2=(n.k2|1048576)>>>0}p=o.k1 +if(n.dy!==p){n.dy=p +n.k2=(n.k2|524288)>>>0}p=o.k3 +if(n.fx!==p){n.fx=p +n.k2=(n.k2|2097152)>>>0}p=o.w +if(n.go!==p){n.go=p +n.k2=(n.k2|8388608)>>>0}n.aLa() +p=n.k2 +if((p&512)!==0||(p&65536)!==0||(p&64)!==0)n.Z0() +p=n.dy +p=!(p!=null&&!B.eG.gaA(p))&&n.go===-1 +m=n.p1 +if(p){p=m.a +p===$&&A.c() +p=p.style +p.setProperty("pointer-events","all","")}else{p=m.a +p===$&&A.c() +p=p.style +p.setProperty("pointer-events","none","")}}for(q=0;q"),n=A.ab(new A.bk(p,o),!0,o.h("z.E")),m=n.length +for(s=0;s=20)return i.d=!0 +if(!B.a6w.G(0,a.type))return!0 +if(i.a!=null)return!1 +r=A.bn("activationPoint") +switch(a.type){case"click":r.shb(new A.Mr(a.offsetX,a.offsetY)) +break +case"touchstart":case"touchend":s=t.zZ +s=A.j3(new A.UL(a.changedTouches,s),s.h("z.E"),t.e) +s=A.w(s).y[1].a(J.lR(s.a)) +r.shb(new A.Mr(s.clientX,s.clientY)) +break +case"pointerdown":case"pointerup":r.shb(new A.Mr(a.clientX,a.clientY)) +break +default:return!0}q=i.b.getBoundingClientRect() +s=q.left +p=q.right +o=q.left +n=q.top +m=q.bottom +l=q.top +k=r.bl().a-(s+(p-o)/2) +j=r.bl().b-(n+(m-l)/2) +if(k*k+j*j<1){i.d=!0 +i.a=A.dn(B.df,new A.aKN(i)) +return!1}return!0}, +agV(){var s,r="setAttribute",q=this.b=A.c8(self.document,"flt-semantics-placeholder") +A.dc(q,"click",t.L.a(A.cd(new A.aKM(this))),!0) +s=A.bf("button") +A.a3(q,r,["role",s==null?t.K.a(s):s]) +s=A.bf("Enable accessibility") +A.a3(q,r,["aria-label",s==null?t.K.a(s):s]) +s=q.style +A.M(s,"position","absolute") +A.M(s,"left","0") +A.M(s,"top","0") +A.M(s,"right","0") +A.M(s,"bottom","0") +return q}, +t(){var s=this.b +if(s!=null)s.remove() +this.a=this.b=null}} +A.aKN.prototype={ +$0(){this.a.t() +var s=$.dd;(s==null?$.dd=A.hQ():s).sNU(!0)}, +$S:0} +A.aKM.prototype={ +$1(a){this.a.N5(a)}, +$S:2} +A.axX.prototype={ +pK(){var s=this.e +if(s==null)s=null +else{s=s.c.a +s===$&&A.c() +s.focus() +s=!0}return s===!0}, +fd(a){var s,r +this.qq(0) +s=this.c.Vo() +r=this.a +if(s===B.jG){r===$&&A.c() +s=A.bf("true") +A.a3(r,"setAttribute",["aria-disabled",s==null?t.K.a(s):s])}else{r===$&&A.c() +r.removeAttribute("aria-disabled")}}} +A.ad0.prototype={ +asV(a,b){var s,r=t.L.a(A.cd(new A.aV2(this,a))) +this.e=r +s=b.a +s===$&&A.c() +A.dc(s,"click",r,null)}, +fd(a){var s,r=this,q=r.f,p=r.b +if(p.Vo()!==B.jG){p=p.b +p.toString +p=(p&1)!==0}else p=!1 +r.f=p +if(q!==p){s=r.c.a +if(p){s===$&&A.c() +p=A.bf("") +A.a3(s,"setAttribute",["flt-tappable",p==null?t.K.a(p):p])}else{s===$&&A.c() +s.removeAttribute("flt-tappable")}}}} +A.aV2.prototype={ +$1(a){$.bji().aW1(0,a,this.b.id,this.a.f)}, +$S:2} +A.aSj.prototype={ +Vn(a,b,c,d){this.CW=b +this.x=d +this.y=c}, +aLN(a){var s,r,q=this,p=q.ch +if(p===a)return +else if(p!=null)q.mf(0) +q.ch=a +q.c=a.r +q.a8P() +p=q.CW +p.toString +s=q.x +s.toString +r=q.y +r.toString +q.an7(0,p,r,s)}, +mf(a){var s,r,q,p=this +if(!p.b)return +p.b=!1 +p.w=p.r=null +for(s=p.z,r=0;r=this.b)throw A.d(A.NS(b,this,null,null,null)) +return this.a[b]}, +u(a,b,c){if(b>=this.b)throw A.d(A.NS(b,this,null,null,null)) +this.a[b]=c}, +sF(a,b){var s,r,q,p=this,o=p.b +if(bo){if(o===0)q=new Uint8Array(b) +else q=p.Bd(b) +B.L.dL(q,0,p.b,p.a) +p.a=q}}p.b=b}, +iJ(a,b){var s=this,r=s.b +if(r===s.a.length)s.a1N(r) +s.a[s.b++]=b}, +E(a,b){var s=this,r=s.b +if(r===s.a.length)s.a1N(r) +s.a[s.b++]=b}, +yi(a,b,c,d){A.en(c,"start") +if(d!=null&&c>d)throw A.d(A.du(d,c,null,"end",null)) +this.a1O(b,c,d)}, +I(a,b){return this.yi(0,b,0,null)}, +hO(a,b,c){var s,r,q,p,o,n,m=this,l=null,k=m.b +A.aHy(b,k+1,m,l,"index") +A.en(0,"start") +if(b===k){m.a1O(c,0,l) +return}s=t.j.b(c)?J.bo(c):l +if(s!=null){m.a5O(b,c,0,s) +return}r=m.b +for(k=J.az(c),q=0;k.H();){p=k.ga1(k) +o=m.a +if(r===o.length){o=m.Bd(l) +B.L.dL(o,0,r,m.a) +m.a=o}n=r+1 +o[r]=p +r=n}A.bhE(m.a,b,m.b) +A.bhE(m.a,m.b,r) +A.bhE(m.a,b,r) +m.b=r +return}, +a1O(a,b,c){var s,r,q,p=this +if(A.w(p).h("H").b(a))c=c==null?J.bo(a):c +if(c!=null){p.a5O(p.b,a,b,c) +return}for(s=J.az(a),r=0;s.H();){q=s.ga1(s) +if(r>=b)p.iJ(0,q);++r}if(ro.gF(b)||d>o.gF(b))throw A.d(A.ad("Too few elements")) +s=d-c +r=p.b+s +p.awW(r) +o=p.a +q=a+s +B.L.c3(o,q,p.b+s,o,a) +B.L.c3(p.a,a,q,b,c) +p.b=r}, +hc(a,b,c){var s,r,q=this,p=q.b +if(b>p)throw A.d(A.du(b,0,p,null,null)) +s=q.a +if(ps)throw A.d(A.du(c,0,s,null,null)) +s=this.a +if(A.w(this).h("qw").b(d))B.L.c3(s,b,c,d.a,e) +else B.L.c3(s,b,c,d,e)}, +dL(a,b,c,d){return this.c3(0,b,c,d,0)}} +A.akl.prototype={} +A.adW.prototype={} +A.ng.prototype={ +j(a){return A.J(this).j(0)+"("+this.a+", "+A.j(this.b)+")"}} +A.aI4.prototype={ +e3(a){return A.kw(B.bn.dB(B.db.vH(a)).buffer,0,null)}, +kQ(a){if(a==null)return a +return B.db.hH(0,new A.k8(!1).lh(J.xF(J.nU(a)),0,null,!0))}} +A.aI6.prototype={ +ol(a){return B.aC.e3(A.b3(["method",a.a,"args",a.b],t.N,t.z))}, +n1(a){var s,r,q,p=null,o=B.aC.kQ(a) +if(!t.f.b(o))throw A.d(A.dj("Expected method call Map, got "+A.j(o),p,p)) +s=J.al(o) +r=s.i(o,"method") +q=s.i(o,"args") +if(typeof r=="string")return new A.ng(r,q) +throw A.d(A.dj("Invalid method call: "+A.j(o),p,p))}} +A.aTU.prototype={ +e3(a){var s=A.bhd() +this.j3(0,s,!0) +return s.tB()}, +kQ(a){var s,r +if(a==null)return null +s=new A.a9J(a) +r=this.ny(0,s) +if(s.b=b.a.byteLength)throw A.d(B.ch) +return this.rz(b.oW(0),b)}, +rz(a,b){var s,r,q,p,o,n,m,l,k=this,j=null +switch(a){case 0:s=j +break +case 1:s=!0 +break +case 2:s=!1 +break +case 3:r=b.a.getInt32(b.b,B.n===$.hi()) +b.b+=4 +s=r +break +case 4:s=b.Ny(0) +break +case 5:q=k.k0(b) +s=A.et(new A.k8(!1).lh(b.rM(q),0,j,!0),j,16) +break +case 6:b.qw(8) +r=b.a.getFloat64(b.b,B.n===$.hi()) +b.b+=8 +s=r +break +case 7:q=k.k0(b) +s=new A.k8(!1).lh(b.rM(q),0,j,!0) +break +case 8:s=b.rM(k.k0(b)) +break +case 9:q=k.k0(b) +b.qw(4) +p=b.a +o=A.bod(p.buffer,p.byteOffset+b.b,q) +b.b=b.b+4*q +s=o +break +case 10:s=b.ak1(k.k0(b)) +break +case 11:q=k.k0(b) +b.qw(8) +p=b.a +o=A.boc(p.buffer,p.byteOffset+b.b,q) +b.b=b.b+8*q +s=o +break +case 12:q=k.k0(b) +s=[] +for(p=b.a,n=0;n=p.byteLength)A.X(B.ch) +b.b=m+1 +s.push(k.rz(p.getUint8(m),b))}break +case 13:q=k.k0(b) +p=t.z +s=A.D(p,p) +for(p=b.a,n=0;n=p.byteLength)A.X(B.ch) +b.b=m+1 +m=k.rz(p.getUint8(m),b) +l=b.b +if(l>=p.byteLength)A.X(B.ch) +b.b=l+1 +s.u(0,m,k.rz(p.getUint8(l),b))}break +default:throw A.d(B.ch)}return s}, +k8(a,b){var s,r,q +if(b<254)a.b.iJ(0,b) +else{s=a.b +r=a.c +q=a.d +if(b<=65535){s.iJ(0,254) +r.setUint16(0,b,B.n===$.hi()) +s.yi(0,q,0,2)}else{s.iJ(0,255) +r.setUint32(0,b,B.n===$.hi()) +s.yi(0,q,0,4)}}}, +k0(a){var s=a.oW(0) +switch(s){case 254:s=a.a.getUint16(a.b,B.n===$.hi()) +a.b+=2 +return s +case 255:s=a.a.getUint32(a.b,B.n===$.hi()) +a.b+=4 +return s +default:return s}}} +A.aTW.prototype={ +$2(a,b){var s=this.a,r=this.b +s.j3(0,r,a) +s.j3(0,r,b)}, +$S:249} +A.aTY.prototype={ +n1(a){var s,r,q +a.toString +s=new A.a9J(a) +r=B.dC.ny(0,s) +q=B.dC.ny(0,s) +if(typeof r=="string"&&s.b>=a.byteLength)return new A.ng(r,q) +else throw A.d(B.wE)}, +Dw(a){var s=A.bhd() +s.b.iJ(0,0) +B.dC.j3(0,s,a) +return s.tB()}, +vI(a,b,c){var s=A.bhd() +s.b.iJ(0,1) +B.dC.j3(0,s,a) +B.dC.j3(0,s,c) +B.dC.j3(0,s,b) +return s.tB()}} +A.aXR.prototype={ +qw(a){var s,r,q=this.b,p=B.f.bx(q.b,a) +if(p!==0)for(s=a-p,r=0;r0)b=c +else{$.nK.toString +f=$.cF().d +if(f==null){f=self.window.devicePixelRatio +if(f===0)f=1}b=1/f}f=d==null?a8:A.eX(d.gm(d)) +b0.setProperty("-webkit-text-stroke",A.j(b)+"px "+A.j(f),"")}else if(d!=null){f=A.eX(d.gm(d)) +b0.setProperty("color",f,"")}f=g.cy +a=f==null?a8:f.gA(f) +if(a!=null){f=A.eX(a.a) +b0.setProperty("background-color",f,"")}a0=g.at +if(a0!=null){f=B.c.bK(a0) +b0.setProperty("font-size",""+f+"px","")}f=g.f +if(f!=null){f=A.bip(f.a) +b0.setProperty("font-weight",f,"")}f=g.r +if(f!=null){f=f===B.jT?"normal":"italic" +b0.setProperty("font-style",f,"")}f=A.bbS(g.y) +f.toString +b0.setProperty("font-family",f,"") +f=g.ax +if(f!=null)b0.setProperty("letter-spacing",A.j(f)+"px","") +f=g.ay +if(f!=null)b0.setProperty("word-spacing",A.j(f)+"px","") +f=g.b +a1=g.dx +if(a1!=null){e=A.bQl(a1) +b0.setProperty("text-shadow",e,"")}if(f!=null){e=g.d +f=f.a +a2=(f|1)===f?""+"underline ":"" +if((f|2)===f)a2+="overline " +f=(f|4)===f?a2+"line-through ":a2 +if(e!=null)f+=A.j(A.bOP(e)) +a3=f.length===0?a8:f.charCodeAt(0)==0?f:f +if(a3!=null){f=$.eb() +if(f===B.au){f=h.style +f.setProperty("-webkit-text-decoration",a3,"")}else b0.setProperty("text-decoration",a3,"") +a4=g.c +if(a4!=null){f=A.eX(a4.gm(a4)) +b0.setProperty("text-decoration-color",f,"")}}}a5=g.Q +if(a5!=null&&a5.length!==0){f=A.bP7(a5) +b0.setProperty("font-feature-settings",f,"")}a6=g.as +if(a6!=null&&a6.length!==0){g=A.bP8(a6) +b0.setProperty("font-variation-settings",g,"")}g=j.ait() +f=g.a +e=g.b +a2=h.style +a2.setProperty("position","absolute","") +a2.setProperty("top",A.j(e)+"px","") +a2.setProperty("left",A.j(f)+"px","") +a2.setProperty("width",A.j(g.c-f)+"px","") +a2.setProperty("line-height",A.j(g.d-e)+"px","") +h.append(self.document.createTextNode(i)) +a9.append(h)}++q}return a9}, +FS(){return this.geZ().FS()}, +FT(a,b,c,d){return this.geZ().ajO(a,b,c,d)}, +Ns(a,b,c){return this.FT(a,b,c,B.cO)}, +iD(a){return this.geZ().iD(a)}, +a_8(a){return this.geZ().ajU(a)}, +Nw(a){var s,r,q,p,o,n,m,l,k,j=this.Ho(a,0,this.geZ().y.length) +if(j==null)return null +s=this.geZ().y[j] +r=s.ajR(a) +if(r==null)return null +for(q=s.x,p=q.length,o=r.a,n=r.b,m=0;m") +return A.ab(new A.W(s,new A.ayi(),r),!0,r.h("aI.E"))}, +NA(a){return 0<=a&&ab)if(a>=p.geZ().y[b].b){s=c=p.geZ().y[b].gwC()?null:b +q=B.f.cN(b+c,2) +s=p.Ho(a,q,c) +return s==null?p.Ho(a,b,q):s}, +t(){this.y=!0}} +A.ayi.prototype={ +$1(a){return a.a}, +$S:634} +A.AK.prototype={ +gU(a){return this.a}, +gi7(a){return this.c}} +A.GH.prototype={$iAK:1, +gU(a){return this.f}, +gi7(a){return this.w}} +A.HY.prototype={ +Zc(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=this,a0=a.a +if(a0==null){s=a.gPz(a) +r=a.gQ0() +q=a.gQ1() +p=a.gQ2() +o=a.gQ3() +n=a.gQB(a) +m=a.gQz(a) +l=a.gSL() +k=a.gQv(a) +j=a.gQw() +i=a.gQx() +h=a.gQA() +g=a.gQy(a) +f=a.gRn(a) +e=a.gTj(a) +d=a.gOX(a) +c=a.gRm() +b=a.gRs() +e=a.a=A.bmx(a.gPd(a),s,r,q,p,o,k,j,i,g,m,h,n,a.gHq(),d,c,f,b,a.gSt(),l,e) +return e}return a0}} +A.a0o.prototype={ +gPz(a){var s=this.c.a +if(s==null)if(this.gHq()==null){s=this.b +s=s.gPz(s)}else s=null +return s}, +gQ0(){var s=this.c.b +return s==null?this.b.gQ0():s}, +gQ1(){var s=this.c.c +return s==null?this.b.gQ1():s}, +gQ2(){var s=this.c.d +return s==null?this.b.gQ2():s}, +gQ3(){var s=this.c.e +return s==null?this.b.gQ3():s}, +gQB(a){var s=this.c.f +if(s==null){s=this.b +s=s.gQB(s)}return s}, +gQz(a){var s=this.c.r +if(s==null){s=this.b +s=s.gQz(s)}return s}, +gSL(){var s=this.c.w +return s==null?this.b.gSL():s}, +gQw(){var s=this.c.z +return s==null?this.b.gQw():s}, +gQx(){var s=this.c.Q +return s==null?this.b.gQx():s}, +gQA(){var s=this.c.as +return s==null?this.b.gQA():s}, +gQy(a){var s=this.c.at +if(s==null){s=this.b +s=s.gQy(s)}return s}, +gRn(a){var s=this.c.ax +if(s==null){s=this.b +s=s.gRn(s)}return s}, +gTj(a){var s=this.c.ay +if(s==null){s=this.b +s=s.gTj(s)}return s}, +gOX(a){var s=this.c.ch +if(s==null){s=this.b +s=s.gOX(s)}return s}, +gRm(){var s=this.c.CW +return s==null?this.b.gRm():s}, +gRs(){var s=this.c.cx +return s==null?this.b.gRs():s}, +gPd(a){var s=this.c.cy +if(s==null){s=this.b +s=s.gPd(s)}return s}, +gHq(){var s=this.c.db +return s==null?this.b.gHq():s}, +gSt(){var s=this.c.dx +return s==null?this.b.gSt():s}, +gQv(a){var s=this.c +if(s.x)s=s.y +else{s=this.b +s=s.gQv(s)}return s}} +A.aaE.prototype={ +gPz(a){return null}, +gQ0(){return null}, +gQ1(){return null}, +gQ2(){return null}, +gQ3(){return null}, +gQB(a){return this.b.c}, +gQz(a){return this.b.d}, +gSL(){return null}, +gQv(a){var s=this.b.f +return s==null?"sans-serif":s}, +gQw(){return null}, +gQx(){return null}, +gQA(){return null}, +gQy(a){var s=this.b.r +return s==null?14:s}, +gRn(a){return null}, +gTj(a){return null}, +gOX(a){return this.b.w}, +gRm(){return null}, +gRs(){return this.b.Q}, +gPd(a){return null}, +gHq(){return null}, +gSt(){return null}} +A.ayh.prototype={ +gPZ(){var s=this.d,r=s.length +return r===0?this.e:s[r-1]}, +gagT(){return this.f}, +Jc(a,b,c,d,e){var s,r=this,q=r.a,p=q.a,o=p+$.bAE() +q.a=o +s=r.gPZ().Zc() +r.a9F(s);++r.f +r.r.push(1) +q=e==null?b:e +r.c.push(new A.GH(s,p.length,o.length,a,b,c,q))}, +aaY(a,b,c){return this.Jc(a,b,c,null,null)}, +ws(a){this.d.push(new A.a0o(this.gPZ(),t.Q4.a(a)))}, +ie(){var s=this.d +if(s.length!==0)s.pop()}, +yk(a){var s,r=this,q=r.a,p=q.a,o=p+a +q.a=o +s=r.gPZ().Zc() +r.a9F(s) +r.c.push(new A.AK(s,p.length,o.length))}, +a9F(a){var s,r,q,p,o,n=this +if(!n.w)return +s=a.ax +if(s!=null&&s!==0){n.w=!1 +return}r=a.b +if(r!=null){q=r.a +q=B.k.a!==q}else q=!1 +if(q){n.w=!1 +return}p=a.Q +if(p!=null&&p.length!==0){n.w=!1 +return}o=a.as +if(o!=null&&o.length!==0){n.w=!1 +return}}, +cY(){var s,r=this,q=r.c +if(q.length===0)q.push(new A.AK(r.e.Zc(),0,0)) +s=r.a.a +return new A.a0e(q,r.b,s.charCodeAt(0)==0?s:s,r.w)}} +A.aGN.prototype={ +rm(a){return this.aUA(a)}, +aUA(a0){var s=0,r=A.r(t.S7),q,p=this,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a +var $async$rm=A.t(function(a1,a2){if(a1===1)return A.o(a2,r) +while(true)switch(s){case 0:b=A.b([],t.Rh) +for(o=a0.a,n=o.length,m=0;m")) +b.H() +e=A.bOC(e) +d=A.a5(e) +s=new J.cA(e,e.length,d.h("cA<1>")) +s.H() +e=this.b +r=A.a5(e) +q=new J.cA(e,e.length,r.h("cA<1>")) +q.H() +p=b.d +if(p==null)p=c.c.a(p) +o=s.d +if(o==null)o=d.c.a(o) +n=q.d +if(n==null)n=r.c.a(n) +for(e=c.c,d=d.c,r=r.c,m=0;!0;m=k){c=p.b +l=o.b +k=Math.min(c,Math.min(l,n.gi7(n))) +j=c-k +i=j===0?p.c:B.Q +h=k-m +f.push(A.bfz(m,k,i,o.c,o.d,n,A.xx(p.d-j,0,h),A.xx(p.e-j,0,h))) +if(c===k){g=b.H() +if(g){p=b.d +if(p==null)p=e.a(p)}}else g=!1 +if(l===k)if(s.H()){o=s.d +if(o==null)o=d.a(o) +g=!0}if(n.gi7(n)===k)if(q.H()){n=q.d +if(n==null)n=r.a(n) +g=!0}if(!g)break}return f}} +A.b_x.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.nd&&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}} +A.nd.prototype={ +gF(a){return this.b-this.a}, +gXz(){return this.b-this.a===this.w}, +grk(){return this.f instanceof A.GH}, +NG(a){return B.d.am(a.c,this.a,this.b-this.r)}, +x0(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=j.a +if(i===b)return A.b([null,j],t.tZ) +s=j.b +if(s===b)return A.b([j,null],t.tZ) +r=s-b +q=j.r +p=Math.min(q,r) +o=j.w +n=Math.min(o,r) +m=j.d +l=j.e +k=j.f +return A.b([A.bfz(i,b,B.Q,m,l,k,q-p,o-n),A.bfz(b,s,j.c,m,l,k,p,n)],t.cN)}, +j(a){var s=this +return B.agK.j(0)+"("+s.a+", "+s.b+", "+s.c.j(0)+", "+A.j(s.d)+")"}} +A.b24.prototype={ +Gk(a,b,c,d,e){var s=this +s.pC$=a +s.om$=b +s.pD$=c +s.tH$=d +s.fR$=e}} +A.b25.prototype={ +gae(a){var s,r,q=this,p=q.fG$ +p===$&&A.c() +s=q.on$ +if(p.y===B.r){s===$&&A.c() +p=s}else{s===$&&A.c() +r=q.fR$ +r===$&&A.c() +r=p.a.f-(s+(r+q.fS$)) +p=r}return p}, +gaH(a){var s,r=this,q=r.fG$ +q===$&&A.c() +s=r.on$ +if(q.y===B.r){s===$&&A.c() +q=r.fR$ +q===$&&A.c() +q=s+(q+r.fS$)}else{s===$&&A.c() +q=q.a.f-s}return q}, +aUj(a){var s,r,q=this,p=q.fG$ +p===$&&A.c() +s=p.f +if(q.b>p.c-s)return +r=q.w +if(r===0)return +q.fS$=(a-p.a.f)/(p.r-s)*r}} +A.b23.prototype={ +ga9_(){var s,r,q,p,o,n,m,l,k=this,j=k.tI$ +if(j===$){s=k.fG$ +s===$&&A.c() +r=k.gae(0) +q=k.fG$.a +p=k.om$ +p===$&&A.c() +o=k.gaH(0) +n=k.fG$ +m=k.pD$ +m===$&&A.c() +l=k.d +l.toString +k.tI$!==$&&A.N() +j=k.tI$=new A.hW(s.a.r+r,q.w-p,q.r+o,n.a.w+m,l)}return j}, +ait(){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.fG$ +h===$&&A.c() +if(i.b>h.c-h.f){s=i.d +s.toString +h=h.a.r +if(s===B.r){s=i.gae(0) +r=i.fG$.a +q=i.om$ +q===$&&A.c() +p=i.gaH(0) +o=i.fR$ +o===$&&A.c() +n=i.fS$ +m=i.tH$ +m===$&&A.c() +l=i.fG$ +k=i.pD$ +k===$&&A.c() +j=i.d +j.toString +j=new A.hW(h+s,r.w-q,r.r+p-(o+n-m),l.a.w+k,j) +h=j}else{s=i.gae(0) +r=i.fR$ +r===$&&A.c() +q=i.fS$ +p=i.tH$ +p===$&&A.c() +o=i.fG$.a +n=i.om$ +n===$&&A.c() +m=i.gaH(0) +l=i.fG$ +k=i.pD$ +k===$&&A.c() +j=i.d +j.toString +j=new A.hW(h+s+(r+q-p),o.w-n,o.r+m,l.a.w+k,j) +h=j}return h}return i.ga9_()}, +FD(a,b){var s,r,q,p,o,n,m,l,k,j=this +if(b==null)b=j.a +if(a==null)a=j.b +s=j.a +r=b<=s +if(r&&a>=j.b-j.r)return j.ga9_() +if(r)q=0 +else{r=j.pC$ +r===$&&A.c() +r.svv(j.f) +r=j.pC$ +p=$.Dm() +o=r.c +q=A.xz(p,r.a.c,s,b,o.gU(o).ax)}s=j.b-j.r +if(a>=s)n=0 +else{r=j.pC$ +r===$&&A.c() +r.svv(j.f) +r=j.pC$ +p=$.Dm() +o=r.c +n=A.xz(p,r.a.c,a,s,o.gU(o).ax)}s=j.d +s.toString +if(s===B.r){m=j.gae(0)+q +l=j.gaH(0)-n}else{m=j.gae(0)+n +l=j.gaH(0)-q}s=j.fG$ +s===$&&A.c() +s=s.a +r=s.r +s=s.w +p=j.om$ +p===$&&A.c() +o=j.pD$ +o===$&&A.c() +k=j.d +k.toString +return new A.hW(r+m,s-p,r+l,s+o,k)}, +aZv(){return this.FD(null,null)}, +akb(a){var s,r,q,p,o,n,m,l,k,j=this +a=j.aCR(a) +s=j.a +r=j.b-j.r +q=r-s +if(q===0)return new A.c0(s,B.v) +if(q===1){p=j.fR$ +p===$&&A.c() +return am){n=q+1 +n=p===n?null:new A.bI(n,p)}else n=new A.bI(q,p) +return n}, +QG(a8,a9,b0){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=this,a6=null,a7=a5.fG$ +a7===$&&A.c() +s=a7.gnQ() +a7=s[a9] +r=s[b0] +q=a5.FD(r,a7) +p=a9+1 +if(p===b0)return new A.pn(new A.A(q.a,q.b,q.c,q.d),new A.cZ(a7,r),q.e) +o=q.a +n=q.c +m=n +l=o +if(lMath.abs(a8-B.c.bX(a8,h,p.c))?j:i}g=q.e +f=a8<=l +$label0$0:{e=B.r===g +d=e +if(d){a7=f +c=a7 +b=c}else{c=a6 +b=c +a7=!1}a=!a7 +if(a){a0=B.ad===g +a1=a0 +if(a1){if(d){a7=c +a2=d}else{a7=f +c=a7 +a2=!0}a3=!1===a7 +a7=a3}else{a3=a6 +a2=d +a7=!1}}else{a3=a6 +a0=a3 +a2=d +a1=!1 +a7=!0}if(a7){a7=new A.cZ(s[a9],s[p]) +break $label0$0}if(e)if(a1)a7=a3 +else{if(a2)a7=c +else{a7=f +c=a7 +a2=!0}a3=!1===a7 +a7=a3}else a7=!1 +if(!a7){if(a)a7=a0 +else{a0=B.ad===g +a7=a0}if(a7)if(d)a7=b +else{b=!0===(a2?c:f) +a7=b}else a7=!1}else a7=!0 +if(a7){a7=new A.cZ(s[b0-1],s[b0]) +break $label0$0}a7=a6}r=a7.a +a4=a5.FD(a7.b,r) +return new A.pn(new A.A(a4.a,a4.b,a4.c,a4.d),a7,a4.e)}, +a_6(a){var s=null,r=this.gNM(),q=r.a,p=r.b,o=p,n=q +return this.QG(a,n,o)}} +A.MH.prototype={ +gXz(){return!1}, +grk(){return!1}, +NG(a){var s=a.b.z +s.toString +return s}, +x0(a,b){throw A.d(A.c1("Cannot split an EllipsisFragment"))}} +A.Ie.prototype={ +ga0o(){var s=this.Q +if(s===$){s!==$&&A.N() +s=this.Q=new A.ac1(this.a)}return s}, +Mm(a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this,a1=a2.a +a0.b=a1 +a0.c=0 +a0.d=null +a0.f=a0.e=0 +a0.x=!1 +s=a0.y +B.b.af(s) +r=a0.a +q=A.bnI(r,a0.ga0o(),0,A.b([],t.cN),0,a1) +p=a0.as +if(p===$){p!==$&&A.N() +p=a0.as=new A.aJ5(r.a,r.c)}o=p.KZ() +B.b.al(o,a0.ga0o().gaV4()) +$label0$0:for(n=0;nq.c;){if(q.gaNe()){q.aTI() +s.push(q.cY()) +a0.x=!0 +break $label0$0}if(q.gaU2())q.aZ3() +else q.aRP() +n+=q.aMs(o,n+1) +s.push(q.cY()) +q=q.ag3()}a1=q.a +if(a1.length!==0){a1=B.b.ga_(a1).c +a1=a1===B.dN||a1===B.dO}else a1=!1 +if(a1){s.push(q.cY()) +q=q.ag3()}}a1=r.b +l=a1.e +if(l!=null&&s.length>l){a0.x=!0 +B.b.hX(s,l,s.length)}for(r=s.length,k=1/0,j=-1/0,i=0;ij)j=c}a0.z=new A.A(k,0,j,a0.c) +if(r!==0)if(isFinite(a0.b)&&a1.a===B.e4)for(n=0;n=d;--s){q=o[s] +q.on$=e+r +if(q.d==null)q.d=a +p=q.fR$ +p===$&&A.c() +r+=p+q.fS$}return r}, +FS(){var s,r,q,p,o,n,m,l=A.b([],t.Lx) +for(s=this.y,r=s.length,q=0;q=b||a<0||b<0)return A.b([],t.Lx) +s=this.a.c.length +if(a>s||b>s)return A.b([],t.Lx) +r=A.b([],t.Lx) +for(q=this.y,p=q.length,o=0;o=r+j.w)return new A.c0(j.c-j.e,B.aL) +q=s-r +for(s=j.x,r=s.length,p=0;p=r+(q.gae(0)+q.gaH(0))/2 +break +case 0:r=s<=r+(q.gae(0)+q.gaH(0))/2 +break +default:r=i}else r=!0 +m=r}else m=!0}else m=!0 +l=q.a_6(s) +if(m)return l +switch(q.d.a){case 1:r=!0 +break +case 0:r=!1 +break +default:r=i}p=q.fG$ +p===$&&A.c() +r=p.aNM(q,r) +k=r==null?i:r.a_6(s) +if(k==null)return l +r=l.a +j=Math.min(Math.abs(r.a-s),Math.abs(r.c-s)) +r=k.a +return Math.min(Math.abs(r.a-s),Math.abs(r.c-s))>j?l:k}, +a47(a){var s,r,q,p=this.y,o=p.length +if(o===0)return null +for(s=0;s1 +return this.as>0}, +gaMg(){var s=this.c-this.w,r=this.d.b,q=r.a +switch((q==null?B.aA:q).a){case 2:return s/2 +case 1:return s +case 4:r=r.b +return(r==null?B.r:r)===B.ad?s:0 +case 5:r=r.b +return(r==null?B.r:r)===B.ad?0:s +default:return 0}}, +gaNe(){var s,r=this.d.b +if(r.z==null)return!1 +s=r.e +return s==null||s===this.f+1}, +gaup(){var s=this.a +if(s.length!==0){s=B.b.ga_(s).c +s=s===B.dN||s===B.dO}else s=!1 +if(s)return!1 +s=this.b +s=s==null?null:s.length!==0 +if(s===!0)return!1 +return!0}, +aaS(a){var s=this +s.IR(a) +if(a.c!==B.Q)s.Q=s.a.length +B.b.E(s.a,a)}, +IR(a){var s,r=this,q=a.w +r.at=r.at+q +if(a.gXz())r.ax+=q +else{r.ax=q +q=r.x +s=a.tH$ +s===$&&A.c() +r.w=q+s}q=r.x +s=a.fR$ +s===$&&A.c() +r.x=q+(s+a.fS$) +if(a.grk())r.atB(a) +if(a.c!==B.Q)++r.as +q=r.y +s=a.om$ +s===$&&A.c() +r.y=Math.max(q,s) +s=r.z +q=a.pD$ +q===$&&A.c() +r.z=Math.max(s,q)}, +atB(a){var s,r,q,p,o,n=this,m=t.mX.a(a.f) +switch(m.c.a){case 3:s=n.y +r=m.b-s +break +case 4:r=n.z +s=m.b-r +break +case 5:q=n.y +p=n.z +o=m.b/2-(q+p)/2 +s=q+o +r=p+o +break +case 1:s=m.b +r=0 +break +case 2:r=m.b +s=0 +break +case 0:s=m.d +r=m.b-s +break +default:s=null +r=null}q=a.tH$ +q===$&&A.c() +p=a.fR$ +p===$&&A.c() +a.Gk(n.e,s,r,q,p+a.fS$)}, +BS(){var s,r=this,q=r.as=r.ax=r.at=r.z=r.y=r.x=r.w=0 +r.Q=-1 +for(s=r.a;q1||a +q=B.b.ga_(s) +if(q.grk()){if(r){p=g.b +p.toString +B.b.hc(p,0,B.b.eQ(s)) +g.BS()}return}p=g.e +p.svv(q.f) +o=g.x +n=q.fR$ +n===$&&A.c() +m=q.fS$ +l=q.b-q.r +k=p.aef(q.a,l,r,b-(o-(n+m))) +if(k===l)return +B.b.eQ(s) +g.BS() +j=q.x0(0,k) +i=B.b.ga9(j) +if(i!=null){p.XW(i) +g.aaS(i)}h=B.b.ga_(j) +if(h!=null){p.XW(h) +s=g.b +s.toString +B.b.hc(s,0,h)}}, +aRP(){return this.aeg(!1,null)}, +aTI(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.d.b.z +f.toString +g.b=A.b([],t.cN) +s=g.e +r=g.a +s.svv(B.b.ga_(r).f) +q=$.Dm() +p=f.length +o=A.xz(q,f,0,p,null) +n=g.c +m=Math.max(0,n-o) +while(!0){if(r.length>1){l=g.x +k=B.b.ga_(r) +j=k.fR$ +j===$&&A.c() +k=l-(j+k.fS$) +l=k}else l=0 +if(!(l>m))break +l=g.b +l.toString +B.b.hc(l,0,B.b.eQ(r)) +g.BS() +s.svv(B.b.ga_(r).f) +o=A.xz(q,f,0,p,null) +m=n-o}i=B.b.ga_(r) +g.aeg(!0,m) +f=g.gadH() +h=new A.MH($,$,$,$,$,$,$,$,$,0,B.dO,null,B.nR,i.f,0,0,f,f) +f=i.om$ +f===$&&A.c() +r=i.pD$ +r===$&&A.c() +h.Gk(s,f,r,o,o) +g.aaS(h)}, +aZ3(){var s,r=this.a,q=r.length,p=q-2 +for(;r[p].c===B.Q;)--p +s=p+1 +A.dl(s,q,q,null,null) +this.b=A.fj(r,s,q,A.a5(r).c).eT(0) +B.b.hX(r,s,r.length) +this.BS()}, +aMs(a,b){var s,r=this,q=r.a,p=b +while(!0){if(r.gaup())if(p1;){p=B.f.cN(q+r,2) +o=$.Dm() +n=this.c +m=A.xz(o,s,a,p,n.gU(n).ax) +if(md?q:p +r=p}}return q===a&&!c?q+1:q}} +A.aTi.prototype={ +$2(a,b){b.ga5z().remove()}, +$S:697} +A.vA.prototype={ +W(){return"LineBreakType."+this.b}} +A.aDV.prototype={ +KZ(){return A.bOF(this.a)}} +A.aX9.prototype={ +KZ(){var s=this.a +return A.btj(s,s,this.b)}} +A.vz.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.vz&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d&&b.e===s.e}, +j(a){return"LineBreakFragment("+this.a+", "+this.b+", "+this.c.j(0)+")"}} +A.b8P.prototype={ +$2(a,b){var s=this,r=a===B.dO?s.b.length:s.a.f,q=s.a,p=q.a +if(p===B.fn)++q.d +else if(p===B.hH||p===B.k9||p===B.kd){++q.e;++q.d}if(a===B.Q)return +p=q.c +s.c.push(new A.vz(a,q.e,q.d,p,r)) +q.c=q.f +q.d=q.e=0 +q.a=q.b=null}, +$S:757} +A.aaR.prototype={ +t(){this.a.remove()}} +A.aVO.prototype={ +aO(a,b){var s,r,q,p,o,n,m,l=this.a.geZ().y +for(s=l.length,r=0;r=1){p=B.b.cI(s,0,r-1) +q=p +if(t.EO.b(q)){q=s[r-1] instanceof A.MH +o=p}else{o=m +q=!1}}else{o=m +q=!1}if(!q){q=t.EO.b(s) +if(q)o=s}else q=!0 +if(q){q=(o&&B.b).ga_(o).b +break $label0$0}q=m}n.d!==$&&A.N() +l=n.d=q}return l}, +axe(a){var s,r,q,p,o,n=A.b([],t.t) +for(s=a.length,r=this.b,q=!1,p=0;p0){s=q +continue}if(p<0){r=q +continue}return q}return r}, +ajR(a){var s,r=this +if(a>=r.gwC()||r.gnQ().length===0)return null +s=r.NL(a,0,r.gnQ().length) +return new A.cZ(r.gnQ()[s],r.gnQ()[s+1])}, +aNM(a,b){var s,r,q,p,o,n,m,l,k,j +for(s=this.x,r=s.length,q=null,p=0;p=this.gwC())break +if(o.gNM()==null)continue +if(b){n=a.fG$ +n===$&&A.c() +m=a.on$ +if(n.y===B.r){m===$&&A.c() +n=m}else{m===$&&A.c() +l=a.fR$ +l===$&&A.c() +l=n.a.f-(m+(l+a.fS$)) +n=l}m=o.fG$ +m===$&&A.c() +l=o.on$ +if(m.y===B.r){l===$&&A.c() +m=o.fR$ +m===$&&A.c() +m=l+(m+o.fS$)}else{l===$&&A.c() +m=m.a.f-l}k=n-m}else{n=o.fG$ +n===$&&A.c() +m=o.on$ +if(n.y===B.r){m===$&&A.c() +n=m}else{m===$&&A.c() +l=o.fR$ +l===$&&A.c() +l=n.a.f-(m+(l+o.fS$)) +n=l}m=a.fG$ +m===$&&A.c() +l=a.on$ +if(m.y===B.r){l===$&&A.c() +m=a.fR$ +m===$&&A.c() +m=l+(m+a.fS$)}else{l===$&&A.c() +m=m.a.f-l}k=n-m}j=q==null?null:q.a +$label0$1:{if(k>0)n=j==null||j>k +else n=!1 +if(n){q=new A.Wq(k,o) +break $label0$1}if(k===0)return o +continue}}return q==null?null:q.b}, +aNL(a){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=null +if(g.gnQ().length===0)return f +for(s=g.x,r=s.length,q=f,p=0,o=0;o=g.gwC())break +l=n.b +if(l-m===0)continue +for(;m>g.gnQ()[p];)++p +if(g.gnQ()[p]>=l)continue +m=n.fG$ +m===$&&A.c() +l=m.y===B.r +k=n.on$ +if(l){k===$&&A.c() +j=k}else{k===$&&A.c() +j=n.fR$ +j===$&&A.c() +j=m.a.f-(k+(j+n.fS$))}if(aj){if(l){k===$&&A.c() +m=n.fR$ +m===$&&A.c() +m=k+(m+n.fS$)}else{k===$&&A.c() +m=m.a.f-k}i=a-m}else return n}h=q==null?f:q.a +if(h==null||h>i)q=new A.Wq(i,n)}return q==null?f:q.b}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.e,s.f,s.r,s.w,s.x,s.y,null,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.pQ)if(b.a.k(0,r.a))if(b.b===r.b)if(b.c===r.c)if(b.e===r.e)if(b.f===r.f)if(b.r===r.r)if(b.w===r.w)if(b.x===r.x)s=b.y===r.y +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +j(a){return B.agR.j(0)+"("+this.b+", "+this.c+", "+this.a.j(0)+")"}} +A.MP.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.MP&&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&&J.f(b.x,s.x)&&J.f(b.y,s.y)&&b.z==s.z&&J.f(b.Q,s.Q)}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return this.du(0)}, +gkV(a){return this.c}, +gov(a){return this.d}} +A.MR.prototype={ +gady(){var s=this.y +return s.length===0?"sans-serif":s}, +gacM(){var s,r,q,p,o,n,m=this,l="normal",k=m.dy +if(k==null){k=m.r +s=m.f +r=m.at +q=m.gady() +if(k==null)p=null +else{k=k===B.jT?l:"italic" +p=k}if(p==null)p=l +o=s==null?null:A.bip(s.a) +if(o==null)o=l +n=B.c.bK(r==null?14:r) +k=A.bbS(q) +k.toString +k=m.dy=p+" "+o+" "+n+"px "+k}return k}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return b instanceof A.MR&&J.f(b.a,s.a)&&J.f(b.b,s.b)&&J.f(b.c,s.c)&&b.d==s.d&&b.f==s.f&&b.r==s.r&&b.w==s.w&&b.CW==s.CW&&b.y===s.y&&b.at==s.at&&b.ax==s.ax&&b.ay==s.ay&&b.ch==s.ch&&b.e==s.e&&J.f(b.cx,s.cx)&&b.cy==s.cy&&b.db==s.db&&A.lO(b.dx,s.dx)&&A.lO(b.z,s.z)&&A.lO(b.Q,s.Q)&&A.lO(b.as,s.as)}, +gL(a){var s=this,r=null,q=s.dx,p=s.Q,o=s.as,n=s.z,m=n==null?r:A.bM(n),l=q==null?r:A.bM(q),k=p==null?r:A.bM(p) +return A.a6(s.a,s.b,s.c,s.d,s.f,s.r,s.w,s.CW,s.y,m,s.at,s.ax,s.ay,s.ch,s.cx,s.cy,s.db,l,s.e,A.a6(k,o==null?r:A.bM(o),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a))}, +j(a){return this.du(0)}, +gkV(a){return this.f}, +gov(a){return this.r}} +A.MQ.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.MQ&&b.a==s.a&&b.c==s.c&&b.d==s.d&&b.x==s.x&&b.f==s.f&&b.r==s.r&&b.w==s.w&&A.lO(b.b,s.b)}, +gL(a){var s=this,r=s.b,q=r!=null?A.bM(r):null +return A.a6(s.a,q,s.c,s.d,s.e,s.x,s.f,s.r,s.w,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aME.prototype={} +A.C7.prototype={ +k(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.C7&&b.gL(0)===this.gL(0)}, +gL(a){var s,r=this,q=r.f +if(q===$){s=A.a6(r.a,r.b,r.c,null,null,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a) +r.f!==$&&A.N() +r.f=s +q=s}return q}} +A.aV9.prototype={} +A.Id.prototype={ +ga5z(){var s,r,q,p,o,n,m,l,k,j=this,i=j.d +if(i===$){s=A.c8(self.document,"div") +r=s.style +A.M(r,"visibility","hidden") +A.M(r,"position","absolute") +A.M(r,"top","0") +A.M(r,"left","0") +A.M(r,"display","flex") +A.M(r,"flex-direction","row") +A.M(r,"align-items","baseline") +A.M(r,"margin","0") +A.M(r,"border","0") +A.M(r,"padding","0") +r=j.e +q=j.a +p=q.a +o=r.a +n=o.style +A.M(n,"font-size",""+B.c.bK(q.b)+"px") +m=A.bbS(p) +m.toString +A.M(n,"font-family",m) +l=q.c +if(l==null)k=p==="FlutterTest"?1:null +else k=l +if(k!=null)A.M(n,"line-height",B.c.j(k)) +r.b=null +A.M(o.style,"white-space","pre") +r.b=null +A.bm4(o," ") +s.append(o) +r.b=null +j.b.a.append(s) +j.d!==$&&A.N() +j.d=s +i=s}return i}, +gyo(a){var s,r=this,q=r.f +if(q===$){q=r.c +if(q===$){s=A.c8(self.document,"div") +r.ga5z().append(s) +r.c!==$&&A.N() +r.c=s +q=s}q=q.getBoundingClientRect().bottom +r.f!==$&&A.N() +r.f=q}return q}} +A.F2.prototype={ +W(){return"FragmentFlow."+this.b}} +A.y1.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.y1&&b.a===s.a&&b.b===s.b&&b.c==s.c&&b.d===s.d}, +j(a){return"BidiFragment("+this.a+", "+this.b+", "+A.j(this.c)+")"}} +A.Ui.prototype={ +W(){return"_ComparisonResult."+this.b}} +A.eV.prototype={ +U9(a){if(athis.b)return B.ait +return B.ais}} +A.tK.prototype={ +KW(a,b,c){var s=A.Zd(b,c) +return s==null?this.b:this.zi(s)}, +zi(a){var s,r,q,p,o=this +if(a==null)return o.b +s=o.c +r=s.i(0,a) +if(r!=null)return r +q=o.atS(a) +p=q===-1?o.b:o.a[q].c +s.u(0,a,p) +return p}, +atS(a){var s,r,q=this.a,p=q.length +for(s=0;s")).al(0,new A.aDh(this,r)) +return r}} +A.aDh.prototype={ +$1(a){var s=this.a,r=s.b.i(0,a) +r.toString +this.b.push(A.f_(r,"input",new A.aDi(s,a,r)))}, +$S:26} +A.aDi.prototype={ +$1(a){var s,r=this.a.c,q=this.b +if(r.i(0,q)==null)throw A.d(A.ad("AutofillInfo must have a valid uniqueIdentifier.")) +else{r=r.i(0,q) +r.toString +s=A.bmr(this.c) +$.bF().ng("flutter/textinput",B.bM.ol(new A.ng(u.l,[0,A.b3([r.b,s.aiq()],t.ob,t.z)])),A.auP())}}, +$S:2} +A.a_k.prototype={ +abd(a,b){var s,r,q="password",p=this.d,o=this.e,n=globalThis.HTMLInputElement +if(n!=null&&a instanceof n){if(o!=null)a.placeholder=o +s=p==null +if(!s){a.name=p +a.id=p +if(B.d.G(p,q))A.aBK(a,q) +else A.aBK(a,"text")}s=s?"on":p +a.autocomplete=s}else{n=globalThis.HTMLTextAreaElement +if(n!=null&&a instanceof n){if(o!=null)a.placeholder=o +s=p==null +if(!s){a.name=p +a.id=p}r=A.bf(s?"on":p) +A.a3(a,"setAttribute",["autocomplete",r==null?t.K.a(r):r])}}}, +jP(a){return this.abd(a,!1)}} +A.Ib.prototype={} +A.EG.prototype={ +gLL(){return Math.min(this.b,this.c)}, +gLI(){return Math.max(this.b,this.c)}, +aiq(){var s=this +return A.b3(["text",s.a,"selectionBase",s.b,"selectionExtent",s.c,"composingBase",s.d,"composingExtent",s.e],t.N,t.z)}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(A.J(s)!==J.ai(b))return!1 +return b instanceof A.EG&&b.a==s.a&&b.gLL()===s.gLL()&&b.gLI()===s.gLI()&&b.d===s.d&&b.e===s.e}, +j(a){return this.du(0)}, +jP(a){var s,r,q=this,p=globalThis.HTMLInputElement +if(p!=null&&a instanceof p){a.toString +A.blX(a,q.a) +s=q.gLL() +r=q.gLI() +a.setSelectionRange(s,r)}else{p=globalThis.HTMLTextAreaElement +if(p!=null&&a instanceof p){a.toString +A.bm0(a,q.a) +s=q.gLL() +r=q.gLI() +a.setSelectionRange(s,r)}else{s=a==null?null:A.bE8(a) +throw A.d(A.af("Unsupported DOM element type: <"+A.j(s)+"> ("+J.ai(a).j(0)+")"))}}}} +A.aHO.prototype={} +A.a4q.prototype={ +oL(){var s,r=this,q=r.w +if(q!=null){s=r.c +s.toString +q.jP(s)}q=r.d +q===$&&A.c() +if(q.w!=null){r.F0() +q=r.e +if(q!=null)q.jP(r.c) +r.gaec().focus() +r.c.focus()}}} +A.Rc.prototype={ +oL(){var s,r=this,q=r.w +if(q!=null){s=r.c +s.toString +q.jP(s)}q=r.d +q===$&&A.c() +if(q.w!=null)A.dn(B.G,new A.aQU(r))}, +Ef(){if(this.w!=null)this.oL() +this.c.focus()}} +A.aQU.prototype={ +$0(){var s,r=this.a +r.F0() +r.gaec().focus() +r.c.focus() +s=r.e +if(s!=null){r=r.c +r.toString +s.jP(r)}}, +$S:0} +A.M9.prototype={ +goj(){var s=null,r=this.f +if(r==null){r=this.e.a +r.toString +r=this.f=new A.Ib(r,"",-1,-1,s,s,s,s)}return r}, +gaec(){var s=this.d +s===$&&A.c() +s=s.w +return s==null?null:s.a}, +zq(a,b,c){var s,r,q,p=this,o="none",n="transparent" +p.c=a.a.JZ() +p.TE(a) +s=p.c +s.classList.add("flt-text-editing") +r=s.style +A.M(r,"forced-color-adjust",o) +A.M(r,"white-space","pre-wrap") +A.M(r,"align-content","center") +A.M(r,"position","absolute") +A.M(r,"top","0") +A.M(r,"left","0") +A.M(r,"padding","0") +A.M(r,"opacity","1") +A.M(r,"color",n) +A.M(r,"background-color",n) +A.M(r,"background",n) +A.M(r,"caret-color",n) +A.M(r,"outline",o) +A.M(r,"border",o) +A.M(r,"resize",o) +A.M(r,"text-shadow",o) +A.M(r,"overflow","hidden") +A.M(r,"transform-origin","0 0 0") +q=$.eb() +if(q!==B.ec)q=q===B.au +else q=!0 +if(q)s.classList.add("transparentTextEditing") +s=p.r +if(s!=null){q=p.c +q.toString +s.jP(q)}s=p.d +s===$&&A.c() +if(s.w==null){s=t.e8.a($.bF().geV().b.i(0,0)).ghv() +q=p.c +q.toString +s.e.append(q) +p.Q=!1}p.Ef() +p.b=!0 +p.x=c +p.y=b}, +TE(a){var s,r,q,p,o,n=this,m="setAttribute" +n.d=a +s=n.c +if(a.c){s.toString +r=A.bf("readonly") +A.a3(s,m,["readonly",r==null?t.K.a(r):r])}else s.removeAttribute("readonly") +if(a.d){s=n.c +s.toString +r=A.bf("password") +A.a3(s,m,["type",r==null?t.K.a(r):r])}if(a.a.gnf()==="none"){s=n.c +s.toString +r=A.bf("none") +A.a3(s,m,["inputmode",r==null?t.K.a(r):r])}q=A.bEI(a.b) +s=n.c +s.toString +q.aOb(s) +p=a.r +s=n.c +if(p!=null){s.toString +p.abd(s,!0)}else{s.toString +r=A.bf("off") +A.a3(s,m,["autocomplete",r==null?t.K.a(r):r])}o=a.e?"on":"off" +s=n.c +s.toString +r=A.bf(o) +A.a3(s,m,["autocorrect",r==null?t.K.a(r):r])}, +Ef(){this.oL()}, +Cm(){var s,r,q=this,p=q.d +p===$&&A.c() +p=p.w +if(p!=null)B.b.I(q.z,p.Co()) +p=q.z +s=q.c +s.toString +r=q.gDX() +p.push(A.f_(s,"input",r)) +s=q.c +s.toString +p.push(A.f_(s,"keydown",q.gEC())) +p.push(A.f_(self.document,"selectionchange",r)) +r=q.c +r.toString +A.dc(r,"beforeinput",t.L.a(A.cd(q.gL_())),null) +r=q.c +r.toString +q.J6(r) +r=q.c +r.toString +p.push(A.f_(r,"blur",new A.aAM(q))) +q.Mw()}, +ZI(a){var s,r=this +r.w=a +if(r.b)if(r.d$!=null){s=r.c +s.toString +a.jP(s)}else r.oL()}, +ZJ(a){var s +this.r=a +if(this.b){s=this.c +s.toString +a.jP(s)}}, +mf(a){var s,r,q,p=this,o=null +p.b=!1 +p.w=p.r=p.f=p.e=null +for(s=p.z,r=0;r=0&&a.c>=0) +else s=!0 +if(s)return +a.jP(this.c)}, +oL(){this.c.focus()}, +F0(){var s,r,q=this.d +q===$&&A.c() +q=q.w +q.toString +s=this.c +s.toString +if($.Zw().glQ() instanceof A.Rc)A.M(s.style,"pointer-events","all") +r=q.a +r.insertBefore(s,q.d) +t.e8.a($.bF().geV().b.i(0,0)).ghv().e.append(r) +this.Q=!0}, +aeo(a){var s,r,q=this,p=q.c +p.toString +s=q.aPR(A.bmr(p)) +p=q.d +p===$&&A.c() +if(p.f){q.goj().r=s.d +q.goj().w=s.e +r=A.bL1(s,q.e,q.goj())}else r=null +if(!s.k(0,q.e)){q.e=s +q.f=r +q.x.$2(s,r)}q.f=null}, +aRX(a){var s,r,q,p=this,o=A.eE(a.data),n=A.eE(a.inputType) +if(n!=null){s=p.e +r=s.b +q=s.c +r=r>q?r:q +if(B.d.G(n,"delete")){p.goj().b="" +p.goj().d=r}else if(n==="insertLineBreak"){p.goj().b="\n" +p.goj().c=r +p.goj().d=r}else if(o!=null){p.goj().b=o +p.goj().c=r +p.goj().d=r}}}, +aV3(a){var s,r,q=globalThis.KeyboardEvent +if(q!=null&&a instanceof q)if(a.keyCode===13){s=this.y +s.toString +r=this.d +r===$&&A.c() +s.$1(r.b) +if(!(this.d.a instanceof A.P7))a.preventDefault()}}, +Vn(a,b,c,d){var s,r=this +r.zq(b,c,d) +r.Cm() +s=r.e +if(s!=null)r.a01(s) +r.c.focus()}, +Mw(){var s=this,r=s.z,q=s.c +q.toString +r.push(A.f_(q,"mousedown",new A.aAN())) +q=s.c +q.toString +r.push(A.f_(q,"mouseup",new A.aAO())) +q=s.c +q.toString +r.push(A.f_(q,"mousemove",new A.aAP()))}} +A.aAM.prototype={ +$1(a){this.a.c.focus()}, +$S:2} +A.aAN.prototype={ +$1(a){a.preventDefault()}, +$S:2} +A.aAO.prototype={ +$1(a){a.preventDefault()}, +$S:2} +A.aAP.prototype={ +$1(a){a.preventDefault()}, +$S:2} +A.aH_.prototype={ +zq(a,b,c){var s,r=this +r.Or(a,b,c) +s=r.c +s.toString +a.a.aca(s) +s=r.d +s===$&&A.c() +if(s.w!=null)r.F0() +s=r.c +s.toString +a.x.a_X(s)}, +Ef(){A.M(this.c.style,"transform","translate(-9999px, -9999px)") +this.p1=!1}, +Cm(){var s,r,q,p=this,o=p.d +o===$&&A.c() +o=o.w +if(o!=null)B.b.I(p.z,o.Co()) +o=p.z +s=p.c +s.toString +r=p.gDX() +o.push(A.f_(s,"input",r)) +s=p.c +s.toString +o.push(A.f_(s,"keydown",p.gEC())) +o.push(A.f_(self.document,"selectionchange",r)) +r=p.c +r.toString +A.dc(r,"beforeinput",t.L.a(A.cd(p.gL_())),null) +r=p.c +r.toString +p.J6(r) +r=p.c +r.toString +o.push(A.f_(r,"focus",new A.aH2(p))) +p.atx() +q=new A.ce() +$.fJ() +q.bR(0) +r=p.c +r.toString +o.push(A.f_(r,"blur",new A.aH3(p,q)))}, +ZI(a){var s=this +s.w=a +if(s.b&&s.p1)s.oL()}, +mf(a){var s +this.an6(0) +s=this.ok +if(s!=null)s.bq(0) +this.ok=null}, +atx(){var s=this.c +s.toString +this.z.push(A.f_(s,"click",new A.aH0(this)))}, +a7U(){var s=this.ok +if(s!=null)s.bq(0) +this.ok=A.dn(B.b2,new A.aH1(this))}, +oL(){var s,r +this.c.focus() +s=this.w +if(s!=null){r=this.c +r.toString +s.jP(r)}}} +A.aH2.prototype={ +$1(a){this.a.a7U()}, +$S:2} +A.aH3.prototype={ +$1(a){var s=A.dE(this.b.gadz(),0).a<2e5,r=self.document.hasFocus()&&s,q=this.a +if(r)q.c.focus() +else q.a.NX()}, +$S:2} +A.aH0.prototype={ +$1(a){var s=this.a +if(s.p1){s.Ef() +s.a7U()}}, +$S:2} +A.aH1.prototype={ +$0(){var s=this.a +s.p1=!0 +s.oL()}, +$S:0} +A.aw7.prototype={ +zq(a,b,c){var s,r,q=this +q.Or(a,b,c) +s=q.c +s.toString +a.a.aca(s) +s=q.d +s===$&&A.c() +if(s.w!=null)q.F0() +else{s=t.e8.a($.bF().geV().b.i(0,0)).ghv() +r=q.c +r.toString +s.e.append(r)}s=q.c +s.toString +a.x.a_X(s)}, +Cm(){var s,r,q=this,p=q.d +p===$&&A.c() +p=p.w +if(p!=null)B.b.I(q.z,p.Co()) +p=q.z +s=q.c +s.toString +r=q.gDX() +p.push(A.f_(s,"input",r)) +s=q.c +s.toString +p.push(A.f_(s,"keydown",q.gEC())) +p.push(A.f_(self.document,"selectionchange",r)) +r=q.c +r.toString +A.dc(r,"beforeinput",t.L.a(A.cd(q.gL_())),null) +r=q.c +r.toString +q.J6(r) +r=q.c +r.toString +p.push(A.f_(r,"blur",new A.aw8(q))) +q.Mw()}, +oL(){var s,r +this.c.focus() +s=this.w +if(s!=null){r=this.c +r.toString +s.jP(r)}}} +A.aw8.prototype={ +$1(a){var s=this.a +if(self.document.hasFocus())s.c.focus() +else s.a.NX()}, +$S:2} +A.aE9.prototype={ +zq(a,b,c){var s +this.Or(a,b,c) +s=this.d +s===$&&A.c() +if(s.w!=null)this.F0()}, +Cm(){var s,r,q=this,p=q.d +p===$&&A.c() +p=p.w +if(p!=null)B.b.I(q.z,p.Co()) +p=q.z +s=q.c +s.toString +r=q.gDX() +p.push(A.f_(s,"input",r)) +s=q.c +s.toString +p.push(A.f_(s,"keydown",q.gEC())) +s=q.c +s.toString +A.dc(s,"beforeinput",t.L.a(A.cd(q.gL_())),null) +s=q.c +s.toString +q.J6(s) +s=q.c +s.toString +p.push(A.f_(s,"keyup",new A.aEb(q))) +s=q.c +s.toString +p.push(A.f_(s,"select",r)) +r=q.c +r.toString +p.push(A.f_(r,"blur",new A.aEc(q))) +q.Mw()}, +aFD(){A.dn(B.G,new A.aEa(this))}, +oL(){var s,r,q=this +q.c.focus() +s=q.w +if(s!=null){r=q.c +r.toString +s.jP(r)}s=q.e +if(s!=null){r=q.c +r.toString +s.jP(r)}}} +A.aEb.prototype={ +$1(a){this.a.aeo(a)}, +$S:2} +A.aEc.prototype={ +$1(a){this.a.aFD()}, +$S:2} +A.aEa.prototype={ +$0(){this.a.c.focus()}, +$S:0} +A.aVr.prototype={} +A.aVy.prototype={ +jv(a){var s=a.b +if(s!=null&&s!==this.a&&a.c){a.c=!1 +a.glQ().mf(0)}a.b=this.a +a.d=this.b}} +A.aVF.prototype={ +jv(a){var s=a.glQ(),r=a.d +r.toString +s.TE(r)}} +A.aVA.prototype={ +jv(a){a.glQ().a01(this.a)}} +A.aVD.prototype={ +jv(a){if(!a.c)a.aJK()}} +A.aVz.prototype={ +jv(a){a.glQ().ZI(this.a)}} +A.aVC.prototype={ +jv(a){a.glQ().ZJ(this.a)}} +A.aVp.prototype={ +jv(a){if(a.c){a.c=!1 +a.glQ().mf(0)}}} +A.aVv.prototype={ +jv(a){if(a.c){a.c=!1 +a.glQ().mf(0)}}} +A.aVB.prototype={ +jv(a){}} +A.aVx.prototype={ +jv(a){}} +A.aVw.prototype={ +jv(a){}} +A.aVu.prototype={ +jv(a){a.NX() +if(this.a)A.bUX() +A.bRz()}} +A.bcY.prototype={ +$2(a,b){var s=t.qr +s=A.j3(new A.x3(b.getElementsByClassName("submitBtn"),s),s.h("z.E"),t.e) +A.w(s).y[1].a(J.lR(s.a)).click()}, +$S:854} +A.aVa.prototype={ +aSZ(a,b){var s,r,q,p,o,n,m,l,k=B.bM.n1(a) +switch(k.a){case"TextInput.setClient":s=k.b +r=J.al(s) +q=new A.aVy(A.dS(r.i(s,0)),A.bna(t.a.a(r.i(s,1)))) +break +case"TextInput.updateConfig":this.a.d=A.bna(t.a.a(k.b)) +q=B.Lj +break +case"TextInput.setEditingState":q=new A.aVA(A.bms(t.a.a(k.b))) +break +case"TextInput.show":q=B.Lh +break +case"TextInput.setEditableSizeAndTransform":q=new A.aVz(A.bEt(t.a.a(k.b))) +break +case"TextInput.setStyle":s=t.a.a(k.b) +r=J.al(s) +p=A.dS(r.i(s,"textAlignIndex")) +o=A.dS(r.i(s,"textDirectionIndex")) +n=A.lN(r.i(s,"fontWeightIndex")) +m=n!=null?A.bip(n):"normal" +l=A.bsb(r.i(s,"fontSize")) +if(l==null)l=null +q=new A.aVC(new A.aD2(l,m,A.eE(r.i(s,"fontFamily")),B.xm[p],B.oi[o])) +break +case"TextInput.clearClient":q=B.Lc +break +case"TextInput.hide":q=B.Ld +break +case"TextInput.requestAutofill":q=B.Le +break +case"TextInput.finishAutofillContext":q=new A.aVu(A.u9(k.b)) +break +case"TextInput.setMarkedTextRect":q=B.Lg +break +case"TextInput.setCaretRect":q=B.Lf +break +default:$.bF().ju(b,null) +return}q.jv(this.a) +new A.aVb(b).$0()}} +A.aVb.prototype={ +$0(){$.bF().ju(this.a,B.aC.e3([!0]))}, +$S:0} +A.aGX.prototype={ +gCO(a){var s=this.a +if(s===$){s!==$&&A.N() +s=this.a=new A.aVa(this)}return s}, +glQ(){var s,r,q,p=this,o=null,n=p.f +if(n===$){s=$.dd +if((s==null?$.dd=A.hQ():s).a){s=A.bJK(p) +r=s}else{s=$.hj() +if(s===B.bx)q=new A.aH_(p,A.b([],t.Up),$,$,$,o) +else if(s===B.kC)q=new A.aw7(p,A.b([],t.Up),$,$,$,o) +else{s=$.eb() +if(s===B.au)q=new A.Rc(p,A.b([],t.Up),$,$,$,o) +else q=s===B.cP?new A.aE9(p,A.b([],t.Up),$,$,$,o):A.bFx(p)}r=q}p.f!==$&&A.N() +n=p.f=r}return n}, +aJK(){var s,r,q=this +q.c=!0 +s=q.glQ() +r=q.d +r.toString +s.Vn(0,r,new A.aGY(q),new A.aGZ(q))}, +NX(){var s,r=this +if(r.c){r.c=!1 +r.glQ().mf(0) +r.gCO(0) +s=r.b +$.bF().ng("flutter/textinput",B.bM.ol(new A.ng("TextInputClient.onConnectionClosed",[s])),A.auP())}}} +A.aGZ.prototype={ +$2(a,b){var s,r,q="flutter/textinput",p=this.a +if(p.d.f){p.gCO(0) +p=p.b +s=t.N +r=t.z +$.bF().ng(q,B.bM.ol(new A.ng(u.W,[p,A.b3(["deltas",A.b([A.b3(["oldText",b.a,"deltaText",b.b,"deltaStart",b.c,"deltaEnd",b.d,"selectionBase",b.e,"selectionExtent",b.f,"composingBase",b.r,"composingExtent",b.w],s,r)],t.H7)],s,r)])),A.auP())}else{p.gCO(0) +p=p.b +$.bF().ng(q,B.bM.ol(new A.ng("TextInputClient.updateEditingState",[p,a.aiq()])),A.auP())}}, +$S:855} +A.aGY.prototype={ +$1(a){var s=this.a +s.gCO(0) +s=s.b +$.bF().ng("flutter/textinput",B.bM.ol(new A.ng("TextInputClient.performAction",[s,a])),A.auP())}, +$S:281} +A.aD2.prototype={ +jP(a){var s=this,r=a.style +A.M(r,"text-align",A.bW_(s.d,s.e)) +A.M(r,"font",s.b+" "+A.j(s.a)+"px "+A.j(A.bbS(s.c)))}, +gkV(a){return this.b}} +A.aCn.prototype={ +jP(a){var s=A.nN(this.c),r=a.style +A.M(r,"width",A.j(this.a)+"px") +A.M(r,"height",A.j(this.b)+"px") +A.M(r,"transform",s)}} +A.aCo.prototype={ +$1(a){return A.iA(a)}, +$S:282} +A.Tg.prototype={ +W(){return"TransformKind."+this.b}} +A.bbQ.prototype={ +$1(a){return"0x"+B.d.k_(B.f.hZ(a,16),2,"0")}, +$S:78} +A.a6t.prototype={ +gF(a){return this.b.b}, +i(a,b){var s=this.c.i(0,b) +return s==null?null:s.d.b}, +a1M(a,b,c){var s,r,q,p=this.b +p.Cn(new A.anW(b,c)) +s=this.c +r=p.a +q=r.b.H_() +q.toString +s.u(0,b,q) +if(p.b>this.a){s.P(0,r.a.gKu().a) +p.eQ(0)}}} +A.cL.prototype={ +v(a){var s=a.a,r=this.a +r[15]=s[15] +r[14]=s[14] +r[13]=s[13] +r[12]=s[12] +r[11]=s[11] +r[10]=s[10] +r[9]=s[9] +r[8]=s[8] +r[7]=s[7] +r[6]=s[6] +r[5]=s[5] +r[4]=s[4] +r[3]=s[3] +r[2]=s[2] +r[1]=s[1] +r[0]=s[0]}, +i(a,b){return this.a[b]}, +aJ(a,b,a0){var s=this.a,r=s[0],q=s[4],p=s[8],o=s[12],n=s[1],m=s[5],l=s[9],k=s[13],j=s[2],i=s[6],h=s[10],g=s[14],f=s[3],e=s[7],d=s[11],c=s[15] +s[12]=r*b+q*a0+p*0+o +s[13]=n*b+m*a0+l*0+k +s[14]=j*b+i*a0+h*0+g +s[15]=f*b+e*a0+d*0+c}, +aZI(a,b){return this.aJ(0,b,0)}, +mD(a,b,c,d){var s=c==null?b:c,r=d==null?b:d,q=this.a +q[15]=q[15] +q[0]=q[0]*b +q[1]=q[1]*b +q[2]=q[2]*b +q[3]=q[3]*b +q[4]=q[4]*s +q[5]=q[5]*s +q[6]=q[6]*s +q[7]=q[7]*s +q[8]=q[8]*r +q[9]=q[9]*r +q[10]=q[10]*r +q[11]=q[11]*r +q[12]=q[12] +q[13]=q[13] +q[14]=q[14]}, +au(a,b){return this.mD(0,b,null,null)}, +ff(a,b,c){return this.mD(0,b,c,null)}, +F_(a,b,c){var s=this.a,r=s[0],q=s[4],p=s[8],o=s[12],n=s[1],m=s[5],l=s[9],k=s[13],j=s[2],i=s[6],h=s[10],g=s[14],f=1/(s[3]*a+s[7]*b+s[11]*c+s[15]) +return new A.Wt((r*a+q*b+p*c+o)*f,(n*a+m*b+l*c+k)*f,(j*a+i*b+h*c+g)*f)}, +Ek(a){var s=this.a +return s[0]===1&&s[1]===0&&s[2]===0&&s[3]===0&&s[4]===0&&s[5]===1&&s[6]===0&&s[7]===0&&s[8]===0&&s[9]===0&&s[10]===1&&s[11]===0&&s[12]===0&&s[13]===0&&s[14]===0&&s[15]===1}, +ai7(b0,b1,b2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=b1.a,a0=b1.b,a1=b1.c,a2=Math.sqrt(a*a+a0*a0+a1*a1),a3=a/a2,a4=a0/a2,a5=a1/a2,a6=Math.cos(b2),a7=Math.sin(b2),a8=1-a6,a9=a3*a3*a8+a6 +a1=a5*a7 +s=a3*a4*a8-a1 +a0=a4*a7 +r=a3*a5*a8+a0 +q=a4*a3*a8+a1 +p=a4*a4*a8+a6 +a1=a3*a7 +o=a4*a5*a8-a1 +n=a5*a3*a8-a0 +m=a5*a4*a8+a1 +l=a5*a5*a8+a6 +a1=this.a +a0=a1[0] +a=a1[4] +k=a1[8] +j=a1[1] +i=a1[5] +h=a1[9] +g=a1[2] +f=a1[6] +e=a1[10] +d=a1[3] +c=a1[7] +b=a1[11] +a1[0]=a0*a9+a*q+k*n +a1[1]=j*a9+i*q+h*n +a1[2]=g*a9+f*q+e*n +a1[3]=d*a9+c*q+b*n +a1[4]=a0*s+a*p+k*m +a1[5]=j*s+i*p+h*m +a1[6]=g*s+f*p+e*m +a1[7]=d*s+c*p+b*m +a1[8]=a0*r+a*o+k*l +a1[9]=j*r+i*o+h*l +a1[10]=g*r+f*o+e*l +a1[11]=d*r+c*o+b*l}, +qm(a,b,c){var s=this.a +s[14]=c +s[13]=b +s[12]=a}, +jR(b5){var s,r,q,p,o=b5.a,n=o[0],m=o[1],l=o[2],k=o[3],j=o[4],i=o[5],h=o[6],g=o[7],f=o[8],e=o[9],d=o[10],c=o[11],b=o[12],a=o[13],a0=o[14],a1=o[15],a2=n*i-m*j,a3=n*h-l*j,a4=n*g-k*j,a5=m*h-l*i,a6=m*g-k*i,a7=l*g-k*h,a8=f*a-e*b,a9=f*a0-d*b,b0=f*a1-c*b,b1=e*a0-d*a,b2=e*a1-c*a,b3=d*a1-c*a0,b4=a2*b3-a3*b2+a4*b1+a5*b0-a6*a9+a7*a8 +if(b4===0){this.v(b5) +return 0}s=1/b4 +r=this.a +r[0]=(i*b3-h*b2+g*b1)*s +r[1]=(-m*b3+l*b2-k*b1)*s +r[2]=(a*a7-a0*a6+a1*a5)*s +r[3]=(-e*a7+d*a6-c*a5)*s +q=-j +r[4]=(q*b3+h*b0-g*a9)*s +r[5]=(n*b3-l*b0+k*a9)*s +p=-b +r[6]=(p*a7+a0*a4-a1*a3)*s +r[7]=(f*a7-d*a4+c*a3)*s +r[8]=(j*b2-i*b0+g*a8)*s +r[9]=(-n*b2+m*b0-k*a8)*s +r[10]=(b*a6-a*a4+a1*a2)*s +r[11]=(-f*a6+e*a4-c*a2)*s +r[12]=(q*b1+i*a9-h*a8)*s +r[13]=(n*b1-m*a9+l*a8)*s +r[14]=(p*a5+a*a3-a0*a2)*s +r[15]=(f*a5-e*a3+d*a2)*s +return b4}, +bL(b5,b6){var s=this.a,r=s[15],q=s[0],p=s[4],o=s[8],n=s[12],m=s[1],l=s[5],k=s[9],j=s[13],i=s[2],h=s[6],g=s[10],f=s[14],e=s[3],d=s[7],c=s[11],b=b6.a,a=b[15],a0=b[0],a1=b[4],a2=b[8],a3=b[12],a4=b[1],a5=b[5],a6=b[9],a7=b[13],a8=b[2],a9=b[6],b0=b[10],b1=b[14],b2=b[3],b3=b[7],b4=b[11] +s[0]=q*a0+p*a4+o*a8+n*b2 +s[4]=q*a1+p*a5+o*a9+n*b3 +s[8]=q*a2+p*a6+o*b0+n*b4 +s[12]=q*a3+p*a7+o*b1+n*a +s[1]=m*a0+l*a4+k*a8+j*b2 +s[5]=m*a1+l*a5+k*a9+j*b3 +s[9]=m*a2+l*a6+k*b0+j*b4 +s[13]=m*a3+l*a7+k*b1+j*a +s[2]=i*a0+h*a4+g*a8+f*b2 +s[6]=i*a1+h*a5+g*a9+f*b3 +s[10]=i*a2+h*a6+g*b0+f*b4 +s[14]=i*a3+h*a7+g*b1+f*a +s[3]=e*a0+d*a4+c*a8+r*b2 +s[7]=e*a1+d*a5+c*a9+r*b3 +s[11]=e*a2+d*a6+c*b0+r*b4 +s[15]=e*a3+d*a7+c*b1+r*a}, +iV(a){var s=new A.cL(new Float32Array(16)) +s.v(this) +s.bL(0,a) +return s}, +aiC(a){var s=a[0],r=a[1],q=this.a +a[0]=q[0]*s+q[4]*r+q[12] +a[1]=q[1]*s+q[5]*r+q[13]}, +j(a){return this.du(0)}} +A.aE0.prototype={ +aiB(a,b,c){var s=this.a +this.b=s[12]+s[0]*b+s[4]*c +this.c=s[13]+s[1]*b+s[5]*c}} +A.aAr.prototype={ +asn(a,b){var s=this,r=b.oF(new A.aAs(s)) +s.d=r +r=A.bS_(new A.aAt(s)) +s.c=r +r.observe(s.b)}, +T(a){var s,r=this +r.a0G(0) +s=r.c +s===$&&A.c() +s.disconnect() +s=r.d +s===$&&A.c() +if(s!=null)s.bq(0) +r.e.T(0)}, +gagn(a){var s=this.e +return new A.f8(s,A.w(s).h("f8<1>"))}, +Ub(){var s,r=$.cF().d +if(r==null){s=self.window.devicePixelRatio +r=s===0?1:s}s=this.b +return new A.Q(s.clientWidth*r,s.clientHeight*r)}, +ac7(a,b){return B.fX}} +A.aAs.prototype={ +$1(a){this.a.e.E(0,null)}, +$S:54} +A.aAt.prototype={ +$2(a,b){var s,r,q,p +for(s=a.$ti,r=new A.cR(a,a.gF(0),s.h("cR")),q=this.a.e,s=s.h("O.E");r.H();){p=r.d +if(p==null)s.a(p) +if(!q.gxS())A.X(q.xp()) +q.qG(null)}}, +$S:293} +A.a2p.prototype={ +T(a){}} +A.a48.prototype={ +aEm(a){this.c.E(0,null)}, +T(a){var s +this.a0G(0) +s=this.b +s===$&&A.c() +s.b.removeEventListener(s.a,s.c) +this.c.T(0)}, +gagn(a){var s=this.c +return new A.f8(s,A.w(s).h("f8<1>"))}, +Ub(){var s,r,q=A.bn("windowInnerWidth"),p=A.bn("windowInnerHeight"),o=self.window.visualViewport,n=$.cF().d +if(n==null){s=self.window.devicePixelRatio +n=s===0?1:s}if(o!=null){s=$.hj() +if(s===B.bx){s=self.document.documentElement.clientWidth +r=self.document.documentElement.clientHeight +q.b=s*n +p.b=r*n}else{s=o.width +if(s==null)s=null +s.toString +q.b=s*n +s=A.bmb(o) +s.toString +p.b=s*n}}else{s=self.window.innerWidth +if(s==null)s=null +s.toString +q.b=s*n +s=A.bme(self.window) +s.toString +p.b=s*n}return new A.Q(q.bl(),p.bl())}, +ac7(a,b){var s,r,q,p=$.cF().d +if(p==null){s=self.window.devicePixelRatio +p=s===0?1:s}r=self.window.visualViewport +q=A.bn("windowInnerHeight") +if(r!=null){s=$.hj() +if(s===B.bx&&!b)q.b=self.document.documentElement.clientHeight*p +else{s=A.bmb(r) +s.toString +q.b=s*p}}else{s=A.bme(self.window) +s.toString +q.b=s*p}return new A.aek(0,0,0,a-q.bl())}} +A.a2w.prototype={ +a8N(){var s,r,q,p=A.beI(self.window,"(resolution: "+A.j(this.b)+"dppx)") +this.d=p +s=t.L.a(A.cd(this.gaDJ())) +r=t.K +q=A.bf(A.b3(["once",!0,"passive",!0],t.N,r)) +A.a3(p,"addEventListener",["change",s,q==null?r.a(q):q])}, +aDK(a){var s=this,r=s.a.d +if(r==null){r=self.window.devicePixelRatio +if(r===0)r=1}s.b=r +s.c.E(0,r) +s.a8N()}} +A.a2E.prototype={} +A.aAu.prototype={ +gNK(){var s=this.b +s===$&&A.c() +return s}, +abp(a){A.M(a.style,"width","100%") +A.M(a.style,"height","100%") +A.M(a.style,"display","block") +A.M(a.style,"overflow","hidden") +A.M(a.style,"position","relative") +this.a.appendChild(a) +if($.bdw()!=null)self.window.__flutterState.push(a) +this.b!==$&&A.aj() +this.b=a}, +gzn(){return this.a}} +A.aFe.prototype={ +gNK(){return self.window}, +abp(a){var s=a.style +A.M(s,"position","absolute") +A.M(s,"top","0") +A.M(s,"right","0") +A.M(s,"bottom","0") +A.M(s,"left","0") +this.a.append(a) +if($.bdw()!=null)self.window.__flutterState.push(a)}, +atP(){var s,r,q +for(s=t.qr,s=A.j3(new A.x3(self.document.head.querySelectorAll('meta[name="viewport"]'),s),s.h("z.E"),t.e),r=J.az(s.a),s=A.w(s),s=s.h("@<1>").ak(s.y[1]).y[1];r.H();)s.a(r.ga1(r)).remove() +q=A.c8(self.document,"meta") +s=A.bf("") +A.a3(q,"setAttribute",["flt-viewport",s==null?t.K.a(s):s]) +q.name="viewport" +q.content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" +self.document.head.append(q) +if($.bdw()!=null)self.window.__flutterState.push(q)}, +gzn(){return this.a}} +A.Na.prototype={ +i(a,b){return this.b.i(0,b)}, +ahC(a,b){var s=a.a +this.b.u(0,s,a) +if(b!=null)this.c.u(0,s,b) +this.d.E(0,s) +return a}, +aYq(a){return this.ahC(a,null)}, +ada(a){var s,r=this.b,q=r.i(0,a) +if(q==null)return null +r.P(0,a) +s=this.c.P(0,a) +this.e.E(0,a) +q.t() +return s}, +b_6(a){var s,r,q,p,o,n +for(s=this.b.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a +if(q==null)q=r.a(q) +p=q.z +if(p===$){o=$.cF().d +if(o==null){o=self.window.devicePixelRatio +if(o===0)o=1}n=A.bE9(o) +q.z!==$&&A.N() +q.z=n +p=n}if(J.f(p.a,a))return q.a}return null}} +A.aG7.prototype={} +A.b97.prototype={ +$0(){return null}, +$S:295} +A.r9.prototype={ +a1J(a,b,c,d){var s,r,q=this,p="setAttribute",o=q.c +o.abp(q.ghv().a) +s=A.bIc(q) +q.Q!==$&&A.aj() +q.Q=s +s=q.CW +s=s.gagn(s).oF(q.gaw9()) +q.d!==$&&A.aj() +q.d=s +r=q.w +if(r===$){s=q.ghv() +o=o.gzn() +q.w!==$&&A.N() +r=q.w=new A.aG7(s.a,o)}o=$.G().gZ8() +s=A.bf(q.a) +if(s==null)s=t.K.a(s) +A.a3(r.a,p,["flt-view-id",s]) +s=r.b +o=A.bf(o+" (auto-selected)") +A.a3(s,p,["flt-renderer",o==null?t.K.a(o):o]) +o=A.bf("release") +A.a3(s,p,["flt-build-mode",o==null?t.K.a(o):o]) +o=A.bf("false") +A.a3(s,p,["spellcheck",o==null?t.K.a(o):o]) +$.ud.push(q.geL())}, +t(){var s,r,q=this +if(q.f)return +q.f=!0 +s=q.d +s===$&&A.c() +s.bq(0) +q.CW.T(0) +s=q.Q +s===$&&A.c() +r=s.f +r===$&&A.c() +r.t() +s=s.a +if(s!=null)if(s.a!=null){A.eQ(self.document,"touchstart",s.a,null) +s.a=null}q.ghv().a.remove() +$.G().abU() +q.ga_W().bF(0)}, +gaaL(){var s,r,q,p=this,o=p.r +if(o===$){s=p.ghv().r +r=A.bkr(B.mn) +q=A.bkr(B.mp) +s.append(r) +s.append(q) +p.r!==$&&A.N() +o=p.r=new A.avN(r,q)}return o}, +gacf(){var s,r=this,q=r.y +if(q===$){s=r.ghv() +r.y!==$&&A.N() +q=r.y=new A.aA8(s.a)}return q}, +ghv(){var s,r,q,p,o,n,m,l,k,j="flutter-view",i=this.z +if(i===$){s=$.cF().d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}r=A.c8(self.document,j) +q=A.c8(self.document,"flt-glass-pane") +p=A.bf(A.b3(["mode","open","delegatesFocus",!1],t.N,t.z)) +p=A.a3(q,"attachShadow",[p==null?t.K.a(p):p]) +o=A.c8(self.document,"flt-scene-host") +n=A.c8(self.document,"flt-text-editing-host") +m=A.c8(self.document,"flt-semantics-host") +l=A.c8(self.document,"flt-announcement-host") +r.appendChild(q) +r.appendChild(n) +r.appendChild(m) +p.append(o) +p.append(l) +k=A.hh().b +A.aUm(j,r,"flt-text-editing-stylesheet",k==null?null:A.a5I(k)) +k=A.hh().b +A.aUm("",p,"flt-internals-stylesheet",k==null?null:A.a5I(k)) +k=A.hh().gK9() +A.M(o.style,"pointer-events","none") +if(k)A.M(o.style,"opacity","0.3") +k=m.style +A.M(k,"position","absolute") +A.M(k,"transform-origin","0 0 0") +A.M(m.style,"transform","scale("+A.j(1/s)+")") +this.z!==$&&A.N() +i=this.z=new A.a2E(r,p,o,n,m,l)}return i}, +ga_W(){var s,r=this,q=r.at +if(q===$){s=A.bEL(r.ghv().f) +r.at!==$&&A.N() +r.at=s +q=s}return q}, +gnv(){var s=this.ax +return s==null?this.ax=this.PK():s}, +PK(){var s=this.CW.Ub() +return s}, +awa(a){var s,r=this,q=r.ghv(),p=$.cF().d +if(p==null){p=self.window.devicePixelRatio +if(p===0)p=1}A.M(q.f.style,"transform","scale("+A.j(1/p)+")") +s=r.PK() +q=$.hj() +if(!B.ru.G(0,q)&&!r.aCj(s)&&$.Zw().c)r.a3f(!0) +else{r.ax=s +r.a3f(!1)}r.b.Xt()}, +aCj(a){var s,r,q=this.ax +if(q!=null){s=q.b +r=a.b +if(s!==r&&q.a!==a.a){q=q.a +if(!(s>q&&rs&&a.a").ak(b).h("hk<1,2>"))}, +E(a,b){if(!!a.fixed$length)A.X(A.af("add")) +a.push(b)}, +di(a,b){if(!!a.fixed$length)A.X(A.af("removeAt")) +if(b<0||b>=a.length)throw A.d(A.a9C(b,null,null)) +return a.splice(b,1)[0]}, +hc(a,b,c){if(!!a.fixed$length)A.X(A.af("insert")) +if(b<0||b>a.length)throw A.d(A.a9C(b,null,null)) +a.splice(b,0,c)}, +hO(a,b,c){var s,r +if(!!a.fixed$length)A.X(A.af("insertAll")) +A.GW(b,0,a.length,"index") +if(!t.Ee.b(c))c=J.xI(c) +s=J.bo(c) +a.length=a.length+s +r=b+s +this.c3(a,r,a.length,a,b) +this.dL(a,b,r,c)}, +jC(a,b,c){var s,r,q +if(!!a.immutable$list)A.X(A.af("setAll")) +A.GW(b,0,a.length,"index") +for(s=J.az(c.a),r=A.w(c),r=r.h("@<1>").ak(r.y[1]).y[1];s.H();b=q){q=b+1 +this.u(a,b,r.a(s.ga1(s)))}}, +eQ(a){if(!!a.fixed$length)A.X(A.af("removeLast")) +if(a.length===0)throw A.d(A.Ki(a,-1)) +return a.pop()}, +P(a,b){var s +if(!!a.fixed$length)A.X(A.af("remove")) +for(s=0;s"))}, +I(a,b){var s +if(!!a.fixed$length)A.X(A.af("addAll")) +if(Array.isArray(b)){this.atj(a,b) +return}for(s=J.az(b);s.H();)a.push(s.ga1(s))}, +atj(a,b){var s,r=b.length +if(r===0)return +if(a===b)throw A.d(A.db(a)) +for(s=0;s").ak(c).h("W<1,2>"))}, +cj(a,b){var s,r=A.bc(a.length,"",!1,t.N) +for(s=0;sa.length)throw A.d(A.du(b,0,a.length,"start",null)) +if(c==null)c=a.length +else if(ca.length)throw A.d(A.du(c,b,a.length,"end",null)) +if(b===c)return A.b([],A.a5(a)) +return A.b(a.slice(b,c),A.a5(a))}, +jE(a,b){return this.cI(a,b,null)}, +nO(a,b,c){A.dl(b,c,a.length,null,null) +return A.fj(a,b,c,A.a5(a).c)}, +ga9(a){if(a.length>0)return a[0] +throw A.d(A.cy())}, +ga_(a){var s=a.length +if(s>0)return a[s-1] +throw A.d(A.cy())}, +ge1(a){var s=a.length +if(s===1)return a[0] +if(s===0)throw A.d(A.cy()) +throw A.d(A.aI1())}, +hX(a,b,c){if(!!a.fixed$length)A.X(A.af("removeRange")) +A.dl(b,c,a.length,null,null) +a.splice(b,c-b)}, +c3(a,b,c,d,e){var s,r,q,p,o +if(!!a.immutable$list)A.X(A.af("setRange")) +A.dl(b,c,a.length,null,null) +s=c-b +if(s===0)return +A.en(e,"skipCount") +if(t.j.b(d)){r=d +q=e}else{p=J.xH(d,e) +r=p.ig(p,!1) +q=0}p=J.al(r) +if(q+s>p.gF(r))throw A.d(A.bnf()) +if(q=0;--o)a[b+o]=p.i(r,q+o) +else for(o=0;o=r){o=s-r +n=p-o +m.dL(a,b,q,d) +if(o!==0){m.c3(a,q,n,a,c) +m.sF(a,n)}}else{n=p+(r-s) +a.length=n +m.c3(a,q,n,a,c) +m.dL(a,b,q,d)}}, +fk(a,b){var s,r=a.length +for(s=0;s"))}, +i1(a,b){var s,r,q,p,o +if(!!a.immutable$list)A.X(A.af("sort")) +s=a.length +if(s<2)return +if(b==null)b=J.bPA() +if(s===2){r=a[0] +q=a[1] +if(b.$2(r,q)>0){a[0]=q +a[1]=r}return}if(A.a5(a).c.b(null)){for(p=0,o=0;o0)this.aGr(a,p)}, +kg(a){return this.i1(a,null)}, +aGr(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}}, +jX(a,b,c){var s,r=a.length +if(c>=r)return-1 +for(s=c;s=r +for(s=q;s>=0;--s)if(J.f(a[s],b))return s +return-1}, +Ep(a,b){return this.Lz(a,b,null)}, +G(a,b){var s +for(s=0;s"))}, +gL(a){return A.eT(a)}, +gF(a){return a.length}, +sF(a,b){if(!!a.fixed$length)A.X(A.af("set length")) +if(b<0)throw A.d(A.du(b,0,null,"newLength",null)) +if(b>a.length)A.a5(a).c.a(null) +a.length=b}, +i(a,b){if(!(b>=0&&b=0&&b=a.length)return-1 +for(s=c;s=0;--s)if(b.$1(a[s]))return s +return-1}, +XI(a,b){return this.afA(a,b,null)}, +sa9(a,b){if(a.length===0)throw A.d(A.cy()) +this.u(a,0,b)}, +sa_(a,b){var s=a.length +if(s===0)throw A.d(A.cy()) +this.u(a,s-1,b)}, +ghh(a){return A.ay(A.a5(a))}, +$icw:1, +$iat:1, +$iz:1, +$iH:1, +afz(a){return this.ga_(a).$0()}} +J.aI8.prototype={} +J.cA.prototype={ +ga1(a){var s=this.d +return s==null?this.$ti.c.a(s):s}, +H(){var s,r=this,q=r.a,p=q.length +if(r.b!==p)throw A.d(A.E(q)) +s=r.c +if(s>=p){r.d=null +return!1}r.d=q[s] +r.c=s+1 +return!0}} +J.vt.prototype={ +cK(a,b){var s +if(ab)return 1 +else if(a===b){if(a===0){s=this.goD(b) +if(this.goD(a)===s)return 0 +if(this.goD(a))return-1 +return 1}return 0}else if(isNaN(a)){if(isNaN(b))return 0 +return 1}else return-1}, +goD(a){return a===0?1/a<0:a<0}, +gAF(a){var s +if(a>0)s=1 +else s=a<0?-1:a +return s}, +aw(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.d(A.af(""+a+".toInt()"))}, +d0(a){var s,r +if(a>=0){if(a<=2147483647){s=a|0 +return a===s?s:s+1}}else if(a>=-2147483648)return a|0 +r=Math.ceil(a) +if(isFinite(r))return r +throw A.d(A.af(""+a+".ceil()"))}, +bK(a){var s,r +if(a>=0){if(a<=2147483647)return a|0}else if(a>=-2147483648){s=a|0 +return a===s?s:s-1}r=Math.floor(a) +if(isFinite(r))return r +throw A.d(A.af(""+a+".floor()"))}, +ai(a){if(a>0){if(a!==1/0)return Math.round(a)}else if(a>-1/0)return 0-Math.round(0-a) +throw A.d(A.af(""+a+".round()"))}, +Zg(a){if(a<0)return-Math.round(-a) +else return Math.round(a)}, +bX(a,b,c){if(this.cK(b,c)>0)throw A.d(A.D9(b)) +if(this.cK(a,b)<0)return b +if(this.cK(a,c)>0)return c +return a}, +b8(a,b){var s +if(b>20)throw A.d(A.du(b,0,20,"fractionDigits",null)) +s=a.toFixed(b) +if(a===0&&this.goD(a))return"-"+s +return s}, +Zv(a,b){var s +if(b<1||b>21)throw A.d(A.du(b,1,21,"precision",null)) +s=a.toPrecision(b) +if(a===0&&this.goD(a))return"-"+s +return s}, +hZ(a,b){var s,r,q,p +if(b<2||b>36)throw A.d(A.du(b,2,36,"radix",null)) +s=a.toString(b) +if(s.charCodeAt(s.length-1)!==41)return s +r=/^([\da-z]+)(?:\.([\da-z]+))?\(e\+(\d+)\)$/.exec(s) +if(r==null)A.X(A.af("Unexpected toString result: "+s)) +s=r[1] +q=+r[3] +p=r[2] +if(p!=null){s+=p +q-=p.length}return s+B.d.a2("0",q)}, +j(a){if(a===0&&1/a<0)return"-0.0" +else return""+a}, +gL(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}, +fv(a){return-a}, +X(a,b){return a+b}, +Y(a,b){return a-b}, +b1(a,b){return a/b}, +a2(a,b){return a*b}, +bx(a,b){var s=a%b +if(s===0)return 0 +if(s>0)return s +if(b<0)return s-b +else return s+b}, +eY(a,b){if((a|0)===a)if(b>=1||b<-1)return a/b|0 +return this.a8X(a,b)}, +cN(a,b){return(a|0)===a?a/b|0:this.a8X(a,b)}, +a8X(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.d(A.af("Result of truncating division is "+A.j(s)+": "+A.j(a)+" ~/ "+A.j(b)))}, +nT(a,b){if(b<0)throw A.d(A.D9(b)) +return b>31?0:a<>>0}, +pi(a,b){return b>31?0:a<>>0}, +AE(a,b){var s +if(b<0)throw A.d(A.D9(b)) +if(a>0)s=this.y8(a,b) +else{s=b>31?31:b +s=a>>s>>>0}return s}, +dU(a,b){var s +if(a>0)s=this.y8(a,b) +else{s=b>31?31:b +s=a>>s>>>0}return s}, +Iv(a,b){if(0>b)throw A.d(A.D9(b)) +return this.y8(a,b)}, +y8(a,b){return b>31?0:a>>>b}, +y9(a,b){if(b>31)return 0 +return a>>>b}, +nR(a,b){return(a|b)>>>0}, +rO(a,b){return a<=b}, +ghh(a){return A.ay(t.Jy)}, +$idC:1, +$iT:1, +$id2:1} +J.FB.prototype={ +gAF(a){var s +if(a>0)s=1 +else s=a<0?-1:a +return s}, +fv(a){return-a}, +ghh(a){return A.ay(t.S)}, +$ieq:1, +$ik:1} +J.O6.prototype={ +ghh(a){return A.ay(t.V)}, +$ieq:1} +J.px.prototype={ +qT(a,b){if(b<0)throw A.d(A.Ki(a,b)) +if(b>=a.length)A.X(A.Ki(a,b)) +return a.charCodeAt(b)}, +Ct(a,b,c){var s=b.length +if(c>s)throw A.d(A.du(c,0,s,null,null)) +return new A.aqw(b,a,c)}, +Cs(a,b){return this.Ct(a,b,0)}, +u_(a,b,c){var s,r,q=null +if(c<0||c>b.length)throw A.d(A.du(c,0,b.length,q,q)) +s=a.length +if(c+s>b.length)return q +for(r=0;rr)return!1 +return b===this.c5(a,r-s)}, +nE(a,b,c){A.GW(0,0,a.length,"startIndex") +return A.buK(a,b,c,0)}, +x0(a,b){if(typeof b=="string")return A.b(a.split(b),t.T) +else if(b instanceof A.rC&&b.ga6q().exec("").length-2===0)return A.b(a.split(b.b),t.T) +else return this.aw2(a,b)}, +j1(a,b,c,d){var s=A.dl(b,c,a.length,null,null) +return A.biM(a,b,s,d)}, +aw2(a,b){var s,r,q,p,o,n,m=A.b([],t.T) +for(s=J.avC(b,a),s=s.gar(s),r=0,q=1;s.H();){p=s.ga1(s) +o=p.gp5(p) +n=p.gi7(p) +q=n-o +if(q===0&&r===o)continue +m.push(this.am(a,r,o)) +r=n}if(r0)m.push(this.c5(a,r)) +return m}, +fA(a,b,c){var s +if(c<0||c>a.length)throw A.d(A.du(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.bBr(b,a,c)!=null}, +c4(a,b){return this.fA(a,b,0)}, +am(a,b,c){return a.substring(b,A.dl(b,c,a.length,null,null))}, +c5(a,b){return this.am(a,b,null)}, +aZt(a){return a.toLowerCase()}, +aZw(a){return a.toUpperCase()}, +eC(a){var s,r,q,p=a.trim(),o=p.length +if(o===0)return p +if(p.charCodeAt(0)===133){s=J.bno(p,1) +if(s===o)return""}else s=0 +r=o-1 +q=p.charCodeAt(r)===133?J.bnp(p,r):o +if(s===0&&q===o)return p +return p.substring(s,q)}, +aZL(a){var s=a.trimStart() +if(s.length===0)return s +if(s.charCodeAt(0)!==133)return s +return s.substring(J.bno(s,1))}, +rF(a){var s,r=a.trimEnd(),q=r.length +if(q===0)return r +s=q-1 +if(r.charCodeAt(s)!==133)return r +return r.substring(0,J.bnp(r,s))}, +a2(a,b){var s,r +if(0>=b)return"" +if(b===1||a.length===0)return a +if(b!==b>>>0)throw A.d(B.KT) +for(s=a,r="";!0;){if((b&1)===1)r=s+r +b=b>>>1 +if(b===0)break +s+=s}return r}, +k_(a,b,c){var s=b-a.length +if(s<=0)return a +return this.a2(c,s)+a}, +jX(a,b,c){var s,r,q,p +if(c<0||c>a.length)throw A.d(A.du(c,0,a.length,null,null)) +if(typeof b=="string")return a.indexOf(b,c) +if(b instanceof A.rC){s=b.Ql(a,c) +return s==null?-1:s.b.index}for(r=a.length,q=J.ui(b),p=c;p<=r;++p)if(q.u_(b,a,p)!=null)return p +return-1}, +f7(a,b){return this.jX(a,b,0)}, +Lz(a,b,c){var s,r,q +if(c==null)c=a.length +else if(c<0||c>a.length)throw A.d(A.du(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.ui(b),q=c;q>=0;--q)if(s.u_(b,a,q)!=null)return q +return-1}, +Ep(a,b){return this.Lz(a,b,null)}, +JL(a,b,c){var s=a.length +if(c>s)throw A.d(A.du(c,0,s,null,null)) +return A.Kn(a,b,c)}, +G(a,b){return this.JL(a,b,0)}, +cK(a,b){var s +if(a===b)s=0 +else s=a>6}r=r+((r&67108863)<<3)&536870911 +r^=r>>11 +return r+((r&16383)<<15)&536870911}, +ghh(a){return A.ay(t.N)}, +gF(a){return a.length}, +i(a,b){if(!(b>=0&&b").ak(s.y[1]).h("a0h<1,2>"))}, +gF(a){return J.bo(this.gln())}, +gaA(a){return J.kd(this.gln())}, +gcT(a){return J.l4(this.gln())}, +fz(a,b){var s=A.w(this) +return A.j3(J.xH(this.gln(),b),s.c,s.y[1])}, +bE(a,b){var s=A.w(this) +return A.j3(J.ZB(this.gln(),b),s.c,s.y[1])}, +cA(a,b){return A.w(this).y[1].a(J.mT(this.gln(),b))}, +ga9(a){return A.w(this).y[1].a(J.lR(this.gln()))}, +ga_(a){return A.w(this).y[1].a(J.Do(this.gln()))}, +G(a,b){return J.xG(this.gln(),b)}, +j(a){return J.i1(this.gln())}} +A.a0h.prototype={ +H(){return this.a.H()}, +ga1(a){var s=this.a +return this.$ti.y[1].a(s.ga1(s))}} +A.ye.prototype={ +eq(a,b){return A.j3(this.a,A.w(this).c,b)}, +gln(){return this.a}} +A.V_.prototype={$iat:1} +A.Ub.prototype={ +i(a,b){return this.$ti.y[1].a(J.bG(this.a,b))}, +u(a,b,c){J.kc(this.a,b,this.$ti.c.a(c))}, +sF(a,b){J.bBC(this.a,b)}, +E(a,b){J.iD(this.a,this.$ti.c.a(b))}, +I(a,b){var s=this.$ti +J.Zy(this.a,A.j3(b,s.y[1],s.c))}, +hc(a,b,c){J.bkj(this.a,b,this.$ti.c.a(c))}, +hO(a,b,c){var s=this.$ti +J.bBm(this.a,b,A.j3(c,s.y[1],s.c))}, +jC(a,b,c){var s=this.$ti +J.bkn(this.a,b,A.j3(c,s.y[1],s.c))}, +P(a,b){return J.up(this.a,b)}, +di(a,b){return this.$ti.y[1].a(J.bBw(this.a,b))}, +eQ(a){return this.$ti.y[1].a(J.bBx(this.a))}, +nO(a,b,c){var s=this.$ti +return A.j3(J.bBl(this.a,b,c),s.c,s.y[1])}, +c3(a,b,c,d,e){var s=this.$ti +J.avK(this.a,b,c,A.j3(d,s.y[1],s.c),e)}, +dL(a,b,c,d){return this.c3(0,b,c,d,0)}, +hX(a,b,c){J.bBz(this.a,b,c)}, +kU(a,b,c,d){J.bdH(this.a,b,c,this.$ti.c.a(d))}, +$iat:1, +$iH:1} +A.hk.prototype={ +eq(a,b){return new A.hk(this.a,this.$ti.h("@<1>").ak(b).h("hk<1,2>"))}, +gln(){return this.a}} +A.qR.prototype={ +eq(a,b){return new A.qR(this.a,this.b,this.$ti.h("@<1>").ak(b).h("qR<1,2>"))}, +E(a,b){return this.a.E(0,this.$ti.c.a(b))}, +I(a,b){var s=this.$ti +this.a.I(0,A.j3(b,s.y[1],s.c))}, +P(a,b){return this.a.P(0,b)}, +pN(a,b){var s,r=this +if(r.b!=null)return r.avc(b,!0) +s=r.$ti +return new A.qR(r.a.pN(0,b),null,s.h("@<1>").ak(s.y[1]).h("qR<1,2>"))}, +avc(a,b){var s,r=this.b,q=this.$ti,p=q.y[1],o=r==null?A.vD(p):r.$1$0(p) +for(p=this.a,p=p.gar(p),q=q.y[1];p.H();){s=q.a(p.ga1(p)) +if(b===a.G(0,s))o.E(0,s)}return o}, +a2V(){var s=this.b,r=this.$ti.y[1],q=s==null?A.vD(r):s.$1$0(r) +q.I(0,this) +return q}, +kD(a){return this.a2V()}, +$iat:1, +$ibO:1, +gln(){return this.a}} +A.qP.prototype={ +vn(a,b,c){var s=this.$ti +return new A.qP(this.a,s.h("@<1>").ak(s.y[1]).ak(b).ak(c).h("qP<1,2,3,4>"))}, +aR(a,b){return J.Kt(this.a,b)}, +i(a,b){return this.$ti.h("4?").a(J.bG(this.a,b))}, +u(a,b,c){var s=this.$ti +J.kc(this.a,s.c.a(b),s.y[1].a(c))}, +cU(a,b,c){var s=this.$ti +return s.y[3].a(J.ZA(this.a,s.c.a(b),new A.ayp(this,c)))}, +I(a,b){var s=this.$ti +J.Zy(this.a,new A.qP(b,s.h("@<3>").ak(s.y[3]).ak(s.c).ak(s.y[1]).h("qP<1,2,3,4>")))}, +P(a,b){return this.$ti.h("4?").a(J.up(this.a,b))}, +al(a,b){J.lQ(this.a,new A.ayo(this,b))}, +gdv(a){var s=this.$ti +return A.j3(J.avG(this.a),s.c,s.y[2])}, +gbm(a){var s=this.$ti +return A.j3(J.bdK(this.a),s.y[1],s.y[3])}, +gF(a){return J.bo(this.a)}, +gaA(a){return J.kd(this.a)}, +gcT(a){return J.l4(this.a)}, +ghw(a){var s=J.bdI(this.a) +return s.jo(s,new A.ayn(this),this.$ti.h("bK<3,4>"))}} +A.ayp.prototype={ +$0(){return this.a.$ti.y[1].a(this.b.$0())}, +$S(){return this.a.$ti.h("2()")}} +A.ayo.prototype={ +$2(a,b){var s=this.a.$ti +this.b.$2(s.y[2].a(a),s.y[3].a(b))}, +$S(){return this.a.$ti.h("~(1,2)")}} +A.ayn.prototype={ +$1(a){var s=this.a.$ti,r=s.y[3] +return new A.bK(s.y[2].a(a.a),r.a(a.b),s.h("@<3>").ak(r).h("bK<1,2>"))}, +$S(){return this.a.$ti.h("bK<3,4>(bK<1,2>)")}} +A.qQ.prototype={ +eq(a,b){return new A.qQ(this.a,this.$ti.h("@<1>").ak(b).h("qQ<1,2>"))}, +$iat:1, +gln(){return this.a}} +A.m8.prototype={ +j(a){return"LateInitializationError: "+this.a}} +A.l9.prototype={ +gF(a){return this.a.length}, +i(a,b){return this.a.charCodeAt(b)}} +A.bcM.prototype={ +$0(){return A.e5(null,t.P)}, +$S:109} +A.aSm.prototype={} +A.at.prototype={} +A.aI.prototype={ +gar(a){var s=this +return new A.cR(s,s.gF(s),A.w(s).h("cR"))}, +al(a,b){var s,r=this,q=r.gF(r) +for(s=0;s").ak(c).h("W<1,2>"))}, +oM(a,b){var s,r,q=this,p=q.gF(q) +if(p===0)throw A.d(A.cy()) +s=q.cA(0,0) +for(r=1;rs)throw A.d(A.du(r,0,s,"start",null))}}, +gawU(){var s=J.bo(this.a),r=this.c +if(r==null||r>s)return s +return r}, +gaJM(){var s=J.bo(this.a),r=this.b +if(r>s)return s +return r}, +gF(a){var s,r=J.bo(this.a),q=this.b +if(q>=r)return 0 +s=this.c +if(s==null||s>=r)return r-q +return s-q}, +cA(a,b){var s=this,r=s.gaJM()+b +if(b<0||r>=s.gawU())throw A.d(A.fs(b,s.gF(0),s,null,"index")) +return J.mT(s.a,r)}, +fz(a,b){var s,r,q=this +A.en(b,"count") +s=q.b+b +r=q.c +if(r!=null&&s>=r)return new A.j6(q.$ti.h("j6<1>")) +return A.fj(q.a,s,r,q.$ti.c)}, +bE(a,b){var s,r,q,p=this +A.en(b,"count") +s=p.c +r=p.b +q=r+b +if(s==null)return A.fj(p.a,r,q,p.$ti.c) +else{if(s=o){r.d=null +return!1}r.d=p.cA(q,s);++r.c +return!0}} +A.e7.prototype={ +gar(a){var s=A.w(this) +return new A.bt(J.az(this.a),this.b,s.h("@<1>").ak(s.y[1]).h("bt<1,2>"))}, +gF(a){return J.bo(this.a)}, +gaA(a){return J.kd(this.a)}, +ga9(a){return this.b.$1(J.lR(this.a))}, +ga_(a){return this.b.$1(J.Do(this.a))}, +cA(a,b){return this.b.$1(J.mT(this.a,b))}} +A.yZ.prototype={$iat:1} +A.bt.prototype={ +H(){var s=this,r=s.b +if(r.H()){s.a=s.c.$1(r.ga1(r)) +return!0}s.a=null +return!1}, +ga1(a){var s=this.a +return s==null?this.$ti.y[1].a(s):s}} +A.W.prototype={ +gF(a){return J.bo(this.a)}, +cA(a,b){return this.b.$1(J.mT(this.a,b))}} +A.bg.prototype={ +gar(a){return new A.fG(J.az(this.a),this.b,this.$ti.h("fG<1>"))}, +jo(a,b,c){return new A.e7(this,b,this.$ti.h("@<1>").ak(c).h("e7<1,2>"))}} +A.fG.prototype={ +H(){var s,r +for(s=this.a,r=this.b;s.H();)if(r.$1(s.ga1(s)))return!0 +return!1}, +ga1(a){var s=this.a +return s.ga1(s)}} +A.m0.prototype={ +gar(a){var s=this.$ti +return new A.v_(J.az(this.a),this.b,B.j7,s.h("@<1>").ak(s.y[1]).h("v_<1,2>"))}} +A.v_.prototype={ +ga1(a){var s=this.d +return s==null?this.$ti.y[1].a(s):s}, +H(){var s,r,q=this,p=q.c +if(p==null)return!1 +for(s=q.a,r=q.b;!p.H();){q.d=null +if(s.H()){q.c=null +p=J.az(r.$1(s.ga1(s))) +q.c=p}else return!1}p=q.c +q.d=p.ga1(p) +return!0}} +A.C0.prototype={ +gar(a){return new A.acT(J.az(this.a),this.b,A.w(this).h("acT<1>"))}} +A.MF.prototype={ +gF(a){var s=J.bo(this.a),r=this.b +if(s>r)return r +return s}, +$iat:1} +A.acT.prototype={ +H(){if(--this.b>=0)return this.a.H() +this.b=-1 +return!1}, +ga1(a){var s +if(this.b<0){this.$ti.c.a(null) +return null}s=this.a +return s.ga1(s)}} +A.Sy.prototype={ +gar(a){return new A.acU(J.az(this.a),this.b,this.$ti.h("acU<1>"))}} +A.acU.prototype={ +H(){var s,r=this +if(r.c)return!1 +s=r.a +if(!s.H()||!r.b.$1(s.ga1(s))){r.c=!0 +return!1}return!0}, +ga1(a){var s +if(this.c){this.$ti.c.a(null) +return null}s=this.a +return s.ga1(s)}} +A.tw.prototype={ +fz(a,b){A.qG(b,"count") +A.en(b,"count") +return new A.tw(this.a,this.b+b,A.w(this).h("tw<1>"))}, +gar(a){return new A.abK(J.az(this.a),this.b,A.w(this).h("abK<1>"))}} +A.EI.prototype={ +gF(a){var s=J.bo(this.a)-this.b +if(s>=0)return s +return 0}, +fz(a,b){A.qG(b,"count") +A.en(b,"count") +return new A.EI(this.a,this.b+b,this.$ti)}, +$iat:1} +A.abK.prototype={ +H(){var s,r +for(s=this.a,r=0;r"))}} +A.abL.prototype={ +H(){var s,r,q=this +if(!q.c){q.c=!0 +for(s=q.a,r=q.b;s.H();)if(!r.$1(s.ga1(s)))return!0}return q.a.H()}, +ga1(a){var s=this.a +return s.ga1(s)}} +A.j6.prototype={ +gar(a){return B.j7}, +gaA(a){return!0}, +gF(a){return 0}, +ga9(a){throw A.d(A.cy())}, +ga_(a){throw A.d(A.cy())}, +cA(a,b){throw A.d(A.du(b,0,0,"index",null))}, +G(a,b){return!1}, +fk(a,b){return!1}, +uF(a,b,c){throw A.d(A.cy())}, +p0(a,b){return this.uF(0,b,null)}, +mz(a,b){return this}, +jo(a,b,c){return new A.j6(c.h("j6<0>"))}, +fz(a,b){A.en(b,"count") +return this}, +bE(a,b){A.en(b,"count") +return this}, +ig(a,b){var s=this.$ti.c +return b?J.FA(0,s):J.O3(0,s)}, +eT(a){return this.ig(0,!0)}, +kD(a){return A.vD(this.$ti.c)}} +A.a3a.prototype={ +H(){return!1}, +ga1(a){throw A.d(A.cy())}} +A.rj.prototype={ +gar(a){return new A.a3U(J.az(this.a),this.b,A.w(this).h("a3U<1>"))}, +gF(a){return J.bo(this.a)+J.bo(this.b)}, +gaA(a){return J.kd(this.a)&&J.kd(this.b)}, +gcT(a){return J.l4(this.a)||J.l4(this.b)}, +G(a,b){return J.xG(this.a,b)||J.xG(this.b,b)}, +ga9(a){var s=J.az(this.a) +if(s.H())return s.ga1(s) +return J.lR(this.b)}, +ga_(a){var s,r=J.az(this.b) +if(r.H()){s=r.ga1(r) +for(;r.H();)s=r.ga1(r) +return s}return J.Do(this.a)}} +A.ME.prototype={ +cA(a,b){var s=this.a,r=J.al(s),q=r.gF(s) +if(b"))}} +A.nA.prototype={ +H(){var s,r +for(s=this.a,r=this.$ti.c;s.H();)if(r.b(s.ga1(s)))return!0 +return!1}, +ga1(a){var s=this.a +return this.$ti.c.a(s.ga1(s))}} +A.rx.prototype={ +gF(a){return J.bo(this.a)}, +gaA(a){return J.kd(this.a)}, +gcT(a){return J.l4(this.a)}, +ga9(a){return new A.bI(this.b,J.lR(this.a))}, +cA(a,b){return new A.bI(b+this.b,J.mT(this.a,b))}, +G(a,b){var s,r,q,p,o,n,m=null +if(t.mi.b(b)){s=b.a +if(A.cU(s)){A.dS(s) +r=b.b +q=s>=this.b +p=r +o=s}else{p=m +o=p +q=!1}}else{p=m +o=p +q=!1}if(q){q=J.xH(this.a,o-this.b) +n=q.gar(q) +return n.H()&&J.f(n.ga1(n),p)}return!1}, +bE(a,b){A.qG(b,"count") +A.en(b,"count") +return new A.rx(J.ZB(this.a,b),this.b,A.w(this).h("rx<1>"))}, +fz(a,b){A.qG(b,"count") +A.en(b,"count") +return new A.rx(J.xH(this.a,b),b+this.b,A.w(this).h("rx<1>"))}, +gar(a){return new A.Fq(J.az(this.a),this.b,A.w(this).h("Fq<1>"))}} +A.yY.prototype={ +ga_(a){var s,r=this.a,q=J.al(r),p=q.gF(r) +if(p<=0)throw A.d(A.cy()) +s=q.ga_(r) +if(p!==q.gF(r))throw A.d(A.db(this)) +return new A.bI(p-1+this.b,s)}, +G(a,b){var s,r,q,p,o,n,m,l=null +if(t.mi.b(b)){s=b.a +if(A.cU(s)){A.dS(s) +r=b.b +q=s>=this.b +p=r +o=s}else{p=l +o=p +q=!1}}else{p=l +o=p +q=!1}if(q){n=o-this.b +q=this.a +m=J.al(q) +return n=0&&this.a.H())return!0 +this.c=-2 +return!1}, +ga1(a){var s,r=this.c +if(r>=0){s=this.a +s=new A.bI(this.b+r,s.ga1(s)) +r=s}else r=A.X(A.cy()) +return r}} +A.N0.prototype={ +sF(a,b){throw A.d(A.af("Cannot change the length of a fixed-length list"))}, +E(a,b){throw A.d(A.af("Cannot add to a fixed-length list"))}, +hc(a,b,c){throw A.d(A.af("Cannot add to a fixed-length list"))}, +hO(a,b,c){throw A.d(A.af("Cannot add to a fixed-length list"))}, +I(a,b){throw A.d(A.af("Cannot add to a fixed-length list"))}, +P(a,b){throw A.d(A.af("Cannot remove from a fixed-length list"))}, +di(a,b){throw A.d(A.af("Cannot remove from a fixed-length list"))}, +eQ(a){throw A.d(A.af("Cannot remove from a fixed-length list"))}, +hX(a,b,c){throw A.d(A.af("Cannot remove from a fixed-length list"))}} +A.ae0.prototype={ +u(a,b,c){throw A.d(A.af("Cannot modify an unmodifiable list"))}, +sF(a,b){throw A.d(A.af("Cannot change the length of an unmodifiable list"))}, +sa_(a,b){throw A.d(A.af("Cannot modify an unmodifiable list"))}, +jC(a,b,c){throw A.d(A.af("Cannot modify an unmodifiable list"))}, +E(a,b){throw A.d(A.af("Cannot add to an unmodifiable list"))}, +hc(a,b,c){throw A.d(A.af("Cannot add to an unmodifiable list"))}, +hO(a,b,c){throw A.d(A.af("Cannot add to an unmodifiable list"))}, +I(a,b){throw A.d(A.af("Cannot add to an unmodifiable list"))}, +P(a,b){throw A.d(A.af("Cannot remove from an unmodifiable list"))}, +di(a,b){throw A.d(A.af("Cannot remove from an unmodifiable list"))}, +eQ(a){throw A.d(A.af("Cannot remove from an unmodifiable list"))}, +c3(a,b,c,d,e){throw A.d(A.af("Cannot modify an unmodifiable list"))}, +dL(a,b,c,d){return this.c3(0,b,c,d,0)}, +hX(a,b,c){throw A.d(A.af("Cannot remove from an unmodifiable list"))}, +kU(a,b,c,d){throw A.d(A.af("Cannot modify an unmodifiable list"))}} +A.Iv.prototype={} +A.cz.prototype={ +gF(a){return J.bo(this.a)}, +cA(a,b){var s=this.a,r=J.al(s) +return r.cA(s,r.gF(s)-1-b)}} +A.fX.prototype={ +gL(a){var s=this._hashCode +if(s!=null)return s +s=664597*B.d.gL(this.a)&536870911 +this._hashCode=s +return s}, +j(a){return'Symbol("'+this.a+'")'}, +k(a,b){if(b==null)return!1 +return b instanceof A.fX&&this.a===b.a}, +$iSu:1} +A.Yz.prototype={} +A.bI.prototype={$r:"+(1,2)",$s:1} +A.JK.prototype={$r:"+cacheSize,maxTextLength(1,2)",$s:2} +A.Wq.prototype={$r:"+distance,fragment(1,2)",$s:3} +A.JL.prototype={$r:"+end,start(1,2)",$s:4} +A.anW.prototype={$r:"+key,value(1,2)",$s:5} +A.anX.prototype={$r:"+wordEnd,wordStart(1,2)",$s:7} +A.xk.prototype={$r:"+(1,2,3)",$s:8} +A.anY.prototype={$r:"+breaks,graphemes,words(1,2,3)",$s:9} +A.Wr.prototype={$r:"+completer,recorder,scene(1,2,3)",$s:10} +A.Ws.prototype={$r:"+data,event,timeStamp(1,2,3)",$s:11} +A.anZ.prototype={$r:"+large,medium,small(1,2,3)",$s:12} +A.ao_.prototype={$r:"+queue,target,timer(1,2,3)",$s:13} +A.Wt.prototype={$r:"+x,y,z(1,2,3)",$s:14} +A.ao0.prototype={$r:"+(1,2,3,4)",$s:15} +A.Wu.prototype={$r:"+domBlurListener,domFocusListener,element,semanticsNodeId(1,2,3,4)",$s:16} +A.ao1.prototype={$r:"+(1,2,3,4,5)",$s:18} +A.ao2.prototype={$r:"+(1,2,3,4,5,6,7,8)",$s:19} +A.yy.prototype={} +A.Eb.prototype={ +vn(a,b,c){var s=A.w(this) +return A.bnX(this,s.c,s.y[1],b,c)}, +gaA(a){return this.gF(this)===0}, +gcT(a){return this.gF(this)!==0}, +j(a){return A.bfH(this)}, +u(a,b,c){A.azX()}, +cU(a,b,c){A.azX()}, +P(a,b){A.azX()}, +I(a,b){A.azX()}, +ghw(a){return new A.eW(this.aR4(0),A.w(this).h("eW>"))}, +aR4(a){var s=this +return function(){var r=a +var q=0,p=1,o,n,m,l +return function $async$ghw(b,c,d){if(c===1){o=d +q=p}while(true)switch(q){case 0:n=s.gdv(s),n=n.gar(n),m=A.w(s),m=m.h("@<1>").ak(m.y[1]).h("bK<1,2>") +case 2:if(!n.H()){q=3 +break}l=n.ga1(n) +q=4 +return b.b=new A.bK(l,s.i(0,l),m),1 +case 4:q=2 +break +case 3:return 0 +case 1:return b.c=o,3}}}}, +Ey(a,b,c,d){var s=A.D(c,d) +this.al(0,new A.azY(this,b,s)) +return s}, +$ibA:1} +A.azY.prototype={ +$2(a,b){var s=this.b.$2(a,b) +this.c.u(0,s.a,s.b)}, +$S(){return A.w(this.a).h("~(1,2)")}} +A.bV.prototype={ +gF(a){return this.b.length}, +ga60(){var s=this.$keys +if(s==null){s=Object.keys(this.a) +this.$keys=s}return s}, +aR(a,b){if(typeof b!="string")return!1 +if("__proto__"===b)return!1 +return this.a.hasOwnProperty(b)}, +i(a,b){if(!this.aR(0,b))return null +return this.b[this.a[b]]}, +al(a,b){var s,r,q=this.ga60(),p=this.b +for(s=q.length,r=0;r"))}, +gbm(a){return new A.CS(this.b,this.$ti.h("CS<2>"))}} +A.CS.prototype={ +gF(a){return this.a.length}, +gaA(a){return 0===this.a.length}, +gcT(a){return 0!==this.a.length}, +gar(a){var s=this.a +return new A.x9(s,s.length,this.$ti.h("x9<1>"))}} +A.x9.prototype={ +ga1(a){var s=this.d +return s==null?this.$ti.c.a(s):s}, +H(){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}} +A.cc.prototype={ +t6(){var s,r=this,q=r.$map +if(q==null){s=r.$ti +q=new A.zR(s.h("@<1>").ak(s.y[1]).h("zR<1,2>")) +A.btL(r.a,q) +r.$map=q}return q}, +aR(a,b){return this.t6().aR(0,b)}, +i(a,b){return this.t6().i(0,b)}, +al(a,b){this.t6().al(0,b)}, +gdv(a){var s=this.t6() +return new A.bk(s,A.w(s).h("bk<1>"))}, +gbm(a){return this.t6().gbm(0)}, +gF(a){return this.t6().a}} +A.LU.prototype={ +E(a,b){A.bej()}, +I(a,b){A.bej()}, +P(a,b){A.bej()}} +A.i4.prototype={ +gF(a){return this.b}, +gaA(a){return this.b===0}, +gcT(a){return this.b!==0}, +gar(a){var s,r=this,q=r.$keys +if(q==null){q=Object.keys(r.a) +r.$keys=q}s=q +return new A.x9(s,s.length,r.$ti.h("x9<1>"))}, +G(a,b){if(typeof b!="string")return!1 +if("__proto__"===b)return!1 +return this.a.hasOwnProperty(b)}, +kD(a){return A.jc(this,this.$ti.c)}} +A.h8.prototype={ +gF(a){return this.a.length}, +gaA(a){return this.a.length===0}, +gcT(a){return this.a.length!==0}, +gar(a){var s=this.a +return new A.x9(s,s.length,this.$ti.h("x9<1>"))}, +t6(){var s,r,q,p,o=this,n=o.$map +if(n==null){s=o.$ti +n=new A.zR(s.h("@<1>").ak(s.c).h("zR<1,2>")) +for(s=o.a,r=s.length,q=0;q")}} +A.vn.prototype={ +$0(){return this.a.$1$0(this.$ti.y[0])}, +$1(a){return this.a.$1$1(a,this.$ti.y[0])}, +$2(a,b){return this.a.$1$2(a,b,this.$ti.y[0])}, +$S(){return A.btY(A.auX(this.a),this.$ti)}} +A.FC.prototype={ +gaV5(){var s=this.a +if(s instanceof A.fX)return s +return this.a=new A.fX(s)}, +gaXJ(){var s,r,q,p,o,n=this +if(n.c===1)return B.F +s=n.d +r=J.al(s) +q=r.gF(s)-J.bo(n.e)-n.f +if(q===0)return B.F +p=[] +for(o=0;o>>0}, +j(a){return"Closure '"+this.$_name+"' of "+("Instance of '"+A.aOr(this.a)+"'")}} +A.ahu.prototype={ +j(a){return"Reading static variable '"+this.a+"' during its initialization"}} +A.aaS.prototype={ +j(a){return"RuntimeError: "+this.a}} +A.b5M.prototype={} +A.jI.prototype={ +gF(a){return this.a}, +gaA(a){return this.a===0}, +gcT(a){return this.a!==0}, +gdv(a){return new A.bk(this,A.w(this).h("bk<1>"))}, +gbm(a){var s=A.w(this) +return A.rI(new A.bk(this,s.h("bk<1>")),new A.aIh(this),s.c,s.y[1])}, +aR(a,b){var s,r +if(typeof b=="string"){s=this.b +if(s==null)return!1 +return s[b]!=null}else if(typeof b=="number"&&(b&0x3fffffff)===b){r=this.c +if(r==null)return!1 +return r[b]!=null}else return this.af5(b)}, +af5(a){var s=this.d +if(s==null)return!1 +return this.w5(s[this.w4(a)],a)>=0}, +acd(a,b){return new A.bk(this,A.w(this).h("bk<1>")).fk(0,new A.aIg(this,b))}, +I(a,b){J.lQ(b,new A.aIf(this))}, +i(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.af6(b)}, +af6(a){var s,r,q=this.d +if(q==null)return null +s=q[this.w4(a)] +r=this.w5(s,a) +if(r<0)return null +return s[r].b}, +u(a,b,c){var s,r,q=this +if(typeof b=="string"){s=q.b +q.a1S(s==null?q.b=q.RF():s,b,c)}else if(typeof b=="number"&&(b&0x3fffffff)===b){r=q.c +q.a1S(r==null?q.c=q.RF():r,b,c)}else q.af8(b,c)}, +af8(a,b){var s,r,q,p=this,o=p.d +if(o==null)o=p.d=p.RF() +s=p.w4(a) +r=o[s] +if(r==null)o[s]=[p.RH(a,b)] +else{q=p.w5(r,a) +if(q>=0)r[q].b=b +else r.push(p.RH(a,b))}}, +cU(a,b,c){var s,r,q=this +if(q.aR(0,b)){s=q.i(0,b) +return s==null?A.w(q).y[1].a(s):s}r=c.$0() +q.u(0,b,r) +return r}, +P(a,b){var s=this +if(typeof b=="string")return s.a7w(s.b,b) +else if(typeof b=="number"&&(b&0x3fffffff)===b)return s.a7w(s.c,b) +else return s.af7(b)}, +af7(a){var s,r,q,p,o=this,n=o.d +if(n==null)return null +s=o.w4(a) +r=n[s] +q=o.w5(r,a) +if(q<0)return null +p=r.splice(q,1)[0] +o.a9z(p) +if(r.length===0)delete n[s] +return p.b}, +af(a){var s=this +if(s.a>0){s.b=s.c=s.d=s.e=s.f=null +s.a=0 +s.RC()}}, +al(a,b){var s=this,r=s.e,q=s.r +for(;r!=null;){b.$2(r.a,r.b) +if(q!==s.r)throw A.d(A.db(s)) +r=r.c}}, +a1S(a,b,c){var s=a[b] +if(s==null)a[b]=this.RH(b,c) +else s.b=c}, +a7w(a,b){var s +if(a==null)return null +s=a[b] +if(s==null)return null +this.a9z(s) +delete a[b] +return s.b}, +RC(){this.r=this.r+1&1073741823}, +RH(a,b){var s,r=this,q=new A.aJp(a,b) +if(r.e==null)r.e=r.f=q +else{s=r.f +s.toString +q.d=s +r.f=s.c=q}++r.a +r.RC() +return q}, +a9z(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.RC()}, +w4(a){return J.a1(a)&1073741823}, +w5(a,b){var s,r +if(a==null)return-1 +s=a.length +for(r=0;r"]=s +delete s[""] +return s}} +A.aIh.prototype={ +$1(a){var s=this.a,r=s.i(0,a) +return r==null?A.w(s).y[1].a(r):r}, +$S(){return A.w(this.a).h("2(1)")}} +A.aIg.prototype={ +$1(a){return J.f(this.a.i(0,a),this.b)}, +$S(){return A.w(this.a).h("F(1)")}} +A.aIf.prototype={ +$2(a,b){this.a.u(0,a,b)}, +$S(){return A.w(this.a).h("~(1,2)")}} +A.aJp.prototype={} +A.bk.prototype={ +gF(a){return this.a.a}, +gaA(a){return this.a.a===0}, +gar(a){var s=this.a,r=new A.FR(s,s.r,this.$ti.h("FR<1>")) +r.c=s.e +return r}, +G(a,b){return this.a.aR(0,b)}, +al(a,b){var s=this.a,r=s.e,q=s.r +for(;r!=null;){b.$1(r.a) +if(q!==s.r)throw A.d(A.db(s)) +r=r.c}}} +A.FR.prototype={ +ga1(a){return this.d}, +H(){var s,r=this,q=r.a +if(r.b!==q.r)throw A.d(A.db(q)) +s=r.c +if(s==null){r.d=null +return!1}else{r.d=s.a +r.c=s.c +return!0}}} +A.O7.prototype={ +w4(a){return A.mR(a)&1073741823}, +w5(a,b){var s,r,q +if(a==null)return-1 +s=a.length +for(r=0;r0;){--q;--s +j[q]=r[s]}}return A.A8(j,k)}} +A.anT.prototype={ +Hr(){return[this.a,this.b]}, +k(a,b){if(b==null)return!1 +return b instanceof A.anT&&this.$s===b.$s&&J.f(this.a,b.a)&&J.f(this.b,b.b)}, +gL(a){return A.a6(this.$s,this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.anU.prototype={ +Hr(){return[this.a,this.b,this.c]}, +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.anU&&s.$s===b.$s&&J.f(s.a,b.a)&&J.f(s.b,b.b)&&J.f(s.c,b.c)}, +gL(a){var s=this +return A.a6(s.$s,s.a,s.b,s.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.anV.prototype={ +Hr(){return this.a}, +k(a,b){if(b==null)return!1 +return b instanceof A.anV&&this.$s===b.$s&&A.bNv(this.a,b.a)}, +gL(a){return A.a6(this.$s,A.bM(this.a),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.rC.prototype={ +j(a){return"RegExp/"+this.a+"/"+this.b.flags}, +ga6r(){var s=this,r=s.c +if(r!=null)return r +r=s.b +return s.c=A.bfq(s.a,r.multiline,!r.ignoreCase,r.unicode,r.dotAll,!0)}, +ga6q(){var s=this,r=s.d +if(r!=null)return r +r=s.b +return s.d=A.bfq(s.a+"|()",r.multiline,!r.ignoreCase,r.unicode,r.dotAll,!0)}, +iU(a){var s=this.b.exec(a) +if(s==null)return null +return new A.Jt(s)}, +amu(a){var s=this.iU(a) +if(s!=null)return s.b[0] +return null}, +Ct(a,b,c){var s=b.length +if(c>s)throw A.d(A.du(c,0,s,null,null)) +return new A.af8(this,b,c)}, +Cs(a,b){return this.Ct(0,b,0)}, +Ql(a,b){var s,r=this.ga6r() +r.lastIndex=b +s=r.exec(a) +if(s==null)return null +return new A.Jt(s)}, +ax2(a,b){var s,r=this.ga6q() +r.lastIndex=b +s=r.exec(a) +if(s==null)return null +if(s.pop()!=null)return null +return new A.Jt(s)}, +u_(a,b,c){if(c<0||c>b.length)throw A.d(A.du(c,0,b.length,null,null)) +return this.ax2(b,c)}, +$ia9N:1} +A.Jt.prototype={ +gp5(a){return this.b.index}, +gi7(a){var s=this.b +return s.index+s[0].length}, +wP(a){return this.b[a]}, +i(a,b){return this.b[b]}, +a_L(a){var s,r,q,p=A.b([],t._m) +for(s=a.length,r=this.b,q=0;q=55296&&s<=56319){s=m.charCodeAt(q) +s=s>=56320&&s<=57343}else s=!1}else s=!1}else s=!1 +o=(s?o+1:o)+1}n.c=o +return!0}}n.b=n.d=null +return!1}} +A.HU.prototype={ +gi7(a){return this.a+this.c.length}, +i(a,b){if(b!==0)A.X(A.a9C(b,null,null)) +return this.c}, +wP(a){if(a!==0)throw A.d(A.a9C(a,null,null)) +return this.c}, +$iAf:1, +gp5(a){return this.a}} +A.aqw.prototype={ +gar(a){return new A.b76(this.a,this.b,this.c)}, +ga9(a){var s=this.a,r=this.b,q=s.indexOf(r,this.c) +if(q>=0)return new A.HU(q,s,r) +throw A.d(A.cy())}} +A.b76.prototype={ +H(){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.HU(s,m,o) +q.c=r===q.c?r+1:r +return!0}, +ga1(a){var s=this.d +s.toString +return s}} +A.b__.prototype={ +bl(){var s=this.b +if(s===this)throw A.d(new A.m8("Local '"+this.a+"' has not been initialized.")) +return s}, +bb(){var s=this.b +if(s===this)throw A.d(A.vx(this.a)) +return s}, +shb(a){var s=this +if(s.b!==s)throw A.d(new A.m8("Local '"+s.a+"' has already been initialized.")) +s.b=a}} +A.b2P.prototype={ +xX(){var s,r=this,q=r.b +if(q===r){s=r.c.$0() +if(r.b!==r)throw A.d(new A.m8("Local '"+r.a+u.N)) +r.b=s +q=s}return q}} +A.Av.prototype={ +ghh(a){return B.agp}, +lo(a,b,c){A.nJ(a,b,c) +return c==null?new Uint8Array(a,b):new Uint8Array(a,b,c)}, +TI(a){return this.lo(a,0,null)}, +abl(a,b,c){A.nJ(a,b,c) +return new Uint16Array(a,b,c)}, +abi(a,b,c){A.nJ(a,b,c) +return new Int32Array(a,b,c)}, +Jp(a,b,c){throw A.d(A.af("Int64List not supported by dart2js."))}, +abg(a,b,c){A.nJ(a,b,c) +return new Float32Array(a,b,c)}, +abh(a,b,c){A.nJ(a,b,c) +return new Float64Array(a,b,c)}, +im(a,b,c){A.nJ(a,b,c) +return c==null?new DataView(a,b):new DataView(a,b,c)}, +abf(a){return this.im(a,0,null)}, +$ieq:1, +$iAv:1, +$iDF:1} +A.Pe.prototype={ +gdl(a){return a.buffer}, +gjY(a){return a.byteLength}, +gfY(a){return a.byteOffset}, +gVl(a){return a.BYTES_PER_ELEMENT}, +aCc(a,b,c,d){var s=A.du(b,0,c,d,null) +throw A.d(s)}, +a2H(a,b,c,d){if(b>>>0!==b||b>c)this.aCc(a,b,c,d)}, +$idL:1} +A.Pb.prototype={ +ghh(a){return B.agq}, +gVl(a){return 1}, +fe(a,b,c){return a.getFloat32(b,B.n===c)}, +a_h(a,b,c){return a.getFloat64(b,B.n===c)}, +a_k(a,b,c){return a.getInt32(b,B.n===c)}, +G0(a,b,c){throw A.d(A.af("Int64 accessor not supported by dart2js."))}, +a_m(a,b){return a.getInt8(b)}, +ez(a,b,c){return a.getUint16(b,B.n===c)}, +ec(a,b,c){return a.getUint32(b,B.n===c)}, +j5(a,b){return a.getUint8(b)}, +a07(a,b,c,d){throw A.d(A.af("Int64 accessor not supported by dart2js."))}, +oY(a,b,c,d){return a.setUint32(b,c,B.n===d)}, +ald(a,b,c){return this.oY(a,b,c,B.hd)}, +$ieq:1, +$icX:1} +A.Gi.prototype={ +gF(a){return a.length}, +a8h(a,b,c,d,e){var s,r,q=a.length +this.a2H(a,b,q,"start") +this.a2H(a,c,q,"end") +if(b>c)throw A.d(A.du(b,0,c,null,null)) +s=c-b +if(e<0)throw A.d(A.c3(e,null)) +r=d.length +if(r-e0){s=Date.now()-r.c +if(s>(p+1)*o)p=B.f.eY(s,o)}q.c=p +r.d.$1(q)}, +$S:28} +A.TR.prototype={ +fC(a,b){var s,r=this +if(b==null)b=r.$ti.c.a(b) +if(!r.b)r.a.pc(b) +else{s=r.a +if(r.$ti.h("an<1>").b(b))s.a2x(b) +else s.xx(b)}}, +lq(a,b){var s +if(b==null)b=A.Dw(a) +s=this.a +if(this.b)s.jc(a,b) +else s.H0(a,b)}, +$iLQ:1} +A.b8C.prototype={ +$1(a){return this.a.$2(0,a)}, +$S:36} +A.b8D.prototype={ +$2(a,b){this.a.$2(1,new A.MT(a,b))}, +$S:352} +A.b9D.prototype={ +$2(a,b){this.a(a,b)}, +$S:353} +A.fH.prototype={ +ga1(a){return this.b}, +aGJ(a,b){var s,r,q +a=a +b=b +s=this.a +for(;!0;)try{r=s(this,a,b) +return r}catch(q){b=q +a=1}}, +H(){var s,r,q,p,o=this,n=null,m=0 +for(;!0;){s=o.d +if(s!=null)try{if(s.H()){o.b=J.bBc(s) +return!0}else o.d=null}catch(r){n=r +m=1 +o.d=null}q=o.aGJ(m,n) +if(1===q)return!0 +if(0===q){o.b=null +p=o.e +if(p==null||p.length===0){o.a=A.brI +return!1}o.a=p.pop() +m=0 +n=null +continue}if(2===q){m=0 +n=null +continue}if(3===q){n=o.c +o.c=null +p=o.e +if(p==null||p.length===0){o.b=null +o.a=A.brI +throw n +return!1}o.a=p.pop() +m=1 +continue}throw A.d(A.ad("sync*"))}return!1}, +vd(a){var s,r,q=this +if(a instanceof A.eW){s=a.a() +r=q.e +if(r==null)r=q.e=[] +r.push(q.a) +q.a=s +return 2}else{q.d=J.az(a) +return 2}}} +A.eW.prototype={ +gar(a){return new A.fH(this.a(),this.$ti.h("fH<1>"))}} +A.a_d.prototype={ +j(a){return A.j(this.a)}, +$idF:1, +gGA(){return this.b}} +A.f8.prototype={} +A.CF.prototype={ +t9(){}, +ta(){}} +A.x_.prototype={ +ga0s(a){return new A.f8(this,A.w(this).h("f8<1>"))}, +gxS(){return this.c<4}, +a7y(a){var s=a.CW,r=a.ch +if(s==null)this.d=r +else s.ch=r +if(r==null)this.e=s +else r.CW=s +a.CW=a +a.ch=a}, +a8M(a,b,c,d){var s,r,q,p,o,n,m=this +if((m.c&4)!==0)return A.brf(c,A.w(m).c) +s=A.w(m) +r=$.aK +q=d?1:0 +p=b!=null?32:0 +o=new A.CF(m,A.aZi(r,a,s.c),A.bhh(r,b),A.bhg(r,c),r,q|p,s.h("CF<1>")) +o.CW=o +o.ch=o +o.ay=m.c&1 +n=m.e +m.e=o +o.ch=null +o.CW=n +if(n==null)m.d=o +else n.ch=o +if(m.d===o)A.auU(m.a) +return o}, +a7k(a){var s,r=this +A.w(r).h("CF<1>").a(a) +if(a.ch===a)return null +s=a.ay +if((s&2)!==0)a.ay=s|4 +else{r.a7y(a) +if((r.c&2)===0&&r.d==null)r.Ph()}return null}, +a7m(a){}, +a7o(a){}, +xp(){if((this.c&4)!==0)return new A.nq("Cannot add new events after calling close") +return new A.nq("Cannot add new events while doing an addStream")}, +E(a,b){if(!this.gxS())throw A.d(this.xp()) +this.qG(b)}, +J8(a,b){var s +A.fI(a,"error",t.K) +if(!this.gxS())throw A.d(this.xp()) +s=$.aK.vL(a,b) +if(s!=null){a=s.a +b=s.b}else if(b==null)b=A.Dw(a) +this.ti(a,b)}, +J7(a){return this.J8(a,null)}, +T(a){var s,r,q=this +if((q.c&4)!==0){s=q.r +s.toString +return s}if(!q.gxS())throw A.d(q.xp()) +q.c|=4 +r=q.r +if(r==null)r=q.r=new A.aM($.aK,t.D) +q.th() +return r}, +QC(a){var s,r,q,p=this,o=p.c +if((o&2)!==0)throw A.d(A.ad(u.c)) +s=p.d +if(s==null)return +r=o&1 +p.c=o^3 +for(;s!=null;){o=s.ay +if((o&1)===r){s.ay=o|2 +a.$1(s) +o=s.ay^=1 +q=s.ch +if((o&4)!==0)p.a7y(s) +s.ay&=4294967293 +s=q}else s=s.ch}p.c&=4294967293 +if(p.d==null)p.Ph()}, +Ph(){if((this.c&4)!==0){var s=this.r +if((s.a&30)===0)s.pc(null)}A.auU(this.b)}} +A.qt.prototype={ +gxS(){return A.x_.prototype.gxS.call(this)&&(this.c&2)===0}, +xp(){if((this.c&2)!==0)return new A.nq(u.c) +return this.apX()}, +qG(a){var s=this,r=s.d +if(r==null)return +if(r===s.e){s.c|=2 +r.pb(0,a) +s.c&=4294967293 +if(s.d==null)s.Ph() +return}s.QC(new A.b7a(s,a))}, +ti(a,b){if(this.d==null)return +this.QC(new A.b7c(this,a,b))}, +th(){var s=this +if(s.d!=null)s.QC(new A.b7b(s)) +else s.r.pc(null)}} +A.b7a.prototype={ +$1(a){a.pb(0,this.b)}, +$S(){return this.a.$ti.h("~(i_<1>)")}} +A.b7c.prototype={ +$1(a){a.xo(this.b,this.c)}, +$S(){return this.a.$ti.h("~(i_<1>)")}} +A.b7b.prototype={ +$1(a){a.Pv()}, +$S(){return this.a.$ti.h("~(i_<1>)")}} +A.jp.prototype={ +qG(a){var s,r +for(s=this.d,r=this.$ti.h("qn<1>");s!=null;s=s.ch)s.qv(new A.qn(a,r))}, +ti(a,b){var s +for(s=this.d;s!=null;s=s.ch)s.qv(new A.J1(a,b))}, +th(){var s=this.d +if(s!=null)for(;s!=null;s=s.ch)s.qv(B.jb) +else this.r.pc(null)}} +A.aFl.prototype={ +$0(){var s,r,q +try{this.a.t2(this.b.$0())}catch(q){s=A.b2(q) +r=A.bC(q) +A.auM(this.a,s,r)}}, +$S:0} +A.aFk.prototype={ +$0(){var s,r,q +try{this.a.t2(this.b.$0())}catch(q){s=A.b2(q) +r=A.bC(q) +A.auM(this.a,s,r)}}, +$S:0} +A.aFj.prototype={ +$0(){var s,r,q,p=this,o=p.a +if(o==null){p.c.a(null) +p.b.t2(null)}else try{p.b.t2(o.$0())}catch(q){s=A.b2(q) +r=A.bC(q) +A.auM(p.b,s,r)}}, +$S:0} +A.aFn.prototype={ +$2(a,b){var s=this,r=s.a,q=--r.b +if(r.a!=null){r.a=null +r.d=a +r.c=b +if(q===0||s.c)s.d.jc(a,b)}else if(q===0&&!s.c){q=r.d +q.toString +r=r.c +r.toString +s.d.jc(q,r)}}, +$S:107} +A.aFm.prototype={ +$1(a){var s,r,q,p,o,n,m=this,l=m.a,k=--l.b,j=l.a +if(j!=null){J.kc(j,m.b,a) +if(J.f(k,0)){l=m.d +s=A.b([],l.h("v<0>")) +for(q=j,p=q.length,o=0;o")) +r=b==null?1:3 +this.xq(new A.nF(s,r,a,b,this.$ti.h("@<1>").ak(c).h("nF<1,2>"))) +return s}, +cu(a,b){return this.k7(a,null,b)}, +a9d(a,b,c){var s=new A.aM($.aK,c.h("aM<0>")) +this.xq(new A.nF(s,19,a,b,this.$ti.h("@<1>").ak(c).h("nF<1,2>"))) +return s}, +yE(a,b){var s=this.$ti,r=$.aK,q=new A.aM(r,s) +if(r!==B.aE)a=A.bsY(a,r) +this.xq(new A.nF(q,2,b,a,s.h("@<1>").ak(s.c).h("nF<1,2>"))) +return q}, +ts(a){return this.yE(a,null)}, +l4(a){var s=this.$ti,r=$.aK,q=new A.aM(r,s) +if(r!==B.aE)a=r.MH(a,t.z) +this.xq(new A.nF(q,8,a,null,s.h("@<1>").ak(s.c).h("nF<1,2>"))) +return q}, +aHF(a){this.a=this.a&1|16 +this.c=a}, +H7(a){this.a=a.a&30|this.a&1 +this.c=a.c}, +xq(a){var s=this,r=s.a +if(r<=3){a.a=s.c +s.c=a}else{if((r&4)!==0){r=s.c +if((r.a&24)===0){r.xq(a) +return}s.H7(r)}s.b.wR(new A.b2a(s,a))}}, +RZ(a){var s,r,q,p,o,n=this,m={} +m.a=a +if(a==null)return +s=n.a +if(s<=3){r=n.c +n.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){s=n.c +if((s.a&24)===0){s.RZ(a) +return}n.H7(s)}m.a=n.Ij(a) +n.b.wR(new A.b2h(m,n))}}, +I9(){var s=this.c +this.c=null +return this.Ij(s)}, +Ij(a){var s,r,q +for(s=a,r=null;s!=null;r=s,s=q){q=s.a +s.a=r}return r}, +Pl(a){var s,r,q,p=this +p.a^=2 +try{a.k7(new A.b2e(p),new A.b2f(p),t.P)}catch(q){s=A.b2(q) +r=A.bC(q) +A.iC(new A.b2g(p,s,r))}}, +t2(a){var s,r=this,q=r.$ti +if(q.h("an<1>").b(a))if(q.b(a))A.bhj(a,r) +else r.Pl(a) +else{s=r.I9() +r.a=8 +r.c=a +A.Je(r,s)}}, +xx(a){var s=this,r=s.I9() +s.a=8 +s.c=a +A.Je(s,r)}, +jc(a,b){var s=this.I9() +this.aHF(A.awy(a,b)) +A.Je(this,s)}, +pc(a){if(this.$ti.h("an<1>").b(a)){this.a2x(a) +return}this.atR(a)}, +atR(a){this.a^=2 +this.b.wR(new A.b2c(this,a))}, +a2x(a){if(this.$ti.b(a)){A.bMZ(a,this) +return}this.Pl(a)}, +H0(a,b){this.a^=2 +this.b.wR(new A.b2b(this,a,b))}, +aZk(a,b,c){var s,r=this,q={} +if((r.a&24)!==0){q=new A.aM($.aK,r.$ti) +q.pc(r) +return q}s=new A.aM($.aK,r.$ti) +q.a=null +q.a=A.dn(b,new A.b2m(s,b)) +r.k7(new A.b2n(q,r,s),new A.b2o(q,s),t.P) +return s}, +aZj(a,b){return this.aZk(0,b,null)}, +$ian:1} +A.b2a.prototype={ +$0(){A.Je(this.a,this.b)}, +$S:0} +A.b2h.prototype={ +$0(){A.Je(this.b,this.a.a)}, +$S:0} +A.b2e.prototype={ +$1(a){var s,r,q,p=this.a +p.a^=2 +try{p.xx(p.$ti.c.a(a))}catch(q){s=A.b2(q) +r=A.bC(q) +p.jc(s,r)}}, +$S:38} +A.b2f.prototype={ +$2(a,b){this.a.jc(a,b)}, +$S:33} +A.b2g.prototype={ +$0(){this.a.jc(this.b,this.c)}, +$S:0} +A.b2d.prototype={ +$0(){A.bhj(this.a.a,this.b)}, +$S:0} +A.b2c.prototype={ +$0(){this.a.xx(this.b)}, +$S:0} +A.b2b.prototype={ +$0(){this.a.jc(this.b,this.c)}, +$S:0} +A.b2k.prototype={ +$0(){var s,r,q,p,o,n,m=this,l=null +try{q=m.a.a +l=q.b.b.Zi(q.d,t.z)}catch(p){s=A.b2(p) +r=A.bC(p) +q=m.c&&m.b.a.c.a===s +o=m.a +if(q)o.c=m.b.a.c +else o.c=A.awy(s,r) +o.b=!0 +return}if(l instanceof A.aM&&(l.a&24)!==0){if((l.a&16)!==0){q=m.a +q.c=l.c +q.b=!0}return}if(t.L0.b(l)){n=m.b.a +q=m.a +q.c=l.cu(new A.b2l(n),t.z) +q.b=!1}}, +$S:0} +A.b2l.prototype={ +$1(a){return this.a}, +$S:357} +A.b2j.prototype={ +$0(){var s,r,q,p,o,n +try{q=this.a +p=q.a +o=p.$ti +q.c=p.b.b.Zj(p.d,this.b,o.h("2/"),o.c)}catch(n){s=A.b2(n) +r=A.bC(n) +q=this.a +q.c=A.awy(s,r) +q.b=!0}}, +$S:0} +A.b2i.prototype={ +$0(){var s,r,q,p,o,n,m=this +try{s=m.a.a.c +p=m.b +if(p.a.aUY(s)&&p.a.e!=null){p.c=p.a.aS2(s) +p.b=!1}}catch(o){r=A.b2(o) +q=A.bC(o) +p=m.a.a.c +n=m.b +if(p.a===r)n.c=p +else n.c=A.awy(r,q) +n.b=!0}}, +$S:0} +A.b2m.prototype={ +$0(){this.a.jc(new A.adB("Future not completed",this.b),B.uM)}, +$S:0} +A.b2n.prototype={ +$1(a){var s=this.a.a +if(s.b!=null){s.bq(0) +this.c.xx(a)}}, +$S(){return this.b.$ti.h("bR(1)")}} +A.b2o.prototype={ +$2(a,b){var s=this.a.a +if(s.b!=null){s.bq(0) +this.b.jc(a,b)}}, +$S:33} +A.afv.prototype={} +A.cY.prototype={ +gF(a){var s={},r=new A.aM($.aK,t.wJ) +s.a=0 +this.hf(new A.aUf(s,this),!0,new A.aUg(s,r),r.gPD()) +return r}, +ga9(a){var s=new A.aM($.aK,A.w(this).h("aM")),r=this.hf(null,!0,new A.aUd(s),s.gPD()) +r.zG(new A.aUe(this,r,s)) +return s}, +pI(a,b){var s=new A.aM($.aK,A.w(this).h("aM")),r=this.hf(null,!0,new A.aUb(null,s),s.gPD()) +r.zG(new A.aUc(this,b,r,s)) +return s}} +A.aUf.prototype={ +$1(a){++this.a.a}, +$S(){return A.w(this.b).h("~(cY.T)")}} +A.aUg.prototype={ +$0(){this.b.t2(this.a.a)}, +$S:0} +A.aUd.prototype={ +$0(){var s,r,q,p +try{q=A.cy() +throw A.d(q)}catch(p){s=A.b2(p) +r=A.bC(p) +A.auM(this.a,s,r)}}, +$S:0} +A.aUe.prototype={ +$1(a){A.bse(this.b,this.c,a)}, +$S(){return A.w(this.a).h("~(cY.T)")}} +A.aUb.prototype={ +$0(){var s,r,q,p +try{q=A.cy() +throw A.d(q)}catch(p){s=A.b2(p) +r=A.bC(p) +A.auM(this.b,s,r)}}, +$S:0} +A.aUc.prototype={ +$1(a){var s=this.c,r=this.d +A.bQg(new A.aU9(this.b,a),new A.aUa(s,r,a),A.bOu(s,r))}, +$S(){return A.w(this.a).h("~(cY.T)")}} +A.aU9.prototype={ +$0(){return this.a.$1(this.b)}, +$S:6} +A.aUa.prototype={ +$1(a){if(a)A.bse(this.a,this.b,this.c)}, +$S:113} +A.Sj.prototype={ +hf(a,b,c,d){return this.a.hf(a,b,c,d)}, +tY(a,b,c){return this.hf(a,null,b,c)}} +A.acw.prototype={} +A.JV.prototype={ +ga0s(a){return new A.lH(this,A.w(this).h("lH<1>"))}, +gaF3(){if((this.b&8)===0)return this.a +return this.a.gTd()}, +Qg(){var s,r=this +if((r.b&8)===0){s=r.a +return s==null?r.a=new A.JG(A.w(r).h("JG<1>")):s}s=r.a.gTd() +return s}, +gyc(){var s=this.a +return(this.b&8)!==0?s.gTd():s}, +Pe(){if((this.b&4)!==0)return new A.nq("Cannot add event after closing") +return new A.nq("Cannot add event while adding a stream")}, +a3Y(){var s=this.c +if(s==null)s=this.c=(this.b&2)!==0?$.Di():new A.aM($.aK,t.D) +return s}, +E(a,b){if(this.b>=4)throw A.d(this.Pe()) +this.pb(0,b)}, +J8(a,b){var s,r,q=this +A.fI(a,"error",t.K) +if(q.b>=4)throw A.d(q.Pe()) +s=$.aK.vL(a,b) +if(s!=null){a=s.a +b=s.b}else b=A.Dw(a) +r=q.b +if((r&1)!==0)q.ti(a,b) +else if((r&3)===0)q.Qg().E(0,new A.J1(a,b))}, +J7(a){return this.J8(a,null)}, +T(a){var s=this,r=s.b +if((r&4)!==0)return s.a3Y() +if(r>=4)throw A.d(s.Pe()) +s.a2X() +return s.a3Y()}, +a2X(){var s=this.b|=4 +if((s&1)!==0)this.th() +else if((s&3)===0)this.Qg().E(0,B.jb)}, +pb(a,b){var s=this,r=s.b +if((r&1)!==0)s.qG(b) +else if((r&3)===0)s.Qg().E(0,new A.qn(b,A.w(s).h("qn<1>")))}, +a8M(a,b,c,d){var s,r,q,p,o=this +if((o.b&3)!==0)throw A.d(A.ad("Stream has already been listened to.")) +s=A.bMF(o,a,b,c,d,A.w(o).c) +r=o.gaF3() +q=o.b|=1 +if((q&8)!==0){p=o.a +p.sTd(s) +p.j2(0)}else o.a=s +s.aHH(r) +s.QQ(new A.b74(o)) +return s}, +a7k(a){var s,r,q,p,o,n,m,l=this,k=null +if((l.b&8)!==0)k=l.a.bq(0) +l.a=null +l.b=l.b&4294967286|2 +s=l.r +if(s!=null)if(k==null)try{r=s.$0() +if(t.r.b(r))k=r}catch(o){q=A.b2(o) +p=A.bC(o) +n=new A.aM($.aK,t.D) +n.H0(q,p) +k=n}else k=k.l4(s) +m=new A.b73(l) +if(k!=null)k=k.l4(m) +else m.$0() +return k}, +a7m(a){if((this.b&8)!==0)this.a.kC(0) +A.auU(this.e)}, +a7o(a){if((this.b&8)!==0)this.a.j2(0) +A.auU(this.f)}} +A.b74.prototype={ +$0(){A.auU(this.a.d)}, +$S:0} +A.b73.prototype={ +$0(){var s=this.a.c +if(s!=null&&(s.a&30)===0)s.pc(null)}, +$S:0} +A.aqJ.prototype={ +qG(a){this.gyc().pb(0,a)}, +ti(a,b){this.gyc().xo(a,b)}, +th(){this.gyc().Pv()}} +A.afw.prototype={ +qG(a){this.gyc().qv(new A.qn(a,this.$ti.h("qn<1>")))}, +ti(a,b){this.gyc().qv(new A.J1(a,b))}, +th(){this.gyc().qv(B.jb)}} +A.wZ.prototype={} +A.JZ.prototype={} +A.lH.prototype={ +gL(a){return(A.eT(this.a)^892482866)>>>0}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.lH&&b.a===this.a}} +A.x2.prototype={ +RN(){return this.w.a7k(this)}, +t9(){this.w.a7m(this)}, +ta(){this.w.a7o(this)}} +A.i_.prototype={ +aHH(a){var s=this +if(a==null)return +s.r=a +if(a.c!=null){s.e=(s.e|128)>>>0 +a.G9(s)}}, +zG(a){this.a=A.aZi(this.d,a,A.w(this).h("i_.T"))}, +nt(a,b){var s,r,q=this,p=q.e +if((p&8)!==0)return +s=(p+256|4)>>>0 +q.e=s +if(p<256){r=q.r +if(r!=null)if(r.a===1)r.a=3}if((p&4)===0&&(s&64)===0)q.QQ(q.gHY())}, +kC(a){return this.nt(0,null)}, +j2(a){var s=this,r=s.e +if((r&8)!==0)return +if(r>=256){r=s.e=r-256 +if(r<256)if((r&128)!==0&&s.r.c!=null)s.r.G9(s) +else{r=(r&4294967291)>>>0 +s.e=r +if((r&64)===0)s.QQ(s.gI_())}}}, +bq(a){var s=this,r=(s.e&4294967279)>>>0 +s.e=r +if((r&8)===0)s.Pi() +r=s.f +return r==null?$.Di():r}, +Pi(){var s,r=this,q=r.e=(r.e|8)>>>0 +if((q&128)!==0){s=r.r +if(s.a===1)s.a=3}if((q&64)===0)r.r=null +r.f=r.RN()}, +pb(a,b){var s=this,r=s.e +if((r&8)!==0)return +if(r<64)s.qG(b) +else s.qv(new A.qn(b,A.w(s).h("qn")))}, +xo(a,b){var s=this.e +if((s&8)!==0)return +if(s<64)this.ti(a,b) +else this.qv(new A.J1(a,b))}, +Pv(){var s=this,r=s.e +if((r&8)!==0)return +r=(r|2)>>>0 +s.e=r +if(r<64)s.th() +else s.qv(B.jb)}, +t9(){}, +ta(){}, +RN(){return null}, +qv(a){var s,r=this,q=r.r +if(q==null)q=r.r=new A.JG(A.w(r).h("JG")) +q.E(0,a) +s=r.e +if((s&128)===0){s=(s|128)>>>0 +r.e=s +if(s<256)q.G9(r)}}, +qG(a){var s=this,r=s.e +s.e=(r|64)>>>0 +s.d.Fu(s.a,a,A.w(s).h("i_.T")) +s.e=(s.e&4294967231)>>>0 +s.Pp((r&4)!==0)}, +ti(a,b){var s,r=this,q=r.e,p=new A.aZk(r,a,b) +if((q&1)!==0){r.e=(q|16)>>>0 +r.Pi() +s=r.f +if(s!=null&&s!==$.Di())s.l4(p) +else p.$0()}else{p.$0() +r.Pp((q&4)!==0)}}, +th(){var s,r=this,q=new A.aZj(r) +r.Pi() +r.e=(r.e|16)>>>0 +s=r.f +if(s!=null&&s!==$.Di())s.l4(q) +else q.$0()}, +QQ(a){var s=this,r=s.e +s.e=(r|64)>>>0 +a.$0() +s.e=(s.e&4294967231)>>>0 +s.Pp((r&4)!==0)}, +Pp(a){var s,r,q=this,p=q.e +if((p&128)!==0&&q.r.c==null){p=q.e=(p&4294967167)>>>0 +if((p&4)!==0)if(p<256){s=q.r +s=s==null?null:s.c==null +s=s!==!1}else s=!1 +else s=!1 +if(s){p=(p&4294967291)>>>0 +q.e=p}}for(;!0;a=r){if((p&8)!==0){q.r=null +return}r=(p&4)!==0 +if(a===r)break +q.e=(p^64)>>>0 +if(r)q.t9() +else q.ta() +p=(q.e&4294967231)>>>0 +q.e=p}if((p&128)!==0&&p<256)q.r.G9(q)}} +A.aZk.prototype={ +$0(){var s,r,q,p=this.a,o=p.e +if((o&8)!==0&&(o&16)===0)return +p.e=(o|64)>>>0 +s=p.b +o=this.b +r=t.K +q=p.d +if(t.hK.b(s))q.aZa(s,o,this.c,r,t.Km) +else q.Fu(s,o,r) +p.e=(p.e&4294967231)>>>0}, +$S:0} +A.aZj.prototype={ +$0(){var s=this.a,r=s.e +if((r&16)===0)return +s.e=(r|74)>>>0 +s.d.Ft(s.c) +s.e=(s.e&4294967231)>>>0}, +$S:0} +A.JW.prototype={ +hf(a,b,c,d){return this.a.a8M(a,d,c,b===!0)}, +oF(a){return this.hf(a,null,null,null)}, +Eu(a,b){return this.hf(a,null,null,b)}, +tY(a,b,c){return this.hf(a,null,b,c)}} +A.ahK.prototype={ +gl_(a){return this.a}, +sl_(a,b){return this.a=b}} +A.qn.prototype={ +YG(a){a.qG(this.b)}} +A.J1.prototype={ +YG(a){a.ti(this.b,this.c)}} +A.b0V.prototype={ +YG(a){a.th()}, +gl_(a){return null}, +sl_(a,b){throw A.d(A.ad("No events after a done."))}} +A.JG.prototype={ +G9(a){var s=this,r=s.a +if(r===1)return +if(r>=1){s.a=1 +return}A.iC(new A.b4x(s,a)) +s.a=1}, +E(a,b){var s=this,r=s.c +if(r==null)s.b=s.c=b +else{r.sl_(0,b) +s.c=b}}} +A.b4x.prototype={ +$0(){var s,r,q=this.a,p=q.a +q.a=0 +if(p===3)return +s=q.b +r=s.gl_(s) +q.b=r +if(r==null)q.c=null +s.YG(this.b)}, +$S:0} +A.UM.prototype={ +zG(a){}, +nt(a,b){var s=this.a +if(s>=0)this.a=s+2}, +kC(a){return this.nt(0,null)}, +j2(a){var s=this,r=s.a-2 +if(r<0)return +if(r===0){s.a=1 +A.iC(s.ga6C())}else s.a=r}, +bq(a){this.a=-1 +this.c=null +return $.Di()}, +aDZ(){var s,r=this,q=r.a-1 +if(q===0){r.a=-1 +s=r.c +if(s!=null){r.c=null +r.b.Ft(s)}}else r.a=q}} +A.aqt.prototype={} +A.CM.prototype={ +hf(a,b,c,d){return A.brf(c,this.$ti.c)}, +oF(a){return this.hf(a,null,null,null)}, +tY(a,b,c){return this.hf(a,null,b,c)}} +A.b8I.prototype={ +$0(){return this.a.jc(this.b,this.c)}, +$S:0} +A.b8H.prototype={ +$2(a,b){A.bOt(this.a,this.b,a,b)}, +$S:107} +A.b8J.prototype={ +$0(){return this.a.t2(this.b)}, +$S:0} +A.nE.prototype={ +hf(a,b,c,d){var s=A.w(this),r=s.h("nE.T"),q=$.aK,p=b===!0?1:0,o=d!=null?32:0 +r=new A.Jc(this,A.aZi(q,a,r),A.bhh(q,d),A.bhg(q,c),q,p|o,s.h("@").ak(r).h("Jc<1,2>")) +r.x=this.a.tY(r.gaz8(),r.gazf(),r.gazz()) +return r}, +oF(a){return this.hf(a,null,null,null)}, +Eu(a,b){return this.hf(a,null,null,b)}, +tY(a,b,c){return this.hf(a,null,b,c)}} +A.Jc.prototype={ +pb(a,b){if((this.e&2)!==0)return +this.apY(0,b)}, +xo(a,b){if((this.e&2)!==0)return +this.apZ(a,b)}, +t9(){var s=this.x +if(s!=null)s.kC(0)}, +ta(){var s=this.x +if(s!=null)s.j2(0)}, +RN(){var s=this.x +if(s!=null){this.x=null +return s.bq(0)}return null}, +az9(a){this.w.a50(a,this)}, +azA(a,b){this.xo(a,b)}, +azg(){this.Pv()}} +A.u8.prototype={ +a50(a,b){var s,r,q,p=null +try{p=this.b.$1(a)}catch(q){s=A.b2(q) +r=A.bC(q) +A.bs8(b,s,r) +return}if(p)b.pb(0,a)}} +A.tZ.prototype={ +a50(a,b){var s,r,q,p=null +try{p=this.b.$1(a)}catch(q){s=A.b2(q) +r=A.bC(q) +A.bs8(b,s,r) +return}b.pb(0,p)}} +A.at6.prototype={} +A.at5.prototype={$iCB:1} +A.b9u.prototype={ +$0(){A.bmz(this.a,this.b)}, +$S:0} +A.aoR.prototype={ +gaGY(){return B.ak9}, +gz4(){return this}, +Ft(a){var s,r,q +try{if(B.aE===$.aK){a.$0() +return}A.bt_(null,null,this,a)}catch(q){s=A.b2(q) +r=A.bC(q) +A.b9t(s,r)}}, +Fu(a,b){var s,r,q +try{if(B.aE===$.aK){a.$1(b) +return}A.bt1(null,null,this,a,b)}catch(q){s=A.b2(q) +r=A.bC(q) +A.b9t(s,r)}}, +aZa(a,b,c){var s,r,q +try{if(B.aE===$.aK){a.$2(b,c) +return}A.bt0(null,null,this,a,b,c)}catch(q){s=A.b2(q) +r=A.bC(q) +A.b9t(s,r)}}, +aMX(a,b){return new A.b5X(this,a,b)}, +aMW(a,b,c,d){return new A.b5V(this,a,c,d,b)}, +TO(a){return new A.b5W(this,a)}, +TP(a,b){return new A.b5Y(this,a,b)}, +i(a,b){return null}, +L7(a,b){A.b9t(a,b)}, +Zi(a){if($.aK===B.aE)return a.$0() +return A.bt_(null,null,this,a)}, +Zj(a,b){if($.aK===B.aE)return a.$1(b) +return A.bt1(null,null,this,a,b)}, +aic(a,b,c){if($.aK===B.aE)return a.$2(b,c) +return A.bt0(null,null,this,a,b,c)}, +MH(a){return a}, +MI(a){return a}, +MG(a){return a}, +vL(a,b){return null}, +wR(a){A.b9v(null,null,this,a)}, +acK(a,b){return A.bqt(a,b)}, +acC(a,b){return A.bLE(a,b)}} +A.b5X.prototype={ +$0(){return this.a.Zi(this.b,this.c)}, +$S(){return this.c.h("0()")}} +A.b5V.prototype={ +$2(a,b){var s=this +return s.a.aic(s.b,a,b,s.e,s.c,s.d)}, +$S(){return this.e.h("@<0>").ak(this.c).ak(this.d).h("1(2,3)")}} +A.b5W.prototype={ +$0(){return this.a.Ft(this.b)}, +$S:0} +A.b5Y.prototype={ +$1(a){return this.a.Fu(this.b,a,this.c)}, +$S(){return this.c.h("~(0)")}} +A.tX.prototype={ +gF(a){return this.a}, +gaA(a){return this.a===0}, +gcT(a){return this.a!==0}, +gdv(a){return new A.CO(this,A.w(this).h("CO<1>"))}, +gbm(a){var s=A.w(this) +return A.rI(new A.CO(this,s.h("CO<1>")),new A.b2u(this),s.c,s.y[1])}, +aR(a,b){var s,r +if(typeof b=="string"&&b!=="__proto__"){s=this.b +return s==null?!1:s[b]!=null}else if(typeof b=="number"&&(b&1073741823)===b){r=this.c +return r==null?!1:r[b]!=null}else return this.xy(b)}, +xy(a){var s=this.d +if(s==null)return!1 +return this.lk(this.a4q(s,a),a)>=0}, +I(a,b){b.al(0,new A.b2t(this))}, +i(a,b){var s,r,q +if(typeof b=="string"&&b!=="__proto__"){s=this.b +r=s==null?null:A.bhk(s,b) +return r}else if(typeof b=="number"&&(b&1073741823)===b){q=this.c +r=q==null?null:A.bhk(q,b) +return r}else return this.a4m(0,b)}, +a4m(a,b){var s,r,q=this.d +if(q==null)return null +s=this.a4q(q,b) +r=this.lk(s,b) +return r<0?null:s[r+1]}, +u(a,b,c){var s,r,q=this +if(typeof b=="string"&&b!=="__proto__"){s=q.b +q.a2Z(s==null?q.b=A.bhl():s,b,c)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +q.a2Z(r==null?q.c=A.bhl():r,b,c)}else q.a8a(b,c)}, +a8a(a,b){var s,r,q,p=this,o=p.d +if(o==null)o=p.d=A.bhl() +s=p.lW(a) +r=o[s] +if(r==null){A.bhm(o,s,[a,b]);++p.a +p.e=null}else{q=p.lk(r,a) +if(q>=0)r[q+1]=b +else{r.push(a,b);++p.a +p.e=null}}}, +cU(a,b,c){var s,r,q=this +if(q.aR(0,b)){s=q.i(0,b) +return s==null?A.w(q).y[1].a(s):s}r=c.$0() +q.u(0,b,r) +return r}, +P(a,b){var s=this +if(typeof b=="string"&&b!=="__proto__")return s.t1(s.b,b) +else if(typeof b=="number"&&(b&1073741823)===b)return s.t1(s.c,b) +else return s.o5(0,b)}, +o5(a,b){var s,r,q,p,o=this,n=o.d +if(n==null)return null +s=o.lW(b) +r=n[s] +q=o.lk(r,b) +if(q<0)return null;--o.a +o.e=null +p=r.splice(q,2)[1] +if(0===r.length)delete n[s] +return p}, +al(a,b){var s,r,q,p,o,n=this,m=n.PI() +for(s=m.length,r=A.w(n).y[1],q=0;q"))}, +G(a,b){return this.a.aR(0,b)}} +A.Jh.prototype={ +ga1(a){var s=this.d +return s==null?this.$ti.c.a(s):s}, +H(){var s=this,r=s.b,q=s.c,p=s.a +if(r!==p.e)throw A.d(A.db(p)) +else if(q>=r.length){s.d=null +return!1}else{s.d=r[q] +s.c=q+1 +return!0}}} +A.VJ.prototype={ +i(a,b){if(!this.y.$1(b))return null +return this.anU(b)}, +u(a,b,c){this.anW(b,c)}, +aR(a,b){if(!this.y.$1(b))return!1 +return this.anT(b)}, +P(a,b){if(!this.y.$1(b))return null +return this.anV(b)}, +w4(a){return this.x.$1(a)&1073741823}, +w5(a,b){var s,r,q +if(a==null)return-1 +s=a.length +for(r=this.w,q=0;q"))}, +BM(a){return new A.qo(a.h("qo<0>"))}, +RJ(){return this.BM(t.z)}, +gar(a){return new A.k1(this,this.uS(),A.w(this).h("k1<1>"))}, +gF(a){return this.a}, +gaA(a){return this.a===0}, +gcT(a){return this.a!==0}, +G(a,b){var s,r +if(typeof b=="string"&&b!=="__proto__"){s=this.b +return s==null?!1:s[b]!=null}else if(typeof b=="number"&&(b&1073741823)===b){r=this.c +return r==null?!1:r[b]!=null}else return this.PN(b)}, +PN(a){var s=this.d +if(s==null)return!1 +return this.lk(s[this.lW(a)],a)>=0}, +E(a,b){var s,r,q=this +if(typeof b=="string"&&b!=="__proto__"){s=q.b +return q.Bb(s==null?q.b=A.bhn():s,b)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +return q.Bb(r==null?q.c=A.bhn():r,b)}else return q.ho(0,b)}, +ho(a,b){var s,r,q=this,p=q.d +if(p==null)p=q.d=A.bhn() +s=q.lW(b) +r=p[s] +if(r==null)p[s]=[b] +else{if(q.lk(r,b)>=0)return!1 +r.push(b)}++q.a +q.e=null +return!0}, +I(a,b){var s +for(s=J.az(b);s.H();)this.E(0,s.ga1(s))}, +P(a,b){var s=this +if(typeof b=="string"&&b!=="__proto__")return s.t1(s.b,b) +else if(typeof b=="number"&&(b&1073741823)===b)return s.t1(s.c,b) +else return s.o5(0,b)}, +o5(a,b){var s,r,q,p=this,o=p.d +if(o==null)return!1 +s=p.lW(b) +r=o[s] +q=p.lk(r,b) +if(q<0)return!1;--p.a +p.e=null +r.splice(q,1) +if(0===r.length)delete o[s] +return!0}, +af(a){var s=this +if(s.a>0){s.b=s.c=s.d=s.e=null +s.a=0}}, +uS(){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.e +if(h!=null)return h +h=A.bc(i.a,null,!1,t.z) +s=i.b +if(s!=null){r=Object.getOwnPropertyNames(s) +q=r.length +for(p=0,o=0;o=r.length){s.d=null +return!1}else{s.d=r[q] +s.c=q+1 +return!0}}} +A.lJ.prototype={ +xU(){return new A.lJ(A.w(this).h("lJ<1>"))}, +BM(a){return new A.lJ(a.h("lJ<0>"))}, +RJ(){return this.BM(t.z)}, +gar(a){var s=this,r=new A.xb(s,s.r,A.w(s).h("xb<1>")) +r.c=s.e +return r}, +gF(a){return this.a}, +gaA(a){return this.a===0}, +gcT(a){return this.a!==0}, +G(a,b){var s,r +if(typeof b=="string"&&b!=="__proto__"){s=this.b +if(s==null)return!1 +return s[b]!=null}else if(typeof b=="number"&&(b&1073741823)===b){r=this.c +if(r==null)return!1 +return r[b]!=null}else return this.PN(b)}, +PN(a){var s=this.d +if(s==null)return!1 +return this.lk(s[this.lW(a)],a)>=0}, +al(a,b){var s=this,r=s.e,q=s.r +for(;r!=null;){b.$1(r.a) +if(q!==s.r)throw A.d(A.db(s)) +r=r.b}}, +ga9(a){var s=this.e +if(s==null)throw A.d(A.ad("No elements")) +return s.a}, +ga_(a){var s=this.f +if(s==null)throw A.d(A.ad("No elements")) +return s.a}, +E(a,b){var s,r,q=this +if(typeof b=="string"&&b!=="__proto__"){s=q.b +return q.Bb(s==null?q.b=A.bhs():s,b)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +return q.Bb(r==null?q.c=A.bhs():r,b)}else return q.ho(0,b)}, +ho(a,b){var s,r,q=this,p=q.d +if(p==null)p=q.d=A.bhs() +s=q.lW(b) +r=p[s] +if(r==null)p[s]=[q.Py(b)] +else{if(q.lk(r,b)>=0)return!1 +r.push(q.Py(b))}return!0}, +P(a,b){var s=this +if(typeof b=="string"&&b!=="__proto__")return s.t1(s.b,b) +else if(typeof b=="number"&&(b&1073741823)===b)return s.t1(s.c,b) +else return s.o5(0,b)}, +o5(a,b){var s,r,q,p,o=this,n=o.d +if(n==null)return!1 +s=o.lW(b) +r=n[s] +q=o.lk(r,b) +if(q<0)return!1 +p=r.splice(q,1)[0] +if(0===r.length)delete n[s] +o.a3_(p) +return!0}, +xI(a,b){var s,r,q,p,o=this,n=o.e +for(;n!=null;n=r){s=n.a +r=n.b +q=o.r +p=a.$1(s) +if(q!==o.r)throw A.d(A.db(o)) +if(!0===p)o.P(0,s)}}, +af(a){var s=this +if(s.a>0){s.b=s.c=s.d=s.e=s.f=null +s.a=0 +s.Px()}}, +Bb(a,b){if(a[b]!=null)return!1 +a[b]=this.Py(b) +return!0}, +t1(a,b){var s +if(a==null)return!1 +s=a[b] +if(s==null)return!1 +this.a3_(s) +delete a[b] +return!0}, +Px(){this.r=this.r+1&1073741823}, +Py(a){var s,r=this,q=new A.b3z(a) +if(r.e==null)r.e=r.f=q +else{s=r.f +s.toString +q.c=s +r.f=s.b=q}++r.a +r.Px() +return q}, +a3_(a){var s=this,r=a.c,q=a.b +if(r==null)s.e=q +else r.b=q +if(q==null)s.f=r +else q.c=r;--s.a +s.Px()}, +lW(a){return J.a1(a)&1073741823}, +lk(a,b){var s,r +if(a==null)return-1 +s=a.length +for(r=0;r"))}, +gF(a){return J.bo(this.a)}, +i(a,b){return J.mT(this.a,b)}} +A.aJq.prototype={ +$2(a,b){this.a.u(0,this.b.a(a),this.c.a(b))}, +$S:249} +A.A2.prototype={ +P(a,b){if(b.n7$!==this)return!1 +this.a9y(b) +return!0}, +G(a,b){return t.cS.b(b)&&this===b.n7$}, +gar(a){var s=this +return new A.Jp(s,s.a,s.c,s.$ti.h("Jp<1>"))}, +gF(a){return this.b}, +ga9(a){var s +if(this.b===0)throw A.d(A.ad("No such element")) +s=this.c +s.toString +return s}, +ga_(a){var s +if(this.b===0)throw A.d(A.ad("No such element")) +s=this.c.n9$ +s.toString +return s}, +gaA(a){return this.b===0}, +Rh(a,b,c){var s,r,q=this +if(b.n7$!=null)throw A.d(A.ad("LinkedListEntry is already in a LinkedList"));++q.a +b.n7$=q +s=q.b +if(s===0){b.n8$=b +q.c=b.n9$=b +q.b=s+1 +return}r=a.n9$ +r.toString +b.n9$=r +b.n8$=a +a.n9$=r.n8$=b +if(c&&a==q.c)q.c=b +q.b=s+1}, +a9y(a){var s,r,q=this;++q.a +s=a.n8$ +s.n9$=a.n9$ +a.n9$.n8$=s +r=--q.b +a.n7$=a.n8$=a.n9$=null +if(r===0)q.c=null +else if(a===q.c)q.c=s}} +A.Jp.prototype={ +ga1(a){var s=this.c +return s==null?this.$ti.c.a(s):s}, +H(){var s=this,r=s.a +if(s.b!==r.a)throw A.d(A.db(s)) +if(r.b!==0)r=s.e&&s.d===r.ga9(0) +else r=!0 +if(r){s.c=null +return!1}s.e=!0 +r=s.d +s.c=r +s.d=r.n8$ +return!0}} +A.mb.prototype={ +gl_(a){var s=this.n7$ +if(s==null||s.ga9(0)===this.n8$)return null +return this.n8$}, +gah_(){var s=this.n7$ +if(s==null||this===s.ga9(0))return null +return this.n9$}} +A.O.prototype={ +gar(a){return new A.cR(a,this.gF(a),A.b8(a).h("cR"))}, +cA(a,b){return this.i(a,b)}, +al(a,b){var s,r=this.gF(a) +for(s=0;s=0;--s){r=this.i(a,s) +if(b.$1(r))return r +if(q!==this.gF(a))throw A.d(A.db(a))}if(c!=null)return c.$0() +throw A.d(A.cy())}, +cj(a,b){var s +if(this.gF(a)===0)return"" +s=A.aUh("",a,b) +return s.charCodeAt(0)==0?s:s}, +mq(a){return this.cj(a,"")}, +mz(a,b){return new A.bg(a,b,A.b8(a).h("bg"))}, +jo(a,b,c){return new A.W(a,b,A.b8(a).h("@").ak(c).h("W<1,2>"))}, +fz(a,b){return A.fj(a,b,null,A.b8(a).h("O.E"))}, +bE(a,b){return A.fj(a,0,A.fI(b,"count",t.S),A.b8(a).h("O.E"))}, +ig(a,b){var s,r,q,p,o=this +if(o.gaA(a)){s=A.b8(a).h("O.E") +return b?J.FA(0,s):J.O3(0,s)}r=o.i(a,0) +q=A.bc(o.gF(a),r,b,A.b8(a).h("O.E")) +for(p=1;p").ak(b).h("hk<1,2>"))}, +eQ(a){var s,r=this +if(r.gF(a)===0)throw A.d(A.cy()) +s=r.i(a,r.gF(a)-1) +r.sF(a,r.gF(a)-1) +return s}, +X(a,b){var s=A.ab(a,!0,A.b8(a).h("O.E")) +B.b.I(s,b) +return s}, +cI(a,b,c){var s=this.gF(a) +if(c==null)c=s +A.dl(b,c,s,null,null) +return A.iN(this.nO(a,b,c),!0,A.b8(a).h("O.E"))}, +jE(a,b){return this.cI(a,b,null)}, +nO(a,b,c){A.dl(b,c,this.gF(a),null,null) +return A.fj(a,b,c,A.b8(a).h("O.E"))}, +hX(a,b,c){A.dl(b,c,this.gF(a),null,null) +if(c>b)this.Pw(a,b,c)}, +kU(a,b,c,d){var s,r=d==null?A.b8(a).h("O.E").a(d):d +A.dl(b,c,this.gF(a),null,null) +for(s=b;s").b(d)){r=e +q=d}else{p=J.xH(d,e) +q=p.ig(p,!1) +r=0}p=J.al(q) +if(r+s>p.gF(q))throw A.d(A.bnf()) +if(r=0;--o)this.u(a,b+o,p.i(q,r+o)) +else for(o=0;o0?p:0)) +if(s.gF(c)!==r){n.sF(a,n.gF(a)-r) +throw A.d(A.db(c))}o=b+r +if(o"))}, +Ey(a,b,c,d){var s,r,q,p,o,n=A.D(c,d) +for(s=J.az(this.gdv(a)),r=A.b8(a).h("bE.V");s.H();){q=s.ga1(s) +p=this.i(a,q) +o=b.$2(q,p==null?r.a(p):p) +n.u(0,o.a,o.b)}return n}, +aaR(a,b){var s,r +for(s=J.az(b);s.H();){r=s.ga1(s) +this.u(a,r.a,r.b)}}, +MM(a,b){var s,r,q,p,o=A.b8(a),n=A.b([],o.h("v")) +for(s=J.az(this.gdv(a)),o=o.h("bE.V");s.H();){r=s.ga1(s) +q=this.i(a,r) +if(b.$2(r,q==null?o.a(q):q))n.push(r)}for(o=n.length,p=0;p").ak(s.h("bE.V")).h("VL<1,2>"))}, +j(a){return A.bfH(a)}, +$ibA:1} +A.aK2.prototype={ +$2(a,b){J.kc(this.a,a,b)}, +$S(){return A.b8(this.a).h("~(bE.K,bE.V)")}} +A.aK3.prototype={ +$1(a){var s=this.a,r=J.bG(s,a) +if(r==null)r=A.b8(s).h("bE.V").a(r) +s=A.b8(s) +return new A.bK(a,r,s.h("@").ak(s.h("bE.V")).h("bK<1,2>"))}, +$S(){return A.b8(this.a).h("bK(bE.K)")}} +A.aK4.prototype={ +$2(a,b){var s,r=this.a +if(!r.a)this.b.a+=", " +r.a=!1 +r=this.b +s=A.j(a) +s=r.a+=s +r.a=s+": " +s=A.j(b) +r.a+=s}, +$S:93} +A.VL.prototype={ +gF(a){return J.bo(this.a)}, +gaA(a){return J.kd(this.a)}, +gcT(a){return J.l4(this.a)}, +ga9(a){var s=this.a,r=J.bS(s) +s=r.i(s,J.lR(r.gdv(s))) +return s==null?this.$ti.y[1].a(s):s}, +ga_(a){var s=this.a,r=J.bS(s) +s=r.i(s,J.Do(r.gdv(s))) +return s==null?this.$ti.y[1].a(s):s}, +gar(a){var s=this.a,r=this.$ti +return new A.al9(J.az(J.avG(s)),s,r.h("@<1>").ak(r.y[1]).h("al9<1,2>"))}} +A.al9.prototype={ +H(){var s=this,r=s.a +if(r.H()){s.c=J.bG(s.b,r.ga1(r)) +return!0}s.c=null +return!1}, +ga1(a){var s=this.c +return s==null?this.$ti.y[1].a(s):s}} +A.ase.prototype={ +u(a,b,c){throw A.d(A.af("Cannot modify unmodifiable map"))}, +I(a,b){throw A.d(A.af("Cannot modify unmodifiable map"))}, +P(a,b){throw A.d(A.af("Cannot modify unmodifiable map"))}, +cU(a,b,c){throw A.d(A.af("Cannot modify unmodifiable map"))}} +A.OF.prototype={ +vn(a,b,c){var s=this.a +return s.vn(s,b,c)}, +i(a,b){return this.a.i(0,b)}, +u(a,b,c){this.a.u(0,b,c)}, +I(a,b){this.a.I(0,b)}, +cU(a,b,c){return this.a.cU(0,b,c)}, +aR(a,b){return this.a.aR(0,b)}, +al(a,b){this.a.al(0,b)}, +gaA(a){var s=this.a +return s.gaA(s)}, +gcT(a){var s=this.a +return s.gcT(s)}, +gF(a){var s=this.a +return s.gF(s)}, +gdv(a){var s=this.a +return s.gdv(s)}, +P(a,b){return this.a.P(0,b)}, +j(a){var s=this.a +return s.j(s)}, +gbm(a){var s=this.a +return s.gbm(s)}, +ghw(a){var s=this.a +return s.ghw(s)}, +Ey(a,b,c,d){var s=this.a +return s.Ey(s,b,c,d)}, +$ibA:1} +A.Cu.prototype={ +vn(a,b,c){var s=this.a +return new A.Cu(s.vn(s,b,c),b.h("@<0>").ak(c).h("Cu<1,2>"))}} +A.UO.prototype={ +aCy(a,b){var s=this +s.b=b +s.a=a +if(a!=null)a.b=s +if(b!=null)b.a=s}, +aKH(){var s,r=this,q=r.a +if(q!=null)q.b=r.b +s=r.b +if(s!=null)s.a=q +r.a=r.b=null}} +A.UN.prototype={ +a7t(a){var s,r,q=this +q.c=null +s=q.a +if(s!=null)s.b=q.b +r=q.b +if(r!=null)r.a=s +q.a=q.b=null +return q.d}, +hW(a){var s=this,r=s.c +if(r!=null)--r.b +s.c=null +s.aKH() +return s.d}, +H_(){return this}, +$ibmh:1, +gKu(){return this.d}} +A.UP.prototype={ +H_(){return null}, +a7t(a){throw A.d(A.cy())}, +gKu(){throw A.d(A.cy())}} +A.Mv.prototype={ +eq(a,b){return new A.qQ(this,this.$ti.h("@<1>").ak(b).h("qQ<1,2>"))}, +gF(a){return this.b}, +Cn(a){var s=this.a +new A.UN(this,a,s.$ti.h("UN<1>")).aCy(s,s.b);++this.b}, +eQ(a){var s=this.a.a.a7t(0);--this.b +return s}, +ga9(a){return this.a.b.gKu()}, +ga_(a){return this.a.a.gKu()}, +gaA(a){var s=this.a +return s.b===s}, +gar(a){return new A.aia(this,this.a.b,this.$ti.h("aia<1>"))}, +j(a){return A.pw(this,"{","}")}, +$iat:1} +A.aia.prototype={ +H(){var s=this,r=s.b,q=r==null?null:r.H_() +if(q==null){s.a=s.b=s.c=null +return!1}r=s.a +if(r!=q.c)throw A.d(A.db(r)) +s.c=q.d +s.b=q.b +return!0}, +ga1(a){var s=this.c +return s==null?this.$ti.c.a(s):s}} +A.Or.prototype={ +eq(a,b){return new A.qQ(this,this.$ti.h("@<1>").ak(b).h("qQ<1,2>"))}, +gar(a){var s=this +return new A.Jq(s,s.c,s.d,s.b,s.$ti.h("Jq<1>"))}, +gaA(a){return this.b===this.c}, +gF(a){return(this.c-this.b&this.a.length-1)>>>0}, +ga9(a){var s=this,r=s.b +if(r===s.c)throw A.d(A.cy()) +r=s.a[r] +return r==null?s.$ti.c.a(r):r}, +ga_(a){var s=this,r=s.b,q=s.c +if(r===q)throw A.d(A.cy()) +r=s.a +r=r[(q-1&r.length-1)>>>0] +return r==null?s.$ti.c.a(r):r}, +cA(a,b){var s,r=this +A.aHy(b,r.gF(0),r,null,null) +s=r.a +s=s[(r.b+b&s.length-1)>>>0] +return s==null?r.$ti.c.a(s):s}, +ig(a,b){var s,r,q,p,o,n,m=this,l=m.a.length-1,k=(m.c-m.b&l)>>>0 +if(k===0){s=m.$ti.c +return b?J.FA(0,s):J.O3(0,s)}s=m.$ti.c +r=A.bc(k,m.ga9(0),b,s) +for(q=m.a,p=m.b,o=0;o>>0] +r[o]=n==null?s.a(n):n}return r}, +eT(a){return this.ig(0,!0)}, +I(a,b){var s,r,q,p,o,n,m,l,k=this,j=k.$ti +if(j.h("H<1>").b(b)){s=J.bo(b) +r=k.gF(0) +q=r+s +p=k.a +o=p.length +if(q>=o){n=A.bc(A.bnM(q+B.f.dU(q,1)),null,!1,j.h("1?")) +k.c=k.aLH(n) +k.a=n +k.b=0 +B.b.c3(n,r,q,b,0) +k.c+=s}else{j=k.c +m=o-j +if(s>>0)if(J.f(r.a[s],b)){r.o5(0,s);++r.d +return!0}return!1}, +af(a){var s,r,q=this,p=q.b,o=q.c +if(p!==o){for(s=q.a,r=s.length-1;p!==o;p=(p+1&r)>>>0)s[p]=null +q.b=q.c=0;++q.d}}, +j(a){return A.pw(this,"{","}")}, +Cn(a){var s=this,r=s.b,q=s.a +r=s.b=(r-1&q.length-1)>>>0 +q[r]=a +if(r===s.c)s.a4U();++s.d}, +ue(){var s,r,q=this,p=q.b +if(p===q.c)throw A.d(A.cy());++q.d +s=q.a +r=s[p] +if(r==null)r=q.$ti.c.a(r) +s[p]=null +q.b=(p+1&s.length-1)>>>0 +return r}, +eQ(a){var s,r=this,q=r.b,p=r.c +if(q===p)throw A.d(A.cy());++r.d +q=r.a +p=r.c=(p-1&q.length-1)>>>0 +s=q[p] +if(s==null)s=r.$ti.c.a(s) +q[p]=null +return s}, +ho(a,b){var s=this,r=s.a,q=s.c +r[q]=b +r=(q+1&r.length-1)>>>0 +s.c=r +if(s.b===r)s.a4U();++s.d}, +o5(a,b){var s,r,q,p=this,o=p.a,n=o.length-1,m=p.b,l=p.c +if((b-m&n)>>>0<(l-b&n)>>>0){for(s=b;s!==m;s=r){r=(s-1&n)>>>0 +o[s]=o[r]}o[m]=null +p.b=(m+1&n)>>>0 +return(b+1&n)>>>0}else{m=p.c=(l-1&n)>>>0 +for(s=b;s!==m;s=q){q=(s+1&n)>>>0 +o[s]=o[q]}o[m]=null +return b}}, +a4U(){var s=this,r=A.bc(s.a.length*2,null,!1,s.$ti.h("1?")),q=s.a,p=s.b,o=q.length-p +B.b.c3(r,0,o,q,p) +B.b.c3(r,o,o+s.b,s.a,0) +s.b=0 +s.c=s.a.length +s.a=r}, +aLH(a){var s,r,q=this,p=q.b,o=q.c,n=q.a +if(p<=o){s=o-p +B.b.c3(a,0,s,n,p) +return s}else{r=n.length-p +B.b.c3(a,0,r,n,p) +B.b.c3(a,r,r+q.c,q.a,0) +return q.c+r}}} +A.Jq.prototype={ +ga1(a){var s=this.e +return s==null?this.$ti.c.a(s):s}, +H(){var s,r=this,q=r.a +if(r.c!==q.d)A.X(A.db(q)) +s=r.d +if(s===r.b){r.e=null +return!1}q=q.a +r.e=q[s] +r.d=(s+1&q.length-1)>>>0 +return!0}} +A.mz.prototype={ +gaA(a){return this.gF(this)===0}, +gcT(a){return this.gF(this)!==0}, +eq(a,b){return A.aSu(this,null,A.w(this).c,b)}, +I(a,b){var s +for(s=J.az(b);s.H();)this.E(0,s.ga1(s))}, +ahF(a){var s +for(s=J.az(a);s.H();)this.P(0,s.ga1(s))}, +pN(a,b){var s,r,q=this.kD(0) +for(s=this.gar(this);s.H();){r=s.ga1(s) +if(!b.G(0,r))q.P(0,r)}return q}, +ig(a,b){return A.ab(this,b,A.w(this).c)}, +eT(a){return this.ig(0,!0)}, +jo(a,b,c){return new A.yZ(this,b,A.w(this).h("@<1>").ak(c).h("yZ<1,2>"))}, +j(a){return A.pw(this,"{","}")}, +al(a,b){var s +for(s=this.gar(this);s.H();)b.$1(s.ga1(s))}, +cj(a,b){var s,r,q=this.gar(this) +if(!q.H())return"" +s=J.i1(q.ga1(q)) +if(!q.H())return s +if(b.length===0){r=s +do r+=A.j(q.ga1(q)) +while(q.H())}else{r=s +do r=r+b+A.j(q.ga1(q)) +while(q.H())}return r.charCodeAt(0)==0?r:r}, +fk(a,b){var s +for(s=this.gar(this);s.H();)if(b.$1(s.ga1(s)))return!0 +return!1}, +bE(a,b){return A.bgT(this,b,A.w(this).c)}, +fz(a,b){return A.aT2(this,b,A.w(this).c)}, +ga9(a){var s=this.gar(this) +if(!s.H())throw A.d(A.cy()) +return s.ga1(s)}, +ga_(a){var s,r=this.gar(this) +if(!r.H())throw A.d(A.cy()) +do s=r.ga1(r) +while(r.H()) +return s}, +cA(a,b){var s,r +A.en(b,"index") +s=this.gar(this) +for(r=b;s.H();){if(r===0)return s.ga1(s);--r}throw A.d(A.fs(b,b-r,this,null,"index"))}, +$iat:1, +$iz:1, +$ibO:1} +A.JS.prototype={ +eq(a,b){return A.aSu(this,this.gRI(),A.w(this).c,b)}, +vA(a){var s,r,q=this.xU() +for(s=this.gar(this);s.H();){r=s.ga1(s) +if(!a.G(0,r))q.E(0,r)}return q}, +pN(a,b){var s,r,q=this.xU() +for(s=this.gar(this);s.H();){r=s.ga1(s) +if(b.G(0,r))q.E(0,r)}return q}, +kD(a){var s=this.xU() +s.I(0,this) +return s}} +A.asf.prototype={ +E(a,b){return A.bhI()}, +I(a,b){return A.bhI()}, +P(a,b){return A.bhI()}} +A.Iw.prototype={ +G(a,b){return this.a.G(0,b)}, +gF(a){return this.a.a}, +gar(a){var s=this.a +return A.cT(s,s.r,A.w(s).c)}, +kD(a){return this.a.kD(0)}} +A.aq7.prototype={} +A.kW.prototype={} +A.k5.prototype={ +aGt(a){var s=this,r=s.$ti +r=new A.k5(a,s.a,r.h("@<1>").ak(r.y[1]).h("k5<1,2>")) +r.b=s.b +r.c=s.c +return r}} +A.aq6.prototype={ +mP(a){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null,f=h.ghF() +if(f==null){h.PB(a,a) +return-1}s=h.gPA() +for(r=g,q=f,p=r,o=p,n=o,m=n;!0;){r=s.$2(q.a,a) +if(r>0){l=q.b +if(l==null)break +r=s.$2(l.a,a) +if(r>0){q.b=l.c +l.c=q +k=l.b +if(k==null){q=l +break}q=l +l=k}if(m==null)n=q +else m.b=q +m=q +q=l}else{if(r<0){j=q.c +if(j==null)break +r=s.$2(j.a,a) +if(r<0){q.c=j.b +j.b=q +i=j.c +if(i==null){q=j +break}q=j +j=i}if(o==null)p=q +else o.c=q}else break +o=q +q=j}}if(o!=null){o.c=q.b +q.b=p}if(m!=null){m.b=q.c +q.c=n}if(h.ghF()!==q){h.shF(q);++h.c}return r}, +aJB(a){var s,r,q=a.b +for(s=a;q!=null;s=q,q=r){s.b=q.c +q.c=s +r=q.b}return s}, +a8z(a){var s,r,q=a.c +for(s=a;q!=null;s=q,q=r){s.c=q.b +q.b=s +r=q.c}return s}, +o5(a,b){var s,r,q,p,o=this +if(o.ghF()==null)return null +if(o.mP(b)!==0)return null +s=o.ghF() +r=s.b;--o.a +q=s.c +if(r==null)o.shF(q) +else{p=o.a8z(r) +p.c=q +o.shF(p)}++o.b +return s}, +P2(a,b){var s,r=this;++r.a;++r.b +s=r.ghF() +if(s==null){r.shF(a) +return}if(b<0){a.b=s +a.c=s.c +s.c=null}else{a.c=s +a.b=s.b +s.b=null}r.shF(a)}, +ga4b(){var s=this,r=s.ghF() +if(r==null)return null +s.shF(s.aJB(r)) +return s.ghF()}, +ga61(){var s=this,r=s.ghF() +if(r==null)return null +s.shF(s.a8z(r)) +return s.ghF()}, +auP(a){this.shF(null) +this.a=0;++this.b}, +xy(a){return this.Tb(a)&&this.mP(a)===0}, +PB(a,b){return this.gPA().$2(a,b)}, +Tb(a){return this.gb_S().$1(a)}} +A.S9.prototype={ +i(a,b){var s=this +if(!s.f.$1(b))return null +if(s.d!=null)if(s.mP(b)===0)return s.d.d +return null}, +P(a,b){var s +if(!this.f.$1(b))return null +s=this.o5(0,b) +if(s!=null)return s.d +return null}, +u(a,b,c){var s,r=this,q=r.mP(b) +if(q===0){r.d=r.d.aGt(c);++r.c +return}s=r.$ti +r.P2(new A.k5(c,b,s.h("@<1>").ak(s.y[1]).h("k5<1,2>")),q)}, +cU(a,b,c){var s,r,q,p,o=this,n=o.mP(b) +if(n===0)return o.d.d +s=o.b +r=o.c +q=c.$0() +if(s!==o.b)throw A.d(A.db(o)) +if(r!==o.c)n=o.mP(b) +p=o.$ti +o.P2(new A.k5(q,b,p.h("@<1>").ak(p.y[1]).h("k5<1,2>")),n) +return q}, +I(a,b){b.al(0,new A.aTp(this))}, +gaA(a){return this.d==null}, +gcT(a){return this.d!=null}, +al(a,b){var s,r,q=this.$ti +q=q.h("@<1>").ak(q.y[1]) +s=new A.D_(this,A.b([],q.h("v>")),this.c,q.h("D_<1,2>")) +for(;s.H();){r=s.ga1(0) +b.$2(r.a,r.b)}}, +gF(a){return this.a}, +aR(a,b){return this.xy(b)}, +gdv(a){var s=this.$ti +return new A.u2(this,s.h("@<1>").ak(s.h("k5<1,2>")).h("u2<1,2>"))}, +gbm(a){var s=this.$ti +return new A.D0(this,s.h("@<1>").ak(s.y[1]).h("D0<1,2>"))}, +ghw(a){var s=this.$ti +return new A.Xt(this,s.h("@<1>").ak(s.y[1]).h("Xt<1,2>"))}, +aRC(){if(this.d==null)return null +return this.ga4b().a}, +afB(){if(this.d==null)return null +return this.ga61().a}, +aUl(a){var s,r,q,p=this +if(p.d==null)return null +if(p.mP(a)<0)return p.d.a +s=p.d.b +if(s==null)return null +r=s.c +for(;r!=null;s=r,r=q)q=r.c +return s.a}, +aRD(a){var s,r,q,p=this +if(p.d==null)return null +if(p.mP(a)>0)return p.d.a +s=p.d.c +if(s==null)return null +r=s.b +for(;r!=null;s=r,r=q)q=r.b +return s.a}, +$ibA:1, +PB(a,b){return this.e.$2(a,b)}, +Tb(a){return this.f.$1(a)}, +ghF(){return this.d}, +gPA(){return this.e}, +shF(a){return this.d=a}} +A.aTq.prototype={ +$1(a){return this.a.b(a)}, +$S:74} +A.aTp.prototype={ +$2(a,b){this.a.u(0,a,b)}, +$S(){return this.a.$ti.h("~(1,2)")}} +A.qs.prototype={ +ga1(a){var s=this.b +if(s.length===0){A.w(this).h("qs.T").a(null) +return null}return this.QO(B.b.ga_(s))}, +aG0(a){var s,r,q=this.b +B.b.af(q) +s=this.a +s.mP(a) +r=s.ghF() +r.toString +q.push(r) +this.d=s.c}, +H(){var s,r,q=this,p=q.c,o=q.a,n=o.b +if(p!==n){if(p==null){q.c=n +s=o.ghF() +for(p=q.b;s!=null;){p.push(s) +s=s.b}return p.length!==0}throw A.d(A.db(o))}p=q.b +if(p.length===0)return!1 +if(q.d!==o.c)q.aG0(B.b.ga_(p).a) +s=B.b.ga_(p) +r=s.c +if(r!=null){for(;r!=null;){p.push(r) +r=r.b}return!0}p.pop() +while(!0){if(!(p.length!==0&&B.b.ga_(p).c===s))break +s=p.pop()}return p.length!==0}} +A.u2.prototype={ +gF(a){return this.a.a}, +gaA(a){return this.a.a===0}, +gar(a){var s=this.a,r=this.$ti +return new A.u3(s,A.b([],r.h("v<2>")),s.c,r.h("@<1>").ak(r.y[1]).h("u3<1,2>"))}, +G(a,b){return this.a.xy(b)}, +kD(a){var s=this.a,r=this.$ti,q=A.ac6(s.e,s.f,r.c) +q.a=s.a +q.d=q.a3o(s.d,r.y[1]) +return q}} +A.D0.prototype={ +gF(a){return this.a.a}, +gaA(a){return this.a.a===0}, +gar(a){var s=this.a,r=this.$ti +r=r.h("@<1>").ak(r.y[1]) +return new A.Xx(s,A.b([],r.h("v>")),s.c,r.h("Xx<1,2>"))}} +A.Xt.prototype={ +gF(a){return this.a.a}, +gaA(a){return this.a.a===0}, +gar(a){var s=this.a,r=this.$ti +r=r.h("@<1>").ak(r.y[1]) +return new A.D_(s,A.b([],r.h("v>")),s.c,r.h("D_<1,2>"))}} +A.u3.prototype={ +QO(a){return a.a}} +A.Xx.prototype={ +QO(a){return a.d}} +A.D_.prototype={ +QO(a){var s=this.$ti +return new A.bK(a.a,a.d,s.h("@<1>").ak(s.y[1]).h("bK<1,2>"))}} +A.HR.prototype={ +a6t(a){return A.ac6(new A.aTs(this,a),this.f,a)}, +xU(){return this.a6t(t.z)}, +eq(a,b){return A.aSu(this,this.gaDp(),this.$ti.c,b)}, +gar(a){var s=this.$ti +return new A.u3(this,A.b([],s.h("v>")),this.c,s.h("@<1>").ak(s.h("kW<1>")).h("u3<1,2>"))}, +gF(a){return this.a}, +gaA(a){return this.d==null}, +gcT(a){return this.d!=null}, +ga9(a){if(this.a===0)throw A.d(A.cy()) +return this.ga4b().a}, +ga_(a){if(this.a===0)throw A.d(A.cy()) +return this.ga61().a}, +G(a,b){return this.f.$1(b)&&this.mP(this.$ti.c.a(b))===0}, +E(a,b){return this.ho(0,b)}, +ho(a,b){var s=this.mP(b) +if(s===0)return!1 +this.P2(new A.kW(b,this.$ti.h("kW<1>")),s) +return!0}, +P(a,b){if(!this.f.$1(b))return!1 +return this.o5(0,this.$ti.c.a(b))!=null}, +I(a,b){var s +for(s=J.az(b);s.H();)this.ho(0,s.ga1(s))}, +zz(a){var s=this +if(!s.f.$1(a))return null +if(s.mP(s.$ti.c.a(a))!==0)return null +return s.d.a}, +pN(a,b){var s,r=this,q=r.$ti,p=A.ac6(r.e,r.f,q.c) +for(q=new A.u3(r,A.b([],q.h("v>")),r.c,q.h("@<1>").ak(q.h("kW<1>")).h("u3<1,2>"));q.H();){s=q.ga1(0) +if(b.G(0,s))p.ho(0,s)}return p}, +auW(){var s=this,r=s.$ti,q=A.ac6(s.e,s.f,r.c) +q.a=s.a +q.d=s.a3o(s.d,r.h("kW<1>")) +return q}, +a3o(a,b){var s +if(a==null)return null +s=new A.kW(a.a,this.$ti.h("kW<1>")) +new A.aTr(this,b).$2(a,s) +return s}, +kD(a){return this.auW()}, +j(a){return A.pw(this,"{","}")}, +$iat:1, +$ibO:1, +PB(a,b){return this.e.$2(a,b)}, +Tb(a){return this.f.$1(a)}, +ghF(){return this.d}, +gPA(){return this.e}, +shF(a){return this.d=a}} +A.aTt.prototype={ +$1(a){return this.a.b(a)}, +$S:74} +A.aTs.prototype={ +$2(a,b){var s=this.a,r=s.$ti.c +r.a(a) +r.a(b) +return s.e.$2(a,b)}, +$S(){return this.b.h("k(0,0)")}} +A.aTr.prototype={ +$2(a,b){var s,r,q,p,o,n=this.a.$ti.h("kW<1>") +do{s=a.b +r=a.c +if(s!=null){q=new A.kW(s.a,n) +b.b=q +this.$2(s,q)}p=r!=null +if(p){o=new A.kW(r.a,n) +b.c=o +b=o +a=r}}while(p)}, +$S(){return this.a.$ti.ak(this.b).h("~(1,kW<2>)")}} +A.Xu.prototype={} +A.Xv.prototype={} +A.Xw.prototype={} +A.Y8.prototype={} +A.Y9.prototype={} +A.aku.prototype={ +i(a,b){var s,r=this.b +if(r==null)return this.c.i(0,b) +else if(typeof b!="string")return null +else{s=r[b] +return typeof s=="undefined"?this.aFH(b):s}}, +gF(a){return this.b==null?this.c.a:this.xz().length}, +gaA(a){return this.gF(0)===0}, +gcT(a){return this.gF(0)>0}, +gdv(a){var s +if(this.b==null){s=this.c +return new A.bk(s,A.w(s).h("bk<1>"))}return new A.akv(this)}, +gbm(a){var s=this +if(s.b==null)return s.c.gbm(0) +return A.rI(s.xz(),new A.b3h(s),t.N,t.z)}, +u(a,b,c){var s,r,q=this +if(q.b==null)q.c.u(0,b,c) +else if(q.aR(0,b)){s=q.b +s[b]=c +r=q.a +if(r==null?s!=null:r!==s)r[b]=null}else q.aao().u(0,b,c)}, +I(a,b){b.al(0,new A.b3g(this))}, +aR(a,b){if(this.b==null)return this.c.aR(0,b) +if(typeof b!="string")return!1 +return Object.prototype.hasOwnProperty.call(this.a,b)}, +cU(a,b,c){var s +if(this.aR(0,b))return this.i(0,b) +s=c.$0() +this.u(0,b,s) +return s}, +P(a,b){if(this.b!=null&&!this.aR(0,b))return null +return this.aao().P(0,b)}, +al(a,b){var s,r,q,p,o=this +if(o.b==null)return o.c.al(0,b) +s=o.xz() +for(r=0;r"))}return s}, +G(a,b){return this.a.aR(0,b)}} +A.VG.prototype={ +T(a){var s,r,q=this +q.arh(0) +s=q.a +r=s.a +s.a="" +s=q.c +s.E(0,A.bsW(r.charCodeAt(0)==0?r:r,q.b)) +s.T(0)}} +A.b8e.prototype={ +$0(){var s,r +try{s=new TextDecoder("utf-8",{fatal:true}) +return s}catch(r){}return null}, +$S:240} +A.b8d.prototype={ +$0(){var s,r +try{s=new TextDecoder("utf-8",{fatal:false}) +return s}catch(r){}return null}, +$S:240} +A.a_6.prototype={ +vH(a){return B.Ip.dB(a)}, +hH(a,b){var s=B.tY.dB(b) +return s}, +gDd(){return B.tY}} +A.as7.prototype={ +dB(a){var s,r,q,p=A.dl(0,null,a.length,null,null)-0,o=new Uint8Array(p) +for(s=~this.a,r=0;r>>0!==0){if(!this.a)throw A.d(A.dj("Invalid value in input: "+A.j(q),p,p)) +return this.avn(a,0,n)}}return A.ns(a,0,n)}, +avn(a,b,c){var s,r,q,p,o +for(s=~this.b,r=J.al(a),q=b,p="";q>>0!==0?65533:o)}return p.charCodeAt(0)==0?p:p}} +A.a_7.prototype={ +kh(a){var s=t.NC.b(a)?a:new A.xo(a) +if(this.a)return new A.b1s(s.Jq(!1)) +else return new A.b6F(s)}} +A.b1s.prototype={ +T(a){this.a.T(0)}, +E(a,b){this.fB(b,0,J.bo(b),!1)}, +fB(a,b,c,d){var s,r,q=J.al(a) +A.dl(b,c,q.gF(a),null,null) +for(s=this.a,r=b;r>>0!==0){if(r>b)s.fB(a,b,r,!1) +s.E(0,B.Xt) +b=r+1}if(b>>0!==0)throw A.d(A.dj("Source contains non-ASCII bytes.",null,null)) +this.a.E(0,A.ns(b,0,null))}, +fB(a,b,c,d){var s=a.length +A.dl(b,c,s,null,null) +if(b=0){i=u.U.charCodeAt(h) +if(i===k)continue +k=i}else{if(h===-1){if(o<0){g=p==null?c:p.a.length +if(g==null)g=0 +o=g+(r-q) +n=r}++m +if(k===61)continue}k=i}if(h!==-2){if(p==null){p=new A.d8("") +g=p}else g=p +g.a+=B.d.am(a0,q,r) +f=A.cs(k) +g.a+=f +q=l +continue}}throw A.d(A.dj("Invalid base64 data",a0,r))}if(p!=null){g=B.d.am(a0,q,a2) +g=p.a+=g +f=g.length +if(o>=0)A.bkF(a0,n,a2,o,m,f) +else{e=B.f.bx(f-1,4)+1 +if(e===1)throw A.d(A.dj(b,a0,a2)) +for(;e<4;){g+="=" +p.a=g;++e}}g=p.a +return B.d.j1(a0,a1,a2,g.charCodeAt(0)==0?g:g)}d=a2-a1 +if(o>=0)A.bkF(a0,n,a2,o,m,d) +else{e=B.f.bx(d,4) +if(e===1)throw A.d(A.dj(b,a0,a2)) +if(e>1)a0=B.d.j1(a0,a2,a2,e===2?"==":"=")}return a0}} +A.a_A.prototype={ +kh(a){var s,r=u.U +if(t.NC.b(a)){s=a.Jq(!1) +return new A.b8b(s,new A.afM(r))}return new A.aYR(a,new A.aZh(r))}} +A.afM.prototype={ +acu(a,b){return new Uint8Array(b)}, +adC(a,b,c,d){var s,r=this,q=(r.a&3)+(c-b),p=B.f.cN(q,3),o=p*4 +if(d&&q-p*3>0)o+=4 +s=r.acu(0,o) +r.a=A.bMy(r.b,a,b,c,d,s,0,r.a) +if(o>0)return s +return null}} +A.aZh.prototype={ +acu(a,b){var s=this.c +if(s==null||s.length0)throw A.d(A.dj("Invalid length, must be multiple of four",b,c)) +this.a=-1}} +A.afL.prototype={ +E(a,b){var s,r=b.length +if(r===0)return +s=this.b.UD(0,b,0,r) +if(s!=null)this.a.E(0,s)}, +T(a){this.b.U5(0,null,null) +this.a.T(0)}, +fB(a,b,c,d){var s,r +A.dl(b,c,a.length,null,null) +if(b===c)return +s=this.b +r=s.UD(0,a,b,c) +if(r!=null)this.a.E(0,r) +if(d){s.U5(0,a,c) +this.a.T(0)}}} +A.Lj.prototype={ +fB(a,b,c,d){this.E(0,B.L.cI(a,b,c)) +if(d)this.T(0)}} +A.U5.prototype={ +E(a,b){this.a.E(0,b)}, +T(a){this.a.T(0)}} +A.agj.prototype={ +E(a,b){var s,r,q=this,p=q.b,o=q.c,n=J.al(b) +if(n.gF(b)>p.length-o){p=q.b +s=n.gF(b)+p.length-1 +s|=B.f.dU(s,1) +s|=s>>>2 +s|=s>>>4 +s|=s>>>8 +r=new Uint8Array((((s|s>>>16)>>>0)+1)*2) +p=q.b +B.L.dL(r,0,p.length,p) +q.b=r}p=q.b +o=q.c +B.L.dL(p,o,o+n.gF(b),b) +q.c=q.c+n.gF(b)}, +T(a){this.a.$1(B.L.cI(this.b,0,this.c))}} +A.a0r.prototype={} +A.apJ.prototype={ +E(a,b){this.b.push(b)}, +T(a){this.a.$1(this.b)}} +A.a14.prototype={} +A.cv.prototype={ +aRV(a,b){var s=A.w(this) +return new A.Vi(this,a,s.h("@").ak(s.h("cv.T")).ak(b).h("Vi<1,2,3>"))}, +kh(a){throw A.d(A.af("This converter does not support chunked conversions: "+this.j(0)))}} +A.Vi.prototype={ +kh(a){return this.a.kh(this.b.kh(a))}} +A.z_.prototype={} +A.aGM.prototype={ +j(a){return this.a}} +A.a4Y.prototype={ +dB(a){var s=this.a3m(a,0,a.length) +return s==null?a:s}, +a3m(a,b,c){var s,r,q,p,o,n=null +for(s=this.a,r=s.e,s=s.d,q=b,p=n;q":o=">" +break +case"/":o=r?"/":n +break +default:o=n}if(o!=null){if(p==null)p=new A.d8("") +if(q>b)p.a+=B.d.am(a,b,q) +p.a+=o +b=q+1}}if(p==null)return n +if(c>b){s=B.d.am(a,b,c) +p.a+=s}s=p.a +return s.charCodeAt(0)==0?s:s}, +kh(a){return new A.ajV(this,t.NC.b(a)?a:new A.xo(a))}} +A.ajV.prototype={ +fB(a,b,c,d){var s=this.a.a3m(a,b,c),r=this.b +if(s==null)r.fB(a,b,c,d) +else{r.E(0,s) +if(d)r.T(0)}}, +T(a){this.b.T(0)}} +A.O8.prototype={ +j(a){var s=A.z2(this.a) +return(this.b!=null?"Converting object to an encodable object failed:":"Converting object did not return an encodable object:")+" "+s}} +A.a5K.prototype={ +j(a){return"Cyclic error in JSON stringify"}} +A.aIi.prototype={ +acS(a,b,c){var s=A.bsW(b,this.gDd().a) +return s}, +hH(a,b){return this.acS(0,b,null)}, +vH(a){var s=this.gaQS() +s=A.bN1(a,s.b,s.a) +return s}, +gaQS(){return B.WR}, +gDd(){return B.x1}} +A.a5N.prototype={ +kh(a){var s,r=this +if(a instanceof A.Yf)return new A.aky(a.d,A.bGh(r.a),r.b,256) +s=t.NC.b(a)?a:new A.xo(a) +return new A.b3f(r.a,r.b,s)}} +A.b3f.prototype={ +E(a,b){var s,r=this +if(r.d)throw A.d(A.ad("Only one call to add allowed")) +r.d=!0 +s=r.c.abk() +A.brp(b,s,r.b,r.a) +s.T(0)}, +T(a){}} +A.aky.prototype={ +atm(a,b,c){this.a.fB(a,b,c,!1)}, +E(a,b){var s,r,q,p,o,n=this +if(n.e)throw A.d(A.ad("Only one call to add allowed")) +n.e=!0 +s=n.b +r=n.d +q=n.gatl() +if(s!=null){p=new Uint8Array(r) +o=new A.b3m(s,0,r,q,p,[],A.bbW())}else o=A.bN2(n.c,r,q) +o.uo(b) +s=o.f +if(s>0)o.d.$3(o.e,0,s) +o.e=new Uint8Array(0) +o.f=0 +n.a.T(0)}, +T(a){if(!this.e){this.e=!0 +this.a.T(0)}}} +A.a5M.prototype={ +kh(a){return new A.VG(this.a,a,new A.d8(""))}} +A.b3k.prototype={ +a_2(a){var s,r,q,p,o,n=this,m=a.length +for(s=0,r=0;r92){if(q>=55296){p=q&64512 +if(p===55296){o=r+1 +o=!(o=0&&(a.charCodeAt(p)&64512)===55296)}else p=!1 +else p=!0 +if(p){if(r>s)n.A9(a,s,r) +s=r+1 +n.hj(92) +n.hj(117) +n.hj(100) +p=q>>>8&15 +n.hj(p<10?48+p:87+p) +p=q>>>4&15 +n.hj(p<10?48+p:87+p) +p=q&15 +n.hj(p<10?48+p:87+p)}}continue}if(q<32){if(r>s)n.A9(a,s,r) +s=r+1 +n.hj(92) +switch(q){case 8:n.hj(98) +break +case 9:n.hj(116) +break +case 10:n.hj(110) +break +case 12:n.hj(102) +break +case 13:n.hj(114) +break +default:n.hj(117) +n.hj(48) +n.hj(48) +p=q>>>4&15 +n.hj(p<10?48+p:87+p) +p=q&15 +n.hj(p<10?48+p:87+p) +break}}else if(q===34||q===92){if(r>s)n.A9(a,s,r) +s=r+1 +n.hj(92) +n.hj(q)}}if(s===0)n.fL(a) +else if(s>>6|192)>>>0) +s.ih(a&63|128) +return}if(a<=65535){s.ih((a>>>12|224)>>>0) +s.ih(a>>>6&63|128) +s.ih(a&63|128) +return}s.ajf(a)}, +ajf(a){var s=this +s.ih((a>>>18|240)>>>0) +s.ih(a>>>12&63|128) +s.ih(a>>>6&63|128) +s.ih(a&63|128)}, +ih(a){var s,r=this,q=r.f,p=r.e +if(q===p.length){r.d.$3(p,0,q) +q=r.e=new Uint8Array(r.c) +p=r.f=0}else{s=p +p=q +q=s}r.f=p+1 +q[p]=a}} +A.b3m.prototype={ +A8(a){var s,r,q,p,o,n=this,m=n.x,l=J.al(m),k=l.gF(m) +if(k===1){s=l.i(m,0) +for(;a>0;){n.ih(s);--a}return}for(;a>0;){--a +r=n.f +q=r+k +p=n.e +if(q<=p.length){B.L.dL(p,r,q,m) +n.f=q}else for(o=0;o255||r<0){if(s>b){q=p.a +q.toString +q.E(0,A.ns(a,b,s))}q=p.a +q.toString +q.E(0,A.ns(B.Y6,0,1)) +b=s+1}}if(b16)this.PQ()}, +wF(a,b){if(this.a.a.length!==0)this.PQ() +this.b.E(0,b)}, +PQ(){var s=this.a,r=s.a +s.a="" +this.b.E(0,r.charCodeAt(0)==0?r:r)}} +A.JY.prototype={ +T(a){}, +fB(a,b,c,d){var s,r,q +if(b!==0||c!==a.length)for(s=this.a,r=b;r>>18|240 +q=o.b=p+1 +r[p]=s>>>12&63|128 +p=o.b=q+1 +r[q]=s>>>6&63|128 +o.b=p+1 +r[p]=s&63|128 +return!0}else{o.J0() +return!1}}, +a43(a,b,c){var s,r,q,p,o,n,m,l=this +if(b!==c&&(a.charCodeAt(c-1)&64512)===55296)--c +for(s=l.c,r=s.length,q=b;q=r)break +l.b=o+1 +s[o]=p}else{o=p&64512 +if(o===55296){if(l.b+4>r)break +n=q+1 +if(l.aaF(p,a.charCodeAt(n)))q=n}else if(o===56320){if(l.b+3>r)break +l.J0()}else if(p<=2047){o=l.b +m=o+1 +if(m>=r)break +l.b=m +s[o]=p>>>6|192 +l.b=m+1 +s[m]=p&63|128}else{o=l.b +if(o+2>=r)break +m=l.b=o+1 +s[o]=p>>>12|224 +o=l.b=m+1 +s[m]=p>>>6&63|128 +l.b=o+1 +s[o]=p&63|128}}}return q}} +A.Yf.prototype={ +T(a){if(this.a!==0){this.fB("",0,0,!0) +return}this.d.T(0)}, +fB(a,b,c,d){var s,r,q,p,o,n=this +n.b=0 +s=b===c +if(s&&!d)return +r=n.a +if(r!==0){if(n.aaF(r,!s?a.charCodeAt(b):0))++b +n.a=0}s=n.d +r=n.c +q=c-1 +p=r.length-3 +do{b=n.a43(a,b,c) +o=d&&b===c +if(b===q&&(a.charCodeAt(b)&64512)===55296){if(d&&n.b=15){p=m.a +o=A.bOc(p,r,b,l) +if(o!=null){if(!p)return o +if(o.indexOf("\ufffd")<0)return o}}o=m.Q_(r,b,l,d) +p=m.b +if((p&1)!==0){n=A.bs2(p) +m.b=0 +throw A.d(A.dj(n,a,q+m.c))}return o}, +Q_(a,b,c,d){var s,r,q=this +if(c-b>1000){s=B.f.cN(b+c,2) +r=q.Q_(a,b,s,!1) +if((q.b&1)!==0)return r +return r+q.Q_(a,s,c,d)}return q.aPx(a,b,c,d)}, +ae7(a,b){var s,r=this.b +this.b=0 +if(r<=32)return +if(this.a){s=A.cs(65533) +b.a+=s}else throw A.d(A.dj(A.bs2(77),null,null))}, +aPx(a,b,c,d){var s,r,q,p,o,n,m,l=this,k=65533,j=l.b,i=l.c,h=new A.d8(""),g=b+1,f=a[b] +$label0$0:for(s=l.a;!0;){for(;!0;g=p){r="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHIHHHJEEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBKCCCCCCCCCCCCDCLONNNMEEEEEEEEEEE".charCodeAt(f)&31 +i=j<=32?f&61694>>>r:(f&63|i<<6)>>>0 +j=" \x000:XECCCCCN:lDb \x000:XECCCCCNvlDb \x000:XECCCCCN:lDb AAAAA\x00\x00\x00\x00\x00AAAAA00000AAAAA:::::AAAAAGG000AAAAA00KKKAAAAAG::::AAAAA:IIIIAAAAA000\x800AAAAA\x00\x00\x00\x00 AAAAA".charCodeAt(j+r) +if(j===0){q=A.cs(i) +h.a+=q +if(g===c)break $label0$0 +break}else if((j&1)!==0){if(s)switch(j){case 69:case 67:q=A.cs(k) +h.a+=q +break +case 65:q=A.cs(k) +h.a+=q;--g +break +default:q=A.cs(k) +q=h.a+=q +h.a=q+A.cs(k) +break}else{l.b=j +l.c=g-1 +return""}j=0}if(g===c)break $label0$0 +p=g+1 +f=a[g]}p=g+1 +f=a[g] +if(f<128){while(!0){if(!(p=128){o=n-1 +p=n +break}p=n}if(o-g<20)for(m=g;m32)if(s){s=A.cs(k) +h.a+=s}else{l.b=77 +l.c=c +return""}l.b=j +l.c=i +s=h.a +return s.charCodeAt(0)==0?s:s}} +A.atz.prototype={} +A.atA.prototype={} +A.auG.prototype={} +A.xr.prototype={} +A.aLT.prototype={ +$2(a,b){var s=this.b,r=this.a,q=s.a+=r.a +q+=a.a +s.a=q +s.a=q+": " +q=A.z2(b) +s.a+=q +r.a=", "}, +$S:372} +A.b88.prototype={ +$2(a,b){var s,r +if(typeof b=="string")this.a.set(a,b) +else if(b==null)this.a.set(a,"") +else for(s=J.az(b),r=this.a;s.H();){b=s.ga1(s) +if(typeof b=="string")r.append(a,b) +else if(b==null)r.append(a,"") +else A.eE(b)}}, +$S:23} +A.lY.prototype={ +E(a,b){return A.bDn(this.a+B.f.cN(b.a,1000),this.b)}, +k(a,b){if(b==null)return!1 +return b instanceof A.lY&&this.a===b.a&&this.b===b.b}, +cK(a,b){return B.f.cK(this.a,b.a)}, +gL(a){var s=this.a +return(s^B.f.dU(s,30))&1073741823}, +j(a){var s=this,r=A.bDp(A.bIH(s)),q=A.a1T(A.bIF(s)),p=A.a1T(A.bIB(s)),o=A.a1T(A.bIC(s)),n=A.a1T(A.bIE(s)),m=A.a1T(A.bIG(s)),l=A.bDq(A.bID(s)),k=r+"-"+q +if(s.b)return k+"-"+p+" "+o+":"+n+":"+m+"."+l+"Z" +else return k+"-"+p+" "+o+":"+n+":"+m+"."+l}, +$idC:1} +A.bv.prototype={ +X(a,b){return new A.bv(this.a+b.a)}, +Y(a,b){return new A.bv(this.a-b.a)}, +a2(a,b){return new A.bv(B.c.ai(this.a*b))}, +k(a,b){if(b==null)return!1 +return b instanceof A.bv&&this.a===b.a}, +gL(a){return B.f.gL(this.a)}, +cK(a,b){return B.f.cK(this.a,b.a)}, +j(a){var s,r,q,p,o,n=this.a,m=B.f.cN(n,36e8),l=n%36e8 +if(n<0){m=0-m +n=0-l +s="-"}else{n=l +s=""}r=B.f.cN(n,6e7) +n%=6e7 +q=r<10?"0":"" +p=B.f.cN(n,1e6) +o=p<10?"0":"" +return s+m+":"+q+r+":"+o+p+"."+B.d.k_(B.f.j(n%1e6),6,"0")}, +$idC:1} +A.b1r.prototype={ +j(a){return this.W()}} +A.dF.prototype={ +gGA(){return A.bIA(this)}} +A.xV.prototype={ +j(a){var s=this.a +if(s!=null)return"Assertion failed: "+A.z2(s) +return"Assertion failed"}, +gzA(a){return this.a}} +A.tH.prototype={} +A.n_.prototype={ +gQk(){return"Invalid argument"+(!this.a?"(s)":"")}, +gQj(){return""}, +j(a){var s=this,r=s.c,q=r==null?"":" ("+r+")",p=s.d,o=p==null?"":": "+A.j(p),n=s.gQk()+q+o +if(!s.a)return n +return n+s.gQj()+": "+A.z2(s.gXr())}, +gXr(){return this.b}} +A.GV.prototype={ +gXr(){return this.b}, +gQk(){return"RangeError"}, +gQj(){var s,r=this.e,q=this.f +if(r==null)s=q!=null?": Not less than or equal to "+A.j(q):"" +else if(q==null)s=": Not greater than or equal to "+A.j(r) +else if(q>r)s=": Not in inclusive range "+A.j(r)+".."+A.j(q) +else s=qe.length +else s=!1 +if(s)f=null +if(f==null){if(e.length>78)e=B.d.am(e,0,75)+"..." +return g+"\n"+e}for(r=1,q=0,p=!1,o=0;o1?g+(" (at line "+r+", character "+(f-q+1)+")\n"):g+(" (at character "+(f+1)+")\n") +m=e.length +for(o=f;o78)if(f-q<75){l=q+75 +k=q +j="" +i="..."}else{if(m-f<75){k=m-75 +l=m +i=""}else{k=f-36 +l=f+36 +i="..."}j="..."}else{l=m +k=q +j="" +i=""}return g+j+B.d.am(e,k,l)+i+"\n"+B.d.a2(" ",f-k+j.length)+"^\n"}else return f!=null?g+(" (at offset "+A.j(f)+")"):g}, +$ic4:1} +A.z.prototype={ +eq(a,b){return A.j3(this,A.b8(this).h("z.E"),b)}, +WN(a,b){var s=this,r=A.b8(s) +if(r.h("at").b(s))return A.bmI(s,b,r.h("z.E")) +return new A.rj(s,b,r.h("rj"))}, +jo(a,b,c){return A.rI(this,b,A.b8(this).h("z.E"),c)}, +mz(a,b){return new A.bg(this,b,A.b8(this).h("bg"))}, +G(a,b){var s +for(s=this.gar(this);s.H();)if(J.f(s.ga1(s),b))return!0 +return!1}, +al(a,b){var s +for(s=this.gar(this);s.H();)b.$1(s.ga1(s))}, +oM(a,b){var s,r=this.gar(this) +if(!r.H())throw A.d(A.cy()) +s=r.ga1(r) +for(;r.H();)s=b.$2(s,r.ga1(r)) +return s}, +WL(a,b,c){var s,r +for(s=this.gar(this),r=b;s.H();)r=c.$2(r,s.ga1(s)) +return r}, +nd(a,b,c){return this.WL(0,b,c,t.z)}, +h8(a,b){var s +for(s=this.gar(this);s.H();)if(!b.$1(s.ga1(s)))return!1 +return!0}, +cj(a,b){var s,r,q=this.gar(this) +if(!q.H())return"" +s=J.i1(q.ga1(q)) +if(!q.H())return s +if(b.length===0){r=s +do r+=J.i1(q.ga1(q)) +while(q.H())}else{r=s +do r=r+b+J.i1(q.ga1(q)) +while(q.H())}return r.charCodeAt(0)==0?r:r}, +mq(a){return this.cj(0,"")}, +fk(a,b){var s +for(s=this.gar(this);s.H();)if(b.$1(s.ga1(s)))return!0 +return!1}, +ig(a,b){return A.ab(this,b,A.b8(this).h("z.E"))}, +eT(a){return this.ig(0,!0)}, +kD(a){return A.jc(this,A.b8(this).h("z.E"))}, +gF(a){var s,r=this.gar(this) +for(s=0;r.H();)++s +return s}, +gaA(a){return!this.gar(this).H()}, +gcT(a){return!this.gaA(this)}, +bE(a,b){return A.bgT(this,b,A.b8(this).h("z.E"))}, +aZc(a,b){return new A.Sy(this,b,A.b8(this).h("Sy"))}, +fz(a,b){return A.aT2(this,b,A.b8(this).h("z.E"))}, +alG(a,b){return new A.BN(this,b,A.b8(this).h("BN"))}, +ga9(a){var s=this.gar(this) +if(!s.H())throw A.d(A.cy()) +return s.ga1(s)}, +ga_(a){var s,r=this.gar(this) +if(!r.H())throw A.d(A.cy()) +do s=r.ga1(r) +while(r.H()) +return s}, +pJ(a,b,c){var s,r +for(s=this.gar(this);s.H();){r=s.ga1(s) +if(b.$1(r))return r}if(c!=null)return c.$0() +throw A.d(A.cy())}, +pI(a,b){return this.pJ(0,b,null)}, +XJ(a,b,c){var s,r,q=this.gar(this) +do{if(!q.H()){if(c!=null)return c.$0() +throw A.d(A.cy())}s=q.ga1(q)}while(!b.$1(s)) +for(;q.H();){r=q.ga1(q) +if(b.$1(r))s=r}return s}, +aUm(a,b){return this.XJ(0,b,null)}, +uF(a,b,c){var s,r=this.gar(this) +do{if(!r.H())throw A.d(A.cy()) +s=r.ga1(r)}while(!b.$1(s)) +for(;r.H();)if(b.$1(r.ga1(r)))throw A.d(A.aI1()) +return s}, +p0(a,b){return this.uF(0,b,null)}, +cA(a,b){var s,r +A.en(b,"index") +s=this.gar(this) +for(r=b;s.H();){if(r===0)return s.ga1(s);--r}throw A.d(A.fs(b,b-r,this,null,"index"))}, +j(a){return A.bnl(this,"(",")")}} +A.Vk.prototype={ +cA(a,b){A.aHy(b,this.a,this,null,null) +return this.b.$1(b)}, +gF(a){return this.a}} +A.bK.prototype={ +j(a){return"MapEntry("+A.j(this.a)+": "+A.j(this.b)+")"}} +A.bR.prototype={ +gL(a){return A.B.prototype.gL.call(this,0)}, +j(a){return"null"}} +A.B.prototype={$iB:1, +k(a,b){return this===b}, +gL(a){return A.eT(this)}, +j(a){return"Instance of '"+A.aOr(this)+"'"}, +a6(a,b){throw A.d(A.iO(this,b))}, +ghh(a){return A.J(this)}, +toString(){return this.j(this)}, +$0(){return this.a6(this,A.a_("call","$0",0,[],[],0))}, +$1(a){return this.a6(this,A.a_("call","$1",0,[a],[],0))}, +$2(a,b){return this.a6(this,A.a_("call","$2",0,[a,b],[],0))}, +$3$1(a,b,c,d){return this.a6(this,A.a_("call","$3$1",0,[a,b,c,d],[],3))}, +$1$2$onError(a,b,c){return this.a6(this,A.a_("call","$1$2$onError",0,[a,b,c],["onError"],1))}, +$2$1(a,b,c){return this.a6(this,A.a_("call","$2$1",0,[a,b,c],[],2))}, +$1$1(a,b){return this.a6(this,A.a_("call","$1$1",0,[a,b],[],1))}, +$3(a,b,c){return this.a6(this,A.a_("call","$3",0,[a,b,c],[],0))}, +$4(a,b,c,d){return this.a6(this,A.a_("call","$4",0,[a,b,c,d],[],0))}, +$3$3(a,b,c,d,e,f){return this.a6(this,A.a_("call","$3$3",0,[a,b,c,d,e,f],[],3))}, +$2$2(a,b,c,d){return this.a6(this,A.a_("call","$2$2",0,[a,b,c,d],[],2))}, +$1$2(a,b,c){return this.a6(this,A.a_("call","$1$2",0,[a,b,c],[],1))}, +$4$cancelOnError$onDone$onError(a,b,c,d){return this.a6(this,A.a_("call","$4$cancelOnError$onDone$onError",0,[a,b,c,d],["cancelOnError","onDone","onError"],0))}, +$1$growable(a){return this.a6(this,A.a_("call","$1$growable",0,[a],["growable"],0))}, +$1$highContrast(a){return this.a6(this,A.a_("call","$1$highContrast",0,[a],["highContrast"],0))}, +$1$accessibilityFeatures(a){return this.a6(this,A.a_("call","$1$accessibilityFeatures",0,[a],["accessibilityFeatures"],0))}, +$1$locales(a){return this.a6(this,A.a_("call","$1$locales",0,[a],["locales"],0))}, +$1$textScaleFactor(a){return this.a6(this,A.a_("call","$1$textScaleFactor",0,[a],["textScaleFactor"],0))}, +$1$platformBrightness(a){return this.a6(this,A.a_("call","$1$platformBrightness",0,[a],["platformBrightness"],0))}, +$1$accessibleNavigation(a){return this.a6(this,A.a_("call","$1$accessibleNavigation",0,[a],["accessibleNavigation"],0))}, +$1$semanticsEnabled(a){return this.a6(this,A.a_("call","$1$semanticsEnabled",0,[a],["semanticsEnabled"],0))}, +$13$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$scale$signalKind$timeStamp$viewId(a,b,c,d,e,f,g,h,i,j,k,l,m){return this.a6(this,A.a_("call","$13$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$scale$signalKind$timeStamp$viewId",0,[a,b,c,d,e,f,g,h,i,j,k,l,m],["buttons","change","device","kind","physicalX","physicalY","pressure","pressureMax","scale","signalKind","timeStamp","viewId"],0))}, +$14$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$scrollDeltaX$scrollDeltaY$signalKind$timeStamp$viewId(a,b,c,d,e,f,g,h,i,j,k,l,m,n){return this.a6(this,A.a_("call","$14$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$scrollDeltaX$scrollDeltaY$signalKind$timeStamp$viewId",0,[a,b,c,d,e,f,g,h,i,j,k,l,m,n],["buttons","change","device","kind","physicalX","physicalY","pressure","pressureMax","scrollDeltaX","scrollDeltaY","signalKind","timeStamp","viewId"],0))}, +$13$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$signalKind$tilt$timeStamp$viewId(a,b,c,d,e,f,g,h,i,j,k,l,m){return this.a6(this,A.a_("call","$13$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$signalKind$tilt$timeStamp$viewId",0,[a,b,c,d,e,f,g,h,i,j,k,l,m],["buttons","change","device","kind","physicalX","physicalY","pressure","pressureMax","signalKind","tilt","timeStamp","viewId"],0))}, +$4$allowUpscaling$targetHeight$targetWidth(a,b,c,d){return this.a6(this,A.a_("call","$4$allowUpscaling$targetHeight$targetWidth",0,[a,b,c,d],["allowUpscaling","targetHeight","targetWidth"],0))}, +$1$style(a){return this.a6(this,A.a_("call","$1$style",0,[a],["style"],0))}, +$3$replace$state(a,b,c){return this.a6(this,A.a_("call","$3$replace$state",0,[a,b,c],["replace","state"],0))}, +$2$path(a,b){return this.a6(this,A.a_("call","$2$path",0,[a,b],["path"],0))}, +$2$params(a,b){return this.a6(this,A.a_("call","$2$params",0,[a,b],["params"],0))}, +$3$onAction$onChange(a,b,c){return this.a6(this,A.a_("call","$3$onAction$onChange",0,[a,b,c],["onAction","onChange"],0))}, +$1$0(a){return this.a6(this,A.a_("call","$1$0",0,[a],[],1))}, +$2$output(a,b){return this.a6(this,A.a_("call","$2$output",0,[a,b],["output"],0))}, +$5(a,b,c,d,e){return this.a6(this,A.a_("call","$5",0,[a,b,c,d,e],[],0))}, +$6(a,b,c,d,e,f){return this.a6(this,A.a_("call","$6",0,[a,b,c,d,e,f],[],0))}, +$2$fontFamily(a,b){return this.a6(this,A.a_("call","$2$fontFamily",0,[a,b],["fontFamily"],0))}, +$3$context$exception$stack(a,b,c){return this.a6(this,A.a_("call","$3$context$exception$stack",0,[a,b,c],["context","exception","stack"],0))}, +$2$onError(a,b){return this.a6(this,A.a_("call","$2$onError",0,[a,b],["onError"],0))}, +$2$withDrive(a,b){return this.a6(this,A.a_("call","$2$withDrive",0,[a,b],["withDrive"],0))}, +$1$scheme(a){return this.a6(this,A.a_("call","$1$scheme",0,[a],["scheme"],0))}, +$1$size(a){return this.a6(this,A.a_("call","$1$size",0,[a],["size"],0))}, +$2$aspect(a,b){return this.a6(this,A.a_("call","$2$aspect",0,[a,b],["aspect"],0))}, +$3$includePlaceholders$includeSemanticsLabels(a,b,c){return this.a6(this,A.a_("call","$3$includePlaceholders$includeSemanticsLabels",0,[a,b,c],["includePlaceholders","includeSemanticsLabels"],0))}, +$1$paragraphWidth(a){return this.a6(this,A.a_("call","$1$paragraphWidth",0,[a],["paragraphWidth"],0))}, +$9$fontFamily$fontFamilyFallback$fontSize$fontStyle$fontWeight$forceStrutHeight$height$leading$leadingDistribution(a,b,c,d,e,f,g,h,i){return this.a6(this,A.a_("call","$9$fontFamily$fontFamilyFallback$fontSize$fontStyle$fontWeight$forceStrutHeight$height$leading$leadingDistribution",0,[a,b,c,d,e,f,g,h,i],["fontFamily","fontFamilyFallback","fontSize","fontStyle","fontWeight","forceStrutHeight","height","leading","leadingDistribution"],0))}, +$12$ellipsis$fontFamily$fontSize$fontStyle$fontWeight$height$locale$maxLines$strutStyle$textAlign$textDirection$textHeightBehavior(a,b,c,d,e,f,g,h,i,j,k,l){return this.a6(this,A.a_("call","$12$ellipsis$fontFamily$fontSize$fontStyle$fontWeight$height$locale$maxLines$strutStyle$textAlign$textDirection$textHeightBehavior",0,[a,b,c,d,e,f,g,h,i,j,k,l],["ellipsis","fontFamily","fontSize","fontStyle","fontWeight","height","locale","maxLines","strutStyle","textAlign","textDirection","textHeightBehavior"],0))}, +$3$dimensions$textScaler(a,b,c){return this.a6(this,A.a_("call","$3$dimensions$textScaler",0,[a,b,c],["dimensions","textScaler"],0))}, +$21$background$color$decoration$decorationColor$decorationStyle$decorationThickness$fontFamily$fontFamilyFallback$fontFeatures$fontSize$fontStyle$fontVariations$fontWeight$foreground$height$leadingDistribution$letterSpacing$locale$shadows$textBaseline$wordSpacing(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){return this.a6(this,A.a_("call","$21$background$color$decoration$decorationColor$decorationStyle$decorationThickness$fontFamily$fontFamilyFallback$fontFeatures$fontSize$fontStyle$fontVariations$fontWeight$foreground$height$leadingDistribution$letterSpacing$locale$shadows$textBaseline$wordSpacing",0,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1],["background","color","decoration","decorationColor","decorationStyle","decorationThickness","fontFamily","fontFamilyFallback","fontFeatures","fontSize","fontStyle","fontVariations","fontWeight","foreground","height","leadingDistribution","letterSpacing","locale","shadows","textBaseline","wordSpacing"],0))}, +$1$newVertices(a){return this.a6(this,A.a_("call","$1$newVertices",0,[a],["newVertices"],0))}, +$4$in1$in2$operator$result(a,b,c,d){return this.a6(this,A.a_("call","$4$in1$in2$operator$result",0,[a,b,c,d],["in1","in2","operator","result"],0))}, +$5$colors$indices$textureCoordinates(a,b,c,d,e){return this.a6(this,A.a_("call","$5$colors$indices$textureCoordinates",0,[a,b,c,d,e],["colors","indices","textureCoordinates"],0))}, +$8(a,b,c,d,e,f,g,h){return this.a6(this,A.a_("call","$8",0,[a,b,c,d,e,f,g,h],[],0))}, +$2$replace(a,b){return this.a6(this,A.a_("call","$2$replace",0,[a,b],["replace"],0))}, +$4$clipResolver$maskResolver$patternResolver(a,b,c,d){return this.a6(this,A.a_("call","$4$clipResolver$maskResolver$patternResolver",0,[a,b,c,d],["clipResolver","maskResolver","patternResolver"],0))}, +$2$color$source(a,b){return this.a6(this,A.a_("call","$2$color$source",0,[a,b],["color","source"],0))}, +$2$offset$source(a,b){return this.a6(this,A.a_("call","$2$offset$source",0,[a,b],["offset","source"],0))}, +$3$flip$source$transform(a,b,c){return this.a6(this,A.a_("call","$3$flip$source$transform",0,[a,b,c],["flip","source","transform"],0))}, +$2$namespace(a,b){return this.a6(this,A.a_("call","$2$namespace",0,[a,b],["namespace"],0))}, +$3$position$size(a,b,c){return this.a6(this,A.a_("call","$3$position$size",0,[a,b,c],["position","size"],0))}, +$3$color$fontFamily$letterSpacing(a,b,c){return this.a6(this,A.a_("call","$3$color$fontFamily$letterSpacing",0,[a,b,c],["color","fontFamily","letterSpacing"],0))}, +$1$fontSize(a){return this.a6(this,A.a_("call","$1$fontSize",0,[a],["fontSize"],0))}, +$2$reversed(a,b){return this.a6(this,A.a_("call","$2$reversed",0,[a,b],["reversed"],0))}, +$2$row$stepTime(a,b){return this.a6(this,A.a_("call","$2$row$stepTime",0,[a,b],["row","stepTime"],0))}, +$2$paint(a,b){return this.a6(this,A.a_("call","$2$paint",0,[a,b],["paint"],0))}, +$7(a,b,c,d,e,f,g){return this.a6(this,A.a_("call","$7",0,[a,b,c,d,e,f,g],[],0))}, +$3$overridePaint$size(a,b,c){return this.a6(this,A.a_("call","$3$overridePaint$size",0,[a,b,c],["overridePaint","size"],0))}, +$4$alignment$fit(a,b,c,d){return this.a6(this,A.a_("call","$4$alignment$fit",0,[a,b,c,d],["alignment","fit"],0))}, +$9$destinationPosition$destinationRect$devicePixelRatio$renderBox$sourceRect$sourceSize(a,b,c,d,e,f,g,h,i){return this.a6(this,A.a_("call","$9$destinationPosition$destinationRect$devicePixelRatio$renderBox$sourceRect$sourceSize",0,[a,b,c,d,e,f,g,h,i],["destinationPosition","destinationRect","devicePixelRatio","renderBox","sourceRect","sourceSize"],0))}, +$3$parentAlpha(a,b,c){return this.a6(this,A.a_("call","$3$parentAlpha",0,[a,b,c],["parentAlpha"],0))}, +$2$applyParents(a,b){return this.a6(this,A.a_("call","$2$applyParents",0,[a,b],["applyParents"],0))}, +$3$matrix4(a,b,c){return this.a6(this,A.a_("call","$3$matrix4",0,[a,b,c],["matrix4"],0))}, +$1$foreground(a){return this.a6(this,A.a_("call","$1$foreground",0,[a],["foreground"],0))}, +$2$doAntiAlias(a,b){return this.a6(this,A.a_("call","$2$doAntiAlias",0,[a,b],["doAntiAlias"],0))}, +$2$horizontalOnly(a,b){return this.a6(this,A.a_("call","$2$horizontalOnly",0,[a,b],["horizontalOnly"],0))}, +$2$maxSpeed(a,b){return this.a6(this,A.a_("call","$2$maxSpeed",0,[a,b],["maxSpeed"],0))}, +$3$onDone$onError(a,b,c){return this.a6(this,A.a_("call","$3$onDone$onError",0,[a,b,c],["onDone","onError"],0))}, +$2$3(a,b,c,d,e){return this.a6(this,A.a_("call","$2$3",0,[a,b,c,d,e],[],2))}, +$4$isLocal$mimeType(a,b,c,d){return this.a6(this,A.a_("call","$4$isLocal$mimeType",0,[a,b,c,d],["isLocal","mimeType"],0))}, +$1$prefix(a){return this.a6(this,A.a_("call","$1$prefix",0,[a],["prefix"],0))}, +$3$bodyColor$decorationColor$displayColor(a,b,c){return this.a6(this,A.a_("call","$3$bodyColor$decorationColor$displayColor",0,[a,b,c],["bodyColor","decorationColor","displayColor"],0))}, +$2$priority$scheduler(a,b){return this.a6(this,A.a_("call","$2$priority$scheduler",0,[a,b],["priority","scheduler"],0))}, +$2$position(a,b){return this.a6(this,A.a_("call","$2$position",0,[a,b],["position"],0))}, +$2$after(a,b){return this.a6(this,A.a_("call","$2$after",0,[a,b],["after"],0))}, +$1$range(a){return this.a6(this,A.a_("call","$1$range",0,[a],["range"],0))}, +$3$forgottenChildren(a,b,c){return this.a6(this,A.a_("call","$3$forgottenChildren",0,[a,b,c],["forgottenChildren"],0))}, +$2$primaryTextTheme$textTheme(a,b){return this.a6(this,A.a_("call","$2$primaryTextTheme$textTheme",0,[a,b],["primaryTextTheme","textTheme"],0))}, +$2$color$decoration(a,b){return this.a6(this,A.a_("call","$2$color$decoration",0,[a,b],["color","decoration"],0))}, +$4$boxHeightStyle$boxWidthStyle(a,b,c,d){return this.a6(this,A.a_("call","$4$boxHeightStyle$boxWidthStyle",0,[a,b,c,d],["boxHeightStyle","boxWidthStyle"],0))}, +$2$end$start(a,b){return this.a6(this,A.a_("call","$2$end$start",0,[a,b],["end","start"],0))}, +$3$boxHeightStyle(a,b,c){return this.a6(this,A.a_("call","$3$boxHeightStyle",0,[a,b,c],["boxHeightStyle"],0))}, +$3$cancel$down$reason(a,b,c){return this.a6(this,A.a_("call","$3$cancel$down$reason",0,[a,b,c],["cancel","down","reason"],0))}, +$2$down$up(a,b){return this.a6(this,A.a_("call","$2$down$up",0,[a,b],["down","up"],0))}, +$1$down(a){return this.a6(this,A.a_("call","$1$down",0,[a],["down"],0))}, +$8$enableDomStorage$enableJavaScript$headers$universalLinksOnly$useSafariVC$useWebView$webOnlyWindowName(a,b,c,d,e,f,g,h){return this.a6(this,A.a_("call","$8$enableDomStorage$enableJavaScript$headers$universalLinksOnly$useSafariVC$useWebView$webOnlyWindowName",0,[a,b,c,d,e,f,g,h],["enableDomStorage","enableJavaScript","headers","universalLinksOnly","useSafariVC","useWebView","webOnlyWindowName"],0))}, +$1$longMultiplier(a){return this.a6(this,A.a_("call","$1$longMultiplier",0,[a],["longMultiplier"],0))}, +$2$longMultiplier$shortMultiplier(a,b){return this.a6(this,A.a_("call","$2$longMultiplier$shortMultiplier",0,[a,b],["longMultiplier","shortMultiplier"],0))}, +$2$fontSize$fontWeight(a,b){return this.a6(this,A.a_("call","$2$fontSize$fontWeight",0,[a,b],["fontSize","fontWeight"],0))}, +$18$background$backgroundColor$color$decoration$decorationColor$decorationStyle$decorationThickness$fontFeatures$fontSize$fontStyle$fontWeight$foreground$height$letterSpacing$locale$shadows$textBaseline$wordSpacing(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){return this.a6(this,A.a_("call","$18$background$backgroundColor$color$decoration$decorationColor$decorationStyle$decorationThickness$fontFeatures$fontSize$fontStyle$fontWeight$foreground$height$letterSpacing$locale$shadows$textBaseline$wordSpacing",0,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r],["background","backgroundColor","color","decoration","decorationColor","decorationStyle","decorationThickness","fontFeatures","fontSize","fontStyle","fontWeight","foreground","height","letterSpacing","locale","shadows","textBaseline","wordSpacing"],0))}, +$2$fontFamily$fontFamilyFallback(a,b){return this.a6(this,A.a_("call","$2$fontFamily$fontFamilyFallback",0,[a,b],["fontFamily","fontFamilyFallback"],0))}, +$2$frames$size(a,b){return this.a6(this,A.a_("call","$2$frames$size",0,[a,b],["frames","size"],0))}, +$3$textDirection(a,b,c){return this.a6(this,A.a_("call","$3$textDirection",0,[a,b,c],["textDirection"],0))}, +$1$minimum(a){return this.a6(this,A.a_("call","$1$minimum",0,[a],["minimum"],0))}, +$1$period(a){return this.a6(this,A.a_("call","$1$period",0,[a],["period"],0))}, +$3$debugReport(a,b,c){return this.a6(this,A.a_("call","$3$debugReport",0,[a,b,c],["debugReport"],0))}, +$2$maxWidth$minWidth(a,b){return this.a6(this,A.a_("call","$2$maxWidth$minWidth",0,[a,b],["maxWidth","minWidth"],0))}, +$2$maxHeight$minHeight(a,b){return this.a6(this,A.a_("call","$2$maxHeight$minHeight",0,[a,b],["maxHeight","minHeight"],0))}, +$1$color(a){return this.a6(this,A.a_("call","$1$color",0,[a],["color"],0))}, +$1$side(a){return this.a6(this,A.a_("call","$1$side",0,[a],["side"],0))}, +$1$findFirstFocus(a){return this.a6(this,A.a_("call","$1$findFirstFocus",0,[a],["findFirstFocus"],0))}, +$2$value(a,b){return this.a6(this,A.a_("call","$2$value",0,[a,b],["value"],0))}, +$1$details(a){return this.a6(this,A.a_("call","$1$details",0,[a],["details"],0))}, +$11$borderRadius$color$containedInkWell$controller$customBorder$onRemoved$position$radius$rectCallback$referenceBox$textDirection(a,b,c,d,e,f,g,h,i,j,k){return this.a6(this,A.a_("call","$11$borderRadius$color$containedInkWell$controller$customBorder$onRemoved$position$radius$rectCallback$referenceBox$textDirection",0,[a,b,c,d,e,f,g,h,i,j,k],["borderRadius","color","containedInkWell","controller","customBorder","onRemoved","position","radius","rectCallback","referenceBox","textDirection"],0))}, +$1$context(a){return this.a6(this,A.a_("call","$1$context",0,[a],["context"],0))}, +$9$applyTextScaling$color$fill$grade$opacity$opticalSize$shadows$size$weight(a,b,c,d,e,f,g,h,i){return this.a6(this,A.a_("call","$9$applyTextScaling$color$fill$grade$opacity$opticalSize$shadows$size$weight",0,[a,b,c,d,e,f,g,h,i],["applyTextScaling","color","fill","grade","opacity","opticalSize","shadows","size","weight"],0))}, +$2$minHeight$minWidth(a,b){return this.a6(this,A.a_("call","$2$minHeight$minWidth",0,[a,b],["minHeight","minWidth"],0))}, +$2$textDirection(a,b){return this.a6(this,A.a_("call","$2$textDirection",0,[a,b],["textDirection"],0))}, +$1$withDelay(a){return this.a6(this,A.a_("call","$1$withDelay",0,[a],["withDelay"],0))}, +$1$2$arguments(a,b,c){return this.a6(this,A.a_("call","$1$2$arguments",0,[a,b,c],["arguments"],1))}, +$1$reversed(a){return this.a6(this,A.a_("call","$1$reversed",0,[a],["reversed"],0))}, +$4$axis$rect(a,b,c,d){return this.a6(this,A.a_("call","$4$axis$rect",0,[a,b,c,d],["axis","rect"],0))}, +$2$alignmentPolicy(a,b){return this.a6(this,A.a_("call","$2$alignmentPolicy",0,[a,b],["alignmentPolicy"],0))}, +$2$ignoreCurrentFocus(a,b){return this.a6(this,A.a_("call","$2$ignoreCurrentFocus",0,[a,b],["ignoreCurrentFocus"],0))}, +$3$alignmentPolicy$forward(a,b,c){return this.a6(this,A.a_("call","$3$alignmentPolicy$forward",0,[a,b,c],["alignmentPolicy","forward"],0))}, +$5$alignment$alignmentPolicy$curve$duration(a,b,c,d,e){return this.a6(this,A.a_("call","$5$alignment$alignmentPolicy$curve$duration",0,[a,b,c,d,e],["alignment","alignmentPolicy","curve","duration"],0))}, +$1$5(a,b,c,d,e,f){return this.a6(this,A.a_("call","$1$5",0,[a,b,c,d,e,f],[],1))}, +$1$padding(a){return this.a6(this,A.a_("call","$1$padding",0,[a],["padding"],0))}, +$8$removeBottomInset$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding(a,b,c,d,e,f,g,h){return this.a6(this,A.a_("call","$8$removeBottomInset$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding",0,[a,b,c,d,e,f,g,h],["removeBottomInset","removeBottomPadding","removeLeftPadding","removeRightPadding","removeTopPadding"],0))}, +$7$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding(a,b,c,d,e,f,g){return this.a6(this,A.a_("call","$7$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding",0,[a,b,c,d,e,f,g],["removeBottomPadding","removeLeftPadding","removeRightPadding","removeTopPadding"],0))}, +$8$maintainBottomViewPadding$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding(a,b,c,d,e,f,g,h){return this.a6(this,A.a_("call","$8$maintainBottomViewPadding$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding",0,[a,b,c,d,e,f,g,h],["maintainBottomViewPadding","removeBottomPadding","removeLeftPadding","removeRightPadding","removeTopPadding"],0))}, +$1$bottom(a){return this.a6(this,A.a_("call","$1$bottom",0,[a],["bottom"],0))}, +$1$floatingActionButtonScale(a){return this.a6(this,A.a_("call","$1$floatingActionButtonScale",0,[a],["floatingActionButtonScale"],0))}, +$1$removeBottom(a){return this.a6(this,A.a_("call","$1$removeBottom",0,[a],["removeBottom"],0))}, +$2$padding$viewPadding(a,b){return this.a6(this,A.a_("call","$2$padding$viewPadding",0,[a,b],["padding","viewPadding"],0))}, +$1$isBuildFromExternalSources(a){return this.a6(this,A.a_("call","$1$isBuildFromExternalSources",0,[a],["isBuildFromExternalSources"],0))}, +$4$displayFeatures$padding$viewInsets$viewPadding(a,b,c,d){return this.a6(this,A.a_("call","$4$displayFeatures$padding$viewInsets$viewPadding",0,[a,b,c,d],["displayFeatures","padding","viewInsets","viewPadding"],0))}, +$1$direction(a){return this.a6(this,A.a_("call","$1$direction",0,[a],["direction"],0))}, +$9$ascent$baseline$descent$hardBreak$height$left$lineNumber$unscaledAscent$width(a,b,c,d,e,f,g,h,i){return this.a6(this,A.a_("call","$9$ascent$baseline$descent$hardBreak$height$left$lineNumber$unscaledAscent$width",0,[a,b,c,d,e,f,g,h,i],["ascent","baseline","descent","hardBreak","height","left","lineNumber","unscaledAscent","width"],0))}, +$2$viewInsets$viewPadding(a,b){return this.a6(this,A.a_("call","$2$viewInsets$viewPadding",0,[a,b],["viewInsets","viewPadding"],0))}, +$4$overscroll$physics$platform$scrollbars(a,b,c,d){return this.a6(this,A.a_("call","$4$overscroll$physics$platform$scrollbars",0,[a,b,c,d],["overscroll","physics","platform","scrollbars"],0))}, +$2$bottom$top(a,b){return this.a6(this,A.a_("call","$2$bottom$top",0,[a,b],["bottom","top"],0))}, +$2$left$right(a,b){return this.a6(this,A.a_("call","$2$left$right",0,[a,b],["left","right"],0))}, +$2$hitTest$paintTransform(a,b){return this.a6(this,A.a_("call","$2$hitTest$paintTransform",0,[a,b],["hitTest","paintTransform"],0))}, +$3$crossAxisPosition$mainAxisPosition(a,b,c){return this.a6(this,A.a_("call","$3$crossAxisPosition$mainAxisPosition",0,[a,b,c],["crossAxisPosition","mainAxisPosition"],0))}, +$2$hitTest$paintOffset(a,b){return this.a6(this,A.a_("call","$2$hitTest$paintOffset",0,[a,b],["hitTest","paintOffset"],0))}, +$1$reverse(a){return this.a6(this,A.a_("call","$1$reverse",0,[a],["reverse"],0))}, +$3$composing$selection$text(a,b,c){return this.a6(this,A.a_("call","$3$composing$selection$text",0,[a,b,c],["composing","selection","text"],0))}, +$3$sigmaX$sigmaY$tileMode(a,b,c){return this.a6(this,A.a_("call","$3$sigmaX$sigmaY$tileMode",0,[a,b,c],["sigmaX","sigmaY","tileMode"],0))}, +$2$color$fontSize(a,b){return this.a6(this,A.a_("call","$2$color$fontSize",0,[a,b],["color","fontSize"],0))}, +$1$selection(a){return this.a6(this,A.a_("call","$1$selection",0,[a],["selection"],0))}, +$1$rect(a){return this.a6(this,A.a_("call","$1$rect",0,[a],["rect"],0))}, +$4$curve$descendant$duration$rect(a,b,c,d){return this.a6(this,A.a_("call","$4$curve$descendant$duration$rect",0,[a,b,c,d],["curve","descendant","duration","rect"],0))}, +$3$rect(a,b,c){return this.a6(this,A.a_("call","$3$rect",0,[a,b,c],["rect"],0))}, +$2$cause$from(a,b){return this.a6(this,A.a_("call","$2$cause$from",0,[a,b],["cause","from"],0))}, +$1$composing(a){return this.a6(this,A.a_("call","$1$composing",0,[a],["composing"],0))}, +$1$affinity(a){return this.a6(this,A.a_("call","$1$affinity",0,[a],["affinity"],0))}, +$3$code$details$message(a,b,c){return this.a6(this,A.a_("call","$3$code$details$message",0,[a,b,c],["code","details","message"],0))}, +$2$code$message(a,b){return this.a6(this,A.a_("call","$2$code$message",0,[a,b],["code","message"],0))}, +$2$composing$selection(a,b){return this.a6(this,A.a_("call","$2$composing$selection",0,[a,b],["composing","selection"],0))}, +$3$context$style$withComposing(a,b,c){return this.a6(this,A.a_("call","$3$context$style$withComposing",0,[a,b,c],["context","style","withComposing"],0))}, +$5$baseline$baselineOffset(a,b,c,d,e){return this.a6(this,A.a_("call","$5$baseline$baselineOffset",0,[a,b,c,d,e],["baseline","baselineOffset"],0))}, +$3$curve$duration$rect(a,b,c){return this.a6(this,A.a_("call","$3$curve$duration$rect",0,[a,b,c],["curve","duration","rect"],0))}, +$1$text(a){return this.a6(this,A.a_("call","$1$text",0,[a],["text"],0))}, +$2$affinity$extentOffset(a,b){return this.a6(this,A.a_("call","$2$affinity$extentOffset",0,[a,b],["affinity","extentOffset"],0))}, +$2$overscroll$scrollbars(a,b){return this.a6(this,A.a_("call","$2$overscroll$scrollbars",0,[a,b],["overscroll","scrollbars"],0))}, +$2$baseOffset$extentOffset(a,b){return this.a6(this,A.a_("call","$2$baseOffset$extentOffset",0,[a,b],["baseOffset","extentOffset"],0))}, +$2$0(a,b){return this.a6(this,A.a_("call","$2$0",0,[a,b],[],2))}, +$1$extentOffset(a){return this.a6(this,A.a_("call","$1$extentOffset",0,[a],["extentOffset"],0))}, +$1$spellCheckService(a){return this.a6(this,A.a_("call","$1$spellCheckService",0,[a],["spellCheckService"],0))}, +$1$height(a){return this.a6(this,A.a_("call","$1$height",0,[a],["height"],0))}, +$1$borderSide(a){return this.a6(this,A.a_("call","$1$borderSide",0,[a],["borderSide"],0))}, +$31$alignLabelWithHint$border$constraints$contentPadding$counterStyle$disabledBorder$enabledBorder$errorBorder$errorMaxLines$errorStyle$fillColor$filled$floatingLabelAlignment$floatingLabelBehavior$floatingLabelStyle$focusColor$focusedBorder$focusedErrorBorder$helperMaxLines$helperStyle$hintFadeDuration$hintStyle$hoverColor$iconColor$isCollapsed$isDense$labelStyle$prefixIconColor$prefixStyle$suffixIconColor$suffixStyle(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1){return this.a6(this,A.a_("call","$31$alignLabelWithHint$border$constraints$contentPadding$counterStyle$disabledBorder$enabledBorder$errorBorder$errorMaxLines$errorStyle$fillColor$filled$floatingLabelAlignment$floatingLabelBehavior$floatingLabelStyle$focusColor$focusedBorder$focusedErrorBorder$helperMaxLines$helperStyle$hintFadeDuration$hintStyle$hoverColor$iconColor$isCollapsed$isDense$labelStyle$prefixIconColor$prefixStyle$suffixIconColor$suffixStyle",0,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1],["alignLabelWithHint","border","constraints","contentPadding","counterStyle","disabledBorder","enabledBorder","errorBorder","errorMaxLines","errorStyle","fillColor","filled","floatingLabelAlignment","floatingLabelBehavior","floatingLabelStyle","focusColor","focusedBorder","focusedErrorBorder","helperMaxLines","helperStyle","hintFadeDuration","hintStyle","hoverColor","iconColor","isCollapsed","isDense","labelStyle","prefixIconColor","prefixStyle","suffixIconColor","suffixStyle"],0))}, +$2$enabled$hintMaxLines(a,b){return this.a6(this,A.a_("call","$2$enabled$hintMaxLines",0,[a,b],["enabled","hintMaxLines"],0))}, +$1$task(a){return this.a6(this,A.a_("call","$1$task",0,[a],["task"],0))}, +$1$oldWidget(a){return this.a6(this,A.a_("call","$1$oldWidget",0,[a],["oldWidget"],0))}, +$3$isDiscrete$parentBox$sliderTheme(a,b,c){return this.a6(this,A.a_("call","$3$isDiscrete$parentBox$sliderTheme",0,[a,b,c],["isDiscrete","parentBox","sliderTheme"],0))}, +$2$deviceInfo$textScaleFactor(a,b){return this.a6(this,A.a_("call","$2$deviceInfo$textScaleFactor",0,[a,b],["deviceInfo","textScaleFactor"],0))}, +$1$showDeviceFrame(a){return this.a6(this,A.a_("call","$1$showDeviceFrame",0,[a],["showDeviceFrame"],0))}, +$1$orientation(a){return this.a6(this,A.a_("call","$1$orientation",0,[a],["orientation"],0))}, +$1$errorText(a){return this.a6(this,A.a_("call","$1$errorText",0,[a],["errorText"],0))}, +$1$platform(a){return this.a6(this,A.a_("call","$1$platform",0,[a],["platform"],0))}, +$1$width(a){return this.a6(this,A.a_("call","$1$width",0,[a],["width"],0))}, +$2$key$onChanged(a,b){return this.a6(this,A.a_("call","$2$key$onChanged",0,[a,b],["key","onChanged"],0))}, +$1$textScaler(a){return this.a6(this,A.a_("call","$1$textScaler",0,[a],["textScaler"],0))}, +$5$devicePixelRatio$padding$size$viewInsets$viewPadding(a,b,c,d,e){return this.a6(this,A.a_("call","$5$devicePixelRatio$padding$size$viewInsets$viewPadding",0,[a,b,c,d,e],["devicePixelRatio","padding","size","viewInsets","viewPadding"],0))}, +$2$platform$visualDensity(a,b){return this.a6(this,A.a_("call","$2$platform$visualDensity",0,[a,b],["platform","visualDensity"],0))}, +$1$dividerColor(a){return this.a6(this,A.a_("call","$1$dividerColor",0,[a],["dividerColor"],0))}, +$1$fontFeatures(a){return this.a6(this,A.a_("call","$1$fontFeatures",0,[a],["fontFeatures"],0))}, +$2$chunkCallback(a,b){return this.a6(this,A.a_("call","$2$chunkCallback",0,[a,b],["chunkCallback"],0))}, +$5$getChildren$tag(a,b,c,d,e){return this.a6(this,A.a_("call","$5$getChildren$tag",0,[a,b,c,d,e],["getChildren","tag"],0))}, +$3$getChildren(a,b,c){return this.a6(this,A.a_("call","$3$getChildren",0,[a,b,c],["getChildren"],0))}, +$4$getChildren(a,b,c,d){return this.a6(this,A.a_("call","$4$getChildren",0,[a,b,c,d],["getChildren"],0))}, +$1$parentSyntax(a){return this.a6(this,A.a_("call","$1$parentSyntax",0,[a],["parentSyntax"],0))}, +$3$backgroundColor$fontFamily$fontSize(a,b,c){return this.a6(this,A.a_("call","$3$backgroundColor$fontFamily$fontSize",0,[a,b,c],["backgroundColor","fontFamily","fontSize"],0))}, +$2$out(a,b){return this.a6(this,A.a_("call","$2$out",0,[a,b],["out"],0))}, +$4$hitboxFilter$ignoreHitboxes$out(a,b,c,d){return this.a6(this,A.a_("call","$4$hitboxFilter$ignoreHitboxes$out",0,[a,b,c,d],["hitboxFilter","ignoreHitboxes","out"],0))}, +$3$maxDistance$out(a,b,c){return this.a6(this,A.a_("call","$3$maxDistance$out",0,[a,b,c],["maxDistance","out"],0))}, +$1$rootComponent(a){return this.a6(this,A.a_("call","$1$rootComponent",0,[a],["rootComponent"],0))}, +$1$2$eventHandler$rootComponent(a,b,c){return this.a6(this,A.a_("call","$1$2$eventHandler$rootComponent",0,[a,b,c],["eventHandler","rootComponent"],1))}, +$2$random$within(a,b){return this.a6(this,A.a_("call","$2$random$within",0,[a,b],["random","within"],0))}, +$4$logicalKey$physicalKey$synthesized$timeStamp(a,b,c,d){return this.a6(this,A.a_("call","$4$logicalKey$physicalKey$synthesized$timeStamp",0,[a,b,c,d],["logicalKey","physicalKey","synthesized","timeStamp"],0))}, +$1$includeChildren(a){return this.a6(this,A.a_("call","$1$includeChildren",0,[a],["includeChildren"],0))}, +$5$elevationAdjustment$parentPaintClipRect$parentSemanticsClipRect$result$siblingNodes(a,b,c,d,e){return this.a6(this,A.a_("call","$5$elevationAdjustment$parentPaintClipRect$parentSemanticsClipRect$result$siblingNodes",0,[a,b,c,d,e],["elevationAdjustment","parentPaintClipRect","parentSemanticsClipRect","result","siblingNodes"],0))}, +$1$config(a){return this.a6(this,A.a_("call","$1$config",0,[a],["config"],0))}, +$2$descendant$rect(a,b){return this.a6(this,A.a_("call","$2$descendant$rect",0,[a,b],["descendant","rect"],0))}, +$3$onlyFirst(a,b,c){return this.a6(this,A.a_("call","$3$onlyFirst",0,[a,b,c],["onlyFirst"],0))}, +$3$oldLayer(a,b,c){return this.a6(this,A.a_("call","$3$oldLayer",0,[a,b,c],["oldLayer"],0))}, +$2$oldLayer(a,b){return this.a6(this,A.a_("call","$2$oldLayer",0,[a,b],["oldLayer"],0))}, +$1$oldLayer(a){return this.a6(this,A.a_("call","$1$oldLayer",0,[a],["oldLayer"],0))}, +$3$offset$oldLayer(a,b,c){return this.a6(this,A.a_("call","$3$offset$oldLayer",0,[a,b,c],["offset","oldLayer"],0))}, +$4$isComplexHint$willChangeHint(a,b,c,d){return this.a6(this,A.a_("call","$4$isComplexHint$willChangeHint",0,[a,b,c,d],["isComplexHint","willChangeHint"],0))}, +$4$textDirection(a,b,c,d){return this.a6(this,A.a_("call","$4$textDirection",0,[a,b,c,d],["textDirection"],0))}, +$1$maximum(a){return this.a6(this,A.a_("call","$1$maximum",0,[a],["maximum"],0))}, +$5$borderRadius$shape$textDirection(a,b,c,d,e){return this.a6(this,A.a_("call","$5$borderRadius$shape$textDirection",0,[a,b,c,d,e],["borderRadius","shape","textDirection"],0))}, +$4$isDiscrete$offset$parentBox$sliderTheme(a,b,c,d){return this.a6(this,A.a_("call","$4$isDiscrete$offset$parentBox$sliderTheme",0,[a,b,c,d],["isDiscrete","offset","parentBox","sliderTheme"],0))}, +$12$activationAnimation$enableAnimation$isDiscrete$labelPainter$parentBox$sizeWithOverflow$sliderTheme$textDirection$textScaleFactor$value(a,b,c,d,e,f,g,h,i,j,k,l){return this.a6(this,A.a_("call","$12$activationAnimation$enableAnimation$isDiscrete$labelPainter$parentBox$sizeWithOverflow$sliderTheme$textDirection$textScaleFactor$value",0,[a,b,c,d,e,f,g,h,i,j,k,l],["activationAnimation","enableAnimation","isDiscrete","labelPainter","parentBox","sizeWithOverflow","sliderTheme","textDirection","textScaleFactor","value"],0))}, +$3$blendMode$oldLayer(a,b,c){return this.a6(this,A.a_("call","$3$blendMode$oldLayer",0,[a,b,c],["blendMode","oldLayer"],0))}, +$2$filterQuality(a,b){return this.a6(this,A.a_("call","$2$filterQuality",0,[a,b],["filterQuality"],0))}, +$3$clipBehavior$oldLayer(a,b,c){return this.a6(this,A.a_("call","$3$clipBehavior$oldLayer",0,[a,b,c],["clipBehavior","oldLayer"],0))}, +$6$oldLayer(a,b,c,d,e,f){return this.a6(this,A.a_("call","$6$oldLayer",0,[a,b,c,d,e,f],["oldLayer"],0))}, +$6$gapExtent$gapPercentage$gapStart$textDirection(a,b,c,d,e,f){return this.a6(this,A.a_("call","$6$gapExtent$gapPercentage$gapStart$textDirection",0,[a,b,c,d,e,f],["gapExtent","gapPercentage","gapStart","textDirection"],0))}, +$2$radius(a,b){return this.a6(this,A.a_("call","$2$radius",0,[a,b],["radius"],0))}, +$2$size(a,b){return this.a6(this,A.a_("call","$2$size",0,[a,b],["size"],0))}, +$2$parentUsesSize(a,b){return this.a6(this,A.a_("call","$2$parentUsesSize",0,[a,b],["parentUsesSize"],0))}, +$1$maxWidth(a){return this.a6(this,A.a_("call","$1$maxWidth",0,[a],["maxWidth"],0))}, +$3$maxWidth$minHeight$minWidth(a,b,c){return this.a6(this,A.a_("call","$3$maxWidth$minHeight$minWidth",0,[a,b,c],["maxWidth","minHeight","minWidth"],0))}, +$3$maxHeight$minHeight$minWidth(a,b,c){return this.a6(this,A.a_("call","$3$maxHeight$minHeight$minWidth",0,[a,b,c],["maxHeight","minHeight","minWidth"],0))}, +$4$isScrolling$newPosition$oldPosition$velocity(a,b,c,d){return this.a6(this,A.a_("call","$4$isScrolling$newPosition$oldPosition$velocity",0,[a,b,c,d],["isScrolling","newPosition","oldPosition","velocity"],0))}, +$2$from$to(a,b){return this.a6(this,A.a_("call","$2$from$to",0,[a,b],["from","to"],0))}, +$2$bottomNavigationBarTop$floatingActionButtonArea(a,b){return this.a6(this,A.a_("call","$2$bottomNavigationBarTop$floatingActionButtonArea",0,[a,b],["bottomNavigationBarTop","floatingActionButtonArea"],0))}, +i(a,b){return this.a6(a,A.a_("[]","i",0,[b],[],0))}, +vd(a){return this.a6(this,A.a_("_yieldStar","vd",0,[a],[],0))}, +rC(){return this.a6(this,A.a_("toJson","rC",0,[],[],0))}, +Y(a,b){return this.a6(a,A.a_("-","Y",0,[b],[],0))}, +a2(a,b){return this.a6(a,A.a_("*","a2",0,[b],[],0))}, +X(a,b){return this.a6(a,A.a_("+","X",0,[b],[],0))}, +cH(){return this.a6(this,A.a_("didRegisterListener","cH",0,[],[],0))}, +yZ(){return this.a6(this,A.a_("didUnregisterListener","yZ",0,[],[],0))}, +gF(a){return this.a6(a,A.a_("length","gF",1,[],[],0))}, +gOS(a){return this.a6(a,A.a_("HEAPU8","gOS",1,[],[],0))}, +gTJ(a){return this.a6(a,A.a_("asm","gTJ",1,[],[],0))}, +gkV(a){return this.a6(a,A.a_("fontWeight","gkV",1,[],[],0))}, +gov(a){return this.a6(a,A.a_("fontStyle","gov",1,[],[],0))}} +A.aqB.prototype={ +j(a){return""}, +$ieh:1} +A.ce.prototype={ +gadz(){var s=this.gadA() +if($.fJ()===1e6)return s +return s*1000}, +gn3(){var s=this.gadA() +if($.fJ()===1000)return s +return B.f.cN(s,1000)}, +bR(a){var s=this,r=s.b +if(r!=null){s.a=s.a+($.GN.$0()-r) +s.b=null}}, +bF(a){var s=this.b +this.a=s==null?$.GN.$0():s}, +gadA(){var s=this.b +if(s==null)s=$.GN.$0() +return s-this.a}} +A.Rb.prototype={ +gar(a){return new A.Ra(this.a,0,0)}, +ga_(a){var s,r,q=this.a,p=q.length +if(p===0)throw A.d(A.ad("No elements.")) +s=q.charCodeAt(p-1) +if((s&64512)===56320&&p>1){r=q.charCodeAt(p-2) +if((r&64512)===55296)return A.bsh(r,s)}return s}} +A.Ra.prototype={ +ga1(a){return this.d}, +H(){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}s=n.charCodeAt(o) +r=o+1 +if((s&64512)===55296&&r4)this.a.$2("an IPv6 part can only contain a maximum of 4 hex digits",a) +s=A.et(B.d.am(this.b,a,b),null,16) +if(s<0||s>65535)this.a.$2("each part must be in the range of `0x0..0xFFFF`",a) +return s}, +$S:386} +A.Yc.prototype={ +gC5(){var s,r,q,p,o=this,n=o.w +if(n===$){s=o.a +r=s.length!==0?""+s+":":"" +q=o.c +p=q==null +if(!p||s==="file"){s=r+"//" +r=o.b +if(r.length!==0)s=s+r+"@" +if(!p)s+=q +r=o.d +if(r!=null)s=s+":"+A.j(r)}else s=r +s+=o.e +r=o.f +if(r!=null)s=s+"?"+r +r=o.r +if(r!=null)s=s+"#"+r +n!==$&&A.N() +n=o.w=s.charCodeAt(0)==0?s:s}return n}, +gEZ(){var s,r,q=this,p=q.x +if(p===$){s=q.e +if(s.length!==0&&s.charCodeAt(0)===47)s=B.d.c5(s,1) +r=s.length===0?B.dQ:A.A8(new A.W(A.b(s.split("/"),t.T),A.bRS(),t.cj),t.N) +q.x!==$&&A.N() +p=q.x=r}return p}, +gL(a){var s,r=this,q=r.y +if(q===$){s=B.d.gL(r.gC5()) +r.y!==$&&A.N() +r.y=s +q=s}return q}, +gru(){var s,r,q=this,p=q.Q +if(p===$){s=q.f +r=A.bO4(s==null?"":s) +q.Q!==$&&A.N() +q.Q=r +p=r}return p}, +gZQ(){return this.b}, +gE9(a){var s=this.c +if(s==null)return"" +if(B.d.c4(s,"["))return B.d.am(s,1,s.length-1) +return s}, +gF2(a){var s=this.d +return s==null?A.brR(this.a):s}, +gzQ(a){var s=this.f +return s==null?"":s}, +gne(){var s=this.r +return s==null?"":s}, +Xy(a){var s=this.a +if(a.length!==s.length)return!1 +return A.bhR(a,s,0)>=0}, +Za(a,b,c){var s,r,q,p,o,n,m,l,k,j=this,i=j.a +if(c!=null){c=A.b89(c,0,c.length) +s=c!==i}else{c=i +s=!1}r=c==="file" +q=j.b +p=j.d +if(s)p=A.b84(p,c) +o=j.c +if(!(o!=null))o=q.length!==0||p!=null||r?"":null +n=j.e +if(!r)m=o!=null&&n.length!==0 +else m=!0 +if(m&&!B.d.c4(n,"/"))n="/"+n +l=n +if(b!=null)k=A.b85(null,0,0,b) +else k=j.f +return A.Yd(c,q,o,p,l,k,j.r)}, +ahU(a,b){return this.Za(0,null,b)}, +gaff(){if(this.a!==""){var s=this.r +s=(s==null?"":s)===""}else s=!1 +return s}, +a6m(a,b){var s,r,q,p,o,n +for(s=0,r=0;B.d.fA(b,"../",r);){r+=3;++s}q=B.d.Ep(a,"/") +while(!0){if(!(q>0&&s>0))break +p=B.d.Lz(a,"/",q-1) +if(p<0)break +o=q-p +n=o!==2 +if(!n||o===3)if(a.charCodeAt(p+1)===46)n=!n||a.charCodeAt(p+2)===46 +else n=!1 +else n=!1 +if(n)break;--s +q=p}return B.d.j1(a,q+1,null,B.d.c5(b,r-3*s))}, +aG(a){return this.Fk(A.jn(a,0,null))}, +Fk(a){var s,r,q,p,o,n,m,l,k,j,i,h=this +if(a.gj6().length!==0)return a +else{s=h.a +if(a.gL8()){r=a.ahU(0,s) +return r}else{q=h.b +p=h.c +o=h.d +n=h.e +if(a.gaeH())m=a.gE3()?a.gzQ(a):h.f +else{l=A.bOb(h,n) +if(l>0){k=B.d.am(n,0,l) +n=a.gXb()?k+A.D3(a.ghg(a)):k+A.D3(h.a6m(B.d.c5(n,k.length),a.ghg(a)))}else if(a.gXb())n=A.D3(a.ghg(a)) +else if(n.length===0)if(p==null)n=s.length===0?a.ghg(a):A.D3(a.ghg(a)) +else n=A.D3("/"+a.ghg(a)) +else{j=h.a6m(n,a.ghg(a)) +r=s.length===0 +if(!r||p!=null||B.d.c4(n,"/"))n=A.D3(j) +else n=A.bhL(j,!r||p!=null)}m=a.gE3()?a.gzQ(a):null}}}i=a.gL9()?a.gne():null +return A.Yd(s,q,p,o,n,m,i)}, +gaeJ(){return this.a.length!==0}, +gL8(){return this.c!=null}, +gE3(){return this.f!=null}, +gL9(){return this.r!=null}, +gaeH(){return this.e.length===0}, +gXb(){return B.d.c4(this.e,"/")}, +Zq(){var s,r=this,q=r.a +if(q!==""&&q!=="file")throw A.d(A.af("Cannot extract a file path from a "+q+" URI")) +q=r.f +if((q==null?"":q)!=="")throw A.d(A.af(u.B)) +q=r.r +if((q==null?"":q)!=="")throw A.d(A.af(u.A)) +if(r.c!=null&&r.gE9(0)!=="")A.X(A.af(u.Q)) +s=r.gEZ() +A.bO2(s,!1) +q=A.aUh(B.d.c4(r.e,"/")?""+"/":"",s,"/") +q=q.charCodeAt(0)==0?q:q +return q}, +gpv(a){return this.a==="data"?A.bLS(this):null}, +j(a){return this.gC5()}, +k(a,b){var s,r,q=this +if(b==null)return!1 +if(q===b)return!0 +if(t.Xu.b(b))if(q.a===b.gj6())if(q.c!=null===b.gL8())if(q.b===b.gZQ())if(q.gE9(0)===b.gE9(b))if(q.gF2(0)===b.gF2(b))if(q.e===b.ghg(b)){s=q.f +r=s==null +if(!r===b.gE3()){if(r)s="" +if(s===b.gzQ(b)){s=q.r +r=s==null +if(!r===b.gL9()){if(r)s="" +s=s===b.gne()}else s=!1}else s=!1}else s=!1}else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +$iIy:1, +gj6(){return this.a}, +ghg(a){return this.e}} +A.b83.prototype={ +$1(a){return A.lM(B.YN,a,B.a1,!1)}, +$S:45} +A.b87.prototype={ +$2(a,b){var s=this.b,r=this.a +s.a+=r.a +r.a="&" +r=A.lM(B.km,a,B.a1,!0) +r=s.a+=r +if(b!=null&&b.length!==0){s.a=r+"=" +r=A.lM(B.km,b,B.a1,!0) +s.a+=r}}, +$S:387} +A.b86.prototype={ +$2(a,b){var s,r +if(b==null||typeof b=="string")this.a.$2(a,b) +else for(s=J.az(b),r=this.a;s.H();)r.$2(a,s.ga1(s))}, +$S:23} +A.b8a.prototype={ +$3(a,b,c){var s,r,q,p +if(a===c)return +s=this.a +r=this.b +if(b<0){q=A.nI(s,a,c,r,!0) +p=""}else{q=A.nI(s,a,b,r,!0) +p=A.nI(s,b+1,c,r,!0)}J.iD(this.c.cU(0,q,A.bRT()),p)}, +$S:388} +A.aWX.prototype={ +grJ(){var s,r,q,p,o=this,n=null,m=o.c +if(m==null){m=o.a +s=o.b[0]+1 +r=B.d.jX(m,"?",s) +q=m.length +if(r>=0){p=A.Ye(m,r+1,q,B.kg,!1,!1) +q=r}else p=n +m=o.c=new A.ahy(o,"data","",n,n,A.Ye(m,s,q,B.xv,!1,!1),p,n)}return m}, +gaV6(a){var s=this.b,r=s[0]+1,q=s[1] +if(r===q)return"text/plain" +return A.nI(this.a,r,q,B.a1,!1)}, +gaNs(a){var s,r=this.axq() +if(r>=0){s=this.b +return A.nI(this.a,s[r+1]+1,s[r+2],B.a1,!1)}return"US-ASCII"}, +axq(){var s,r,q,p,o=this.b +for(s=this.a,r=3;r<=o.length;r+=2){q=r-2 +p=o[q]+1 +if(o[r-1]===p+7&&A.bhR("charset",s,p)>=0)return q}return-1}, +ace(){var s,r,q,p,o,n,m,l,k=this.a,j=this.b,i=B.b.ga_(j)+1 +if((j.length&1)===1)return B.f3.acg(k,i) +j=k.length +s=j-i +for(r=i;r=0){n=p+1 +q[p]=l +r=m +p=n +continue}}throw A.d(A.dj("Invalid percent escape",k,r))}p=n}return q}, +aOf(){var s,r,q,p=this.gaNs(0),o=A.bEG(p) +if(o==null)throw A.d(A.af("Unknown charset: "+p)) +s=this.a +r=this.b +q=B.b.ga_(r)+1 +if((r.length&1)===1)return o.gDd().dB(B.f3.dB(B.d.c5(s,q))) +return A.nI(s,q,s.length,o,!1)}, +j(a){var s=this.a +return this.b[0]===-1?"data:"+s:s}} +A.b8U.prototype={ +$2(a,b){var s=this.a[a] +B.L.kU(s,0,96,b) +return s}, +$S:389} +A.b8V.prototype={ +$3(a,b,c){var s,r +for(s=b.length,r=0;r>>0]=c}, +$S:239} +A.nH.prototype={ +gaeJ(){return this.b>0}, +gL8(){return this.c>0}, +gXf(){return this.c>0&&this.d+10&&this.r>=this.a.length}, +Xy(a){var s=a.length +if(s===0)return this.b<0 +if(s!==this.b)return!1 +return A.bhR(a,this.a,0)>=0}, +gj6(){var s=this.w +return s==null?this.w=this.ava():s}, +ava(){var s,r=this,q=r.b +if(q<=0)return"" +s=q===4 +if(s&&B.d.c4(r.a,"http"))return"http" +if(q===5&&B.d.c4(r.a,"https"))return"https" +if(s&&B.d.c4(r.a,"file"))return"file" +if(q===7&&B.d.c4(r.a,"package"))return"package" +return B.d.am(r.a,0,q)}, +gZQ(){var s=this.c,r=this.b+3 +return s>r?B.d.am(this.a,r,s-1):""}, +gE9(a){var s=this.c +return s>0?B.d.am(this.a,s,this.d):""}, +gF2(a){var s,r=this +if(r.gXf())return A.et(B.d.am(r.a,r.d+1,r.e),null,null) +s=r.b +if(s===4&&B.d.c4(r.a,"http"))return 80 +if(s===5&&B.d.c4(r.a,"https"))return 443 +return 0}, +ghg(a){return B.d.am(this.a,this.e,this.f)}, +gzQ(a){var s=this.f,r=this.r +return s=this.r)return B.CK +var s=A.bs0(this.gzQ(0)) +s.aiG(s,A.btu()) +return A.bei(s,t.N,t.yp)}, +a5W(a){var s=this.d+1 +return s+a.length===this.e&&B.d.fA(this.a,a,s)}, +aYy(){var s=this,r=s.r,q=s.a +if(r>=q.length)return s +return new A.nH(B.d.am(q,0,r),s.b,s.c,s.d,s.e,s.f,r,s.w)}, +Za(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null +if(c!=null){c=A.b89(c,0,c.length) +s=!(h.b===c.length&&B.d.c4(h.a,c))}else{c=h.gj6() +s=!1}r=c==="file" +q=h.c +p=q>0?B.d.am(h.a,h.b+3,q):"" +o=h.gXf()?h.gF2(0):g +if(s)o=A.b84(o,c) +q=h.c +if(q>0)n=B.d.am(h.a,q,h.d) +else n=p.length!==0||o!=null||r?"":g +q=h.a +m=h.f +l=B.d.am(q,h.e,m) +if(!r)k=n!=null&&l.length!==0 +else k=!0 +if(k&&!B.d.c4(l,"/"))l="/"+l +if(b!=null)j=A.b85(g,0,0,b) +else{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.d.c4(a.a,"file"))p=b.e!==b.f +else if(q&&B.d.c4(a.a,"http"))p=!b.a5W("80") +else p=!(r===5&&B.d.c4(a.a,"https"))||!b.a5W("443") +if(p){o=r+1 +return new A.nH(B.d.am(a.a,0,o)+B.d.c5(b.a,c+1),r,s+o,b.d+o,b.e+o,b.f+o,b.r+o,a.w)}else return this.a9h().Fk(b)}n=b.e +c=b.f +if(n===c){s=b.r +if(c0?l:m +o=k-n +return new A.nH(B.d.am(a.a,0,k)+B.d.c5(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){for(;B.d.fA(s,"../",n);)n+=3 +o=j-n+1 +return new A.nH(B.d.am(a.a,0,j)+"/"+B.d.c5(s,n),a.b,a.c,a.d,j,c+o,b.r+o,a.w)}h=a.a +l=A.brH(this) +if(l>=0)g=l +else for(g=j;B.d.fA(h,"../",g);)g+=3 +f=0 +while(!0){e=n+3 +if(!(e<=c&&B.d.fA(s,"../",n)))break;++f +n=e}for(d="";i>g;){--i +if(h.charCodeAt(i)===47){if(f===0){d="/" +break}--f +d="/"}}if(i===g&&a.b<=0&&!B.d.fA(h,"/",j)){n-=f*3 +d=""}o=i-n+d.length +return new A.nH(B.d.am(h,0,i)+d+B.d.c5(s,n),a.b,a.c,a.d,j,c+o,b.r+o,a.w)}, +Zq(){var s,r=this,q=r.b +if(q>=0){s=!(q===4&&B.d.c4(r.a,"file")) +q=s}else q=!1 +if(q)throw A.d(A.af("Cannot extract a file path from a "+r.gj6()+" URI")) +q=r.f +s=r.a +if(q0?s.gE9(0):r,n=s.gXf()?s.gF2(0):r,m=s.a,l=s.f,k=B.d.am(m,s.e,l),j=s.r +l=l>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.Mt.prototype={ +j(a){var s,r=a.left +r.toString +s=a.top +s.toString +return"Rectangle ("+A.j(r)+", "+A.j(s)+") "+A.j(this.gbW(a))+" x "+A.j(this.gb9(a))}, +k(a,b){var s,r +if(b==null)return!1 +if(t.Bb.b(b)){s=a.left +s.toString +r=J.bS(b) +if(s===r.gae(b)){s=a.top +s.toString +s=s===r.gaj(b)&&this.gbW(a)===r.gbW(b)&&this.gb9(a)===r.gb9(b)}else s=!1}else s=!1 +return s}, +gL(a){var s,r=a.left +r.toString +s=a.top +s.toString +return A.a6(r,s,this.gbW(a),this.gb9(a),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +gaQ(a){var s=a.bottom +s.toString +return s}, +ga5v(a){return a.height}, +gb9(a){var s=this.ga5v(a) +s.toString +return s}, +gae(a){var s=a.left +s.toString +return s}, +gaH(a){var s=a.right +s.toString +return s}, +gaj(a){var s=a.top +s.toString +return s}, +gaaC(a){return a.width}, +gbW(a){var s=this.gaaC(a) +s.toString +return s}, +$ihv:1} +A.a2F.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.a2H.prototype={ +gF(a){var s=a.length +s.toString +return s}} +A.agu.prototype={ +G(a,b){return J.xG(this.b,b)}, +gaA(a){return this.a.firstElementChild==null}, +gF(a){return this.b.length}, +i(a,b){return t.lU.a(this.b[b])}, +u(a,b,c){this.a.replaceChild(c,this.b[b]).toString}, +sF(a,b){throw A.d(A.af("Cannot resize element lists"))}, +E(a,b){this.a.appendChild(b).toString +return b}, +gar(a){var s=this.eT(this) +return new J.cA(s,s.length,A.a5(s).h("cA<1>"))}, +I(a,b){A.bMA(this.a,b)}, +kU(a,b,c,d){throw A.d(A.d_(null))}, +hX(a,b,c){throw A.d(A.d_(null))}, +c3(a,b,c,d,e){throw A.d(A.d_(null))}, +dL(a,b,c,d){return this.c3(0,b,c,d,0)}, +P(a,b){return A.bMC(this.a,b)}, +hc(a,b,c){var s,r=this.b,q=r.length +if(b>q)throw A.d(A.du(b,0,this.gF(0),null,null)) +s=this.a +if(b===q)s.appendChild(c).toString +else s.insertBefore(c,t.lU.a(r[b])).toString}, +hO(a,b,c){throw A.d(A.d_(null))}, +jC(a,b,c){throw A.d(A.d_(null))}, +di(a,b){var s=t.lU.a(this.b[b]) +this.a.removeChild(s).toString +return s}, +eQ(a){var s=this.ga_(0) +this.a.removeChild(s).toString +return s}, +ga9(a){return A.bMB(this.a)}, +ga_(a){var s=this.a.lastElementChild +if(s==null)throw A.d(A.ad("No elements")) +return s}} +A.e4.prototype={ +gbQ(a){var s=a.children +s.toString +return new A.agu(a,s)}, +j(a){var s=a.localName +s.toString +return s}, +$ie4:1} +A.bh.prototype={$ibh:1} +A.aR.prototype={ +Ts(a,b,c,d){if(c!=null)this.aBS(a,b,c,!1)}, +aBS(a,b,c,d){return a.addEventListener(b,A.uh(c,1),!1)}, +aGf(a,b,c,d){return a.removeEventListener(b,A.uh(c,1),!1)}} +A.ko.prototype={$iko:1} +A.a3w.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.a3y.prototype={ +gF(a){return a.length}} +A.a3Z.prototype={ +gF(a){return a.length}} +A.kp.prototype={$ikp:1} +A.a4R.prototype={ +gF(a){var s=a.length +s.toString +return s}} +A.zA.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.a6n.prototype={ +j(a){var s=String(a) +s.toString +return s}} +A.a6O.prototype={ +gF(a){return a.length}} +A.a6U.prototype={ +I(a,b){throw A.d(A.af("Not supported"))}, +aR(a,b){return A.nL(a.get(b))!=null}, +i(a,b){return A.nL(a.get(b))}, +al(a,b){var s,r,q=a.entries() +for(;!0;){s=q.next() +r=s.done +r.toString +if(r)return +r=s.value[0] +r.toString +b.$2(r,A.nL(s.value[1]))}}, +gdv(a){var s=A.b([],t.T) +this.al(a,new A.aKF(s)) +return s}, +gbm(a){var s=A.b([],t.n4) +this.al(a,new A.aKG(s)) +return s}, +gF(a){var s=a.size +s.toString +return s}, +gaA(a){var s=a.size +s.toString +return s===0}, +gcT(a){var s=a.size +s.toString +return s!==0}, +u(a,b,c){throw A.d(A.af("Not supported"))}, +cU(a,b,c){throw A.d(A.af("Not supported"))}, +P(a,b){throw A.d(A.af("Not supported"))}, +$ibA:1} +A.aKF.prototype={ +$2(a,b){return this.a.push(a)}, +$S:23} +A.aKG.prototype={ +$2(a,b){return this.a.push(b)}, +$S:23} +A.a6V.prototype={ +I(a,b){throw A.d(A.af("Not supported"))}, +aR(a,b){return A.nL(a.get(b))!=null}, +i(a,b){return A.nL(a.get(b))}, +al(a,b){var s,r,q=a.entries() +for(;!0;){s=q.next() +r=s.done +r.toString +if(r)return +r=s.value[0] +r.toString +b.$2(r,A.nL(s.value[1]))}}, +gdv(a){var s=A.b([],t.T) +this.al(a,new A.aKH(s)) +return s}, +gbm(a){var s=A.b([],t.n4) +this.al(a,new A.aKI(s)) +return s}, +gF(a){var s=a.size +s.toString +return s}, +gaA(a){var s=a.size +s.toString +return s===0}, +gcT(a){var s=a.size +s.toString +return s!==0}, +u(a,b,c){throw A.d(A.af("Not supported"))}, +cU(a,b,c){throw A.d(A.af("Not supported"))}, +P(a,b){throw A.d(A.af("Not supported"))}, +$ibA:1} +A.aKH.prototype={ +$2(a,b){return this.a.push(a)}, +$S:23} +A.aKI.prototype={ +$2(a,b){return this.a.push(b)}, +$S:23} +A.kv.prototype={$ikv:1} +A.a6W.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.CG.prototype={ +ga9(a){var s=this.a.firstChild +if(s==null)throw A.d(A.ad("No elements")) +return s}, +ga_(a){var s=this.a.lastChild +if(s==null)throw A.d(A.ad("No elements")) +return s}, +E(a,b){this.a.appendChild(b).toString}, +I(a,b){var s,r,q,p,o +if(b instanceof A.CG){s=b.a +r=this.a +if(s!==r)for(q=s.childNodes.length,p=0;pq)throw A.d(A.du(b,0,this.gF(0),null,null)) +if(b===q)s.appendChild(c).toString +else s.insertBefore(c,r[b]).toString}, +hO(a,b,c){var s=this.a,r=s.childNodes +if(b===r.length)this.I(0,c) +else J.bkk(s,c,r[b])}, +jC(a,b,c){throw A.d(A.af("Cannot setAll on Node list"))}, +eQ(a){var s=this.ga_(0) +this.a.removeChild(s).toString +return s}, +di(a,b){var s=this.a,r=s.childNodes[b] +s.removeChild(r).toString +return r}, +P(a,b){return!1}, +u(a,b,c){var s=this.a +s.replaceChild(c,s.childNodes[b]).toString}, +gar(a){var s=this.a.childNodes +return new A.EW(s,s.length,A.b8(s).h("EW"))}, +c3(a,b,c,d,e){throw A.d(A.af("Cannot setRange on Node list"))}, +dL(a,b,c,d){return this.c3(0,b,c,d,0)}, +kU(a,b,c,d){throw A.d(A.af("Cannot fillRange on Node list"))}, +hX(a,b,c){throw A.d(A.af("Cannot removeRange on Node list"))}, +gF(a){return this.a.childNodes.length}, +sF(a,b){throw A.d(A.af("Cannot set length on immutable List."))}, +i(a,b){return this.a.childNodes[b]}} +A.c5.prototype={ +hW(a){var s=a.parentNode +if(s!=null)s.removeChild(a).toString}, +aYQ(a,b){var s,r,q +try{r=a.parentNode +r.toString +s=r +J.bAY(s,b,a)}catch(q){}return a}, +aTG(a,b,c){var s,r,q,p +if(b instanceof A.CG){s=b.a +if(s===a)throw A.d(A.c3(b,null)) +for(r=s.childNodes.length,q=0;q>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.kz.prototype={ +gF(a){return a.length}, +$ikz:1} +A.a8X.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.aaQ.prototype={ +I(a,b){throw A.d(A.af("Not supported"))}, +aR(a,b){return A.nL(a.get(b))!=null}, +i(a,b){return A.nL(a.get(b))}, +al(a,b){var s,r,q=a.entries() +for(;!0;){s=q.next() +r=s.done +r.toString +if(r)return +r=s.value[0] +r.toString +b.$2(r,A.nL(s.value[1]))}}, +gdv(a){var s=A.b([],t.T) +this.al(a,new A.aQO(s)) +return s}, +gbm(a){var s=A.b([],t.n4) +this.al(a,new A.aQP(s)) +return s}, +gF(a){var s=a.size +s.toString +return s}, +gaA(a){var s=a.size +s.toString +return s===0}, +gcT(a){var s=a.size +s.toString +return s!==0}, +u(a,b,c){throw A.d(A.af("Not supported"))}, +cU(a,b,c){throw A.d(A.af("Not supported"))}, +P(a,b){throw A.d(A.af("Not supported"))}, +$ibA:1} +A.aQO.prototype={ +$2(a,b){return this.a.push(a)}, +$S:23} +A.aQP.prototype={ +$2(a,b){return this.a.push(b)}, +$S:23} +A.Ho.prototype={$iHo:1} +A.ab8.prototype={ +gF(a){return a.length}} +A.kG.prototype={$ikG:1} +A.ac_.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.kH.prototype={$ikH:1} +A.ac4.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.kI.prototype={ +gF(a){return a.length}, +$ikI:1} +A.acu.prototype={ +I(a,b){b.al(0,new A.aU3(a))}, +aR(a,b){return a.getItem(A.cE(b))!=null}, +i(a,b){return a.getItem(A.cE(b))}, +u(a,b,c){a.setItem(b,c)}, +cU(a,b,c){var s +if(a.getItem(b)==null)a.setItem(b,c.$0()) +s=a.getItem(b) +return s==null?A.cE(s):s}, +P(a,b){var s +A.cE(b) +s=a.getItem(b) +a.removeItem(b) +return s}, +al(a,b){var s,r,q +for(s=0;!0;++s){r=a.key(s) +if(r==null)return +q=a.getItem(r) +q.toString +b.$2(r,q)}}, +gdv(a){var s=A.b([],t.T) +this.al(a,new A.aU4(s)) +return s}, +gbm(a){var s=A.b([],t.T) +this.al(a,new A.aU5(s)) +return s}, +gF(a){var s=a.length +s.toString +return s}, +gaA(a){return a.key(0)==null}, +gcT(a){return a.key(0)!=null}, +$ibA:1} +A.aU3.prototype={ +$2(a,b){this.a.setItem(a,b)}, +$S:147} +A.aU4.prototype={ +$2(a,b){return this.a.push(a)}, +$S:147} +A.aU5.prototype={ +$2(a,b){return this.a.push(b)}, +$S:147} +A.jj.prototype={$ijj:1} +A.kR.prototype={$ikR:1} +A.jl.prototype={$ijl:1} +A.adu.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.adv.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.adA.prototype={ +gF(a){var s=a.length +s.toString +return s}} +A.kS.prototype={$ikS:1} +A.adI.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.adJ.prototype={ +gF(a){return a.length}} +A.ae4.prototype={ +j(a){var s=String(a) +s.toString +return s}} +A.aeg.prototype={ +gF(a){return a.length}} +A.ahc.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.UK.prototype={ +j(a){var s,r,q,p=a.left +p.toString +s=a.top +s.toString +r=a.width +r.toString +q=a.height +q.toString +return"Rectangle ("+A.j(p)+", "+A.j(s)+") "+A.j(r)+" x "+A.j(q)}, +k(a,b){var s,r +if(b==null)return!1 +if(t.Bb.b(b)){s=a.left +s.toString +r=J.bS(b) +if(s===r.gae(b)){s=a.top +s.toString +if(s===r.gaj(b)){s=a.width +s.toString +if(s===r.gbW(b)){s=a.height +s.toString +r=s===r.gb9(b) +s=r}else s=!1}else s=!1}else s=!1}else s=!1 +return s}, +gL(a){var s,r,q,p=a.left +p.toString +s=a.top +s.toString +r=a.width +r.toString +q=a.height +q.toString +return A.a6(p,s,r,q,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +ga5v(a){return a.height}, +gb9(a){var s=a.height +s.toString +return s}, +gaaC(a){return a.width}, +gbW(a){var s=a.width +s.toString +return s}} +A.ajF.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +return a[b]}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){if(a.length>0)return a[0] +throw A.d(A.ad("No elements"))}, +ga_(a){var s=a.length +if(s>0)return a[s-1] +throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.VY.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.aq4.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.aqE.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.d(A.fs(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return a[b]}, +$icw:1, +$iat:1, +$icG:1, +$iz:1, +$iH:1} +A.beP.prototype={} +A.V6.prototype={ +hf(a,b,c,d){return A.bMV(this.a,this.b,a,!1,A.w(this).c)}, +tY(a,b,c){return this.hf(a,null,b,c)}} +A.V0.prototype={} +A.aiL.prototype={ +bq(a){var s=this +if(s.b==null)return $.bdC() +s.SV() +s.d=s.b=null +return $.bdC()}, +zG(a){var s,r=this +if(r.b==null)throw A.d(A.ad("Subscription has been canceled.")) +r.SV() +s=A.btd(new A.b1w(a),t.I3) +r.d=s +r.ST()}, +nt(a,b){if(this.b==null)return;++this.a +this.SV()}, +kC(a){return this.nt(0,null)}, +j2(a){var s=this +if(s.b==null||s.a<=0)return;--s.a +s.ST()}, +ST(){var s,r=this,q=r.d +if(q!=null&&r.a<=0){s=r.b +s.toString +J.bAZ(s,r.c,q,!1)}}, +SV(){var s,r=this.d +if(r!=null){s=this.b +s.toString +J.bAX(s,this.c,r,!1)}}} +A.b1u.prototype={ +$1(a){return this.a.$1(a)}, +$S:237} +A.b1w.prototype={ +$1(a){return this.a.$1(a)}, +$S:237} +A.c_.prototype={ +gar(a){return new A.EW(a,this.gF(a),A.b8(a).h("EW"))}, +E(a,b){throw A.d(A.af("Cannot add to immutable List."))}, +I(a,b){throw A.d(A.af("Cannot add to immutable List."))}, +hc(a,b,c){throw A.d(A.af("Cannot add to immutable List."))}, +hO(a,b,c){throw A.d(A.af("Cannot add to immutable List."))}, +jC(a,b,c){throw A.d(A.af("Cannot modify an immutable List."))}, +di(a,b){throw A.d(A.af("Cannot remove from immutable List."))}, +eQ(a){throw A.d(A.af("Cannot remove from immutable List."))}, +P(a,b){throw A.d(A.af("Cannot remove from immutable List."))}, +c3(a,b,c,d,e){throw A.d(A.af("Cannot setRange on immutable List."))}, +dL(a,b,c,d){return this.c3(a,b,c,d,0)}, +hX(a,b,c){throw A.d(A.af("Cannot removeRange on immutable List."))}, +kU(a,b,c,d){throw A.d(A.af("Cannot modify an immutable List."))}} +A.EW.prototype={ +H(){var s=this,r=s.c+1,q=s.b +if(r")),new A.aE6(),r.h("e7"))}, +al(a,b){B.b.al(A.iN(this.glX(),!1,t.lU),b)}, +u(a,b,c){var s=this.glX() +J.bBB(s.b.$1(J.mT(s.a,b)),c)}, +sF(a,b){var s=J.bo(this.glX().a) +if(b>=s)return +else if(b<0)throw A.d(A.c3("Invalid list length",null)) +this.hX(0,b,s)}, +E(a,b){this.b.a.appendChild(b).toString}, +I(a,b){var s,r +for(s=J.az(b),r=this.b.a;s.H();)r.appendChild(s.ga1(s)).toString}, +G(a,b){if(!t.lU.b(b))return!1 +return b.parentNode===this.a}, +c3(a,b,c,d,e){throw A.d(A.af("Cannot setRange on filtered list"))}, +dL(a,b,c,d){return this.c3(0,b,c,d,0)}, +kU(a,b,c,d){throw A.d(A.af("Cannot fillRange on filtered list"))}, +hX(a,b,c){var s=this.glX() +s=A.aT2(s,b,s.$ti.h("z.E")) +B.b.al(A.iN(A.bgT(s,c-b,A.w(s).h("z.E")),!0,t.lU),new A.aE7())}, +eQ(a){var s=this.glX(),r=s.b.$1(J.Do(s.a)) +J.avI(r) +return r}, +hc(a,b,c){var s,r +if(b===J.bo(this.glX().a))this.b.a.appendChild(c).toString +else{s=this.glX() +r=s.b.$1(J.mT(s.a,b)) +r.parentNode.insertBefore(c,r).toString}}, +hO(a,b,c){var s,r +if(b===J.bo(this.glX().a))this.I(0,c) +else{s=this.glX() +r=s.b.$1(J.mT(s.a,b)) +s=r.parentNode +s.toString +J.bkk(s,c,r)}}, +di(a,b){var s=this.glX() +s=s.b.$1(J.mT(s.a,b)) +J.avI(s) +return s}, +P(a,b){return!1}, +gF(a){return J.bo(this.glX().a)}, +i(a,b){var s=this.glX() +return s.b.$1(J.mT(s.a,b))}, +gar(a){var s=A.iN(this.glX(),!1,t.lU) +return new J.cA(s,s.length,A.a5(s).h("cA<1>"))}} +A.aE5.prototype={ +$1(a){return t.lU.b(a)}, +$S:406} +A.aE6.prototype={ +$1(a){return t.lU.a(a)}, +$S:407} +A.aE7.prototype={ +$1(a){return J.avI(a)}, +$S:415} +A.JJ.prototype={ +hf(a,b,c,d){throw A.d(A.af("ReceivePort.listen"))}, +oF(a){return this.hf(a,!0,null,null)}, +tY(a,b,c){return this.hf(a,!0,b,c)}, +gNW(){return A.X(A.af("ReceivePort.sendPort"))}} +A.bcz.prototype={ +$1(a){var s,r,q,p,o +if(A.bsV(a))return a +s=this.a +if(s.aR(0,a))return s.i(0,a) +if(t.pE.b(a)){r={} +s.u(0,a,r) +for(s=J.bS(a),q=J.az(s.gdv(a));q.H();){p=q.ga1(q) +r[p]=this.$1(s.i(a,p))}return r}else if(t.VG.b(a)){o=[] +s.u(0,a,o) +B.b.I(o,J.mU(a,this,t.z)) +return o}else return a}, +$S:236} +A.bcT.prototype={ +$1(a){return this.a.fC(0,a)}, +$S:36} +A.bcU.prototype={ +$1(a){if(a==null)return this.a.n_(new A.a7H(a===undefined)) +return this.a.n_(a)}, +$S:36} +A.bc1.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k,j,i +if(A.bsU(a))return a +s=this.a +a.toString +if(s.aR(0,a))return s.i(0,a) +if(a instanceof Date)return A.bDo(a.getTime(),!0) +if(a instanceof RegExp)throw A.d(A.c3("structured clone of RegExp",null)) +if(typeof Promise!="undefined"&&a instanceof Promise)return A.ka(a,t.X) +r=Object.getPrototypeOf(a) +if(r===Object.prototype||r===null){q=t.X +p=A.D(q,q) +s.u(0,a,p) +o=Object.keys(a) +n=[] +for(s=J.cV(o),q=s.gar(o);q.H();)n.push(A.bim(q.ga1(q))) +for(m=0;m4294967296)throw A.d(A.w6(u.Z+a)) +return Math.random()*a>>>0}, +aV(){return Math.random()}, +wc(){return Math.random()<0.5}} +A.b4S.prototype={ +at4(a){var s,r,q,p,o,n,m,l=this,k=4294967296 +do{s=a>>>0 +a=B.f.cN(a-s,k) +r=a>>>0 +a=B.f.cN(a-r,k) +q=(~s>>>0)+(s<<21>>>0) +p=q>>>0 +r=(~r>>>0)+((r<<21|s>>>11)>>>0)+B.f.cN(q-p,k)>>>0 +q=((p^(p>>>24|r<<8))>>>0)*265 +s=q>>>0 +r=((r^r>>>24)>>>0)*265+B.f.cN(q-s,k)>>>0 +q=((s^(s>>>14|r<<18))>>>0)*21 +s=q>>>0 +r=((r^r>>>14)>>>0)*21+B.f.cN(q-s,k)>>>0 +s=(s^(s>>>28|r<<4))>>>0 +r=(r^r>>>28)>>>0 +q=(s<<31>>>0)+s +p=q>>>0 +o=B.f.cN(q-p,k) +q=l.a*1037 +n=l.a=q>>>0 +m=l.b*1037+B.f.cN(q-n,k)>>>0 +l.b=m +n=(n^p)>>>0 +l.a=n +o=(m^r+((r<<31|s>>>1)>>>0)+o>>>0)>>>0 +l.b=o}while(a!==0) +if(o===0&&n===0)l.a=23063 +l.qB() +l.qB() +l.qB() +l.qB()}, +qB(){var s=this,r=s.a,q=4294901760*r,p=q>>>0,o=55905*r,n=o>>>0,m=n+p+s.b +r=m>>>0 +s.a=r +s.b=B.f.cN(o-n+(q-p)+(m-r),4294967296)>>>0}, +f9(a){var s,r,q,p=this +if(a<=0||a>4294967296)throw A.d(A.w6(u.Z+a)) +s=a-1 +if((a&s)>>>0===0){p.qB() +return(p.a&s)>>>0}do{p.qB() +r=p.a +q=r%a}while(r-q+a>=4294967296) +return q}, +aV(){var s,r=this +r.qB() +s=r.a +r.qB() +return((s&67108863)*134217728+(r.a&134217727))/9007199254740992}, +wc(){this.qB() +return(this.a&1)===0}} +A.Wv.prototype={ +gaH(a){var s=this +return A.w(s).c.a(s.gae(s)+s.gbW(s))}, +gaQ(a){var s=this +return A.w(s).c.a(s.gaj(s)+s.gb9(s))}, +j(a){var s=this +return"Rectangle ("+A.j(s.gae(s))+", "+A.j(s.gaj(s))+") "+A.j(s.gbW(s))+" x "+A.j(s.gb9(s))}, +k(a,b){var s,r,q=this +if(b==null)return!1 +if(t.Bb.b(b)){s=J.bS(b) +if(q.gae(q)===s.gae(b))if(q.gaj(q)===s.gaj(b)){r=A.w(q).c +s=r.a(q.gae(q)+q.gbW(q))===s.gaH(b)&&r.a(q.gaj(q)+q.gb9(q))===s.gaQ(b)}else s=!1 +else s=!1}else s=!1 +return s}, +gL(a){var s=this,r=A.w(s).c +return A.bq2(B.c.gL(s.gae(s)),B.c.gL(s.gaj(s)),B.c.gL(r.a(s.gae(s)+s.gbW(s))),B.c.gL(r.a(s.gaj(s)+s.gb9(s))),0)}} +A.hv.prototype={ +gae(a){return this.a}, +gaj(a){return this.b}, +gbW(a){return this.c}, +gb9(a){return this.d}} +A.P9.prototype={ +gbW(a){return this.c}, +gb9(a){return this.d}, +$ihv:1, +gae(a){return this.a}, +gaj(a){return this.b}} +A.ma.prototype={$ima:1} +A.a67.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length +s.toString +s=b>>>0!==b||b>=s +s.toString +if(s)throw A.d(A.fs(b,this.gF(a),a,null,null)) +s=a.getItem(b) +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s=a.length +s.toString +if(s>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s=a.length +s.toString +if(s>0){s=a[s-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return this.i(a,b)}, +$iat:1, +$iz:1, +$iH:1} +A.mk.prototype={$imk:1} +A.a7K.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length +s.toString +s=b>>>0!==b||b>=s +s.toString +if(s)throw A.d(A.fs(b,this.gF(a),a,null,null)) +s=a.getItem(b) +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s=a.length +s.toString +if(s>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s=a.length +s.toString +if(s>0){s=a[s-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return this.i(a,b)}, +$iat:1, +$iz:1, +$iH:1} +A.a8Z.prototype={ +gF(a){return a.length}} +A.acz.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length +s.toString +s=b>>>0!==b||b>=s +s.toString +if(s)throw A.d(A.fs(b,this.gF(a),a,null,null)) +s=a.getItem(b) +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s=a.length +s.toString +if(s>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s=a.length +s.toString +if(s>0){s=a[s-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return this.i(a,b)}, +$iat:1, +$iz:1, +$iH:1} +A.bB.prototype={ +gbQ(a){return new A.a3z(a,new A.CG(a))}} +A.mH.prototype={$imH:1} +A.adQ.prototype={ +gF(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length +s.toString +s=b>>>0!==b||b>=s +s.toString +if(s)throw A.d(A.fs(b,this.gF(a),a,null,null)) +s=a.getItem(b) +s.toString +return s}, +u(a,b,c){throw A.d(A.af("Cannot assign element of immutable List."))}, +sF(a,b){throw A.d(A.af("Cannot resize immutable List."))}, +ga9(a){var s=a.length +s.toString +if(s>0){s=a[0] +s.toString +return s}throw A.d(A.ad("No elements"))}, +ga_(a){var s=a.length +s.toString +if(s>0){s=a[s-1] +s.toString +return s}throw A.d(A.ad("No elements"))}, +cA(a,b){return this.i(a,b)}, +$iat:1, +$iz:1, +$iH:1} +A.akP.prototype={} +A.akQ.prototype={} +A.ame.prototype={} +A.amf.prototype={} +A.aqy.prototype={} +A.aqz.prototype={} +A.arJ.prototype={} +A.arK.prototype={} +A.Y7.prototype={ +lo(a,b,c){return new A.K7(A.jM(this.a,b,c))}, +TI(a){return this.lo(0,0,null)}, +abl(a,b,c){return new A.asg(A.bHE(this.a,b,c))}, +abi(a,b,c){return new A.asd(A.bod(this.a,b,c))}, +Jp(a,b,c){B.aw.Jp(this.a,b,c) +return void 1}, +abg(a,b,c){return new A.asb(A.bHB(this.a,b,c))}, +abh(a,b,c){return new A.asc(A.boc(this.a,b,c))}, +im(a,b,c){return new A.asa(A.kw(this.a,b,c))}, +abf(a){return this.im(0,0,null)}, +$iDF:1} +A.asa.prototype={ +a_m(a,b){return this.a.getInt8(b)}, +j5(a,b){return this.a.getUint8(b)}, +ez(a,b,c){return this.a.getUint16(b,B.n===c)}, +a_k(a,b,c){return this.a.getInt32(b,B.n===c)}, +ec(a,b,c){return this.a.getUint32(b,B.n===c)}, +G0(a,b,c){return B.Z.G0(this.a,b,c)}, +fe(a,b,c){return this.a.getFloat32(b,B.n===c)}, +a_h(a,b,c){return this.a.getFloat64(b,B.n===c)}, +gVl(a){return 1}, +gfY(a){return this.a.byteOffset}, +gjY(a){return this.a.byteLength}, +gdl(a){return new A.Y7(this.a.buffer)}, +$idL:1, +$icX:1} +A.h0.prototype={ +gF(a){return this.go2().length}, +i(a,b){return this.go2()[b]}, +gfY(a){return A.w(this).h("h0.2").a(this.go2()).byteOffset}, +gjY(a){return A.w(this).h("h0.2").a(this.go2()).byteLength}, +gdl(a){return new A.Y7(A.w(this).h("h0.2").a(this.go2()).buffer)}, +cI(a,b,c){var s,r +c.toString +s=A.dl(b,c,this.go2().length,null,null)-b +r=this.Be(s) +J.avK(r,0,s,this.go2(),b) +return r}, +jE(a,b){return this.cI(0,b,null)}} +A.K7.prototype={ +Be(a){return new Uint8Array(a)}, +$idL:1, +$ieD:1, +go2(){return this.a}} +A.asg.prototype={ +Be(a){return new Uint16Array(a)}, +$idL:1, +$iwQ:1, +go2(){return this.a}} +A.asd.prototype={ +Be(a){return new Int32Array(a)}, +$idL:1, +$ivo:1, +go2(){return this.a}} +A.K6.prototype={$iK6:1} +A.asb.prototype={ +Be(a){return new Float32Array(a)}, +$idL:1, +$iv4:1, +go2(){return this.a}} +A.asc.prototype={ +Be(a){return new Float64Array(a)}, +$idL:1, +$iv5:1, +go2(){return this.a}} +A.a3c.prototype={} +A.auB.prototype={} +A.auC.prototype={} +A.auD.prototype={} +A.auE.prototype={} +A.auF.prototype={} +A.a9_.prototype={ +W(){return"PointMode."+this.b}} +A.a0V.prototype={ +W(){return"ClipOp."+this.b}} +A.aee.prototype={ +W(){return"VertexMode."+this.b}} +A.PK.prototype={ +W(){return"PathFillType."+this.b}} +A.b_0.prototype={ +hQ(a,b){A.bTn(this.a,this.b,a,b)}} +A.XC.prototype={ +hP(a){A.uk(this.b,this.c,a,t.CD)}} +A.tT.prototype={ +gF(a){return this.a.gF(0)}, +q1(a){var s,r,q=this +if(!q.d&&q.e!=null){q.e.hQ(a.a,a.gafa()) +return!1}s=q.c +if(s<=0)return!0 +r=q.a3V(s-1) +q.a.ho(0,a) +return r}, +a3V(a){var s,r,q,p +for(s=this.a,r=t.CD,q=!1;(s.c-s.b&s.a.length-1)>>>0>a;q=!0){p=s.ue() +A.uk(p.b,p.c,null,r)}return q}, +awu(){var s=this,r=s.a +if(!r.gaA(0)&&s.e!=null){r=r.ue() +s.e.hQ(r.a,r.gafa()) +A.iC(s.ga3U())}else s.d=!1}} +A.ayt.prototype={ +aXX(a,b,c){this.a.cU(0,a,new A.ayu()).q1(new A.XC(b,c,$.aK))}, +al1(a,b){var s=this.a.cU(0,a,new A.ayv()),r=s.e +s.e=new A.b_0(b,$.aK) +if(r==null&&!s.d){s.d=!0 +A.iC(s.ga3U())}}, +aSh(a){var s,r,q,p,o,n,m,l="Invalid arguments for 'resize' method sent to dev.flutter/channel-buffers (arguments must be a two-element list, channel name and new capacity)",k="Invalid arguments for 'overflow' method sent to dev.flutter/channel-buffers (arguments must be a two-element list, channel name and flag state)",j=A.jM(a.buffer,a.byteOffset,a.byteLength) +if(j[0]===7){s=j[1] +if(s>=254)throw A.d(A.c1("Unrecognized message sent to dev.flutter/channel-buffers (method name too long)")) +r=2+s +q=B.a1.hH(0,B.L.cI(j,2,r)) +switch(q){case"resize":if(j[r]!==12)throw A.d(A.c1(l)) +p=r+1 +if(j[p]<2)throw A.d(A.c1(l));++p +if(j[p]!==7)throw A.d(A.c1("Invalid arguments for 'resize' method sent to dev.flutter/channel-buffers (first argument must be a string)"));++p +o=j[p] +if(o>=254)throw A.d(A.c1("Invalid arguments for 'resize' method sent to dev.flutter/channel-buffers (channel name must be less than 254 characters long)"));++p +r=p+o +n=B.a1.hH(0,B.L.cI(j,p,r)) +if(j[r]!==3)throw A.d(A.c1("Invalid arguments for 'resize' method sent to dev.flutter/channel-buffers (second argument must be an integer in the range 0 to 2147483647)")) +this.ai1(0,n,a.getUint32(r+1,B.n===$.hi())) +break +case"overflow":if(j[r]!==12)throw A.d(A.c1(k)) +p=r+1 +if(j[p]<2)throw A.d(A.c1(k));++p +if(j[p]!==7)throw A.d(A.c1("Invalid arguments for 'overflow' method sent to dev.flutter/channel-buffers (first argument must be a string)"));++p +o=j[p] +if(o>=254)throw A.d(A.c1("Invalid arguments for 'overflow' method sent to dev.flutter/channel-buffers (channel name must be less than 254 characters long)"));++p +r=p+o +B.a1.hH(0,B.L.cI(j,p,r)) +r=j[r] +if(r!==1&&r!==2)throw A.d(A.c1("Invalid arguments for 'overflow' method sent to dev.flutter/channel-buffers (second argument must be a boolean)")) +break +default:throw A.d(A.c1("Unrecognized method '"+q+"' sent to dev.flutter/channel-buffers"))}}else{m=A.b(B.a1.hH(0,j).split("\r"),t.T) +if(m.length===3&&J.f(m[0],"resize"))this.ai1(0,m[1],A.et(m[2],null,null)) +else throw A.d(A.c1("Unrecognized message "+A.j(m)+" sent to dev.flutter/channel-buffers."))}}, +ai1(a,b,c){var s=this.a,r=s.i(0,b) +if(r==null)s.u(0,b,new A.tT(A.mc(c,t.S8),c)) +else{r.c=c +r.a3V(c)}}} +A.ayu.prototype={ +$0(){return new A.tT(A.mc(1,t.S8),1)}, +$S:228} +A.ayv.prototype={ +$0(){return new A.tT(A.mc(1,t.S8),1)}, +$S:228} +A.a7Q.prototype={ +k(a,b){if(b==null)return!1 +return b instanceof A.a7Q&&b.a===this.a&&b.b===this.b}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"OffsetBase("+B.c.b8(this.a,1)+", "+B.c.b8(this.b,1)+")"}} +A.i.prototype={ +ge6(){var s=this.a,r=this.b +return Math.sqrt(s*s+r*r)}, +gvB(){var s=this.a,r=this.b +return s*s+r*r}, +Y(a,b){return new A.i(this.a-b.a,this.b-b.b)}, +X(a,b){return new A.i(this.a+b.a,this.b+b.b)}, +a2(a,b){return new A.i(this.a*b,this.b*b)}, +b1(a,b){return new A.i(this.a/b,this.b/b)}, +k(a,b){if(b==null)return!1 +return b instanceof A.i&&b.a===this.a&&b.b===this.b}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"Offset("+B.c.b8(this.a,1)+", "+B.c.b8(this.b,1)+")"}} +A.Q.prototype={ +gaA(a){return this.a<=0||this.b<=0}, +Y(a,b){var s=this +if(b instanceof A.Q)return new A.i(s.a-b.a,s.b-b.b) +if(b instanceof A.i)return new A.Q(s.a-b.a,s.b-b.b) +throw A.d(A.c3(b,null))}, +X(a,b){return new A.Q(this.a+b.a,this.b+b.b)}, +a2(a,b){return new A.Q(this.a*b,this.b*b)}, +b1(a,b){return new A.Q(this.a/b,this.b/b)}, +ob(a){return new A.i(a.a+this.a/2,a.b+this.b/2)}, +Js(a,b){return new A.i(b.a+this.a,b.b+this.b)}, +G(a,b){var s=b.a +if(s>=0)if(s=0&&s=s.gaH(s)||s.gaj(s)>=s.gaQ(s)}, +dz(a){var s=this,r=a.a,q=a.b +return new A.A(s.gae(s)+r,s.gaj(s)+q,s.gaH(s)+r,s.gaQ(s)+q)}, +aJ(a,b,c){var s=this +return new A.A(s.gae(s)+b,s.gaj(s)+c,s.gaH(s)+b,s.gaQ(s)+c)}, +ei(a){var s=this +return new A.A(s.gae(s)-a,s.gaj(s)-a,s.gaH(s)+a,s.gaQ(s)+a)}, +fp(a){var s=this +return new A.A(Math.max(s.gae(s),a.a),Math.max(s.gaj(s),a.b),Math.min(s.gaH(s),a.c),Math.min(s.gaQ(s),a.d))}, +jj(a){var s=this +return new A.A(Math.min(s.gae(s),a.gae(a)),Math.min(s.gaj(s),a.gaj(a)),Math.max(s.gaH(s),a.gaH(a)),Math.max(s.gaQ(s),a.gaQ(a)))}, +wk(a){var s=this +if(s.gaH(s)<=a.a||a.c<=s.gae(s))return!1 +if(s.gaQ(s)<=a.b||a.d<=s.gaj(s))return!1 +return!0}, +giF(){var s=this +return Math.min(Math.abs(s.gaH(s)-s.gae(s)),Math.abs(s.gaQ(s)-s.gaj(s)))}, +gaZE(){var s=this +return new A.i(s.gae(s)+(s.gaH(s)-s.gae(s))/2,s.gaj(s))}, +gaNj(){var s=this +return new A.i(s.gae(s),s.gaj(s)+(s.gaQ(s)-s.gaj(s))/2)}, +gbC(){var s=this +return new A.i(s.gae(s)+(s.gaH(s)-s.gae(s))/2,s.gaj(s)+(s.gaQ(s)-s.gaj(s))/2)}, +gaN0(){var s=this +return new A.i(s.gae(s)+(s.gaH(s)-s.gae(s))/2,s.gaQ(s))}, +G(a,b){var s=this,r=b.a +if(r>=s.gae(s))if(r=s.gaj(s)&&rd&&s!==0)return Math.min(a,d/s) +return a}, +Ao(){var s=this,r=s.c,q=s.a,p=Math.abs(r-q),o=s.d,n=s.b,m=Math.abs(o-n),l=s.Q,k=s.f,j=s.e,i=s.r,h=s.w,g=s.y,f=s.x,e=s.z,d=s.Hu(s.Hu(s.Hu(s.Hu(1,l,k,m),j,i,p),h,g,m),f,e,p) +if(d<1)return new A.nm(q,n,r,o,j*d,k*d,i*d,h*d,f*d,g*d,e*d,l*d,!1) +return new A.nm(q,n,r,o,j,k,i,h,f,g,e,l,!1)}, +G(a,b){var s,r,q,p,o,n,m=this,l=b.a,k=m.a +if(!(l=m.c)){s=b.b +s=s=m.d}else s=!0 +else s=!0 +if(s)return!1 +r=m.Ao() +q=r.e +if(ls-q&&b.bs-q&&b.b>m.d-r.y){p=l-s+q +o=r.y +n=b.b-m.d+o}else{q=r.z +if(lm.d-r.Q){p=l-k-q +o=r.Q +n=b.b-m.d+o}else return!0}}}p/=q +n/=o +if(p*p+n*n>1)return!1 +return!0}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(A.J(s)!==J.ai(b))return!1 +return b instanceof A.nm&&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.z===s.z&&b.Q===s.Q&&b.x===s.x&&b.y===s.y}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.z,s.Q,s.x,s.y,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){var s,r,q=this,p=B.c.b8(q.a,1)+", "+B.c.b8(q.b,1)+", "+B.c.b8(q.c,1)+", "+B.c.b8(q.d,1),o=q.e,n=q.f,m=q.r,l=q.w +if(new A.bl(o,n).k(0,new A.bl(m,l))){s=q.x +r=q.y +s=new A.bl(m,l).k(0,new A.bl(s,r))&&new A.bl(s,r).k(0,new A.bl(q.z,q.Q))}else s=!1 +if(s){if(o===n)return"RRect.fromLTRBR("+p+", "+B.c.b8(o,1)+")" +return"RRect.fromLTRBXY("+p+", "+B.c.b8(o,1)+", "+B.c.b8(n,1)+")"}return"RRect.fromLTRBAndCorners("+p+", topLeft: "+new A.bl(o,n).j(0)+", topRight: "+new A.bl(m,l).j(0)+", bottomRight: "+new A.bl(q.x,q.y).j(0)+", bottomLeft: "+new A.bl(q.z,q.Q).j(0)+")"}} +A.GT.prototype={ +gGc(){return this.a[0]}, +gGz(){return this.a[1]}, +gZA(){return this.a[2]}, +gZB(){return this.a[3]}} +A.Ob.prototype={ +W(){return"KeyEventType."+this.b}, +gEn(a){var s +switch(this.a){case 0:s="Key Down" +break +case 1:s="Key Up" +break +case 2:s="Key Repeat" +break +default:s=null}return s}} +A.zS.prototype={ +W(){return"KeyEventDeviceType."+this.b}} +A.lo.prototype={ +aCL(){var s=this.e +return"0x"+B.f.hZ(s,16)+new A.aIm(B.c.bK(s/4294967296)).$0()}, +ax_(){var s=this.f +if(s==null)return"" +switch(s){case"\n":return'"\\n"' +case"\t":return'"\\t"' +case"\r":return'"\\r"' +case"\b":return'"\\b"' +case"\f":return'"\\f"' +default:return'"'+s+'"'}}, +aFV(){var s=this.f +if(s==null)return"" +return" (0x"+new A.W(new A.l9(s),new A.aIn(),t.Hz.h("W")).cj(0," ")+")"}, +j(a){var s=this,r=s.b.gEn(0),q=B.f.hZ(s.d,16),p=s.aCL(),o=s.ax_(),n=s.aFV(),m=s.r?", synthesized":"" +return"KeyData("+r+", physical: 0x"+q+", logical: "+p+", character: "+o+n+m+")"}} +A.aIm.prototype={ +$0(){switch(this.a){case 0:return" (Unicode)" +case 1:return" (Unprintable)" +case 2:return" (Flutter)" +case 17:return" (Android)" +case 18:return" (Fuchsia)" +case 19:return" (iOS)" +case 20:return" (macOS)" +case 21:return" (GTK)" +case 22:return" (Windows)" +case 23:return" (Web)" +case 24:return" (GLFW)"}return""}, +$S:59} +A.aIn.prototype={ +$1(a){return B.d.k_(B.f.hZ(a,16),2,"0")}, +$S:78} +A.n.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.n&&b.gm(b)===s.gm(s)}, +gL(a){return B.f.gL(this.gm(this))}, +j(a){return"Color(0x"+B.d.k_(B.f.hZ(this.gm(this),16),8,"0")+")"}, +gm(a){return this.a}} +A.HV.prototype={ +W(){return"StrokeCap."+this.b}} +A.HW.prototype={ +W(){return"StrokeJoin."+this.b}} +A.a8m.prototype={ +W(){return"PaintingStyle."+this.b}} +A.e0.prototype={ +W(){return"BlendMode."+this.b}} +A.DX.prototype={ +W(){return"Clip."+this.b}} +A.axu.prototype={ +W(){return"BlurStyle."+this.b}} +A.pF.prototype={ +k(a,b){if(b==null)return!1 +return b instanceof A.pF&&b.a===this.a&&b.b===this.b}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"MaskFilter.blur("+this.a.j(0)+", "+B.c.b8(this.b,1)+")"}} +A.z9.prototype={ +W(){return"FilterQuality."+this.b}} +A.bfm.prototype={} +A.oC.prototype={ +au(a,b){return new A.oC(this.a,this.b.a2(0,b),this.c*b)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return b instanceof A.oC&&b.a.k(0,s.a)&&b.b.k(0,s.b)&&b.c===s.c}, +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"TextShadow("+this.a.j(0)+", "+this.b.j(0)+", "+A.j(this.c)+")"}} +A.pr.prototype={ +gF(a){return this.b}} +A.a57.prototype={ +Xo(){var s=0,r=A.r(t.hP),q,p=this,o +var $async$Xo=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:o=p.a +if(o==null)throw A.d(A.ad("Object is disposed")) +o=$.G().oz(o,!1,null,null) +q=o +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Xo,r)}} +A.acV.prototype={ +gko(a){var s=this.b +return-Math.atan2(s.b,s.a)}} +A.aNE.prototype={} +A.rm.prototype={ +j(a){var s,r=A.J(this).j(0),q=this.a,p=A.dE(q[2],0),o=q[1],n=A.dE(o,0),m=q[4],l=A.dE(m,0),k=A.dE(q[3],0) +o=A.dE(o,0) +s=q[0] +return r+"(buildDuration: "+(A.j((p.a-n.a)*0.001)+"ms")+", rasterDuration: "+(A.j((l.a-k.a)*0.001)+"ms")+", vsyncOverhead: "+(A.j((o.a-A.dE(s,0).a)*0.001)+"ms")+", totalSpan: "+(A.j((A.dE(m,0).a-A.dE(s,0).a)*0.001)+"ms")+", layerCacheCount: "+q[6]+", layerCacheBytes: "+q[7]+", pictureCacheCount: "+q[8]+", pictureCacheBytes: "+q[9]+", frameNumber: "+B.b.ga_(q)+")"}} +A.nW.prototype={ +W(){return"AppLifecycleState."+this.b}} +A.KK.prototype={ +W(){return"AppExitResponse."+this.b}} +A.rH.prototype={ +gzu(a){var s=this.a,r=B.cY.i(0,s) +return r==null?s:r}, +gJU(){var s=this.c,r=B.dk.i(0,s) +return r==null?s:r}, +k(a,b){var s +if(b==null)return!1 +if(this===b)return!0 +if(b instanceof A.rH)if(b.gzu(0)===this.gzu(0))s=b.gJU()==this.gJU() +else s=!1 +else s=!1 +return s}, +gL(a){return A.a6(this.gzu(0),null,this.gJU(),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return this.S3("_")}, +S3(a){var s=this.gzu(0) +if(this.c!=null)s+=a+A.j(this.gJU()) +return s.charCodeAt(0)==0?s:s}} +A.aAw.prototype={ +W(){return"DartPerformanceMode."+this.b}} +A.BC.prototype={ +j(a){return"SemanticsActionEvent("+this.a.j(0)+", view: "+this.b+", node: "+this.c+")"}} +A.Cw.prototype={ +j(a){return"ViewFocusEvent(viewId: "+this.a+", state: "+this.b.j(0)+", direction: "+this.c.j(0)+")"}} +A.aej.prototype={ +W(){return"ViewFocusState."+this.b}} +A.Ts.prototype={ +W(){return"ViewFocusDirection."+this.b}} +A.t3.prototype={ +W(){return"PointerChange."+this.b}} +A.hc.prototype={ +W(){return"PointerDeviceKind."+this.b}} +A.GJ.prototype={ +W(){return"PointerSignalKind."+this.b}} +A.ov.prototype={ +j(a){return"PointerData(viewId: "+this.a+", x: "+A.j(this.x)+", y: "+A.j(this.y)+")"}} +A.t4.prototype={} +A.fi.prototype={ +j(a){return"SemanticsAction."+this.b}} +A.eB.prototype={ +j(a){return"SemanticsFlag."+this.b}} +A.aSk.prototype={} +A.a3W.prototype={ +W(){return"FontStyle."+this.b}} +A.w0.prototype={ +W(){return"PlaceholderAlignment."+this.b}} +A.m3.prototype={ +j(a){var s=B.a0S.i(0,this.a) +s.toString +return s}} +A.Nh.prototype={ +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.Nh}, +gL(a){return A.a6("sups",1,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"FontFeature('sups', 1)"}} +A.pm.prototype={ +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.pm&&b.a===this.a&&b.b===this.b}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"FontVariation('"+this.a+"', "+A.j(this.b)+")"}} +A.pn.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return b instanceof A.pn&&s.a.k(0,b.a)&&s.b.k(0,b.b)&&s.c===b.c}, +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"Glyph("+this.a.j(0)+", textRange: "+this.b.j(0)+", direction: "+this.c.j(0)+")"}} +A.qa.prototype={ +W(){return"TextAlign."+this.b}} +A.I7.prototype={ +W(){return"TextBaseline."+this.b}} +A.tD.prototype={ +k(a,b){if(b==null)return!1 +return b instanceof A.tD&&b.a===this.a}, +gL(a){return B.f.gL(this.a)}, +j(a){var s,r=this.a +if(r===0)return"TextDecoration.none" +s=A.b([],t.T) +if((r&1)!==0)s.push("underline") +if((r&2)!==0)s.push("overline") +if((r&4)!==0)s.push("lineThrough") +if(s.length===1)return"TextDecoration."+s[0] +return"TextDecoration.combine(["+B.b.cj(s,", ")+"])"}} +A.wF.prototype={ +W(){return"TextDecorationStyle."+this.b}} +A.adj.prototype={ +W(){return"TextLeadingDistribution."+this.b}} +A.SN.prototype={ +k(a,b){var s +if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +if(b instanceof A.SN)s=b.c===this.c +else s=!1 +return s}, +gL(a){return A.a6(!0,!0,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"TextHeightBehavior(applyHeightToFirstAscent: true, applyHeightToLastDescent: true, leadingDistribution: "+this.c.j(0)+")"}} +A.qc.prototype={ +W(){return"TextDirection."+this.b}} +A.hW.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.hW&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d&&b.e===s.e}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){var s=this +return"TextBox.fromLTRBD("+B.c.b8(s.a,1)+", "+B.c.b8(s.b,1)+", "+B.c.b8(s.c,1)+", "+B.c.b8(s.d,1)+", "+s.e.j(0)+")"}} +A.SG.prototype={ +W(){return"TextAffinity."+this.b}} +A.c0.prototype={ +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.c0&&b.a===this.a&&b.b===this.b}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return A.J(this).j(0)+"(offset: "+this.a+", affinity: "+this.b.j(0)+")"}} +A.cZ.prototype={ +gds(){return this.a>=0&&this.b>=0}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.cZ&&b.a===this.a&&b.b===this.b}, +gL(a){return A.a6(B.f.gL(this.a),B.f.gL(this.b),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"TextRange(start: "+this.a+", end: "+this.b+")"}} +A.vT.prototype={ +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.vT&&b.a===this.a}, +gL(a){return B.c.gL(this.a)}, +j(a){return A.J(this).j(0)+"(width: "+A.j(this.a)+")"}} +A.a0_.prototype={ +W(){return"BoxHeightStyle."+this.b}} +A.axL.prototype={ +W(){return"BoxWidthStyle."+this.b}} +A.Ci.prototype={ +W(){return"TileMode."+this.b}} +A.aBr.prototype={} +A.a02.prototype={ +W(){return"Brightness."+this.b}} +A.ayb.prototype={ +k(a,b){if(b==null)return!1 +return this===b}, +gL(a){return A.B.prototype.gL.call(this,0)}} +A.a4n.prototype={ +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.a4n}, +gL(a){return A.a6(null,null,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"GestureSettings(physicalTouchSlop: null, physicalDoubleTapSlop: null)"}} +A.awt.prototype={ +FR(a){var s,r,q +if(A.jn(a,0,null).gaeJ())return A.lM(B.dR,a,B.a1,!1) +s=this.b +if(s==null){s=self.window.document.querySelector("meta[name=assetBase]") +r=s==null?null:s.content +s=r==null +if(!s)self.window.console.warn("The `assetBase` meta tag is now deprecated.\nUse engineInitializer.initializeEngine(config) instead.\nSee: https://docs.flutter.dev/development/platform-integration/web/initialization") +q=this.b=s?"":r +s=q}return A.lM(B.dR,s+"assets/"+a,B.a1,!1)}} +A.bbN.prototype={ +$1(a){return this.ajB(a)}, +$0(){return this.$1(null)}, +$C:"$1", +$R:0, +$D(){return[null]}, +ajB(a){var s=0,r=A.r(t.H) +var $async$$1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(A.bcq(a),$async$$1) +case 2:return A.p(null,r)}}) +return A.q($async$$1,r)}, +$S:434} +A.bbO.prototype={ +$0(){var s=0,r=A.r(t.P),q=this +var $async$$0=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:q.a.$0() +s=2 +return A.x(A.biv(),$async$$0) +case 2:q.b.$0() +return A.p(null,r)}}) +return A.q($async$$0,r)}, +$S:109} +A.axT.prototype={ +a_x(a){return $.bsX.cU(0,a,new A.axU(a))}} +A.axU.prototype={ +$0(){return t.L.a(A.cd(this.a))}, +$S:132} +A.aGu.prototype={ +Tt(a){var s=new A.aGx(a) +A.dc(self.window,"popstate",B.ut.a_x(s),null) +return new A.aGw(this,s)}, +dw(){var s=self.window.location.hash +if(s.length===0||s==="#")return"/" +return B.d.c5(s,1)}, +a_C(a){return A.bm1(self.window.history)}, +agW(a){var s,r=a.length===0||a==="/"?"":"#"+a,q=self.window.location.pathname +if(q==null)q=null +q.toString +s=self.window.location.search +if(s==null)s=null +s.toString +return q+s+r}, +ahd(a,b,c,d){var s=this.agW(d),r=self.window.history,q=A.bf(b) +if(q==null)q=t.K.a(q) +A.a3(r,"pushState",[q,c,s])}, +wv(a,b,c,d){var s,r=this.agW(d),q=self.window.history +if(b==null)s=null +else{s=A.bf(b) +if(s==null)s=t.K.a(s)}A.a3(q,"replaceState",[s,c,r])}, +G6(a,b){var s=self.window.history +s.go(b) +return this.aLB()}, +aLB(){var s=new A.aM($.aK,t.D),r=A.bn("unsubscribe") +r.b=this.Tt(new A.aGv(r,new A.bH(s,t.h))) +return s}} +A.aGx.prototype={ +$1(a){var s=t.e.a(a).state +if(s==null)s=null +else{s=A.bim(s) +s.toString}this.a.$1(s)}, +$S:435} +A.aGw.prototype={ +$0(){var s=this.b +A.eQ(self.window,"popstate",B.ut.a_x(s),null) +$.bsX.P(0,s) +return null}, +$S:0} +A.aGv.prototype={ +$1(a){this.a.bl().$0() +this.b.fl(0)}, +$S:11} +A.aNL.prototype={} +A.a_f.prototype={ +gF(a){return a.length}} +A.a_g.prototype={ +I(a,b){throw A.d(A.af("Not supported"))}, +aR(a,b){return A.nL(a.get(b))!=null}, +i(a,b){return A.nL(a.get(b))}, +al(a,b){var s,r,q=a.entries() +for(;!0;){s=q.next() +r=s.done +r.toString +if(r)return +r=s.value[0] +r.toString +b.$2(r,A.nL(s.value[1]))}}, +gdv(a){var s=A.b([],t.T) +this.al(a,new A.awB(s)) +return s}, +gbm(a){var s=A.b([],t.n4) +this.al(a,new A.awC(s)) +return s}, +gF(a){var s=a.size +s.toString +return s}, +gaA(a){var s=a.size +s.toString +return s===0}, +gcT(a){var s=a.size +s.toString +return s!==0}, +u(a,b,c){throw A.d(A.af("Not supported"))}, +cU(a,b,c){throw A.d(A.af("Not supported"))}, +P(a,b){throw A.d(A.af("Not supported"))}, +$ibA:1} +A.awB.prototype={ +$2(a,b){return this.a.push(a)}, +$S:23} +A.awC.prototype={ +$2(a,b){return this.a.push(b)}, +$S:23} +A.a_j.prototype={ +gF(a){return a.length}} +A.uw.prototype={} +A.a7P.prototype={ +gF(a){return a.length}} +A.afx.prototype={} +A.a_2.prototype={ +aM0(a,b){var s,r=this.b,q=r.i(0,b.a) +if(q!=null){this.a[q]=b +return}s=this.a +s.push(b) +r.u(0,b.a,s.length-1)}, +gF(a){return this.a.length}, +i(a,b){return this.a[b]}, +ga9(a){return B.b.ga9(this.a)}, +ga_(a){return B.b.ga_(this.a)}, +gaA(a){return this.a.length===0}, +gcT(a){return this.a.length!==0}, +gar(a){var s=this.a +return new J.cA(s,s.length,A.a5(s).h("cA<1>"))}} +A.lS.prototype={ +gyM(a){var s,r=this,q=r.ax +if(q instanceof A.CA){q=q.gyM(0) +r.ax=q}if(q==null){s=r.at +if(s!=null){if(r.as===8){q=A.bfn(s.jw()).c +q=t.Cm.a(B.aw.lo(q.c.buffer,0,q.a)) +r.ax=q}else{q=s.jw() +r.ax=q}r.as=0}}return q}, +UF(){var s,r=this +if(r.ax==null&&r.at!=null){if(r.as===8){s=A.bfn(r.at.jw()).c +r.ax=t.Cm.a(B.aw.lo(s.c.buffer,0,s.a))}else r.ax=r.at.jw() +r.as=0}}, +j(a){return this.a}} +A.ay3.prototype={ +fK(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.fc()}for(s=n.a,r=s.a,q=J.al(r),p=0;o=n.c,a>o;){p=B.f.nT(p,o)+(n.b&B.xx[o]) +a-=o +n.c=8 +n.b=q.i(r,s.b++)}if(a>0){if(o===0){n.c=8 +n.b=s.fc()}s=B.f.nT(p,a) +r=n.b +q=n.c-a +p=s+(B.f.AE(r,q)&B.xx[a]) +n.c=q}return p}} +A.awW.prototype={ +aPy(a,b){var s,r,q,p,o=this,n=new A.ay3(a) +o.cx=o.CW=o.ch=o.ay=0 +if(n.fK(8)!==66||n.fK(8)!==90||n.fK(8)!==104)throw A.d(A.e_("Invalid Signature")) +s=o.a=n.fK(8)-48 +if(s<0||s>9)throw A.d(A.e_("Invalid BlockSize")) +o.b=new Uint32Array(s*1e5) +for(r=0;!0;){q=o.aFW(n) +if(q===0){n.fK(8) +n.fK(8) +n.fK(8) +n.fK(8) +p=o.aFX(n,b) +r=(r<<1|r>>>31)^p^4294967295}else if(q===2){n.fK(8) +n.fK(8) +n.fK(8) +n.fK(8) +return}}}, +aFW(a){var s,r,q,p +for(s=!0,r=!0,q=0;q<6;++q){p=a.fK(8) +if(p!==B.YY[q])r=!1 +if(p!==B.YZ[q])s=!1 +if(!s&&!r)throw A.d(A.e_("Invalid Block Signature"))}return r?0:2}, +aFX(d6,d7){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="Data error",d2=4294967295,d3="Data Error",d4=d6.fK(1),d5=((d6.fK(8)<<8|d6.fK(8))<<8|d6.fK(8))>>>0 +d0.c=new Uint8Array(16) +for(s=0;s<16;++s)d0.c[s]=d6.fK(1) +d0.d=new Uint8Array(256) +for(s=0,r=0;s<16;++s,r+=16)if(d0.c[s]!==0)for(q=0;q<16;++q)d0.d[r+q]=d6.fK(1) +d0.aCQ() +p=d0.fx +if(p===0)throw A.d(A.e_(d1)) +o=p+2 +n=d6.fK(3) +if(n<2||n>6)throw A.d(A.e_(d1)) +p=d6.fK(15) +d0.ax=p +if(p<1)throw A.d(A.e_(d1)) +d0.w=new Uint8Array(18002) +d0.x=new Uint8Array(18002) +for(s=0;p=d0.ax,s=n)throw A.d(A.e_(d1))}d0.w[s]=q}m=new Uint8Array(6) +for(s=0;s0;j=h){h=j-1 +m[j]=m[h]}m[0]=i +l[s]=i}d0.fr=A.bc(6,$.bvc(),!1,t.H3) +for(g=0;g20)throw A.d(A.e_(d1)) +if(d6.fK(1)===0)break +f=d6.fK(1)===0?f+1:f-1}d0.fr[g][s]=f}}p=$.bvb() +l=t.XO +d0.y=A.bc(6,p,!1,l) +d0.z=A.bc(6,p,!1,l) +d0.Q=A.bc(6,p,!1,l) +d0.as=new Int32Array(6) +for(g=0;gc)c=b +if(b=0;--a2){for(k=a2*16,a3=15;a3>=0;--a3){p[a1]=k+a3;--a1}l[a2]=a1+1}d0.ay=0 +d0.ch=-1 +a4=d0.QK(d6) +for(a5=0;!0;){if(a4===a)break +if(a4===0||a4===1){a6=-1 +a7=1 +do{if(a7>=2097152)throw A.d(A.e_(d1)) +if(a4===0)a6+=a7 +else if(a4===1)a6+=2*a7 +a7*=2 +a4=d0.QK(d6)}while(a4===0||a4===1);++a6 +p=d0.e +p===$&&A.c() +a8=p[d0.f[d0.r[0]]] +p=d0.at +p[a8]=p[a8]+a6 +for(p=d0.b;a6>0;){if(a5>=a0)throw A.d(A.e_(d1)) +p===$&&A.c() +p[a5]=a8;++a5;--a6}continue}else{if(a5>=a0)throw A.d(A.e_(d1)) +a9=a4-1 +p=d0.r +l=d0.f +if(a9<16){b0=p[0] +a8=l[b0+a9] +for(;a9>3;){b1=b0+a9 +p=b1-1 +l[b1]=l[p] +k=b1-2 +l[p]=l[k] +p=b1-3 +l[k]=l[p] +l[p]=l[b1-4] +a9-=4}for(;a9>0;){p=b0+a9 +l[p]=l[p-1];--a9}l[b0]=a8}else{b2=B.f.cN(a9,16) +b3=B.f.bx(a9,16) +b0=p[b2]+b3 +a8=l[b0] +for(;k=p[b2],b0>k;b0=b4){b4=b0-1 +l[b0]=l[b4]}p[b2]=k+1 +for(;b2>0;b2=b5){p[b2]=p[b2]-1 +b5=b2-1 +l[p[b2]]=l[p[b5]+16-1]}p[0]=p[0]-1 +l[p[0]]=a8 +if(p[0]===0)for(a1=4095,a2=15;a2>=0;--a2){for(a3=15;a3>=0;--a3){l[a1]=l[p[a2]+a3];--a1}p[a2]=a1+1}}p=d0.at +l=d0.e +l===$&&A.c() +k=l[a8] +p[k]=p[k]+1 +k=d0.b +k===$&&A.c() +k[a5]=l[a8];++a5 +a4=d0.QK(d6) +continue}}if(d5>=a5)throw A.d(A.e_(d1)) +for(p=d0.at,s=0;s<=255;++s){l=p[s] +if(l<0||l>a5)throw A.d(A.e_(d1))}p=d0.dy=new Int32Array(257) +p[0]=0 +for(l=d0.at,s=1;s<=256;++s)p[s]=l[s-1] +for(s=1;s<=256;++s)p[s]=p[s]+p[s-1] +for(s=0;s<=256;++s){l=p[s] +if(l<0||l>a5)throw A.d(A.e_(d1))}for(s=1;s<=256;++s)if(p[s-1]>p[s])throw A.d(A.e_(d1)) +for(l=d0.b,s=0;s>>0 +p[a8]=p[a8]+1}l===$&&A.c() +b6=l[d5]>>>8 +p=d4!==0 +if(p){if(b6>=1e5*d0.a)throw A.d(A.e_(d1)) +b6=l[b6] +b7=b6>>>8 +b8=b6&255^0 +b6=b7 +b9=618 +c0=1}else{if(b6>=1e5*d0.a)return d2 +b6=l[b6] +b8=b6&255 +b6=b6>>>8 +b9=0 +c0=0}c1=a5+1 +if(p)for(c2=d2,c3=0,c4=0,c5=1;!0;c4=b8,b8=c7){for(p=c4&255;!0;){if(c3===0)break +d7.ih(c4) +c2=(c2<<8^B.hN[c2>>>24&255^p])>>>0;--c3}if(c5===c1)return c2 +if(c5>c1)throw A.d(A.e_("Data error.")) +p=d0.b +b6=p[b6] +b7=b6>>>8 +if(b9===0){b9=B.hM[c0];++c0 +if(c0===512)c0=0}--b9 +l=b9===1?1:0 +c6=b6&255^l;++c5 +if(c5===c1){c7=b8 +b6=b7 +c3=1 +continue}if(c6!==b8){c7=c6 +b6=b7 +c3=1 +continue}b6=p[b7] +b7=b6>>>8 +if(b9===0){b9=B.hM[c0];++c0 +if(c0===512)c0=0}l=b9===1?1:0 +c6=b6&255^l;++c5 +if(c5===c1){c7=b8 +b6=b7 +c3=2 +continue}if(c6!==b8){c7=c6 +b6=b7 +c3=2 +continue}b6=p[b7] +b7=b6>>>8 +if(b9===0){b9=B.hM[c0];++c0 +if(c0===512)c0=0}l=b9===1?1:0 +c6=b6&255^l;++c5 +if(c5===c1){c7=b8 +b6=b7 +c3=3 +continue}if(c6!==b8){c7=c6 +b6=b7 +c3=3 +continue}b6=p[b7] +if(b9===0){b9=B.hM[c0];++c0 +if(c0===512)c0=0}l=b9===1?1:0 +c3=(b6&255^l)+4 +b6=p[b6>>>8] +b7=b6>>>8 +if(b9===0){b9=B.hM[c0];++c0 +if(c0===512)c0=0}p=b9===1?1:0 +c7=b6&255^p +c5=c5+1+1 +b6=b7}else for(c8=b8,c2=d2,c3=0,c4=0,c5=1;!0;c4=c8,c8=c9){if(c3>0){for(p=c4&255;!0;){if(c3===1)break +d7.ih(c4) +c2=c2<<8^B.hN[c2>>>24&255^p];--c3}d7.ih(c4) +c2=(c2<<8^B.hN[c2>>>24&255^p])>>>0}if(c5>c1)throw A.d(A.e_(d1)) +if(c5===c1)return c2 +p=1e5*d0.a +if(b6>=p)throw A.d(A.e_(d3)) +l=d0.b +b6=l[b6] +c6=b6&255 +b6=b6>>>8;++c5 +if(c6!==c8){d7.ih(c8) +c2=(c2<<8^B.hN[c2>>>24&255^c8&255])>>>0 +c9=c6 +c3=0 +continue}if(c5===c1){d7.ih(c8) +c2=(c2<<8^B.hN[c2>>>24&255^c8&255])>>>0 +c9=c8 +c3=0 +continue}if(b6>=p)throw A.d(A.e_(d3)) +b6=l[b6] +c6=b6&255 +b6=b6>>>8;++c5 +if(c5===c1){c9=c8 +c3=2 +continue}if(c6!==c8){c9=c6 +c3=2 +continue}if(b6>=p)throw A.d(A.e_(d3)) +b6=l[b6] +c6=b6&255 +b6=b6>>>8;++c5 +if(c5===c1){c9=c8 +c3=3 +continue}if(c6!==c8){c9=c6 +c3=3 +continue}if(b6>=p)throw A.d(A.e_(d3)) +b6=l[b6] +b7=b6>>>8 +c3=(b6&255)+4 +if(b7>=p)throw A.d(A.e_(d3)) +b6=l[b7] +c9=b6&255 +b6=b6>>>8 +c5=c5+1+1}return c2}, +QK(a){var s,r,q,p,o=this,n="Data error",m=o.ay +if(m===0){m=++o.ch +s=o.ax +s===$&&A.c() +if(m>=s)throw A.d(A.e_(n)) +s=o.ay=50 +r=o.x +r===$&&A.c() +m=o.CW=r[m] +r=o.as +r===$&&A.c() +o.cx=r[m] +r=o.y +r===$&&A.c() +o.cy=r[m] +r=o.Q +r===$&&A.c() +o.db=r[m] +r=o.z +r===$&&A.c() +o.dx=r[m] +m=s}o.ay=m-1 +q=o.cx +p=a.fK(q) +for(;!0;){if(q>20)throw A.d(A.e_(n)) +m=o.cy +m===$&&A.c() +if(p<=m[q])break;++q +p=(p<<1|a.fK(1))>>>0}m=o.dx +m===$&&A.c() +m=p-m[q] +if(m<0||m>=258)throw A.d(A.e_(n)) +s=o.db +s===$&&A.c() +return s[m]}, +aBN(a,b,c,d,e,f,g){var s,r,q,p,o,n +for(s=e,r=0;s<=f;++s)for(q=0;q>>0}for(s=e+1;s<=f;++s)b[s]=(a[s-1]+1<<1>>>0)-b[s]}, +aCQ(){var s,r,q=this +q.fx=0 +q.e=new Uint8Array(256) +for(s=0;s<256;++s){r=q.d +r===$&&A.c() +if(r[s]!==0)q.e[q.fx++]=s}}} +A.aE3.prototype={} +A.aw4.prototype={ +aXP(a,b,c){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.w +h===$&&A.c() +h.a.rG(0,a,0,c) +for(h=b+c,s=J.al(a),r=i.c,q=i.b,p=b;pq.byteLength)A.X(A.c3("Input buffer too short",null)) +if(16>r.byteLength)A.X(A.c3("Output buffer too short",null)) +l=m.c +k=m.b +if(l){k===$&&A.c() +m.awT(q,0,r,0,k)}else{k===$&&A.c() +m.avW(q,0,r,0,k)}for(j=0;j>>0)}++i.a}h=i.w +s=h.b +s===$&&A.c() +s=new Uint8Array(s) +i.x=s +h.vC(s,0) +i.x=B.L.cI(i.x,0,10) +s=i.w +h=s.a +h.bF(0) +s=s.d +s===$&&A.c() +h.rG(0,s,0,s.length) +return c}} +A.a_3.prototype={} +A.ayy.prototype={} +A.aNq.prototype={} +A.ax2.prototype={} +A.Od.prototype={} +A.aMo.prototype={ +aPJ(a,b,c,d){var s,r,q,p,o,n,m,l,k=this,j=k.a +j===$&&A.c() +s=j.c +j=k.b +r=j.b +r===$&&A.c() +q=B.f.eY(s+r-1,r) +p=new Uint8Array(4) +o=new Uint8Array(q*r) +j.Ed(new A.Od(B.L.jE(a,b))) +for(n=0,m=1;m<=q;++m){for(l=3;!0;--l){p[l]=p[l]+1 +if(p[l]!==0)break}j=k.a +k.axd(j.a,j.b,p,o,n) +n+=r}B.L.dL(c,d,d+s,o) +return k.a.c}, +axd(a,b,c,d,e){var s,r,q,p,o,n,m,l=this +if(b<=0)throw A.d(A.c3("Iteration count must be at least 1.",null)) +s=l.b +r=s.a +r.rG(0,a,0,J.bo(a)) +r.rG(0,c,0,4) +q=l.c +q===$&&A.c() +s.vC(q,0) +q=l.c +B.L.dL(d,e,e+q.length,q) +for(p=1;p>>0 +r.b=q +if(s!==q){q=r.a +q===$&&A.c();++q +r.a=q +r.a=q>>>0}}, +j(a){var s=this,r=new A.d8(""),q=s.a +q===$&&A.c() +s.a6I(r,q) +q=s.b +q===$&&A.c() +s.a6I(r,q) +q=r.a +return q.charCodeAt(0)==0?q:q}, +a6I(a,b){var s,r=B.f.hZ(b,16) +for(s=8-r.length;s>0;--s)a.a+="0" +a.a+=r}, +gL(a){var s,r=this.a +r===$&&A.c() +s=this.b +s===$&&A.c() +return A.a6(r,s,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aJZ.prototype={ +bF(a){var s,r=this +r.a.al0(0) +r.c=0 +B.L.kU(r.b,0,4,0) +r.w=0 +s=r.r +B.b.kU(s,0,s.length,0) +s=r.f +s[0]=1732584193 +s[1]=4023233417 +s[2]=2562383102 +s[3]=271733878 +s[4]=3285377520}, +Na(a){var s,r=this,q=r.b,p=r.c +p===$&&A.c() +s=p+1 +r.c=s +q[p]=a&255 +if(s===4){r.a7a(q,0) +r.c=0}r.a.a0w(1)}, +rG(a,b,c,d){var s=this.aFM(b,c,d) +c+=s +d-=s +s=this.aFN(b,c,d) +this.aFI(b,c+s,d-s)}, +vC(a,b){var s,r=this,q=A.bp6(r.a),p=q.a +p===$&&A.c() +p=A.biJ(p,3) +q.a=p +s=q.b +s===$&&A.c() +q.a=(p|s>>>29)>>>0 +q.b=A.biJ(s,3) +r.aFK() +r.aFJ(q) +r.Q8() +r.aEo(a,b) +r.bF(0) +return 20}, +a7a(a,b){var s,r=this,q=r.w +q===$&&A.c() +r.w=q+1 +s=J.bS(a) +r.r[q]=J.bdM(J.Zz(s.gdl(a),s.gfY(a),s.gF(a)),b,r.d) +if(r.w===16)r.Q8()}, +Q8(){this.aXO() +this.w=0 +B.b.kU(this.r,0,16,0)}, +aFI(a,b,c){var s +for(s=J.al(a);c>0;){this.Na(s.i(a,b));++b;--c}}, +aFN(a,b,c){var s,r +for(s=this.a,r=0;c>4;){this.a7a(a,b) +b+=4 +c-=4 +s.a0w(4) +r+=4}return r}, +aFM(a,b,c){var s,r=J.al(a),q=0 +while(!0){s=this.c +s===$&&A.c() +if(!(s!==0&&c>0))break +this.Na(r.i(a,b));++b;--c;++q}return q}, +aFK(){this.Na(128) +while(!0){var s=this.c +s===$&&A.c() +if(!(s!==0))break +this.Na(0)}}, +aFJ(a){var s,r=this,q=r.w +q===$&&A.c() +if(q>14)r.Q8() +q=r.d +switch(q){case B.n:q=r.r +s=a.b +s===$&&A.c() +q[14]=s +s=a.a +s===$&&A.c() +q[15]=s +break +case B.hd:q=r.r +s=a.a +s===$&&A.c() +q[14]=s +s=a.b +s===$&&A.c() +q[15]=s +break +default:throw A.d(A.ad("Invalid endianness: "+q.j(0)))}}, +aEo(a,b){var s,r,q,p,o,n +for(s=this.e,r=this.f,q=a.length,p=this.d,o=0;o>>31)>>>0}p=this.f +o=p[0] +n=p[1] +m=p[2] +l=p[3] +k=p[4] +for(j=o,i=0,h=0;h<4;++h,i=f){g=$.iB[5] +f=i+1 +k=k+(((j&g)<<5|j>>>27)>>>0)+((n&m|~n&l)>>>0)+s[i]+1518500249>>>0 +e=$.iB[30] +n=((n&e)<<30|n>>>2)>>>0 +i=f+1 +l=l+(((k&g)<<5|k>>>27)>>>0)+((j&n|~j&m)>>>0)+s[f]+1518500249>>>0 +j=((j&e)<<30|j>>>2)>>>0 +f=i+1 +m=m+(((l&g)<<5|l>>>27)>>>0)+((k&j|~k&n)>>>0)+s[i]+1518500249>>>0 +k=((k&e)<<30|k>>>2)>>>0 +i=f+1 +n=n+(((m&g)<<5|m>>>27)>>>0)+((l&k|~l&j)>>>0)+s[f]+1518500249>>>0 +l=((l&e)<<30|l>>>2)>>>0 +f=i+1 +j=j+(((n&g)<<5|n>>>27)>>>0)+((m&l|~m&k)>>>0)+s[i]+1518500249>>>0 +m=((m&e)<<30|m>>>2)>>>0}for(h=0;h<4;++h,i=f){g=$.iB[5] +f=i+1 +k=k+(((j&g)<<5|j>>>27)>>>0)+((n^m^l)>>>0)+s[i]+1859775393>>>0 +e=$.iB[30] +n=((n&e)<<30|n>>>2)>>>0 +i=f+1 +l=l+(((k&g)<<5|k>>>27)>>>0)+((j^n^m)>>>0)+s[f]+1859775393>>>0 +j=((j&e)<<30|j>>>2)>>>0 +f=i+1 +m=m+(((l&g)<<5|l>>>27)>>>0)+((k^j^n)>>>0)+s[i]+1859775393>>>0 +k=((k&e)<<30|k>>>2)>>>0 +i=f+1 +n=n+(((m&g)<<5|m>>>27)>>>0)+((l^k^j)>>>0)+s[f]+1859775393>>>0 +l=((l&e)<<30|l>>>2)>>>0 +f=i+1 +j=j+(((n&g)<<5|n>>>27)>>>0)+((m^l^k)>>>0)+s[i]+1859775393>>>0 +m=((m&e)<<30|m>>>2)>>>0}for(h=0;h<4;++h,i=f){g=$.iB[5] +f=i+1 +k=k+(((j&g)<<5|j>>>27)>>>0)+((n&m|n&l|m&l)>>>0)+s[i]+2400959708>>>0 +e=$.iB[30] +n=((n&e)<<30|n>>>2)>>>0 +i=f+1 +l=l+(((k&g)<<5|k>>>27)>>>0)+((j&n|j&m|n&m)>>>0)+s[f]+2400959708>>>0 +j=((j&e)<<30|j>>>2)>>>0 +f=i+1 +m=m+(((l&g)<<5|l>>>27)>>>0)+((k&j|k&n|j&n)>>>0)+s[i]+2400959708>>>0 +k=((k&e)<<30|k>>>2)>>>0 +i=f+1 +n=n+(((m&g)<<5|m>>>27)>>>0)+((l&k|l&j|k&j)>>>0)+s[f]+2400959708>>>0 +l=((l&e)<<30|l>>>2)>>>0 +f=i+1 +j=j+(((n&g)<<5|n>>>27)>>>0)+((m&l|m&k|l&k)>>>0)+s[i]+2400959708>>>0 +m=((m&e)<<30|m>>>2)>>>0}for(h=0;h<4;++h,i=f){g=$.iB[5] +f=i+1 +k=k+(((j&g)<<5|j>>>27)>>>0)+((n^m^l)>>>0)+s[i]+3395469782>>>0 +e=$.iB[30] +n=((n&e)<<30|n>>>2)>>>0 +i=f+1 +l=l+(((k&g)<<5|k>>>27)>>>0)+((j^n^m)>>>0)+s[f]+3395469782>>>0 +j=((j&e)<<30|j>>>2)>>>0 +f=i+1 +m=m+(((l&g)<<5|l>>>27)>>>0)+((k^j^n)>>>0)+s[i]+3395469782>>>0 +k=((k&e)<<30|k>>>2)>>>0 +i=f+1 +n=n+(((m&g)<<5|m>>>27)>>>0)+((l^k^j)>>>0)+s[f]+3395469782>>>0 +l=((l&e)<<30|l>>>2)>>>0 +f=i+1 +j=j+(((n&g)<<5|n>>>27)>>>0)+((m^l^k)>>>0)+s[i]+3395469782>>>0 +m=((m&e)<<30|m>>>2)>>>0}p[0]=o+j>>>0 +p[1]=p[1]+n>>>0 +p[2]=p[2]+m>>>0 +p[3]=p[3]+l>>>0 +p[4]=p[4]+k>>>0}} +A.aGk.prototype={ +Ed(a){var s,r,q,p,o=this,n=o.a +n.bF(0) +s=a.a +s===$&&A.c() +r=s.length +q=o.c +q===$&&A.c() +if(r>q){n.rG(0,s,0,r) +s=o.d +s===$&&A.c() +n.vC(s,0) +s=o.b +s===$&&A.c() +r=s}else{p=o.d +p===$&&A.c() +B.L.dL(p,0,r,s)}s=o.d +s===$&&A.c() +B.L.kU(s,r,s.length,0) +s=o.e +s===$&&A.c() +B.L.dL(s,0,q,o.d) +o.aaH(o.d,q,54) +o.aaH(o.e,q,92) +q=o.d +n.rG(0,q,0,q.length)}, +vC(a,b){var s,r,q=this,p=q.a,o=q.e +o===$&&A.c() +s=q.c +s===$&&A.c() +p.vC(o,s) +o=q.e +p.rG(0,o,0,o.length) +r=p.vC(a,b) +o=q.e +B.L.kU(o,s,o.length,0) +o=q.d +o===$&&A.c() +p.rG(0,o,0,o.length) +return r}, +aaH(a,b,c){var s +for(s=0;s>>8&255]&255)<<8|(B.c4[a>>>16&255]&255)<<16|B.c4[a>>>24&255]<<24)>>>0}, +ajH(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.c() +s=a.length +if(s<16||s>32||(s&7)!==0)throw A.d(A.c3("Key length not 128/192/256 bits.",null)) +r=s>>>2 +q=r+6 +b.a=q +p=q+1 +o=J.el(p,t.Cm) +for(q=t.S,n=0;n>>8|(i&$.iB[24])<<24)>>>0)^B.Zh[n-1])>>>0 +a=o[n] +a[0]=l +k=(k^l)>>>0 +a[1]=k +j=(j^k)>>>0 +a[2]=j +i=(i^j)>>>0 +a[3]=i}break +case 6:m=B.aw.im(a.buffer,a.byteOffset,s) +l=B.Z.ec(m,0,B.n) +a=o[0] +a[0]=l +k=B.Z.ec(m,4,B.n) +a[1]=k +j=B.Z.ec(m,8,B.n) +a[2]=j +i=B.Z.ec(m,12,B.n) +a[3]=i +h=B.Z.ec(m,16,B.n) +g=B.Z.ec(m,20,B.n) +for(n=1,f=1;!0;){a=o[n] +a[0]=h +a[1]=g +e=f<<1 +l=(l^b.C3((g>>>8|(g&$.iB[24])<<24)>>>0)^f)>>>0 +a[2]=l +k=(k^l)>>>0 +a[3]=k +j=(j^k)>>>0 +a=o[n+1] +a[0]=j +i=(i^j)>>>0 +a[1]=i +h=(h^i)>>>0 +a[2]=h +g=(g^h)>>>0 +a[3]=g +f=e<<1 +l=(l^b.C3((g>>>8|(g&$.iB[24])<<24)>>>0)^e)>>>0 +a=o[n+2] +a[0]=l +k=(k^l)>>>0 +a[1]=k +j=(j^k)>>>0 +a[2]=j +i=(i^j)>>>0 +a[3]=i +n+=3 +if(n>=13)break +h=(h^i)>>>0 +g=(g^h)>>>0}break +case 8:m=B.aw.im(a.buffer,a.byteOffset,s) +l=B.Z.ec(m,0,B.n) +a=o[0] +a[0]=l +k=B.Z.ec(m,4,B.n) +a[1]=k +j=B.Z.ec(m,8,B.n) +a[2]=j +i=B.Z.ec(m,12,B.n) +a[3]=i +h=B.Z.ec(m,16,B.n) +a=o[1] +a[0]=h +g=B.Z.ec(m,20,B.n) +a[1]=g +d=B.Z.ec(m,24,B.n) +a[2]=d +c=B.Z.ec(m,28,B.n) +a[3]=c +for(n=2,f=1;!0;f=e){e=f<<1 +l=(l^b.C3((c>>>8|(c&$.iB[24])<<24)>>>0)^f)>>>0 +a=o[n] +a[0]=l +k=(k^l)>>>0 +a[1]=k +j=(j^k)>>>0 +a[2]=j +i=(i^j)>>>0 +a[3]=i;++n +if(n>=15)break +h=(h^b.C3(i))>>>0 +a=o[n] +a[0]=h +g=(g^h)>>>0 +a[1]=g +d=(d^g)>>>0 +a[2]=d +c=(c^d)>>>0 +a[3]=c;++n}break +default:throw A.d(A.ad("Should never get here"))}return o}, +awT(b2,b3,b4,b5,b6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2=B.aw.im(b2.buffer,b2.byteOffset,16),a3=B.Z.ec(a2,b3,B.n),a4=B.Z.ec(a2,b3+4,B.n),a5=B.Z.ec(a2,b3+8,B.n),a6=B.Z.ec(a2,b3+12,B.n),a7=b6[0],a8=a3^a7[0],a9=a4^a7[1],b0=a5^a7[2],b1=a6^a7[3] +for(a7=this.a-1,s=1;s>>8&255] +p=$.iB[8] +o=B.T[b0>>>16&255] +n=$.iB[16] +m=B.T[b1>>>24&255] +l=$.iB[24] +k=b6[s] +j=r^(q>>>24|(q&p)<<8)^(o>>>16|(o&n)<<16)^(m>>>8|(m&l)<<24)^k[0] +m=B.T[a9&255] +o=B.T[b0>>>8&255] +q=B.T[b1>>>16&255] +r=B.T[a8>>>24&255] +i=m^(o>>>24|(o&p)<<8)^(q>>>16|(q&n)<<16)^(r>>>8|(r&l)<<24)^k[1] +r=B.T[b0&255] +q=B.T[b1>>>8&255] +o=B.T[a8>>>16&255] +m=B.T[a9>>>24&255] +h=r^(q>>>24|(q&p)<<8)^(o>>>16|(o&n)<<16)^(m>>>8|(m&l)<<24)^k[2] +m=B.T[b1&255] +a8=B.T[a8>>>8&255] +a9=B.T[a9>>>16&255] +b0=B.T[b0>>>24&255];++s +b1=m^(a8>>>24|(a8&p)<<8)^(a9>>>16|(a9&n)<<16)^(b0>>>8|(b0&l)<<24)^k[3] +k=B.T[j&255] +b0=B.T[i>>>8&255] +a9=B.T[h>>>16&255] +a8=B.T[b1>>>24&255] +m=b6[s] +a8=k^(b0>>>24|(b0&p)<<8)^(a9>>>16|(a9&n)<<16)^(a8>>>8|(a8&l)<<24)^m[0] +a9=B.T[i&255] +b0=B.T[h>>>8&255] +k=B.T[b1>>>16&255] +o=B.T[j>>>24&255] +a9=a9^(b0>>>24|(b0&p)<<8)^(k>>>16|(k&n)<<16)^(o>>>8|(o&l)<<24)^m[1] +o=B.T[h&255] +k=B.T[b1>>>8&255] +b0=B.T[j>>>16&255] +q=B.T[i>>>24&255] +b0=o^(k>>>24|(k&p)<<8)^(b0>>>16|(b0&n)<<16)^(q>>>8|(q&l)<<24)^m[2] +q=B.T[b1&255] +k=B.T[j>>>8&255] +o=B.T[i>>>16&255] +r=B.T[h>>>24&255];++s +b1=q^(k>>>24|(k&p)<<8)^(o>>>16|(o&n)<<16)^(r>>>8|(r&l)<<24)^m[3]}j=B.T[a8&255]^A.h3(B.T[a9>>>8&255],24)^A.h3(B.T[b0>>>16&255],16)^A.h3(B.T[b1>>>24&255],8)^b6[s][0] +i=B.T[a9&255]^A.h3(B.T[b0>>>8&255],24)^A.h3(B.T[b1>>>16&255],16)^A.h3(B.T[a8>>>24&255],8)^b6[s][1] +h=B.T[b0&255]^A.h3(B.T[b1>>>8&255],24)^A.h3(B.T[a8>>>16&255],16)^A.h3(B.T[a9>>>24&255],8)^b6[s][2] +b1=B.T[b1&255]^A.h3(B.T[a8>>>8&255],24)^A.h3(B.T[a9>>>16&255],16)^A.h3(B.T[b0>>>24&255],8)^b6[s][3] +a7=B.c4[j&255] +b0=B.c4[i>>>8&255] +r=this.d +q=r[h>>>16&255] +p=r[b1>>>24&255] +o=b6[s+1] +n=o[0] +m=r[i&255] +l=B.c4[h>>>8&255] +a9=B.c4[b1>>>16&255] +k=r[j>>>24&255] +g=o[1] +f=r[h&255] +e=B.c4[b1>>>8&255] +d=B.c4[j>>>16&255] +c=B.c4[i>>>24&255] +b=o[2] +a=r[b1&255] +a0=r[j>>>8&255] +r=r[i>>>16&255] +a1=B.c4[h>>>24&255] +o=o[3] +B.Z.oY(B.aw.im(b4.buffer,b4.byteOffset,16),b5,(a7&255^(b0&255)<<8^(q&255)<<16^p<<24^n)>>>0,B.n) +B.Z.oY(B.aw.im(b4.buffer,b4.byteOffset,16),b5+4,(m&255^(l&255)<<8^(a9&255)<<16^k<<24^g)>>>0,B.n) +B.Z.oY(B.aw.im(b4.buffer,b4.byteOffset,16),b5+8,(f&255^(e&255)<<8^(d&255)<<16^c<<24^b)>>>0,B.n) +B.Z.oY(B.aw.im(b4.buffer,b4.byteOffset,16),b5+12,(a&255^(a0&255)<<8^(r&255)<<16^a1<<24^o)>>>0,B.n)}, +avW(b2,b3,b4,b5,b6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=B.Z.ec(B.aw.im(b2.buffer,b2.byteOffset,16),b3,B.n),a2=B.Z.ec(B.aw.im(b2.buffer,b2.byteOffset,16),b3+4,B.n),a3=B.Z.ec(B.aw.im(b2.buffer,b2.byteOffset,16),b3+8,B.n),a4=B.Z.ec(B.aw.im(b2.buffer,b2.byteOffset,16),b3+12,B.n),a5=this.a,a6=b6[a5],a7=a1^a6[0],a8=a2^a6[1],a9=a3^a6[2],b0=a5-1,b1=a4^a6[3] +for(a6=a9,a5=a8;b0>1;){s=B.S[a7&255] +r=B.S[b1>>>8&255] +q=$.iB[8] +p=B.S[a6>>>16&255] +o=$.iB[16] +n=B.S[a5>>>24&255] +m=$.iB[24] +a8=b6[b0] +l=s^(r>>>24|(r&q)<<8)^(p>>>16|(p&o)<<16)^(n>>>8|(n&m)<<24)^a8[0] +n=B.S[a5&255] +p=B.S[a7>>>8&255] +r=B.S[b1>>>16&255] +s=B.S[a6>>>24&255] +k=n^(p>>>24|(p&q)<<8)^(r>>>16|(r&o)<<16)^(s>>>8|(s&m)<<24)^a8[1] +s=B.S[a6&255] +r=B.S[a5>>>8&255] +p=B.S[a7>>>16&255] +n=B.S[b1>>>24&255] +j=s^(r>>>24|(r&q)<<8)^(p>>>16|(p&o)<<16)^(n>>>8|(n&m)<<24)^a8[2] +n=B.S[b1&255] +a6=B.S[a6>>>8&255] +a5=B.S[a5>>>16&255] +a7=B.S[a7>>>24&255];--b0 +b1=n^(a6>>>24|(a6&q)<<8)^(a5>>>16|(a5&o)<<16)^(a7>>>8|(a7&m)<<24)^a8[3] +a8=B.S[l&255] +a7=B.S[b1>>>8&255] +a5=B.S[j>>>16&255] +a6=B.S[k>>>24&255] +n=b6[b0] +a7=a8^(a7>>>24|(a7&q)<<8)^(a5>>>16|(a5&o)<<16)^(a6>>>8|(a6&m)<<24)^n[0] +a6=B.S[k&255] +a5=B.S[l>>>8&255] +a8=B.S[b1>>>16&255] +p=B.S[j>>>24&255] +a5=a6^(a5>>>24|(a5&q)<<8)^(a8>>>16|(a8&o)<<16)^(p>>>8|(p&m)<<24)^n[1] +p=B.S[j&255] +a8=B.S[k>>>8&255] +a6=B.S[l>>>16&255] +r=B.S[b1>>>24&255] +a6=p^(a8>>>24|(a8&q)<<8)^(a6>>>16|(a6&o)<<16)^(r>>>8|(r&m)<<24)^n[2] +r=B.S[b1&255] +a8=B.S[j>>>8&255] +p=B.S[k>>>16&255] +s=B.S[l>>>24&255];--b0 +b1=r^(a8>>>24|(a8&q)<<8)^(p>>>16|(p&o)<<16)^(s>>>8|(s&m)<<24)^n[3]}l=B.S[a7&255]^A.h3(B.S[b1>>>8&255],24)^A.h3(B.S[a6>>>16&255],16)^A.h3(B.S[a5>>>24&255],8)^b6[b0][0] +k=B.S[a5&255]^A.h3(B.S[a7>>>8&255],24)^A.h3(B.S[b1>>>16&255],16)^A.h3(B.S[a6>>>24&255],8)^b6[b0][1] +j=B.S[a6&255]^A.h3(B.S[a5>>>8&255],24)^A.h3(B.S[a7>>>16&255],16)^A.h3(B.S[b1>>>24&255],8)^b6[b0][2] +b1=B.S[b1&255]^A.h3(B.S[a6>>>8&255],24)^A.h3(B.S[a5>>>16&255],16)^A.h3(B.S[a7>>>24&255],8)^b6[b0][3] +a5=B.eu[l&255] +a6=this.d +s=a6[b1>>>8&255] +r=a6[j>>>16&255] +q=B.eu[k>>>24&255] +p=b6[0] +o=p[0] +n=a6[k&255] +m=a6[l>>>8&255] +a8=B.eu[b1>>>16&255] +i=a6[j>>>24&255] +h=p[1] +g=a6[j&255] +f=B.eu[k>>>8&255] +e=B.eu[l>>>16&255] +d=a6[b1>>>24&255] +c=p[2] +b=B.eu[b1&255] +a=a6[j>>>8&255] +a9=a6[k>>>16&255] +a6=a6[l>>>24&255] +p=p[3] +a0=B.aw.im(b4.buffer,b4.byteOffset,16) +B.Z.oY(a0,b5,(a5&255^(s&255)<<8^(r&255)<<16^q<<24^o)>>>0,B.n) +B.Z.oY(a0,b5+4,(n&255^(m&255)<<8^(a8&255)<<16^i<<24^h)>>>0,B.n) +B.Z.oY(a0,b5+8,(g&255^(f&255)<<8^(e&255)<<16^d<<24^c)>>>0,B.n) +B.Z.oY(a0,b5+12,(b&255^(a&255)<<8^(a9&255)<<16^a6<<24^p)>>>0,B.n)}} +A.aHQ.prototype={} +A.aHP.prototype={ +gF(a){var s=this.e +s===$&&A.c() +return s-(this.b-this.c)}, +gafj(){var s=this.b,r=this.e +r===$&&A.c() +return s>=this.c+r}, +i(a,b){return J.bG(this.a,this.b+b)}, +rT(a,b){var s,r=this,q=r.c +a+=q +if(b<0){s=r.e +s===$&&A.c() +b=s-(a-q)}return A.rA(r.a,r.d,b,a)}, +fc(){return J.bG(this.a,this.b++)}, +nx(a){var s=this,r=s.rT(s.b-s.c,a) +s.b=s.b+r.gF(0) +return r}, +Z_(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=null +if(a==null){q=A.b([],t.t) +if(j.gafj())return"" +p=j.c +o=j.a +n=J.al(o) +while(!0){m=j.b +l=j.e +l===$&&A.c() +if(!(m>>0 +return(m<<24|n<<16|o<<8|p)>>>0}, +rv(){var s=this,r=s.a,q=J.al(r),p=q.i(r,s.b++)&255,o=q.i(r,s.b++)&255,n=q.i(r,s.b++)&255,m=q.i(r,s.b++)&255,l=q.i(r,s.b++)&255,k=q.i(r,s.b++)&255,j=q.i(r,s.b++)&255,i=q.i(r,s.b++)&255 +if(s.d===1)return(B.f.pi(p,56)|B.f.pi(o,48)|B.f.pi(n,40)|B.f.pi(m,32)|l<<24|k<<16|j<<8|i)>>>0 +return(B.f.pi(i,56)|B.f.pi(j,48)|B.f.pi(k,40)|B.f.pi(l,32)|m<<24|n<<16|o<<8|p)>>>0}, +jw(){var s,r,q=this,p=q.gF(0),o=q.a +if(t.H3.b(o)){s=J.al(o) +if(q.b+p>s.gF(o))p=s.gF(o)-q.b +return J.iZ(s.gdl(o),s.gfY(o)+q.b,p)}r=q.b+p +s=J.al(o) +if(r>s.gF(o))r=s.gF(o) +return new Uint8Array(A.eG(s.cI(o,q.b,r)))}} +A.aMg.prototype={} +A.aMf.prototype={ +ih(a){var s=this +if(s.a===s.c.length)s.ax5() +s.c[s.a++]=a&255}, +a_0(a){var s,r,q,p,o,n=this,m=J.al(a),l=m.gF(a) +for(;s=n.a,r=s+l,q=n.c,p=q.length,r>p;)n.Qm(r-p) +if(l===1)q[s]=m.i(a,0) +else if(l===2){q[s]=m.i(a,0) +n.c[n.a+1]=m.i(a,1)}else if(l===3){q[s]=m.i(a,0) +n.c[n.a+1]=m.i(a,1) +n.c[n.a+2]=m.i(a,2)}else if(l===4){q[s]=m.i(a,0) +n.c[n.a+1]=m.i(a,1) +n.c[n.a+2]=m.i(a,2) +n.c[n.a+3]=m.i(a,3)}else if(l===5){q[s]=m.i(a,0) +n.c[n.a+1]=m.i(a,1) +n.c[n.a+2]=m.i(a,2) +n.c[n.a+3]=m.i(a,3) +n.c[n.a+4]=m.i(a,4)}else if(l===6){q[s]=m.i(a,0) +n.c[n.a+1]=m.i(a,1) +n.c[n.a+2]=m.i(a,2) +n.c[n.a+3]=m.i(a,3) +n.c[n.a+4]=m.i(a,4) +n.c[n.a+5]=m.i(a,5)}else if(l===7){q[s]=m.i(a,0) +n.c[n.a+1]=m.i(a,1) +n.c[n.a+2]=m.i(a,2) +n.c[n.a+3]=m.i(a,3) +n.c[n.a+4]=m.i(a,4) +n.c[n.a+5]=m.i(a,5) +n.c[n.a+6]=m.i(a,6)}else if(l===8){q[s]=m.i(a,0) +n.c[n.a+1]=m.i(a,1) +n.c[n.a+2]=m.i(a,2) +n.c[n.a+3]=m.i(a,3) +n.c[n.a+4]=m.i(a,4) +n.c[n.a+5]=m.i(a,5) +n.c[n.a+6]=m.i(a,6) +n.c[n.a+7]=m.i(a,7)}else if(l===9){q[s]=m.i(a,0) +n.c[n.a+1]=m.i(a,1) +n.c[n.a+2]=m.i(a,2) +n.c[n.a+3]=m.i(a,3) +n.c[n.a+4]=m.i(a,4) +n.c[n.a+5]=m.i(a,5) +n.c[n.a+6]=m.i(a,6) +n.c[n.a+7]=m.i(a,7) +n.c[n.a+8]=m.i(a,8)}else if(l===10){q[s]=m.i(a,0) +n.c[n.a+1]=m.i(a,1) +n.c[n.a+2]=m.i(a,2) +n.c[n.a+3]=m.i(a,3) +n.c[n.a+4]=m.i(a,4) +n.c[n.a+5]=m.i(a,5) +n.c[n.a+6]=m.i(a,6) +n.c[n.a+7]=m.i(a,7) +n.c[n.a+8]=m.i(a,8) +n.c[n.a+9]=m.i(a,9)}else for(o=0;op))break +o.Qm(r-p)}B.L.c3(q,s,s+a.gF(0),a.a,a.b) +o.a=o.a+a.gF(0)}, +rT(a,b){var s=this +if(a<0)a=s.a+a +if(b==null)b=s.a +else if(b<0)b=s.a+b +return B.aw.lo(s.c.buffer,a,b-a)}, +a0u(a){return this.rT(a,null)}, +Qm(a){var s=a!=null?a>32768?a:32768:32768,r=this.c,q=r.length,p=new Uint8Array((q+s)*2) +B.L.dL(p,0,q,r) +this.c=p}, +ax5(){return this.Qm(null)}, +gF(a){return this.a}} +A.aYz.prototype={ +asY(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=j.axs(a) +j.a=i +s=a.c +a.b=s+i +a.fs() +j.b=a.ej() +a.ej() +j.d=a.ej() +a.ej() +j.f=a.fs() +j.r=a.fs() +r=a.ej() +if(r>0)a.Z_(r,!1) +if(j.r===4294967295||j.f===4294967295||j.d===65535||j.b===65535)j.aG_(a) +q=A.rA(a.rT(j.r,j.f).jw(),0,null,0) +i=q.c +p=j.x +o=t.t +while(!0){n=q.b +m=q.e +m===$&&A.c() +if(!(n=0;--s){a.b=q+s +if(a.fs()===101010256){a.b=q+(r-q) +return s}}throw A.d(A.e_("Could not find End of Central Directory Record"))}} +A.aw5.prototype={} +A.CA.prototype={ +asZ(a,b,c){var s,r,q,p,o,n,m,l,k,j,i=this,h=null,g=a.fs() +i.a=g +if(g!==67324752)throw A.d(A.e_("Invalid Zip Signature")) +a.ej() +i.c=a.ej() +i.d=a.ej() +i.e=a.ej() +i.f=a.ej() +i.r=a.fs() +i.w=a.fs() +i.x=a.fs() +s=a.ej() +r=a.ej() +i.y=a.MD(s) +i.z=a.nx(r).jw() +g=i.Q +q=g==null +p=q?h:g.w +i.w=p==null?i.w:p +q=q?h:g.x +i.x=q==null?i.x:q +i.ay=(i.c&1)!==0?1:0 +i.CW=c +g=g.w +g.toString +i.as=a.nx(g) +if(i.ay!==0&&r>2){o=A.rA(i.z,0,h,0) +g=o.c +while(!0){q=o.b +p=o.e +p===$&&A.c() +if(!(q>>24&255)}, +a3z(){var s=this.cx[2]&65535|2 +return s*(s^1)>>>8&255}, +avU(a){var s,r,q,p,o=this +for(s=0;s<12;++s){r=o.as +r===$&&A.c() +o.aa_((J.bG(r.a,r.b++)^o.a3z())>>>0)}r=o.as +r===$&&A.c() +q=r.jw() +for(r=J.al(q),s=0;s>>0 +o.aa_(p) +r.u(q,s,p)}return A.rA(q,0,null,0)}} +A.af1.prototype={ +at_(a){var s,r,q,p,o,n,m,l,k,j,i=this +i.a=a.ej() +a.ej() +a.ej() +a.ej() +a.ej() +a.ej() +a.fs() +i.w=a.fs() +i.x=a.fs() +s=a.ej() +r=a.ej() +q=a.ej() +i.y=a.ej() +a.ej() +i.Q=a.fs() +i.as=a.fs() +if(s>0)i.at=a.MD(s) +if(r>0){p=a.nx(r).jw() +i.ax=p +o=A.rA(p,0,null,0) +p=o.c +while(!0){n=o.b +m=o.e +m===$&&A.c() +if(!(n=8&&i.x===4294967295){i.x=j.rv() +k-=8}if(k>=8&&i.w===4294967295){i.w=j.rv() +k-=8}if(k>=8&&i.as===4294967295){i.as=j.rv() +k-=8}if(k>=4&&i.y===65535)i.y=j.fs()}}}if(q>0)a.MD(q)}, +j(a){return this.at}} +A.aYy.prototype={ +aPv(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h=null,g=new A.aYz(A.b([],t.kD)) +g.asY(a,b) +this.a=g +s=new A.a_2(A.b([],t.Cj),A.D(t.N,t.S)) +for(g=this.a.x,r=g.length,q=t.Cm,p=0;p>>16 +i.c=m +if(o.a>>>8===3)switch(m&61440){case 32768:case 0:break +case 40960:if((k instanceof A.CA?i.ax=k.gyM(0):k)==null)i.UF() +m=q.a(i.ax) +new A.k8(!1).lh(m,0,h,!0) +break}else B.d.iT(l,"/") +i.f=(n.f<<16|n.e)>>>0 +s.aM0(0,i)}return s}} +A.aGW.prototype={ +asw(a){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=J.al(a),f=g.gF(a) +for(s=0;sh.b)h.b=g.i(a,s) +if(g.i(a,s)>>0 +m=m>>>1}for(j=h.a,i=(n|s)>>>0,k=l;k>>0 +o=o<<1>>>0}}} +A.a5i.prototype={ +a5D(){var s,r,q,p=this +p.e=p.d=0 +if(!p.b)return +while(!0){s=p.a +s===$&&A.c() +r=s.b +q=s.e +q===$&&A.c() +if(!(r=s.c+q)return-1 +s.b=r+1 +s=J.bG(s.a,r) +r=p.d +q=p.e +p.d=(r|B.f.nT(s,q))>>>0 +p.e=q+8}r=p.d +q=B.f.pi(1,a) +p.d=B.f.y8(r,a) +p.e=s-a +return(r&q-1)>>>0}, +S4(a){var s,r,q,p,o,n,m=this,l=a.a +l===$&&A.c() +s=a.b +for(;r=m.e,r=r.c+p)return-1 +r.b=q+1 +r=J.bG(r.a,q) +q=m.d +p=m.e +m.d=(q|B.f.nT(r,p))>>>0 +m.e=p+8}q=m.d +o=l[(q&B.f.nT(1,s)-1)>>>0] +n=o>>>16 +m.d=B.f.y8(q,n) +m.e=r-n +return o&65535}, +aF0(){var s,r,q=this +q.e=q.d=0 +s=q.mO(16) +r=q.mO(16) +if(s!==0&&s!==(r^65535)>>>0)return-1 +r=q.a +r===$&&A.c() +if(s>r.gF(0))return-1 +q.c.b_q(q.a.nx(s)) +return 0}, +aER(){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.mO(5) +if(h===-1)return-1 +h+=257 +if(h>288)return-1 +s=i.mO(5) +if(s===-1)return-1;++s +if(s>32)return-1 +r=i.mO(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.ih(r&255) +continue}q=r-257 +p=B.a_1[q]+l.mO(B.YM[q]) +o=l.S4(b) +if(o<0||o>29)return-1 +n=B.Zb[o]+l.mO(B.ZY[o]) +for(m=-n;p>n;){s.a_0(s.a0u(m)) +p-=n}if(p===n)s.a_0(s.a0u(m)) +else s.a_0(s.rT(m,p-n))}for(;s=l.e,s>=8;){l.e=s-8 +s=l.a +s===$&&A.c() +if(--s.b<0)s.b=0}return 0}, +avO(a,b,c){var s,r,q,p,o,n,m=this +for(s=0,r=0;r0;p=o,r=n){n=r+1 +c[r]=s}break +case 17:p=m.mO(3) +if(p===-1)return-1 +p+=3 +for(;o=p-1,p>0;p=o,r=n){n=r+1 +c[r]=0}s=0 +break +case 18:p=m.mO(7) +if(p===-1)return-1 +p+=11 +for(;o=p-1,p>0;p=o,r=n){n=r+1 +c[r]=0}s=0 +break +default:if(q<0||q>15)return-1 +n=r+1 +c[r]=q +r=n +s=q +break}}return 0}} +A.a3k.prototype={ +gL(a){var s=this.a +return s.gL(s).pa(0,A.eT(this.b)).pa(0,492929599)}, +k(a,b){if(b==null)return!1 +return!1}, +$iaay:1} +A.Tq.prototype={ +gL(a){var s=this.a +return s.gL(s).pa(0,842997089)}, +k(a,b){if(b==null)return!1 +return!1}, +$iaay:1} +A.acv.prototype={ +bq(a){var s,r=this +if(r.d)A.X(A.ad("Already cancelled")) +r.d=!0 +s=new A.aM($.aK,t.D) +r.atw(new A.U9(new A.bH(s,t.h),r,r.$ti.h("U9<1>"))) +return s}, +aaa(){var s,r,q,p,o=this +for(s=o.r,r=o.f,q=s.$ti.c;!s.gaA(0);){p=s.b +if(p===s.c)A.X(A.cy()) +p=s.a[p] +if(p==null)p=q.a(p) +if(J.bBH(p,r,o.c))s.ue() +else return}if(!o.c)o.b.kC(0)}, +axc(){var s=this +if(s.c)return new A.CM(s.$ti.h("CM<1>")) +s.c=!0 +return s.a}, +a40(){var s=this +if(s.c)return +s.b=s.a.tY(new A.aU6(s),new A.aU7(s),new A.aU8(s))}, +a1X(a){++this.e +this.f.S2(0,a) +this.aaa()}, +atw(a){var s=this,r=s.r +if(r.b===r.c){if(a.ey(0,s.f,s.c))return +s.a40()}r.ho(0,a)}} +A.aU6.prototype={ +$1(a){var s=this.a +s.a1X(new A.Tq(a,s.$ti.h("Tq<1>")))}, +$S(){return this.a.$ti.h("~(1)")}} +A.aU8.prototype={ +$2(a,b){this.a.a1X(new A.a3k(a,b))}, +$S:33} +A.aU7.prototype={ +$0(){var s=this.a +s.b=null +s.c=!0 +s.aaa()}, +$S:0} +A.U9.prototype={ +ey(a,b,c){var s=this.b,r=this.a +if(s.c)r.fl(0) +else{s.a40() +r.fC(0,s.axc().oF(null).bq(0))}return!0}, +$ibhi:1} +A.KN.prototype={ +Ky(a){return this.aRj(a)}, +aRj(a){var s=0,r=A.r(t.Xu),q,p=this,o +var $async$Ky=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=p.aGU(a) +s=3 +return A.x(A.bSX(o),$async$Ky) +case 3:q=o +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Ky,r)}, +aGU(a){var s=A.aX2(a),r=s==null?null:s.gaff() +if(r===!0){s.toString +return s}return A.jn(A.lM(B.dR,"assets/"+this.b+A.bLR(a),B.a1,!1),0,null)}, +d_(a,b){return this.aUz(0,b)}, +aUz(a,b){var s=0,r=A.r(t.Xu),q,p=this,o,n,m +var $async$d_=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:o=p.a +s=!o.aR(0,b)?3:4 +break +case 3:n=o +m=b +s=5 +return A.x(p.Ky(b),$async$d_) +case 5:n.u(0,m,d) +case 4:o=o.i(0,b) +o.toString +q=o +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$d_,r)}, +LD(a){return this.aUH(a)}, +aUH(a){var s=0,r=A.r(t.N),q,p=this,o +var $async$LD=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=J +s=3 +return A.x(p.d_(0,a),$async$LD) +case 3:q=o.bBe(c) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$LD,r)}} +A.a_h.prototype={ +j(a){return"AudioPlayerException(\n\t"+A.j(this.b.d)+", \n\t"+A.j(this.a)}, +$ic4:1} +A.a_i.prototype={ +bR(a){var s=0,r=A.r(t.lG),q,p=this +var $async$bR=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q=p.r.a1D(new A.awR(p,1),t.lG) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$bR,r)}, +xB(){var s=0,r=A.r(t.ag),q,p=this,o +var $async$xB=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:o=A.be0() +o.b=p.c +s=3 +return A.x(o.wV(p.d),$async$xB) +case 3:s=4 +return A.x(o.wU(B.a5x),$async$xB) +case 4:q=o +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$xB,r)}} +A.awR.prototype={ +$0(){var s=0,r=A.r(t.lG),q,p=this,o,n,m,l,k +var $async$$0=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:m=p.a +l=m.b +s=l.length===0?3:4 +break +case 3:k=l +s=5 +return A.x(m.xB(),$async$$0) +case 5:k.push(b) +case 4:o=B.b.di(l,0) +m.a.u(0,o.c,o) +s=6 +return A.x(o.wW(p.b),$async$$0) +case 6:s=7 +return A.x(o.j2(0),$async$$0) +case 7:n=A.bn("subscription") +m=new A.awS(m,o,n) +n.b=o.gagm().oF(new A.awP(m)) +q=m +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$$0,r)}, +$S:436} +A.awS.prototype={ +$0(){var s=this.a +return s.r.a1D(new A.awQ(s,this.b,this.c),t.H)}, +$S:15} +A.awQ.prototype={ +$0(){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$$0=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:o=q.a +n=o.a.P(0,q.b.c) +s=n!=null?2:3 +break +case 2:J.bB2(q.c.bl()) +s=4 +return A.x(n.dM(0),$async$$0) +case 4:p=o.b +s=p.length>=o.f?5:7 +break +case 5:s=8 +return A.x(n.nA(0),$async$$0) +case 8:s=6 +break +case 7:p.push(n) +case 6:case 3:return A.p(null,r)}}) +return A.q($async$$0,r)}, +$S:15} +A.awP.prototype={ +$1(a){return this.a.$0()}, +$S:226} +A.xX.prototype={ +sx6(a,b){var s,r=this +if(r.z===B.qY)throw A.d(A.c1("AudioPlayer has been disposed")) +s=r.CW +if((s.c&4)===0)s.E(0,b) +r.z=r.y=b}, +gagm(){var s=this.ay,r=A.w(s).h("f8<1>") +return new A.u8(new A.awM(),new A.f8(s,r),r.h("u8"))}, +gaE0(){var s=this.ay,r=A.w(s).h("f8<1>"),q=r.h("u8") +return new A.tZ(new A.awE(),new A.u8(new A.awF(),new A.f8(s,r),q),q.h("tZ"))}, +gaWo(){var s=this.ay,r=A.w(s).h("f8<1>"),q=r.h("u8") +return new A.tZ(new A.awK(),new A.u8(new A.awL(),new A.f8(s,r),q),q.h("tZ"))}, +ask(a){var s=this,r=s.gaWo().Eu(new A.awG(s),new A.awH(s)) +s.ax!==$&&A.aj() +s.ax=r +r=s.gagm().Eu(new A.awI(s),new A.awJ()) +s.at!==$&&A.aj() +s.at=r +s.Hd() +r=s.Q +if(r!=null)r.t() +s.Q=new A.a42(s.gajV(s),new A.jp(null,null,t.Im))}, +Hd(){var s=0,r=A.r(t.H),q=1,p,o=this,n,m,l,k,j,i,h +var $async$Hd=A.t(function(a,b){if(a===1){p=b +s=q}while(true)switch(s){case 0:q=3 +l=o.a +k=o.c +s=6 +return A.x(l.qW(0,k),$async$Hd) +case 6:j=o.ay +j=l.a_g(k).Eu(j.gkJ(j),j.gaM_()) +o.ch!==$&&A.aj() +o.ch=j +o.as.fl(0) +q=1 +s=5 +break +case 3:q=2 +h=p +l=A.b2(h) +if(t.VI.b(l)){n=l +m=A.bC(h) +o.as.lq(n,m)}else throw h +s=5 +break +case 2:s=1 +break +case 5:return A.p(null,r) +case 1:return A.o(p,r)}}) +return A.q($async$Hd,r)}, +wp(a,b,c,d){return this.aXF(0,b,c,d)}, +aXF(a,b,c,d){var s=0,r=A.r(t.H),q=this +var $async$wp=A.t(function(e,f){if(e===1)return A.o(f,r) +while(true)switch(s){case 0:q.y=B.kL +s=2 +return A.x(q.Gl(c),$async$wp) +case 2:s=3 +return A.x(q.wW(d),$async$wp) +case 3:s=4 +return A.x(q.wV(b),$async$wp) +case 4:s=5 +return A.x(q.y0(),$async$wp) +case 5:return A.p(null,r)}}) +return A.q($async$wp,r)}, +Gl(a){return this.al4(a)}, +al4(a){var s=0,r=A.r(t.H),q,p=this +var $async$Gl=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=3 +return A.x(p.as.a,$async$Gl) +case 3:q=p.a.Gm(p.c,a) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Gl,r)}, +kC(a){var s=0,r=A.r(t.H),q=this,p +var $async$kC=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.y=B.kN +s=2 +return A.x(q.as.a,$async$kC) +case 2:s=q.y===B.kN?3:4 +break +case 3:s=5 +return A.x(q.a.nt(0,q.c),$async$kC) +case 5:q.sx6(0,B.kN) +p=q.Q +p=p==null?null:p.x7() +s=6 +return A.x(t.r.b(p)?p:A.cO(p,t.H),$async$kC) +case 6:case 4:return A.p(null,r)}}) +return A.q($async$kC,r)}, +dM(a){var s=0,r=A.r(t.H),q=this,p +var $async$dM=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.y=B.i8 +s=2 +return A.x(q.as.a,$async$dM) +case 2:s=q.y===B.i8?3:4 +break +case 3:s=5 +return A.x(q.a.AK(0,q.c),$async$dM) +case 5:q.sx6(0,B.i8) +p=q.Q +p=p==null?null:p.x7() +s=6 +return A.x(t.r.b(p)?p:A.cO(p,t.H),$async$dM) +case 6:case 4:return A.p(null,r)}}) +return A.q($async$dM,r)}, +j2(a){var s=0,r=A.r(t.H),q=this +var $async$j2=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.y=B.kL +s=2 +return A.x(q.y0(),$async$j2) +case 2:return A.p(null,r)}}) +return A.q($async$j2,r)}, +y0(){var s=0,r=A.r(t.H),q=this,p +var $async$y0=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:s=2 +return A.x(q.as.a,$async$y0) +case 2:s=q.y===B.kL?3:4 +break +case 3:s=5 +return A.x(q.a.Fl(0,q.c),$async$y0) +case 5:q.sx6(0,B.kL) +p=q.Q +if(p!=null){p.d=!0 +p.a74(null)}case 4:return A.p(null,r)}}) +return A.q($async$y0,r)}, +nA(a){var s=0,r=A.r(t.H),q=this +var $async$nA=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.dM(0),$async$nA) +case 2:s=3 +return A.x(q.a.zW(0,q.c),$async$nA) +case 3:q.d=null +return A.p(null,r)}}) +return A.q($async$nA,r)}, +wW(a){return this.alh(a)}, +alh(a){var s=0,r=A.r(t.H),q,p=this +var $async$wW=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=3 +return A.x(p.as.a,$async$wW) +case 3:q=p.a.Gs(p.c,a) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$wW,r)}, +wU(a){return this.al7(a)}, +al7(a){var s=0,r=A.r(t.H),q,p=this +var $async$wU=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p.x=a +s=3 +return A.x(p.as.a,$async$wU) +case 3:q=p.a.Go(p.c,a) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$wU,r)}, +wV(a){return this.ala(a)}, +ala(a){var s=0,r=A.r(t.H),q=this +var $async$wV=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.Ax(a.a,a.b),$async$wV) +case 2:return A.p(null,r)}}) +return A.q($async$wV,r)}, +xw(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$xw=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.as.a,$async$xw) +case 2:p=q.gaE0().pI(0,new A.awD()).aZj(0,B.U7) +o=t.H +s=3 +return A.x(A.f2(A.b([a.$0(),p],t.mo),o),$async$xw) +case 3:n=q.Q +n=n==null?null:n.fd(0) +s=4 +return A.x(t.r.b(n)?n:A.cO(n,o),$async$xw) +case 4:return A.p(null,r)}}) +return A.q($async$xw,r)}, +Ax(a,b){return this.alb(a,b)}, +alb(a,b){var s=0,r=A.r(t.H),q=this,p +var $async$Ax=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:q.d=new A.Dv(a,b) +p=A +s=3 +return A.x(q.b.LD(a),$async$Ax) +case 3:s=2 +return A.x(q.xw(new p.awN(q,d,b)),$async$Ax) +case 2:return A.p(null,r)}}) +return A.q($async$Ax,r)}, +Ae(a){var s=0,r=A.r(t.z2),q,p=this,o +var $async$Ae=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=3 +return A.x(p.as.a,$async$Ae) +case 3:s=4 +return A.x(p.a.FX(0,p.c),$async$Ae) +case 4:o=c +if(o==null){q=null +s=1 +break}q=A.dE(0,o) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Ae,r)}, +t(){var s=0,r=A.r(t.H),q=this,p,o +var $async$t=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:s=2 +return A.x(q.nA(0),$async$t) +case 2:q.y=B.qY +q.sx6(0,B.qY) +p=A.b([],t.gd) +o=q.Q +if(o!=null)p.push(o.t()) +o=q.CW +if((o.c&4)===0)p.push(o.T(0)) +o=q.at +o===$&&A.c() +p.push(o.bq(0)) +o=q.ax +o===$&&A.c() +p.push(o.bq(0)) +o=q.ch +o===$&&A.c() +p.push(o.bq(0)) +p.push(q.ay.T(0)) +q.d=null +s=3 +return A.x(A.f2(p,t.z),$async$t) +case 3:s=4 +return A.x(q.a.px(q.c),$async$t) +case 4:return A.p(null,r)}}) +return A.q($async$t,r)}} +A.awM.prototype={ +$1(a){return a.a===B.u0}, +$S:99} +A.awF.prototype={ +$1(a){return a.a===B.mr}, +$S:99} +A.awE.prototype={ +$1(a){var s=a.d +s.toString +return s}, +$S:99} +A.awL.prototype={ +$1(a){return a.a===B.u_}, +$S:99} +A.awK.prototype={ +$1(a){var s=a.c +s.toString +return s}, +$S:441} +A.awG.prototype={ +$1(a){A.j(this.a.d) +return null}, +$S:26} +A.awH.prototype={ +$2(a,b){var s="AudioPlayers Exception: "+new A.a_h(a,this.a).j(0) +A.xA("\x1b[31m"+(b!=null&&b.j(0).length!==0?s+("\n"+A.j(b)):s)+"\x1b[0m") +return null}, +$1(a){return this.$2(a,null)}, +$C:"$2", +$R:1, +$D(){return[null]}, +$S:145} +A.awI.prototype={ +$1(a){var s=0,r=A.r(t.H),q=this,p +var $async$$1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=q.a +p.sx6(0,B.a4S) +if(p.x===B.i9)p.d=null +p=p.Q +p=p==null?null:p.x7() +s=2 +return A.x(t.r.b(p)?p:A.cO(p,t.H),$async$$1) +case 2:return A.p(null,r)}}) +return A.q($async$$1,r)}, +$S:224} +A.awJ.prototype={ +$2(a,b){}, +$1(a){return this.$2(a,null)}, +$C:"$2", +$R:1, +$D(){return[null]}, +$S:443} +A.awD.prototype={ +$1(a){return a}, +$S:447} +A.awN.prototype={ +$0(){var s=this.a +return s.a.Ay(s.c,this.b,!0,this.c)}, +$S:15} +A.aOh.prototype={ +fd(a){var s=0,r=A.r(t.H),q=this,p +var $async$fd=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.a.$0(),$async$fd) +case 2:p=c +if(p!=null)q.b.E(0,p) +return A.p(null,r)}}) +return A.q($async$fd,r)}, +x7(){var s=0,r=A.r(t.H),q=this +var $async$x7=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:q.dM(0) +s=2 +return A.x(q.fd(0),$async$x7) +case 2:return A.p(null,r)}}) +return A.q($async$x7,r)}, +t(){var s=0,r=A.r(t.H),q=this +var $async$t=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:q.dM(0) +s=2 +return A.x(q.b.T(0),$async$t) +case 2:return A.p(null,r)}}) +return A.q($async$t,r)}} +A.a42.prototype={ +a74(a){var s=this +if(s.d){s.fd(0) +s.c=$.cN.Ga(s.gaFC())}}, +dM(a){var s +this.d=!1 +s=this.c +if(s!=null)$.cN.abJ(s)}} +A.aTg.prototype={} +A.Dv.prototype={ +j(a){return"AssetSource(path: "+this.a+", mimeType: "+A.j(this.b)+")"}} +A.xW.prototype={ +W(){return"AudioEventType."+this.b}} +A.hI.prototype={ +k(a,b){var s,r=this +if(b==null)return!1 +if(r!==b)s=b instanceof A.hI&&A.J(r)===A.J(b)&&r.a===b.a&&J.f(r.b,b.b)&&r.c==b.c&&r.d==b.d +else s=!0 +return s}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){var s=this +return"AudioEvent(eventType: "+s.a.j(0)+", duration: "+A.j(s.b)+", logMessage: "+A.j(s.c)+", isPrepared: "+A.j(s.d)+")"}} +A.aNO.prototype={ +W(){return"PlayerMode."+this.b}} +A.w1.prototype={ +W(){return"PlayerState."+this.b}} +A.Qs.prototype={ +W(){return"ReleaseMode."+this.b}} +A.awT.prototype={ +qW(a,b){return this.aP2(0,b)}, +aP2(a,b){var s=0,r=A.r(t.H),q=this +var $async$qW=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:s=2 +return A.x(q.ao4(0,b),$async$qW) +case 2:q.aP8(b) +return A.p(null,r)}}) +return A.q($async$qW,r)}, +px(a){return this.aQ1(a)}, +aQ1(a){var s=0,r=A.r(t.H),q=this,p +var $async$px=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.ao5(a),$async$px) +case 2:p=q.Wj$ +if(p.aR(0,a))p.P(0,a) +return A.p(null,r)}}) +return A.q($async$px,r)}} +A.a6T.prototype={ +qW(a,b){return this.xt(0,"create",b)}, +px(a){return this.xt(0,"dispose",a)}, +FX(a,b){return this.PE("getCurrentPosition",b,t.S)}, +nt(a,b){return this.xt(0,"pause",b)}, +zW(a,b){return this.xt(0,"release",b)}, +Fl(a,b){return this.xt(0,"resume",b)}, +Gm(a,b){return this.uR(0,"setPlayerMode",a,A.b3(["playerMode",b.W()],t.N,t.z))}, +Go(a,b){return this.uR(0,"setReleaseMode",a,A.b3(["releaseMode",b.W()],t.N,t.z))}, +Ay(a,b,c,d){return this.uR(0,"setSourceUrl",a,A.b3(["url",b,"isLocal",!0,"mimeType",d],t.N,t.z))}, +Gs(a,b){return this.uR(0,"setVolume",a,A.b3(["volume",b],t.N,t.z))}, +AK(a,b){return this.xt(0,"stop",b)}, +uR(a,b,c,d){return this.aum(0,b,c,d)}, +xt(a,b,c){return this.uR(0,b,c,B.i2)}, +aum(a,b,c,d){var s=0,r=A.r(t.H),q,p +var $async$uR=A.t(function(e,f){if(e===1)return A.o(f,r) +while(true)switch(s){case 0:p=A.D(t.N,t.z) +p.u(0,"playerId",c) +p.I(0,d) +q=A.bgN(B.D1,b,p) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$uR,r)}, +PE(a,b,c){return this.av0(a,b,c,c.h("0?"))}, +av0(a,b,c,d){var s=0,r=A.r(d),q,p +var $async$PE=A.t(function(e,f){if(e===1)return A.o(f,r) +while(true)switch(s){case 0:p=A.D(t.N,t.z) +p.u(0,"playerId",b) +p.I(0,B.i2) +q=A.bgO(B.D1,a,p,c) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$PE,r)}} +A.aDJ.prototype={ +aP8(a){var s=new A.aDI("xyz.luan/audioplayers/events/"+a).aYm() +this.Wj$.u(0,a,new A.tZ(new A.aDK(),s,A.w(s).h("tZ")))}, +a_g(a){var s=this.Wj$.i(0,a) +s.toString +return s}} +A.aDK.prototype={ +$1(a){var s,r,q,p=null,o="value" +t.f.a(a) +s=J.al(a) +r=A.eE(s.i(a,"event")) +switch(r){case"audio.onDuration":q=A.lN(s.i(a,o)) +return new A.hI(B.mq,q!=null?A.dE(0,q):B.G,p,p) +case"audio.onComplete":return B.u1 +case"audio.onSeekComplete":return B.u2 +case"audio.onPrepared":return new A.hI(B.mr,p,p,A.qx(s.i(a,o))) +case"audio.onLog":return new A.hI(B.u_,p,A.eE(s.i(a,o)),p) +default:throw A.d(A.d_("Event Method does not exist "+A.j(r)))}}, +$S:461} +A.afy.prototype={} +A.afz.prototype={} +A.awU.prototype={} +A.aG6.prototype={} +A.aXw.prototype={ +qW(a,b){return this.aP3(0,b)}, +aP3(a,b){var s=0,r=A.r(t.H),q=this +var $async$qW=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:q.a.u(0,b,new A.aeI(new A.jp(null,null,t.NV),B.i9)) +return A.p(null,r)}}) +return A.q($async$qW,r)}, +oU(a){var s=this.a +if(s.i(0,a)!=null){s=s.i(0,a) +s.toString}else s=A.X(A.aNF("WebAudioError",null,"Player has not yet been created or has already been disposed.",null)) +return s}, +FX(a,b){return this.ajW(0,b)}, +ajW(a,b){var s=0,r=A.r(t.bo),q,p=this,o,n +var $async$FX=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:o=p.oU(b).x +n=o==null?null:o.currentTime +if(n==null){q=null +s=1 +break}q=B.c.aw(n*1000) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$FX,r)}, +nt(a,b){return this.aXu(0,b)}, +aXu(a,b){var s=0,r=A.r(t.H),q=this +var $async$nt=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:q.oU(b).kC(0) +return A.p(null,r)}}) +return A.q($async$nt,r)}, +zW(a,b){return this.aYr(0,b)}, +aYr(a,b){var s=0,r=A.r(t.H),q=this +var $async$zW=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:q.oU(b).nA(0) +return A.p(null,r)}}) +return A.q($async$zW,r)}, +Fl(a,b){return this.aYX(0,b)}, +aYX(a,b){var s=0,r=A.r(t.H),q=this +var $async$Fl=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:s=2 +return A.x(q.oU(b).j2(0),$async$Fl) +case 2:return A.p(null,r)}}) +return A.q($async$Fl,r)}, +Gm(a,b){return this.al5(a,b)}, +al5(a,b){var s=0,r=A.r(t.H) +var $async$Gm=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:return A.p(null,r)}}) +return A.q($async$Gm,r)}, +Go(a,b){return this.al8(a,b)}, +al8(a,b){var s=0,r=A.r(t.H),q=this,p +var $async$Go=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:p=q.oU(a) +p.f=b +p=p.x +if(p!=null)p.loop=b===B.ra +return A.p(null,r)}}) +return A.q($async$Go,r)}, +Ay(a,b,c,d){return this.alc(a,b,!0,d)}, +alc(a,b,c,d){var s=0,r=A.r(t.H),q=this +var $async$Ay=A.t(function(e,f){if(e===1)return A.o(f,r) +while(true)switch(s){case 0:s=2 +return A.x(q.oU(a).Gq(b),$async$Ay) +case 2:return A.p(null,r)}}) +return A.q($async$Ay,r)}, +Gs(a,b){return this.ali(a,b)}, +ali(a,b){var s=0,r=A.r(t.H),q=this,p +var $async$Gs=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:p=q.oU(a) +p.d=b +p=p.x +if(p!=null)p.volume=b +return A.p(null,r)}}) +return A.q($async$Gs,r)}, +AK(a,b){return this.amq(0,b)}, +amq(a,b){var s=0,r=A.r(t.H),q=this +var $async$AK=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:q.oU(b).dM(0) +return A.p(null,r)}}) +return A.q($async$AK,r)}, +a_g(a){var s=this.oU(a).b +return new A.f8(s,A.w(s).h("f8<1>"))}, +px(a){return this.aQ2(a)}, +aQ2(a){var s=0,r=A.r(t.H),q=this +var $async$px=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.oU(a).t(),$async$px) +case 2:q.a.P(0,a) +return A.p(null,r)}}) +return A.q($async$px,r)}} +A.bha.prototype={} +A.aeI.prototype={ +Gq(a){return this.ale(a)}, +ale(a){var s=0,r=A.r(t.H),q,p=this +var $async$Gq=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:if(p.r===a){p.b.E(0,B.u3) +s=1 +break}p.r=a +p.nA(0) +p.ahw() +s=p.w?3:4 +break +case 3:s=5 +return A.x(p.j2(0),$async$Gq) +case 5:case 4:case 1:return A.p(q,r)}}) +return A.q($async$Gq,r)}, +ahw(){var s,r,q,p,o=this,n=o.r +if(n==null)return +s=self +r=o.x=s.document.createElement("audio") +r.preload="auto" +r.src=n +r.crossOrigin="anonymous" +r.loop=o.f===B.ra +r.volume=o.d +r.playbackRate=1 +o.aHP(r) +q=new s.AudioContext() +s=o.x +s.toString +p=q.createMediaElementSource(s) +s=q.createStereoPanner() +o.y=s +s.toString +p.connect(s) +s=o.y +if(s!=null)s.connect(q.destination) +r.load()}, +aHP(a){var s=this,r=t.Pl.c +s.Q=A.V7(a,"loadeddata",new A.aXM(s,a),!1,r) +s.as=A.V7(a,"play",new A.aXN(s,a),!1,r) +s.at=A.V7(a,"seeked",new A.aXO(s),!1,r) +s.z=A.V7(a,"ended",new A.aXP(s),!1,r) +s.ax=A.V7(a,"error",new A.aXQ(s,a),!1,r)}, +nA(a){var s,r=this +r.dM(0) +s=r.x +if(s!=null)s.src="" +s=r.x +if(s!=null)s.remove() +r.y=r.x=null +s=r.Q +if(s!=null)s.bq(0) +r.Q=null +s=r.z +if(s!=null)s.bq(0) +r.z=null +s=r.at +if(s!=null)s.bq(0) +r.at=null +s=r.as +if(s!=null)s.bq(0) +r.as=null +s=r.ax +if(s!=null)s.bq(0) +r.ax=null}, +x3(a,b){return this.amb(0,b)}, +amb(a,b){var s=0,r=A.r(t.H),q,p=this,o +var $async$x3=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:p.w=!0 +if(p.r==null){s=1 +break}if(p.x==null)p.ahw() +o=p.x +if(o!=null)o.currentTime=b +o=p.x +o=o==null?null:A.ka(o.play(),t.X) +s=3 +return A.x(t.Rt.b(o)?o:A.cO(o,t.X),$async$x3) +case 3:case 1:return A.p(q,r)}}) +return A.q($async$x3,r)}, +j2(a){var s=0,r=A.r(t.H),q=this,p +var $async$j2=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=q.c +s=2 +return A.x(q.x3(0,p==null?0:p),$async$j2) +case 2:return A.p(null,r)}}) +return A.q($async$j2,r)}, +kC(a){var s=this.x,r=s==null +this.c=A.bhN(r?null:s.currentTime) +this.w=!1 +if(!r)s.pause()}, +dM(a){var s +this.kC(0) +this.c=0 +s=this.x +if(s!=null)s.currentTime=0}, +t(){var s=0,r=A.r(t.H),q=this +var $async$t=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:q.nA(0) +q.b.T(0) +return A.p(null,r)}}) +return A.q($async$t,r)}} +A.aXM.prototype={ +$1(a){var s=this.a.b +s.E(0,B.u3) +s.E(0,new A.hI(B.mq,A.bol(this.b.duration),null,null))}, +$S:41} +A.aXN.prototype={ +$1(a){this.a.b.E(0,new A.hI(B.mq,A.bol(this.b.duration),null,null))}, +$S:41} +A.aXO.prototype={ +$1(a){this.a.b.E(0,B.u2)}, +$S:41} +A.aXP.prototype={ +$1(a){var s=this.a +if(s.f===B.i9)s.nA(0) +else s.dM(0) +s.b.E(0,B.u1)}, +$S:41} +A.aXQ.prototype={ +$1(a){var s,r=null,q=this.b,p=q.error!=null?"Failed to set source. For troubleshooting, see https://github.com/bluefireteam/audioplayers/blob/main/troubleshooting.md":"Unknown web error. See details.",o=q.error +o=A.j(o==null?r:J.ai(o)) +s=q.error +s=A.j(s==null?r:s.message) +q=q.error +this.a.b.J7(new A.AP("WebAudioError",p,o+": "+s+" (Code: "+A.j(q==null?r:q.code)+")",r))}, +$S:41} +A.hz.prototype={ +gar(a){return new A.wC(this.a,0,0)}, +ga9(a){var s=this.a,r=s.length +return r===0?A.X(A.ad("No element")):B.d.am(s,0,new A.p5(s,r,0,176).oJ())}, +ga_(a){var s=this.a,r=s.length +return r===0?A.X(A.ad("No element")):B.d.c5(s,new A.KQ(s,0,r,176).oJ())}, +gaA(a){return this.a.length===0}, +gcT(a){return this.a.length!==0}, +gF(a){var s,r,q=this.a,p=q.length +if(p===0)return 0 +s=new A.p5(q,p,0,176) +for(r=0;s.oJ()>=0;)++r +return r}, +cA(a,b){var s,r,q,p,o,n +A.en(b,"index") +s=this.a +r=s.length +if(r!==0){q=new A.p5(s,r,0,176) +for(p=0,o=0;n=q.oJ(),n>=0;o=n){if(p===b)return B.d.am(s,o,n);++p}}else p=0 +throw A.d(A.NS(b,this,"index",null,p))}, +G(a,b){var s +if(typeof b!="string")return!1 +s=b.length +if(s===0)return!1 +if(new A.p5(b,s,0,176).oJ()!==s)return!1 +s=this.a +return A.bPu(s,b,0,s.length)>=0}, +Iw(a,b,c){var s,r +if(a===0||b===this.a.length)return b +if(c==null){s=this.a +c=new A.p5(s,s.length,b,176)}do{r=c.oJ() +if(r<0)break +if(--a,a>0){b=r +continue}else{b=r +break}}while(!0) +return b}, +fz(a,b){A.en(b,"count") +return this.a8r(b)}, +a8r(a){var s=this.Iw(a,0,null),r=this.a +if(s===r.length)return B.cs +return new A.hz(B.d.c5(r,s))}, +bE(a,b){A.en(b,"count") +return this.a8R(b)}, +a8R(a){var s=this.Iw(a,0,null),r=this.a +if(s===r.length)return this +return new A.hz(B.d.am(r,0,s))}, +nO(a,b,c){var s,r,q,p,o=this +A.en(b,"start") +if(c==null)return o.a8r(b) +if(c0){s=j.c +for(r=j.a,q=r.length,p=176;s0;s=q){q=r.oJ() +if(q<0)break;--a}p.b=s +p.c=b +p.d=null +return a===0}} +A.p5.prototype={ +oJ(){var s,r,q,p,o,n,m,l=this,k=u.S +for(s=l.b,r=l.a;q=l.c,qs;){p=k.c=q-1 +o=r.charCodeAt(p) +if((o&64512)!==56320){p=k.d=j.charCodeAt(k.d&240|A.Dc(o)) +if(((p>=208?k.d=A.bcF(r,s,k.c,p):p)&1)===0)return q +continue}if(p>=s){n=r.charCodeAt(p-1) +if((n&64512)===55296){m=A.qA(n,o) +p=--k.c}else m=2}else m=2 +l=k.d=j.charCodeAt(k.d&240|m) +if(((l>=208?k.d=A.bcF(r,s,p,l):l)&1)===0)return q}p=k.d=j.charCodeAt(k.d&240|15) +if(((p>=208?k.d=A.bcF(r,s,q,p):p)&1)===0)return k.c +return-1}} +A.a21.prototype={ +eN(a,b){return J.f(a,b)}, +f6(a,b){return J.a1(b)}} +A.O2.prototype={ +eN(a,b){var s,r,q,p +if(a===b)return!0 +s=J.az(a) +r=J.az(b) +for(q=this.a;!0;){p=s.H() +if(p!==r.H())return!1 +if(!p)return!0 +if(!q.eN(s.ga1(s),r.ga1(r)))return!1}}, +f6(a,b){var s,r,q +for(s=J.az(b),r=this.a,q=0;s.H();){q=q+r.f6(0,s.ga1(s))&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}} +A.A3.prototype={ +eN(a,b){var s,r,q,p,o +if(a===b)return!0 +s=J.al(a) +r=s.gF(a) +q=J.al(b) +if(r!==q.gF(b))return!1 +for(p=this.a,o=0;o>>0)&2147483647 +q^=q>>>6}q=q+(q<<3>>>0)&2147483647 +q^=q>>>11 +return q+(q<<15>>>0)&2147483647}} +A.xp.prototype={ +eN(a,b){var s,r,q,p,o +if(a===b)return!0 +s=this.a +r=A.jF(s.gaR5(),s.gaT5(s),s.gaUf(),A.w(this).h("xp.E"),t.S) +for(s=J.az(a),q=0;s.H();){p=s.ga1(s) +o=r.i(0,p) +r.u(0,p,(o==null?0:o)+1);++q}for(s=J.az(b);s.H();){p=s.ga1(s) +o=r.i(0,p) +if(o==null||o===0)return!1 +r.u(0,p,o-1);--q}return q===0}, +f6(a,b){var s,r,q +for(s=J.az(b),r=this.a,q=0;s.H();)q=q+r.f6(0,s.ga1(s))&2147483647 +q=q+(q<<3>>>0)&2147483647 +q^=q>>>11 +return q+(q<<15>>>0)&2147483647}} +A.Ix.prototype={} +A.HA.prototype={} +A.Js.prototype={ +gL(a){var s=this.a +return 3*s.a.f6(0,this.b)+7*s.b.f6(0,this.c)&2147483647}, +k(a,b){var s +if(b==null)return!1 +if(b instanceof A.Js){s=this.a +s=s.a.eN(this.b,b.b)&&s.b.eN(this.c,b.c)}else s=!1 +return s}} +A.OD.prototype={ +eN(a,b){var s,r,q,p,o,n,m +if(a===b)return!0 +s=J.al(a) +r=J.al(b) +if(s.gF(a)!==r.gF(b))return!1 +q=A.jF(null,null,null,t.PJ,t.S) +for(p=J.az(s.gdv(a));p.H();){o=p.ga1(p) +n=new A.Js(this,o,s.i(a,o)) +m=q.i(0,n) +q.u(0,n,(m==null?0:m)+1)}for(s=J.az(r.gdv(b));s.H();){o=s.ga1(s) +n=new A.Js(this,o,r.i(b,o)) +m=q.i(0,n) +if(m==null||m===0)return!1 +q.u(0,n,m-1)}return!0}, +f6(a,b){var s,r,q,p,o,n,m,l,k +for(s=J.bS(b),r=J.az(s.gdv(b)),q=this.a,p=this.b,o=this.$ti.y[1],n=0;r.H();){m=r.ga1(r) +l=q.f6(0,m) +k=s.i(b,m) +n=n+3*l+7*p.f6(0,k==null?o.a(k):k)&2147483647}n=n+(n<<3>>>0)&2147483647 +n^=n>>>11 +return n+(n<<15>>>0)&2147483647}} +A.M8.prototype={ +eN(a,b){var s,r=this,q=t.Ro +if(q.b(a))return q.b(b)&&new A.HA(r,t.n5).eN(a,b) +q=t.f +if(q.b(a))return q.b(b)&&new A.OD(r,r,t.Dx).eN(a,b) +if(!r.b){q=t.j +if(q.b(a))return q.b(b)&&new A.A3(r,t.wO).eN(a,b) +q=t.JY +if(q.b(a))return q.b(b)&&new A.O2(r,t.K9).eN(a,b)}else{q=t.JY +if(q.b(a)){s=t.j +if(s.b(a)!==s.b(b))return!1 +return q.b(b)&&new A.Ix(r,t.N2).eN(a,b)}}return J.f(a,b)}, +f6(a,b){var s=this +if(t.Ro.b(b))return new A.HA(s,t.n5).f6(0,b) +if(t.f.b(b))return new A.OD(s,s,t.Dx).f6(0,b) +if(!s.b){if(t.j.b(b))return new A.A3(s,t.wO).f6(0,b) +if(t.JY.b(b))return new A.O2(s,t.K9).f6(0,b)}else if(t.JY.b(b))return new A.Ix(s,t.N2).f6(0,b) +return J.a1(b)}, +aUg(a){return!0}} +A.a4O.prototype={ +Hk(a){var s=this.b[a] +if(s==null){this.$ti.c.a(null) +s=null}return s}, +gF(a){return this.c}, +j(a){var s=this.b +return A.bnl(A.fj(s,0,A.fI(this.c,"count",t.S),A.a5(s).c),"(",")")}, +aGg(){var s=this,r=s.c-1,q=s.Hk(r) +s.b[r]=null +s.c=r +return q}, +atV(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=b*2+2 +for(s=j.a,r=j.$ti.c;q=j.c,i0){j.b[b]=k +b=p}}j.b[b]=a}} +A.jR.prototype={ +E(a,b){this.S2(0,b)}, +I(a,b){var s,r,q,p,o,n,m=this +if(t.j.b(b)){s=J.bo(b) +r=m.gF(0) +q=r+s +if(q>=J.bo(m.a)){m.a75(q) +J.avK(m.a,r,q,b,0) +m.sdV(m.gdV()+s)}else{p=J.bo(m.a)-m.gdV() +q=m.a +o=J.cV(q) +if(s").ak(b).h("Uc<1,2>"))}, +j(a){return A.pw(this,"{","}")}, +eQ(a){var s,r=this +if(r.gik(r)===r.gdV())throw A.d(A.ad("No element")) +r.sdV((r.gdV()-1&J.bo(r.a)-1)>>>0) +s=J.bG(r.a,r.gdV()) +if(s==null)s=A.w(r).h("jR.E").a(s) +J.kc(r.a,r.gdV(),null) +return s}, +gF(a){var s=this +return(s.gdV()-s.gik(s)&J.bo(s.a)-1)>>>0}, +sF(a,b){var s,r,q,p,o=this +if(b<0)throw A.d(A.w6("Length "+b+" may not be negative.")) +if(b>o.gF(0)&&!A.w(o).h("jR.E").b(null))throw A.d(A.af("The length can only be increased when the element type is nullable, but the current element type is `"+A.ay(A.w(o).h("jR.E")).j(0)+"`.")) +s=b-o.gF(0) +if(s>=0){if(J.bo(o.a)<=b)o.a75(b) +o.sdV((o.gdV()+s&J.bo(o.a)-1)>>>0) +return}r=o.gdV()+s +q=o.a +if(r>=0)J.bdH(q,r,o.gdV(),null) +else{r+=J.bo(q) +J.bdH(o.a,0,o.gdV(),null) +q=o.a +p=J.al(q) +p.kU(q,r,p.gF(q),null)}o.sdV(r)}, +i(a,b){var s,r=this +if(b<0||b>=r.gF(0))throw A.d(A.w6("Index "+b+" must be in the range [0.."+r.gF(0)+").")) +s=J.bG(r.a,(r.gik(r)+b&J.bo(r.a)-1)>>>0) +return s==null?A.w(r).h("jR.E").a(s):s}, +u(a,b,c){var s=this +if(b<0||b>=s.gF(0))throw A.d(A.w6("Index "+b+" must be in the range [0.."+s.gF(0)+").")) +J.kc(s.a,(s.gik(s)+b&J.bo(s.a)-1)>>>0,c)}, +S2(a,b){var s=this +J.kc(s.a,s.gdV(),b) +s.sdV((s.gdV()+1&J.bo(s.a)-1)>>>0) +if(s.gik(s)===s.gdV())s.aFT()}, +aFT(){var s=this,r=A.bc(J.bo(s.a)*2,null,!1,A.w(s).h("jR.E?")),q=J.bo(s.a)-s.gik(s) +B.b.c3(r,0,q,s.a,s.gik(s)) +B.b.c3(r,q,q+s.gik(s),s.a,0) +s.sik(0,0) +s.sdV(J.bo(s.a)) +s.a=r}, +aFU(a){var s,r,q=this +if(q.gik(q)<=q.gdV()){s=q.gdV()-q.gik(q) +B.b.c3(a,0,s,q.a,q.gik(q)) +return s}else{r=J.bo(q.a)-q.gik(q) +B.b.c3(a,0,r,q.a,q.gik(q)) +B.b.c3(a,r,r+q.gdV(),q.a,0) +return q.gdV()+r}}, +a75(a){var s=this,r=A.bc(A.bIS(a+B.f.dU(a,1)),null,!1,A.w(s).h("jR.E?")) +s.sdV(s.aFU(r)) +s.a=r +s.sik(0,0)}, +$iat:1, +$iz:1, +$iH:1, +gik(a){return this.b}, +gdV(){return this.c}, +sik(a,b){return this.b=b}, +sdV(a){return this.c=a}} +A.Uc.prototype={ +gik(a){var s=this.d +return s.gik(s)}, +sik(a,b){this.d.sik(0,b)}, +gdV(){return this.d.gdV()}, +sdV(a){this.d.sdV(a)}} +A.Wi.prototype={} +A.UE.prototype={ +fk(a,b){return B.b.fk(this.a,b)}, +eq(a,b){var s=this.a +return new A.hk(s,A.a5(s).h("@<1>").ak(b).h("hk<1,2>"))}, +G(a,b){return B.b.G(this.a,b)}, +cA(a,b){return this.a[b]}, +ga9(a){return B.b.ga9(this.a)}, +al(a,b){return B.b.al(this.a,b)}, +gaA(a){return this.a.length===0}, +gcT(a){return this.a.length!==0}, +gar(a){var s=this.a +return new J.cA(s,s.length,A.a5(s).h("cA<1>"))}, +cj(a,b){return B.b.cj(this.a,b)}, +mq(a){return this.cj(0,"")}, +ga_(a){return B.b.ga_(this.a)}, +gF(a){return this.a.length}, +jo(a,b,c){var s=this.a +return new A.W(s,b,A.a5(s).h("@<1>").ak(c).h("W<1,2>"))}, +fz(a,b){var s=this.a +return A.fj(s,b,null,A.a5(s).c)}, +bE(a,b){var s=this.a +return A.fj(s,0,A.fI(b,"count",t.S),A.a5(s).c)}, +ig(a,b){var s=this.a,r=A.a5(s) +return b?A.b(s.slice(0),r):J.na(s.slice(0),r.c)}, +eT(a){return this.ig(0,!0)}, +kD(a){var s=this.a +return A.FS(s,A.a5(s).c)}, +mz(a,b){var s=this.a +return new A.bg(s,b,A.a5(s).h("bg<1>"))}, +j(a){return A.pw(this.a,"[","]")}, +$iz:1} +A.Et.prototype={ +i(a,b){return this.a[b]}, +u(a,b,c){this.a[b]=c}, +X(a,b){return B.b.X(this.a,b)}, +E(a,b){this.a.push(b)}, +I(a,b){B.b.I(this.a,b)}, +eq(a,b){var s=this.a +return new A.hk(s,A.a5(s).h("@<1>").ak(b).h("hk<1,2>"))}, +hc(a,b,c){B.b.hc(this.a,b,c)}, +hO(a,b,c){B.b.hO(this.a,b,c)}, +sa_(a,b){var s=this.a.length +if(s===0)throw A.d(A.NS(0,this,null,null,null)) +this.u(0,s-1,b)}, +P(a,b){return B.b.P(this.a,b)}, +di(a,b){return B.b.di(this.a,b)}, +eQ(a){return this.a.pop()}, +hX(a,b,c){B.b.hX(this.a,b,c)}, +j1(a,b,c,d){B.b.j1(this.a,b,c,d)}, +gZe(a){var s=this.a +return new A.cz(s,A.a5(s).h("cz<1>"))}, +cI(a,b,c){return B.b.cI(this.a,b,c)}, +jE(a,b){return this.cI(0,b,null)}, +$iat:1, +$iH:1} +A.yN.prototype={ +k(a,b){var s,r,q,p,o +if(b==null)return!1 +if(b instanceof A.yN){s=this.a +r=b.a +q=s.length +if(q!==r.length)return!1 +for(p=0,o=0;o>>0)-s,q=0;q1125899906842623)throw A.d(A.af("Hashing is unsupported for messages with more than 2^53 bits.")) +p=r*8 +o=l.b +l.I(0,new Uint8Array(8)) +n=A.kw(l.a.buffer,0,null) +n.setUint32(o,B.f.cN(p,4294967296),!1) +n.setUint32(o+4,p>>>0,!1)}} +A.apw.prototype={ +kh(a){var s=new Uint32Array(A.eG(A.b([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],t.t))),r=new Uint32Array(64),q=new Uint8Array(0) +return new A.U5(new A.apx(s,r,a,new Uint32Array(16),new A.Ti(q,0)))}} +A.b6B.prototype={ +aZY(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c +for(s=this.x,r=0;r<16;++r)s[r]=a[r] +for(r=16;r<64;++r){q=s[r-2] +p=s[r-7] +o=s[r-15] +s[r]=((((q>>>17|q<<15)^(q>>>19|q<<13)^q>>>10)>>>0)+p>>>0)+((((o>>>7|o<<25)^(o>>>18|o<<14)^o>>>3)>>>0)+s[r-16]>>>0)>>>0}q=this.w +n=q[0] +m=q[1] +l=q[2] +k=q[3] +j=q[4] +i=q[5] +h=q[6] +g=q[7] +for(f=n,r=0;r<64;++r,g=h,h=i,i=j,j=d,k=l,l=m,m=f,f=c){e=(g+(((j>>>6|j<<26)^(j>>>11|j<<21)^(j>>>25|j<<7))>>>0)>>>0)+(((j&i^~j&h)>>>0)+(B.Xk[r]+s[r]>>>0)>>>0)>>>0 +d=k+e>>>0 +c=e+((((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))>>>0)+((f&m^f&l^m&l)>>>0)>>>0)>>>0}q[0]=f+n>>>0 +q[1]=m+q[1]>>>0 +q[2]=l+q[2]>>>0 +q[3]=k+q[3]>>>0 +q[4]=j+q[4]>>>0 +q[5]=i+q[5]>>>0 +q[6]=h+q[6]>>>0 +q[7]=g+q[7]>>>0}} +A.apx.prototype={} +A.aAF.prototype={} +A.a0i.prototype={} +A.HK.prototype={ +W(){return"SizeCategory."+this.b}} +A.aAA.prototype={ +iz(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$iz=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=A +o=J +s=2 +return A.x(A.abv(),$async$iz) +case 2:q.a=p.eE(o.bG(c.a,"bookmarked_chapter")) +return A.p(null,r)}}) +return A.q($async$iz,r)}, +v4(a,b){return this.aHK(a,b)}, +aHK(a,b){var s=0,r=A.r(t.H),q,p +var $async$v4=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:s=2 +return A.x(A.abv(),$async$v4) +case 2:q=d +p="flutter."+a +s=b==null?3:5 +break +case 3:J.up(q.a,a) +s=6 +return A.x($.bdr().P(0,p),$async$v4) +case 6:s=4 +break +case 5:A.qG(b,"value") +J.kc(q.a,a,b) +s=7 +return A.x($.bdr().uz("String",p,b),$async$v4) +case 7:case 4:return A.p(null,r)}}) +return A.q($async$v4,r)}} +A.nl.prototype={ +uw(){var s=this.d +return s==null?this.b:s}, +j(a){return this.a+" - "+A.j(this.uw())}} +A.Wh.prototype={ +acD(a,b){return this.f.$3(this,b,a)}} +A.Op.prototype={ +acD(a,b){return new A.FV(this,b,a,this.$ti.h("FV<1>"))}} +A.R.prototype={ +Jd(a,b){var s=this.a,r=a.a +if(s.aR(0,r))return b.a(s.i(0,r).uw()) +else{s.u(0,r,a) +return a.uw()}}, +hS(a,b){var s=t.V +return this.Jd(A.bgk(a,b,new A.aAz(),null,null,s),s)}, +abt(a,b){var s=t.w +return this.Jd(A.bgk(a,!0,new A.aAx(),null,null,s),s)}, +ac0(a,b){var s=t.G +return this.Jd(A.bgk(a,b,new A.aAy(),null,null,s),s)}, +tX(a,b,c,d){return this.Jd(new A.Op(c,a,b,null,null,d.h("Op<0>")),d)}} +A.aAz.prototype={ +$3(a,b,c){return new A.AD(a,b,c)}, +$C:"$3", +$R:3, +$S:473} +A.aAx.prototype={ +$3(a,b,c){return new A.y4(a,b,c)}, +$C:"$3", +$R:3, +$S:476} +A.aAy.prototype={ +$3(a,b,c){return new A.yq(a,b,c)}, +$C:"$3", +$R:3, +$S:478} +A.eM.prototype={ +aP(a,b,c,d,e){var s=t.N +this.b.push(new A.DM(c,b,new A.R(A.D(s,t.bc),A.D(s,t.vR)),d,e,!1,this)) +return this}} +A.DM.prototype={ +gLe(a){return A.ea(this.r.a+"_"+this.b," ","_")}} +A.ZI.prototype={ +ab(a){var s,r,q=null,p=A.bd3(a),o=A.b([],t.p) +for(s=this.d.c.b,s=s.ghw(s),s=s.gar(s);s.H();){r=s.ga1(s) +o.push(new A.cu(B.fd,A.n8(A.dI(r.a,q,q,q,q,q,q),new A.avU(r,a),q),q))}return A.aSK(A.hm(o,B.ah,B.ac,B.ak),this.c,B.ai_,q,!1,"Actions",q,p)}} +A.avU.prototype={ +$0(){return this.a.b.$1(this.b)}, +$S:0} +A.kl.prototype={ +ab(a){var s=null,r=A.cj(a,s,t.l).w.a.a>768?24:48 +return A.bn1(s,A.jx(r,r),B.B,B.B,A.bfi(this.c,s,s),r,this.d,B.X,B.B,r,this.e)}} +A.a2e.prototype={ +ab(a){var s,r,q,p,o=this,n=null,m=A.cj(a,n,t.l).w,l=o.d,k=o.e,j=l.c,i=j==null,h=!i&&k===B.eH +if(h)s=i?l.d:j +else s=l.d +r=l.x +q=h?r.b:r.a +p=h?r.a:r.b +m=m.acp(l.f,s,new A.Q(q,p),B.X,s) +j=m.w +return new A.cu(new A.aS(20+j.a,20+j.b,20+j.c,20),A.a3B(new A.a2c(A.Ak(A.dD(n,o.c,B.y,A.am(a).go,n,n,n,n,n,n),m),l,k,o.f,n)),n)}} +A.Md.prototype={ +b5(){return new A.ahO(new A.cK(null,t.am),B.p)}} +A.ahO.prototype={ +aHG(a){this.aK(new A.b0W(this,a))}, +ab(a){var s=this,r=null,q=A.bd3(a),p=s.a.c,o=A.b([B.aiC,new A.Lp(s.e,new A.b0X(s),B.af3,B.X,B.ai1)],t.p) +if(s.e)o.push(new A.M4(s.d,r)) +else o.push(B.a5Y) +return A.aSK(new A.cu(B.dJ,A.hm(o,B.ah,B.i1,B.dj),r),p,B.ai2,r,!1,"Properties",r,q)}} +A.b0W.prototype={ +$0(){var s=this.a,r=this.b +s.e=r +s=s.c +s.toString +s=A.r4(s,!1) +s.ZH(r?$.biS():null)}, +$S:0} +A.b0X.prototype={ +$1(a){a.toString +return this.a.aHG(a)}, +$S:223} +A.ahP.prototype={ +ab(a){var s=null,r=A.r4(a,!0),q=r.d.a!=null,p=q?r.gaZ5(r):s +q=q?r.gaZx():s +return A.jU(A.b([new A.kl(B.W9,p,"Orientation",B.ai8),new A.kl(B.W6,q,"Device frame",B.ai6),B.a8I,A.ada(B.aeR,r.gZb(r),s)],t.p),B.ah,B.ac,B.ak,s)}} +A.akk.prototype={ +ab(a){var s=null,r=A.am(a).ax.a===B.b8,q=r?B.Ql:B.vj,p=r?B.vj:B.Qd +return new A.a6z(this.c,!0,A.bfI(s,s,s,B.ap,s,s,s,A.ep(s,B.hg,q,s,B.k,s,s,s,s,s,s,s,s,s,s,s,s,!0,s,s,s,s,s,s,s,s),B.ap,new A.fc(p,s,s,B.hb,s,s,B.aV),s,s,s,s,B.ap,s,s,B.ap,s,s,B.ap,s,s,B.ap,s,s,B.ap,s,s,B.ap,s,s,s,s,s,s,B.ap,s,s,s,s,s,s,s,s,s,s,B.GK,B.ap,s,s,B.ap),s,s,s,s,s,s,s,s,s,s,s,s,B.a1i,B.a1j,B.a1P,!1,s)}} +A.Fu.prototype={ +ab(a){var s=null +return A.blz(s,s,new A.cu(B.dJ,A.hm(A.b([A.m1(new A.akk(this.c,s),1),B.a8u,A.n8(B.aeZ,new A.aHR(a),s)],t.p),B.ah,B.ac,B.ak),s),B.y,s,s,s,s,s)}} +A.aHR.prototype={ +$0(){A.vM(this.a,!1).ie()}, +$S:0} +A.a6g.prototype={ +ab(a){var s=this,r=null +return A.iH(B.b9,A.dD(r,A.dI(s.c,r,r,r,s.d,s.f,r),B.y,r,r,r,r,r,s.r,r),B.ai,!1,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r)}} +A.a9g.prototype={ +ab(a){var s,r,q,p=this,o=null,n=A.r4(a,!0).d,m=n.a +if(m!=null)s=new A.a2e(A.dD(o,p.d,B.y,o,o,new A.fc(o,o,o,o,o,o,B.aV),o,o,o,o),m,n.c,n.d,o) +else s=p.d +m=A.cj(a,o,t.l).w.Ul(new A.k2(n.b)) +r=A.bes(a)!==B.lf&&p.e?A.bd3(a):0 +q=p.f +return A.Ak(A.kA(0,q==null?s:A.kL(B.bC,A.b([A.GK(0,s,o),A.kA(6,A.l8(A.aym(new A.cu(B.fd,A.dI(q,o,o,o,o,o,o),o),o,o,o,o),o,o),o,o,6,6,o,o)],t.p),B.a4,B.bB,o),o,o,0,r,0,o),m)}} +A.Qa.prototype={ +b5(){return new A.anv(B.p)}, +aWu(){return this.d.$0()}} +A.anv.prototype={ +ab(a){var s,r,q,p,o=this,n=A.b([],t.p) +for(s=o.a.c.c.a,s=s.ghw(s),s=s.gar(s),r=t.kK;s.H();){q=s.ga1(s).b +q.toString +p=o.a.c +n.push(q.acD(new A.dp(A.ea(p.r.a+"_"+p.b," ","_")+"#"+q.a,r),new A.b4R(o)))}s=A.bd3(a) +r=o.a.e +return A.aSK(A.hm(n,B.ah,B.ac,B.ak),r,null,null,!1,"Properties",null,s)}} +A.b4R.prototype={ +$0(){var s=this.a +s.aK(new A.b4Q()) +s.a.aWu()}, +$S:28} +A.b4Q.prototype={ +$0(){}, +$S:0} +A.y4.prototype={ +b5(){return new A.a_V(this.c.uw(),B.p)}, +we(){return this.d.$0()}} +A.a_V.prototype={ +ab(a){var s=null,r=this.a.c +return new A.B2(r.a,A.bl3(s,!1,s,s,s,!1,s,s,new A.axE(this),s,s,s,s,s,!1,this.d),r.c,s)}} +A.axE.prototype={ +$1(a){var s=this.a,r=s.a +r.c.d=a +r.we() +s.aK(new A.axD(s,a))}, +$S:223} +A.axD.prototype={ +$0(){this.a.d=this.b}, +$S:0} +A.yq.prototype={ +b5(){var s=new A.LO(B.p) +s.d=s.e=this.c.uw() +return s}, +we(){return this.d.$0()}} +A.LO.prototype={ +aNn(a){this.aK(new A.azx(this,a))}, +alp(a){var s=this.c +s.toString +return A.bd2(new A.azA(this),s)}, +ab(a){var s=null,r=this.a.c,q=this.e +q===$&&A.c() +q=A.bmt(s,s,q,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s) +return new A.B2(r.a,A.n8(A.dD(s,s,B.y,s,s,s,s,s,s,s),new A.azw(this),q),r.c,s)}} +A.azx.prototype={ +$0(){return this.a.d=this.b}, +$S:0} +A.azA.prototype={ +$1(a){var s=this.a,r=s.d +r===$&&A.c() +return new A.GP("Pick a color!",new A.LN(r,s.gaNm(),0.8,null),A.b([A.n8(B.aeY,new A.azz(s),null)],t.p),null)}, +$S:493} +A.azz.prototype={ +$0(){var s=this.a +s.aK(new A.azy(s)) +s=s.c +s.toString +A.vM(s,!1).ie()}, +$S:0} +A.azy.prototype={ +$0(){var s=this.a,r=s.d +r===$&&A.c() +return s.e=r}, +$S:0} +A.azw.prototype={ +$0(){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$$0=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:n=q.a +s=2 +return A.x(n.alp(0),$async$$0) +case 2:p=n.a +o=p.c +n=n.e +n===$&&A.c() +o.d=n +p.we() +return A.p(null,r)}}) +return A.q($async$$0,r)}, +$S:15} +A.FV.prototype={ +b5(){return new A.Oq(B.p,this.$ti.h("Oq<1>"))}, +we(){return this.d.$0()}} +A.Oq.prototype={ +ab(a){var s=this,r=s.a.c,q=r.uw(),p=s.a.c.f,o=s.$ti,n=A.a5(p).h("@<1>").ak(o.h("lg<1>")).h("W<1,2>") +return new A.B2(r.a,A.beL(!0,A.ab(new A.W(p,new A.aJr(s),n),!0,n.h("aI.E")),new A.aJs(s),q,o.c),r.c,null)}} +A.aJs.prototype={ +$1(a){var s=this.a.a +s.c.d=a +s.we()}, +$S(){return this.a.$ti.h("~(1?)")}} +A.aJr.prototype={ +$1(a){var s=null +return A.bmo(A.dI(J.i1(a),s,s,s,s,s,s),a,this.a.$ti.c)}, +$S(){return this.a.$ti.h("lg<1>(1)")}} +A.AD.prototype={ +b5(){var s=this.c.uw(),r=new A.wG(B.is,$.aa()) +r.sd7(0,B.c.j(s)) +return new A.a7L(r,B.p)}, +we(){return this.d.$0()}} +A.a7L.prototype={ +ab(a){var s=null,r=this.a.c +return new A.B2(r.a,A.bgW(!0,B.dQ,!1,s,!0,B.a4,s,A.buL(),this.d,s,s,s,s,s,2,B.Wp,B.ai,!0,s,!0,s,!1,s,s,A.b([$.bj5()],t.VS),s,s,B.H0,s,s,s,1,s,s,!1,"\u2022",s,new A.aLZ(this),s,s,s,!1,s,!1,s,!0,s,B.dJ,s,s,B.dA,B.cO,s,s,s,s,s,s,s,B.aA,s,B.lj,s,s,s,s),r.c,s)}} +A.aLZ.prototype={ +$1(a){var s=this.a +s.a.c.d=A.ow(a) +s.a.we()}, +$S:26} +A.GP.prototype={ +ab(a){var s=null,r=A.dI(this.c,s,s,s,s,s,s) +return A.bBR(this.e,A.bgF(this.d,s,s,s,B.b1),r)}} +A.B2.prototype={ +ab(a){var s=null,r=A.dI(this.c,s,s,s,s,s,s) +return new A.cu(B.wc,A.jU(A.b([A.m1(r,4),A.m1(this.d,6)],t.p),B.ah,B.ac,B.ak,s),s)}} +A.a2b.prototype={ +ab(a){var s=A.r4(a,!0).d,r=t.Xl,q=t.yW,p=A.ab(A.b([$.bAj(),$.bAk(),$.bAl(),$.bAr(),$.bAs(),$.bAt(),$.bv1(),$.bv_(),$.buZ(),$.bv2(),$.bv0(),$.biS()],r),!0,q) +B.b.I(p,A.b([$.bAu(),$.bAv(),$.bAw(),$.bAx(),$.bAy(),$.bAm(),$.bAn(),$.bAo(),$.bAp(),$.bAq()],r)) +r=A.a5(p).h("W<1,lg>") +return A.beL(!0,A.ab(new A.W(p,new A.aAU(),r),!0,r.h("aI.E")),A.r4(a,!1).gaZV(),s.a,q)}} +A.aAU.prototype={ +$1(a){var s=null +return A.bmo(A.dI(a.b,s,s,s,s,s,s),a,t.yW)}, +$S:495} +A.adp.prototype={ +ab(a){var s=A.r4(a,!0).d.b,r=B.c.j(s) +return new A.S3(s,A.r4(a,!1).gb_0(),0.85,1.3,3,r,null)}} +A.M4.prototype={ +b5(){var s=$.aa() +return new A.a1O(new A.wG(B.is,s),new A.wG(B.is,s),B.p)}} +A.a1O.prototype={ +bu(){var s,r=this +r.bN() +s=r.c +s.toString +s=A.r4(s,!1).d.a.x +r.d.sd7(0,""+B.c.aw(s.a)) +r.e.sd7(0,""+B.c.aw(s.b))}, +t(){var s=this.d,r=$.aa() +s.ah$=r +s.ac$=0 +s=this.e +s.ah$=r +s.ac$=0 +this.bG()}, +Sp(a,b,c){var s=this.c +s.toString +A.r4(s,!1).aZW(a,b,c)}, +aHA(a){return this.Sp(null,a,null)}, +aHz(a){return this.Sp(a,null,null)}, +aHB(a){return this.Sp(null,null,a)}, +ab(a){var s=this,r=null,q=s.a.d,p=t.p +p=A.hm(A.b([A.jU(A.b([A.m1(new A.Ja(s.d,"Width",new A.aAo(s),r),1),B.a8s,A.m1(new A.Ja(s.e,"Height",new A.aAp(s),r),1)],p),B.ah,B.ac,B.ak,r),B.lg,B.vR,B.lg,new A.amH(new A.aAq(s),r)],p),B.ah,B.ac,B.ak) +return new A.Nk(p,B.u5,q)}} +A.aAo.prototype={ +$1(a){return this.a.aHB(a)}, +$S:221} +A.aAp.prototype={ +$1(a){return this.a.aHz(a)}, +$S:221} +A.aAq.prototype={ +$1(a){return this.a.aHA(a)}, +$S:502} +A.Ja.prototype={ +aDu(a){var s +if(a.length===0)return"Value can not be empty" +s=A.bcN(a) +if(s==null)return"Input needs to be digits only" +if(s>5000)return"Try to use a value less than 5000" +if(s<100)return"Try to use a value greather than 100" +return null}, +ab(a){var s=this,r=null,q=A.b([$.bj5()],t.VS) +return A.bL5(s.c,A.bnb(r,r,r,r,r,r,r,r,!0,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,r,A.dI(s.d,r,r,r,r,r,r),r,r,r,r,r,r,r,r,r,r,r,r,r,r,r),q,B.H0,new A.b22(s),s.gaDt())}} +A.b22.prototype={ +$1(a){var s=A.bcN(a) +if(s!=null)this.a.e.$1(s)}, +$S:26} +A.amH.prototype={ +ab(a){var s=A.r4(a,!0).d.a.a,r=t.Yg +return A.IH(B.ap,A.ab(new A.W(A.b([B.ar,B.a6],t.r6),new A.b4z(this,s.c),r),!0,r.h("aI.E")),B.iN)}} +A.b4z.prototype={ +$1(a){var s=null,r=B.b.ga_(a.W().split(".")) +return A.ada(A.dI(r,s,s,s,A.ep(s,s,s,s,s,s,s,s,s,s,s,s,s,s,a===this.b?B.b3:B.A,s,s,!0,s,s,s,s,s,s,s,s),s,s),new A.b4y(this.a,a),s)}, +$S:506} +A.b4y.prototype={ +$0(){return this.a.c.$1(this.b)}, +$S:0} +A.a2f.prototype={ +JS(a,b,c,d){var s=this,r=a==null?s.a:a,q=d==null?s.b:d,p=b==null?s.c:b +return new A.a2f(r,q,p,c==null?s.d:c)}, +Uk(a){return this.JS(null,null,null,a)}, +aOJ(a,b){return this.JS(a,null,null,b)}, +aOA(a){return this.JS(null,null,a,null)}, +aOx(a){return this.JS(null,a,null,null)}} +A.Mc.prototype={ +b5(){return new A.Me(B.nv,B.p)}} +A.Me.prototype={ +sAz(a){this.aK(new A.aAW(this,a))}, +aiP(a){this.sAz(this.d.Uk(a))}, +b_1(){return this.aiP(1)}, +ZH(a){this.sAz(B.nv.aOJ(a,this.d.b))}, +aZ6(a){var s=this.d +this.sAz(s.aOx(s.c===B.fA?B.eH:B.fA))}, +aZy(){var s=this.d +this.sAz(s.aOA(!s.d))}, +bF(a){this.sAz(B.nv)}, +aZW(a,b,c){var s,r,q=this.d.a +if(q==null)return +s=b==null?q.a.c:b +r=c==null?q.x.a:c +this.ZH(A.aAV("custom_device","Custom Device",s,B.X,B.X,new A.Q(r,a==null?q.x.b:a)))}, +ab(a){return new A.UG(this.d,this,this.a.c,null)}} +A.aAW.prototype={ +$0(){this.a.d=this.b}, +$S:0} +A.UG.prototype={ +el(a){return this.f!==a.f}} +A.ab7.prototype={ +ab(a){return B.SC}} +A.Mb.prototype={ +ab(a){var s=null,r=A.dI(this.c,s,s,s,s,s,s) +return new A.cu(B.wc,A.jU(A.b([A.m1(r,4),A.m1(this.d,6)],t.p),B.ah,B.ac,B.ak,s),s)}} +A.aby.prototype={ +ab(a){var s=this,r=null,q=A.bes(a)!==B.lf&&!s.y,p=A.am(a),o=t.p,n=A.b([A.dI(s.c,r,r,r,B.acp,r,r)],o),m=s.x +if(m!=null)n.push(new A.cu(B.Ux,A.bg1(m,q?1:0),r)) +o=A.b([A.GK(0,A.bgF(new A.cu(B.w4,A.hm(A.b([A.IH(B.ap,n,B.HI),B.eQ,s.d],o),B.fa,B.ac,B.ak),r),r,s.f,r,B.b1),r)],o) +if(!s.y)o.push(A.kA(r,new A.kl(B.VW,new A.aSL(s),"Close",s.r),r,r,r,15,15,r)) +return A.dD(r,A.kL(B.bC,o,B.a4,B.bB,r),B.y,p.at,r,r,r,r,r,s.w)}} +A.aSL.prototype={ +$0(){var s=this.a.e.$0() +return s}, +$S:0} +A.Si.prototype={ +b5(){return new A.aqs(B.p)}, +aWA(a){return this.e.$1(a)}, +aVY(a){return this.r.$1(a)}, +aW0(){return this.w.$0()}, +aWS(a){return this.y.$1(a)}} +A.aqs.prototype={ +bu(){var s,r,q=this +q.bN() +s=q.a.z +q.e=s +r=new A.wG(B.is,$.aa()) +r.sd7(0,s) +q.d=r +r.an(0,new A.b72(q))}, +t(){var s=this,r=s.d +r===$&&A.c() +r.ah$=$.aa() +r.ac$=0 +s.a.aWS(s.e) +s.bG()}, +aJS(a){var s,r,q,p,o +if(this.aCW(a.a))return!0 +for(s=a.b,r=s.length,q=0;q768?0.25:1 +s=a5.a +p=s.x +s=s.at +o=a5.d +o===$&&A.c() +n=t.p +o=A.b([new A.cu(B.Ue,A.bgW(!0,B.dQ,!1,a6,!0,B.a4,a6,A.buL(),o,a6,a6,a6,a6,a6,2,B.Wq,B.ai,!0,a6,!0,a6,!1,a6,a6,a6,B.aia,a6,a6,a6,a6,a6,1,a6,a6,!1,"\u2022",a6,a6,a6,a6,a6,!1,a6,!1,a6,!0,a6,B.dJ,a6,a6,B.dA,B.cO,a6,a6,a6,a6,a6,a6,a6,B.aA,a6,B.lj,a6,a6,a6,a6),a6)],n) +for(m=a5.a.c,l=m.length,k=t.aN,j=0;j768?24:48,m=A.b([],t.p) +for(s=this.c,r=0;r768?24:48 +m.push(new A.ta(p,10+r*q,p,p,p,p,s[r],p))}return A.fF(A.kL(B.bC,m,B.a4,B.bB,p),p,n)}} +A.aji.prototype={ +aO(a0,a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=$.G(),a=b.Z() +a.a4(0,6.5205,675.949) +a.q(0,4.34704,675.949) +a.l(1.94629,675.949,0,673.934,0,671.447) +a.q(0,0.000118933,460.931) +a.l(0.000119151,458.445,1.94631,456.429,4.34706,456.429) +a.q(0,6.52053,456.429) +a.q(0,6.5205,675.949) +a.T(0) +s=b.B() +s.sU(0,B.i) +s.sA(0,B.I) +a0.a3(a,s) +r=b.Z() +r.a4(0,845.479,654.214) +r.q(0,847.653,654.214) +r.l(850.054,654.214,852,656.23,852,658.717) +r.q(0,852,784.467) +r.l(852,786.954,850.054,788.969,847.653,788.969) +r.q(0,845.479,788.969) +r.q(0,845.479,654.214) +r.T(0) +q=b.B() +q.sU(0,B.i) +q.sA(0,B.I) +a0.a3(r,q) +p=b.Z() +p.a4(0,845.479,471.643) +p.q(0,847.653,471.643) +p.l(850.054,471.643,852,473.659,852,476.145) +p.q(0,852,538.865) +p.l(852,541.352,850.054,543.368,847.653,543.368) +p.q(0,845.479,543.368) +p.q(0,845.479,471.643) +p.T(0) +o=b.B() +o.sU(0,B.i) +o.sA(0,B.I) +a0.a3(p,o) +n=b.Z() +n.a4(0,6.52051,147.796) +n.l(6.52051,90.8783,6.52051,62.4195,19.3318,41.5134) +n.l(26.5004,29.8153,36.3358,19.9799,48.0339,12.8113) +n.l(68.94,0,97.3988,0,154.316,0) +n.q(0,697.684,0) +n.l(754.601,0,783.06,0,803.966,12.8113) +n.l(815.664,19.9799,825.5,29.8153,832.668,41.5134) +n.l(845.48,62.4195,845.48,90.8783,845.48,147.796) +n.q(0,845.48,1717.04) +n.l(845.48,1773.96,845.48,1802.42,832.668,1823.32) +n.l(825.5,1835.02,815.664,1844.86,803.966,1852.03) +n.l(783.06,1864.84,754.601,1864.84,697.684,1864.84) +n.q(0,154.316,1864.84) +n.l(97.3988,1864.84,68.94,1864.84,48.0339,1852.03) +n.l(36.3358,1844.86,26.5004,1835.02,19.3318,1823.32) +n.l(6.52051,1802.42,6.52051,1773.96,6.52051,1717.04) +n.q(0,6.52051,147.796) +n.T(0) +m=b.B() +m.sU(0,B.i) +m.sA(0,B.cf) +a0.a3(n,m) +l=b.Z() +l.a4(0,10.8672,142.362) +l.l(10.8672,92.5595,10.8672,67.6581,22.0771,49.3652) +l.l(28.3496,39.1294,36.9556,30.5234,47.1914,24.2509) +l.l(65.4843,13.041,90.3857,13.041,140.189,13.041) +l.q(0,711.811,13.041) +l.l(761.614,13.041,786.515,13.041,804.808,24.2509) +l.l(815.044,30.5234,823.65,39.1294,829.923,49.3652) +l.l(841.132,67.6581,841.132,92.5595,841.132,142.362) +l.q(0,841.132,1722.47) +l.l(841.132,1772.28,841.132,1797.18,829.923,1815.47) +l.l(823.65,1825.71,815.044,1834.31,804.808,1840.59) +l.l(786.515,1851.8,761.614,1851.8,711.811,1851.8) +l.q(0,140.189,1851.8) +l.l(90.3857,1851.8,65.4843,1851.8,47.1914,1840.59) +l.l(36.9556,1834.31,28.3496,1825.71,22.0771,1815.47) +l.l(10.8672,1797.18,10.8672,1772.28,10.8672,1722.47) +l.q(0,10.8672,142.362) +l.T(0) +k=b.B() +k.sU(0,B.i) +k.sA(0,B.I) +a0.a3(l,k) +j=b.Z() +j.a4(0,319.5,26.0815) +j.l(315.53,26.0815,315.186,20.6429,311.845,19.6997) +j.l(311.472,19.5945,311.295,19.1147,311.602,18.8783) +j.l(312.429,18.241,313.791,17.3877,315.153,17.3877) +j.q(0,536.847,17.3877) +j.l(538.209,17.3877,539.571,18.241,540.398,18.8783) +j.l(540.705,19.1147,540.528,19.5945,540.155,19.6997) +j.l(536.814,20.6429,536.47,26.0815,532.5,26.0815) +j.q(0,319.5,26.0815) +j.T(0) +i=b.B() +i.sU(0,B.i) +i.sA(0,B.a_) +a0.a3(j,i) +h=b.Z() +h.a4(0,108.673,110.847) +h.l(120.677,110.847,130.408,101.116,130.408,89.1121) +h.l(130.408,77.1084,120.677,67.3774,108.673,67.3774) +h.l(96.6694,67.3774,86.9385,77.1084,86.9385,89.1121) +h.l(86.9385,101.116,96.6694,110.847,108.673,110.847) +h.T(0) +g=b.B() +g.sU(0,B.i) +g.sA(0,B.a_) +a0.a3(h,g) +f=b.Z() +f.a4(0,108.673,102.696) +f.l(116.175,102.696,122.257,96.6144,122.257,89.112) +f.l(122.257,81.6097,116.175,75.5278,108.673,75.5278) +f.l(101.171,75.5278,95.0889,81.6097,95.0889,89.112) +f.l(95.0889,96.6144,101.171,102.696,108.673,102.696) +f.T(0) +e=b.B() +e.sU(0,B.i) +e.sA(0,B.I) +a0.a3(f,e) +d=b.Z() +d.a4(0,108.673,86.3951) +d.l(110.173,86.3951,111.39,85.1787,111.39,83.6783) +d.l(111.39,82.1778,110.173,80.9614,108.673,80.9614) +d.l(107.172,80.9614,105.956,82.1778,105.956,83.6783) +d.l(105.956,85.1787,107.172,86.3951,108.673,86.3951) +d.T(0) +c=b.B() +c.sU(0,B.i) +c.sA(0,B.bN) +a0.a3(d,c)}, +cF(a){return!1}} +A.ajj.prototype={ +aO(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=$.G(),c=d.Z() +c.a4(0,861.602,656.865) +c.q(0,863.735,656.865) +c.l(866.09,656.865,868,658.843,868,661.282) +c.q(0,868,765.479) +c.l(868,767.919,866.09,769.897,863.735,769.897) +c.q(0,861.602,769.897) +c.q(0,861.602,656.865) +c.T(0) +s=d.B() +s.sU(0,B.i) +s.sA(0,B.I) +a.a3(c,s) +r=d.Z() +r.a4(0,861.602,292.177) +r.q(0,863.735,292.177) +r.l(866.09,292.177,868,294.155,868,296.594) +r.q(0,868,537.282) +r.l(868,539.722,866.09,541.7,863.735,541.7) +r.q(0,861.602,541.7) +r.q(0,861.602,292.177) +r.T(0) +q=d.B() +q.sU(0,B.i) +q.sA(0,B.I) +a.a3(r,q) +p=d.Z() +p.a4(0,0,155.259) +p.l(0,113.976,0,93.3345,5.4278,76.6295) +p.l(16.3977,42.8676,42.8676,16.3977,76.6295,5.4278) +p.l(93.3345,0,113.976,0,155.259,0) +p.q(0,706.343,0) +p.l(747.626,0,768.267,0,784.972,5.4278) +p.l(818.734,16.3977,845.204,42.8676,856.174,76.6295) +p.l(861.602,93.3345,861.602,113.976,861.602,155.259) +p.q(0,861.602,1674.58) +p.l(861.602,1715.86,861.602,1736.5,856.174,1753.21) +p.l(845.204,1786.97,818.734,1813.44,784.972,1824.41) +p.l(768.267,1829.84,747.626,1829.84,706.343,1829.84) +p.q(0,155.259,1829.84) +p.l(113.976,1829.84,93.3345,1829.84,76.6295,1824.41) +p.l(42.8676,1813.44,16.3977,1786.97,5.4278,1753.21) +p.l(0,1736.5,0,1715.86,0,1674.58) +p.q(0,0,155.259) +p.T(0) +o=d.B() +o.sU(0,B.i) +o.sA(0,B.cf) +a.a3(p,o) +n=d.Z() +n.a4(0,8.53076,151.847) +n.l(8.53076,113.739,8.53076,94.6857,13.541,79.2657) +n.l(23.6671,48.1008,48.1008,23.6671,79.2657,13.541) +n.l(94.6857,8.53076,113.739,8.53076,151.847,8.53076) +n.q(0,709.755,8.53076) +n.l(747.863,8.53076,766.916,8.53076,782.336,13.541) +n.l(813.501,23.6671,837.935,48.1008,848.061,79.2657) +n.l(853.071,94.6857,853.071,113.739,853.071,151.847) +n.q(0,853.071,1677.99) +n.l(853.071,1716.1,853.071,1735.15,848.061,1750.57) +n.l(837.935,1781.74,813.501,1806.17,782.336,1816.3) +n.l(766.916,1821.31,747.863,1821.31,709.755,1821.31) +n.q(0,151.847,1821.31) +n.l(113.739,1821.31,94.6857,1821.31,79.2657,1816.3) +n.l(48.1008,1806.17,23.6671,1781.74,13.541,1750.57) +n.l(8.53076,1735.15,8.53076,1716.1,8.53076,1677.99) +n.q(0,8.53076,151.847) +n.T(0) +m=d.B() +m.sU(0,B.i) +m.sA(0,B.I) +a.a3(n,m) +l=d.Z() +l.a4(0,430.801,72.511) +l.l(440.224,72.511,447.862,64.8724,447.862,55.4496) +l.l(447.862,46.0268,440.224,38.3882,430.801,38.3882) +l.l(421.378,38.3882,413.74,46.0268,413.74,55.4496) +l.l(413.74,64.8724,421.378,72.511,430.801,72.511) +l.T(0) +k=d.B() +k.sU(0,B.i) +k.sA(0,B.a_) +a.a3(l,k) +j=d.Z() +j.a4(0,430.801,66.1129) +j.l(436.69,66.1129,441.464,61.3388,441.464,55.4495) +j.l(441.464,49.5603,436.69,44.7861,430.801,44.7861) +j.l(424.912,44.7861,420.137,49.5603,420.137,55.4495) +j.l(420.137,61.3388,424.912,66.1129,430.801,66.1129) +j.T(0) +i=d.B() +i.sU(0,B.i) +i.sA(0,B.I) +a.a3(j,i) +h=d.Z() +h.a4(0,430.801,53.3171) +h.l(431.979,53.3171,432.934,52.3623,432.934,51.1844) +h.l(432.934,50.0066,431.979,49.0518,430.801,49.0518) +h.l(429.623,49.0518,428.668,50.0066,428.668,51.1844) +h.l(428.668,52.3623,429.623,53.3171,430.801,53.3171) +h.T(0) +g=d.B() +g.sU(0,B.i) +g.sA(0,B.bN) +a.a3(h,g) +f=d.Z() +f.a4(0,388.147,21.3265) +f.l(384.252,21.3265,383.914,15.99,380.635,15.0645) +f.l(380.27,14.9613,380.097,14.4904,380.398,14.2585) +f.l(381.209,13.6332,382.546,12.7959,383.882,12.7959) +f.q(0,477.72,12.7959) +f.l(479.056,12.7959,480.392,13.6332,481.204,14.2585) +f.l(481.505,14.4904,481.332,14.9613,480.966,15.0645) +f.l(477.688,15.99,477.35,21.3265,473.454,21.3265) +f.q(0,388.147,21.3265) +f.T(0) +e=d.B() +e.sU(0,B.i) +e.sA(0,B.a_) +a.a3(f,e)}, +cF(a){return!1}} +A.ajk.prototype={ +aO(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=$.G(),e=f.Z() +e.a4(0,0,62.55) +e.l(0,28.0046,28.0046,0,62.55,0) +e.q(0,765.195,0) +e.l(799.74,0,827.745,28.0046,827.745,62.55) +e.q(0,827.745,1726.38) +e.l(827.745,1760.93,799.74,1788.93,765.195,1788.93) +e.q(0,62.55,1788.93) +e.l(28.0046,1788.93,0,1760.93,0,1726.38) +e.q(0,0,62.55) +e.T(0) +s=f.B() +s.sU(0,B.i) +s.sA(0,B.cf) +a.a3(e,s) +r=f.Z() +r.a4(0,12.51,62.5497) +r.l(12.51,34.9134,34.9137,12.5098,62.55,12.5098) +r.q(0,765.195,12.5098) +r.l(792.831,12.5098,815.235,34.9134,815.235,62.5498) +r.q(0,815.235,1726.38) +r.l(815.235,1754.02,792.831,1776.42,765.195,1776.42) +r.q(0,62.55,1776.42) +r.l(34.9137,1776.42,12.51,1754.02,12.51,1726.38) +r.q(0,12.51,62.5497) +r.T(0) +q=f.B() +q.sU(0,B.i) +q.sA(0,B.I) +a.a3(r,q) +p=f.Z() +p.a4(0,827.745,650.52) +p.q(0,829.83,650.52) +p.l(832.133,650.52,834,652.142,834,654.142) +p.q(0,834,755.318) +p.l(834,757.318,832.133,758.94,829.83,758.94) +p.q(0,827.745,758.94) +p.q(0,827.745,650.52) +p.T(0) +o=f.B() +o.sU(0,B.i) +o.sA(0,B.I) +a.a3(p,o) +n=f.Z() +n.a4(0,827.745,346.11) +n.q(0,829.83,346.11) +n.l(832.133,346.11,834,349.197,834,353.006) +n.q(0,834,545.629) +n.l(834,549.437,832.133,552.525,829.83,552.525) +n.q(0,827.745,552.525) +n.q(0,827.745,346.11) +n.T(0) +m=f.B() +m.sU(0,B.i) +m.sA(0,B.I) +a.a3(n,m) +l=f.Z() +l.a4(0,413.872,91.7401) +l.l(425.963,91.7401,435.765,81.9385,435.765,69.8476) +l.l(435.765,57.7567,425.963,47.9551,413.872,47.9551) +l.l(401.782,47.9551,391.98,57.7567,391.98,69.8476) +l.l(391.98,81.9385,401.782,91.7401,413.872,91.7401) +l.T(0) +k=f.B() +k.sU(0,B.i) +k.sA(0,B.a_) +a.a3(l,k) +j=f.Z() +j.a4(0,413.873,83.5302) +j.l(421.429,83.5302,427.555,77.4042,427.555,69.8474) +j.l(427.555,62.2906,421.429,56.1646,413.873,56.1646) +j.l(406.316,56.1646,400.19,62.2906,400.19,69.8474) +j.l(400.19,77.4042,406.316,83.5302,413.873,83.5302) +j.T(0) +i=f.B() +i.sU(0,B.i) +i.sA(0,B.I) +a.a3(j,i) +h=f.Z() +h.a4(0,413.873,67.1108) +h.l(415.384,67.1108,416.609,65.8856,416.609,64.3743) +h.l(416.609,62.8629,415.384,61.6377,413.873,61.6377) +h.l(412.361,61.6377,411.136,62.8629,411.136,64.3743) +h.l(411.136,65.8856,412.361,67.1108,413.873,67.1108) +h.T(0) +g=f.B() +g.sU(0,B.i) +g.sA(0,B.bN) +a.a3(h,g)}, +cF(a){return!1}} +A.ajq.prototype={ +aO(a,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=$.G(),b=c.Z() +b.a4(0,0,15.9801) +b.l(0,7.15452,7.15451,0,15.9801,0) +b.q(0,779.027,0) +b.l(787.853,0,795.007,7.15451,795.007,15.9801) +b.q(0,795.007,1697.88) +b.l(795.007,1706.71,787.853,1713.86,779.027,1713.86) +b.q(0,15.98,1713.86) +b.l(7.15449,1713.86,0,1706.71,0,1697.88) +b.q(0,0,15.9801) +b.T(0) +s=c.B() +s.sU(0,B.i) +s.sA(0,B.cf) +a.a3(b,s) +r=c.Z() +r.a4(0,1.99756,55.93) +r.l(1.99756,35.2141,1.99756,24.8561,8.43317,18.4205) +r.l(14.8688,11.9849,25.2268,11.9849,45.9427,11.9849) +r.q(0,749.065,11.9849) +r.l(769.781,11.9849,780.139,11.9849,786.574,18.4205) +r.l(793.01,24.8561,793.01,35.2141,793.01,55.93) +r.q(0,793.01,1657.93) +r.l(793.01,1678.65,793.01,1689,786.574,1695.44) +r.l(780.139,1701.88,769.781,1701.88,749.065,1701.88) +r.q(0,45.9427,1701.88) +r.l(25.2268,1701.88,14.8688,1701.88,8.43317,1695.44) +r.l(1.99756,1689,1.99756,1678.65,1.99756,1657.93) +r.q(0,1.99756,55.93) +r.T(0) +q=c.B() +q.sU(0,B.i) +q.sA(0,B.I) +a.a3(r,q) +p=c.B() +p.sU(0,B.i) +p.sA(0,B.a_) +o=a0.a +n=o*0.3541149 +a.b7(new A.A(n,0,n+o*0.01246883,0+a0.b*0.006992415),p) +m=c.Z() +m.a4(0,795.007,643.197) +m.q(0,797.005,643.197) +m.l(799.211,643.197,801,644.751,801,646.668) +m.q(0,801,743.597) +m.l(801,745.514,799.211,747.068,797.005,747.068) +m.q(0,795.007,747.068) +m.q(0,795.007,643.197) +m.T(0) +l=c.B() +l.sU(0,B.i) +l.sA(0,B.I) +a.a3(m,l) +k=c.Z() +k.a4(0,795.007,351.561) +k.q(0,797.005,351.561) +k.l(799.211,351.561,801,354.519,801,358.168) +k.q(0,801,542.707) +k.l(801,546.356,799.211,549.314,797.005,549.314) +k.q(0,795.007,549.314) +k.q(0,795.007,351.561) +k.T(0) +j=c.B() +j.sU(0,B.i) +j.sA(0,B.I) +a.a3(k,j) +i=c.Z() +i.a4(0,399.5,74) +i.l(410.822,74,420,65.0457,420,54) +i.l(420,42.9543,410.822,34,399.5,34) +i.l(388.178,34,379,42.9543,379,54) +i.l(379,65.0457,388.178,74,399.5,74) +i.T(0) +h=c.B() +h.sU(0,B.i) +h.sA(0,B.a_) +a.a3(i,h) +g=c.Z() +g.a4(0,399.501,65.1687) +g.l(405.707,65.1687,410.737,60.1382,410.737,53.9327) +g.l(410.737,47.7273,405.707,42.6968,399.501,42.6968) +g.l(393.296,42.6968,388.265,47.7273,388.265,53.9327) +g.l(388.265,60.1382,393.296,65.1687,399.501,65.1687) +g.T(0) +f=c.B() +f.sU(0,B.i) +f.sA(0,B.I) +a.a3(g,f) +e=c.Z() +e.a4(0,399.501,51.6853) +e.l(400.742,51.6853,401.748,50.6792,401.748,49.4381) +e.l(401.748,48.197,400.742,47.1909,399.501,47.1909) +e.l(398.26,47.1909,397.254,48.197,397.254,49.4381) +e.l(397.254,50.6792,398.26,51.6853,399.501,51.6853) +e.T(0) +d=c.B() +d.sU(0,B.i) +d.sA(0,B.bN) +a.a3(e,d)}, +cF(a){return!1}} +A.ajr.prototype={ +aO(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=1899,e=$.G(),d=e.Z() +d.a4(0,858.755,345.272) +d.q(0,860.968,345.272) +d.l(863.413,345.272,865.395,347.325,865.395,349.857) +d.q(0,865.395,577.509) +d.l(865.395,580.041,863.413,582.094,860.968,582.094) +d.q(0,858.755,582.094) +d.q(0,858.755,345.272) +d.T(0) +s=e.B() +s.sU(0,B.i) +s.sA(0,B.I) +a.a3(d,s) +r=e.Z() +r.a4(0,858.755,710.465) +r.q(0,860.968,710.465) +r.l(863.413,710.465,865.395,712.517,865.395,715.05) +r.q(0,865.395,829.824) +r.l(865.395,832.356,863.413,834.409,860.968,834.409) +r.q(0,858.755,834.409) +r.q(0,858.755,710.465) +r.T(0) +q=e.B() +q.sU(0,B.i) +q.sA(0,B.I) +a.a3(r,q) +p=e.Z() +p.a4(0,0,193.441) +p.l(0,107.314,0,64.2511,24.3934,35.6901) +p.l(27.8572,31.6344,31.6344,27.8572,35.6901,24.3934) +p.l(64.2511,0,107.314,0,193.441,0) +p.q(0,665.314,0) +p.l(751.441,0,794.504,0,823.065,24.3934) +p.l(827.121,27.8572,830.898,31.6344,834.362,35.6901) +p.l(858.755,64.2511,858.755,107.314,858.755,193.441) +p.q(0,858.755,1705.56) +p.l(858.755,1791.69,858.755,1834.75,834.362,1863.31) +p.l(830.898,1867.37,827.121,1871.14,823.065,1874.61) +p.l(794.504,f,751.441,f,665.314,f) +p.q(0,193.441,f) +p.l(107.314,f,64.2511,f,35.6901,1874.61) +p.l(31.6344,1871.14,27.8572,1867.37,24.3934,1863.31) +p.l(0,1834.75,0,1791.69,0,1705.56) +p.q(0,0,193.441) +p.T(0) +o=e.B() +o.sU(0,B.i) +o.sA(0,B.cf) +a.a3(p,o) +n=e.Z() +n.a4(0,4.42676,178.944) +n.l(4.42676,106.544,4.42676,70.3436,23.9081,45.6316) +n.l(28.3256,40.0281,33.3885,34.9652,38.992,30.5478) +n.l(63.704,11.0664,99.9042,11.0664,172.305,11.0664) +n.q(0,686.451,11.0664) +n.l(758.851,11.0664,795.052,11.0664,819.764,30.5478) +n.l(825.367,34.9652,830.43,40.0281,834.847,45.6316) +n.l(854.329,70.3436,854.329,106.544,854.329,178.944) +n.q(0,854.329,1720.06) +n.l(854.329,1792.46,854.329,1828.66,834.847,1853.37) +n.l(830.43,1858.97,825.367,1864.03,819.764,1868.45) +n.l(795.052,1887.93,758.851,1887.93,686.451,1887.93) +n.q(0,172.305,1887.93) +n.l(99.9042,1887.93,63.704,1887.93,38.992,1868.45) +n.l(33.3885,1864.03,28.3256,1858.97,23.9081,1853.37) +n.l(4.42676,1828.66,4.42676,1792.46,4.42676,1720.06) +n.q(0,4.42676,178.944) +n.T(0) +m=e.B() +m.sU(0,B.i) +m.sA(0,B.I) +a.a3(n,m) +l=e.Z() +l.a4(0,424.951,90.7447) +l.l(437.175,90.7447,447.084,80.8355,447.084,68.6119) +l.l(447.084,56.3882,437.175,46.479,424.951,46.479) +l.l(412.728,46.479,402.818,56.3882,402.818,68.6119) +l.l(402.818,80.8355,412.728,90.7447,424.951,90.7447) +l.T(0) +k=e.B() +k.sU(0,B.i) +k.sA(0,B.a_) +a.a3(l,k) +j=e.Z() +j.a4(0,424.951,82.4449) +j.l(432.591,82.4449,438.784,76.2516,438.784,68.6118) +j.l(438.784,60.9721,432.591,54.7788,424.951,54.7788) +j.l(417.311,54.7788,411.118,60.9721,411.118,68.6118) +j.l(411.118,76.2516,417.311,82.4449,424.951,82.4449) +j.T(0) +i=e.B() +i.sU(0,B.i) +i.sA(0,B.I) +a.a3(j,i) +h=e.Z() +h.a4(0,424.951,65.8452) +h.l(426.479,65.8452,427.718,64.6066,427.718,63.0786) +h.l(427.718,61.5507,426.479,60.312,424.951,60.312) +h.l(423.423,60.312,422.185,61.5507,422.185,63.0786) +h.l(422.185,64.6066,423.423,65.8452,424.951,65.8452) +h.T(0) +g=e.B() +g.sU(0,B.i) +g.sA(0,B.bN) +a.a3(h,g)}, +cF(a){return!1}} +A.ajs.prototype={ +aO(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,b3,b4=$.G(),b5=b4.Z() +b5.a4(0,0,61.4555) +b5.l(0,27.5146,27.5146,0,61.4555,0) +b5.q(0,692.399,0) +b5.l(726.34,0,753.854,27.5146,753.854,61.4555) +b5.q(0,753.854,1696.17) +b5.l(753.854,1730.11,726.34,1757.63,692.399,1757.63) +b5.q(0,61.4555,1757.63) +b5.l(27.5146,1757.63,0,1730.11,0,1696.17) +b5.q(0,0,61.4555) +b5.T(0) +s=b4.B() +s.sU(0,B.i) +s.sA(0,B.cf) +b6.a3(b5,s) +r=b4.Z() +r.a4(0,14.3398,63.5042) +r.l(14.3398,36.3515,36.3515,14.3398,63.5043,14.3398) +r.q(0,690.351,14.3398) +r.l(717.503,14.3398,739.515,36.3515,739.515,63.5043) +r.q(0,739.515,1694.12) +r.l(739.515,1721.28,717.503,1743.29,690.351,1743.29) +r.q(0,63.5042,1743.29) +r.l(36.3515,1743.29,14.3398,1721.28,14.3398,1694.12) +r.q(0,14.3398,63.5042) +r.T(0) +q=b4.B() +q.sU(0,B.i) +q.sA(0,B.I) +b6.a3(r,q) +p=b4.Z() +p.a4(0,753.854,456.819) +p.q(0,755.903,456.819) +p.l(758.166,456.819,760,459.669,760,463.184) +p.q(0,760,640.966) +p.l(760,644.482,758.166,647.331,755.903,647.331) +p.q(0,753.854,647.331) +p.q(0,753.854,456.819) +p.T(0) +o=b4.B() +o.sU(0,B.i) +o.sA(0,B.I) +b6.a3(p,o) +n=b4.Z() +n.a4(0,753.854,1399.14) +n.q(0,755.903,1399.14) +n.l(758.166,1399.14,760,1400.58,760,1402.35) +n.q(0,760,1492.2) +n.l(760,1493.98,758.166,1495.42,755.903,1495.42) +n.q(0,753.854,1495.42) +n.q(0,753.854,1399.14) +n.T(0) +m=b4.B() +m.sU(0,B.i) +m.sA(0,B.I) +b6.a3(n,m) +l=b4.Z() +l.a4(0,0,135.202) +l.q(0,14.3396,135.202) +l.q(0,14.3396,145.445) +l.q(0,0,145.445) +l.q(0,0,135.202) +l.T(0) +k=b4.B() +k.sU(0,B.i) +k.sA(0,B.a_) +b6.a3(l,k) +j=b4.Z() +j.a4(0,0,467.062) +j.q(0,14.3396,467.062) +j.q(0,14.3396,477.305) +j.q(0,0,477.305) +j.q(0,0,467.062) +j.T(0) +i=b4.B() +i.sU(0,B.i) +i.sA(0,B.a_) +b6.a3(j,i) +h=b4.Z() +h.a4(0,739.515,135.202) +h.q(0,753.854,135.202) +h.q(0,753.854,145.445) +h.q(0,739.515,145.445) +h.q(0,739.515,135.202) +h.T(0) +g=b4.B() +g.sU(0,B.i) +g.sA(0,B.a_) +b6.a3(h,g) +f=b4.Z() +f.a4(0,0,1612.18) +f.q(0,14.3396,1612.18) +f.q(0,14.3396,1622.43) +f.q(0,0,1622.43) +f.q(0,0,1612.18) +f.T(0) +e=b4.B() +e.sU(0,B.i) +e.sA(0,B.a_) +b6.a3(f,e) +d=b4.Z() +d.a4(0,739.515,1612.18) +d.q(0,753.854,1612.18) +d.q(0,753.854,1622.43) +d.q(0,739.515,1622.43) +d.q(0,739.515,1612.18) +d.T(0) +c=b4.B() +c.sU(0,B.i) +c.sA(0,B.a_) +b6.a3(d,c) +b=b4.Z() +b.a4(0,108.571,1743.29) +b.q(0,118.814,1743.29) +b.q(0,118.814,1757.63) +b.q(0,108.571,1757.63) +b.q(0,108.571,1743.29) +b.T(0) +a=b4.B() +a.sU(0,B.i) +a.sA(0,B.a_) +b6.a3(b,a) +a0=b4.Z() +a0.a4(0,637.089,1743.29) +a0.q(0,647.331,1743.29) +a0.q(0,647.331,1757.63) +a0.q(0,637.089,1757.63) +a0.q(0,637.089,1743.29) +a0.T(0) +a1=b4.B() +a1.sU(0,B.i) +a1.sA(0,B.a_) +b6.a3(a0,a1) +a2=b4.Z() +a2.a4(0,526.469,46.0919) +a2.l(526.469,41.0007,530.596,36.8735,535.687,36.8735) +a2.q(0,558.221,36.8735) +a2.l(563.312,36.8735,567.439,41.0007,567.439,46.0919) +a2.l(567.439,51.183,563.312,55.3102,558.221,55.3102) +a2.q(0,535.687,55.3102) +a2.l(530.596,55.3102,526.469,51.183,526.469,46.0919) +a2.T(0) +a3=b4.B() +a3.sU(0,B.i) +a3.sA(0,B.a_) +b6.a3(a2,a3) +a4=b4.Z() +a4.a4(0,651.428,46.0919) +a4.l(651.428,43.2635,653.721,40.9706,656.55,40.9706) +a4.l(659.378,40.9706,661.671,43.2635,661.671,46.0919) +a4.l(661.671,48.9203,659.378,51.2132,656.55,51.2132) +a4.l(653.721,51.2132,651.428,48.9203,651.428,46.0919) +a4.T(0) +a5=b4.B() +a5.sU(0,B.i) +a5.sA(0,B.a_) +b6.a3(a4,a5) +a6=b4.Z() +a6.a4(0,311.375,24.5824) +a6.l(307.278,24.5825,301.132,14.3399,297.035,14.3399) +a6.l(349.614,14.3398,404.241,14.3399,456.819,14.3399) +a6.l(452.12,14.3399,446.577,24.5824,442.48,24.5824) +a6.l(438.383,24.5824,315.472,24.5824,311.375,24.5824) +a6.T(0) +a7=b4.B() +a7.sU(0,B.i) +a7.sA(0,B.a_) +b6.a3(a6,a7) +a8=b4.Z() +a8.a4(0,241.725,61.4553) +a8.l(251.908,61.4553,260.162,53.201,260.162,43.0187) +a8.l(260.162,32.8364,251.908,24.582,241.725,24.582) +a8.l(231.543,24.582,223.289,32.8364,223.289,43.0187) +a8.l(223.289,53.201,231.543,61.4553,241.725,61.4553) +a8.T(0) +a9=b4.B() +a9.sU(0,B.i) +a9.sA(0,B.a_) +b6.a3(a8,a9) +b0=b4.Z() +b0.a4(0,241.725,54.5414) +b0.l(248.089,54.5414,253.248,49.3824,253.248,43.0185) +b0.l(253.248,36.6546,248.089,31.4956,241.725,31.4956) +b0.l(235.361,31.4956,230.202,36.6546,230.202,43.0185) +b0.l(230.202,49.3824,235.361,54.5414,241.725,54.5414) +b0.T(0) +b1=b4.B() +b1.sU(0,B.i) +b1.sA(0,B.I) +b6.a3(b0,b1) +b2=b4.Z() +b2.a4(0,241.725,40.7141) +b2.l(242.998,40.7141,244.03,39.6823,244.03,38.4096) +b2.l(244.03,37.1368,242.998,36.105,241.725,36.105) +b2.l(240.452,36.105,239.42,37.1368,239.42,38.4096) +b2.l(239.42,39.6823,240.452,40.7141,241.725,40.7141) +b2.T(0) +b3=b4.B() +b3.sU(0,B.i) +b3.sA(0,B.bN) +b6.a3(b2,b3)}, +cF(a){return!1}} +A.aFA.prototype={ +$0(){var s,r,q,p=this +switch(p.b.a){case 1:case 2:s=p.a +r=p.c +q=s.b-r +s=s.a +if(p.d)s=p.e.d-s-p.f +return new A.A(q,s,q+r*2,s+p.f) +case 0:case 3:s=p.a +r=s.b +if(p.d)r=p.e.c-r-p.f +q=p.c +s=s.a-q +return new A.A(r,s,r+p.f,s+q*2)}}, +$S:126} +A.abz.prototype={ +W(){return"SideButtonSide."+this.b}} +A.a4j.prototype={ +aO(a,b){var s,r,q=$.G().B() +q.sU(0,B.i) +s=b.a-4 +r=new A.A(0,4,0+s,4+(b.b-4)) +A.aFz(a,r,4,B.I,B.xo,!0,q,B.FX) +A.aFz(a,r,4,B.I,B.xl,!1,q,B.FY) +A.bmS(a,r,B.I,B.cV,B.Fc,B.cf,B.fH,q) +A.bmR(a,B.a_,5,new A.i(s*0.5,50),B.I,q,8,B.vc)}, +cF(a){return!1}} +A.a4k.prototype={ +aO(a,b){var s,r,q=$.G().B() +q.sU(0,B.i) +s=b.a-4 +r=new A.A(0,4,0+s,4+(b.b-4)) +A.aFz(a,r,4,B.I,B.xo,!0,q,B.FX) +A.aFz(a,r,4,B.I,B.xl,!1,q,B.FY) +A.bmS(a,r,B.I,B.cV,B.Fc,B.cf,B.fH,q) +A.bmR(a,B.a_,4,new A.i(s*0.5,70),B.I,q,6,B.vc)}, +cF(a){return!1}} +A.ajt.prototype={ +aO(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=2409,e=$.G(),d=e.Z() +d.a4(0,0,93.6833) +d.l(0,41.9435,41.9435,0,93.6833,0) +d.q(0,1579.23,0) +d.l(1630.97,0,1672.92,41.9435,1672.92,93.6833) +d.q(0,1672.92,2315.32) +d.l(1672.92,2367.06,1630.97,f,1579.23,f) +d.q(0,93.6833,f) +d.l(41.9435,f,0,2367.06,0,2315.32) +d.q(0,0,93.6833) +d.T(0) +s=e.B() +s.sU(0,B.i) +s.sA(0,B.cf) +a.a3(d,s) +r=e.Z() +r.a4(0,10.707,96.36) +r.l(10.707,49.055,49.0553,10.7067,96.3604,10.7067) +r.q(0,1576.56,10.7067) +r.l(1623.86,10.7067,1662.21,49.055,1662.21,96.36) +r.q(0,1662.21,2312.64) +r.l(1662.21,2359.95,1623.86,2398.29,1576.56,2398.29) +r.q(0,96.3604,2398.29) +r.l(49.0553,2398.29,10.707,2359.95,10.707,2312.64) +r.q(0,10.707,96.36) +r.T(0) +q=e.B() +q.sU(0,B.i) +q.sA(0,B.I) +a.a3(r,q) +p=e.Z() +p.a4(0,781.587,2316.66) +p.l(781.587,2346.96,806.154,2371.53,836.459,2371.53) +p.l(866.763,2371.53,891.33,2346.96,891.33,2316.66) +p.l(891.33,2286.35,866.763,2261.78,836.459,2261.78) +p.l(806.154,2261.78,781.587,2286.35,781.587,2316.66) +p.T(0) +p.a4(0,884.363,2316.66) +p.l(884.363,2343.11,862.916,2364.56,836.459,2364.56) +p.l(810.003,2364.56,788.556,2343.11,788.556,2316.66) +p.l(788.556,2290.2,810.003,2268.75,836.459,2268.75) +p.l(862.916,2268.75,884.363,2290.2,884.363,2316.66) +p.T(0) +o=e.B() +o.sU(0,B.i) +o.sA(0,B.a_) +a.a3(p,o) +n=e.Z() +n.a4(0,61.5635,176.66) +n.l(61.5635,173.703,63.9602,171.307,66.9168,171.307) +n.q(0,1606,171.307) +n.l(1608.96,171.307,1611.35,173.703,1611.35,176.66) +n.q(0,1611.35,2229.66) +n.l(1611.35,2232.62,1608.96,2235.02,1606,2235.02) +n.q(0,66.9168,2235.02) +n.l(63.9602,2235.02,61.5635,2232.62,61.5635,2229.66) +n.q(0,61.5635,176.66) +n.T(0) +m=e.B() +m.sU(0,B.i) +m.sA(0,B.a_) +a.a3(n,m) +l=e.Z() +l.a4(0,836.458,101.713) +l.l(843.11,101.713,848.503,96.3206,848.503,89.6683) +l.l(848.503,83.016,843.11,77.6233,836.458,77.6233) +l.l(829.806,77.6233,824.413,83.016,824.413,89.6683) +l.l(824.413,96.3206,829.806,101.713,836.458,101.713) +l.T(0) +k=e.B() +k.sU(0,B.i) +k.sA(0,B.a_) +a.a3(l,k) +j=e.Z() +j.a4(0,836.458,97.1964) +j.l(840.615,97.1964,843.986,93.8259,843.986,89.6683) +j.l(843.986,85.5106,840.615,82.1401,836.458,82.1401) +j.l(832.3,82.1401,828.93,85.5106,828.93,89.6683) +j.l(828.93,93.8259,832.3,97.1964,836.458,97.1964) +j.T(0) +i=e.B() +i.sU(0,B.i) +i.sA(0,B.I) +a.a3(j,i) +h=e.Z() +h.a4(0,836.458,88.1626) +h.l(837.289,88.1626,837.963,87.4885,837.963,86.657) +h.l(837.963,85.8255,837.289,85.1514,836.458,85.1514) +h.l(835.626,85.1514,834.952,85.8255,834.952,86.657) +h.l(834.952,87.4885,835.626,88.1626,836.458,88.1626) +h.T(0) +g=e.B() +g.sU(0,B.i) +g.sA(0,B.bN) +a.a3(h,g)}, +cF(a){return!1}} +A.aju.prototype={ +aO(a,b){var s,r,q,p,o,n,m,l,k,j=1811,i=$.G(),h=i.Z() +h.a4(0,0,133.53) +h.l(0,62.8561,57.2924,5.56372,127.966,5.56372) +h.q(0,1677.47,5.56372) +h.l(1748.14,5.56372,1805.44,62.8561,1805.44,133.53) +h.q(0,1805.44,2381.28) +h.l(1805.44,2451.96,1748.14,2509.25,1677.47,2509.25) +h.q(0,127.966,2509.25) +h.l(57.2924,2509.25,0,2451.96,0,2381.28) +h.q(0,0,133.53) +h.T(0) +s=i.B() +s.sU(0,B.i) +s.sA(0,B.cf) +a.a3(h,s) +r=i.Z() +r.a4(0,11.1279,133.53) +r.l(11.1279,69.0018,63.4384,16.6913,127.967,16.6913) +r.q(0,1677.47,16.6913) +r.l(1742,16.6913,1794.31,69.0018,1794.31,133.53) +r.q(0,1794.31,2381.28) +r.l(1794.31,2445.81,1742,2498.12,1677.47,2498.12) +r.q(0,127.967,2498.12) +r.l(63.4384,2498.12,11.1279,2445.81,11.1279,2381.28) +r.q(0,11.1279,133.53) +r.T(0) +q=i.B() +q.sU(0,B.i) +q.sA(0,B.I) +a.a3(r,q) +p=i.Z() +p.a4(0,1805.44,203.077) +p.l(1808.51,203.077,j,203.974,j,205.08) +p.q(0,j,301.221) +p.l(j,302.328,1808.51,303.224,1805.44,303.224) +p.q(0,1805.44,203.077) +p.T(0) +o=i.B() +o.sU(0,B.i) +o.sA(0,B.I) +a.a3(p,o) +n=i.Z() +n.a4(0,1805.44,322.697) +n.l(1808.51,322.697,j,323.619,j,324.756) +n.q(0,j,423.568) +n.l(j,424.705,1808.51,425.627,1805.44,425.627) +n.q(0,1805.44,322.697) +n.T(0) +m=i.B() +m.sU(0,B.i) +m.sA(0,B.I) +a.a3(n,m) +l=i.Z() +l.a4(0,1504.99,5.56372) +l.l(1504.99,2.49095,1506.54,0,1508.44,0) +l.l(0,0,1677.47,2.49094,1677.47,5.56371) +l.q(0,1504.99,5.56372) +l.T(0) +k=i.B() +k.sU(0,B.i) +k.sA(0,B.I) +a.a3(l,k)}, +cF(a){return!1}} +A.ajv.prototype={ +aO(a,b){var s,r,q,p,o,n,m,l,k,j=1741,i=$.G(),h=i.Z() +h.a4(0,0,128.369) +h.l(0,60.4267,55.0779,5.34875,123.02,5.34875) +h.q(0,1612.63,5.34875) +h.l(1680.57,5.34875,1735.65,60.4267,1735.65,128.369) +h.q(0,1735.65,2289.24) +h.l(1735.65,2357.18,1680.57,2412.26,1612.63,2412.26) +h.q(0,123.02,2412.26) +h.l(55.0779,2412.26,0,2357.18,0,2289.24) +h.q(0,0,128.369) +h.T(0) +s=i.B() +s.sU(0,B.i) +s.sA(0,B.cf) +a.a3(h,s) +r=i.Z() +r.a4(0,10.6973,128.369) +r.l(10.6973,66.3347,60.9858,16.0461,123.02,16.0461) +r.q(0,1612.63,16.0461) +r.l(1674.67,16.0461,1724.95,66.3347,1724.95,128.369) +r.q(0,1724.95,2289.24) +r.l(1724.95,2351.28,1674.67,2401.56,1612.63,2401.56) +r.q(0,123.02,2401.56) +r.l(60.9858,2401.56,10.6973,2351.28,10.6973,2289.24) +r.q(0,10.6973,128.369) +r.T(0) +q=i.B() +q.sU(0,B.i) +q.sA(0,B.I) +a.a3(r,q) +p=i.Z() +p.a4(0,1735.65,195.227) +p.l(1738.61,195.227,j,196.137,j,197.26) +p.q(0,j,294.82) +p.l(j,295.942,1738.61,296.852,1735.65,296.852) +p.q(0,1735.65,195.227) +p.T(0) +o=i.B() +o.sU(0,B.i) +o.sA(0,B.I) +a.a3(p,o) +n=i.Z() +n.a4(0,1735.65,310.224) +n.l(1738.61,310.224,j,311.134,j,312.257) +n.q(0,j,409.817) +n.l(j,410.939,1738.61,411.849,1735.65,411.849) +n.q(0,1735.65,310.224) +n.T(0) +m=i.B() +m.sU(0,B.i) +m.sA(0,B.I) +a.a3(n,m) +l=i.Z() +l.a4(0,1494.96,5.34875) +l.l(1494.96,2.39475,1496.04,0,1497.37,0) +l.q(0,1612.9,0) +l.l(1614.23,0,1615.31,2.39475,1615.31,5.34875) +l.q(0,1494.96,5.34875) +l.T(0) +k=i.B() +k.sU(0,B.i) +k.sA(0,B.I) +a.a3(l,k)}, +cF(a){return!1}} +A.ajw.prototype={ +aO(c1,c2){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=$.G(),c0=b9.Z() +c0.a4(0,866.809,454.042) +c0.q(0,869.904,454.042) +c0.l(871.614,454.042,873,455.428,873,457.138) +c0.q(0,873,659.394) +c0.l(873,661.103,871.614,662.489,869.904,662.489) +c0.q(0,866.809,662.489) +c0.q(0,866.809,454.042) +c0.T(0) +s=b9.B() +s.sU(0,B.i) +s.sA(0,B.jk) +c1.a3(c0,s) +r=b9.Z() +r.a4(0,6.19141,705.83) +r.q(0,3.09565,705.83) +r.l(1.38592,705.83,0,704.444,0,702.734) +r.q(0,0,580.968) +r.l(0,579.258,1.38593,577.872,3.09566,577.872) +r.q(0,6.19142,577.872) +r.q(0,6.19141,705.83) +r.T(0) +q=b9.B() +q.sU(0,B.i) +q.sA(0,B.jk) +c1.a3(r,q) +p=b9.Z() +p.a4(0,6.19141,536.596) +p.q(0,3.09565,536.596) +p.l(1.38592,536.596,0,535.21,0,533.5) +p.q(0,0,411.734) +p.l(0,410.024,1.38593,408.638,3.09566,408.638) +p.q(0,6.19142,408.638) +p.q(0,6.19141,536.596) +p.T(0) +o=b9.B() +o.sU(0,B.i) +o.sA(0,B.bs) +c1.a3(p,o) +n=b9.Z() +n.a4(0,6.19141,346.723) +n.q(0,3.09566,346.723) +n.l(1.38592,346.723,0,345.337,0,343.628) +n.q(0,0,283.777) +n.l(0,282.067,1.38593,280.681,3.09566,280.681) +n.q(0,6.19141,280.681) +n.q(0,6.19141,346.723) +n.T(0) +m=b9.B() +m.sU(0,B.i) +m.sA(0,B.bs) +c1.a3(n,m) +l=b9.Z() +l.a4(0,6.19141,187.809) +l.l(6.19141,137.871,6.19141,112.902,12.7571,92.6946) +l.l(26.0269,51.8546,58.046,19.8354,98.886,6.56572) +l.l(119.093,0,144.062,0,194,0) +l.q(0,679,0) +l.l(728.938,0,753.907,0,774.114,6.56572) +l.l(814.954,19.8354,846.973,51.8546,860.243,92.6946) +l.l(866.808,112.902,866.808,137.871,866.808,187.809) +l.q(0,866.808,1582.96) +l.l(866.808,1632.9,866.808,1657.86,860.243,1678.07) +l.l(846.973,1718.91,814.954,1750.93,774.114,1764.2) +l.l(753.907,1770.77,728.938,1770.77,679,1770.77) +l.q(0,194,1770.77) +l.l(144.062,1770.77,119.093,1770.77,98.886,1764.2) +l.l(58.046,1750.93,26.0269,1718.91,12.7571,1678.07) +l.l(6.19141,1657.86,6.19141,1632.9,6.19141,1582.96) +l.q(0,6.19141,187.809) +l.T(0) +k=b9.B() +k.sU(0,B.i) +k.sA(0,B.bs) +c1.a3(l,k) +j=b9.Z() +j.a4(0,679.825,4.12755) +j.q(0,193.174,4.12755) +j.l(143.844,4.12755,119.668,4.15301,100.161,10.4912) +j.l(60.5778,23.3527,29.5438,54.3866,16.6824,93.97) +j.l(10.3442,113.477,10.3187,137.653,10.3187,186.983) +j.q(0,10.3187,1583.78) +j.l(10.3187,1633.11,10.3442,1657.29,16.6824,1676.8) +j.l(29.5438,1716.38,60.5778,1747.41,100.161,1760.27) +j.l(119.668,1766.61,143.844,1766.64,193.174,1766.64) +j.q(0,679.825,1766.64) +j.l(729.155,1766.64,753.331,1766.61,772.838,1760.27) +j.l(812.421,1747.41,843.455,1716.38,856.317,1676.8) +j.l(862.655,1657.29,862.68,1633.11,862.68,1583.78) +j.q(0,862.68,186.983) +j.l(862.68,137.653,862.655,113.477,856.317,93.97) +j.l(843.455,54.3866,812.421,23.3527,772.838,10.4912) +j.l(753.331,4.15301,729.155,4.12755,679.825,4.12755) +j.T(0) +j.a4(0,14.7196,93.3323) +j.l(8.25488,113.229,8.25488,137.813,8.25488,186.983) +j.q(0,8.25488,1583.78) +j.l(8.25488,1632.95,8.25488,1657.54,14.7196,1677.43) +j.l(27.7852,1717.65,59.3117,1749.17,99.5235,1762.24) +j.l(119.42,1768.7,144.005,1768.7,193.174,1768.7) +j.q(0,679.825,1768.7) +j.l(728.995,1768.7,753.579,1768.7,773.476,1762.24) +j.l(813.687,1749.17,845.214,1717.65,858.28,1677.43) +j.l(864.744,1657.54,864.744,1632.95,864.744,1583.78) +j.q(0,864.744,186.983) +j.l(864.744,137.813,864.744,113.229,858.28,93.3323) +j.l(845.214,53.1206,813.687,21.594,773.476,8.52843) +j.l(753.579,2.06372,728.995,2.06372,679.825,2.06372) +j.q(0,193.174,2.06372) +j.l(144.005,2.06372,119.42,2.06372,99.5235,8.52843) +j.l(59.3117,21.594,27.7852,53.1206,14.7196,93.3323) +j.T(0) +i=b9.B() +i.sU(0,B.i) +i.sA(0,B.jn) +c1.a3(j,i) +h=b9.Z() +h.a4(0,16.5107,183.681) +h.l(16.5107,137.584,16.5107,114.536,22.5714,95.8834) +h.l(34.8204,58.1849,64.3765,28.6287,102.075,16.3798) +h.l(120.728,10.3191,143.776,10.3191,189.872,10.3191) +h.q(0,683.128,10.3191) +h.l(729.224,10.3191,752.272,10.3191,770.925,16.3798) +h.l(808.624,28.6287,838.18,58.1849,850.429,95.8834) +h.l(856.49,114.536,856.49,137.584,856.49,183.681) +h.q(0,856.49,1587.09) +h.l(856.49,1633.18,856.49,1656.23,850.429,1674.88) +h.l(838.18,1712.58,808.624,1742.14,770.925,1754.39) +h.l(752.272,1760.45,729.224,1760.45,683.128,1760.45) +h.q(0,189.872,1760.45) +h.l(143.776,1760.45,120.728,1760.45,102.075,1754.39) +h.l(64.3765,1742.14,34.8204,1712.58,22.5714,1674.88) +h.l(16.5107,1656.23,16.5107,1633.18,16.5107,1587.09) +h.q(0,16.5107,183.681) +h.T(0) +g=b9.B() +g.sU(0,B.i) +g.sA(0,B.I) +c1.a3(h,g) +f=b9.B() +f.sU(0,B.i) +f.sA(0,B.aI) +e=c2.a +d=e*0.7825063 +c=e*0.01418442 +b=c2.b +a=b*0.005826708 +c1.b7(new A.A(d,0,d+c,0+a),f) +a0=b9.B() +a0.sU(0,B.i) +a0.sA(0,B.aI) +d=e*0.9810871 +a1=b*0.1002196 +a2=e*0.01182027 +a3=b*0.006992095 +a4=d+a2 +a5=a1+a3 +c1.b7(new A.A(d,a1,a4,a5),a0) +a6=b9.B() +a6.sU(0,B.i) +a6.sA(0,B.aI) +a7=e*0.007092108 +a2=a7+a2 +c1.b7(new A.A(a7,a1,a2,a5),a6) +a8=b9.B() +a8.sU(0,B.i) +a8.sA(0,B.aI) +a5=b*0.8926539 +a3=a5+a3 +c1.b7(new A.A(a7,a5,a2,a3),a8) +a9=b9.B() +a9.sU(0,B.i) +a9.sA(0,B.aI) +c1.b7(new A.A(d,a5,a4,a3),a9) +b0=b9.B() +b0.sU(0,B.i) +b0.sA(0,B.aI) +e*=0.2033093 +b*=0.9940429 +c1.b7(new A.A(e,b,e+c,b+a),b0) +b1=b9.Z() +b1.a4(0,524.213,82.5533) +b1.l(533.331,82.5533,540.723,75.1612,540.723,66.0426) +b1.l(540.723,56.924,533.331,49.532,524.213,49.532) +b1.l(515.094,49.532,507.702,56.924,507.702,66.0426) +b1.l(507.702,75.1612,515.094,82.5533,524.213,82.5533) +b1.T(0) +b2=b9.B() +b2.sU(0,B.i) +b2.sA(0,B.a_) +c1.a3(b1,b2) +b3=b9.Z() +b3.a4(0,524.213,76.3617) +b3.l(529.912,76.3617,534.532,71.7416,534.532,66.0425) +b3.l(534.532,60.3434,529.912,55.7234,524.213,55.7234) +b3.l(518.514,55.7234,513.894,60.3434,513.894,66.0425) +b3.l(513.894,71.7416,518.514,76.3617,524.213,76.3617) +b3.T(0) +b4=b9.B() +b4.sU(0,B.i) +b4.sA(0,B.I) +c1.a3(b3,b4) +b5=b9.Z() +b5.a4(0,524.213,63.9787) +b5.l(525.353,63.9787,526.277,63.0547,526.277,61.9149) +b5.l(526.277,60.7751,525.353,59.8511,524.213,59.8511) +b5.l(523.073,59.8511,522.149,60.7751,522.149,61.9149) +b5.l(522.149,63.0547,523.073,63.9787,524.213,63.9787) +b5.T(0) +b6=b9.B() +b6.sU(0,B.i) +b6.sA(0,B.bN) +c1.a3(b5,b6) +b7=b9.Z() +b7.a4(0,385.937,66.0426) +b7.l(385.937,62.6231,388.709,59.8511,392.128,59.8511) +b7.q(0,480.873,59.8511) +b7.l(484.292,59.8511,487.064,62.6231,487.064,66.0426) +b7.q(0,487.064,66.0426) +b7.l(487.064,69.462,484.292,72.2341,480.873,72.2341) +b7.q(0,392.128,72.2341) +b7.l(388.709,72.2341,385.937,69.462,385.937,66.0426) +b7.q(0,385.937,66.0426) +b7.T(0) +b8=b9.B() +b8.sU(0,B.i) +b8.sA(0,B.a_) +c1.a3(b7,b8)}, +cF(a){return!1}} +A.ajx.prototype={ +aO(b7,b8){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=1768,b5=$.G(),b6=b5.Z() +b6.a4(0,864.822,473.939) +b6.q(0,867.911,473.939) +b6.l(869.617,473.939,871,475.323,871,477.03) +b6.q(0,871,703.697) +b6.l(871,705.404,869.617,706.788,867.911,706.788) +b6.q(0,864.822,706.788) +b6.q(0,864.822,473.939) +b6.T(0) +s=b5.B() +s.sU(0,B.i) +s.sA(0,B.cR) +b7.a3(b6,s) +r=b5.Z() +r.a4(0,6.17773,754.182) +r.q(0,3.08907,754.182) +r.l(1.38325,754.182,0.000418235,752.798,0.000418385,751.091) +r.q(0,0.000430265,615.091) +r.l(0.000430415,613.384,1.38327,612,3.08908,612) +r.q(0,6.17775,612) +r.q(0,6.17773,754.182) +r.T(0) +q=b5.B() +q.sU(0,B.i) +q.sA(0,B.cR) +b7.a3(r,q) +p=b5.Z() +p.a4(0,6.17773,566.667) +p.q(0,3.08907,566.667) +p.l(1.38325,566.667,0.000418235,565.283,0.000418385,563.576) +p.q(0,0.000430265,427.576) +p.l(0.000430415,425.869,1.38327,424.485,3.08908,424.485) +p.q(0,6.17775,424.485) +p.q(0,6.17773,566.667) +p.T(0) +o=b5.B() +o.sU(0,B.i) +o.sA(0,B.cR) +b7.a3(p,o) +n=b5.Z() +n.a4(0,6.17773,350.303) +n.q(0,3.08908,350.303) +n.l(1.38326,350.303,0.000424842,348.919,0.000424991,347.212) +n.q(0,0.000430571,283.333) +n.l(0.000430721,281.626,1.38327,280.242,3.08908,280.242) +n.q(0,6.17774,280.242) +n.q(0,6.17773,350.303) +n.T(0) +m=b5.B() +m.sU(0,B.i) +m.sA(0,B.cR) +b7.a3(n,m) +l=b5.Z() +l.a4(0,6.17773,187.515) +l.l(6.17773,137.655,6.17773,112.725,12.7284,92.5498) +l.l(25.9677,51.7736,57.9135,19.8045,98.66,6.55546) +l.l(118.821,0,143.733,0,193.556,0) +l.q(0,677.445,0) +l.l(727.268,0,752.18,0,772.341,6.55546) +l.l(813.087,19.8045,845.033,51.7736,858.272,92.5498) +l.l(864.823,112.725,864.823,137.655,864.823,187.515) +l.q(0,864.823,1580.48) +l.l(864.823,1630.34,864.823,1655.27,858.272,1675.45) +l.l(845.033,1716.23,813.087,1748.2,772.341,1761.44) +l.l(752.18,b4,727.268,b4,677.445,b4) +l.q(0,193.556,b4) +l.l(143.733,b4,118.821,b4,98.66,1761.44) +l.l(57.9135,1748.2,25.9677,1716.23,12.7284,1675.45) +l.l(6.17773,1655.27,6.17773,1630.34,6.17773,1580.48) +l.q(0,6.17773,187.515) +l.T(0) +k=b5.B() +k.sU(0,B.i) +k.sA(0,B.v3) +b7.a3(l,k) +j=b5.Z() +j.a4(0,678.268,6.18176) +j.q(0,192.732,6.18176) +j.l(143.354,6.18176,119.642,6.2326,100.568,12.4347) +j.l(61.7025,25.0722,31.2312,55.5658,18.6029,94.4601) +j.l(12.4053,113.548,12.3545,137.277,12.3545,186.691) +j.q(0,12.3545,1581.31) +j.l(12.3545,1630.72,12.4053,1654.45,18.6029,1673.54) +j.l(31.2312,1712.43,61.7025,1742.93,100.568,1755.57) +j.l(119.642,1761.77,143.354,1761.82,192.732,1761.82) +j.q(0,678.268,1761.82) +j.l(727.645,1761.82,751.357,1761.77,770.432,1755.57) +j.l(809.297,1742.93,839.769,1712.43,852.397,1673.54) +j.l(858.595,1654.45,858.645,1630.72,858.645,1581.31) +j.q(0,858.645,186.691) +j.l(858.645,137.277,858.595,113.548,852.397,94.4601) +j.l(839.769,55.5658,809.297,25.0722,770.432,12.4347) +j.l(751.357,6.2326,727.645,6.18176,678.268,6.18176) +j.T(0) +j.a4(0,14.6862,93.1865) +j.l(8.23633,113.052,8.23633,137.598,8.23633,186.691) +j.q(0,8.23633,1581.31) +j.l(8.23633,1630.4,8.23633,1654.95,14.6862,1674.81) +j.l(27.7219,1714.96,59.1762,1746.44,99.2958,1759.48) +j.l(119.147,1765.94,143.675,1765.94,192.732,1765.94) +j.q(0,678.268,1765.94) +j.l(727.325,1765.94,751.853,1765.94,771.704,1759.48) +j.l(811.824,1746.44,843.278,1714.96,856.314,1674.81) +j.l(862.764,1654.95,862.764,1630.4,862.764,1581.31) +j.q(0,862.764,186.691) +j.l(862.764,137.598,862.764,113.052,856.314,93.1865) +j.l(843.278,53.0376,811.824,21.5603,771.704,8.51515) +j.l(751.853,2.06055,727.325,2.06055,678.268,2.06055) +j.q(0,192.732,2.06055) +j.l(143.675,2.06055,119.147,2.06055,99.2958,8.51515) +j.l(59.1762,21.5603,27.7219,53.0376,14.6862,93.1865) +j.T(0) +i=b5.B() +i.sU(0,B.i) +i.sA(0,B.cR) +b7.a3(j,i) +h=b5.Z() +h.a4(0,16.4727,183.394) +h.l(16.4727,137.369,16.4727,114.357,22.5194,95.7336) +h.l(34.7404,58.094,64.2288,28.584,101.841,16.3542) +h.l(120.451,10.303,143.446,10.303,189.437,10.303) +h.q(0,681.562,10.303) +h.l(727.553,10.303,750.549,10.303,769.159,16.3542) +h.l(806.771,28.584,836.259,58.094,848.48,95.7336) +h.l(854.527,114.357,854.527,137.369,854.527,183.394) +h.q(0,854.527,1584.61) +h.l(854.527,1630.63,854.527,1653.64,848.48,1672.27) +h.l(836.259,1709.91,806.771,1739.42,769.159,1751.65) +h.l(750.549,1757.7,727.553,1757.7,681.562,1757.7) +h.q(0,189.437,1757.7) +h.l(143.446,1757.7,120.451,1757.7,101.841,1751.65) +h.l(64.2288,1739.42,34.7404,1709.91,22.5194,1672.27) +h.l(16.4727,1653.64,16.4727,1630.63,16.4727,1584.61) +h.q(0,16.4727,183.394) +h.T(0) +g=b5.B() +g.sU(0,B.i) +g.sA(0,B.I) +b7.a3(h,g) +f=b5.Z() +f.a4(0,677.445,0) +f.q(0,695.977,0) +f.q(0,695.977,10.303) +f.q(0,677.445,10.303) +f.q(0,677.445,0) +f.T(0) +e=b5.B() +e.sU(0,B.i) +e.sA(0,B.cg) +b7.a3(f,e) +d=b5.Z() +d.a4(0,854.527,177.212) +d.q(0,864.823,177.212) +d.q(0,864.823,195.758) +d.q(0,854.527,195.758) +d.q(0,854.527,177.212) +d.T(0) +c=b5.B() +c.sU(0,B.i) +c.sA(0,B.cg) +b7.a3(d,c) +b=b5.Z() +b.a4(0,6.17773,177.212) +b.q(0,16.4732,177.212) +b.q(0,16.4732,195.758) +b.q(0,6.17773,195.758) +b.q(0,6.17773,177.212) +b.T(0) +a=b5.B() +a.sU(0,B.i) +a.sA(0,B.cg) +b7.a3(b,a) +a0=b5.Z() +a0.a4(0,6.17773,1572.24) +a0.q(0,16.4732,1572.24) +a0.q(0,16.4732,1590.79) +a0.q(0,6.17773,1590.79) +a0.q(0,6.17773,1572.24) +a0.T(0) +a1=b5.B() +a1.sU(0,B.i) +a1.sA(0,B.cg) +b7.a3(a0,a1) +a2=b5.Z() +a2.a4(0,854.527,1572.24) +a2.q(0,864.823,1572.24) +a2.q(0,864.823,1590.79) +a2.q(0,854.527,1590.79) +a2.q(0,854.527,1572.24) +a2.T(0) +a3=b5.B() +a3.sU(0,B.i) +a3.sA(0,B.cg) +b7.a3(a2,a3) +a4=b5.Z() +a4.a4(0,175.024,1757.7) +a4.q(0,193.556,1757.7) +a4.q(0,193.556,b4) +a4.q(0,175.024,b4) +a4.q(0,175.024,1757.7) +a4.T(0) +a5=b5.B() +a5.sU(0,B.i) +a5.sA(0,B.cg) +b7.a3(a4,a5) +a6=b5.Z() +a6.a4(0,531.248,90.6667) +a6.l(540.346,90.6667,547.721,83.2862,547.721,74.1819) +a6.l(547.721,65.0775,540.346,57.697,531.248,57.697) +a6.l(522.151,57.697,514.775,65.0775,514.775,74.1819) +a6.l(514.775,83.2862,522.151,90.6667,531.248,90.6667) +a6.T(0) +a7=b5.B() +a7.sU(0,B.i) +a7.sA(0,B.a_) +b7.a3(a6,a7) +a8=b5.Z() +a8.a4(0,531.249,84.485) +a8.l(536.935,84.485,541.544,79.8721,541.544,74.1819) +a8.l(541.544,68.4917,536.935,63.8789,531.249,63.8789) +a8.l(525.563,63.8789,520.953,68.4917,520.953,74.1819) +a8.l(520.953,79.8721,525.563,84.485,531.249,84.485) +a8.T(0) +a9=b5.B() +a9.sU(0,B.i) +a9.sA(0,B.I) +b7.a3(a8,a9) +b0=b5.Z() +b0.a4(0,531.249,72.1212) +b0.l(532.386,72.1212,533.308,71.1986,533.308,70.0606) +b0.l(533.308,68.9226,532.386,68,531.249,68) +b0.l(530.111,68,529.189,68.9226,529.189,70.0606) +b0.l(529.189,71.1986,530.111,72.1212,531.249,72.1212) +b0.T(0) +b1=b5.B() +b1.sU(0,B.i) +b1.sA(0,B.bN) +b7.a3(b0,b1) +b2=b5.Z() +b2.a4(0,380.934,74.1818) +b2.l(380.934,70.7677,383.701,68,387.115,68) +b2.q(0,483.884,68) +b2.l(487.298,68,490.066,70.7677,490.066,74.1818) +b2.q(0,490.066,74.1818) +b2.l(490.066,77.5959,487.298,80.3636,483.884,80.3636) +b2.q(0,387.115,80.3636) +b2.l(383.701,80.3636,380.934,77.5959,380.934,74.1818) +b2.q(0,380.934,74.1818) +b2.T(0) +b3=b5.B() +b3.sU(0,B.i) +b3.sA(0,B.a_) +b7.a3(b2,b3)}, +cF(a){return!1}} +A.ajl.prototype={ +aO(b7,b8){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=1770,b5=$.G(),b6=b5.Z() +b6.a4(0,866.809,495.105) +b6.q(0,869.904,495.105) +b6.l(871.614,495.105,873,496.49,873,498.199) +b6.q(0,873,683.864) +b6.l(873,685.573,871.614,686.958,869.904,686.958) +b6.q(0,866.809,686.958) +b6.q(0,866.809,495.105) +b6.T(0) +s=b5.B() +s.sU(0,B.i) +s.sA(0,B.bs) +b7.a3(b6,s) +r=b5.Z() +r.a4(0,6.19141,728.217) +r.q(0,3.09565,728.217) +r.l(1.38592,728.217,0,726.831,0,725.122) +r.q(0,0,609.598) +r.l(0,607.889,1.38593,606.503,3.09566,606.503) +r.q(0,6.19142,606.503) +r.q(0,6.19141,728.217) +r.T(0) +q=b5.B() +q.sU(0,B.i) +q.sA(0,B.bs) +b7.a3(r,q) +p=b5.Z() +p.a4(0,6.19141,573.496) +p.q(0,3.09565,573.496) +p.l(1.38592,573.496,0,572.111,0,570.402) +p.q(0,0,454.877) +p.l(0,453.168,1.38593,451.783,3.09566,451.783) +p.q(0,6.19142,451.783) +p.q(0,6.19141,573.496) +p.T(0) +o=b5.B() +o.sU(0,B.i) +o.sA(0,B.bs) +b7.a3(p,o) +n=b5.Z() +n.a4(0,6.19141,398.147) +n.q(0,3.09566,398.147) +n.l(1.38592,398.147,0,396.761,0,395.052) +n.q(0,0,343.479) +n.l(0,341.77,1.38593,340.384,3.09566,340.384) +n.q(0,6.19141,340.384) +n.q(0,6.19141,398.147) +n.T(0) +m=b5.B() +m.sU(0,B.i) +m.sA(0,B.bs) +b7.a3(n,m) +l=b5.Z() +l.a4(0,6.19141,187.727) +l.l(6.19141,137.811,6.19141,112.853,12.7571,92.6545) +l.l(26.0269,51.8322,58.046,19.8269,98.886,6.56288) +l.l(119.093,0,144.062,0,194,0) +l.q(0,679,0) +l.l(728.938,0,753.907,0,774.114,6.56288) +l.l(814.954,19.8269,846.973,51.8322,860.243,92.6545) +l.l(866.808,112.853,866.808,137.811,866.808,187.727) +l.q(0,866.808,1582.27) +l.l(866.808,1632.19,866.808,1657.15,860.243,1677.35) +l.l(846.973,1718.17,814.954,1750.17,774.114,1763.44) +l.l(753.907,b4,728.938,b4,679,b4) +l.q(0,194,b4) +l.l(144.062,b4,119.093,b4,98.886,1763.44) +l.l(58.046,1750.17,26.0269,1718.17,12.7571,1677.35) +l.l(6.19141,1657.15,6.19141,1632.19,6.19141,1582.27) +l.q(0,6.19141,187.727) +l.T(0) +k=b5.B() +k.sU(0,B.i) +k.sA(0,B.bs) +b7.a3(l,k) +j=b5.Z() +j.a4(0,679.825,4.12593) +j.q(0,193.174,4.12593) +j.l(143.844,4.12593,119.668,4.15138,100.161,10.4869) +j.l(60.5778,23.3427,29.5438,54.3633,16.6824,93.9296) +j.l(10.3442,113.428,10.3187,137.593,10.3187,186.902) +j.q(0,10.3187,1583.1) +j.l(10.3187,1632.41,10.3442,1656.57,16.6824,1676.07) +j.l(29.5438,1715.64,60.5778,1746.66,100.161,1759.51) +j.l(119.668,1765.85,143.844,1765.87,193.174,1765.87) +j.q(0,679.825,1765.87) +j.l(729.155,1765.87,753.331,1765.85,772.838,1759.51) +j.l(812.421,1746.66,843.455,1715.64,856.317,1676.07) +j.l(862.655,1656.57,862.68,1632.41,862.68,1583.1) +j.q(0,862.68,186.902) +j.l(862.68,137.593,862.655,113.428,856.317,93.9296) +j.l(843.455,54.3633,812.421,23.3427,772.838,10.4869) +j.l(753.331,4.15138,729.155,4.12593,679.825,4.12593) +j.T(0) +j.a4(0,14.7196,93.2921) +j.l(8.25488,113.18,8.25488,137.754,8.25488,186.902) +j.q(0,8.25488,1583.1) +j.l(8.25488,1632.25,8.25488,1656.82,14.7196,1676.71) +j.l(27.7852,1716.9,59.3117,1748.42,99.5234,1761.48) +j.l(119.42,1767.94,144.005,1767.94,193.174,1767.94) +j.q(0,679.825,1767.94) +j.l(728.995,1767.94,753.579,1767.94,773.476,1761.48) +j.l(813.687,1748.42,845.214,1716.9,858.279,1676.71) +j.l(864.744,1656.82,864.744,1632.25,864.744,1583.1) +j.q(0,864.744,186.902) +j.l(864.744,137.754,864.744,113.18,858.279,93.2921) +j.l(845.214,53.0977,813.687,21.5848,773.476,8.5249) +j.l(753.579,2.06299,728.995,2.06299,679.825,2.06299) +j.q(0,193.174,2.06299) +j.l(144.005,2.06299,119.42,2.06299,99.5234,8.5249) +j.l(59.3117,21.5848,27.7852,53.0977,14.7196,93.2921) +j.T(0) +i=b5.B() +i.sU(0,B.i) +i.sA(0,B.jn) +b7.a3(j,i) +h=b5.Z() +h.a4(0,16.5107,183.601) +h.l(16.5107,137.525,16.5107,114.487,22.5714,95.842) +h.l(34.8204,58.1598,64.3765,28.6164,102.075,16.3727) +h.l(120.728,10.3147,143.776,10.3147,189.872,10.3147) +h.q(0,683.128,10.3147) +h.l(729.224,10.3147,752.272,10.3147,770.925,16.3727) +h.l(808.624,28.6164,838.18,58.1598,850.429,95.842) +h.l(856.489,114.487,856.489,137.525,856.489,183.601) +h.q(0,856.489,1586.4) +h.l(856.489,1632.48,856.489,1655.51,850.429,1674.16) +h.l(838.18,1711.84,808.624,1741.38,770.925,1753.63) +h.l(752.272,1759.69,729.224,1759.69,683.128,1759.69) +h.q(0,189.872,1759.69) +h.l(143.776,1759.69,120.728,1759.69,102.075,1753.63) +h.l(64.3765,1741.38,34.8204,1711.84,22.5714,1674.16) +h.l(16.5107,1655.51,16.5107,1632.48,16.5107,1586.4) +h.q(0,16.5107,183.601) +h.T(0) +g=b5.B() +g.sU(0,B.i) +g.sA(0,B.I) +b7.a3(h,g) +f=b5.Z() +f.a4(0,683.128,0) +f.q(0,695.511,0) +f.q(0,695.511,10.3147) +f.q(0,683.128,10.3147) +f.q(0,683.128,0) +f.T(0) +e=b5.B() +e.sU(0,B.i) +e.sA(0,B.aI) +b7.a3(f,e) +d=b5.Z() +d.a4(0,856.489,177.413) +d.q(0,866.808,177.413) +d.q(0,866.808,189.79) +d.q(0,856.489,189.79) +d.q(0,856.489,177.413) +d.T(0) +c=b5.B() +c.sU(0,B.i) +c.sA(0,B.aI) +b7.a3(d,c) +b=b5.Z() +b.a4(0,6.19141,177.413) +b.q(0,16.5106,177.413) +b.q(0,16.5106,189.79) +b.q(0,6.19141,189.79) +b.q(0,6.19141,177.413) +b.T(0) +a=b5.B() +a.sU(0,B.i) +a.sA(0,B.aI) +b7.a3(b,a) +a0=b5.Z() +a0.a4(0,6.19141,1580.21) +a0.q(0,16.5106,1580.21) +a0.q(0,16.5106,1592.59) +a0.q(0,6.19141,1592.59) +a0.q(0,6.19141,1580.21) +a0.T(0) +a1=b5.B() +a1.sU(0,B.i) +a1.sA(0,B.aI) +b7.a3(a0,a1) +a2=b5.Z() +a2.a4(0,856.489,1580.21) +a2.q(0,866.808,1580.21) +a2.q(0,866.808,1592.59) +a2.q(0,856.489,1592.59) +a2.q(0,856.489,1580.21) +a2.T(0) +a3=b5.B() +a3.sU(0,B.i) +a3.sA(0,B.aI) +b7.a3(a2,a3) +a4=b5.Z() +a4.a4(0,177.489,1759.69) +a4.q(0,189.872,1759.69) +a4.q(0,189.872,b4) +a4.q(0,177.489,b4) +a4.q(0,177.489,1759.69) +a4.T(0) +a5=b5.B() +a5.sU(0,B.i) +a5.sA(0,B.aI) +b7.a3(a4,a5) +a6=b5.Z() +a6.a4(0,515.958,76.3286) +a6.l(523.936,76.3286,530.404,69.8634,530.404,61.8881) +a6.l(530.404,53.9128,523.936,47.4475,515.958,47.4475) +a6.l(507.979,47.4475,501.511,53.9128,501.511,61.8881) +a6.l(501.511,69.8634,507.979,76.3286,515.958,76.3286) +a6.T(0) +a7=b5.B() +a7.sU(0,B.i) +a7.sA(0,B.a_) +b7.a3(a6,a7) +a8=b5.Z() +a8.a4(0,515.958,70.9135) +a8.l(520.945,70.9135,524.987,66.8727,524.987,61.8881) +a8.l(524.987,56.9036,520.945,52.8628,515.958,52.8628) +a8.l(510.971,52.8628,506.929,56.9036,506.929,61.8881) +a8.l(506.929,66.8727,510.971,70.9135,515.958,70.9135) +a8.T(0) +a9=b5.B() +a9.sU(0,B.i) +a9.sA(0,B.I) +b7.a3(a8,a9) +b0=b5.Z() +b0.a4(0,515.957,60.083) +b0.l(516.955,60.083,517.763,59.2749,517.763,58.278) +b0.l(517.763,57.2811,516.955,56.4729,515.957,56.4729) +b0.l(514.96,56.4729,514.151,57.2811,514.151,58.278) +b0.l(514.151,59.2749,514.96,60.083,515.957,60.083) +b0.T(0) +b1=b5.B() +b1.sU(0,B.i) +b1.sA(0,B.bN) +b7.a3(b0,b1) +b2=b5.Z() +b2.a4(0,392.128,61.888) +b2.l(392.128,58.47,394.899,55.6992,398.317,55.6992) +b2.q(0,474.684,55.6992) +b2.l(478.102,55.6992,480.873,58.47,480.873,61.888) +b2.q(0,480.873,61.888) +b2.l(480.873,65.306,478.102,68.0768,474.684,68.0768) +b2.q(0,398.317,68.0768) +b2.l(394.899,68.0768,392.128,65.306,392.128,61.888) +b2.q(0,392.128,61.888) +b2.T(0) +b3=b5.B() +b3.sU(0,B.i) +b3.sA(0,B.a_) +b7.a3(b2,b3)}, +cF(a){return!1}} +A.ajm.prototype={ +aO(c1,c2){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=$.G(),c0=b9.Z() +c0.a4(0,866.809,454.042) +c0.q(0,869.904,454.042) +c0.l(871.614,454.042,873,455.428,873,457.138) +c0.q(0,873,659.394) +c0.l(873,661.103,871.614,662.489,869.904,662.489) +c0.q(0,866.809,662.489) +c0.q(0,866.809,454.042) +c0.T(0) +s=b9.B() +s.sU(0,B.i) +s.sA(0,B.jk) +c1.a3(c0,s) +r=b9.Z() +r.a4(0,6.19141,705.83) +r.q(0,3.09565,705.83) +r.l(1.38592,705.83,0,704.444,0,702.734) +r.q(0,0,580.968) +r.l(0,579.258,1.38593,577.872,3.09566,577.872) +r.q(0,6.19142,577.872) +r.q(0,6.19141,705.83) +r.T(0) +q=b9.B() +q.sU(0,B.i) +q.sA(0,B.jk) +c1.a3(r,q) +p=b9.Z() +p.a4(0,6.19141,536.596) +p.q(0,3.09565,536.596) +p.l(1.38592,536.596,0,535.21,0,533.5) +p.q(0,0,411.734) +p.l(0,410.024,1.38593,408.638,3.09566,408.638) +p.q(0,6.19142,408.638) +p.q(0,6.19141,536.596) +p.T(0) +o=b9.B() +o.sU(0,B.i) +o.sA(0,B.bs) +c1.a3(p,o) +n=b9.Z() +n.a4(0,6.19141,346.723) +n.q(0,3.09566,346.723) +n.l(1.38592,346.723,0,345.337,0,343.628) +n.q(0,0,283.777) +n.l(0,282.067,1.38593,280.681,3.09566,280.681) +n.q(0,6.19141,280.681) +n.q(0,6.19141,346.723) +n.T(0) +m=b9.B() +m.sU(0,B.i) +m.sA(0,B.bs) +c1.a3(n,m) +l=b9.Z() +l.a4(0,6.19141,187.809) +l.l(6.19141,137.871,6.19141,112.902,12.7571,92.6946) +l.l(26.0269,51.8546,58.046,19.8354,98.886,6.56572) +l.l(119.093,0,144.062,0,194,0) +l.q(0,679,0) +l.l(728.938,0,753.907,0,774.114,6.56572) +l.l(814.954,19.8354,846.973,51.8546,860.243,92.6946) +l.l(866.808,112.902,866.808,137.871,866.808,187.809) +l.q(0,866.808,1582.96) +l.l(866.808,1632.9,866.808,1657.86,860.243,1678.07) +l.l(846.973,1718.91,814.954,1750.93,774.114,1764.2) +l.l(753.907,1770.77,728.938,1770.77,679,1770.77) +l.q(0,194,1770.77) +l.l(144.062,1770.77,119.093,1770.77,98.886,1764.2) +l.l(58.046,1750.93,26.0269,1718.91,12.7571,1678.07) +l.l(6.19141,1657.86,6.19141,1632.9,6.19141,1582.96) +l.q(0,6.19141,187.809) +l.T(0) +k=b9.B() +k.sU(0,B.i) +k.sA(0,B.bs) +c1.a3(l,k) +j=b9.Z() +j.a4(0,679.825,4.12755) +j.q(0,193.174,4.12755) +j.l(143.844,4.12755,119.668,4.15301,100.161,10.4912) +j.l(60.5778,23.3527,29.5438,54.3866,16.6824,93.97) +j.l(10.3442,113.477,10.3187,137.653,10.3187,186.983) +j.q(0,10.3187,1583.78) +j.l(10.3187,1633.11,10.3442,1657.29,16.6824,1676.8) +j.l(29.5438,1716.38,60.5778,1747.41,100.161,1760.27) +j.l(119.668,1766.61,143.844,1766.64,193.174,1766.64) +j.q(0,679.825,1766.64) +j.l(729.155,1766.64,753.331,1766.61,772.838,1760.27) +j.l(812.421,1747.41,843.455,1716.38,856.317,1676.8) +j.l(862.655,1657.29,862.68,1633.11,862.68,1583.78) +j.q(0,862.68,186.983) +j.l(862.68,137.653,862.655,113.477,856.317,93.97) +j.l(843.455,54.3866,812.421,23.3527,772.838,10.4912) +j.l(753.331,4.15301,729.155,4.12755,679.825,4.12755) +j.T(0) +j.a4(0,14.7196,93.3323) +j.l(8.25488,113.229,8.25488,137.813,8.25488,186.983) +j.q(0,8.25488,1583.78) +j.l(8.25488,1632.95,8.25488,1657.54,14.7196,1677.43) +j.l(27.7852,1717.65,59.3117,1749.17,99.5235,1762.24) +j.l(119.42,1768.7,144.005,1768.7,193.174,1768.7) +j.q(0,679.825,1768.7) +j.l(728.995,1768.7,753.579,1768.7,773.476,1762.24) +j.l(813.687,1749.17,845.214,1717.65,858.28,1677.43) +j.l(864.744,1657.54,864.744,1632.95,864.744,1583.78) +j.q(0,864.744,186.983) +j.l(864.744,137.813,864.744,113.229,858.28,93.3323) +j.l(845.214,53.1206,813.687,21.594,773.476,8.52843) +j.l(753.579,2.06372,728.995,2.06372,679.825,2.06372) +j.q(0,193.174,2.06372) +j.l(144.005,2.06372,119.42,2.06372,99.5235,8.52843) +j.l(59.3117,21.594,27.7852,53.1206,14.7196,93.3323) +j.T(0) +i=b9.B() +i.sU(0,B.i) +i.sA(0,B.jn) +c1.a3(j,i) +h=b9.Z() +h.a4(0,16.5107,183.681) +h.l(16.5107,137.584,16.5107,114.536,22.5714,95.8834) +h.l(34.8204,58.1849,64.3765,28.6287,102.075,16.3798) +h.l(120.728,10.3191,143.776,10.3191,189.872,10.3191) +h.q(0,683.128,10.3191) +h.l(729.224,10.3191,752.272,10.3191,770.925,16.3798) +h.l(808.624,28.6287,838.18,58.1849,850.429,95.8834) +h.l(856.49,114.536,856.49,137.584,856.49,183.681) +h.q(0,856.49,1587.09) +h.l(856.49,1633.18,856.49,1656.23,850.429,1674.88) +h.l(838.18,1712.58,808.624,1742.14,770.925,1754.39) +h.l(752.272,1760.45,729.224,1760.45,683.128,1760.45) +h.q(0,189.872,1760.45) +h.l(143.776,1760.45,120.728,1760.45,102.075,1754.39) +h.l(64.3765,1742.14,34.8204,1712.58,22.5714,1674.88) +h.l(16.5107,1656.23,16.5107,1633.18,16.5107,1587.09) +h.q(0,16.5107,183.681) +h.T(0) +g=b9.B() +g.sU(0,B.i) +g.sA(0,B.I) +c1.a3(h,g) +f=b9.Z() +f.a4(0,365,10) +f.q(0,506,10) +f.q(0,506,14) +f.l(506,18.4183,502.418,22,498,22) +f.q(0,373,22) +f.l(368.582,22,365,18.4183,365,14) +f.q(0,365,10) +f.T(0) +e=b9.B() +e.sU(0,B.i) +e.sA(0,B.a_) +c1.a3(f,e) +d=b9.B() +d.sU(0,B.i) +d.sA(0,B.aI) +c=c2.a +b=c*0.7825063 +a=c*0.01418442 +a0=c2.b +a1=a0*0.005826708 +c1.b7(new A.A(b,0,b+a,0+a1),d) +a2=b9.B() +a2.sU(0,B.i) +a2.sA(0,B.aI) +b=c*0.9810871 +a3=a0*0.1002196 +a4=c*0.01182027 +a5=a0*0.006992095 +a6=b+a4 +a7=a3+a5 +c1.b7(new A.A(b,a3,a6,a7),a2) +a8=b9.B() +a8.sU(0,B.i) +a8.sA(0,B.aI) +a9=c*0.007092108 +a4=a9+a4 +c1.b7(new A.A(a9,a3,a4,a7),a8) +b0=b9.B() +b0.sU(0,B.i) +b0.sA(0,B.aI) +a7=a0*0.8926539 +a5=a7+a5 +c1.b7(new A.A(a9,a7,a4,a5),b0) +b1=b9.B() +b1.sU(0,B.i) +b1.sA(0,B.aI) +c1.b7(new A.A(b,a7,a6,a5),b1) +b2=b9.B() +b2.sU(0,B.i) +b2.sA(0,B.aI) +c*=0.2033093 +a0*=0.9940429 +c1.b7(new A.A(c,a0,c+a,a0+a1),b2) +b3=b9.Z() +b3.a4(0,328.511,77.0213) +b3.l(337.629,77.0213,345.021,69.6292,345.021,60.5106) +b3.l(345.021,51.3921,337.629,44,328.511,44) +b3.l(319.392,44,312,51.3921,312,60.5106) +b3.l(312,69.6292,319.392,77.0213,328.511,77.0213) +b3.T(0) +b4=b9.B() +b4.sU(0,B.i) +b4.sA(0,B.a_) +c1.a3(b3,b4) +b5=b9.Z() +b5.a4(0,328.511,70.8297) +b5.l(334.21,70.8297,338.83,66.2097,338.83,60.5106) +b5.l(338.83,54.8114,334.21,50.1914,328.511,50.1914) +b5.l(322.811,50.1914,318.191,54.8114,318.191,60.5106) +b5.l(318.191,66.2097,322.811,70.8297,328.511,70.8297) +b5.T(0) +b6=b9.B() +b6.sU(0,B.i) +b6.sA(0,B.I) +c1.a3(b5,b6) +b7=b9.Z() +b7.a4(0,328.511,58.4468) +b7.l(329.651,58.4468,330.575,57.5227,330.575,56.3829) +b7.l(330.575,55.2431,329.651,54.3191,328.511,54.3191) +b7.l(327.371,54.3191,326.447,55.2431,326.447,56.3829) +b7.l(326.447,57.5227,327.371,58.4468,328.511,58.4468) +b7.T(0) +b8=b9.B() +b8.sU(0,B.i) +b8.sA(0,B.bN) +c1.a3(b7,b8)}, +cF(a){return!1}} +A.ajn.prototype={ +aO(b7,b8){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=1768,b5=$.G(),b6=b5.Z() +b6.a4(0,864.822,473.939) +b6.q(0,867.911,473.939) +b6.l(869.617,473.939,871,475.323,871,477.03) +b6.q(0,871,703.697) +b6.l(871,705.404,869.617,706.788,867.911,706.788) +b6.q(0,864.822,706.788) +b6.q(0,864.822,473.939) +b6.T(0) +s=b5.B() +s.sU(0,B.i) +s.sA(0,B.cR) +b7.a3(b6,s) +r=b5.Z() +r.a4(0,6.17773,754.182) +r.q(0,3.08907,754.182) +r.l(1.38325,754.182,0.000418235,752.798,0.000418385,751.091) +r.q(0,0.000430265,615.091) +r.l(0.000430415,613.384,1.38327,612,3.08908,612) +r.q(0,6.17775,612) +r.q(0,6.17773,754.182) +r.T(0) +q=b5.B() +q.sU(0,B.i) +q.sA(0,B.cR) +b7.a3(r,q) +p=b5.Z() +p.a4(0,6.17773,566.667) +p.q(0,3.08907,566.667) +p.l(1.38325,566.667,0.000418235,565.283,0.000418385,563.576) +p.q(0,0.000430265,427.576) +p.l(0.000430415,425.869,1.38327,424.485,3.08908,424.485) +p.q(0,6.17775,424.485) +p.q(0,6.17773,566.667) +p.T(0) +o=b5.B() +o.sU(0,B.i) +o.sA(0,B.cR) +b7.a3(p,o) +n=b5.Z() +n.a4(0,6.17773,350.303) +n.q(0,3.08908,350.303) +n.l(1.38326,350.303,0.000424842,348.919,0.000424991,347.212) +n.q(0,0.000430571,283.333) +n.l(0.000430721,281.626,1.38327,280.242,3.08908,280.242) +n.q(0,6.17774,280.242) +n.q(0,6.17773,350.303) +n.T(0) +m=b5.B() +m.sU(0,B.i) +m.sA(0,B.cR) +b7.a3(n,m) +l=b5.Z() +l.a4(0,6.17773,187.515) +l.l(6.17773,137.655,6.17773,112.725,12.7284,92.5498) +l.l(25.9677,51.7736,57.9135,19.8045,98.66,6.55546) +l.l(118.821,0,143.733,0,193.556,0) +l.q(0,677.445,0) +l.l(727.268,0,752.18,0,772.341,6.55546) +l.l(813.087,19.8045,845.033,51.7736,858.272,92.5498) +l.l(864.823,112.725,864.823,137.655,864.823,187.515) +l.q(0,864.823,1580.48) +l.l(864.823,1630.34,864.823,1655.27,858.272,1675.45) +l.l(845.033,1716.23,813.087,1748.2,772.341,1761.44) +l.l(752.18,b4,727.268,b4,677.445,b4) +l.q(0,193.556,b4) +l.l(143.733,b4,118.821,b4,98.66,1761.44) +l.l(57.9135,1748.2,25.9677,1716.23,12.7284,1675.45) +l.l(6.17773,1655.27,6.17773,1630.34,6.17773,1580.48) +l.q(0,6.17773,187.515) +l.T(0) +k=b5.B() +k.sU(0,B.i) +k.sA(0,B.v3) +b7.a3(l,k) +j=b5.Z() +j.a4(0,678.268,6.18176) +j.q(0,192.732,6.18176) +j.l(143.354,6.18176,119.642,6.2326,100.568,12.4347) +j.l(61.7025,25.0722,31.2312,55.5658,18.6029,94.4601) +j.l(12.4053,113.548,12.3545,137.277,12.3545,186.691) +j.q(0,12.3545,1581.31) +j.l(12.3545,1630.72,12.4053,1654.45,18.6029,1673.54) +j.l(31.2312,1712.43,61.7025,1742.93,100.568,1755.57) +j.l(119.642,1761.77,143.354,1761.82,192.732,1761.82) +j.q(0,678.268,1761.82) +j.l(727.645,1761.82,751.357,1761.77,770.432,1755.57) +j.l(809.297,1742.93,839.769,1712.43,852.397,1673.54) +j.l(858.595,1654.45,858.645,1630.72,858.645,1581.31) +j.q(0,858.645,186.691) +j.l(858.645,137.277,858.595,113.548,852.397,94.4601) +j.l(839.769,55.5658,809.297,25.0722,770.432,12.4347) +j.l(751.357,6.2326,727.645,6.18176,678.268,6.18176) +j.T(0) +j.a4(0,14.6862,93.1865) +j.l(8.23633,113.052,8.23633,137.598,8.23633,186.691) +j.q(0,8.23633,1581.31) +j.l(8.23633,1630.4,8.23633,1654.95,14.6862,1674.81) +j.l(27.7219,1714.96,59.1762,1746.44,99.2958,1759.48) +j.l(119.147,1765.94,143.675,1765.94,192.732,1765.94) +j.q(0,678.268,1765.94) +j.l(727.325,1765.94,751.853,1765.94,771.704,1759.48) +j.l(811.824,1746.44,843.278,1714.96,856.314,1674.81) +j.l(862.764,1654.95,862.764,1630.4,862.764,1581.31) +j.q(0,862.764,186.691) +j.l(862.764,137.598,862.764,113.052,856.314,93.1865) +j.l(843.278,53.0376,811.824,21.5603,771.704,8.51515) +j.l(751.853,2.06055,727.325,2.06055,678.268,2.06055) +j.q(0,192.732,2.06055) +j.l(143.675,2.06055,119.147,2.06055,99.2958,8.51515) +j.l(59.1762,21.5603,27.7219,53.0376,14.6862,93.1865) +j.T(0) +i=b5.B() +i.sU(0,B.i) +i.sA(0,B.cR) +b7.a3(j,i) +h=b5.Z() +h.a4(0,16.4727,183.394) +h.l(16.4727,137.369,16.4727,114.357,22.5194,95.7336) +h.l(34.7404,58.094,64.2288,28.584,101.841,16.3542) +h.l(120.451,10.303,143.446,10.303,189.437,10.303) +h.q(0,681.562,10.303) +h.l(727.553,10.303,750.549,10.303,769.159,16.3542) +h.l(806.771,28.584,836.259,58.094,848.48,95.7336) +h.l(854.527,114.357,854.527,137.369,854.527,183.394) +h.q(0,854.527,1584.61) +h.l(854.527,1630.63,854.527,1653.64,848.48,1672.27) +h.l(836.259,1709.91,806.771,1739.42,769.159,1751.65) +h.l(750.549,1757.7,727.553,1757.7,681.562,1757.7) +h.q(0,189.437,1757.7) +h.l(143.446,1757.7,120.451,1757.7,101.841,1751.65) +h.l(64.2288,1739.42,34.7404,1709.91,22.5194,1672.27) +h.l(16.4727,1653.64,16.4727,1630.63,16.4727,1584.61) +h.q(0,16.4727,183.394) +h.T(0) +g=b5.B() +g.sU(0,B.i) +g.sA(0,B.I) +b7.a3(h,g) +f=b5.Z() +f.a4(0,677.445,0) +f.q(0,695.977,0) +f.q(0,695.977,10.303) +f.q(0,677.445,10.303) +f.q(0,677.445,0) +f.T(0) +e=b5.B() +e.sU(0,B.i) +e.sA(0,B.cg) +b7.a3(f,e) +d=b5.Z() +d.a4(0,854.527,177.212) +d.q(0,864.823,177.212) +d.q(0,864.823,195.758) +d.q(0,854.527,195.758) +d.q(0,854.527,177.212) +d.T(0) +c=b5.B() +c.sU(0,B.i) +c.sA(0,B.cg) +b7.a3(d,c) +b=b5.Z() +b.a4(0,6.17773,177.212) +b.q(0,16.4732,177.212) +b.q(0,16.4732,195.758) +b.q(0,6.17773,195.758) +b.q(0,6.17773,177.212) +b.T(0) +a=b5.B() +a.sU(0,B.i) +a.sA(0,B.cg) +b7.a3(b,a) +a0=b5.Z() +a0.a4(0,6.17773,1572.24) +a0.q(0,16.4732,1572.24) +a0.q(0,16.4732,1590.79) +a0.q(0,6.17773,1590.79) +a0.q(0,6.17773,1572.24) +a0.T(0) +a1=b5.B() +a1.sU(0,B.i) +a1.sA(0,B.cg) +b7.a3(a0,a1) +a2=b5.Z() +a2.a4(0,854.527,1572.24) +a2.q(0,864.823,1572.24) +a2.q(0,864.823,1590.79) +a2.q(0,854.527,1590.79) +a2.q(0,854.527,1572.24) +a2.T(0) +a3=b5.B() +a3.sU(0,B.i) +a3.sA(0,B.cg) +b7.a3(a2,a3) +a4=b5.Z() +a4.a4(0,175.024,1757.7) +a4.q(0,193.556,1757.7) +a4.q(0,193.556,b4) +a4.q(0,175.024,b4) +a4.q(0,175.024,1757.7) +a4.T(0) +a5=b5.B() +a5.sU(0,B.i) +a5.sA(0,B.cg) +b7.a3(a4,a5) +a6=b5.Z() +a6.a4(0,304.473,85.9697) +a6.l(313.57,85.9697,320.946,78.5892,320.946,69.4848) +a6.l(320.946,60.3805,313.57,53,304.473,53) +a6.l(295.375,53,288,60.3805,288,69.4848) +a6.l(288,78.5892,295.375,85.9697,304.473,85.9697) +a6.T(0) +a7=b5.B() +a7.sU(0,B.i) +a7.sA(0,B.a_) +b7.a3(a6,a7) +a8=b5.Z() +a8.a4(0,304.473,79.7879) +a8.l(310.159,79.7879,314.769,75.1751,314.769,69.4849) +a8.l(314.769,63.7947,310.159,59.1819,304.473,59.1819) +a8.l(298.787,59.1819,294.178,63.7947,294.178,69.4849) +a8.l(294.178,75.1751,298.787,79.7879,304.473,79.7879) +a8.T(0) +a9=b5.B() +a9.sU(0,B.i) +a9.sA(0,B.I) +b7.a3(a8,a9) +b0=b5.Z() +b0.a4(0,304.473,67.4242) +b0.l(305.61,67.4242,306.532,66.5016,306.532,65.3636) +b0.l(306.532,64.2255,305.61,63.303,304.473,63.303) +b0.l(303.336,63.303,302.414,64.2255,302.414,65.3636) +b0.l(302.414,66.5016,303.336,67.4242,304.473,67.4242) +b0.T(0) +b1=b5.B() +b1.sU(0,B.i) +b1.sA(0,B.bN) +b7.a3(b0,b1) +b2=b5.Z() +b2.a4(0,361,10) +b2.q(0,510,10) +b2.q(0,510,14) +b2.l(510,18.4183,506.418,22,502,22) +b2.q(0,369,22) +b2.l(364.582,22,361,18.4183,361,14) +b2.q(0,361,10) +b2.T(0) +b3=b5.B() +b3.sU(0,B.i) +b3.sA(0,B.a_) +b7.a3(b2,b3)}, +cF(a){return!1}} +A.ajo.prototype={ +aO(b7,b8){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=1770,b5=$.G(),b6=b5.Z() +b6.a4(0,866.809,495.105) +b6.q(0,869.904,495.105) +b6.l(871.614,495.105,873,496.49,873,498.199) +b6.q(0,873,683.864) +b6.l(873,685.573,871.614,686.958,869.904,686.958) +b6.q(0,866.809,686.958) +b6.q(0,866.809,495.105) +b6.T(0) +s=b5.B() +s.sU(0,B.i) +s.sA(0,B.bs) +b7.a3(b6,s) +r=b5.Z() +r.a4(0,6.19141,728.217) +r.q(0,3.09565,728.217) +r.l(1.38592,728.217,0,726.831,0,725.122) +r.q(0,0,609.598) +r.l(0,607.889,1.38593,606.503,3.09566,606.503) +r.q(0,6.19142,606.503) +r.q(0,6.19141,728.217) +r.T(0) +q=b5.B() +q.sU(0,B.i) +q.sA(0,B.bs) +b7.a3(r,q) +p=b5.Z() +p.a4(0,6.19141,573.496) +p.q(0,3.09565,573.496) +p.l(1.38592,573.496,0,572.111,0,570.402) +p.q(0,0,454.877) +p.l(0,453.168,1.38593,451.783,3.09566,451.783) +p.q(0,6.19142,451.783) +p.q(0,6.19141,573.496) +p.T(0) +o=b5.B() +o.sU(0,B.i) +o.sA(0,B.bs) +b7.a3(p,o) +n=b5.Z() +n.a4(0,6.19141,398.147) +n.q(0,3.09566,398.147) +n.l(1.38592,398.147,0,396.761,0,395.052) +n.q(0,0,343.479) +n.l(0,341.77,1.38593,340.384,3.09566,340.384) +n.q(0,6.19141,340.384) +n.q(0,6.19141,398.147) +n.T(0) +m=b5.B() +m.sU(0,B.i) +m.sA(0,B.bs) +b7.a3(n,m) +l=b5.Z() +l.a4(0,6.19141,187.727) +l.l(6.19141,137.811,6.19141,112.853,12.7571,92.6545) +l.l(26.0269,51.8322,58.046,19.8269,98.886,6.56288) +l.l(119.093,0,144.062,0,194,0) +l.q(0,679,0) +l.l(728.938,0,753.907,0,774.114,6.56288) +l.l(814.954,19.8269,846.973,51.8322,860.243,92.6545) +l.l(866.808,112.853,866.808,137.811,866.808,187.727) +l.q(0,866.808,1582.27) +l.l(866.808,1632.19,866.808,1657.15,860.243,1677.35) +l.l(846.973,1718.17,814.954,1750.17,774.114,1763.44) +l.l(753.907,b4,728.938,b4,679,b4) +l.q(0,194,b4) +l.l(144.062,b4,119.093,b4,98.886,1763.44) +l.l(58.046,1750.17,26.0269,1718.17,12.7571,1677.35) +l.l(6.19141,1657.15,6.19141,1632.19,6.19141,1582.27) +l.q(0,6.19141,187.727) +l.T(0) +k=b5.B() +k.sU(0,B.i) +k.sA(0,B.bs) +b7.a3(l,k) +j=b5.Z() +j.a4(0,679.824,4.12593) +j.q(0,193.173,4.12593) +j.l(143.843,4.12593,119.667,4.15138,100.16,10.4869) +j.l(60.5768,23.3427,29.5429,54.3633,16.6814,93.9296) +j.l(10.3432,113.428,10.3177,137.593,10.3177,186.902) +j.q(0,10.3177,1583.1) +j.l(10.3177,1632.41,10.3432,1656.57,16.6814,1676.07) +j.l(29.5429,1715.64,60.5768,1746.66,100.16,1759.51) +j.l(119.667,1765.85,143.843,1765.87,193.173,1765.87) +j.q(0,679.824,1765.87) +j.l(729.154,1765.87,753.33,1765.85,772.837,1759.51) +j.l(812.42,1746.66,843.454,1715.64,856.316,1676.07) +j.l(862.654,1656.57,862.679,1632.41,862.679,1583.1) +j.q(0,862.679,186.902) +j.l(862.679,137.593,862.654,113.428,856.316,93.9296) +j.l(843.454,54.3633,812.42,23.3427,772.837,10.4869) +j.l(753.33,4.15138,729.154,4.12593,679.824,4.12593) +j.T(0) +j.a4(0,14.7186,93.2921) +j.l(8.25391,113.18,8.25391,137.754,8.25391,186.902) +j.q(0,8.25391,1583.1) +j.l(8.25391,1632.25,8.25391,1656.82,14.7186,1676.71) +j.l(27.7842,1716.9,59.3107,1748.42,99.5225,1761.48) +j.l(119.419,1767.94,144.004,1767.94,193.173,1767.94) +j.q(0,679.824,1767.94) +j.l(728.994,1767.94,753.578,1767.94,773.475,1761.48) +j.l(813.686,1748.42,845.213,1716.9,858.279,1676.71) +j.l(864.743,1656.82,864.743,1632.25,864.743,1583.1) +j.q(0,864.743,186.902) +j.l(864.743,137.754,864.743,113.18,858.279,93.2921) +j.l(845.213,53.0977,813.686,21.5848,773.475,8.5249) +j.l(753.578,2.06299,728.994,2.06299,679.824,2.06299) +j.q(0,193.173,2.06299) +j.l(144.004,2.06299,119.419,2.06299,99.5225,8.5249) +j.l(59.3107,21.5848,27.7842,53.0977,14.7186,93.2921) +j.T(0) +i=b5.B() +i.sU(0,B.i) +i.sA(0,B.jn) +b7.a3(j,i) +h=b5.Z() +h.a4(0,16.5117,183.601) +h.l(16.5117,137.525,16.5117,114.487,22.5724,95.842) +h.l(34.8214,58.1598,64.3775,28.6164,102.076,16.3727) +h.l(120.729,10.3147,143.777,10.3147,189.873,10.3147) +h.q(0,683.129,10.3147) +h.l(729.225,10.3147,752.273,10.3147,770.926,16.3727) +h.l(808.625,28.6164,838.181,58.1598,850.43,95.842) +h.l(856.49,114.487,856.49,137.525,856.49,183.601) +h.q(0,856.49,1586.4) +h.l(856.49,1632.48,856.49,1655.51,850.43,1674.16) +h.l(838.181,1711.84,808.625,1741.38,770.926,1753.63) +h.l(752.273,1759.69,729.225,1759.69,683.129,1759.69) +h.q(0,189.873,1759.69) +h.l(143.777,1759.69,120.729,1759.69,102.076,1753.63) +h.l(64.3775,1741.38,34.8214,1711.84,22.5724,1674.16) +h.l(16.5117,1655.51,16.5117,1632.48,16.5117,1586.4) +h.q(0,16.5117,183.601) +h.T(0) +g=b5.B() +g.sU(0,B.i) +g.sA(0,B.I) +b7.a3(h,g) +f=b5.Z() +f.a4(0,683.127,0) +f.q(0,695.51,0) +f.q(0,695.51,10.3147) +f.q(0,683.127,10.3147) +f.q(0,683.127,0) +f.T(0) +e=b5.B() +e.sU(0,B.i) +e.sA(0,B.aI) +b7.a3(f,e) +d=b5.Z() +d.a4(0,856.49,177.413) +d.q(0,866.809,177.413) +d.q(0,866.809,189.79) +d.q(0,856.49,189.79) +d.q(0,856.49,177.413) +d.T(0) +c=b5.B() +c.sU(0,B.i) +c.sA(0,B.aI) +b7.a3(d,c) +b=b5.Z() +b.a4(0,6.19141,177.413) +b.q(0,16.5106,177.413) +b.q(0,16.5106,189.79) +b.q(0,6.19141,189.79) +b.q(0,6.19141,177.413) +b.T(0) +a=b5.B() +a.sU(0,B.i) +a.sA(0,B.aI) +b7.a3(b,a) +a0=b5.Z() +a0.a4(0,6.19141,1580.21) +a0.q(0,16.5106,1580.21) +a0.q(0,16.5106,1592.59) +a0.q(0,6.19141,1592.59) +a0.q(0,6.19141,1580.21) +a0.T(0) +a1=b5.B() +a1.sU(0,B.i) +a1.sA(0,B.aI) +b7.a3(a0,a1) +a2=b5.Z() +a2.a4(0,856.49,1580.21) +a2.q(0,866.809,1580.21) +a2.q(0,866.809,1592.59) +a2.q(0,856.49,1592.59) +a2.q(0,856.49,1580.21) +a2.T(0) +a3=b5.B() +a3.sU(0,B.i) +a3.sA(0,B.aI) +b7.a3(a2,a3) +a4=b5.Z() +a4.a4(0,177.49,1759.69) +a4.q(0,189.873,1759.69) +a4.q(0,189.873,b4) +a4.q(0,177.49,b4) +a4.q(0,177.49,1759.69) +a4.T(0) +a5=b5.B() +a5.sU(0,B.i) +a5.sA(0,B.aI) +b7.a3(a4,a5) +a6=b5.Z() +a6.a4(0,331.447,73.8811) +a6.l(339.426,73.8811,345.894,67.4159,345.894,59.4406) +a6.l(345.894,51.4653,339.426,45,331.447,45) +a6.l(323.468,45,317,51.4653,317,59.4406) +a6.l(317,67.4159,323.468,73.8811,331.447,73.8811) +a6.T(0) +a7=b5.B() +a7.sU(0,B.i) +a7.sA(0,B.a_) +b7.a3(a6,a7) +a8=b5.Z() +a8.a4(0,331.447,68.466) +a8.l(336.434,68.466,340.476,64.4252,340.476,59.4406) +a8.l(340.476,54.4561,336.434,50.4153,331.447,50.4153) +a8.l(326.46,50.4153,322.418,54.4561,322.418,59.4406) +a8.l(322.418,64.4252,326.46,68.466,331.447,68.466) +a8.T(0) +a9=b5.B() +a9.sU(0,B.i) +a9.sA(0,B.I) +b7.a3(a8,a9) +b0=b5.Z() +b0.a4(0,331.446,57.6355) +b0.l(332.444,57.6355,333.252,56.8274,333.252,55.8305) +b0.l(333.252,54.8335,332.444,54.0254,331.446,54.0254) +b0.l(330.449,54.0254,329.641,54.8335,329.641,55.8305) +b0.l(329.641,56.8274,330.449,57.6355,331.446,57.6355) +b0.T(0) +b1=b5.B() +b1.sU(0,B.i) +b1.sA(0,B.bN) +b7.a3(b0,b1) +b2=b5.Z() +b2.a4(0,372,13) +b2.q(0,499,13) +b2.q(0,499,17) +b2.l(499,21.4183,495.418,25,491,25) +b2.q(0,380,25) +b2.l(375.582,25,372,21.4183,372,17) +b2.q(0,372,13) +b2.T(0) +b3=b5.B() +b3.sU(0,B.i) +b3.sA(0,B.a_) +b7.a3(b2,b3)}, +cF(a){return!1}} +A.ajp.prototype={ +aO(a9,b0){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=1792,a7=$.G(),a8=a7.Z() +a8.a4(0,884.74,369.179) +a8.q(0,886.827,369.179) +a8.l(889.132,369.179,891,370.356,891,371.808) +a8.q(0,891,497.984) +a8.l(891,499.436,889.132,500.613,886.827,500.613) +a8.q(0,884.74,500.613) +a8.q(0,884.74,369.179) +a8.T(0) +s=a7.B() +s.sU(0,B.i) +s.sA(0,B.I) +a9.a3(a8,s) +r=a7.Z() +r.a4(0,0,538.165) +r.l(0,535.861,1.86845,533.993,4.1733,533.993) +r.q(0,6.25995,533.993) +r.q(0,6.25995,665.427) +r.q(0,4.1733,665.427) +r.l(1.86845,665.427,0,663.558,0,661.254) +r.q(0,0,538.165) +r.T(0) +q=a7.B() +q.sU(0,B.i) +q.sA(0,B.I) +a9.a3(r,q) +p=a7.Z() +p.a4(0,0,373.352) +p.l(0,371.048,1.86845,369.179,4.1733,369.179) +p.q(0,6.25995,369.179) +p.q(0,6.25995,500.613) +p.q(0,4.1733,500.613) +p.l(1.86845,500.613,0,498.745,0,496.44) +p.q(0,0,373.352) +p.T(0) +o=a7.B() +o.sU(0,B.i) +o.sA(0,B.I) +a9.a3(p,o) +n=a7.Z() +n.a4(0,0,246.091) +n.l(0,243.787,1.86845,241.918,4.1733,241.918) +n.q(0,6.25995,241.918) +n.q(0,6.25995,310.765) +n.q(0,4.1733,310.765) +n.l(1.86845,310.765,0,308.897,0,306.592) +n.q(0,0,246.091) +n.T(0) +m=a7.B() +m.sU(0,B.i) +m.sA(0,B.I) +a9.a3(n,m) +l=a7.Z() +l.a4(0,6.25977,133.434) +l.l(6.25977,60.8448,65.116,2,137.719,2) +l.q(0,753.281,2) +l.l(825.884,2,884.74,60.8448,884.74,133.434) +l.q(0,884.74,1660.57) +l.l(884.74,1733.16,825.884,a6,753.281,a6) +l.q(0,137.719,a6) +l.l(65.116,a6,6.25977,1733.16,6.25977,1660.57) +l.q(0,6.25977,133.434) +l.T(0) +k=a7.B() +k.sU(0,B.i) +k.sA(0,B.cf) +a9.a3(l,k) +j=a7.Z() +j.a4(0,16.6934,133.433) +j.l(16.6934,66.6058,70.8785,12.4312,137.719,12.4312) +j.q(0,753.281,12.4312) +j.l(820.122,12.4312,874.307,66.6058,874.307,133.433) +j.q(0,874.307,1660.57) +j.l(874.307,1727.39,820.122,1781.57,753.281,1781.57) +j.q(0,137.719,1781.57) +j.l(70.8785,1781.57,16.6934,1727.39,16.6934,1660.57) +j.q(0,16.6934,133.433) +j.T(0) +i=a7.B() +i.sU(0,B.i) +i.sA(0,B.I) +a9.a3(j,i) +h=a7.Z() +h.a4(0,365.164,118.83) +h.l(365.164,115.373,367.966,112.571,371.423,112.571) +h.q(0,519.577,112.571) +h.l(523.034,112.571,525.836,115.373,525.836,118.83) +h.q(0,525.836,118.83) +h.l(525.836,122.286,523.034,125.089,519.577,125.089) +h.q(0,371.423,125.089) +h.l(367.966,125.089,365.164,122.286,365.164,118.83) +h.q(0,365.164,118.83) +h.T(0) +g=a7.B() +g.sU(0,B.i) +g.sA(0,B.a_) +a9.a3(h,g) +f=a7.Z() +f.a4(0,294.218,135.52) +f.l(303.437,135.52,310.911,128.047,310.911,118.83) +f.l(310.911,109.612,303.437,102.14,294.218,102.14) +f.l(284.998,102.14,277.524,109.612,277.524,118.83) +f.l(277.524,128.047,284.998,135.52,294.218,135.52) +f.T(0) +e=a7.B() +e.sU(0,B.i) +e.sA(0,B.a_) +a9.a3(f,e) +d=a7.Z() +d.a4(0,294.217,129.261) +d.l(299.98,129.261,304.651,124.591,304.651,118.83) +d.l(304.651,113.069,299.98,108.399,294.217,108.399) +d.l(288.455,108.399,283.784,113.069,283.784,118.83) +d.l(283.784,124.591,288.455,129.261,294.217,129.261) +d.T(0) +c=a7.B() +c.sU(0,B.i) +c.sA(0,B.I) +a9.a3(d,c) +b=a7.Z() +b.a4(0,294.218,116.744) +b.l(295.37,116.744,296.304,115.809,296.304,114.657) +b.l(296.304,113.505,295.37,112.571,294.218,112.571) +b.l(293.065,112.571,292.131,113.505,292.131,114.657) +b.l(292.131,115.809,293.065,116.744,294.218,116.744) +b.T(0) +a=a7.B() +a.sU(0,B.i) +a.sA(0,B.bN) +a9.a3(b,a) +a0=a7.Z() +a0.a4(0,445.5,77.105) +a0.l(451.838,77.105,456.977,71.9677,456.977,65.6306) +a0.l(456.977,59.2935,451.838,54.1562,445.5,54.1562) +a0.l(439.162,54.1562,434.023,59.2935,434.023,65.6306) +a0.l(434.023,71.9677,439.162,77.105,445.5,77.105) +a0.T(0) +a1=a7.B() +a1.sU(0,B.i) +a1.sA(0,B.a_) +a9.a3(a0,a1) +a2=a7.Z() +a2.a4(0,379.771,1686.64) +a2.l(379.771,1722.94,409.199,1752.36,445.5,1752.36) +a2.l(481.801,1752.36,511.23,1722.94,511.23,1686.64) +a2.l(511.23,1650.35,481.801,1620.93,445.5,1620.93) +a2.l(409.199,1620.93,379.771,1650.35,379.771,1686.64) +a2.T(0) +a2.a4(0,502.883,1686.64) +a2.l(502.883,1718.33,477.192,1744.02,445.5,1744.02) +a2.l(413.808,1744.02,388.117,1718.33,388.117,1686.64) +a2.l(388.117,1654.96,413.808,1629.27,445.5,1629.27) +a2.l(477.192,1629.27,502.883,1654.96,502.883,1686.64) +a2.T(0) +a3=a7.B() +a3.sU(0,B.i) +a3.sA(0,B.a_) +a9.a3(a2,a3) +a4=a7.Z() +a4.a4(0,47.9932,196.935) +a4.l(47.9932,195.278,49.3363,193.935,50.9932,193.935) +a4.q(0,840.007,193.935) +a4.l(841.664,193.935,843.007,195.278,843.007,196.935) +a4.q(0,843.007,1594.98) +a4.l(843.007,1596.64,841.664,1597.98,840.007,1597.98) +a4.q(0,50.9932,1597.98) +a4.l(49.3363,1597.98,47.9932,1596.64,47.9932,1594.98) +a4.q(0,47.9932,196.935) +a4.T(0) +a5=a7.B() +a5.sU(0,B.i) +a5.sA(0,B.a_) +a9.a3(a4,a5)}, +cF(a){return!1}} +A.a2c.prototype={ +ab(a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null,c=e.d,b=c.w,a=c.e,a0=a.hB(0),a1=e.f,a2=a1?b.a:a0.c-a0.a,a3=a1?b.b:a0.d-a0.b,a4=A.b([],t.p) +if(a1)a4.push(A.GK(0,A.ew(d,d,new A.dp(c.a,t.l1),c.r,B.x),B.ai5)) +s=a1?a0.a:0 +a1=a1?a0.b:0 +r=t.l +A.cj(a5,d,r).toString +q=e.e +p=c.c!=null&&q===B.eH +o=p===!0 +n=c.x +m=o?n.b:n.a +l=o?n.a:n.b +p=o?1:0 +k=A.cj(a5,d,r).w +r=c.c!=null&&q===B.eH +o=r===!0 +if(o){r=c.c +if(r==null){r=c.d +j=r}else j=r}else{r=c.d +j=r}i=o?n.b:n.a +h=o?n.a:n.b +r=c.f +h=k.acp(r,j,new A.Q(i,h),B.X,j) +r=c.a +g=B.b.G(A.b([B.Tv,B.Tw],t.YP),r.b)?B.HF:d +a4.push(A.kA(d,A.a0W(A.a3B(new A.Hh(p,A.fF(A.Ak(new A.wJ(A.am(a5).aOR(r.c,g),e.c,d),h),l,m),d)),B.ce,new A.apa(a,d)),a0.d-a0.b,B.ahZ,s,d,a1,a0.c-a0.a)) +f=A.fF(A.kL(B.bC,a4,B.a4,B.bB,d),a3,a2) +return A.a3B(new A.Hh(c.c!=null&&q===B.eH?-1:0,f,d))}} +A.apa.prototype={ +FW(a){var s=this.b,r=s.hB(0) +return s.az(0,A.pH(-r.a,-r.b,0).a)}, +Gv(a){return a.b!==this.b}} +A.uR.prototype={ +W(){return"DeviceType."+this.b}} +A.h7.prototype={ +k(a,b){var s,r=this +if(b==null)return!1 +if(r!==b)s=b instanceof A.h7&&b.a===r.a&&b.b===r.b&&b.c===r.c +else s=!0 +return s}, +gL(a){var s=this +return(A.eT(A.J(s))^B.d.gL(s.a)^A.eT(s.b)^A.eT(s.c))>>>0}, +j(a){var s,r=this.c.W(),q=B.ah4.j(0) +r=A.ea(r,q+".","") +q=this.b.W() +s=B.agv.j(0) +return r.toLowerCase()+"_"+A.ea(q,s+".","").toLowerCase()+"_"+this.a}} +A.CD.prototype={ +j(a){var s=this +return"DeviceInfo(identifier: "+s.a.j(0)+", name: "+s.b+", rotatedSafeAreas: "+A.j(s.c)+", safeAreas: "+s.d.j(0)+", screenPath: "+s.e.j(0)+", pixelRatio: "+A.j(s.f)+", framePainter: "+s.r.j(0)+", frameSize: "+s.w.j(0)+", screenSize: "+s.x.j(0)+")"}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r!==b)s=J.ai(b)===A.J(r)&&b instanceof A.CD&&B.bh.eN(b.a,r.a)&&B.bh.eN(b.b,r.b)&&B.bh.eN(b.c,r.c)&&B.bh.eN(b.d,r.d)&&B.bh.eN(b.e,r.e)&&B.bh.eN(b.f,r.f)&&B.bh.eN(b.r,r.r)&&B.bh.eN(b.w,r.w)&&B.bh.eN(b.x,r.x) +else s=!0 +return s}, +gL(a){var s=this +return A.a6(A.J(s),B.bh.f6(0,s.a),B.bh.f6(0,s.b),B.bh.f6(0,s.c),B.bh.f6(0,s.d),B.bh.f6(0,s.e),B.bh.f6(0,s.f),B.bh.f6(0,s.r),B.bh.f6(0,s.w),B.bh.f6(0,s.x),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +$ir3:1} +A.atc.prototype={} +A.lh.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=q.gaC() +o=new A.a(new Float64Array(2)) +o.ag(16) +s=2 +return A.x(A.kK("animations/ember.png",A.kJ(3,null,!0,0.15,o),p.cy$),$async$n) +case 2:q.siM(0,c) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.V2.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.R4.prototype={ +W(){return"RobotState."+this.b}} +A.us.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:l=new A.a(new Float64Array(2)) +l.p(16,18) +p=q.cy$ +s=2 +return A.x(A.kK("animations/robot.png",A.kJ(8,null,!0,0.2,l),p),$async$n) +case 2:o=c +l=new A.a(new Float64Array(2)) +l.p(16,18) +s=3 +return A.x(A.kK("animations/robot-idle.png",A.kJ(4,null,!0,0.4,l),p),$async$n) +case 3:n=c +m=new A.a(new Float64Array(2)) +m.p(64,72) +l=t._6 +l=A.bKj(null,null,A.b3([B.Fk,o,B.kZ,n],l,t.EF),!0,null,null,B.kZ,null,0,null,!0,q.k4.at.gaU().b1(0,2).Y(0,m.b1(0,2)),null,B.oH,null,m,l) +q.R=l +q.J(l) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){var s=this.R +s===$&&A.c() +s.sa1(0,B.Fk)}, +Yu(){var s=this.R +s===$&&A.c() +s.sa1(0,B.kZ)}, +iX(a){var s=this.R +s===$&&A.c() +s.sa1(0,B.kZ)}, +mV(a){return B.hk}} +A.afq.prototype={} +A.b9F.prototype={ +$1(a){var s=null,r=t.s,q=t.g,p=new A.a_H(s,-2147483647,s,B.e,new A.e([],r),new A.e([],q)),o=A.aU(s,s,s,s,s,s),n=$.aC(),m=$.aL(),l=A.b([],t.u),k=A.aP(A.aQ(),t.y) +r=new A.xZ(p,o,n,m,B.m,l,k,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],r),new A.e([],q)) +r.aT(s,s,p,t.i) +return A.aO(r,s,s,s,s,t.w9)}, +$S:524} +A.b9G.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.us(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.MC)}, +$S:525} +A.b9H.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.xU(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.XI)}, +$S:528} +A.b9I.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k=null,j=new A.a(new Float64Array(2)) +j.ag(20) +s=t.s +r=t.g +q=new A.a_J(B.O,k,-2147483647,k,B.e,new A.e([],s),new A.e([],r)) +p=A.aU(k,k,k,k,k,k) +o=$.aC() +n=$.aL() +m=A.b([],t.u) +l=A.aP(A.aQ(),t.y) +j=new A.qH(j,q,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,k,B.e,new A.e([],s),new A.e([],r)) +j.aT(k,k,q,t.i) +return A.aO(j,k,k,k,k,t.a_)}, +$S:530} +A.xU.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:n=A +s=2 +return A.x(q.cy$.d_(0,"animations/chopper.png"),$async$n) +case 2:m=c +s=3 +return A.x(q.db$.MC("images/animations/chopper.json"),$async$n) +case 3:p=n.bKk(m,c) +o=new A.a(new Float64Array(2)) +o.ag(200) +q.J(A.mB(null,null,p,null,null,null,0,null,!0,q.k4.at.gaU().Y(0,o).b1(0,2),null,!1,null,o)) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.xZ.prototype={} +A.a_H.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.gaC().cy$.d_(0,"animations/creature.png"),$async$n) +case 2:q.go=c +p=q.gaC() +o=new A.a(new Float64Array(2)) +o.ag(48) +s=3 +return A.x(A.kK("animations/chopper.png",A.kJ(4,null,!0,0.15,o),p.cy$),$async$n) +case 3:n=c +p=new Float64Array(2) +m=new A.a(p) +m.ag(100) +o=p[0] +l=new A.a(new Float64Array(2)) +l.p(-o,0) +k=A.mB(B.j,null,n,null,null,null,0,null,!0,l,null,!1,null,m) +l=n.a +o=A.a5(l).h("cz<1>") +o=A.ab(new A.cz(l,o),!0,o.h("aI.E")) +l=n.b +p=p[0] +j=new A.a(new Float64Array(2)) +j.p(p,0) +i=A.mB(B.j,null,new A.mA(o,l),null,null,null,0,null,!0,j,null,!1,null,m) +q.J(k) +q.J(i) +q.J(A.i9(null,null,null,null,t.J)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){var s,r,q,p,o,n,m=null,l=new A.a(new Float64Array(2)) +l.p(291,178) +s=this.go +s===$&&A.c() +r=A.kJ(18,10,!1,0.15,l) +q=B.b.ga_(a.c) +r=A.aTB(s,r) +s=B.t.aW() +p=A.ar() +o=$.aa() +o=new A.aJ(o,new Float64Array(2)) +o.a7(l) +o.D() +n=new A.hx(new A.ip(r),!0,!0,!1,$,s,m,p,o,B.j,0,0,m,B.e,new A.e([],t.s),new A.e([],t.g)) +n.b0(B.j,m,m,m,0,q,m,m,l) +n.mK(B.j,m,r,m,m,m,0,m,!0,q,m,!0,m,l) +this.J(n)}} +A.afN.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.afO.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.qH.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:n=q.k4.at +m=n.gaU() +l=new A.a(new Float64Array(2)) +l.p(10,50) +p=t.Fr +l=A.a40(B.bL,m.Y(0,l),p) +m=q.k4.at.gaU() +o=new A.a(new Float64Array(2)) +o.p(10,25) +p=A.dm(B.bL,null,null,null,m.Y(0,o),1,null,null,null,null,p) +q.S!==$&&A.aj() +q.S=p +s=2 +return A.x(n.I(0,A.b([l,p],t.W)),$async$n) +case 2:q.k3.J(A.i9(null,null,null,q.R,t.J)) +q.gbQ(0).zV(0,t.o_) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s +this.fO(0,b) +s=this.S +s===$&&A.c() +s.sd7(0,"Animations: "+this.k3.gbQ(0).nw(0,t.o_).length)}} +A.a_J.prototype={ +cb(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=J.el(100,t.F) +for(s=t.J,r=f.go,q=A.w(f).h("a2.T"),p=0;p<100;++p){o=f.M$ +if(o==null){n=f.bo() +n.toString +q.a(n) +f.M$=n +m=n +o=m}else m=o +m=m.k4.at.gaU().a[0] +l=r.aV() +k=r.wc()?1:-1 +j=f.M$ +if(j==null){n=f.bo() +n.toString +j=f.M$=q.a(n)}j=j.k4.at.gaU().a[1] +i=r.aV() +h=r.wc()?1:-1 +g=new Float64Array(2) +g[0]=m/2*l*k +g[1]=j/2*i*h +e[p]=A.i9(null,new A.a(g),null,o.R,s)}f.I(0,e)}} +A.afP.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.afQ.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.b9J.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.ux(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.Jv)}, +$S:531} +A.ux.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(A.awO($.bdl(),4,3,new A.Dv("sfx/fire_2.mp3",null)),$async$n) +case 2:q.R=c +p=$.bj6() +p.oy(0) +p.u9(0,"music/bg_music.ogg") +p=q.k4.at.gaU().a[0] +o=q.k4.at.gaU().a[1] +n=new A.a(new Float64Array(2)) +n.p(p-40,o*0.8) +p=q.k4.at.gaU().a[0] +o=q.k4.at.gaU().a[1] +m=new A.a(new Float64Array(2)) +m.p(p-40,o/5) +p=new A.a(new Float64Array(2)) +p.p(20,20) +o=A.fU(null,null,null,null,$.bve(),null,null,null,null,n) +l=$.bvh() +k=t.Z0 +j=t.W +p=A.be7(null,null,o,null,A.b([A.dm(B.j,null,null,null,n.b1(0,2),1,null,null,"Click here for 1",l,k)],j),null,q.gaRw(),null,p,null,null,n) +l=q.k4.at.gaU().a[1] +o=q.k4.at.gaU().a[1] +i=new A.a(new Float64Array(2)) +i.p(20,l-o/5) +o=A.fU(null,null,null,null,$.bvg(),null,null,null,null,m) +l=$.bvf() +q.I(0,A.b([p,A.be7(null,null,o,null,A.b([A.dm(B.j,null,null,null,m.b1(0,2),1,null,null,"Click here for 2",l,k)],j),null,q.gaRy(),null,i,null,null,m)],j)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +aRx(){A.a3I("sfx/fire_1.mp3",1,B.i9,B.a4R)}, +aRz(){var s=this.R +s===$&&A.c() +s.bR(0)}, +h3(){$.bj6().t()}} +A.xR.prototype={} +A.ZT.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +s=2 +return A.x($.aC().d_(0,"animations/chopper.png"),$async$n) +case 2:p=c +q.ry=p +o=new A.a(new Float64Array(2)) +o.ag(48) +q.to=A.aTB(p,A.kJ(4,null,!0,0.15,o)) +q.I(0,A.l_(q.gaC(),null)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){var s,r,q,p,o,n=null +this.nZ(a) +s=B.b.ga_(a.c) +r=new A.a(new Float64Array(2)) +r.ag(10) +q=this.to +q===$&&A.c() +p=A.mB(B.j,n,q,n,n,n,0,n,!0,n,n,!1,n,r) +q=A.ar() +o=B.t.aW() +s=new A.a0q(s,p.ax,n,n,!0,q,$,o,n,n,0,n,B.e,new A.e([],t.s),new A.e([],t.g)) +s.iI(n,n,n,n,n,n,!0) +s.ch=!1 +s.J(p) +this.J(s)}} +A.a0q.prototype={ +io(){var s,r,q,p,o=this,n=A.a0w() +n.b=o.rx.a[0]/4 +s=A.jD(n,1,0.2,!1,0.8,o) +r=A.oM(null).Y(0,A.oM(null)).a2(0,200) +q=new A.a(new Float64Array(2)) +q.p(1,0) +p=A.fb(r.Jj(q),0,0,!1,r,o.RG,B.R,null) +q=o.gaC().k3.go.fm(p) +q.i5(s) +return q}} +A.afb.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.afc.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.y2.prototype={} +A.a_O.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:g=A.cO(q.en(0),t.H) +s=2 +return A.x(g,$async$n) +case 2:p=new A.a(new Float64Array(2)) +p.p(0,-30) +o=new A.a(new Float64Array(2)) +o.ag(6) +q.I(0,A.l_(q.gaC(),null)) +g=new Float64Array(2) +n=A.ar() +m=B.t.aW() +l=t.s +k=t.g +g=new A.a4A(new A.a(g),null,null,!0,n,$,m,null,null,0,null,B.e,new A.e([],l),new A.e([],k)) +g.iI(null,null,null,null,null,null,!0) +q.J(g) +j=A.blj(t.o9) +j.r=20 +j.w=1 +j.f=!1 +g=A.b([],t.W) +for(i=0;i<20;++i){n=A.ar() +m=$.G() +h=m.B() +h.sA(0,B.l) +n=new A.a_N(j,i,o,p,null,null,!0,n,$,h,null,null,0,null,B.e,new A.e([],l),new A.e([],k)) +m=m.B() +m.sA(0,B.l) +n.S$=m +g.push(n)}s=3 +return A.x(q.I(0,g),$async$n) +case 3:g=q.go +g.iQ(A.bli(g,j)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){var s,r,q,p=null +this.nZ(a) +s=B.b.ga_(a.c) +r=A.ar() +q=B.t.aW() +s=new A.a3u(s,p,p,!0,r,$,q,p,p,0,p,B.e,new A.e([],t.s),new A.e([],t.g)) +s.iI(p,p,p,p,p,p,!0) +this.J(s)}} +A.a4A.prototype={ +io(){var s,r,q,p,o=A.nj() +o.mF(20,0.4) +s=A.jD(o,1,0.2,!1,0,null) +r=new A.a(new Float64Array(2)) +r.v(this.RG) +q=A.fb(0,0,0,!1,null,r,B.a2,null) +p=this.gaC().k3.go.fm(q) +p.i5(s) +r=new A.a(new Float64Array(2)) +r.p(-10,0) +o.NY(0.4,20,r,0) +p.i5(s) +r=new A.a(new Float64Array(2)) +r.p(10,0) +o.NY(0.4,20,r,0) +p.i5(s) +return p}} +A.a_N.prototype={ +io(){var s,r,q,p,o,n=this,m=n.rx/20*3.141592653589793*2,l=n.to.a,k=l[0],j=n.ry.a,i=j[0],h=Math.sin(m) +l=l[1] +j=j[1] +s=Math.cos(m) +r=new A.a(new Float64Array(2)) +r.p(k+i*h,l+j*s) +q=A.fb(0,0,0,!0,null,r,B.R,null) +p=n.gaC().k3.go.fm(q) +o=A.a0w() +o.b=0.5 +p.i5(A.jD(o,1,0.2,!1,0,null)) +n.RG.aaP(p) +return p}} +A.a3u.prototype={ +io(){var s,r=A.fb(0,0,0,!1,null,this.RG,B.R,null),q=A.nj() +q.mF(2,4) +s=this.gaC().k3.go.fm(r) +s.acw(q) +return s}} +A.afS.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.afT.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.yb.prototype={} +A.a0b.prototype={ +cb(a){var s=A.bgd(B.b.ga_(a.c),null) +this.J(s) +s.gED().l4(new A.aye(this,s))}} +A.aye.prototype={ +$0(){return this.a.gaC().k4.aed(this.b)}, +$S:0} +A.yw.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.nX(0) +p=A.l_(q,null) +q.k3.I(0,p) +o=q.k3 +n=new A.a(new Float64Array(2)) +n.p(0,5) +m=A.dW(B.H2,B.r) +l=A.ar() +k=new A.a(new Float64Array(2)) +j=$.aa() +j=new A.aJ(j,new Float64Array(2)) +j.a7(k) +j.D() +k=t.s +i=t.g +m=new A.ad5("A normal tappable Flame component",m,l,j,B.j,0,0,null,B.e,new A.e([],k),new A.e([],i)) +m.b0(B.j,null,null,null,0,n,null,null,null) +m.qd() +o.J(m) +o=q.k3 +n=new A.a(new Float64Array(2)) +m=B.dU.aW() +l=new A.a(new Float64Array(2)) +l.p(0,1000) +j=A.ar() +h=B.t.aW() +m=new A.ad3(2,B.R,n,m,l,null,null,null,null,null,null,!0,j,$,h,null,null,0,null,B.e,new A.e([],k),new A.e([],i)) +m.iI(null,null,null,null,null,null,!0) +m.B5(n,B.R,null,2) +n=$.G().B() +n.sA(0,B.dl) +m.S$=m.RG=n +o.J(m) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.ad5.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=new A.a(new Float64Array(2)) +p.ag(1.1) +q.J(A.Rh(p,A.dr(!0,0,B.z,0.7,!0,null,null,null,0),null,null)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){var s=new A.a(new Float64Array(2)) +s.ag(5) +this.J(A.oo(s,A.dr(!0,0,B.z,null,!1,null,null,5,0)))}} +A.ad3.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.uI(0) +p=A.dW(B.H2,B.r) +q.f4!==$&&A.aj() +q.f4=p +p=A.dm(null,null,null,null,null,null,null,null,B.f.j(q.eh),p,t.Fr) +q.c9!==$&&A.aj() +q.c9=p +q.J(p) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s +this.amD(0,b) +s=this.c9 +s===$&&A.c() +s.sd7(0,B.f.j(this.eh))}, +cb(a){var s;++this.eh +s=this.at +s===$&&A.c() +s.vh(A.oM(null).a2(0,1000)) +this.S$=A.Gw(100,null,0.9) +return!1}} +A.ar0.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.ar3.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.yz.prototype={} +A.a1v.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +q.I(0,A.l_(q.gaC(),null)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){var s,r,q,p,o,n=null +this.nZ(a) +s=B.b.ga_(a.c) +if(B.O.f9(10)<2){r=B.dU.aW() +q=new A.a(new Float64Array(2)) +q.p(0,1000) +p=A.ar() +o=B.t.aW() +r=new A.Tv(n,n,n,n,2,B.R,s,r,q,n,n,n,n,n,n,!0,p,$,o,n,n,0,n,B.e,new A.e([],t.s),new A.e([],t.g)) +r.iI(n,n,n,n,n,n,!0) +r.B5(s,B.R,n,2) +r.S$=r.RG=B.t.aW() +this.J(r)}else this.J(A.l6(s,B.R,n,2))}} +A.agQ.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.agR.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.yQ.prototype={} +A.Mu.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +q.I(0,A.l_(q.gaC(),null)) +for(p=t.s,o=t.g,n=0;n<5;++n){m=new Float64Array(2) +m[0]=0 +m[1]=5*n +l=A.ar() +k=$.G() +j=k.B() +j.sA(0,B.l) +m=new A.a8P(new A.a(m),null,null,!0,l,$,j,null,null,0,null,B.e,new A.e([],p),new A.e([],o)) +l=k.B() +l.sA(0,B.l) +m.S$=l +q.J(m)}for(n=0;n<7;++n)for(m=-12.7+5*n,i=0;i<25;++i){l=new Float64Array(2) +l[0]=-14.75+i*1.2291666666666667 +l[1]=m +k=A.ar() +j=$.G() +h=j.B() +h.sA(0,B.l) +l=new A.a2I(new A.a(l),null,null,!0,k,$,h,null,null,0,null,B.e,new A.e([],p),new A.e([],o)) +k=j.B() +k.sA(0,B.l) +l.S$=k +q.J(l)}return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){this.J(A.bgd(B.b.ga_(a.c),null))}} +A.a8P.prototype={ +io(){var s,r,q,p=A.nj() +p.mF(14.8,0.125) +s=A.jD(p,1,0,!1,0,null) +r=A.fb(0,0,0,!1,null,this.RG,B.a2,null) +q=this.gaC().k3.go.fm(r) +q.i5(s) +return q}} +A.a2I.prototype={ +io(){var s,r,q,p=A.nj() +p.mF(0.125,2) +s=A.jD(p,25,0.5,!1,0.4,null) +r=A.fb(0,0,0,!1,null,this.RG,B.R,null) +q=this.gaC().k3.go.fm(r) +q.i5(s) +return q}} +A.ai7.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.ai8.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.yU.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.nX(0) +p=A.l_(q,null) +q.k3.I(0,p) +o=q.k3 +n=new A.a(new Float64Array(2)) +m=B.dU.aW() +l=new A.a(new Float64Array(2)) +l.p(0,1000) +k=A.ar() +j=B.t.aW() +m=new A.a2S(!1,5,B.R,n,m,l,null,null,null,null,null,null,!0,k,$,j,null,null,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +m.iI(null,null,null,null,null,null,!0) +m.B5(n,B.R,null,5) +n=$.G().B() +n.sA(0,B.dl) +m.S$=m.RG=n +o.J(m) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.a2S.prototype={ +wh(a,b){this.Os(0,b) +this.S$=A.Gw(100,null,0.9)}, +pW(a){var s,r=this.at +r===$&&A.c() +s=a.c +r.vh(B.b.ga_(s).a.Y(0,B.b.ga_(s).b).a2(0,1000))}, +pV(a,b){var s +this.AR(0,b) +s=this.RG +s===$&&A.c() +this.S$=s}} +A.aii.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.bm,t.F)==null){r=A.An() +s.gc8().u(0,B.bm,r) +s.J(r)}}} +A.bav.prototype={ +$1(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=null,a9=$.js(),b0=t.rK,b1=A.b([],b0),b2=A.b([],t.Vn),b3=new A.ce() +$.fJ() +b3.bR(0) +s=new A.ce() +s.bR(0) +r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=A.e6() +b0=A.b([],b0) +i=new A.ce() +i.bR(0) +h=A.e6() +g=A.dQ() +f=A.dQ() +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new A.a(new Float64Array(2)) +a7.v(a9) +a6=new A.iv(b1,b2,a7,new A.dK(),new A.ct(b3),new A.ct(s),new A.ec(0,0,0),new A.be(new A.a(r),new A.av(0,1)),new A.a(q),new A.a(p),new A.ix(),new A.iy(new A.dG(new A.a(o)),new A.a(n),new A.a(m)),new A.dz(new A.a(l),new A.a(k)),j,b0,new A.ct(i),h,new A.ir(g,f,new A.bP(new A.a(e),new A.a(d),new A.a(c)),new A.bP(new A.a(b),new A.a(a),new A.a(a0))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a1),new A.a(a2),new A.a(a3)),new A.bP(new A.a(a4),new A.a(a5),new A.a(a6))) +a9=A.jC() +b0=A.b([],t.t) +a6.f=a6.at=a6.Q=a6.z=!0 +a6.a=4 +a9=new A.hM(new A.i7(a9,b0,A.C(t.vI)),A.b([],t.go)) +a9.c=new A.i5() +a6.b=a9 +a6.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +b0=A.b([],t.ZS) +b1=A.b([],t.Ic) +b2=A.b([],t.dK) +b3=A.b([],t.eR) +s=A.b([],t.M0) +r=A.b([],t.DZ) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +a6.ay=new A.ii(b0,A.C(t.W8),b1,b2,b3,s,r,a6,new A.cH(new A.a(q),new A.a(p)),new A.cH(new A.a(o),new A.a(n)),new A.a(m),new A.be(new A.a(l),new A.av(0,1)),new A.be(new A.a(k),new A.av(0,1)),new A.io(new A.dz(new A.a(j),new A.a(i)),new A.dG(new A.a(h))),new A.av(0,1),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +a9.d=new A.iw() +a9=t.s +b0=t.g +b1=new A.a_O(a8,a6,-2147483647,a8,B.e,new A.e([],a9),new A.e([],b0)) +b1.ske(a7) +b2=A.aU(a8,a8,a8,a8,a8,a8) +b3=b2.ax +s=new A.a(new Float64Array(2)) +s.ag(10) +r=b3.at.e +r.a7(s) +r.D() +b3.dx=null +b3=b2 +s=$.aC() +r=$.aL() +q=A.b([],t.u) +p=A.aP(A.aQ(),t.y) +a9=new A.y2(b1,b3,s,r,B.m,q,p,A.C(t.S),A.C(t.F),0,a8,B.e,new A.e([],a9),new A.e([],b0)) +a9.aT(b2,a8,b1,t.E) +return A.aO(a9,a8,a8,a8,a8,t.RD)}, +$S:532} +A.baw.prototype={ +$1(a){var s,r,q,p,o,n,m=null,l=new A.a(new Float64Array(2)) +l.p(0,10) +l=A.zl(m,m,l) +s=A.aU(m,m,m,m,m,m) +r=s.ax +q=new A.a(new Float64Array(2)) +q.ag(20) +p=r.at.e +p.a7(q) +p.D() +r.dx=null +r=s +q=$.aC() +p=$.aL() +o=A.b([],t.u) +n=A.aP(A.aQ(),t.y) +r=new A.yw(l,r,q,p,B.m,o,n,A.C(t.S),A.C(t.F),0,m,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,m,l,t.E) +return A.aO(r,m,m,m,m,t.u7)}, +$S:533} +A.bax.prototype={ +$1(a){var s,r,q,p,o,n,m=null,l=new A.a(new Float64Array(2)) +l.p(0,10) +s=A.bEd() +s.ske(l) +l=s +s=A.aU(m,m,m,m,m,m) +r=s.ax +q=new A.a(new Float64Array(2)) +q.ag(10) +p=r.at.e +p.a7(q) +p.D() +r.dx=null +r=s +q=$.aC() +p=$.aL() +o=A.b([],t.u) +n=A.aP(A.aQ(),t.y) +r=new A.yQ(l,r,q,p,B.m,o,n,A.C(t.S),A.C(t.F),0,m,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,m,l,t.E) +return A.aO(r,m,m,m,m,t.cL)}, +$S:534} +A.baz.prototype={ +$1(b5){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,b4=new A.a(new Float64Array(2)) +b4.p(0,10) +s=$.js() +r=t.rK +q=A.b([],r) +p=A.b([],t.Vn) +o=new A.ce() +$.fJ() +o.bR(0) +n=new A.ce() +n.bR(0) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +f=new Float64Array(2) +e=A.e6() +r=A.b([],r) +d=new A.ce() +d.bR(0) +c=A.e6() +b=A.dQ() +a=A.dQ() +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new Float64Array(2) +a8=new Float64Array(2) +a9=new Float64Array(2) +b0=new Float64Array(2) +b1=new Float64Array(2) +b2=new A.a(new Float64Array(2)) +b2.v(s) +b1=new A.iv(q,p,b2,new A.dK(),new A.ct(o),new A.ct(n),new A.ec(0,0,0),new A.be(new A.a(m),new A.av(0,1)),new A.a(l),new A.a(k),new A.ix(),new A.iy(new A.dG(new A.a(j)),new A.a(i),new A.a(h)),new A.dz(new A.a(g),new A.a(f)),e,r,new A.ct(d),c,new A.ir(b,a,new A.bP(new A.a(a0),new A.a(a1),new A.a(a2)),new A.bP(new A.a(a3),new A.a(a4),new A.a(a5))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a6),new A.a(a7),new A.a(a8)),new A.bP(new A.a(a9),new A.a(b0),new A.a(b1))) +s=A.jC() +r=A.b([],t.t) +b1.f=b1.at=b1.Q=b1.z=!0 +b1.a=4 +s=new A.hM(new A.i7(s,r,A.C(t.vI)),A.b([],t.go)) +s.c=new A.i5() +b1.b=s +b1.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +r=A.b([],t.ZS) +q=A.b([],t.Ic) +p=A.b([],t.dK) +o=A.b([],t.eR) +n=A.b([],t.M0) +m=A.b([],t.DZ) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +f=new Float64Array(2) +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +b1.ay=new A.ii(r,A.C(t.W8),q,p,o,n,m,b1,new A.cH(new A.a(l),new A.a(k)),new A.cH(new A.a(j),new A.a(i)),new A.a(h),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(f),new A.av(0,1)),new A.io(new A.dz(new A.a(e),new A.a(d)),new A.dG(new A.a(c))),new A.av(0,1),new A.be(new A.a(b),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +s.d=new A.iw() +s=t.s +r=t.g +q=new A.a1v(b3,b1,-2147483647,b3,B.e,new A.e([],s),new A.e([],r)) +q.ske(b4) +b4=q +q=A.aU(b3,b3,b3,b3,b3,b3) +p=q.ax +o=new A.a(new Float64Array(2)) +o.ag(10) +n=p.at.e +n.a7(o) +n.D() +p.dx=null +p=q +o=$.aC() +n=$.aL() +m=A.b([],t.u) +l=A.aP(A.aQ(),t.y) +s=new A.yz(b4,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,b3,B.e,new A.e([],s),new A.e([],r)) +s.aT(q,b3,b4,t.E) +return A.aO(s,b3,b3,b3,b3,t.fK)}, +$S:537} +A.baA.prototype={ +$1(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=null,a9=$.js(),b0=t.rK,b1=A.b([],b0),b2=A.b([],t.Vn),b3=new A.ce() +$.fJ() +b3.bR(0) +s=new A.ce() +s.bR(0) +r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=A.e6() +b0=A.b([],b0) +i=new A.ce() +i.bR(0) +h=A.e6() +g=A.dQ() +f=A.dQ() +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new A.a(new Float64Array(2)) +a7.v(a9) +a6=new A.iv(b1,b2,a7,new A.dK(),new A.ct(b3),new A.ct(s),new A.ec(0,0,0),new A.be(new A.a(r),new A.av(0,1)),new A.a(q),new A.a(p),new A.ix(),new A.iy(new A.dG(new A.a(o)),new A.a(n),new A.a(m)),new A.dz(new A.a(l),new A.a(k)),j,b0,new A.ct(i),h,new A.ir(g,f,new A.bP(new A.a(e),new A.a(d),new A.a(c)),new A.bP(new A.a(b),new A.a(a),new A.a(a0))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a1),new A.a(a2),new A.a(a3)),new A.bP(new A.a(a4),new A.a(a5),new A.a(a6))) +a9=A.jC() +b0=A.b([],t.t) +a6.f=a6.at=a6.Q=a6.z=!0 +a6.a=4 +a9=new A.hM(new A.i7(a9,b0,A.C(t.vI)),A.b([],t.go)) +a9.c=new A.i5() +a6.b=a9 +a6.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +b0=A.b([],t.ZS) +b1=A.b([],t.Ic) +b2=A.b([],t.dK) +b3=A.b([],t.eR) +s=A.b([],t.M0) +r=A.b([],t.DZ) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +a6.ay=new A.ii(b0,A.C(t.W8),b1,b2,b3,s,r,a6,new A.cH(new A.a(q),new A.a(p)),new A.cH(new A.a(o),new A.a(n)),new A.a(m),new A.be(new A.a(l),new A.av(0,1)),new A.be(new A.a(k),new A.av(0,1)),new A.io(new A.dz(new A.a(j),new A.a(i)),new A.dG(new A.a(h))),new A.av(0,1),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +a9.d=new A.iw() +a9=t.s +b0=t.g +b1=new A.aaB(B.O,a8,a6,-2147483647,a8,B.e,new A.e([],a9),new A.e([],b0)) +b1.ske(a7) +b2=A.aU(a8,a8,a8,a8,a8,a8) +b3=b2.ax +s=new A.a(new Float64Array(2)) +s.ag(10) +r=b3.at.e +r.a7(s) +r.D() +b3.dx=null +b3=b2 +s=$.aC() +r=$.aL() +q=A.b([],t.u) +p=A.aP(A.aQ(),t.y) +a9=new A.Bl(b1,b3,s,r,B.m,q,p,A.C(t.S),A.C(t.F),0,a8,B.e,new A.e([],a9),new A.e([],b0)) +a9.aT(b2,a8,b1,t.E) +return A.aO(a9,a8,a8,a8,a8,t.H8)}, +$S:539} +A.baB.prototype={ +$1(b5){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,b4=new A.a(new Float64Array(2)) +b4.p(0,10) +s=$.js() +r=t.rK +q=A.b([],r) +p=A.b([],t.Vn) +o=new A.ce() +$.fJ() +o.bR(0) +n=new A.ce() +n.bR(0) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +f=new Float64Array(2) +e=A.e6() +r=A.b([],r) +d=new A.ce() +d.bR(0) +c=A.e6() +b=A.dQ() +a=A.dQ() +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new Float64Array(2) +a8=new Float64Array(2) +a9=new Float64Array(2) +b0=new Float64Array(2) +b1=new Float64Array(2) +b2=new A.a(new Float64Array(2)) +b2.v(s) +b1=new A.iv(q,p,b2,new A.dK(),new A.ct(o),new A.ct(n),new A.ec(0,0,0),new A.be(new A.a(m),new A.av(0,1)),new A.a(l),new A.a(k),new A.ix(),new A.iy(new A.dG(new A.a(j)),new A.a(i),new A.a(h)),new A.dz(new A.a(g),new A.a(f)),e,r,new A.ct(d),c,new A.ir(b,a,new A.bP(new A.a(a0),new A.a(a1),new A.a(a2)),new A.bP(new A.a(a3),new A.a(a4),new A.a(a5))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a6),new A.a(a7),new A.a(a8)),new A.bP(new A.a(a9),new A.a(b0),new A.a(b1))) +s=A.jC() +r=A.b([],t.t) +b1.f=b1.at=b1.Q=b1.z=!0 +b1.a=4 +s=new A.hM(new A.i7(s,r,A.C(t.vI)),A.b([],t.go)) +s.c=new A.i5() +b1.b=s +b1.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +r=A.b([],t.ZS) +q=A.b([],t.Ic) +p=A.b([],t.dK) +o=A.b([],t.eR) +n=A.b([],t.M0) +m=A.b([],t.DZ) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +f=new Float64Array(2) +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +b1.ay=new A.ii(r,A.C(t.W8),q,p,o,n,m,b1,new A.cH(new A.a(l),new A.a(k)),new A.cH(new A.a(j),new A.a(i)),new A.a(h),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(f),new A.av(0,1)),new A.io(new A.dz(new A.a(e),new A.a(d)),new A.dG(new A.a(c))),new A.av(0,1),new A.be(new A.a(b),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +s.d=new A.iw() +s=t.s +r=t.g +q=new A.ace(b3,b1,-2147483647,b3,B.e,new A.e([],s),new A.e([],r)) +q.ske(b4) +b4=q +q=A.aU(b3,b3,b3,b3,b3,b3) +p=q.ax +o=new A.a(new Float64Array(2)) +o.ag(10) +n=p.at.e +n.a7(o) +n.D() +p.dx=null +p=q +o=$.aC() +n=$.aL() +m=A.b([],t.u) +l=A.aP(A.aQ(),t.y) +s=new A.BS(b4,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,b3,B.e,new A.e([],s),new A.e([],r)) +s.aT(q,b3,b4,t.E) +return A.aO(s,b3,b3,b3,b3,t.QA)}, +$S:541} +A.baC.prototype={ +$1(b5){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=null,a9=new Float64Array(2),b0=$.js(),b1=t.rK,b2=A.b([],b1),b3=A.b([],t.Vn),b4=new A.ce() +$.fJ() +b4.bR(0) +s=new A.ce() +s.bR(0) +r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=A.e6() +b1=A.b([],b1) +i=new A.ce() +i.bR(0) +h=A.e6() +g=A.dQ() +f=A.dQ() +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new A.a(new Float64Array(2)) +a7.v(b0) +a6=new A.iv(b2,b3,a7,new A.dK(),new A.ct(b4),new A.ct(s),new A.ec(0,0,0),new A.be(new A.a(r),new A.av(0,1)),new A.a(q),new A.a(p),new A.ix(),new A.iy(new A.dG(new A.a(o)),new A.a(n),new A.a(m)),new A.dz(new A.a(l),new A.a(k)),j,b1,new A.ct(i),h,new A.ir(g,f,new A.bP(new A.a(e),new A.a(d),new A.a(c)),new A.bP(new A.a(b),new A.a(a),new A.a(a0))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a1),new A.a(a2),new A.a(a3)),new A.bP(new A.a(a4),new A.a(a5),new A.a(a6))) +b0=A.jC() +b1=A.b([],t.t) +a6.f=a6.at=a6.Q=a6.z=!0 +a6.a=4 +b0=new A.hM(new A.i7(b0,b1,A.C(t.vI)),A.b([],t.go)) +b0.c=new A.i5() +a6.b=b0 +a6.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +b1=A.b([],t.ZS) +b2=A.b([],t.Ic) +b3=A.b([],t.dK) +b4=A.b([],t.eR) +s=A.b([],t.M0) +r=A.b([],t.DZ) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +a6.ay=new A.ii(b1,A.C(t.W8),b2,b3,b4,s,r,a6,new A.cH(new A.a(q),new A.a(p)),new A.cH(new A.a(o),new A.a(n)),new A.a(m),new A.be(new A.a(l),new A.av(0,1)),new A.be(new A.a(k),new A.av(0,1)),new A.io(new A.dz(new A.a(j),new A.a(i)),new A.dG(new A.a(h))),new A.av(0,1),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +b0.d=new A.iw() +b0=t.s +b1=t.g +b2=new A.ZT(a8,a6,-2147483647,a8,B.e,new A.e([],b0),new A.e([],b1)) +b2.ske(new A.a(a9)) +a9=b2 +b2=A.aU(a8,a8,a8,a8,a8,a8) +b3=b2.ax +b4=new A.a(new Float64Array(2)) +b4.ag(10) +s=b3.at.e +s.a7(b4) +s.D() +b3.dx=null +b3=b2 +b4=$.aC() +s=$.aL() +r=A.b([],t.u) +q=A.aP(A.aQ(),t.y) +b0=new A.xR(a9,b3,b4,s,B.m,r,q,A.C(t.S),A.C(t.F),0,a8,B.e,new A.e([],b0),new A.e([],b1)) +b0.aT(b2,a8,a9,t.E) +return A.aO(b0,a8,a8,a8,a8,t.gL)}, +$S:550} +A.baD.prototype={ +$1(a){var s,r,q,p,o,n,m=null,l=new A.a(new Float64Array(2)) +l.p(0,10) +l=A.zl(m,m,l) +s=A.aU(m,m,m,m,m,m) +r=s.ax +q=new A.a(new Float64Array(2)) +q.ag(20) +p=r.at.e +p.a7(q) +p.D() +r.dx=null +r=s +q=$.aC() +p=$.aL() +o=A.b([],t.u) +n=A.aP(A.aQ(),t.y) +r=new A.C1(l,r,q,p,B.m,o,n,A.C(t.S),A.C(t.F),0,m,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,m,l,t.E) +return A.aO(r,m,m,m,m,t.wf)}, +$S:561} +A.baE.prototype={ +$1(a){var s,r,q,p,o,n,m=null,l=new A.a(new Float64Array(2)) +l.ag(0) +l=A.zl(m,m,l) +s=A.aU(m,m,m,m,m,m) +r=s.ax +q=new A.a(new Float64Array(2)) +q.ag(10) +p=r.at.e +p.a7(q) +p.D() +r.dx=null +r=s +q=$.aC() +p=$.aL() +o=A.b([],t.u) +n=A.aP(A.aQ(),t.y) +r=new A.yU(l,r,q,p,B.m,o,n,A.C(t.S),A.C(t.F),0,m,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,m,l,t.E) +return A.aO(r,m,m,m,m,t.d4)}, +$S:563} +A.baF.prototype={ +$1(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=null,a9=$.js(),b0=t.rK,b1=A.b([],b0),b2=A.b([],t.Vn),b3=new A.ce() +$.fJ() +b3.bR(0) +s=new A.ce() +s.bR(0) +r=new Float64Array(2) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=A.e6() +b0=A.b([],b0) +i=new A.ce() +i.bR(0) +h=A.e6() +g=A.dQ() +f=A.dQ() +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new Float64Array(2) +a5=new Float64Array(2) +a6=new Float64Array(2) +a7=new A.a(new Float64Array(2)) +a7.v(a9) +a6=new A.iv(b1,b2,a7,new A.dK(),new A.ct(b3),new A.ct(s),new A.ec(0,0,0),new A.be(new A.a(r),new A.av(0,1)),new A.a(q),new A.a(p),new A.ix(),new A.iy(new A.dG(new A.a(o)),new A.a(n),new A.a(m)),new A.dz(new A.a(l),new A.a(k)),j,b0,new A.ct(i),h,new A.ir(g,f,new A.bP(new A.a(e),new A.a(d),new A.a(c)),new A.bP(new A.a(b),new A.a(a),new A.a(a0))),new A.is(B.bk),new A.dK(),new A.bP(new A.a(a1),new A.a(a2),new A.a(a3)),new A.bP(new A.a(a4),new A.a(a5),new A.a(a6))) +a9=A.jC() +b0=A.b([],t.t) +a6.f=a6.at=a6.Q=a6.z=!0 +a6.a=4 +a9=new A.hM(new A.i7(a9,b0,A.C(t.vI)),A.b([],t.go)) +a9.c=new A.i5() +a6.b=a9 +a6.ax=new A.ij(new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak(),new A.ak()) +b0=A.b([],t.ZS) +b1=A.b([],t.Ic) +b2=A.b([],t.dK) +b3=A.b([],t.eR) +s=A.b([],t.M0) +r=A.b([],t.DZ) +q=new Float64Array(2) +p=new Float64Array(2) +o=new Float64Array(2) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +a6.ay=new A.ii(b0,A.C(t.W8),b1,b2,b3,s,r,a6,new A.cH(new A.a(q),new A.a(p)),new A.cH(new A.a(o),new A.a(n)),new A.a(m),new A.be(new A.a(l),new A.av(0,1)),new A.be(new A.a(k),new A.av(0,1)),new A.io(new A.dz(new A.a(j),new A.a(i)),new A.dG(new A.a(h))),new A.av(0,1),new A.be(new A.a(g),new A.av(0,1)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +a9.d=new A.iw() +a9=t.s +b0=t.g +b1=new A.a0b(a8,a6,-2147483647,a8,B.e,new A.e([],a9),new A.e([],b0)) +b1.ske(a7) +b2=A.aU(a8,a8,a8,a8,a8,a8) +b3=b2.ax +s=new A.a(new Float64Array(2)) +s.ag(10) +r=b3.at.e +r.a7(s) +r.D() +b3.dx=null +b3=b2 +s=$.aC() +r=$.aL() +q=A.b([],t.u) +p=A.aP(A.aQ(),t.y) +a9=new A.yb(b1,b3,s,r,B.m,q,p,A.C(t.S),A.C(t.F),0,a8,B.e,new A.e([],a9),new A.e([],b0)) +a9.aT(b2,a8,b1,t.E) +return A.aO(a9,a8,a8,a8,a8,t.UT)}, +$S:569} +A.baG.prototype={ +$1(a){var s,r,q,p,o,n,m,l=null,k=t.d,j=A.b([],k) +k=A.b([],k) +s=new Float64Array(2) +s=A.zl(l,l,new A.a(s)) +r=A.aU(l,l,l,l,l,l) +q=r.ax +p=new A.a(new Float64Array(2)) +p.ag(10) +o=q.at.e +o.a7(p) +o.D() +q.dx=null +q=r +p=$.aC() +o=$.aL() +n=A.b([],t.u) +m=A.aP(A.aQ(),t.y) +k=new A.w9(B.O,j,k,s,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,l,B.e,new A.e([],t.s),new A.e([],t.g)) +k.aT(r,l,s,t.E) +return A.aO(k,l,l,l,l,t.CY)}, +$S:575} +A.bay.prototype={ +$1(a){return B.IW}, +$S:577} +A.bb1.prototype={ +$1(a){var s=null +return A.aO(A.blk(),s,s,s,s,t.nE)}, +$S:585} +A.bb2.prototype={ +$1(a){var s=null +return A.aO(A.blH(),s,s,s,s,t.AI)}, +$S:589} +A.bb3.prototype={ +$1(a){var s=null +return A.aO(A.bmN(),s,s,s,s,t.E4)}, +$S:591} +A.bb4.prototype={ +$1(a){var s=null +return A.aO(A.bmQ(),s,s,s,s,t.bA)}, +$S:592} +A.bb5.prototype={ +$1(a){var s=null +return A.aO(A.bo5(),s,s,s,s,t.UV)}, +$S:597} +A.bb6.prototype={ +$1(a){var s=null +return A.aO(A.bo8(),s,s,s,s,t.Nn)}, +$S:598} +A.bb7.prototype={ +$1(a){var s=null +return A.aO(A.boV(),s,s,s,s,t.lJ)}, +$S:600} +A.bb8.prototype={ +$1(a){var s=null +return A.aO(A.boZ(),s,s,s,s,t.Qi)}, +$S:601} +A.bb9.prototype={ +$1(a){var s=null +return A.aO(A.bph(),s,s,s,s,t.T0)}, +$S:603} +A.bba.prototype={ +$1(a){var s=null +return A.aO(A.bpj(),s,s,s,s,t.X2)}, +$S:606} +A.bbb.prototype={ +$1(a){var s=null +return A.aO(A.bqV(),s,s,s,s,t.AW)}, +$S:607} +A.qZ.prototype={} +A.acd.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +q.I(0,A.l_(q.gaC(),null)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){return this.aWK(a)}, +aWK(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g +var $async$cb=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.nZ(a) +p=B.b.ga_(a.c) +o=A.b([],t.Q9) +for(p=p.a,n=0;n<20;++n){m=6.283185307179586*(n/20) +l=Math.cos(m) +m=Math.sin(m) +k=p[0] +j=p[1] +i=new Float64Array(2) +i[0]=5*l+k +i[1]=5*m+j +h=A.l6(new A.a(i),B.R,null,0.5) +q.J(h) +o.push(h)}s=2 +return A.x(A.f2(new A.W(o,new A.aTG(),t.b1),t.H),$async$cb) +case 2:g=A.blj(t.o9) +g.r=10 +g.w=0.8 +B.b.al(o,new A.aTH(g)) +p=q.go +p.iQ(A.bli(p,g)) +return A.p(null,r)}}) +return A.q($async$cb,r)}} +A.aTG.prototype={ +$1(a){return a.gkZ(0)}, +$S:609} +A.aTH.prototype={ +$1(a){var s=a.at +s===$&&A.c() +this.a.aaP(s)}, +$S:610} +A.aqa.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.aqc.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.r5.prototype={} +A.a2A.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +q.I(0,A.l_(q.gaC(),null)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){return this.aWI(a)}, +aWI(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k +var $async$cb=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.nZ(a) +p=B.b.ga_(a.c) +o=A.l6(p,B.R,null,2) +p=p.a +n=p[0] +p=p[1] +m=new A.a(new Float64Array(2)) +m.p(n+3,p+3) +l=A.l6(m,B.R,null,2) +q.I(0,A.b([o,l],t.W)) +s=2 +return A.x(A.f2(A.b([o.gkZ(0),l.gkZ(0)],t.mo),t.H),$async$cb) +case 2:m=t.o9 +k=A.blG(m,m) +m=o.at +m===$&&A.c() +p=l.at +p===$&&A.c() +k.rf(0,m,p,m.f.c,p.f.c) +k.r=10 +k.w=3 +k.x=0.2 +q.go.iQ(A.blF(k)) +return A.p(null,r)}}) +return A.q($async$cb,r)}} +A.ahY.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.ahZ.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.rn.prototype={} +A.a46.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +p=A.l_(q.gaC(),null) +q.ry=B.b.ga9(p) +q.I(0,p) +o=A.l6(new A.a(new Float64Array(2)),B.R,null,3) +q.to=o +q.J(o) +s=2 +return A.x(A.f2(A.b([q.to.gkZ(0),q.ry.gkZ(0)],t.mo),t.H),$async$n) +case 2:o=q.to.at +o===$&&A.c() +n=q.ry.at +n===$&&A.c() +m=new A.a(new Float64Array(2)) +l=new A.a(new Float64Array(2)) +k=new A.a45(m,l,!1,t.oV) +j=o.f.c +k.d=o +k.e=n +m.v(A.k_(o.d,j)) +l.v(A.k_(n.d,j)) +k.f=!0 +k.w=k.r=500 +o=new Float64Array(2) +n=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new Float64Array(4) +g=new Float64Array(2) +f=new A.ec(0,0,0) +f.a=B.c.bK(127.5) +f.b=B.f.bK(204) +f.c=B.f.bK(204) +f.d=1 +o=new A.a44(new A.a(g),new A.a(o),new A.a(n),new A.a(j),new A.a(i),new A.jL(h),m,l,f) +o.qs(k) +o.y=k.r +o.z=k.w +q.go.iQ(o) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){return this.aWJ(a)}, +aWJ(a){var s=0,r=A.r(t.H),q=this,p +var $async$cb=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.nZ(a) +p=q.to +p===$&&A.c() +p=p.at +p===$&&A.c() +p.vh(A.oM(null).a2(0,5000)) +return A.p(null,r)}}) +return A.q($async$cb,r)}} +A.ajy.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.ajz.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.rp.prototype={} +A.a4i.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c +var $async$n=A.t(function(b,a0){if(b===1)return A.o(a0,r) +while(true)switch(s){case 0:q.en(0) +p=q.to +o=A.a2U(20,p,2) +q.J(o) +n=new A.a(new Float64Array(2)) +n.p(5,0) +m=p.Y(0,n) +l=A.l6(m,B.R,null,4) +q.J(l) +n=new A.a(new Float64Array(2)) +n.p(6,0) +k=m.Y(0,n) +j=A.l6(k,B.R,null,2) +q.J(j) +s=2 +return A.x(A.f2(A.b([o.gkZ(0),l.gkZ(0),j.gkZ(0)],t.mo),t.H),$async$n) +case 2:n=o.at +n===$&&A.c() +i=q.go +h=i.fm(A.fb(0,0,0,!1,null,null,B.a2,null)) +g=t.o9 +f=A.bgi(g,g) +g=new A.a(new Float64Array(2)) +g.p(0,1) +f.rf(0,h,n,p,g) +f.x=!0 +f.y=-10 +f.z=10 +e=A.bgh(f) +i.iQ(e) +q.ry=e +i=l.at +i===$&&A.c() +d=q.acF(i,m) +i=j.at +i===$&&A.c() +c=q.acF(i,k) +q.acx(q.ry,d,1) +q.acx(d,c,0.5) +c=q.ry +n=new Float64Array(2) +i=new Float64Array(2) +q.J(new A.a5F(c,p,new A.a(n),new A.a(i),0,null,B.e,new A.e([],t.s),new A.e([],t.g))) +return A.p(null,r)}}) +return A.q($async$n,r)}, +acF(a,b){var s,r=this.go,q=r.fm(A.fb(0,0,0,!1,null,null,B.a2,null)),p=t.o9,o=A.aQz(p,p) +o.Xm(0,q,a,b) +s=A.aQy(o) +r.iQ(s) +return s}, +acx(a9,b0,b1){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=new A.a(new Float64Array(2)),a6=new A.a(new Float64Array(2)),a7=new A.a4h(a5,a6,!1,t.UQ),a8=a9.a +a8===$&&A.c() +a7.d=a8 +s=b0.a +s===$&&A.c() +a7.e=s +a7.r=a9 +a7.w=b0 +a7.x=b1 +r=new A.a(new Float64Array(2)) +q=new A.a(new Float64Array(2)) +p=new A.a(new Float64Array(2)) +o=new A.a(new Float64Array(2)) +n=new Float64Array(2) +m=new Float64Array(2) +l=new Float64Array(2) +k=new Float64Array(2) +j=new Float64Array(2) +i=new Float64Array(2) +h=new A.ec(0,0,0) +h.a=B.c.bK(127.5) +h.b=B.f.bK(204) +h.c=B.f.bK(204) +h.d=1 +g=new A.a4g(a9,b0,a8,s,r,q,p,o,new A.a(n),new A.a(m),new A.a(l),new A.a(k),new A.a(j),new A.a(i),a5,a6,h) +g.qs(a7) +n=a9.b +n===$&&A.c() +g.a=n +f=n.d +e=n.f.e +d=a8.d +c=a8.f.e +if(a9 instanceof A.wi){b=t.kp.a(a7.r) +r.v(b.w) +a5.v(b.x) +g.ay=b.ay +p.cv() +a=e-c-g.ay}else{a0=new A.a(new Float64Array(2)) +a1=new A.a(new Float64Array(2)) +a2=t.JS.a(a7.r) +r.v(a2.w) +a5.v(a2.x) +a8=a2.Q +a8===$&&A.c() +g.ay=a8 +p.v(a2.y) +a1.v(A.ck(f.b,a5)) +a1.E(0,f.a) +a1.aq(0,d.a) +a0.v(A.tn(d.b,a1)) +a0.aq(0,r) +a=a0.bO(p)}a5=b0.b +a5===$&&A.c() +g.b=a5 +a3=a5.f.e +a4=s.f.e +a5=a7.w +q.v(a5.w) +a6.v(a5.x) +g.ch=a5.ay +o.cv() +o=g.ch +a5=a7.x +g.cx=a5 +g.CW=a+a5*(a3-a4-o) +g.cy=0 +this.go.iQ(g)}} +A.a5F.prototype={ +b4(a){var s,r,q=this,p=q.ay,o=q.at,n=o.y +p.v(n) +p.au(0,o.ax) +s=q.ax +p.E(0,s) +r=q.ch +r.v(n) +r.au(0,o.ay) +r.E(0,s) +p=p.a +r=r.a +a.e7(new A.i(p[0],p[1]),new A.i(r[0],r[1]),q.gn0())}} +A.ajG.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.rM.prototype={} +A.a7_.prototype={ +n(a0){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a +var $async$n=A.t(function(a1,a2){if(a1===1)return A.o(a2,r) +while(true)switch(s){case 0:q.en(0) +p=A.axJ(B.a2,null,1,new A.a(new Float64Array(2)),2) +q.J(p) +o=new A.a(new Float64Array(2)) +o.p(0,-5) +o=A.l6(o,B.R,null,2) +q.ry=o +q.J(o) +s=2 +return A.x(A.f2(A.b([q.ry.gkZ(0),p.gkZ(0)],t.mo),t.H),$async$n) +case 2:o=q.ry.at +o===$&&A.c() +n=p.at +n===$&&A.c() +m=new A.a(new Float64Array(2)) +l=new A.a(new Float64Array(2)) +k=new A.a(new Float64Array(2)) +j=new A.a6Z(m,l,k,!1,t.sg) +j.d=o +j.e=n +m.v(A.k_(o.d,n.d.a)) +i=o.f.e +j.w=n.f.e-i +j.y=j.x=1000 +j.z=0.1 +o=new A.a(new Float64Array(2)) +n=new Float64Array(2) +h=new Float64Array(2) +g=new Float64Array(2) +f=new Float64Array(2) +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(4) +b=new A.ec(0,0,0) +b.a=B.c.bK(127.5) +b.b=B.f.bK(204) +b.c=B.f.bK(204) +b.d=1 +a=new A.a6Y(o,new A.a(n),new A.a(h),new A.a(g),new A.a(f),new A.a(e),new A.a(d),new A.jL(c),l,k,b) +a.qs(j) +o.v(m) +a.x=j.w +a.z=0 +a.Q=j.x +a.as=j.y +a.at=j.z +q.go.iQ(a) +q.to=a +q.J(new A.a5E(a,0,null,B.e,new A.e([],t.s),new A.e([],t.g))) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){this.nZ(a) +this.x2=!this.x2}, +a8(a,b){var s,r,q,p,o,n,m,l=this +l.anv(0,b) +s=l.x2?-b:b +r=l.to +r===$&&A.c() +r=r.w.a +q=l.xr +q.p(r[0]+s,r[1]+s) +r=l.to +p=r.x+s +o=q.a +n=r.w +m=n.a +if(o[0]!==m[0]||o[1]!==m[1]){o=r.a +o===$&&A.c() +o.fw(!0) +r=r.b +r===$&&A.c() +r.fw(!0) +n.v(q)}r=l.to +if(p!==r.x){q=r.a +q===$&&A.c() +q.fw(!0) +q=r.b +q===$&&A.c() +q.fw(!0) +r.x=p}}} +A.a5E.prototype={ +b4(a){var s,r,q=this.at,p=q.a +p===$&&A.c() +s=new Float64Array(2) +new A.a(s).v(p.d.a) +p=s[0] +s=s[1] +q=q.b +q===$&&A.c() +r=new Float64Array(2) +new A.a(r).v(q.d.a) +a.e7(new A.i(p,s),new A.i(r[0],r[1]),this.gn0())}} +A.als.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.rN.prototype={} +A.a72.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +q.I(0,A.l_(q.gaC(),null)) +p=new A.a(new Float64Array(2)) +q.to=q.go.fm(A.fb(0,0,0,!1,null,null,B.a2,null)) +o=A.l6(p,B.R,null,5) +q.ry=o +q.J(o) +q.J(A.aAc(p,!1)) +q.J(A.aAc(p,!0)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +wh(a,b){var s,r,q=this +q.Os(0,b) +s=t.o9 +r=A.bo7(s,s) +s=q.ry +s===$&&A.c() +s=s.at +s===$&&A.c() +r.w=3000*s.ax*10 +r.y=0.1 +r.x=5 +r.r.v(s.d.a) +r.f=!1 +s=q.to +s===$&&A.c() +r.d=s +s=q.ry.at +s===$&&A.c() +r.e=s +if(q.x1==null){s=A.bo6(r) +q.x1=s +q.go.iQ(s)}}, +pW(a){var s=this.x1 +if(s!=null)s.a0b(B.b.ga_(a.c).a)}, +pV(a,b){var s,r=this +r.AR(0,b) +s=r.x1 +s.toString +r.go.Kg(s) +r.x1=null}} +A.alw.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.bm,t.F)==null){r=A.An() +s.gc8().u(0,B.bm,r) +s.J(r)}}} +A.alx.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.td.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.nX(0) +p=q.hJ +o=A.a2U(6,p,6) +q.k3.J(o) +s=2 +return A.x(A.f2(A.b([o.gkZ(0)],t.mo),t.H),$async$n) +case 2:n=o.at +n===$&&A.c() +m=q.k3.go.fm(A.fb(0,0,0,!1,null,null,B.a2,null)) +l=t.o9 +k=A.bgi(l,l) +l=new A.a(new Float64Array(2)) +l.p(1,0) +k.rf(0,n,m,p,l) +k.x=!0 +k.y=-20 +k.z=20 +k.Q=!0 +k.at=1 +k.as=100 +j=A.bgh(k) +q.k3.go.iQ(j) +l=q.k3 +n=new Float64Array(2) +i=new Float64Array(2) +l.J(new A.a5D(j,p,new A.a(n),new A.a(i),0,null,B.e,new A.e([],t.s),new A.e([],t.g))) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.a5D.prototype={ +b4(a){var s,r,q=this,p=q.ay,o=q.at,n=o.y +p.v(n) +p.au(0,o.ax) +s=q.ax +p.E(0,s) +r=q.ch +r.v(n) +r.au(0,o.ay) +r.E(0,s) +p=p.a +r=r.a +a.e7(new A.i(p[0],p[1]),new A.i(r[0],r[1]),q.gn0())}} +A.te.prototype={ +n(a2){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1 +var $async$n=A.t(function(a3,a4){if(a3===1)return A.o(a4,r) +while(true)switch(s){case 0:q.nX(0) +p=q.k4.ax.gun() +o=(p.c-p.a)/5 +p=-o +n=new A.a(new Float64Array(2)) +n.p(p,-10) +m=A.l6(n,B.a2,null,2) +n=new A.a(new Float64Array(2)) +n.p(o,-10) +l=A.l6(n,B.a2,null,2) +n=new A.a(new Float64Array(2)) +n.p(p,20) +k=A.a2U(10,n,5) +p=new A.a(new Float64Array(2)) +p.p(o,20) +j=A.a2U(10,p,7) +q.k3.I(0,A.b([k,j,m,l],t.W)) +s=2 +return A.x(A.f2(A.b([k.gkZ(0),j.gkZ(0),m.gkZ(0),l.gkZ(0)],t.mo),t.H),$async$n) +case 2:p=new A.a(new Float64Array(2)) +p.p(-1,1) +n=new A.a(new Float64Array(2)) +n.p(1,1) +i=new A.a(new Float64Array(2)) +h=new A.a(new Float64Array(2)) +g=new A.a9p(p,n,i,h,!0,t.SA) +n=k.at +n===$&&A.c() +p=j.at +p===$&&A.c() +f=m.at +f===$&&A.c() +f=f.f.c +e=l.at +e===$&&A.c() +e=e.f.c +d=new A.a(new Float64Array(2)) +d.p(0,-k.ry/2) +c=n.d +d=A.dh(c,d) +b=j.at +a=new A.a(new Float64Array(2)) +a.p(0,-j.ry/2) +a=A.dh(b.d,a) +g.d=n +g.e=p +g.r=f +g.w=e +i.v(A.k_(c,d)) +h.v(A.k_(p.d,a)) +g.x=Math.sqrt(d.Y(0,f).gd2()) +g.y=Math.sqrt(a.Y(0,e).gd2()) +p=new A.a(new Float64Array(2)) +n=new A.a(new Float64Array(2)) +f=new Float64Array(2) +e=new Float64Array(2) +d=new Float64Array(2) +c=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new A.ec(0,0,0) +a0.a=B.c.bK(127.5) +a0.b=B.f.bK(204) +a0.c=B.f.bK(204) +a0.d=1 +a1=new A.a9o(p,n,new A.a(f),new A.a(e),new A.a(d),new A.a(c),new A.a(b),new A.a(a),i,h,a0) +a1.qs(g) +p.v(g.r) +n.v(g.w) +i.v(i) +h.v(h) +p=g.z +a1.as=p +a1.Q=g.x+p*g.y +a1.at=0 +q.k3.go.iQ(a1) +p=q.k3 +p.J(new A.a9q(a1,0,null,B.e,new A.e([],t.s),new A.e([],t.g))) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.a9q.prototype={ +b4(a){var s,r=this,q=r.at,p=q.a +p===$&&A.c() +p=A.dh(p.d,q.e).a +s=q.w.a +a.e7(new A.i(p[0],p[1]),new A.i(s[0],s[1]),r.gn0()) +p=q.b +p===$&&A.c() +p=A.dh(p.d,q.f).a +q=q.x.a +a.e7(new A.i(p[0],p[1]),new A.i(q[0],q[1]),r.gn0()) +a.e7(new A.i(s[0],s[1]),new A.i(q[0],q[1]),r.gn0())}} +A.tk.prototype={} +A.aaC.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +q.I(0,A.l_(q.gaC(),null)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){var s,r,q,p=null +this.nZ(a) +s=A.l6(B.b.ga_(a.c),B.R,p,2) +this.J(s) +r=A.ar() +q=B.t.aW() +r=new A.a0z(s,p,p,!0,r,$,q,p,p,0,p,B.e,new A.e([],t.s),new A.e([],t.g)) +r.iI(p,p,p,p,p,p,!0) +this.J(r)}} +A.a0z.prototype={ +io(){var s,r,q,p,o,n,m,l=this.RG,k=l.at +k===$&&A.c() +s=new A.a(new Float64Array(2)) +s.v(k.d.a) +r=A.fb(0,0,0,!1,null,s,B.R,null) +q=this.gaC().k3.go.fm(r) +for(p=0;p<5;++p){k=6.283185307179586*(p/5) +s=Math.cos(k) +k=Math.sin(k) +o=new Float64Array(2) +n=new A.DR(new A.a(o),B.ik) +n.b=1.2 +o[0]=6*s +o[1]=6*k +q.i5(new A.N1(n,null,0.1,0.9,50,!1,new A.EV()))}k=t.o9 +m=A.aQz(k,k) +m.Xm(0,q,l.at,q.d.a) +this.gaC().k3.go.iQ(A.aQy(m)) +return q}} +A.aoK.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.aoL.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.tm.prototype={} +A.aaG.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +s=2 +return A.x(q.K_(),$async$n) +case 2:q.K1(c) +return A.p(null,r)}}) +return A.q($async$n,r)}, +K_(){var s=0,r=A.r(t.o9),q,p=this,o,n,m,l,k,j,i,h,g +var $async$K_=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:h=p.gaC() +g=new A.a(new Float64Array(2)) +g.p(0,100) +o=h.k4.e5(g) +o.sN(0,0) +n=A.a2U(3,o,6) +g=p.J(n) +s=3 +return A.x(t.r.b(g)?g:A.cO(g,t.H),$async$K_) +case 3:h=n.at +h===$&&A.c() +g=p.go +m=g.fm(A.fb(0,0,0,!1,null,null,B.a2,null)) +l=p.gaC() +k=new Float64Array(2) +j=Math.abs(l.k4.e5(new A.a(k)).a[0]) +k=t.o9 +i=A.bgi(k,k) +l=new A.a(new Float64Array(2)) +l.p(1,0) +i.rf(0,h,m,o,l) +i.x=!0 +i.y=-j+3 +i.z=j-3 +g.iQ(A.bgh(i)) +q=n.at +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$K_,r)}, +K1(a){return this.aPe(a)}, +aPe(a5){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4 +var $async$K1=A.t(function(a6,a7){if(a6===1)return A.o(a7,r) +while(true)switch(s){case 0:p=q.go,o=t.D,n=t.r,m=a5,l=0 +case 2:if(!(l<50)){s=4 +break}k=m.f +j=new Float64Array(2) +j[0]=0 +j[1]=1 +i=new Float64Array(2) +h=new A.a(i) +g=k.c.a +i[1]=g[1] +i[0]=g[0] +h.E(0,new A.a(j)) +f=A.l6(h,B.R,B.l,0.5) +j=q.J(f) +if(!n.b(j)){i=new A.aM($.aK,o) +i.a=8 +i.c=j +j=i}s=5 +return A.x(j,$async$K1) +case 5:j=f.at +j===$&&A.c() +i=new Float64Array(2) +e=new Float64Array(2) +d=j.f +c=d.a.a +i[1]=c[1] +i[0]=c[0] +c=k.a.a +e[1]=c[1] +e[0]=c[0] +k=new Float64Array(2) +b=new A.a(k) +k[1]=g[1] +k[0]=g[0] +b.aq(0,d.c) +b=Math.sqrt(b.gd2()) +k=new Float64Array(2) +d=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(2) +a2=new Float64Array(2) +a3=new Float64Array(2) +a4=new A.ec(0,0,0) +a4.a=B.c.bK(127.5) +a4.b=B.f.bK(204) +a4.c=B.f.bK(204) +a4.d=1 +a=new A.aaF(new A.a(k),new A.a(d),new A.a(a),new A.a(a0),new A.a(a1),new A.a(a2),new A.a(a3),new A.a(i),new A.a(e),a4) +a.a=j +a.b=m +k[1]=i[1] +k[0]=i[0] +d[1]=e[1] +d[0]=e[0] +a.y=b +p.iQ(a) +m=f.at +case 3:++l +s=2 +break +case 4:return A.p(null,r)}}) +return A.q($async$K1,r)}} +A.aoS.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.bm,t.F)==null){r=A.An() +s.gc8().u(0,B.bm,r) +s.J(r)}}} +A.aoT.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.tP.prototype={} +A.aey.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +p=q.gaC() +o=q.gaC().k4.at.gaU().a[1] +n=new A.a(new Float64Array(2)) +n.p(50,o) +n=p.k4.e5(n) +n.sO(0,n.a[1]-10) +m=A.axJ(B.a2,B.l,20,n,5) +n=q.gaC() +p=q.gaC().k4.at.gaU().a[0] +o=q.gaC().k4.at.gaU().a[1] +l=new A.a(new Float64Array(2)) +l.p(p-50,o) +l=n.k4.e5(l) +l.sO(0,l.a[1]-10) +k=A.axJ(B.a2,B.l,20,l,5) +s=2 +return A.x(q.I(0,A.b([m,k],t.W)),$async$n) +case 2:q.JX(m,k) +return A.p(null,r)}}) +return A.q($async$n,r)}, +JX(a,b){return this.aP4(a,b)}, +aP4(a9,b0){var s=0,r=A.r(t.H),q=this,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 +var $async$JX=A.t(function(b1,b2){if(b1===1)return A.o(b2,r) +while(true)switch(s){case 0:a6=q.gaC() +a7=new Float64Array(2) +a8=a6.k4.e5(new A.a(a7)) +a8.aLJ(0) +a7=a9.at +a7===$&&A.c() +a7=a7.f.c.a[0] +a6=b0.at +a6===$&&A.c() +p=Math.ceil((Math.abs(a7)+Math.abs(a6.f.c.a[0])+5)/10) +a6=t.D,a7=t.r,o=a8.a,n=p/2,m=q.go,l=null,k=0 +case 2:if(!(k<10)){s=4 +break}j=p*k +i=o[0] +h=o[1] +g=new Float64Array(2) +g[0]=j-i+n +g[1]=h-20 +f=A.axJ(B.R,null,1,new A.a(g),p) +g=q.J(f) +if(a7.b(g))i=g +else{i=new A.aM($.aK,a6) +i.a=8 +i.c=g}s=5 +return A.x(i,$async$JX) +case 5:if(l!=null){i=f.at +i===$&&A.c() +h=o[0] +g=o[1] +e=new Float64Array(2) +d=new A.a(e) +e[0]=j-h+p +e[1]=g-20 +j=new Float64Array(2) +h=new Float64Array(2) +c=A.k_(l.d,d).a +j[1]=c[1] +j[0]=c[0] +c=A.k_(i.d,d).a +h[1]=c[1] +h[0]=c[0] +d=i.f.e +g=l.f.e +e=new Float64Array(2) +b=new Float64Array(2) +a=new Float64Array(2) +a0=new Float64Array(2) +a1=new Float64Array(9) +a2=new Float64Array(2) +a2[1]=j[1] +a2[0]=j[0] +a3=new Float64Array(2) +a3[1]=h[1] +a3[0]=h[0] +a4=new Float64Array(3) +a5=new A.ec(0,0,0) +a5.a=B.c.bK(127.5) +a5.b=B.f.bK(204) +a5.c=B.f.bK(204) +a5.d=1 +j=new A.aex(new A.a(a2),new A.a(a3),new A.dX(a4),new A.a(e),new A.a(b),new A.a(a),new A.a(a0),new A.id(a1),new A.a(j),new A.a(h),a5) +j.a=l +j.b=i +j.as=d-g +m.iQ(j)}j=f.at +j===$&&A.c() +case 3:++k,l=j +s=2 +break +case 4:return A.p(null,r)}}) +return A.q($async$JX,r)}, +cb(a){return this.aWL(a)}, +aWL(a){var s=0,r=A.r(t.H),q=this +var $async$cb=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.nZ(a) +q.J(A.l6(B.b.ga_(a.c),B.R,null,5)) +return A.p(null,r)}}) +return A.q($async$cb,r)}} +A.ast.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.asu.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.w9.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.nX(0) +q.k3.I(0,A.l_(q,null)) +for(p=t.s,o=t.g,n=0;n<4;++n)for(m=n*10,l=0;l<3;++l){k=q.k3 +j=new Float64Array(2) +j[0]=m +j[1]=l*20-20 +i=A.ar() +h=$.G() +g=h.B() +g.sA(0,B.l) +j=new A.uA(new A.a(j),null,null,!0,i,$,g,null,null,0,null,B.e,new A.e([],p),new A.e([],o)) +i=h.B() +i.sA(0,B.l) +j.S$=i +k.J(j)}p=q.k3 +o=$.G() +m=o.B() +m.sA(0,B.co) +m.sbM(1) +p.J(A.bnJ(q.kt,m)) +m=q.k3 +o=o.B() +o.sA(0,B.bi) +o.sbM(1) +m.J(A.bnJ(q.hK,o)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +kB(a,b){var s,r,q,p,o,n,m=this,l=m.k4.at.gC(0).a[0],k=m.k4.at.gC(0).a[1],j=new A.a(new Float64Array(2)) +j.p(l/4,k/2) +s=m.k4.e5(j) +j=b.gji().gba() +r=m.k4.e5(j) +l=new A.a(new Float64Array(2)) +l.p(0,2) +q=r.X(0,l) +l=m.kt +B.b.af(l) +l.push(s) +p=new A.aLK() +m.k3.go.ahj(p,s,q) +k=p.b +if(k!=null)l.push(k) +else l.push(q) +m.dP=p.a +l=new A.a(new Float64Array(2)) +l.p(0,2) +o=r.Y(0,l) +l=m.hK +B.b.af(l) +l.push(s) +n=new A.aE_() +m.k3.go.ahj(n,s,o) +k=n.b +if(k!=null)l.push(k) +else l.push(o) +m.fE=n.a +m.ao6(0,b)}, +a8(a,b){this.fO(0,b) +new A.ca(this.gbQ(0),t.VA).al(0,new A.aP_(this))}} +A.aP_.prototype={ +$1(a){var s=this.a,r=a===s.dP +if(r&&a===s.fE)a.S$.sA(0,B.fq) +else if(r)a.S$.sA(0,B.co) +else{s=s.fE +r=a.S$ +if(a===s)r.sA(0,B.bi) +else r.sA(0,B.l)}}, +$S:629} +A.a6e.prototype={ +a8(a,b){var s,r,q=this.ay +q.bF(0) +s=this.at +r=A.a5(s).h("W<1,i>") +q.Cq(A.ab(new A.W(s,new A.aJe(),r),!1,r.h("aI.E")),!1)}, +b4(a){var s,r,q,p,o,n +for(s=this.at,r=this.ax,q=0;q2){r=s.at +r===$&&A.c() +r.vh(s.y1) +s.x2=0}}}, +CE(a,b){var s,r,q=this +if(a instanceof A.ID)a.S$=q.S$ +if(a instanceof A.Tv)return +if(a instanceof A.iE){s=q.S$ +r=q.RG +r===$&&A.c() +if(s!==r)q.S$=a.S$ +else a.S$=s}}} +A.Tv.prototype={ +CE(a,b){if(a instanceof A.iE)a.rx=!0}} +A.afF.prototype={} +A.asv.prototype={} +A.ID.prototype={ +io(){var s,r,q,p=this,o=A.aCm() +o.c.v(p.RG) +o.d.v(p.rx) +o.r=o.w=!1 +s=A.jD(o,1,0.3,!1,0,null) +r=A.fb(0,0,0,!1,null,new A.a(new Float64Array(2)),B.a2,p) +p.S$.sbM(p.ry) +q=p.gaC().k3.go.fm(r) +q.i5(s) +return q}} +A.L8.prototype={ +a1H(a,b,c,d,e){if(b!=null)this.S$=new A.lu(b).aW() +else this.S$=A.Gw(100,null,0.9)}, +io(){var s,r,q,p=this,o=A.nj() +o.NY(p.rx/2,p.ry/2,new A.a(new Float64Array(2)),0) +s=A.jD(o,10,0.3,!1,0,null) +r=A.fb(0,0,0,!1,null,p.RG,p.to,p) +q=p.gaC().k3.go.fm(r) +q.i5(s) +return q}} +A.a2T.prototype={ +a8(a,b){var s,r,q=this +if(q.aN&&q.aa!=null){s=q.gaC().k3 +r=q.aa +r.toString +s.go.Kg(r) +q.aa=null +q.aN=!1}}, +pW(a){var s,r,q=this,p=B.b.ga_(a.c),o=t.o9,n=A.bo7(o,o) +o=q.at +o===$&&A.c() +n.w=o.ax*300 +n.y=0 +n.x=20 +n.r.v(o.d.a) +n.f=!1 +s=q.bp +if(s===$){r=q.gaC().k3.go.fm(A.fb(0,0,0,!1,null,null,B.a2,null)) +q.bp!==$&&A.N() +q.bp=r +s=r}n.d=s +n.e=q.at +o=q.aa +if(o==null){q.aa=A.bo6(n) +p=q.gaC().k3 +o=q.aa +o.toString +p.go.iQ(o)}else o.a0b(p.a) +return!1}, +pV(a,b){this.AR(0,b) +if(this.aa==null)return +this.aN=!0 +b.b=!1}} +A.aij.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.bm,t.F)==null){r=A.An() +s.gc8().u(0,B.bm,r) +s.J(r)}}} +A.wU.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.nX(0) +p=A.l_(q,0) +q.k3.I(0,p) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s,r=this +r.fO(0,b) +s=r.hK +B.b.al(s,new A.aXz(r)) +B.b.af(s) +B.b.al(r.hJ,new A.aXA())}} +A.aXz.prototype={ +$1(a){var s,r,q,p=this.a,o=p.kt +if(!o.aR(0,a)){s=A.fb(0,0,3,!1,null,new A.a(new Float64Array(2)),B.R,null) +r=p.k3.go.fm(s) +q=A.nj() +q.mF(4.6,0.8) +r.i5(A.jD(q,1,0.2,!1,0.8,null)) +o.u(0,a,r)}}, +$S:13} +A.aXA.prototype={ +$1(a){return a.$0()}, +$S:46} +A.DB.prototype={ +ab(a){var s,r,q,p,o,n=null,m=t.u,l=A.b([],m),k=t.S,j=A.b([],t.t),i=new A.a(new Float64Array(2)) +i.p(0,10) +i=A.zl(n,n,i) +s=A.aU(n,n,n,n,n,n) +r=s.ax +q=new A.a(new Float64Array(2)) +q.ag(20) +p=r.at.e +p.a7(q) +p.D() +r.dx=null +r=s +q=$.aC() +p=$.aL() +m=A.b([],m) +o=A.aP(A.aQ(),t.y) +m=new A.wU(l,A.D(k,t.o9),j,i,r,q,p,B.m,m,o,A.C(k),A.C(t.F),0,n,B.e,new A.e([],t.s),new A.e([],t.g)) +m.aT(s,n,i,t.E) +return A.aO(m,B.Zi,n,n,A.b3(["button1",new A.axB(),"button2",new A.axC()],t.N,t.GJ),t.XP)}} +A.axB.prototype={ +$2(a,b){b.hK.push(1) +return new A.uz(b,1,null)}, +$S:220} +A.axC.prototype={ +$2(a,b){b.hK.push(2) +return new A.uz(b,2,null)}, +$S:220} +A.uz.prototype={ +b5(){return A.bMz(this.c,this.d)}} +A.afV.prototype={ +at0(a,b){this.d.hJ.push(new A.aZb(this))}, +ab(a){var s,r,q=null,p=this.f +if(p==null)return A.dD(q,q,B.y,q,q,q,q,q,q,q) +else{s=p.d +r=this.d.k4 +s=r.at.ro(r.ax.at.ro(s.a,q),q).a +r=s[1] +s=s[0] +return A.kA(q,A.bh4(p.f.e,A.n8(B.af_,new A.aZa(this,p),q)),q,q,s-90,q,r-18,q)}}} +A.aZb.prototype={ +$0(){var s=this.a +s.aK(new A.aZ8(s))}, +$S:0} +A.aZ8.prototype={ +$0(){var s=this.a +s.f=s.d.kt.i(0,s.e)}, +$S:0} +A.aZa.prototype={ +$0(){this.a.aK(new A.aZ9(this.b))}, +$S:0} +A.aZ9.prototype={ +$0(){var s=new A.a(new Float64Array(2)) +s.p(0,1000) +return this.a.vh(s)}, +$S:0} +A.bap.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.BL(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.AA)}, +$S:641} +A.BL.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:f=A.bm(null,null,-2147483647) +q.I(0,A.b([f,A.j2(600,null,400,f)],t.W)) +p=$.G() +o=p.Z() +o.hq(B.a5u) +n=p.B() +n.sA(0,B.CT) +for(m=0;m<20;++m){p=A.kB(null,null,null,10) +p.S$=n +p.J(A.bfS(o,A.dr(!1,0,B.z,6,!0,null,null,null,m*0.3),!1,!0)) +f.J(p)}p=$.bvm() +l=A.bi0(p) +k=$.G().B() +k.sA(0,B.i3) +j=A.dW(B.acH,B.r) +i=A.ar() +h=new A.a(new Float64Array(2)) +g=$.aa() +g=new A.aJ(g,new Float64Array(2)) +g.a7(h) +g.D() +p=new A.Lk(B.vC,new A.bK(p,l,t.sO),k,j,null,i,g,B.j,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +p.b0(B.j,null,null,null,0,null,null,null,null) +f.J(p) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.LS.prototype={ +W(){return"ComputeType."+this.b}} +A.Lk.prototype={ +n(a){var s=this.ax +s.eX(0,200) +s.D() +s.dT(0,70) +s.D()}, +aX(){this.ok=new A.wK(0.4,this.gauC(),!0,!0) +return this.aq2()}, +a8(a,b){var s=this.ok +s===$&&A.c() +s.a8(0,b)}, +h3(){var s=this.ok +s===$&&A.c() +s.d=0 +s.e=!1 +this.ant()}, +H3(){var s=0,r=A.r(t.H),q=1,p,o=this,n,m,l,k,j +var $async$H3=A.t(function(a,b){if(a===1){p=b +s=q}while(true)switch(s){case 0:k=o.p1.a+1 +q=3 +n=null +case 6:switch(o.k4.a){case 0:s=8 +break +case 1:s=9 +break +default:s=7 +break}break +case 8:s=10 +return A.x(o.KJ$.aO4(A.bV5(),k,null,t.S,t.w),$async$H3) +case 10:n=b +s=7 +break +case 9:n=A.bi0(k) +s=7 +break +case 7:m=n +o.p1=new A.bK(k,m,t.sO) +q=1 +s=5 +break +case 3:q=2 +j=p +if(A.b2(j) instanceof A.KS)A.Zm().$1("Backpressure kicked in") +else throw j +s=5 +break +case 2:s=1 +break +case 5:return A.p(null,r) +case 1:return A.o(p,r)}}) +return A.q($async$H3,r)}, +cb(a){this.k4=B.ZX[(this.k4.a+1)%2]}, +gcg(a){var s,r,q=this.p4 +if(q===$){s=this.ax.a +r=s[0] +s=s[1] +q!==$&&A.N() +q=this.p4=new A.A(0,0,0+r,0+s)}return q}, +b4(a){var s,r,q,p,o,n,m=this +a.b7(m.gcg(0),m.p2) +s=m.p3 +r=m.k4 +q=m.R8 +if(q===$){p=m.gcg(0) +o=new A.a(new Float64Array(2)) +o.p(p.a,p.b) +p=new A.a(new Float64Array(2)) +p.ag(4) +n=o.X(0,p) +m.R8!==$&&A.N() +m.R8=n +q=n}s.jm(r.c).nC(a,q,B.o) +r=A.j(m.p1.a) +p=m.p1.b?"":" not" +q=m.RG +if(q===$){o=m.gcg(0).gbC() +n=new A.a(new Float64Array(2)) +n.p(o.a,o.b) +m.RG!==$&&A.N() +m.RG=n +q=n}s.jm(r+" is"+p+" a prime number").nC(a,q,B.j)}} +A.U7.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.U8.prototype={ +aX(){var s=0,r=A.r(t.H),q,p=this,o +var $async$aX=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:o=new A.aU0(new A.a2s(null,t.tK),$,$,null,null,!1,!1) +o.Ec() +p.KJ$=o +o.Ec() +q=p.aq1() +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$aX,r)}} +A.a08.prototype={ +Ff(){var s,r,q,p=this.gbQ(0).nw(0,t.Ac),o=p.length +if(o!==0)for(s=0;s") +this.p2=B.b.X(m,A.iN(new A.W(new A.cz(m,l),s,l.h("W")),!0,p)) +k=q.wb(r) +o.a7(k) +o.D() +m=new Float64Array(2) +l=new A.a(m) +j=k.a +m[1]=j[1] +m[0]=j[0] +l.dE() +i.a7(l) +i.D()}}, +abu(){var s,r,q,p,o,n,m,l,k=this.p2 +k===$&&A.c() +s=k.length +r=1/0 +q=1/0 +p=-1/0 +o=-1/0 +n=0 +for(;n3.141592653589793)m-=6.283185307179586 +if(m-s<-3.141592653589793)m+=6.283185307179586 +s=m-s +if(Math.abs(s)>1){a3.xr=p +a3.y1=m +o=p}else{a3.xr=q +a3.y1=m +a3.M=r +o=q}a3.bv=s/3 +a3.y2=Math.sqrt(o.Y(0,p).gd2())/3}if(a3.bn<=0)a3.aXD() +s=A.b([],t.d) +p=a3.x2 +p===$&&A.c() +o=a3.at +l=0 +for(;l<6;++l)s.push(o.wb(p[l].y)) +n=a3.y2 +k=n>0?Math.min(a5/n,1):0 +n=a3.bv +j=n>0?Math.min(a5/n,1):0 +n=a3.xr.a +i=n[0] +h=o.d +g=h.a +f=g[0] +n=n[1] +g=g[1] +e=(a3.y1-o.c)*j +d=new A.a(new Float64Array(2)) +d.p((i-f)*k,(n-g)*k) +h.a7(h.X(0,d)) +h.D() +o.c+=e +o.b=!0 +o.D() +a3.y2-=a5 +a3.bv-=a5 +for(n=a3.K,c=0;c<6;++c){b=s[c] +if(a3.b6===c<3){a=Math.min(a5/a3.bn,1) +a0=n[c] +i=new Float64Array(2) +a1=a0.a +i[1]=a1[1] +i[0]=a1[0] +new A.a(i).aq(0,b) +h=new Float64Array(2) +g=new A.a(h) +h[1]=i[1] +h[0]=i[0] +g.au(0,a) +i=new Float64Array(2) +a2=new A.a(i) +a1=b.a +i[1]=a1[1] +i[0]=a1[0] +a2.E(0,g) +b=a2}p[c].agS(o.e5(b))}a3.bn-=a5}, +aXD(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this +g.b6=!g.b6 +g.bn=0.1 +s=Math.min(0.16000000000000003/g.y2,1) +r=g.xr.a +q=g.at +p=q.d +o=p.a +n=(r[0]-o[0])*s +m=(r[1]-o[1])*s +l=(g.y1-q.c)*s +r=new A.a(new Float64Array(2)) +r.p(n,m) +p.a7(p.X(0,r)) +p.D() +q.c+=l +q.b=!0 +q.D() +for(r=g.K,k=0;k<6;++k)if(g.b6===k<3){o=r[k] +j=g.x2 +j===$&&A.c() +j=j[k] +i=new Float64Array(2) +i[0]=j.c +i[1]=j.d +h=q.wb(new A.a(i)).a +o=o.a +o[1]=h[1] +o[0]=h[0]}r=new A.a(new Float64Array(2)) +r.p(n,m) +p.a7(p.Y(0,r)) +p.D() +q.c-=l +q.b=!0 +q.D()}, +b4(a){var s,r,q,p,o,n=this +n.GH(a) +a.bU(0) +a.aJ(0,1,2) +s=n.ry +s===$&&A.c() +r=n.p4 +r===$&&A.c() +a.a3(s,r) +s=n.x1 +s===$&&A.c() +a.a3(s,r) +r=n.RG +r===$&&A.c() +s=n.p1 +s===$&&A.c() +a.a3(r,s) +q=n.R8 +q===$&&A.c() +a.a3(r,q) +r=n.to +r===$&&A.c() +p=n.p2 +p===$&&A.c() +a.a3(r,p) +p=n.x2 +p===$&&A.c() +r=p[0] +o=n.p3 +o===$&&A.c() +a.a3(r.x,o) +a.a3(p[1].x,o) +a.a3(p[2].x,o) +a.a3(p[3].x,o) +a.a3(p[4].x,o) +a.a3(p[5].x,o) +o=n.rx +o===$&&A.c() +a.a3(o,s) +a.a3(o,q) +a.bw(0)}} +A.a5q.prototype={ +agS(a){var s,r,q,p,o,n,m,l,k=this,j=k.r/2,i=a.a,h=k.a,g=k.b,f=h-i[0],e=g-i[1],d=Math.sqrt(f*f+e*e) +if(dr)return!1 +n=Math.sqrt(q-o*o) +m=(i[0]-h)/d +l=(i[1]-g)/d +i=k.x +i.bF(0) +i.a4(0,h,g) +r=k.w +i.q(0,h+m*o+r*l*n,g+l*o-r*m*n) +i.q(0,h+m*s,g+l*s) +r=d+j +i.q(0,h+m*r,g+l*r) +k.y.v(a) +return!0}} +A.agl.prototype={} +A.ya.prototype={ +mV(a){return B.va}, +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:m=q.k3 +l=$.G() +k=l.B() +k.sA(0,B.dd) +p=l.B() +p.sA(0,B.MP) +o=l.B() +o.sbM(1) +o.sU(0,B.u) +o.sA(0,B.Ow) +n=l.B() +n.sU(0,B.u) +n.sbM(0) +n.sA(0,B.NJ) +m.J(new A.a_r(k,p,o,n,0,null,B.e,new A.e([],t.s),new A.e([],t.g))) +m=l.B() +m.sU(0,B.u) +m.sbM(0.25) +m.sA(0,B.M7) +if(B.o.k(0,B.o)){l=new A.a(new Float64Array(2)) +l.p(0,0)}else{l=new A.a(new Float64Array(2)) +l.p(0,0) +k=new A.a(new Float64Array(2)) +k.p(0,0) +k=B.o.rD(l,B.o,k) +l=k}k=new A.a(new Float64Array(2)) +k.p(0,0) +k=A.fU(B.o,null,null,null,m,null,l,null,null,k) +q.R=k +k=q.k3.J(k) +s=2 +return A.x(t.r.b(k)?k:A.cO(k,t.H),$async$n) +case 2:q.k4.gED().cu(new A.ayc(q),t.P) +return A.p(null,r)}}) +return A.q($async$n,r)}, +fI(a){this.a0M(a) +if((this.k4.a&4)!==0)this.aiN(a)}, +aiN(a){var s,r,q,p=this,o=p.k4.at +o.CW=B.j +o.sC(0,a.a2(0,0.7)) +p.k4.at.ch.v(a.a2(0,0.6)) +o=p.R +o===$&&A.c() +s=p.k4.ax.gun() +r=p.k4.ax.gun() +q=new A.a(new Float64Array(2)) +q.p(s.a+1,r.b+1) +o=o.at.d +o.a7(q) +o.D() +o=p.R +q=p.k4.ax.gun() +r=p.k4.ax.gun() +s=new A.a(new Float64Array(2)) +s.p(q.c-q.a-2,r.d-r.b-2) +o.sC(0,s)}} +A.ayc.prototype={ +$1(a){var s=this.a,r=s.fx$ +r.toString +s.aiN(r)}, +$S:22} +A.aen.prototype={ +b4(a){var s=this.e +s.toString +s=t.Dg.a(s).gC(0).a +a.dm(A.jS(new A.A(0,0,0+s[0],0+s[1]),B.r8),this.at)}} +A.a_r.prototype={ +b4(a){var s,r +a.Ds(B.q,B.ms) +for(s=this.ch,r=-100;r<=100;r+=10){a.e7(new A.i(r,-100),new A.i(r,100),s) +a.e7(new A.i(-100,r),new A.i(100,r),s)}s=this.ay +a.e7(B.h,B.a35,s) +a.e7(B.h,B.a3f,s) +a.cs(B.h,1,this.ax)}, +jh(a){return!0}, +cb(a){var s,r,q,p,o,n=null,m=B.b.ga_(a.c).a,l=m[0] +m=m[1] +s=new A.a(new Float64Array(2)) +s.p(l,m) +m=$.G().B() +m.sA(0,B.l) +m.sU(0,B.u) +m.sbM(1) +l=new Float64Array(2) +r=new A.a(new Float64Array(2)) +r.ag(0) +q=B.t.aW() +p=A.ar() +o=$.aa() +o=new A.aJ(o,new Float64Array(2)) +o.a7(r) +o.D() +l=new A.a3q(new A.a(l),$,q,n,p,o,B.j,0,0,n,B.e,new A.e([],t.s),new A.e([],t.g)) +l.b0(B.j,n,n,n,0,s,n,n,r) +l.kj(B.j,n,n,n,m,n,s,n,n,r) +this.J(l)}} +A.a3q.prototype={ +a8(a,b){var s,r=this +r.shV(r.ghV()+b*10) +if(r.ghV()>=50)r.eb() +else{s=r.ghV() +r.S$.sA(0,A.S(B.c.ai(255*(1-s/50)),255,255,255))}}} +A.afC.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.yc.prototype={ +n(a2){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1 +var $async$n=A.t(function(a3,a4){if(a3===1)return A.o(a4,r) +while(true)switch(s){case 0:a0=$.G() +a1=a0.B() +a1.sU(0,B.u) +a1.sbM(1) +a1.sA(0,B.RR) +p=a0.B() +p.sA(0,B.OW) +o=a0.B() +o.sA(0,B.l) +n=a0.B() +n.sA(0,B.q) +m=a0.B() +l=t.O +m.sdk(A.Fd(B.h,10,A.b([B.M4,B.B],l),null,B.N,null,null,0)) +k=a0.Z() +k.a4(0,10,0) +k.l(17,0,28,20,10,20) +k.l(-8,20,3,0,10,0) +k.T(0) +j=a0.Z() +j.hq(B.a5s) +j.hq(B.a5t) +i=a0.Z() +i.hq(B.a5o) +i.hq(B.a5q) +h=new Float64Array(2) +g=new A.a(new Float64Array(2)) +g.p(20,20) +f=A.ar() +e=$.aa() +d=new A.aJ(e,new Float64Array(2)) +d.a7(g) +d.D() +c=t.s +b=t.g +a=new A.a8U(k,j,i,a1,p,o,n,m,new A.a(h),f,d,B.e8,0,0,null,B.e,new A.e([],c),new A.e([],b)) +a.b0(B.e8,null,null,null,0,null,null,null,g) +a1=new A.a(new Float64Array(2)) +a1.p(250,0) +f=f.d +f.a7(a1) +f.D() +f=q.k4 +a1=f.ax +p=new Float64Array(2) +o=new A.a(p) +o.p(400,100) +p=p[0]===0&&p[1]===0 +if(p)a1.ay=null +else{a1.ay=o +a1.IW()}f.aRN(a,!0) +f.a_Y(A.a9K(190,-50,810,50)) +a1=q.k3 +p=a0.B() +p.sdk(A.zu(B.h,B.a3d,A.b([B.PM,B.SA],l),null,B.N,null)) +a0=a0.B() +a0.sA(0,B.O3) +l=A.b([],t.HQ) +o=new A.a(new Float64Array(2)) +o.p(1000,30) +n=A.ar() +m=new A.aJ(e,new Float64Array(2)) +m.a7(o) +m.D() +a0=new A.a4B(p,a0,l,n,m,B.o,0,0,null,B.e,new A.e([],c),new A.e([],b)) +a0.b0(null,null,null,null,0,null,null,null,o) +a0.asv() +a1.J(a0) +q.k3.J(a) +return A.p(null,r)}}) +return A.q($async$n,r)}, +$ifB:1} +A.a4B.prototype={ +asv(){var s,r,q,p,o,n,m,l,k +for(s=this.p1,r=this.ax.a,q=0;q<25;++q){p=B.O.aV() +o=r[0] +n=B.O.aV() +m=r[1] +l=B.O.aV() +k=new Float64Array(3) +k[0]=p*o +k[1]=n*m/3 +k[2]=l*0.5+1 +s.push(new A.dX(k))}}, +b4(a){var s,r,q,p,o=this,n=o.ax.a +a.b7(new A.A(0,0,0+n[0],0+n[1]),o.k4) +for(n=o.p1,s=n.length,r=o.ok,q=0;q0){s.dT(0,0) +s.D() +q.sO(0,0) +this.xr=2}if(r[1]<0)q.sO(0,p[1]+1000*b) +if(r[0]<0){s.eX(0,0) +s.D()}if(r[0]>1000){s.eX(0,1000) +s.D()}}, +b4(a){var s,r=this,q=-r.at.d.a[1] +a.bU(0) +s=r.ax.a +a.aJ(0,s[0]/2,s[1]+1+q*1.05) +a.ff(0,1-q*0.003,0.3-q*0.001) +a.cs(B.h,10,r.RG) +a.bw(0) +s=r.k4 +a.a3(s,r.p3) +a.a3(s,r.p2) +a.a3(r.ok,r.p4) +a.a3(r.p1,r.R8)}, +jZ(a,b){var s,r,q,p=this,o=a.b,n=o.k(0,B.bo)||o.k(0,B.bq),m=o.k(0,B.bp)||o.k(0,B.bI),l=o.k(0,B.bv)||o.k(0,B.bV) +if(a instanceof A.iL){if(n)p.rx.sN(0,-150) +else if(m)p.rx.sN(0,150) +else if(l&&p.xr>0){p.rx.sO(0,-300);--p.xr}}else{s=b.G(0,B.bo)||b.G(0,B.bq) +r=b.G(0,B.bp)||b.G(0,B.bI) +if(!(s&&r))if(s)p.rx.sN(0,-150) +else{o=p.rx +if(r)o.sN(0,150) +else o.sN(0,0)}}o=p.rx.a +if(o[0]>0&&!p.x2){p.x2=!0 +q=p.at.e +q.eX(0,-q.a[0]) +q.D()}if(o[0]<0&&p.x2){p.x2=!1 +o=p.at.e +o.eX(0,-o.a[0]) +o.D()}p.a0S(a,b) +return!0}} +A.agm.prototype={} +A.amO.prototype={} +A.LW.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:h=q.fx$.b1(0,4) +g=new A.a(new Float64Array(2)) +g.ag(20) +p=h.a +o=p[0] +n=p[1] +m=new A.a(new Float64Array(2)) +m.p(o,n) +n=p[0] +o=p[1] +l=new A.a(new Float64Array(2)) +l.p(n,-o) +o=p[0] +n=p[1] +k=new A.a(new Float64Array(2)) +k.p(-o,n) +n=p[0] +p=p[1] +o=new A.a(new Float64Array(2)) +o.p(-n,-p) +j=[m,l,k,o] +o=q.k3 +k=A.b([],t.W) +for(i=0;i<4;++i)k.push(A.fU(null,null,null,null,null,null,j[i],null,null,g)) +o.I(0,k) +return A.p(null,r)}}) +return A.q($async$n,r)}, +b4(a){var s,r,q,p,o,n=this,m=n.fx$.a +a.b7(new A.A(0,0,0+m[0],0+m[1]),$.bvu()) +m=$.bvv() +s=new A.a(new Float64Array(2)) +s.ag(5) +m.jm("Camera: WASD to move, QE to zoom").nC(a,s,B.o) +s=n.k4.ax.at.f.fv(0).j(0) +r=n.k4.ax.at.e.a[0] +q=n.fx$.a[0] +p=new A.a(new Float64Array(2)) +p.p(q-5,5) +m.jm("Camera: "+s+", zoom: "+A.j(r)).nC(a,p,B.iU) +p=n.fx$ +p.toString +s=new A.a(new Float64Array(2)) +s.ag(5) +s=p.Y(0,s) +m.jm("This is your Flame game!").nC(a,s,B.bL) +o=n.R +if(o!=null){s=n.fx$.b1(0,2) +m.jm(o).nC(a,s,B.j)}n.lR(a)}, +Me(a,b){this.R=this.Bh("TapUp",b)}, +Md(a,b){this.R=this.Bh("TapDown",b)}, +Yb(a,b,c){this.R=this.Bh("DragStart",c)}, +Yc(a,b){this.R=this.Bh("DragUpdate",b)}, +EQ(a,b){this.R=this.Bh("Scroll",b)}, +Bh(a,b){var s=this,r=t.T,q=A.b([a,"Global: "+b.gji().gl8().j(0),"Widget: "+b.gji().gba().j(0),"World: "+s.k4.e5(b.gji().gl8()).j(0),"Camera: "+s.k4.ax.at.f.fv(0).j(0)],r) +if(b instanceof A.a2R)B.b.I(q,A.b(["Delta","Global: "+b.gme().gl8().j(0),"World: "+b.gme().gl8().b1(0,s.k4.ax.at.e.a[0]).j(0)],r)) +if(b instanceof A.a93)B.b.I(q,A.b(["Scroll Delta","Global: "+b.gmE().gl8().j(0),"World: "+b.gmE().gl8().b1(0,s.k4.ax.at.e.a[0]).j(0)],r)) +return B.b.cj(q,"\n")}, +a8(a,b){var s,r,q,p=this +p.fO(0,b) +s=p.S +s.E(0,p.aa.a2(0,b).a2(0,30)) +r=s.a +s.sN(0,A.blp(r[0],5)) +s.sO(0,A.blp(r[1],5)) +r=p.k4.ax +q=r.at.f +q.a7(s.fv(0)) +q.D() +r.dx=null}, +jZ(a,b){var s,r,q,p=this,o=a instanceof A.iL,n=a.b +if(n.k(0,B.bq)){n=o?-1:0 +p.aa.sN(0,n)}else if(n.k(0,B.bI)){n=o?1:0 +p.aa.sN(0,n)}else if(n.k(0,B.bV)){n=o?-1:0 +p.aa.sO(0,n)}else if(n.k(0,B.bU)){n=o?1:0 +p.aa.sO(0,n)}else if(o)if(n.k(0,B.xS)){n=p.k4.ax +s=n.at.e +r=s.a[0] +q=new A.a(new Float64Array(2)) +q.ag(r*2) +s.a7(q) +s.D() +n.dx=null}else if(n.k(0,B.op)){n=p.k4.ax +s=n.at.e +r=s.a[0] +q=new A.a(new Float64Array(2)) +q.ag(r/2) +s.a7(q) +s.D() +n.dx=null}return B.ci}, +$iAp:1} +A.yC.prototype={ +b5(){return new A.agW(A.b([1,1,1,1],t.t),B.p)}} +A.agW.prototype={ +ab(a){var s,r,q,p,o,n,m,l,k=this,j=null,i=t.l7,h=A.ab(k.JW(0,!1,!0),!0,i) +i=A.ab(k.JW(1,!0,!0),!0,i) +s=new Float64Array(2) +r=new Float64Array(2) +q=A.bm(j,j,-2147483647) +p=A.aU(j,j,j,j,j,j) +o=$.aC() +n=$.aL() +m=A.b([],t.u) +l=A.aP(A.aQ(),t.y) +s=new A.LW(new A.a(s),new A.a(r),q,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,j,B.e,new A.e([],t.s),new A.e([],t.g)) +s.aT(j,j,j,t.i) +i.push(A.m1(A.aO(s,j,j,j,j,t.Hx),1)) +B.b.I(i,k.JW(2,!0,!1)) +h.push(A.m1(A.jU(i,B.fa,B.kx,B.ak,j),1)) +B.b.I(h,k.JW(3,!1,!1)) +return A.hm(h,B.fa,B.kx,B.ak)}, +JW(a,b,c){var s,r,q,p=null,o=A.dD(p,A.l8(A.ada(B.aeT,new A.b_M(this,a),p),p,p),B.y,p,p,p,p,B.w7,p,p),n=A.b([],t.p) +if(c)n.push(o) +for(s=this.d,r=1;r<=s[a];++r){q=b?1:0 +n.push(A.iH(p,A.dD(p,new A.iF(B.a5,p,p,new A.Hh(q,A.dI("Block "+r,p,p,p,p,p,p),p),p),B.y,p,p,p,p,B.w7,p,p),B.ai,!1,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,new A.b_N(this,a),p,p,p,p,p,p))}if(!c)n.push(o) +return n}} +A.b_M.prototype={ +$0(){var s=this.a +return s.aK(new A.b_L(s,this.b))}, +$S:0} +A.b_L.prototype={ +$0(){var s=this.a.d,r=this.b,q=s[r] +s[r]=q+1 +return q}, +$S:0} +A.b_N.prototype={ +$0(){var s=this.a +return s.aK(new A.b_K(s,this.b))}, +$S:0} +A.b_K.prototype={ +$0(){var s=this.a.d,r=this.b,q=s[r] +s[r]=q-1 +return q}, +$S:0} +A.b_I.prototype={ +$1(a){a.f=new A.b_H(this.a)}, +$S:133} +A.b_H.prototype={ +$1(a){return A.beT(this.a,a)}, +$S:134} +A.b_J.prototype={ +$1(a){}, +$S:83} +A.Up.prototype={ +oH(){this.gmA().m2(0,A.av8(),new A.b_J(),t.Sw) +this.Ov()}} +A.agT.prototype={ +oH(){this.gmA().m2(0,A.biC(),new A.b_I(this),t.Tc) +this.aq3()}} +A.agU.prototype={} +A.agV.prototype={} +A.rg.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=A.dW(A.ep(null,null,B.q,null,null,null,null,null,null,null,null,25,null,null,null,null,null,!0,null,null,null,null,null,null,null,null),B.r) +n=q.k4 +m=new A.a(new Float64Array(2)) +m.ag(10) +n.at.J(A.bgV(null,m,"Viewport\ncomponent",o)) +m=q.k4 +n=new A.a(new Float64Array(2)) +n.p(0,200) +m.ax.J(A.bgV(B.j,n,"Viewfinder\ncomponent",o)) +n=q.k4.at +m=n.gaU() +p=new A.a(new Float64Array(2)) +p.ag(10) +n.J(A.bgV(B.bL,m.Y(0,p),"Viewport\ncomponent",o)) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.a3E.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(A.eU("layers/player.png",q.gaC().cy$,null,null),$async$n) +case 2:n=c +m=new A.a(new Float64Array(2)) +m.ag(1e5) +p=A.ar() +o=$.aa() +o=new A.aJ(o,new Float64Array(2)) +o.a7(m) +o.D() +p=new A.a_s(p,o,B.j,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +p.b0(B.j,null,null,null,0,null,null,null,m) +q.J(p) +m=new A.a(new Float64Array(2)) +m.p(149,211) +m=A.hy(null,null,null,null,null,0,null,null,null,null,m,n) +m.ay=B.j +m.i3() +q.J(m) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){var s=null +this.J(A.e2(s,s,s,s,this.go,s,B.b.ga_(a.c),s,2,s))}, +wg(a){var s=this.gaC().k4.ax.at.e.a[0],r=this.gaC().k4.ax,q=s>1?1:2,p=new A.a(new Float64Array(2)) +p.ag(q) +q=r.at.e +q.a7(p) +q.D() +r.dx=null}} +A.a_s.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.ok=B.t.aW() +p=q.ax.a +o=p[0] +p=p[1] +q.p1!==$&&A.aj() +q.p1=new A.A(0,0,0+o,0+p) +return A.p(null,r)}}) +return A.q($async$n,r)}, +b4(a){var s,r=this.p1 +r===$&&A.c() +s=this.ok +s===$&&A.c() +a.b7(r,s)}, +gq0(){return-1}} +A.ad9.prototype={} +A.aiX.prototype={} +A.aiY.prototype={} +A.aiZ.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.Va.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.aj_.prototype={ +aX(){var s,r +this.aq9() +s=this.cC() +if(s.cl(B.cB,t.F)==null){r=A.a2L() +s.gc8().u(0,B.cB,r) +s.J(r)}}} +A.pl.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:g=q.k3 +f=t.s +e=t.g +d=new A.a6y(0,null,B.e,new A.e([],f),new A.e([],e)) +d.asC() +g.J(d) +g=q.k3 +d=new Float64Array(2) +p=new A.a(new Float64Array(2)) +p.ag(50) +o=p==null +n=B.t.aW() +m=A.ar() +if(o)l=new A.a(new Float64Array(2)) +else l=p +k=$.aa() +j=new A.aJ(k,new Float64Array(2)) +j.a7(l) +j.D() +d=new A.a74(new A.a(d),null,null,null,null,null,null,!1,!0,o,$,n,null,m,j,B.j,0,2,null,B.e,new A.e([],f),new A.e([],e)) +d.b0(B.j,null,null,null,0,null,2,null,p) +d.mK(B.j,null,null,null,null,null,0,null,!0,null,2,!1,null,p) +q.R=d +g.J(d) +q.k4.a_Y($.bwD()) +q.k4.aee(q.R,250) +g=q.k3 +i=J.el(30,t.F) +for(h=0;h<30;++h){d=B.O.aV() +p=B.O.aV() +o=new Float64Array(2) +n=new A.a(o) +o[0]=d +o[1]=p +n.au(0,3000) +d=new Float64Array(2) +d[0]=1500 +d[1]=1500 +n.aq(0,new A.a(d)) +d=new Float64Array(2) +p=new A.a(d) +d[0]=50 +d[1]=50 +d=$.G().B() +d.sA(0,B.l) +o=A.ar() +m=p +l=new A.aJ(k,new Float64Array(2)) +l.a7(m) +l.D() +d=new A.R5(null,!1,null,$,d,null,o,l,B.j,0,1,null,B.e,new A.e([],f),new A.e([],e)) +d.b0(B.j,null,null,null,0,n,1,null,p) +l.an(0,d.gSD()) +i[h]=d}g.I(0,i) +return A.p(null,r)}}) +return A.q($async$n,r)}, +$ifB:1} +A.a74.prototype={ +gafQ(){var s,r,q=this,p=q.dD +if(p===$){s=q.ax.a[0] +r=new A.a(new Float64Array(2)) +r.ag(1500-s/2) +q.dD!==$&&A.N() +q.dD=r +p=r}return p}, +n(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.a0L(0),$async$n) +case 2:p=$.bwJ() +o=q.ax +n=o.b1(0,2) +n.sO(0,o.a[1]/2+30) +p=A.dm(B.j,null,null,null,n,null,null,null,null,p,t.Fr) +q.bj!==$&&A.aj() +q.bj=p +q.J(p) +q.J(A.hl(null,B.H,null,null)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s,r,q,p,o=this +o.xh(0,b) +s=o.at.d +s.rY(0,o.aE.a2(0,300*b)) +s.D() +r=o.dj +if(r===$){q=o.gafQ().fv(0) +o.dj!==$&&A.N() +o.dj=q +r=q}s.apF(0,r,o.gafQ()) +s.D() +p=o.bj +p===$&&A.c() +s=s.a +p.sd7(0,"("+B.c.aw(s[0])+", "+B.c.aw(s[1])+")")}, +ic(a,b){var s,r=null +this.lc(a,b) +if(b instanceof A.R5){s=new A.a(new Float64Array(2)) +s.ag(1.5) +b.J(A.ap8(s,A.dr(!0,0,B.z,0.2,!1,r,r,r,0),r,r))}}, +jZ(a,b){var s,r,q=this,p=a instanceof A.iL,o=a.b +if(o.k(0,B.bq)){o=p?-1:0 +q.aE.sN(0,o) +s=!0}else if(o.k(0,B.bI)){o=p?1:0 +q.aE.sN(0,o) +s=!0}else if(o.k(0,B.bV)){o=p?-1:0 +q.aE.sO(0,o) +s=!0}else{s=o.k(0,B.bU) +if(s){o=p?1:0 +q.aE.sO(0,o)}}if(s){o=new A.a(new Float64Array(2)) +o.p(1,0) +r=q.at +r.c=-q.aE.Jk(o) +r.b=!0 +r.D() +return!1}else{q.a0S(a,b) +return!0}}} +A.a6y.prototype={ +asC(){var s,r,q,p,o=this,n=B.f.d0(30),m=J.vs(n,t.Q2) +for(s=0;s=2?1:2,q=new A.a(new Float64Array(2)) +q.ag(r) +this.J(A.ap8(q,A.dr(!1,0,B.z,0.3,!1,s,s,s,0),s,s))}} +A.ajf.prototype={ +a8(a,b){this.fO(0,b) +this.dq$.fZ()}} +A.ajg.prototype={} +A.alB.prototype={} +A.alC.prototype={} +A.aoN.prototype={ +bo(){var s=this.h2$ +return s==null?this.c6():s}} +A.aoO.prototype={ +aX(){var s,r +this.a1m() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.tC.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:m=A.ar() +l=new A.a(new Float64Array(2)) +k=$.aa() +k=new A.aJ(k,new Float64Array(2)) +k.a7(l) +k.D() +m=new A.a7i(!0,null,null,m,k,B.o,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +m.b0(null,null,null,null,0,null,null,null,null) +l=m.ok +if(l!=null){l=l.a +l===$&&A.c() +l.cv()}q.R!==$&&A.aj() +q.R=m +l=q.k4 +k=l.at.gaU().b1(0,2) +p=new A.a(new Float64Array(2)) +p.p(0,30) +o=t.Fr +n=t.W +l.ch.I(0,A.b([m,A.dm(B.j,null,null,null,k.X(0,p),null,null,null,"Center backdrop Component",null,o)],n)) +p=q.k4 +m=new A.a(new Float64Array(2)) +m.ag(10) +p.at.I(0,A.b([A.dm(null,null,null,null,m,null,null,null,"Corner Viewport Component",null,o),A.dm(B.j,null,null,null,q.k4.at.gaU().b1(0,2),null,null,null,"Center Viewport Component",null,o)],n)) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.aqm.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(A.eU("layers/player.png",q.gaC().cy$,null,null),$async$n) +case 2:l=c +s=3 +return A.x(A.eU("flame.png",q.gaC().cy$,null,null),$async$n) +case 3:k=c +j=q.gaC().k4.ax.gun() +i=new A.a(new Float64Array(2)) +i.p(j.c-j.a,j.d-j.b) +j=A.hy(B.j,null,null,null,null,0,null,null,null,null,null,l) +q.go=j +q.J(j) +j=i.fv(0).b1(0,8) +p=new A.a(new Float64Array(2)) +p.p(20,30) +p=A.hy(B.j,null,null,null,null,0,null,j,null,null,p,k) +j=i.b1(0,8) +o=new A.a(new Float64Array(2)) +o.p(20,30) +o=A.hy(B.j,null,null,null,null,0,null,j,null,null,o,k) +j=i.b1(0,8) +n=new A.a(new Float64Array(2)) +n.p(-1,1) +j.bL(0,n) +n=new A.a(new Float64Array(2)) +n.p(20,30) +n=A.hy(B.j,null,null,null,null,0,null,j,null,null,n,k) +j=i.b1(0,8) +m=new A.a(new Float64Array(2)) +m.p(1,-1) +j.bL(0,m) +m=new A.a(new Float64Array(2)) +m.p(20,30) +q.I(0,A.b([p,o,n,A.hy(B.j,null,null,null,null,0,null,j,null,null,m,k)],t.W)) +q.gaC().k4.aee(q.go,100) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){var s,r=this,q=null,p=a.c,o=B.b.ga_(p),n=r.go +n===$&&A.c() +s=o.Y(0,n.at.d).a[0] +r.go.J(A.bfT(B.b.ga_(p),A.dr(!1,0,B.z,1,!1,q,q,q,0),q,new A.b6Z(r),q)) +p=r.gaC().R +p===$&&A.c() +p=p.ok +if(p!=null){p=p.a +p===$&&A.c() +p.p(s/1,0)}}} +A.b6Z.prototype={ +$0(){var s=this.a.gaC().R +s===$&&A.c() +s=s.ok +if(s==null)s=null +else{s=s.a +s===$&&A.c() +s=s.cv()}return s}, +$S:0} +A.a7i.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=q.gaC() +n=A.b([new A.dy("parallax/bg.png"),new A.dy("parallax/mountain-far.png"),new A.dy("parallax/mountains.png"),new A.dy("parallax/trees.png"),new A.dy("parallax/foreground-trees.png")],t.Vm) +m=new A.a(new Float64Array(2)) +m.p(0,0) +p=new A.a(new Float64Array(2)) +p.p(1.8,1) +s=2 +return A.x(A.bg8(o,n,m,B.av,null,p),$async$n) +case 2:q.sagF(c) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.aqn.prototype={} +A.aqo.prototype={} +A.aua.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.Z1.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.aub.prototype={ +aX(){var s,r +this.asa() +s=this.cC() +if(s.cl(B.cB,t.F)==null){r=A.a2L() +s.gc8().u(0,B.cB,r) +s.J(r)}}} +A.CC.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(A.eU("flame.png",q.cy$,null,null),$async$n) +case 2:p=c +o=q.k3 +n=new A.a(new Float64Array(2)) +n.p(149,211) +n=A.hy(null,null,null,null,null,0,null,null,null,null,n,p) +n.ay=B.j +n.i3() +o.J(n) +return A.p(null,r)}}) +return A.q($async$n,r)}, +abT(){var s=this.k4.ax,r=s.at.e,q=B.c.bX(r.a[0],0.05,3),p=new A.a(new Float64Array(2)) +p.ag(q) +r.a7(p) +r.D() +s.dx=null}, +EQ(a,b){var s=this.k4.ax,r=s.at.e,q=r.a[0],p=J.eY(b.gmE().gl8().a[1]),o=new A.a(new Float64Array(2)) +o.ag(q+p*0.02) +r.a7(o) +r.D() +s.dx=null +this.abT()}, +ago(a){this.R=this.k4.ax.at.e.a[0]}, +agp(a){var s,r,q,p,o=this,n=a.r +if(n===$){s=a.a +n!==$&&A.N() +n=a.r=new A.EP(new A.i(s.e,s.f))}s=n.gl8().a +if(!(s[0]===1&&s[1]===1)){r=o.k4.ax +q=o.R +q===$&&A.c() +s=s[1] +p=new A.a(new Float64Array(2)) +p.ag(q*s) +s=r.at.e +s.a7(p) +s.D() +r.dx=null +o.abT()}else{n=a.f +if(n===$){n!==$&&A.N() +n=a.f=new A.EP(a.a.a)}s=n.gl8().a +A.aXb(o.k4.ax.at.f.fv(0),-s[0],-s[1])}}} +A.at8.prototype={} +A.at9.prototype={} +A.y7.prototype={ +n(a){var s,r,q,p=null,o=A.Bu(t.J),n=new Float64Array(2),m=new A.a(new Float64Array(2)) +m.ag(0) +s=B.t.aW() +r=A.ar() +q=$.aa() +q=new A.aJ(q,new Float64Array(2)) +q.a7(m) +q.D() +n=new A.a_w(p,p,p,p,p,new A.a(n),$,s,p,r,q,B.o,0,0,p,B.e,new A.e([],t.s),new A.e([],t.g)) +n.b0(p,p,p,p,0,p,p,p,m) +n.kj(p,p,p,p,p,p,p,p,p,m) +m=$.G().B() +m.sA(0,B.l) +n.S$=m +n.shV(10) +this.I(0,A.b([o,n],t.W))}} +A.a_w.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.amP(0) +p=q.at.d +p.a7(q.gaC().k4.at.gaU().b1(0,2)) +p.D() +p=A.ap(0,360,B.O.aV()) +p.toString +p*=0.017453292519943295 +o=Math.cos(p) +p=Math.sin(p) +n=new A.a(new Float64Array(2)) +n.p(o*500,p*500) +q.e9=n +q.I(0,A.b([A.hl(null,B.H,null,q.ghV())],t.W)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s,r +this.le(0,b) +s=this.at.d +r=this.e9 +r===$&&A.c() +s.a7(s.X(0,r.a2(0,b))) +s.D()}, +ic(a,b){var s,r,q=this +q.lc(a,b) +if(b instanceof A.to){s=a.ga9(0).a +if(s[0]===0){r=q.e9 +r===$&&A.c() +r.sN(0,-r.a[0]) +r=q.e9 +r.sO(0,r.a[1])}if(s[0]===q.gaC().k4.at.gaU().a[0]){r=q.e9 +r===$&&A.c() +r.sN(0,-r.a[0]) +r=q.e9 +r.sO(0,r.a[1])}if(s[1]===0){r=q.e9 +r===$&&A.c() +r.sN(0,r.a[0]) +r=q.e9 +r.sO(0,-r.a[1])}if(s[1]===q.gaC().k4.at.gaU().a[1]){s=q.e9 +s===$&&A.c() +s.sN(0,s.a[0]) +s=q.e9 +s.sO(0,-s.a[1])}}}} +A.afH.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.afI.prototype={} +A.ag4.prototype={ +a8(a,b){this.fO(0,b) +this.dq$.fZ()}} +A.qT.prototype={} +A.a7n.prototype={ +cb(a){var s,r,q=null,p=B.b.ga_(a.c),o=new A.a(new Float64Array(2)) +o.ag(30) +s=A.ar() +r=$.aa() +r=new A.aJ(r,new Float64Array(2)) +r.a7(o) +r.D() +s=new A.a7e(q,q,q,q,q,s,r,B.j,0,0,q,B.e,new A.e([],t.s),new A.e([],t.g)) +s.b0(B.j,q,q,q,0,p,q,q,o) +this.J(s)}} +A.a7e.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=$.G().B() +o.sA(0,B.oM) +o.sU(0,B.u) +p=A.hl(null,B.H,null,null) +p.S$=o +p.oo$=!0 +q.p2=p +q.J(p) +p=q.at.d.fv(0) +A.aea(p,50) +q.k4=p +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s,r +this.le(0,b) +s=this.at.d +r=this.k4 +r===$&&A.c() +s.rY(0,r.a2(0,b)) +s.D()}, +ic(a,b){var s +this.lc(a,b) +s=this.p2 +s===$&&A.c() +s.S$.sA(0,B.dl) +if(b instanceof A.to){this.eb() +return}}, +kA(a){var s +this.AQ(a) +s=this.h9$ +if(!(s!=null&&s.a!==0)){s=this.p2 +s===$&&A.c() +s.S$.sA(0,B.oM)}}} +A.alO.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.alP.prototype={} +A.alT.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.alU.prototype={ +a8(a,b){this.le(0,b) +this.dq$.fZ()}} +A.yn.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.J(A.Bu(t.J)) +p=new A.a(new Float64Array(2)) +p.p(150,100) +o=new A.a(new Float64Array(2)) +o.ag(200) +n=new A.a(new Float64Array(2)) +n.ag(100) +n=A.awd(o,n,p,-0.7853981633974483) +o=n.at.e +o.dT(0,-o.a[1]) +o.D() +q.J(n) +o=new A.a(new Float64Array(2)) +o.p(-100,-100) +n=q.k4.at.gaU() +m=new A.a(new Float64Array(2)) +m.v(n) +n=new A.a(new Float64Array(2)) +n.ag(200) +m.aq(0,n) +q.J(A.awd(o,m,p.b1(0,2),-0.7853981633974483)) +o=new A.a(new Float64Array(2)) +o.p(100,-100) +n=q.k4.at.gaU().a[1] +m=new A.a(new Float64Array(2)) +m.p(100,n-100) +q.J(A.awd(o,m,p.a2(0,1.5),0.7853981633974483)) +o=new A.a(new Float64Array(2)) +o.p(-300,300) +n=q.k4.at.gaU().a[0] +m=new A.a(new Float64Array(2)) +m.p(n-100,100) +m=A.awd(o,m,p.b1(0,3),0.7853981633974483) +o=m.at.e +o.dT(0,-o.a[1]) +o.D() +q.J(m) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.ZV.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:l=q.gaC() +k=new A.a(new Float64Array(2)) +k.ag(48) +s=2 +return A.x(A.kK("bomb_ptero.png",A.kJ(4,null,!0,0.2,k),l.cy$),$async$n) +case 2:q.siM(0,c) +p=B.t.aW() +p.sU(0,B.u) +l=new A.a(new Float64Array(2)) +l.p(0,-1) +k=new A.a(new Float64Array(2)) +k.p(-1,-0.1) +o=new A.a(new Float64Array(2)) +o.p(-0.2,0.4) +n=new A.a(new Float64Array(2)) +n.p(0.2,0.4) +m=new A.a(new Float64Array(2)) +m.p(1,-0.1) +m=A.aO5(A.b([l,k,o,n,m],t.d),null,q.ax,null) +m.S$=p +m.oo$=!0 +q.J(m) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s +this.xh(0,b) +s=this.at.d +s.a7(s.X(0,this.ao.a2(0,b))) +s.D()}, +ic(a,b){var s +this.lc(a,b) +this.ao.dE() +s=this.at.e +s.dT(0,-s.a[1]) +s.D()}} +A.afd.prototype={} +A.afe.prototype={ +bo(){var s=this.h2$ +return s==null?this.c6():s}} +A.agD.prototype={ +a8(a,b){this.fO(0,b) +this.dq$.fZ()}} +A.b9S.prototype={ +$1(a){var s=null,r=A.kN(s,t.rR),q=A.bm(s,s,-2147483647),p=A.aU(s,s,s,s,s,s),o=$.aC(),n=$.aL(),m=A.b([],t.u),l=A.aP(A.aQ(),t.y) +r=new A.yn(r,q,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.c8)}, +$S:698} +A.b9T.prototype={ +$1(a){var s,r,q,p,o,n,m=null,l=A.j2(400,m,600,m),k=A.Bu(t.J) +k.w=!0 +k=A.b([k],t.W) +s=A.kN(m,t.rR) +r=t.s +q=t.g +s=new A.a7n(s,-2147483647,m,B.e,new A.e([],r),new A.e([],q)) +s.I(0,k) +k=$.aC() +p=$.aL() +o=A.b([],t.u) +n=A.aP(A.aQ(),t.y) +k=new A.qT(s,l,k,p,B.m,o,n,A.C(t.S),A.C(t.F),0,m,B.e,new A.e([],r),new A.e([],q)) +k.aT(l,m,s,t.i) +return A.aO(k,m,m,m,m,t.qI)}, +$S:699} +A.b9U.prototype={ +$1(a){var s=null,r=A.kN(s,t.rR),q=A.bm(s,s,-2147483647),p=A.aU(s,s,s,s,s,s),o=$.aC(),n=$.aL(),m=A.b([],t.u),l=A.aP(A.aQ(),t.y) +r=new A.y7(r,q,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.hm)}, +$S:700} +A.b9V.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k=null,j=new A.a(new Float64Array(2)) +j.p(100,0) +s=t.s +r=t.g +j=new A.a7b(B.O,j,k,-2147483647,k,B.e,new A.e([],s),new A.e([],r)) +q=A.aU(k,k,k,k,k,k) +p=q.ax +p.ax=B.o +p.jr() +p=A.kN(k,t.rR) +o=$.aC() +n=$.aL() +m=A.b([],t.u) +l=A.aP(A.aQ(),t.y) +s=new A.P8(p,j,q,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,k,B.e,new A.e([],s),new A.e([],r)) +s.aT(q,k,j,t.i) +return A.LD(A.aO(s,k,k,k,k,t.lQ),B.a4,k)}, +$S:710} +A.b9W.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.Aq(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.Xg)}, +$S:711} +A.b9X.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k=null,j=t.Pr +j=new A.aU2(A.b([],t.bf),A.b([],j),A.b([],j)) +j.YY() +s=A.b([],t.n) +r=new Float64Array(2) +q=A.bm(k,k,-2147483647) +p=A.aU(k,k,k,k,k,k) +o=$.aC() +n=$.aL() +m=A.b([],t.u) +l=A.aP(A.aQ(),t.y) +j=new A.tg(j,s,new A.a(r),$,k,q,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,k,B.e,new A.e([],t.s),new A.e([],t.g)) +j.aT(k,k,k,t.i) +return A.aO(j,k,k,k,k,t.qm)}, +$S:723} +A.b9Y.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=null,e=$.G(),d=e.B() +e=e.B() +s=A.S(51,33,150,243) +r=A.S(51,244,67,54) +q=t.Fq +p=A.b([],q) +q=A.b([],q) +o=t.eF +n=A.b([],o) +o=A.b([],o) +m=A.kN(f,t.rR) +l=A.bm(f,f,-2147483647) +k=A.aU(f,f,f,f,f,f) +j=$.aC() +i=$.aL() +h=A.b([],t.u) +g=A.aP(A.aQ(),t.y) +e=new A.wa(d,e,new A.fp(s,r),p,q,n,o,m,l,k,j,i,B.m,h,g,A.C(t.S),A.C(t.F),0,f,B.e,new A.e([],t.s),new A.e([],t.g)) +e.aT(f,f,f,t.i) +return A.aO(e,f,f,f,f,t.ez)}, +$S:724} +A.b9Z.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=null,e=new A.a(new Float64Array(2)) +e.p(250,100) +s=$.G().B() +s.sA(0,A.S(153,255,193,7)) +r=new A.a(new Float64Array(2)) +r.p(0,1) +q=new Float64Array(2) +p=A.b([],t.Fq) +o=A.b([],t.eF) +n=new Float64Array(2) +m=A.kN(f,t.rR) +l=A.bm(f,f,-2147483647) +k=A.aU(f,f,f,f,f,f) +j=$.aC() +i=$.aL() +h=A.b([],t.u) +g=A.aP(A.aQ(),t.y) +e=new A.B6(e,s,r,new A.a(q),B.O,p,o,new A.a(n),m,l,k,j,i,B.m,h,g,A.C(t.S),A.C(t.F),0,f,B.e,new A.e([],t.s),new A.e([],t.g)) +e.aT(f,f,f,t.i) +return A.aO(e,f,f,f,f,t.k9)}, +$S:740} +A.ba_.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k,j,i,h=null,g=A.S(255,255,193,7),f=A.S(255,64,196,255),e=$.G().B(),d=B.kE.aW() +d.sU(0,B.u) +d.sbM(2) +s=A.b([],t.Fq) +r=A.b([],t.eF) +q=A.b([],t.W) +p=A.a9H() +o=A.kN(h,t.rR) +n=A.bm(h,h,-2147483647) +m=A.aU(h,h,h,h,h,h) +l=$.aC() +k=$.aL() +j=A.b([],t.u) +i=A.aP(A.aQ(),t.y) +g=new A.wb(new A.fp(g,f),B.O,e,d,s,r,q,p,o,n,m,l,k,B.m,j,i,A.C(t.S),A.C(t.F),0,h,B.e,new A.e([],t.s),new A.e([],t.g)) +g.aT(h,h,h,t.i) +return A.aO(g,h,h,h,h,t.e7)}, +$S:741} +A.ba0.prototype={ +$1(a){var s=null,r=A.bp1(s,s,!1,s,s,t.VC),q=A.dm(B.j,s,s,s,s,s,s,s,"Hey! Who's there?",A.dW(B.aec,B.r),t.Z0),p=A.kN(s,t.rR),o=A.bm(s,s,-2147483647),n=A.aU(s,s,s,s,s,s),m=$.aC(),l=$.aL(),k=A.b([],t.u),j=A.aP(A.aQ(),t.y) +r=new A.B7(r,q,p,o,n,m,l,B.m,k,j,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.OG)}, +$S:742} +A.ba1.prototype={ +$1(a){var s,r,q,p,o,n,m=null,l=A.b([],t.Fq),k=new Float64Array(2),j=$.bAT(),i=t.W +k=A.e2(B.j,m,A.b([A.hl(m,B.H,m,m)],i),m,j,m,new A.a(k),m,60,m) +s=new A.a(new Float64Array(2)) +s.p(100,100) +r=new Float64Array(2) +s=A.fU(B.j,m,A.b([A.fg(B.H,m,m)],i),m,j,m,new A.a(r),m,m,s) +r=new Float64Array(2) +q=new A.a(new Float64Array(2)) +q.p(-0.7,-1) +p=new A.a(new Float64Array(2)) +p.p(1,-0.4) +o=new A.a(new Float64Array(2)) +o.p(0.3,1) +n=new A.a(new Float64Array(2)) +n.p(-1,0.6) +n=A.b([q,p,o,n],t.d) +q=new A.a(new Float64Array(2)) +q.p(100,100) +q=A.aO5(n,B.j,q,new A.a(new Float64Array(2))) +q.S$=j +q.oo$=!0 +r=A.b([k,s,A.boL(m,m,A.b([q],i),m,0,new A.a(r),m,m,m)],t.bf) +i=A.kN(m,t.rR) +q=t.s +s=t.g +l=new A.a9I(B.O,l,r,A.D(t.M7,t._C),i,m,-2147483647,m,B.e,new A.e([],q),new A.e([],s)) +k=A.j2(200,m,200,m) +j=$.aC() +i=$.aL() +r=A.b([],t.u) +p=A.aP(A.aQ(),t.y) +j=new A.ti(l,k,j,i,B.m,r,p,A.C(t.S),A.C(t.F),0,m,B.e,new A.e([],q),new A.e([],s)) +j.aT(k,m,l,t.i) +return A.aO(j,m,m,m,m,t.Ps)}, +$S:746} +A.HD.prototype={ +W(){return"Shapes."+this.b}} +A.P8.prototype={} +A.a7b.prototype={ +n(a7){var s=0,r=A.r(t.H),q=this,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$n=A.t(function(a8,a9){if(a8===1)return A.o(a9,r) +while(true)switch(s){case 0:a5=q.gaC().k4.at.gaU().a[1] +a6=new A.a(new Float64Array(2)) +a6.p(0,a5-24) +q.J(A.a40(null,a6,t.Fr)) +p=A.Bu(t.J) +a5=new A.a(new Float64Array(2)) +a5.ag(150) +a6=new Float64Array(2) +o=new A.a(a6) +o.p(120,250) +n=new A.a(new Float64Array(2)) +n.p(-100,100) +m=new Float64Array(2) +l=A.S(204,33,150,243) +k=A.S(204,76,175,80) +j=A.ar() +i=$.aa() +i=new A.aJ(i,new Float64Array(2)) +i.a7(o) +i.D() +h=new A.a19(n,new A.a(m),l,k,p,null,null,null,null,!1,j,i,B.j,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +h.b0(B.j,null,null,null,0,a5,null,null,o) +a5=B.t.aW() +h.R8!==$&&A.aj() +h.R8=a5 +h.k4=0.3 +h.ay=B.o +h.i3() +a5=a6[0] +o=a6[1] +n=new A.a(new Float64Array(2)) +n.p(a5/2,o*0.15) +g=A.bgK(a5*0.3,n,B.co) +n=a6[0] +a5=a6[1] +o=new A.a(new Float64Array(2)) +o.p(n/2,a5*0.4) +f=A.bgK(n*0.4,o,B.fq) +o=a6[0]/2 +a6=a6[1] +a5=new A.a(new Float64Array(2)) +a5.p(o,a6-a6/4) +h.J(A.bgK(o,a5,B.i3)) +h.J(f) +h.J(g) +q.J(p) +q.J(h) +for(a5=q.go,a6=q.id,o=a6.a,n=A.w(q).h("a2.T"),e=h,d=1;d<1000;){m=new Float64Array(2) +m[0]=50 +m[1]=50 +l=a5.aV() +k=a5.aV() +j=new Float64Array(2) +j[0]=l +j[1]=k +l=new Float64Array(2) +k=new A.a(l) +l[1]=j[1] +l[0]=j[0] +k.au(0,100) +l=new Float64Array(2) +c=new A.a(l) +l[1]=m[1] +l[0]=m[0] +c.E(0,k) +k=e.at.d.a +m=k[0] +j=e.ax.a[0] +i=o[0] +b=l[0] +a=q.M$ +if(a==null){a0=q.bo() +a0.toString +a=q.M$=n.a(a0)}a=a.k4.at.gaU().a[0] +a1=k[1] +a2=new Float64Array(2) +a2[0]=0 +a2[1]=a1+200 +a1=new Float64Array(2) +a3=new A.a(a1) +a1[1]=o[1] +a1[0]=o[0] +a3.E(0,new A.a(a2)) +if(!(m+j/2+i+b>a)){m=new Float64Array(2) +a3=new A.a(m) +m[1]=k[1] +m[0]=k[0] +a3.E(0,a6) +m[0]=m[0]+l[0]/2}m=a5.aV() +l=a5.aV() +k=new Float64Array(2) +k[0]=m +k[1]=l +m=a5.aV() +l=a5.aV() +j=new Float64Array(2) +j[0]=m +j[1]=l +m=new Float64Array(2) +m[1]=k[1] +m[0]=k[0] +new A.a(m).aq(0,new A.a(j)) +l=new Float64Array(2) +a4=new A.a(l) +l[1]=m[1] +l[0]=m[0] +a4.au(0,400) +e=A.bUK(a3,c,a4,p,a5) +m=e.a9i(e.gaLK()) +l=q.M$ +if(l==null){a0=q.bo() +a0.toString +l=q.M$=n.a(a0)}if(m.cr.ghC().a[0]||s[1]>r.ghC().a[1]}else s=!0 +else s=!0 +if(s){p=n.RG.ghC().X(0,n.ghC()) +s=n.YJ(B.o).a +r=p.a +o=B.c.bx(s[0],r[0]) +r=B.c.bx(s[1],r[1]) +s=new A.a(new Float64Array(2)) +s.p(o,r) +q.a7(q.X(0,s.Y(0,n.YJ(B.o)))) +q.D()}}, +b4(a){var s,r +if(this.f5$){s=this.ghC().a +r=new A.i(s[0],s[1]).b1(0,2) +s=this.R8 +s===$&&A.c() +a.cs(r,5,s)}}, +ic(a,b){var s +this.lc(a,b) +s=this.rx +if(s!=null)s.S$.sA(0,this.p4)}, +kA(a){var s,r=this +r.AQ(a) +s=r.h9$ +if(!(s!=null&&s.a!==0)){s=r.rx +if(s!=null)s.S$.sA(0,r.p3)}}, +pV(a,b){this.AR(0,b) +this.ok.v(b.d.b1(0,10))}} +A.a17.prototype={} +A.a18.prototype={} +A.a15.prototype={} +A.abX.prototype={ +ic(a,b){var s,r,q=this +q.apn(a,b) +s=b.f0$ +s===$&&A.c() +r=q.S$ +if(s instanceof A.to)r.sA(0,q.om) +else{s=q.pD.a +r.sA(0,A.S(204,s>>>16&255,s>>>8&255,s&255))}}, +kA(a){var s,r=this +r.apm(a) +s=r.lx$ +if(!(s!=null&&s.a!==0))r.S$.sA(0,r.om)}, +gMP(){return!0}} +A.a19.prototype={} +A.alH.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.alI.prototype={ +a8(a,b){this.fO(0,b) +this.dq$.fZ()}} +A.VV.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.bm,t.F)==null){r=A.An() +s.gc8().u(0,B.bm,r) +s.J(r)}}} +A.alM.prototype={} +A.alN.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +q.gbQ(0).zV(0,t.VC) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.Aq.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:k=A.bla() +j=A.bla() +i=t.W +s=2 +return A.x(q.I(0,A.b([k,j,A.aU(null,null,null,null,null,k),A.aU(null,null,null,null,null,j)],i)),$async$n) +case 2:p=new A.a(new Float64Array(2)) +p.p(75,75) +o=A.aze(p) +p=new A.a(new Float64Array(2)) +p.p(-75,75) +n=A.aze(p) +p=new A.a(new Float64Array(2)) +p.p(75,-75) +m=A.aze(p) +p=new A.a(new Float64Array(2)) +p.p(-75,-75) +l=A.aze(p) +k.I(0,A.b([o,n],i)) +j.I(0,A.b([m,l],i)) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.a1a.prototype={} +A.a16.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.a0L(0) +q.J(A.hl(null,B.H,null,null)) +q.J(A.bfT(new A.a(new Float64Array(2)),A.dr(!0,0,B.z,0.5+$.bvs().aV(),!0,null,null,null,0),null,null,null)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +ic(a,b){var s,r +this.lc(a,b) +s=this.at.d.a +r=B.c.goD(s[0])?1:0 +s=r+(B.c.goD(s[1])?2:0)<2?B.co:B.i3 +this.J(A.bea(s,A.dr(!0,0,B.z,0.2,!1,null,null,null,0),0.9))}} +A.agE.prototype={} +A.agF.prototype={ +a8(a,b){this.le(0,b) +this.dq$.fZ()}} +A.tg.prototype={ +ga30(){return A.X(A.iO(this,A.jH(B.a9C,"gb_K",1,[],[],0)))}, +n(a4){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3 +var $async$n=A.t(function(a5,a6){if(a5===1)return A.o(a6,r) +while(true)switch(s){case 0:q.nX(0) +p=t.VC +o=A.ek(p) +n=A.b([],t.sv) +m=t.wp +l=A.b([],m) +k=A.bp_(p) +q.DG$=new A.a9s(A.D(p,t.Q),A.C(p),new A.B4(new A.a9r(25,10,B.a5m,k,A.D(p,t.aU),A.D(p,t.OK),t.KK),o,q.gaW3(),q.gaVb(),A.D(p,t.Ha),A.D(p,t.yw),A.D(t.S,t.jI),n,new A.Qb(l,t.Ff)),A.b([],m),new A.LL($.aa()),A.b([],m)) +q.adN$=10 +p=new A.a(new Float64Array(2)) +p.ag(0) +o=new A.a(new Float64Array(2)) +o.ag(8) +s=2 +return A.x(A.eU("retro_tiles.png",null,p,o),$async$n) +case 2:j=a6 +p=new A.a(new Float64Array(2)) +p.p(0,8) +o=new A.a(new Float64Array(2)) +o.ag(8) +s=3 +return A.x(A.eU("retro_tiles.png",null,p,o),$async$n) +case 3:i=a6 +for(p=q.S,o=p.z,h=0;h<8000;++h){g=B.O.f9(300) +f=B.O.f9(300) +n=new Float64Array(2) +n[0]=g*8 +n[1]=f*8 +m=new Float64Array(2) +m[0]=8 +m[1]=8 +e=A.bkT(new A.a(n),0,new A.a(m),j) +q.k3.J(e) +o.push(e)}p.YY() +q.sabE(A.j2(250,null,500,q.k3)) +n=new A.a(new Float64Array(2)) +n.ag(1200) +m=new A.a(new Float64Array(2)) +m.ag(8) +l=A.fg(B.H,null,null) +k=B.t.aW() +d=A.ar() +c=m +b=$.aa() +a=new A.aJ(b,new Float64Array(2)) +a.a7(c) +a.D() +c=t.s +a0=t.g +l=new A.PY(l,null,null,null,null,null,!1,null,$,k,null,d,a,B.o,0,2,null,B.e,new A.e([],c),new A.e([],a0)) +l.b0(null,null,null,null,0,n,2,null,m) +l.lg(null,null,null,null,null,0,null,n,2,null,m,null) +q.R!==$&&A.aj() +q.R=l +q.k3.J(l) +q.k4.aed(l) +n=l.at.d.a +m=n[0] +n=n[1] +k=new A.a(new Float64Array(2)) +k.p(m+0,n+-16) +n=new A.a(new Float64Array(2)) +n.ag(8) +e=A.bkT(k,0,n,j) +q.k3.J(e) +o.push(e) +o=l.at.d.a +n=o[0] +o=o[1] +m=new A.a(new Float64Array(2)) +m.p(n+0,o+16) +o=new A.a(new Float64Array(2)) +o.ag(8) +a1=A.bh9(m,0,o,i) +q.k3.J(a1) +o=l.at.d.a +m=o[0] +o=o[1] +n=new A.a(new Float64Array(2)) +n.p(m+16,o+0) +o=new A.a(new Float64Array(2)) +o.ag(8) +a2=A.bh9(n,0,o,i) +q.k3.J(a2) +l=l.at.d.a +o=l[0] +l=l[1] +n=new A.a(new Float64Array(2)) +n.p(o+-16,l+0) +o=new A.a(new Float64Array(2)) +o.ag(8) +a3=A.bh9(n,0,o,i) +q.k3.J(a3) +o=q.k3 +n=q.DG$ +n===$&&A.c() +m=$.G().B() +m.sU(0,B.u) +m.sA(0,B.CS) +m.sbM(1) +l=B.t.aW() +k=A.ar() +d=new A.a(new Float64Array(2)) +a=new A.aJ(b,new Float64Array(2)) +a.a7(d) +a.D() +m=new A.a9t(m,$,l,null,k,a,B.o,0,0,null,B.e,new A.e([],c),new A.e([],a0)) +m.b0(null,null,null,null,0,null,null,null,null) +l=n.a.a +m.k4!==$&&A.aj() +m.k4=new A.Qe(l.c,l.d,n) +m.S$.sA(0,B.bi) +m.S$.sU(0,B.u) +m.sq0(10) +o.J(m) +m=q.k3 +o=A.ar() +n=new A.a(new Float64Array(2)) +l=new A.aJ(b,new Float64Array(2)) +l.a7(n) +l.D() +p=new A.a60(p,o,l,B.o,0,0,null,B.e,new A.e([],c),new A.e([],a0)) +p.b0(null,null,null,null,0,null,null,null,null) +m.J(p) +q.k4.at.J(A.a40(null,null,t.Fr)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +jZ(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=null +for(s=A.cT(b,b.r,A.w(b).c),r=s.$ti.c,q=j.bp,p=q.a;s.H();){o=s.d +if(o==null)o=r.a(o) +if(o.k(0,B.bV)){n=j.R +n===$&&A.c() +n=n.ao}else n=!1 +if(n){p[0]=0 +p[1]=-1 +n=j.R +n===$&&A.c() +n=n.at.d +m=n.a +n.p(m[0]+0,m[1]+-1)}if(o.k(0,B.bq)){n=j.R +n===$&&A.c() +n=n.M}else n=!1 +if(n){p[0]=-1 +p[1]=0 +n=j.R +n===$&&A.c() +n=n.at.d +m=n.a +n.p(m[0]+-1,m[1]+0)}if(o.k(0,B.bU)){n=j.R +n===$&&A.c() +n=n.aM}else n=!1 +if(n){p[0]=0 +p[1]=1 +n=j.R +n===$&&A.c() +n=n.at.d +m=n.a +n.p(m[0]+0,m[1]+1)}if(o.k(0,B.bI)){n=j.R +n===$&&A.c() +n=n.av}else n=!1 +if(n){p[0]=1 +p[1]=0 +n=j.R +n===$&&A.c() +n=n.at.d +m=n.a +n.p(m[0]+1,m[1]+0)}if(o.k(0,B.kn))j.aN=!0 +if(o.k(0,B.or)){n=j.R +n===$&&A.c() +n=n.aS +l=n.mh$.a +if(l===B.H)n.svq(B.jd) +else if(l===B.jd)n.svq(B.H)}if(o.k(0,B.xR)){o=j.DG$ +o===$&&A.c() +o=o.a.a +o.a9t(o.d)}}if(j.aN)s=!(p[0]===0&&p[1]===0) +else s=!1 +if(s){s=j.R +s===$&&A.c() +r=q.a2(0,50) +p=B.t.aW() +o=A.ar() +n=new A.a(new Float64Array(2)) +m=$.aa() +m=new A.aJ(m,new Float64Array(2)) +m.a7(n) +m.D() +k=new A.a05(r,$,p,i,i,i,i,i,o,m,B.o,0,0,i,B.e,new A.e([],t.s),new A.e([],t.g)) +k.b0(i,i,i,i,0,s.at.d,i,i,i) +k.S$.sA(0,B.oL) +k.sq0(10) +s=new A.a(new Float64Array(2)) +s.ag(1) +k.sC(0,s) +k.J(A.fg(B.H,i,i)) +j.J(k) +q.cv() +j.aN=!1}return B.ci}, +EQ(a,b){var s=this.k4.ax,r=s.at.e,q=r.a[0],p=J.eY(b.gmE().gl8().a[1]),o=new A.a(new Float64Array(2)) +o.ag(q+p*0.08) +r.a7(o) +r.D() +s.dx=null +s=this.k4.ax +r=s.at.e +o=B.c.bX(r.a[0],0.05,5) +q=new A.a(new Float64Array(2)) +q.ag(o) +r.a7(q) +r.D() +s.dx=null}, +$ids:1} +A.PY.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=new A.a(new Float64Array(2)) +o.ag(8) +p=new A.a(new Float64Array(2)) +p.p(24,8) +s=2 +return A.x(A.eU("retro_tiles.png",null,p,o),$async$n) +case 2:q.ok=c +q.tf() +q.J(q.aS) +return A.p(null,r)}}) +return A.q($async$n,r)}, +ic(a,b){var s,r,q,p=this,o=p.at.d,n=o.a,m=n[0],l=n[1],k=new Float64Array(2) +new A.a(k).p(m+4,l+4) +if(t.GV.b(b)){m=k[0] +l=b.KI$ +l===$&&A.c() +l=l.a +s=m-l[0] +if(s<0)p.av=!1 +else if(s>0)p.M=!1 +r=k[1]-l[1] +if(r<0)p.aM=!1 +else if(r>0)p.ao=!1 +m=n[0] +n=n[1] +q=new A.a(new Float64Array(2)) +q.p(m+s/3,n+r/3) +o.a7(q) +o.D()}p.lc(a,b)}, +kA(a){var s=this +s.aM=s.ao=s.av=s.M=!0 +s.AQ(a)}} +A.a05.prototype={ +b4(a){a.cs(B.h,1,this.S$)}, +a8(a,b){var s,r=this.at.d,q=r.a,p=q[0],o=this.k4.a2(0,b).a,n=o[0] +q=q[1] +o=o[1] +s=new A.a(new Float64Array(2)) +s.p(p+n,q+o) +r.a7(s) +r.D() +this.le(0,b)}, +u2(a){if(a instanceof A.PY||a instanceof A.Tu)return!1 +return this.amQ(a)}, +ic(a,b){if(b instanceof A.La)this.eb() +this.lc(a,b)}, +$ib5:1} +A.La.prototype={ +k6(a){if(!this.M)this.OB(a)}} +A.Tu.prototype={} +A.zo.prototype={ +aeV(){var s,r=this.at.d.a,q=r[0] +r=r[1] +s=new A.a(new Float64Array(2)) +s.p(q+4,r+4) +this.KI$!==$&&A.aj() +this.KI$=s}} +A.ae3.prototype={} +A.aU2.prototype={ +Kq(){var s,r,q,p,o +for(s=this.z,r=s.length,q=0;q") +B.b.al(A.ab(new A.bg(new A.ca(this.gbQ(0),r),new A.ayQ(s),q),!0,q.h("z.E")),new A.ayR())}} +A.ayQ.prototype={ +$1(a){return a.jh(this.a.Y(0,a.at.d))}, +$S:751} +A.ayR.prototype={ +$1(a){var s=new A.a(new Float64Array(2)) +s.ag(10) +a.sC(0,a.ax.X(0,s))}, +$S:105} +A.agx.prototype={} +A.ba2.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.yu(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.ab)}, +$S:773} +A.ba3.prototype={ +$1(a){var s,r,q,p,o,n,m=null,l=new A.a(new Float64Array(2)) +l.p(100,100) +l=A.aTO(l) +s=new A.a(new Float64Array(2)) +s.p(160,100) +s=A.aTO(s) +r=new A.a(new Float64Array(2)) +r.p(170,150) +r=A.aTO(r) +q=new A.a(new Float64Array(2)) +q.p(110,150) +q=A.b([l,s,r,A.aTO(q)],t.W) +l=A.bm(m,m,-2147483647) +s=A.aU(m,m,m,m,m,m) +r=$.aC() +p=$.aL() +o=A.b([],t.u) +n=A.aP(A.aQ(),t.y) +l=new A.tc(l,s,r,p,B.m,o,n,A.C(t.S),A.C(t.F),0,m,B.e,new A.e([],t.s),new A.e([],t.g)) +l.I(0,q) +l.aT(m,q,m,t.i) +return A.aO(l,m,m,m,m,t.VL)}, +$S:774} +A.ba4.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.r1(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.Pe)}, +$S:775} +A.ba6.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.yk(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.u2)}, +$S:776} +A.ba7.prototype={ +$1(a){var s,r,q,p,o,n=null,m=A.e2(B.j,n,n,n,B.fB.aW(),n,n,n,5,n),l=t.s,k=t.g +m=new A.ar_(m,-2147483647,n,B.e,new A.e([],l),new A.e([],k)) +s=A.aU(n,n,n,n,n,n) +r=$.aC() +q=$.aL() +p=A.b([],t.u) +o=A.aP(A.aQ(),t.y) +l=new A.Aa(m,s,r,q,B.m,p,o,A.C(t.S),A.C(t.F),0,n,B.e,new A.e([],l),new A.e([],k)) +l.aT(n,n,m,t.i) +return A.aO(l,n,n,n,n,t.Un)}, +$S:786} +A.ba8.prototype={ +$1(a){var s,r,q,p,o,n=null,m=A.e2(B.j,n,n,n,B.fB.aW(),n,n,n,5,n),l=t.s,k=t.g +m=new A.aqZ(m,-2147483647,n,B.e,new A.e([],l),new A.e([],k)) +s=A.aU(n,n,n,n,n,n) +r=$.aC() +q=$.aL() +p=A.b([],t.u) +o=A.aP(A.aQ(),t.y) +l=new A.Ab(m,s,r,q,B.m,p,o,A.C(t.S),A.C(t.F),0,n,B.e,new A.e([],l),new A.e([],k)) +l.aT(n,n,m,t.i) +return A.aO(l,n,n,n,n,t.Q7)}, +$S:797} +A.ba9.prototype={ +$1(a){return B.SD}, +$S:807} +A.baa.prototype={ +$1(a){return B.SE}, +$S:809} +A.bab.prototype={ +$1(a){return B.Vv}, +$S:823} +A.bac.prototype={ +$1(a){return B.Vu}, +$S:824} +A.bad.prototype={ +$1(a){return B.X_}, +$S:829} +A.ba5.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.zw(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.cv)}, +$S:833} +A.ys.prototype={ +b5(){return new A.agM(B.p)}} +A.agM.prototype={ +bu(){var s,r,q,p,o,n,m=null +this.bN() +s=A.bm(m,m,-2147483647) +r=A.aU(m,m,m,m,m,m) +q=$.aC() +p=$.aL() +o=A.b([],t.u) +n=A.aP(A.aQ(),t.y) +s=new A.E3(s,r,q,p,B.m,o,n,A.C(t.S),A.C(t.F),0,m,B.e,new A.e([],t.s),new A.e([],t.g)) +s.aT(m,m,m,t.i) +this.d!==$&&A.aj() +this.d=s}, +ab(a){var s=null,r=this.d +r===$&&A.c() +return A.bgx(A.kL(B.bC,A.b([A.GK(0,A.aO(r,s,s,s,s,t.Ms),s),A.kA(s,new A.E7(r.ac3(t.BF),new A.b_z(this),s,t.gb),s,s,16,s,16,s)],t.p),B.a4,B.bB,s))}} +A.b_z.prototype={ +$2(a,b){var s=b.a.length,r=this.a.d +r===$&&A.c() +return new A.F5(s,r.gaYR(),null)}, +$S:846} +A.F5.prototype={ +ab(a){var s=null,r=this.c +return A.aym(new A.cu(B.nF,r===0?A.n8(B.H7,this.d,s):A.dI("Remaining enemies: "+r,s,s,s,s,s,s),s),s,s,s,s)}} +A.uY.prototype={ +iX(a){this.eb()}} +A.E3.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.Fh() +return A.p(null,r)}}) +return A.q($async$n,r)}, +Fh(){var s=new A.a(new Float64Array(2)) +s.p(100,100) +this.J(A.beM(s)) +s=new A.a(new Float64Array(2)) +s.p(200,100) +this.J(A.beM(s)) +s=new A.a(new Float64Array(2)) +s.p(300,100) +this.J(A.beM(s))}} +A.b1o.prototype={ +$1(a){B.b.E(a.a,this.a) +a.D()}, +$S:108} +A.b1q.prototype={ +$1(a){B.b.P(a.a,this.a) +a.D()}, +$S:108} +A.V4.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.aiH.prototype={ +aX(){var s=this +s.aq8() +s.bo().My(s,new A.b1o(s))}, +h3(){var s=this +s.bo().My(s,new A.b1q(s)) +s.p7()}} +A.yt.prototype={ +b5(){return new A.agN(B.p)}} +A.agN.prototype={ +bu(){var s,r,q,p,o,n,m=null +this.bN() +s=A.bm(m,m,-2147483647) +r=A.aU(m,m,m,m,m,m) +q=$.aC() +p=$.aL() +o=A.b([],t.u) +n=A.aP(A.aQ(),t.y) +s=new A.yr(s,r,q,p,B.m,o,n,A.C(t.S),A.C(t.F),0,m,B.e,new A.e([],t.s),new A.e([],t.g)) +s.aT(m,m,m,t.i) +this.d!==$&&A.aj() +this.d=s}, +ab(a){var s,r=null,q=this.d +q===$&&A.c() +s=A.b([new A.Qc(new A.K9(q,r,r,t.LB),r,r,r,r,t.nu),new A.Lm(new A.IY(new A.b_A(this),r,r,r,A.bTC(),A.bRx(),t.x4),r,r,r,r,t.wq)],t.Ds) +return A.bgx(A.bHq(A.kL(B.bC,A.b([A.GK(0,A.aO(q,r,r,r,r,t.y6),r),B.a5_],t.p),B.a4,B.bB,r),s))}} +A.b_A.prototype={ +$1(a){var s=this.a.d +s===$&&A.c() +return s.ac3(t._5)}, +$S:851} +A.a4b.prototype={ +ab(a){var s=null,r=A.boW(a,!0,t.C8),q=r.a +return A.aym(new A.cu(B.nF,new A.oL(q,r.$ti.h("oL<1>")).gF(0)===0?A.n8(B.H7,new A.aFo(a),s):A.dI("Remaining enemies: "+q.length,s,s,s,s,s,s),s),s,s,s,s)}} +A.aFo.prototype={ +$0(){A.boW(this.a,!1,t.y6).Fh()}, +$S:0} +A.pg.prototype={ +iX(a){this.eb()}} +A.yr.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.Fh() +return A.p(null,r)}}) +return A.q($async$n,r)}, +Fh(){var s=new A.a(new Float64Array(2)) +s.p(100,100) +this.J(A.beN(s)) +s=new A.a(new Float64Array(2)) +s.p(200,100) +this.J(A.beN(s)) +s=new A.a(new Float64Array(2)) +s.p(300,100) +this.J(A.beN(s))}} +A.b1n.prototype={ +$1(a){B.b.E(a.a,this.a) +a.D()}, +$S:108} +A.b1p.prototype={ +$1(a){B.b.P(a.a,this.a) +a.D()}, +$S:108} +A.V5.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.aiI.prototype={ +aX(){var s=this +s.aq7() +s.bo().My(s,new A.b1n(s))}, +h3(){var s=this +s.bo().My(s,new A.b1p(s)) +s.p7()}} +A.yu.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=new A.a(new Float64Array(2)) +o.ag(200) +p=new A.a(new Float64Array(2)) +p.ag(300) +p=A.bHY(o,p) +p.ay=B.j +p.i3() +q.R=p +q.J(p) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s +this.fO(0,b) +s=this.R +s===$&&A.c() +s=s.at +s.c+=b +s.b=!0 +s.D()}, +gmd(){return this.S}, +smd(a){return this.S=a}} +A.a8u.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:l=new A.a(new Float64Array(2)) +l.p(100,100) +p=$.bjh() +l=A.kB(2,p,l,50) +o=new A.a(new Float64Array(2)) +o.p(160,100) +o=A.kB(3,p,o,50) +n=new A.a(new Float64Array(2)) +n.p(170,150) +n=A.kB(4,p,n,50) +m=new A.a(new Float64Array(2)) +m.p(70,200) +q.I(0,A.b([l,o,n,A.kB(5,p,m,50)],t.QZ)) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.amy.prototype={ +bo(){var s=this.h2$ +return s==null?this.c6():s}} +A.r1.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(A.eU("flame.png",q.cy$,null,null),$async$n) +case 2:m=c +l=A.bfD(m) +k=l.at.d +k.eX(0,100) +k.D() +k.dT(0,400) +k.D() +p=A.bfD(m) +k=p.at.d +k.eX(0,100) +k.D() +k.dT(0,400) +k.D() +p.av=-1 +o=A.bfD(m) +k=o.at.d +k.eX(0,100) +k.D() +k.dT(0,400) +k.D() +o.M=-1 +q.J(l) +q.J(p) +q.J(o) +k=q.k4.at.gaU().a[1] +n=new A.a(new Float64Array(2)) +n.p(0,k-24) +q.J(A.a40(null,n,t.Fr)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +gmd(){return this.R}, +smd(a){return this.R=a}} +A.a6p.prototype={ +a8(a,b){var s,r,q=this,p=q.at.d,o=p.a +p.eX(0,o[0]+q.M*150*b) +p.D() +s=q.a9i(q.gaXI()) +if(!(o[0]<=0&&q.M===-1))r=s.c>=q.gaC().k4.at.gaU().a[0]&&q.M===1 +else r=!0 +if(r)q.M*=-1 +p.dT(0,o[1]+q.av*150*b) +p.D() +if(!(o[1]<=0&&q.av===-1))p=s.d>=q.gaC().k4.at.gaU().a[1]&&q.av===1 +else p=!0 +if(p)q.av*=-1}} +A.al2.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.zw.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(A.eU("flame.png",q.cy$,null,null),$async$n) +case 2:l=c +k=l.c +j=new A.a(new Float64Array(2)) +j.p(k.c-k.a,k.d-k.b) +k=B.t.aW() +p=A.ar() +o=j +n=$.aa() +n=new A.aJ(n,new Float64Array(2)) +n.a7(o) +n.D() +m=new A.a6o(!0,!1,l,$,k,null,p,n,B.o,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +m.b0(null,null,null,null,0,null,null,null,j) +m.lg(null,null,null,null,null,0,null,null,null,null,j,l) +q.J(m) +A.aWu(B.cU,new A.aGs(m)) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.aGs.prototype={ +$1(a){var s=this.a +return s.Wi$=!s.Wi$}, +$S:101} +A.a6o.prototype={} +A.al3.prototype={ +k6(a){if(this.Wi$)this.OB(a)}} +A.zW.prototype={ +b5(){return new A.akG(B.p)}} +A.akG.prototype={ +gaC(){var s,r,q,p,o,n,m,l=null,k=this.d +if(k===$){s=A.bm(l,l,-2147483647) +r=A.aU(l,l,l,l,l,l) +q=$.aC() +p=$.aL() +o=A.b([],t.u) +n=A.aP(A.aQ(),t.y) +m=new A.Oi(s,r,q,p,B.m,o,n,A.C(t.S),A.C(t.F),0,l,B.e,new A.e([],t.s),new A.e([],t.g)) +m.aT(l,l,l,t.i) +this.d!==$&&A.N() +this.d=m +k=m}return k}, +NT(a){var s,r,q=this.gaC().cl(a,t.Xn) +if(q!=null){s=!q.M +q.M=s +r=$.G().B() +r.sA(0,s?B.l:A.S(B.c.ai(127.5),255,255,255)) +q.S$=r}}, +ab(a){var s=this,r=null,q=t.p +return A.kL(B.bC,A.b([A.GK(0,A.aO(s.gaC(),r,r,r,r,t.Il),r),A.kA(r,A.jU(A.b([A.n8(B.aeO,new A.b3n(s),r),A.n8(B.aeS,new A.b3o(s),r),A.n8(B.aeP,new A.b3p(s),r)],q),B.ah,B.kw,B.ak,r),r,r,20,r,222,300)],q),B.a4,B.bB,r)}} +A.b3n.prototype={ +$0(){this.a.NT(new A.i3(B.d.gL("knight")))}, +$S:0} +A.b3o.prototype={ +$0(){this.a.NT(new A.i3(B.d.gL("mage")))}, +$S:0} +A.b3p.prototype={ +$0(){this.a.NT(new A.i3(B.d.gL("ranger")))}, +$S:0} +A.Oi.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:i=A.cO(q.nX(0),t.H) +s=2 +return A.x(i,$async$n) +case 2:i=q.cy$ +s=3 +return A.x(A.eU("knight.png",i,null,null),$async$n) +case 3:p=c +s=4 +return A.x(A.eU("mage.png",i,null,null),$async$n) +case 4:o=c +s=5 +return A.x(A.eU("ranger.png",i,null,null),$async$n) +case 5:n=c +i=B.d.gL("knight") +m=new A.a(new Float64Array(2)) +m.ag(100) +l=new A.a(new Float64Array(2)) +l.p(0,100) +m=A.bgB(new A.i3(i),l,m,p) +l=B.d.gL("mage") +i=new A.a(new Float64Array(2)) +i.ag(100) +k=new A.a(new Float64Array(2)) +k.p(120,100) +i=A.bgB(new A.i3(l),k,i,o) +k=B.d.gL("ranger") +l=new A.a(new Float64Array(2)) +l.ag(100) +j=new A.a(new Float64Array(2)) +j.p(240,100) +s=6 +return A.x(q.I(0,A.b([m,i,A.bgB(new A.i3(k),j,l,n)],t.W)),$async$n) +case 6:return A.p(null,r)}}) +return A.q($async$n,r)}} +A.RA.prototype={} +A.Aa.prototype={ +mV(a){return B.vd}, +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.cy$.d_(0,"animations/chopper.png"),$async$n) +case 2:l=c +k=new A.a(new Float64Array(2)) +k.ag(48) +p=A.acj(l,k) +k=q.k3 +l=new A.a(new Float64Array(2)) +l.ag(128) +l=A.mB(B.j,null,p.yR(0,0.05),null,null,null,3.141592653589793,null,!0,null,null,!1,null,l) +q.R=l +k.J(l) +l=q.k3 +k=new A.a(new Float64Array(2)) +k.ag(128) +o=p.yR(0,0.05) +n=new A.a(new Float64Array(2)) +n.p(0,160) +k=A.mB(B.j,null,o,null,null,null,0,null,!0,n,null,!1,null,k) +q.S=k +l.J(k) +m=A.dW(A.ep(null,null,B.l,null,null,null,null,null,null,null,null,30,null,null,null,null,null,!0,null,null,null,null,null,B.kh,null,null),B.r) +k=q.k3 +l=q.R +l=l.eA(l.ay) +o=new A.a(new Float64Array(2)) +o.p(0,-70) +n=t.Z0 +k.J(A.dm(B.j,null,null,null,l.X(0,o),null,null,null,"nativeAngle = pi",m,n)) +o=q.k3 +l=q.S +l=l.eA(l.ay) +k=new A.a(new Float64Array(2)) +k.p(0,-70) +o.J(A.dm(B.j,null,null,null,l.X(0,k),null,null,null,"nativeAngle = 0",m,n)) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.ar_.prototype={ +cb(a){var s,r,q,p,o,n,m=this.go +if((m.a&4)===0)this.J(m) +s=a.c +m=m.at.d +m.a7(B.b.ga_(s)) +m.D() +r=this.gbQ(0).nw(0,t.U9) +for(m=r.length,q=0;q>>24&255)/255>=0.5)q.J(A.aM9(A.dr(!1,0,B.z,1,!1,r,r,r,0))) +else q.J(A.brs(1,A.dr(!1,0,B.z,1,!1,r,r,r,0),r,r,r))}} +A.aml.prototype={} +A.Bb.prototype={} +A.ao6.prototype={ +n(a){var s,r,q,p,o,n,m,l,k,j,i=null +this.en(0) +for(s=t.s,r=t.g,q=0;q<20;++q){p=B.O.aV() +o=B.O.aV() +n=B.O.aV() +m=new Float64Array(2) +m[0]=o*320+40 +m[1]=n*520+40 +n=$.G() +l=n.B() +l.sA(0,B.xp[B.O.f9(18)]) +o=new Float64Array(2) +p=(p*30+10)*2 +k=new Float64Array(2) +j=new A.a(k) +k[0]=p +k[1]=p +n=n.B() +n.sA(0,B.l) +p=A.ar() +k=$.aa() +k=new A.aJ(k,new Float64Array(2)) +k.a7(j) +k.D() +p=new A.anE(new A.a(o),$,n,i,p,k,B.o,0,0,i,B.e,new A.e([],s),new A.e([],r)) +p.b0(i,i,i,i,0,new A.a(m),i,i,j) +p.S$=l +this.J(p)}}} +A.anE.prototype={ +cb(a){var s=new A.pB(0.5),r=new A.a9Q(s,null,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +s.iW(r) +this.J(r)}} +A.atK.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.Bo.prototype={} +A.aoU.prototype={ +n(a){var s,r,q,p,o,n,m=null,l=$.G(),k=l.B() +k.sA(0,B.Qw) +l=l.B() +l.sA(0,B.Ol) +l.sU(0,B.u) +l.sbM(1.5) +s=new A.a(new Float64Array(2)) +s.ag(200) +r=A.ar() +q=$.aa() +q=new A.aJ(q,new Float64Array(2)) +q.a7(s) +q.D() +p=t.s +o=t.g +n=new A.a1h(100,k,l,r,q,B.j,0,0,m,B.e,new A.e([],p),new A.e([],o)) +n.b0(B.j,m,m,m,0,m,m,m,s) +this.J(n) +l=n.ok +l===$&&A.c() +l.J(A.wk(1,A.dr(!1,0,B.bt,6,!0,m,3,m,0),m,m)) +l=n.k4 +l===$&&A.c() +k=A.dr(!1,0,B.z,20,!0,m,m,m,0) +s=new A.aoW(6.283185307179586,0,m,k,m,0,m,B.e,new A.e([],p),new A.e([],o)) +k.iW(s) +l.J(s) +l.J(A.wk(0.09424777960769379,A.dr(!1,0,B.z,0.1,!0,m,0.1,m,0),m,m)) +l.J(A.wk(0.13194689145077132,A.dr(!1,0,B.z,0.13,!0,m,0.13,m,0),m,m))}} +A.a1h.prototype={ +n(a1){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0 +var $async$n=A.t(function(a2,a3){if(a2===1)return A.o(a3,r) +while(true)switch(s){case 0:q.p4=$.G().Z() +for(p=q.p1,o=p*0.15,n=p*0.2,m=0;m<12;++m){l=6.283185307179586*(m/12) +k=B.f.bx(m,3)===0?n:o +q.p4.a4(0,p+p*Math.sin(l),p+p*Math.cos(l)) +j=p-k +q.p4.q(0,p+j*Math.sin(l),p+j*Math.cos(l))}j=p*0.3 +i=p*0.7 +h=$.G() +g=h.B() +g.sA(0,B.Nf) +f=h.B() +f.sA(0,B.P6) +e=new A.a(new Float64Array(2)) +e.p(j,2*i) +d=A.ar() +c=$.aa() +b=new A.aJ(c,new Float64Array(2)) +b.a7(e) +b.D() +a=t.s +a0=t.g +j=new A.a1i(i,j,g,f,d,b,B.j,0,0,null,B.e,new A.e([],a),new A.e([],a0)) +j.b0(B.j,null,null,null,0,null,null,null,e) +i=new A.a(new Float64Array(2)) +i.p(p,p) +d=d.d +d.a7(i) +d.D() +q.k4=j +j=h.B() +j.sU(0,B.u) +j.sA(0,B.Pt) +h=h.B() +h.sU(0,B.u) +h.sA(0,B.Nk) +i=new A.a(new Float64Array(2)) +i.ag(2*p) +g=A.ar() +f=new A.aJ(c,new Float64Array(2)) +f.a7(i) +f.D() +j=new A.a1j(p,p*0.1,j,h,g,f,B.j,0,0,null,B.e,new A.e([],a),new A.e([],a0)) +j.b0(B.j,null,null,null,0,null,null,null,i) +i=new A.a(new Float64Array(2)) +i.p(p,p) +g=g.d +g.a7(i) +g.D() +q.ok=j +q.J(q.k4) +q.J(q.ok) +return A.p(null,r)}}) +return A.q($async$n,r)}, +b4(a){var s=this,r=s.p1 +a.cs(new A.i(r,r),r,s.p2) +r=s.p4 +r===$&&A.c() +a.a3(r,s.p3)}} +A.a1i.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:n=$.G() +m=n.Z() +l=q.k4 +m.a4(0,0,l) +p=q.ok +o=p/2 +m.q(0,o,0) +m.q(0,p,l) +m.T(0) +q.p1!==$&&A.aj() +q.p1=m +n=n.Z() +n.a4(0,0,l) +n.q(0,p,l) +n.q(0,o,2*l) +n.T(0) +q.p2!==$&&A.aj() +q.p2=n +return A.p(null,r)}}) +return A.q($async$n,r)}, +b4(a){var s=this,r=s.p1 +r===$&&A.c() +a.a3(r,s.p3) +r=s.p2 +r===$&&A.c() +a.a3(r,s.p4)}} +A.a1j.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:j=q.ok +q.p2.sbM(j) +p=$.G().Z() +q.p1!==$&&A.aj() +q.p1=p +o=q.k4 +n=o-j +m=o-j/3 +for(l=0;l<144;++l){k=6.283185307179586*(l/144) +p.a4(0,o+n*Math.sin(k),o+n*Math.cos(k)) +p.q(0,o+m*Math.sin(k),o+m*Math.cos(k))}return A.p(null,r)}}) +return A.q($async$n,r)}, +b4(a){var s,r=this,q=r.k4,p=r.ok +a.cs(new A.i(q,q),q-p/2,r.p2) +s=r.p3 +a.cs(new A.i(q,q),q-p,s) +p=r.p1 +p===$&&A.c() +a.a3(p,s)}} +A.wm.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:m=new A.a(new Float64Array(2)) +m.ag(200) +p=B.t.aW() +p.sU(0,B.u) +q.R=A.kB(null,p,m,100) +m=new A.a(new Float64Array(2)) +m.ag(70) +o=A.kB(null,null,m,20) +q.R.J(o) +q.J(q.R) +m=A.ar() +p=new A.a(new Float64Array(2)) +n=$.aa() +n=new A.aJ(n,new Float64Array(2)) +n.a7(p) +n.D() +p=new A.aco(m,n,B.o,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +p.b0(null,null,null,null,0,null,null,null,null) +p.asU() +n=new A.a(new Float64Array(2)) +n.p(200,100) +m=m.d +m.a7(n) +m.D() +m=new A.a(new Float64Array(2)) +m.ag(1.2) +n=$.bxo() +n=new A.a9y(new A.PO(0,1),new A.b1D(1,n)) +n.a5I() +p.J(A.ap8(m,new A.m6(new A.RJ(A.b([new A.pB(0.1),new A.He(0.1),n],t.Aa))),null,null)) +q.J(p) +return A.p(null,r)}}) +return A.q($async$n,r)}, +h4(){var s,r=null,q=this.S,p=q?3:1 +this.S=!q +q=this.R +q===$&&A.c() +s=new A.a(new Float64Array(2)) +s.ag(p) +q.J(A.ap8(s,A.dr(!1,0,B.uK,1.5,!1,r,r,r,0),r,r))}} +A.aco.prototype={ +asU(){var s,r,q,p=$.G().Z() +p.a4(0,30,0) +this.k4!==$&&A.aj() +this.k4=p +for(s=1;s<10;++s){r=(s&1)===0?30:15 +q=s/10*6.283185307179586 +p.q(0,r*Math.cos(q),r*Math.sin(q))}p.T(0)}, +b4(a){var s,r,q=this,p=q.k4 +p===$&&A.c() +s=q.ok +if(s===$){r=$.G().B() +r.sA(0,B.Sh) +q.ok!==$&&A.N() +q.ok=r +s=r}a.a3(p,s)}} +A.ap5.prototype={} +A.BE.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:l=new A.aSr() +k=$.G() +j=k.Z() +j.q(0,40,20) +j.q(0,0,40) +j.YR(8,20,0,0) +j.T(0) +p=k.B() +p.sA(0,B.M5) +k=k.B() +k.sU(0,B.u) +k.sbM(3) +k.sA(0,B.Ss) +o=new A.a(new Float64Array(2)) +o.p(40,40) +n=A.ar() +m=$.aa() +m=new A.aJ(m,new Float64Array(2)) +m.a7(o) +m.D() +k=new A.a8T(j,k,p,n,m,B.j,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +k.b0(B.j,null,null,null,0,null,null,null,o) +j=new A.a(new Float64Array(2)) +j.p(200,300) +n=n.d +n.a7(j) +n.D() +j=new A.a(new Float64Array(2)) +j.p(400,300) +j=A.P_(j,l.$1(0.7)) +p=A.wk(1.5707963267948966,l.$1(0.5),null,null) +o=new A.a(new Float64Array(2)) +o.p(400,400) +o=A.P_(o,l.$1(0.7)) +n=new A.a(new Float64Array(2)) +n.ag(1.5) +n=A.Rh(n,l.$1(0.7),null,null) +m=new A.a(new Float64Array(2)) +m.p(400,500) +k.J(A.bpx(A.b([j,p,o,n,A.P_(m,l.$1(0.7))],t.ZM),!0,!0)) +q.J(k) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.aSr.prototype={ +$1(a){return A.dr(!1,0,B.z,a,!1,null,null,null,0)}, +$S:958} +A.a8T.prototype={ +b4(a){var s=this.k4 +a.a3(s,this.p1) +a.a3(s,this.ok)}} +A.wu.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:n=new A.a(new Float64Array(2)) +n.ag(200) +p=B.t.aW() +p.sU(0,B.u) +o=new A.a(new Float64Array(2)) +o.ag(70) +n=A.e2(null,null,A.b([A.kB(null,null,o,20)],t.W),null,p,null,n,null,100,null) +q.J(n) +q.R=n +return A.p(null,r)}}) +return A.q($async$n,r)}, +h4(){var s,r,q,p,o=this,n=null,m=o.R +m===$&&A.c() +s=o.S?300:100 +r=new A.a(new Float64Array(2)) +r.ag(s) +s=A.dr(!1,0,B.uK,1.5,!1,n,n,n,0) +q=new A.a(new Float64Array(2)) +q.v(r) +r=new Float64Array(2) +p=new A.a(new Float64Array(2)) +p.v(new A.a(r)) +r=new A.apS(q,p,n,s,n,0,n,B.e,new A.e([],t.s),new A.e([],t.g)) +s.iW(r) +r.df$=null +m.J(r) +o.S=!o.S}} +A.apQ.prototype={} +A.bao.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.BJ(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.FQ)}, +$S:959} +A.BJ.prototype={ +n(a0){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a +var $async$n=A.t(function(a1,a2){if(a1===1)return A.o(a2,r) +while(true)switch(s){case 0:a=new A.a(new Float64Array(2)) +a.p(50,30) +p=new A.a(new Float64Array(2)) +p.v(a) +a=new A.a(new Float64Array(2)) +a.p(700,500) +o=new A.a(new Float64Array(2)) +o.v(a) +a=A.a9K(100,30,260,100) +n=A.bJn(40,300,120,550,30) +m=new A.a(new Float64Array(2)) +m.p(10,70) +l=new A.a(new Float64Array(2)) +l.p(180,200) +k=new A.a(new Float64Array(2)) +k.p(220,150) +j=t.d +k=A.aO2(A.b([m,l,k],j)) +m=new A.a(new Float64Array(2)) +m.p(400,160) +l=new A.a(new Float64Array(2)) +l.p(550,400) +i=new A.a(new Float64Array(2)) +i.p(710,350) +h=new A.a(new Float64Array(2)) +h.p(540,170) +g=new A.a(new Float64Array(2)) +g.p(710,100) +f=new A.a(new Float64Array(2)) +f.p(710,320) +e=new A.a(new Float64Array(2)) +e.p(730,315) +d=new A.a(new Float64Array(2)) +d.p(750,60) +c=new A.a(new Float64Array(2)) +c.p(590,30) +b=A.b([new A.qS(p,20),new A.qS(o,50),a,n,k,A.aO2(A.b([m,l,i,h,g,f,e,d,c],j))],t.F9) +q.J(A.bK2(b,B.xL)) +a=A.b([],j) +p=A.b([],t.O) +q.J(new A.a2J(b,B.xL,B.O,a,p,0,null,B.e,new A.e([],t.s),new A.e([],t.g))) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.abu.prototype={ +b4(a){var s,r,q +for(s=this.at,r=this.ax,q=0;q<6;++q)a.a3(s[q].CA(),r[q])}} +A.aSz.prototype={ +$1(a){var s=$.G().B() +s.sU(0,B.u) +s.sbM(1) +s.sA(0,a) +return s}, +$S:960} +A.a2J.prototype={ +a8(a,b){this.ajG()}, +ajG(){var s,r,q=this,p=q.ay,o=p.aV() +p=p.aV() +s=new A.a(new Float64Array(2)) +s.p(o*800,p*600) +q.ch.push(s) +p=q.CW +p.push(B.Ns) +for(o=q.at,r=0;r<6;++r)if(o[r].jQ(0,s)){B.b.sa_(p,q.ax[r]) +break}}, +b4(a){var s,r,q,p,o,n,m=$.G().B() +for(s=this.ch,r=this.CW,q=0;q=0&&h<6&&i>=0&&i>>16&255,s>>>8&255,s&255)) +a.cs(B.h,r.aV()*b.gew()>0.6?r.aV()*(50*b.gew()):2+3*b.gew(),q)}, +$S:92} +A.aNa.prototype={ +$2(a,b){return a.b7(A.wc(B.h,10,10),this.a)}, +$S:92} +A.RU.prototype={ +oP(a){return(Math.sin(3.141592653589793*(a*2-0.5))+1)/2}} +A.adM.prototype={ +aX(){var s=this.ax +s.d=0 +s.e=!0}, +b4(a){var s=this,r=s.ch,q=s.ax +r.sA(0,s.ay[B.c.aw(Math.min(q.d/q.a,1)*3)]) +a.b7(s.at,r)}, +a8(a,b){this.ax.a8(0,b)}} +A.AN.prototype={ +M5(a){var s=a.gji().gba() +this.J(A.box(A.vV(40,new A.aNm(this)),s))}} +A.aNm.prototype={ +$1(a){var s,r=this.a,q=r.S,p=r.R,o=q.az(0,p.aV()) +q=q.az(0,p.aV()) +s=new A.a(new Float64Array(2)) +s.p(o,q) +s=s.a2(0,a) +q=$.G().B() +p=r.aa.az(0,p.aV()) +p.toString +q.sA(0,p) +return A.avM(null,A.uF(q,2),2,null,s)}, +$S:153} +A.amz.prototype={} +A.bbk.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.C6(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.MS)}, +$S:298} +A.bbl.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k=null,j=a.abt("Half size",!0),i=new A.a(new Float64Array(2)) +i.ag(500) +s=$.G() +r=s.B() +r.sA(0,B.e) +s=s.B() +s.sA(0,B.P7) +q=A.bm(k,k,-2147483647) +p=A.aU(k,k,k,k,k,k) +o=$.aC() +n=$.aL() +m=A.b([],t.u) +l=A.aP(A.aQ(),t.y) +j=new A.vr(i,r,s,j,q,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,k,B.e,new A.e([],t.s),new A.e([],t.g)) +j.aT(k,k,k,t.i) +return A.aO(j,k,k,k,k,t.sM)}, +$S:299} +A.bbm.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.vN(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.ZR)}, +$S:300} +A.bbn.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.zc(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.MN)}, +$S:301} +A.bbo.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.zY(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.Cy)}, +$S:302} +A.bbp.prototype={ +$1(a){var s=null,r=A.wc(B.h,32,32),q=A.b([B.i3,B.fr,B.co],t.O),p=$.G().B(),o=t.s,n=t.g,m=A.bm(s,s,-2147483647),l=A.aU(s,s,s,s,s,s),k=$.aC(),j=$.aL(),i=A.b([],t.u),h=A.aP(A.aQ(),t.y) +r=new A.AM(B.O,new A.acs(0,5),new A.adM(r,new A.wK(2,s,!0,!0),q,p,0,s,B.e,new A.e([],o),new A.e([],n)),m,l,k,j,B.m,i,h,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],o),new A.e([],n)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.Y9)}, +$S:303} +A.bbq.prototype={ +$1(a){var s,r,q=null,p=a.ac0("From color",B.CW),o=a.ac0("To color",B.bi),n=a.hS("Zoom",1),m=A.j2(600,q,400,q),l=m.ax,k=new A.a(new Float64Array(2)) +k.ag(n) +n=l.at.e +n.a7(k) +n.D() +l.dx=null +n=A.bm(q,q,-2147483647) +l=$.aC() +k=$.aL() +s=A.b([],t.u) +r=A.aP(A.aQ(),t.y) +p=new A.AN(B.O,new A.br(-1,1,t.Y),new A.fp(p,o),n,m,l,k,B.m,s,r,A.C(t.S),A.C(t.F),0,q,B.e,new A.e([],t.s),new A.e([],t.g)) +p.aT(m,q,q,t.i) +return A.aO(p,q,q,q,q,t.C6)}, +$S:304} +A.bbr.prototype={ +$1(a){var s=null,r=a.tX("Text align",B.d0,B.xm,t.Pn),q=A.bm(s,s,-2147483647),p=A.aU(s,s,s,s,s,s),o=$.aC(),n=$.aL(),m=A.b([],t.u),l=A.aP(A.aQ(),t.y) +r=new A.Bm(r,q,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.Sa)}, +$S:305} +A.Bm.prototype={ +mV(a){return B.OB}, +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:g=q.R +f=A.bDX(A.bkD(B.q,null,2,B.NE,null),null,new A.qK(null,null,null,null,g),null,null,null,null,null,200,null,B.Us,new A.qK(null,B.Uy,A.bkD(B.P8,null,null,B.uZ,null),null,g),null,400) +g=t.oM +g=A.b([new A.a4M(1,new A.ou("1984")),new A.AJ(new A.ou("Anything could be true. The so-called laws of nature were nonsense.")),new A.AJ(new A.ou('The law of gravity was nonsense. "If I wished," O\'Brien had said, "I could float off this floor like a soap bubble." Winston worked it out. "If he thinks he floats off the floor, and I simultaneously think I can see him do it, then the thing happens."')),new A.AJ(new A.NC(A.b([new A.ou("Suddenly, like a lump of submerged wreckage breaking the surface of water, the thought burst into his mind: "),new A.a5B(new A.NC(A.b([new A.ou("\"It doesn't really happen. We imagine it. It is "),new A.a_S(new A.ou("hallucination")),new A.ou('."')],g)))],g))),new A.AJ(new A.ou('He pushed the thought under instantly. The fallacy was obvious. It presupposed that somewhere or other, outside oneself, there was a "real" world where "real" things happened. But how could there be such a world? What knowledge have we of anything, save through our own minds? All happenings are in the mind. Whatever happens in all minds, truly happens.'))],t.Jf) +p=new A.a(new Float64Array(2)) +p.p(100,50) +o=f.z +n=o==null +if(n)m=null +else m=o +l=f.Q +k=l==null +if(k)j=null +else j=l +if(m==null||j==null)A.X(A.c3("Either style.width or size.x must be provided.",null)) +n=!n&&o!==m +if(n)A.X(A.c3("style.width and size.x, if both provided, must match.",null)) +n=!k&&l!==j +if(n)A.X(A.c3("style.height and size.y, if both provided, must match.",null)) +n=new Float64Array(2) +new A.a(n).p(m,j) +j=n[0] +i=new A.aBB(g).aRR(f,n[1],j) +h=i.gCJ(0) +j=h.gaH(h) +n=h.gaQ(h) +g=new A.a(new Float64Array(2)) +g.p(j,n) +n=A.ar() +k=$.aa() +k=new A.aJ(k,new Float64Array(2)) +k.a7(g) +k.D() +n=new A.ade(i,n,k,B.o,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +n.b0(null,null,null,null,0,p,0,null,g) +q.J(n) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.C6.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c +var $async$n=A.t(function(b,a0){if(b===1)return A.o(a0,r) +while(true)switch(s){case 0:d=t.Z0 +c=A.dm(null,null,null,null,null,null,null,null,"Hello, Flame",$.bjJ(),d) +c.ay=B.dy +c.i3() +p=c.at.d +p.eX(0,q.k4.at.gaU().a[0]/2) +p.D() +p.dT(0,32) +p.D() +p=A.dm(null,null,null,null,null,null,null,null,"Text with shade",$.bzK(),d) +p.ay=B.iU +p.i3() +o=q.k4.at.gaU() +n=new A.a(new Float64Array(2)) +n.ag(100) +m=p.at.d +m.a7(o.Y(0,n)) +m.D() +m=$.bA6() +n=A.dm(null,null,null,null,null,null,null,null,"center",m,d) +n.ay=B.j +n.i3() +o=n.at.d +o.a7(q.k4.at.gaU().b1(0,2)) +o.D() +d=A.dm(null,null,null,null,null,null,null,null,"bottomRight",m,d) +d.ay=B.bL +d.i3() +m=d.at.d +m.a7(q.k4.at.gaU()) +m.D() +m=A.bfV("\"This is our world now. The world of the electron and the switch; the beauty of the baud. We exist without nationality, skin color, or religious bias. You wage wars, murder, cheat, lie to us and try to make us believe it's for our own good, yet we're the criminals. Yes, I am a criminal. My crime is that of curiosity.\"",null,null,null,null) +m.ay=B.mk +m.i3() +o=m.at.d +o.dT(0,q.k4.at.gaU().a[1]) +o.D() +o=new A.a(new Float64Array(2)) +o.p(300,200) +o=A.bfV("Let A be a finitely generated torsion-free abelian group. Then A is free.",B.j,10,o,0) +l=new A.a(new Float64Array(2)) +l.p(10,50) +k=o.at.d +k.a7(l) +k.D() +l=new A.a(new Float64Array(2)) +l.p(300,200) +l=A.bfV("Let A be a torsion abelian group. Then A is the direct sum of its subgroups A(p) for all primes p such that A(p) \u2260 0.",B.bL,10,l,0) +k=new A.a(new Float64Array(2)) +k.p(10,260) +j=l.at.d +j.a7(k) +j.D() +j=q.k4.at.gaU().a[0] +k=q.k4.at.gaU().a[1] +i=new A.a(new Float64Array(2)) +i.p(j/2,k/2+100) +k=t.Fr +i=A.dm(B.e8,null,null,null,i,null,null,null,"Scroll me when finished:",null,k) +j=new A.a(new Float64Array(2)) +j.p(200,150) +h=q.k4.at.gaU().a[0] +g=q.k4.at.gaU().a[1] +f=new A.a(new Float64Array(2)) +f.p(h/2,g/2+100) +g=$.bjB() +h=A.ar() +e=$.aa() +e=new A.aJ(e,new Float64Array(2)) +e.a7(j) +e.D() +h=new A.a7j(h,e,B.dy,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +h.b0(B.dy,null,null,null,0,f,null,null,j) +h.asQ(B.o,B.dy,0,B.a9T,null,null,null,1,f,null,null,j,'In a bustling city, a small team of developers set out to create a mobile game using the Flame engine for Flutter. Their goal was simple: to create an engaging, easy-to-play game that could reach a wide audience on both iOS and Android platforms. After weeks of brainstorming, they decided on a concept: a fast-paced, endless runner game set in a whimsical, ever-changing world. They named it "Swift Dash." Using Flutter\'s versatility and the Flame engine\'s capabilities, the team crafted a game with vibrant graphics, smooth animations, and responsive controls. The game featured a character dashing through various landscapes, dodging obstacles, and collecting points. As they launched "Swift Dash," the team was anxious but hopeful. To their delight, the game was well-received. Players loved its simplicity and charm, and the game quickly gained popularity.',g,k) +q.I(0,A.b([c,p,n,d,m,o,l,i,h],t.W)) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.b8E.prototype={ +$1(a){return a.aOV(B.CS,"monospace",2)}, +$S:306} +A.a7m.prototype={ +n(a){var s,r,q=this +q.fT=$.G().B() +s=q.ax +r=s.a +q.fU=new A.A(0,0,0+r[0],0+r[1]) +s.an(0,new A.aLC(q)) +q.fT.sA(0,B.jt) +return q.a1p(0)}, +b4(a){var s,r=this.fU +r===$&&A.c() +s=this.fT +s===$&&A.c() +a.b7(r,s) +this.apx(a)}} +A.aLC.prototype={ +$0(){var s=this.a,r=s.ax.a +s.fU=new A.A(0,0,0+r[0],0+r[1])}, +$S:0} +A.a7j.prototype={ +n(a){var s,r=this,q=$.G().B() +r.b_=q +s=r.ax.a +r.b6=new A.A(0,0,0+s[0],0+s[1]) +q.sA(0,B.jt) +return r.en(0)}, +b4(a){var s,r=this.b6 +r===$&&A.c() +s=this.b_ +s===$&&A.c() +a.b7(r,s) +this.GH(a)}} +A.xY.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:j=q.cy$.a +i=j.i(0,"shield.png") +if(i==null){i=A.bho(A.Kh(B.f3.dB(B.d.c5(u.P,B.d.f7(u.P,",")+1)))) +j.u(0,"shield.png",i) +j=i}else j=i +s=2 +return A.x(j.Zd(),$async$n) +case 2:p=c +j=q.k4.at.gaU().b1(0,2) +i=new A.a(new Float64Array(2)) +i.ag(100) +o=A.iS(p,null,null) +n=B.t.aW() +m=A.ar() +l=i +k=$.aa() +k=new A.aJ(k,new Float64Array(2)) +k.a7(l) +k.D() +n=new A.fv(!1,o,$,n,null,m,k,B.j,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +n.b0(B.j,null,null,null,0,j,null,null,i) +n.lg(B.j,null,null,null,null,0,null,j,null,null,i,o) +q.J(n) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.y0.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(A.eU("flame.png",q.cy$,null,null),$async$n) +case 2:p=c +o=q.k4.at.gaU().b1(0,2) +n=p.c +m=new A.a(new Float64Array(2)) +m.p(n.c-n.a,n.d-n.b) +q.J(A.hy(B.j,null,null,null,null,0,null,o,null,null,m.a2(0,2),p)) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.BR.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(A.acc("boom.png",null,null,null,null,!0),$async$n) +case 2:j=c +i=new A.a(new Float64Array(2)) +i.ag(200) +p=new A.a(new Float64Array(2)) +p.ag(64) +j.To(0,p,B.fp,i,0.3490658503988659,2,B.kY) +j.ab1(B.oK,B.kY) +for(o=0;o<100;++o){n=B.O.f9(8)*128 +m=B.O.f9(8)*128 +l=B.O.f9(B.c.aw(q.k4.at.gaU().a[0])) +i=B.O.f9(B.c.cN(q.k4.at.gaU().a[1],2)) +p=q.k4.at.gaU().a[1] +k=new Float64Array(2) +k[0]=l-64 +k[1]=i+p/2-64 +j.aaM(0,new A.a(k),new A.A(n,m,n+128,m+128))}q.J(A.bKm(B.bF,null,null,null,j)) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.tA.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.J(new A.a7l(null,null,null,null,null,0,null,B.e,new A.e([],t.s),new A.e([],t.g))) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.a7l.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:h=q.gaC() +s=2 +return A.x(A.acc("boom.png",null,null,null,h.cy$,!0),$async$n) +case 2:g=q.at=c +h=new A.a(new Float64Array(2)) +h.ag(200) +p=new A.a(new Float64Array(2)) +p.ag(64) +g.To(0,p,B.fp,h,0.3490658503988659,2,B.kY) +g.ab1(B.oK,B.kY) +o=q.gaC().k4.at.gaU() +for(h=o.a,n=0;n<100;++n){m=B.O.f9(8)*128 +l=B.O.f9(8)*128 +k=B.O.f9(B.c.aw(h[0])) +p=B.O.f9(B.c.cN(h[1],2)) +j=h[1] +i=new Float64Array(2) +i[0]=k-64 +i[1]=p+j/2-64 +g.aaM(0,new A.a(i),new A.A(m,l,m+128,l+128))}return A.p(null,r)}}) +return A.q($async$n,r)}} +A.alS.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.Lf.prototype={ +W(){return"ButtonState."+this.b}} +A.tB.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=B.t.aW() +o=A.ar() +n=new A.a(new Float64Array(2)) +m=$.aa() +m=new A.aJ(m,new Float64Array(2)) +m.a7(n) +m.D() +p=new A.a07(null,null,null,!0,$,p,null,o,m,B.o,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +p.b0(null,null,null,null,0,null,null,null,null) +p.OU(null,null,null,null,null,null,0,null,null,null,null,null,null) +o=o.d +o.a7(q.k4.at.gaU().b1(0,2)) +o.D() +o=new A.a(new Float64Array(2)) +o.p(200,50) +p.sC(0,o) +p.ay=B.j +p.i3() +q.J(p) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.a07.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:n=q.gaC() +m=new A.a(new Float64Array(2)) +m.p(0,20) +p=new A.a(new Float64Array(2)) +p.p(60,20) +s=2 +return A.x(A.eU("buttons.png",n.cy$,m,p),$async$n) +case 2:o=c +p=q.gaC() +n=new A.a(new Float64Array(2)) +n.p(60,20) +l=A +k=B.up +j=o +i=B.j3 +s=3 +return A.x(A.eU("buttons.png",p.cy$,null,n),$async$n) +case 3:q.sa0r(l.b3([k,j,i,c],t.eu,t.bU)) +q.sa1(0,B.j3) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){this.sa1(0,B.up)}, +iX(a){this.sa1(0,B.j3)}, +rr(a){this.sa1(0,B.j3)}} +A.agd.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.age.prototype={ +aX(){var s,r +this.a1n() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.BU.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b +var $async$n=A.t(function(a0,a1){if(a0===1)return A.o(a1,r) +while(true)switch(s){case 0:s=2 +return A.x(q.cy$.d_(0,"sprite_sheet.png"),$async$n) +case 2:c=a1 +b=new A.a(new Float64Array(2)) +b.p(16,18) +p=A.acj(c,b) +o=p.Us(0,0.1,7) +n=p.Us(1,0.1,7) +b=A.b([0.1,0.1,0.3,0.3,0.5,0.3,0.1],t.n) +m=A.bKl(p.QE(0,1,7),!0,b) +l=A.aTB(p.a,new A.ac8(A.b([p.Ut(0,0,0.1),p.Ut(0,1,0.1),p.Ut(0,2,0.3),p.D4(4,0.3),p.D4(5,0.5),p.D4(6,0.3),p.D4(7,0.1)],t.Sf),!0)) +k=new A.a(new Float64Array(2)) +k.p(80,90) +c=new A.a(new Float64Array(2)) +c.p(150,100) +j=A.mB(null,null,o,null,null,null,0,null,!0,c,null,!1,null,k) +c=new A.a(new Float64Array(2)) +c.p(150,220) +i=A.mB(null,null,n,null,null,null,0,null,!0,c,null,!1,null,k) +c=new A.a(new Float64Array(2)) +c.p(250,220) +h=A.mB(null,null,m,null,null,null,0,null,!0,c,null,!1,null,k) +c=new A.a(new Float64Array(2)) +c.p(250,100) +g=A.mB(null,null,l,null,null,null,0,null,!0,c,null,!1,null,k) +q.J(j) +q.J(i) +q.J(h) +q.J(g) +c=p.f +b=p.lL(0*c) +f=new A.a(new Float64Array(2)) +f.p(50,100) +e=A.hy(null,null,null,null,null,0,null,f,null,null,k,b) +c=p.lL(c) +b=new A.a(new Float64Array(2)) +b.p(50,220) +d=A.hy(null,null,null,null,null,0,null,b,null,null,k,c) +q.J(e) +q.J(d) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.bbs.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.y0(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.UY)}, +$S:307} +A.bbt.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.xY(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.kX)}, +$S:308} +A.bbu.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.BU(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.KE)}, +$S:309} +A.bbv.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.BR(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.VE)}, +$S:310} +A.bbw.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.tA(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.ZF)}, +$S:311} +A.bbx.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.tB(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.aG)}, +$S:312} +A.jK.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:j=q.k4.at.gaU().a[0] +i=new A.a(new Float64Array(2)) +i.p(j/2,50) +i=A.dm(B.j,null,null,null,i,null,null,null,"test",null,t.Fr) +q.R!==$&&A.aj() +q.R=i +p=q.k4.at +p.J(i) +i=t.s +j=t.g +o=A.b([new A.a68(null,-2147483647,null,B.e,new A.e([],i),new A.e([],j)),new A.a69(null,-2147483647,null,B.e,new A.e([],i),new A.e([],j)),new A.a6a(null,-2147483647,null,B.e,new A.e([],i),new A.e([],j))],t.is) +j=q.k4.at.gaU().a[0] +i=q.k4.at.gaU().a[1] +n=new A.a(new Float64Array(2)) +n.p(j/2-210,i-50) +n=A.aJ7("Level 1",new A.aJ8(q,o),n) +i=q.k4.at.gaU().a[0] +j=q.k4.at.gaU().a[1] +m=new A.a(new Float64Array(2)) +m.p(i/2-70,j-50) +m=A.aJ7("Level 2",new A.aJ9(q,o),m) +j=q.k4.at.gaU().a[0] +i=q.k4.at.gaU().a[1] +l=new A.a(new Float64Array(2)) +l.p(j/2+70,i-50) +l=A.aJ7("Level 3",new A.aJa(q,o),l) +i=q.k4.at.gaU().a[0] +j=q.k4.at.gaU().a[1] +k=new A.a(new Float64Array(2)) +k.p(i/2+210,j-50) +p.I(0,A.b([n,m,l,A.aJ7("Resettable",new A.aJb(q),k)],t.W)) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.aJ8.prototype={ +$0(){var s=this.b[0] +this.a.sNm(s) +return s}, +$S:0} +A.aJ9.prototype={ +$0(){var s=this.b[1] +this.a.sNm(s) +return s}, +$S:0} +A.aJa.prototype={ +$0(){var s=this.b[2] +this.a.sNm(s) +return s}, +$S:0} +A.aJb.prototype={ +$0(){var s=A.bpg() +this.a.sNm(s) +return s}, +$S:0} +A.aas.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=A.i9(null,null,null,null,t.J) +o=new A.a(new Float64Array(2)) +o.ag(3) +p.J(A.Rh(o,A.dr(!0,0,B.z,1,!0,null,null,null,0),null,null)) +q.J(p) +p=q.gaC().R +p===$&&A.c() +p.sd7(0,"Resettable") +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.a68.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.J(A.i9(null,null,null,null,t.J)) +p=q.gaC().R +p===$&&A.c() +p.sd7(0,"Level 1") +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.a69.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=new A.a(new Float64Array(2)) +o.p(-100,0) +p=t.J +q.J(A.i9(null,o,null,null,p)) +o=new A.a(new Float64Array(2)) +o.p(100,0) +q.J(A.i9(null,o,null,null,p)) +p=q.gaC().R +p===$&&A.c() +p.sd7(0,"Level 2") +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.a6a.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=new A.a(new Float64Array(2)) +o.p(-100,-50) +p=t.J +q.J(A.i9(null,o,null,null,p)) +o=new A.a(new Float64Array(2)) +o.p(100,-50) +q.J(A.i9(null,o,null,null,p)) +o=new A.a(new Float64Array(2)) +o.p(0,50) +q.J(A.i9(null,o,null,null,p)) +p=q.gaC().R +p===$&&A.c() +p.sd7(0,"Level 3") +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.rF.prototype={ +cb(a){this.J(A.i9(null,B.b.ga_(a.c),null,null,t.J))}} +A.A_.prototype={} +A.a06.prototype={ +aX(){this.aq_() +this.sC(0,this.z6$.ax)}, +b4(a){var s,r,q=this,p=q.k4 +if(p===$){s=q.ax.a +r=A.jS(new A.A(0,0,0+s[0],0+s[1]),B.r8) +p!==$&&A.N() +q.k4=r +p=r}a.dm(p,q.ok)}} +A.U2.prototype={ +aX(){var s,r,q=this +if(q.z6$==null){s=q.e +for(r=t.L6;s!=null;)if(r.b(s)){r=s.z6$ +r.toString +q.z6$=r +break}else if(s instanceof A.A_){q.z6$=s +break}else s=s.gbs(s)}q.cD()}, +h3(){this.p7() +this.z6$=null}} +A.akU.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.akV.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.bby.prototype={ +$1(a){var s=null,r=A.bpg(),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +q=new A.jK(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +q.aT(s,s,r,t.i) +return A.aO(q,s,s,s,s,t.F1)}, +$S:313} +A.bbz.prototype={ +$1(a){var s=null,r=A.j2(600,s,400,s),q=t.s,p=t.g,o=new A.aqG(-2147483647,s,B.e,new A.e([],q),new A.e([],p)),n=$.aC(),m=$.aL(),l=A.b([],t.u),k=A.aP(A.aQ(),t.y) +q=new A.mD(o,r,n,m,B.m,l,k,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],q),new A.e([],p)) +q.aT(r,s,o,t.i) +return A.aO(q,s,s,s,s,t.AF)}, +$S:314} +A.a8S.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=A.cO(q.en(0),t.H) +s=2 +return A.x(p,$async$n) +case 2:s=3 +return A.x(A.I3("svgs/happy_player.svg",q.gaC().db$),$async$n) +case 3:q.sOQ(c) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s,r,q,p=this +p.le(0,b) +s=p.K +if(s!=null){r=p.at.d +q=s.Y(0,r) +if(Math.sqrt(q.gd2())<2)p.K=null +else{r.a7(r.X(0,q.LQ().a2(0,200).a2(0,b))) +r.D()}}}} +A.a_q.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=A.cO(q.en(0),t.H) +s=2 +return A.x(p,$async$n) +case 2:s=3 +return A.x(A.I3("svgs/checkerboard.svg",q.gaC().db$),$async$n) +case 3:q.sOQ(c) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.a_y.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=A.cO(q.en(0),t.H) +s=2 +return A.x(o,$async$n) +case 2:p=B.O.wc()?"red":"green" +s=3 +return A.x(A.I3("svgs/"+p+"_balloons.svg",q.gaC().db$),$async$n) +case 3:q.sOQ(c) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.mD.prototype={} +A.aqG.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:j=A.cO(q.en(0),t.H) +s=2 +return A.x(j,$async$n) +case 2:j=new A.a(new Float64Array(2)) +j.p(106,146) +p=B.t.aW() +o=A.ar() +n=$.aa() +m=new A.aJ(n,new Float64Array(2)) +m.a7(j) +m.D() +l=t.s +k=t.g +p=new A.a8S(null,null,$,p,null,o,m,B.j,0,3,null,B.e,new A.e([],l),new A.e([],k)) +p.b0(B.j,null,null,null,0,null,3,null,j) +p.OV(B.j,null,null,null,null,null,3,null,j,null) +q.go=p +q.J(p) +j=new A.a(new Float64Array(2)) +j.p(745,415) +p=B.t.aW() +o=A.ar() +n=new A.aJ(n,new Float64Array(2)) +n.a7(j) +n.D() +p=new A.a_q(null,null,$,p,null,o,n,B.j,0,1,null,B.e,new A.e([],l),new A.e([],k)) +p.b0(B.j,null,null,null,0,null,1,null,j) +p.OV(B.j,null,null,null,null,null,1,null,j,null) +q.J(p) +j=new A.a(new Float64Array(2)) +j.p(-10,-20) +j=A.KV(j) +p=new A.a(new Float64Array(2)) +p.p(-100,-150) +p=A.KV(p) +o=new A.a(new Float64Array(2)) +o.p(-200,-140) +o=A.KV(o) +n=new A.a(new Float64Array(2)) +n.p(100,130) +n=A.KV(n) +m=new A.a(new Float64Array(2)) +m.p(50,-130) +q.I(0,A.b([j,p,o,n,A.KV(m)],t.W)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +iX(a){var s=this.go +s===$&&A.c() +s.K=B.b.ga_(a.c)}, +wg(a){var s=A.KV(null),r=s.at.d +r.a7(B.b.ga_(a.c)) +r.D() +this.J(s)}} +A.afD.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.afJ.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.amT.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.Z3.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.aue.prototype={ +aX(){var s,r +this.asc() +s=this.cC() +if(s.cl(B.cB,t.F)==null){r=A.a2L() +s.gc8().u(0,B.cB,r) +s.J(r)}}} +A.rU.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=new A.a(new Float64Array(2)) +o.ag(48) +n=A +s=2 +return A.x(A.kK("animations/chopper.png",A.kJ(4,null,!0,0.15,o),q.cy$),$async$n) +case 2:o=n.mB(null,null,c,null,null,null,0,null,!0,null,null,!1,null,null) +p=o.at.d +p.dT(0,q.k4.at.gaU().a[1]/2) +p.D() +p.eX(0,100) +p.D() +o.ay=B.j +o.i3() +p=new A.a(new Float64Array(2)) +p.ag(100) +o.sC(0,p) +q.J(o) +return A.p(null,r)}}) +return A.q($async$n,r)}, +h4(){var s=this,r="PauseMenu" +if(B.b.G(s.gnr().b,r)){s.gnr().P(0,r) +s.p2=!1 +s.Ox()}else{s.gnr().E(0,r) +s.p2=!1 +s.Ow()}}} +A.amt.prototype={} +A.w_.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=new A.a(new Float64Array(2)) +o.ag(48) +n=A +s=2 +return A.x(A.kK("animations/chopper.png",A.kJ(4,null,!0,0.15,o),q.cy$),$async$n) +case 2:o=n.mB(null,null,c,null,null,null,0,null,!0,null,null,!1,null,null) +p=o.at.d +p.a7(q.k4.at.gaU().b1(0,2)) +p.D() +o.ay=B.j +o.i3() +p=new A.a(new Float64Array(2)) +p.ag(100) +o.sC(0,p) +q.J(o) +return A.p(null,r)}}) +return A.q($async$n,r)}, +h4(){var s=this +if(s.id$){s.p2=!1 +s.Ox()}else{s.p2=!1 +s.Ow()}}, +wf(){this.sYF(0,!this.id$)}} +A.amC.prototype={} +A.amD.prototype={} +A.BW.prototype={ +mV(a){return B.mW}, +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(A.eU("Car.png",null,null,null),$async$n) +case 2:n=c +m=$.bjo().a +l=m[1] +k=new A.a(new Float64Array(2)) +k.p(0,l/3) +l=t.W +p=A.hy(B.j,-0.3141592653589793,null,A.b([A.hl(null,B.H,null,null)],l),null,0,null,k,null,null,null,n) +k=A.ab(q.avz(),!0,t.F) +k.push(A.boL(null,null,A.b([p,q.S],l),null,0,null,null,null,null)) +o=A.bm(k,null,-2147483647) +k=m[0] +s=3 +return A.x(q.I(0,A.b([o,A.j2(m[1],A.b([q.gPP()],l),k,o)],l)),$async$n) +case 3:return A.p(null,r)}}) +return A.q($async$n,r)}, +jZ(a,b){var s,r,q,p=this,o="P: Pause/Unpause\nS: Step x",n="\nUp: Increase step\nDown: Decrease step" +if(b.G(0,B.oq))p.sYF(0,!p.id$) +else if(b.G(0,B.bU)){s=p.R +if(p.id$){p.id$=!1 +r=p.fr$ +if(r!=null){r=r.K +if(r!=null){q=r.c +q===$&&A.c() +if(q.a==null)r.a.$1(0.016666666666666666*s)}}p.id$=!0}}else if(b.G(0,B.bv)){++p.R +p.gPP().sd7(0,o+p.R+n)}else if(b.G(0,B.bJ)){--p.R +p.gPP().sd7(0,o+p.R+n)}return p.anH(a,b)}, +avz(){var s,r,q,p,o,n,m,l,k=null,j=t.W,i=A.b([],j),h=$.bjo().a[1],g=new A.a(new Float64Array(2)) +g.p(0,-h/2.5) +for(h=t.s,s=t.g,r=0;r<12;++r){A.ae9(g,0.5235987755982988,k) +q=A.b([A.hl(k,B.H,k,k)],j) +p=new Float64Array(2) +o=new Float64Array(2) +n=new A.a(o) +o[0]=10 +o[1]=10 +o=$.G().B() +o.sA(0,B.l) +m=A.ar() +l=$.aa() +l=new A.aJ(l,new Float64Array(2)) +l.a7(n) +l.D() +p=new A.ahN(k,k,k,k,new A.a(p),$,o,k,m,l,B.j,0,0,k,B.e,new A.e([],h),new A.e([],s)) +p.I(0,q) +p.b0(B.j,k,q,k,0,g,k,k,n) +q=p.S$ +p.S$=q +i.push(p)}return i}, +gPP(){var s,r=this,q=null,p=r.aa +if(p===$){s=A.bKX(q,q,q,q,q,q,q,q,q,q,q,q,"P: Pause/Unpause\nS: Step x"+r.R+"\nUp: Increase step\nDown: Decrease step",A.dW(A.ep(q,q,B.l,q,q,q,q,q,q,q,q,20,q,q,q,q,q,!0,q,q,q,q,q,B.kh,q,q),B.r),t.Z0) +r.aa!==$&&A.N() +r.aa=s +p=s}return p}, +$ifB:1} +A.ahN.prototype={ +ic(a,b){this.S$.sA(0,B.q) +this.lc(a,b)}, +kA(a){this.S$.sA(0,B.l) +this.AQ(a)}} +A.aqp.prototype={ +a8(a,b){this.fO(0,b) +this.dq$.fZ()}} +A.aqq.prototype={} +A.atm.prototype={} +A.bbA.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.w_(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.jT)}, +$S:315} +A.bbB.prototype={ +$1(a){var s=null,r=new A.a(new Float64Array(2)) +r.p(0,0) +return A.aO(new A.AB(B.a5n,r,$.aC(),$.aL(),B.m,A.b([],t.u)),s,s,s,s,t.JU)}, +$S:316} +A.bbC.prototype={ +$1(a){var s=null,r=A.wk(6.283185307179586,new A.m6(new A.wy(new A.pB(1),1)),s,s),q=A.kN(s,t.rR),p=A.bm(s,s,-2147483647),o=A.aU(s,s,s,s,s,s),n=$.aC(),m=$.aL(),l=A.b([],t.u),k=A.aP(A.aQ(),t.y) +r=new A.BW(r,q,p,o,n,m,B.m,l,k,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.nB)}, +$S:317} +A.AB.prototype={ +a8(a,b){var s=this.b.a2(0,200*b).a +this.a=this.a.aJ(0,s[0],s[1])}, +b4(a){a.b7(this.a,$.bwQ())}, +jZ(a,b){var s=this,r=a instanceof A.iL,q=a.b +if(q.k(0,B.bq)){q=r?-1:0 +s.b.sN(0,q)}else if(q.k(0,B.bI)){q=r?1:0 +s.b.sN(0,q)}else if(q.k(0,B.bV)){q=r?-1:0 +s.b.sO(0,q)}else if(q.k(0,B.bU)){q=r?1:0 +s.b.sO(0,q)}return s.Oz(a,b)}} +A.am1.prototype={} +A.za.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=new A.a(new Float64Array(2)) +p.ag(32) +s=2 +return A.x(A.aWa("dungeon.tmx",p),$async$n) +case 2:p=c +q.R!==$&&A.aj() +q.R=p +q.J(p) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.bbD.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.za(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.wL)}, +$S:318} +A.wL.prototype={ +h4(){var s=this.R +if(s!=null)s.eb() +s=A.bpe(1,150) +this.R=s +this.J(s)}, +wf(){var s=this.S +if(s!=null)s.eb() +s=A.bpe(5,180) +this.S=s +this.J(s)}} +A.aan.prototype={ +b4(a){var s,r=this.at +r===$&&A.c() +r=B.c.b8(r.d,3) +s=new A.a(new Float64Array(2)) +s.p(30,this.k3) +this.k2.jm("Elapsed time: "+r).nC(a,s,B.o)}} +A.arw.prototype={} +A.arx.prototype={} +A.Ck.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.S=new A.wK(5,null,!1,!0) +q.aa=new A.wK(1,new A.aWt(q),!0,!0) +return A.p(null,r)}}) +return A.q($async$n,r)}, +cb(a){var s=this.S +s===$&&A.c() +s.d=0 +s.e=!0}, +a8(a,b){var s +this.fO(0,b) +s=this.S +s===$&&A.c() +s.a8(0,b) +s=this.aa +s===$&&A.c() +s.a8(0,b)}, +b4(a){var s,r,q,p=this +p.lR(a) +s=p.R +r=p.S +r===$&&A.c() +r=B.c.Zv(r.d,3) +q=new A.a(new Float64Array(2)) +q.p(30,100) +s.jm("Countdown: "+r).nC(a,q,B.o) +q=p.bp +r=new A.a(new Float64Array(2)) +r.p(30,130) +s.jm("Elapsed time: "+q).nC(a,r,B.o)}} +A.aWt.prototype={ +$0(){return++this.a.bp}, +$S:0} +A.ary.prototype={} +A.bbE.prototype={ +$1(a){var s=null,r=A.dW(B.H3,B.r),q=A.bm(s,s,-2147483647),p=A.aU(s,s,s,s,s,s),o=$.aC(),n=$.aL(),m=A.b([],t.u),l=A.aP(A.aQ(),t.y) +r=new A.Ck(r,q,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.cO)}, +$S:319} +A.bbF.prototype={ +$1(a){var s=null,r=A.bm(s,s,-2147483647),q=A.aU(s,s,s,s,s,s),p=$.aC(),o=$.aL(),n=A.b([],t.u),m=A.aP(A.aQ(),t.y) +r=new A.wL(r,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.aO(r,s,s,s,s,t.gq)}, +$S:320} +A.uP.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=A.ar() +o=new A.a(new Float64Array(2)) +n=$.aa() +n=new A.aJ(n,new Float64Array(2)) +n.a7(o) +n.D() +p=new A.a8R(null,null,p,n,B.o,0,0,null,B.e,new A.e([],t.s),new A.e([],t.g)) +p.b0(null,null,null,null,0,null,null,null,null) +q.J(p) +return A.p(null,r)}}) +return A.q($async$n,r)}, +h4(){var s="Smiley" +if(B.b.G(this.gnr().b,s))this.gnr().P(0,s) +else this.gnr().E(0,s)}} +A.bc0.prototype={ +$2(a,b){var s=null +return A.l8(A.dD(s,A.hm(A.b([B.aeV,B.a8v,A.fF(A.ew(s,s,s,A.boG(),B.x),132,132)],t.p),B.ah,B.ac,B.ak),B.y,B.B,s,s,200,s,s,200),s,s)}, +$S:321} +A.a8W.prototype={ +gadM(){var s,r=this.c +if(r===$){s=$.G().B() +s.sA(0,B.q) +this.c!==$&&A.N() +this.c=s +r=s}return r}, +aO(a,b){var s,r,q,p,o=this,n=b.b/2,m=o.b +if(m===$){s=$.G().B() +s.sA(0,B.fq) +o.b!==$&&A.N() +o.b=s +m=s}a.cs(new A.i(n,n),n,m) +r=n*0.15 +q=r*2 +p=n-r +a.cs(new A.i(n-q,p),r,o.gadM()) +a.cs(new A.i(n+q,p),r,o.gadM())}, +cF(a){return!1}} +A.a8R.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.k4=A.boG() +p=new A.a(new Float64Array(2)) +p.ag(100) +q.sC(0,p) +p=q.at.d +p.dT(0,200) +p.D() +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s,r,q=this +q.le(0,b) +s=q.at.d +r=s.a +s.eX(0,r[0]+150*q.ah*b) +s.D() +if(!(r[0]+q.ax.a[0]>=q.gaC().k4.at.gaU().a[0]&&q.ah>0))s=r[0]<=0&&q.ah<0 +else s=!0 +if(s)q.ah*=-1}} +A.aht.prototype={} +A.amN.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.bbH.prototype={ +$1(a){return a.gfX(0)}, +$S:156} +A.bbG.prototype={ +$1(a){return a.gfX(0)}, +$S:156} +A.bd6.prototype={ +$0(){}, +$S:0} +A.bbI.prototype={ +$1(a){return a.gfX(0)}, +$S:156} +A.aHV.prototype={ +W(){return"Interp."+this.b}} +A.PP.prototype={ +alF(a,b,c){var s,r,q,p,o,n,m,l,k=B.c.bK(b),j=B.c.bK(c),i=k+1,h=j+1 +switch(2){case 2:s=A.bmg(b-k) +r=A.bmg(c-j) +break}q=b-k +p=c-j +o=q-1 +n=p-1 +m=A.bck(a,k,j,q,p) +m+=s*(A.bck(a,i,j,o,p)-m) +l=A.bck(a,k,h,q,n) +return m+r*(l+s*(A.bck(a,i,h,o,n)-l)-m)}} +A.ob.prototype={} +A.kr.prototype={ +IM(a){if(a instanceof A.kr)return a.a +else if(A.cU(a))return a +throw A.d(A.hH(a,"other","Not an int, Int32 or Int64"))}, +X(a,b){var s +if(b instanceof A.iJ)return A.rB(this.a).X(0,b) +s=this.a+this.IM(b) +return new A.kr((s&2147483647)-((s&2147483648)>>>0))}, +Y(a,b){var s +if(b instanceof A.iJ)return A.rB(this.a).Y(0,b) +s=this.a-this.IM(b) +return new A.kr((s&2147483647)-((s&2147483648)>>>0))}, +a2(a,b){return A.rB(this.a).a2(0,b).air()}, +pa(a,b){var s +if(b instanceof A.iJ)return A.rB(this.a).pa(0,b).air() +s=this.a^this.IM(b) +return new A.kr((s&2147483647)-((s&2147483648)>>>0))}, +AE(a,b){var s,r +if(b>=32)return this.a<0?B.Ws:B.Wr +s=this.a +r=s>=0?B.f.dU(s,b):B.f.dU(s,b)|B.f.nT(4294967295,32-b) +return new A.kr((r&2147483647)-((r&2147483648)>>>0))}, +k(a,b){if(b==null)return!1 +if(b instanceof A.kr)return this.a===b.a +else if(b instanceof A.iJ)return A.rB(this.a).k(0,b) +else if(A.cU(b))return this.a===b +return!1}, +cK(a,b){if(b instanceof A.iJ)return A.rB(this.a).a35(b) +return B.f.cK(this.a,this.IM(b))}, +gL(a){return this.a}, +aw(a){return this.a}, +j(a){return B.f.j(this.a)}, +$idC:1} +A.iJ.prototype={ +X(a,b){var s=A.a5s(b),r=this.a+s.a,q=this.b+s.b+(r>>>22) +return new A.iJ(r&4194303,q&4194303,this.c+s.c+(q>>>22)&1048575)}, +Y(a,b){var s=A.a5s(b) +return A.bne(this.a,this.b,this.c,s.a,s.b,s.c)}, +a2(a1,a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=A.a5s(a2),d=this.a,c=d&8191,b=this.b,a=d>>>13|(b&15)<<9,a0=b>>>4&8191 +d=this.c +s=b>>>17|(d&255)<<5 +b=e.a +r=b&8191 +q=e.b +p=b>>>13|(q&15)<<9 +o=q>>>4&8191 +b=e.c +n=q>>>17|(b&255)<<5 +m=b>>>8&4095 +l=c*r +k=a*r +j=a0*r +i=s*r +h=(d>>>8&4095)*r +if(p!==0){k+=c*p +j+=a*p +i+=a0*p +h+=s*p}if(o!==0){j+=c*o +i+=a*o +h+=a0*o}if(n!==0){i+=c*n +h+=a*n}if(m!==0)h+=c*m +g=(l&4194303)+((k&511)<<13) +f=(l>>>22)+(k>>>9)+((j&262143)<<4)+((i&31)<<17)+(g>>>22) +return new A.iJ(g&4194303,f&4194303,(j>>>18)+(i>>>5)+((h&4095)<<8)+(f>>>22)&1048575)}, +pa(a,b){var s=A.a5s(b) +return new A.iJ((this.a^s.a)&4194303,(this.b^s.b)&4194303,(this.c^s.c)&1048575)}, +AE(a,b){var s,r,q,p,o,n,m,l=this,k=1048575,j=4194303 +if(b>=64)return(l.c&524288)!==0?B.Wu:B.Wt +s=l.c +r=(s&524288)!==0 +if(r)s+=3145728 +if(b<22){q=A.O0(s,b) +if(r)q|=~B.f.y8(k,b)&1048575 +p=l.b +o=22-b +n=A.O0(p,b)|B.f.nT(s,o) +m=A.O0(l.a,b)|B.f.nT(p,o)}else if(b<44){q=r?k:0 +p=b-22 +n=A.O0(s,p) +if(r)n|=~B.f.Iv(j,p)&4194303 +m=A.O0(l.b,p)|B.f.nT(s,44-b)}else{q=r?k:0 +n=r?j:0 +p=b-44 +m=A.O0(s,p) +if(r)m|=~B.f.Iv(j,p)&4194303}return new A.iJ(m&4194303,n&4194303,q&1048575)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(b instanceof A.iJ)s=b +else if(A.cU(b)){if(r.c===0&&r.b===0)return r.a===b +if((b&4194303)===b)return!1 +s=A.rB(b)}else s=b instanceof A.kr?A.rB(b.a):null +if(s!=null)return r.a===s.a&&r.b===s.b&&r.c===s.c +return!1}, +cK(a,b){return this.a35(b)}, +a35(a){var s=A.a5s(a),r=this.c,q=r>>>19,p=s.c +if(q!==p>>>19)return q===0?1:-1 +if(r>p)return 1 +else if(rp)return 1 +else if(rp)return 1 +else if(r>>10&4095))>>>0}, +aw(a){var s=this.a,r=this.b,q=this.c +if((q&524288)!==0)return-(1+(~s&4194303)+4194304*(~r&4194303)+17592186044416*(~q&1048575)) +else return s+4194304*r+17592186044416*q}, +air(){var s=(this.b&1023)<<22|this.a +return new A.kr((s&2147483647)-((s&2147483648)>>>0))}, +j(a){var s,r,q,p=this.a,o=this.b,n=this.c +if((n&524288)!==0){p=0-p +s=p&4194303 +o=0-o-(B.f.dU(p,22)&1) +r=o&4194303 +n=0-n-(B.f.dU(o,22)&1)&1048575 +o=r +p=s +q="-"}else q="" +return A.bG1(10,p,o,n,q)}, +$idC:1} +A.fn.prototype={ +rD(a,b,c){var s +if(this.k(0,b))return a +else{s=new A.a(new Float64Array(2)) +s.p(b.a-this.a,b.b-this.b) +s.bL(0,c) +s.E(0,a) +return s}}, +gfX(a){var s=$.bdg().i(0,this) +return s==null?"Anchor("+A.j(this.a)+", "+A.j(this.b)+")":s}, +j(a){return this.gfX(0)}, +k(a,b){if(b==null)return!1 +return b instanceof A.fn&&this.a===b.a&&this.b===b.b}, +gL(a){return B.c.gL(this.a)*31+B.c.gL(this.b)}} +A.aw6.prototype={ +$1(a){return J.f(a.b,this.a)}, +$S:323} +A.awx.prototype={ +Fc(a){return this.aYh(a)}, +aYh(a){var s=0,r=A.r(t.N),q,p=this,o,n,m +var $async$Fc=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=p.c +s=!o.aR(0,a)?3:4 +break +case 3:n=o +m=a +s=5 +return A.x(p.I5(a),$async$Fc) +case 5:n.u(0,m,c) +case 4:q=o.i(0,a).a +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Fc,r)}, +MC(a){return this.aYk(a)}, +aYk(a){var s=0,r=A.r(t.a),q,p=this,o,n +var $async$MC=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=t.a +n=B.db +s=3 +return A.x(p.Fc(a),$async$MC) +case 3:q=o.a(n.acS(0,c,null)) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$MC,r)}, +I5(a){return this.aFY(a)}, +aFY(a){var s=0,r=A.r(t.gX),q,p=this,o +var $async$I5=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=A +s=3 +return A.x(p.a.zx("assets/"+a),$async$I5) +case 3:q=new o.XF(c) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$I5,r)}} +A.IT.prototype={} +A.XF.prototype={} +A.aHr.prototype={ +d_(a,b){var s=this.a,r=s.i(0,b) +if(r==null){r=A.bho(this.Hn(b)) +s.u(0,b,r) +s=r}else s=r +return s.Zd()}, +Hn(a){return this.axf(a)}, +axf(a){var s=0,r=A.r(t.lu),q,p=this,o,n,m +var $async$Hn=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=A +n=J +m=J +s=3 +return A.x(p.b.d_(0,"assets/images/"+a),$async$Hn) +case 3:q=o.Kh(n.iZ(m.nU(c),0,null)) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Hn,r)}} +A.Vq.prototype={ +at2(a){this.b.cu(new A.b2H(this),t.P)}, +Zd(){var s=this.b +return s==null?A.e5(this.a,t.lu):s}, +t(){var s=this,r=s.a +if(r!=null){r.t() +s.a=null}r=s.b +if(r!=null){r.cu(new A.b2I(),t.H) +s.b=null}}} +A.b2H.prototype={ +$1(a){var s=this.a +s.a=a +s.b=null}, +$S:208} +A.b2I.prototype={ +$1(a){return a.t()}, +$S:325} +A.G7.prototype={ +O4(a,b){var s,r,q=this.a,p=q.aR(0,a) +q.u(0,a,b) +if(!p)for(s=A.w(q).h("bk<1>");q.a>10;){r=new A.bk(q,s).gar(0) +if(!r.H())A.X(A.cy()) +q.P(0,r.ga1(0))}}} +A.e.prototype={ +aU3(a){var s,r +if(this.a==null)return!1 +for(s=0;r=this.b,so)r.au(0,o/q) +o=r.a +if(o[0]!==0||o[1]!==0){o=p.ax +r.E(0,o.gbe(o)) +o.sbe(0,r)}}} +A.y9.prototype={ +k6(a){var s,r,q,p=this +a.bU(0) +s=p.at +r=s.ch.a +a.aJ(0,r[0]-s.CW.a*s.gC(0).a[0],r[1]-s.CW.b*s.gC(0).a[1]) +r=p.ay +r=r==null?null:(r.a&4)!==0 +if(r===!0&&$.o_.length<4){a.bU(0) +s.JC(0,a) +s.Zy(a) +p.ch.k6(a) +a.bU(0) +try{$.o_.push(p) +r=p.ax +a.az(0,r.at.gA5().a) +q=p.ay +q.toString +q.Oo(a) +r.k6(a)}finally{$.o_.pop()}a.bw(0) +s.k6(a) +a.bw(0)}a.bw(0)}, +e5(a){return this.ax.at.kd(this.at.kd(a,null),null)}, +CU(a,b,c,d){return new A.eW(this.aO0(a,b,c,d),t.jj)}, +vr(a,b,c,d){return this.CU(a,b,c,d,t.z)}, +aO0(a,b,c,d){var s=this +return function(){var r=a,q=b,p=c,o=d +var n=0,m=2,l,k,j,i,h +return function $async$CU(e,f,g){if(f===1){l=g +n=m}while(true)switch(n){case 0:i=s.at +h=p.$2(i,r) +if(h==null){n=1 +break}n=3 +return e.vd(i.vr(h,q,p,o)) +case 3:k=s.ay +k=k==null?null:(k.a&4)!==0 +n=k===!0&&$.o_.length<4?4:5 +break +case 4:n=o.$2(i,h)?6:7 +break +case 6:$.o_.push(s) +i=s.ax +j=p.$2(i,h) +if(j==null){n=1 +break}n=8 +return e.vd(i.vr(j,q,p,o)) +case 8:n=9 +return e.vd(s.ay.vr(j,q,p,o)) +case 9:$.o_.pop() +case 7:case 5:case 1:return 0 +case 2:return e.c=l,3}}}}, +WM(a,b,c){var s +this.dM(0) +s=this.ax +s.J(new A.Nd(a,s,c,b,!1,0,null,B.e,new A.e([],t.s),new A.e([],t.g)))}, +aed(a){return this.WM(a,!1,1/0)}, +aRN(a,b){return this.WM(a,b,1/0)}, +aee(a,b){return this.WM(a,!1,b)}, +dM(a){var s=this.ax.gbQ(0) +B.b.al(A.ab(s,!0,A.w(s).h("z.E")),new A.ayd())}, +a_Y(a){var s,r=this.ax,q=A.aI2(new A.ca(r.gbQ(0),t.aF)),p=A.aI2(new A.ca(r.gbQ(0),t.Oo)) +if(q==null){s=new Float64Array(2) +r.J(new A.L7(a,new A.a(s),1000,null,B.e,new A.e([],t.s),new A.e([],t.g)))}else q.soa(0,a) +if(p!=null)p.eb()}} +A.ayd.prototype={ +$1(a){if(a instanceof A.Nd||a instanceof A.OZ)a.eb()}, +$S:42} +A.ael.prototype={ +gbe(a){return this.at.f.fv(0)}, +sbe(a,b){var s=this.at.f +s.a7(b.fv(0)) +s.D() +this.dx=null}, +gko(a){return-this.at.c}, +sko(a,b){var s=this.at +s.c=-b +s.b=!0 +s.D() +this.dx=null}, +gun(){var s,r,q,p,o,n,m,l,k,j=this,i=j.dx +if(i==null){i=j.e +i.toString +s=t.O1.a(i).at.gaU() +r=j.at +i=j.CW +r.kd(j.ch,i) +q=j.cx +r.kd(s,q) +i=i.a +p=i[0] +q=q.a +o=q[0] +n=Math.min(p,o) +i=i[1] +q=q[1] +m=Math.min(i,q) +l=Math.max(p,o) +k=Math.max(i,q) +if(-r.c!==0){i=j.cy +q=s.a +i.p(q[0],0) +p=j.db +p.p(0,q[1]) +r.kd(i,i) +r.kd(p,p) +i=i.a +q=i[0] +p=p.a +o=p[0] +n=Math.min(n,Math.min(q,o)) +i=i[1] +p=p[1] +m=Math.min(m,Math.min(i,p)) +l=Math.max(l,Math.max(q,o)) +k=Math.max(k,Math.max(i,p))}i=j.dx=new A.A(n,m,l,k)}return i}, +IW(){var s,r,q,p=this +if(p.ay!=null){s=p.e +s.toString +s=t.O1.a(s).at.gC(0).a +r=s[0] +q=p.ay.a +q=Math.min(r/q[0],s[1]/q[1]) +s=new A.a(new Float64Array(2)) +s.ag(q) +q=p.at.e +q.a7(s) +q.D() +p.dx=null}}, +wn(a){return this.at.kd(a,null)}, +fI(a){this.IW() +this.ld(a)}, +jr(){var s,r=this,q=r.e +if(q!=null){s=r.at.d +q=t.O1.a(q).at.gaU().a +s.eX(0,q[0]*r.ax.a) +s.D() +s.dT(0,q[1]*r.ax.b) +s.D() +r.dx=null}}, +n(a){this.IW() +this.jr()}, +aX(){this.cD() +this.IW() +this.jr()}, +giE(a){return this.at.e}, +siE(a,b){var s=this.at.e +s.a7(b) +s.D() +this.dx=null}, +$ia8:1, +$iax:1, +$iaH:1, +$iao:1, +$iaG:1} +A.lD.prototype={ +gbe(a){return this.ch}, +sbe(a,b){this.ch.v(b)}, +gC(a){var s,r=this +if(!r.ax){s=r.e +s.toString +s=t.O1.a(s).e instanceof A.ae}else s=!1 +if(s){s=r.e +s.toString +s=t.O1.a(s).e +s.toString +s=t.J.a(s).fx$ +s.toString +r.fI(s)}return r.at}, +gaU(){return this.gC(0)}, +sC(a,b){var s,r=this +r.at.v(b) +r.ax=!0 +s=r.e +if(s!=null)t.O1.a(s).ax.jr() +r.jr() +if(r.gE2())r.gbQ(0).al(0,new A.aXr(r))}, +kd(a,b){var s,r,q,p=this,o=a.a,n=o[0],m=p.ch.a,l=m[0],k=p.CW,j=p.gC(0).a[0] +o=o[1] +m=m[1] +s=p.CW +r=p.gC(0).a[1] +q=new A.a(new Float64Array(2)) +q.p(n-l+k.a*j,o-m+s.b*r) +o=q +return o}, +e5(a){return this.kd(a,null)}, +ro(a,b){var s,r,q,p=this,o=a.a,n=o[0],m=p.ch.a,l=m[0],k=p.CW,j=p.gC(0).a[0] +o=o[1] +m=m[1] +s=p.CW +r=p.gC(0).a[1] +q=new A.a(new Float64Array(2)) +q.p(n+l-k.a*j,o+m-s.b*r) +o=q +return o}, +wn(a){return this.e5(a)}, +Zy(a){a.az(0,this.ay.gA5().a)}, +$ia8:1, +$iax:1, +$iP:1, +$iaE:1} +A.aXr.prototype={ +$1(a){return a.EP(this.a.at)}, +$S:42} +A.a0A.prototype={ +JC(a,b){return b.CQ(0,this.k4,!1)}, +jh(a){var s=a.a,r=s[0]/this.ok-1,q=s[1]/this.p1-1 +return r*r+q*q<=1}, +jr(){var s,r=this +r.ok=r.gC(0).a[0]/2 +r.p1=r.gC(0).a[1]/2 +s=$.G().Z() +s.hq(new A.A(0,0,r.gC(0).a[0],r.gC(0).a[1])) +r.k4=s}, +uf(a){a.a3(this.k4,this.gn0())}} +A.N_.prototype={ +n(a){var s=this.bo().fx$ +s.toString +this.a5j(s)}, +fI(a){if((this.a&2)!==0)this.ld(a) +this.a5j(a)}, +a5j(a){var s,r=this,q=a.a,p=q[0],o=q[1] +q=r.k4 +s=o*q +if(s>p){s=new A.a(new Float64Array(2)) +s.p(p,p/q) +q=s}else{q=new A.a(new Float64Array(2)) +q.p(s,o)}r.sC(0,q) +q=r.ch +q.sN(0,(p-r.gC(0).a[0])/2+r.CW.a*r.gC(0).a[0]) +q.sO(0,(o-r.gC(0).a[1])/2+r.CW.b*r.gC(0).a[1]) +r.ok=new A.A(0,0,r.gC(0).a[0],r.gC(0).a[1])}, +JC(a,b){return b.JE(this.ok,!1)}, +jh(a){var s=a.a,r=s[0],q=s[1] +return r>=0&&q>=0&&r<=this.gC(0).a[0]&&q<=this.gC(0).a[1]}, +jr(){var s,r,q=this,p=q.k4,o=q.gC(0).a[1]*p +if(o>q.gC(0).a[0])q.gC(0).sO(0,q.gC(0).a[0]/p) +else q.gC(0).sN(0,o) +s=q.gC(0).a[0]/2 +r=q.gC(0).a[1]/2 +q.ok=new A.A(-s,-r,s,r)}} +A.a3D.prototype={ +gaU(){return this.b_}, +jh(a){var s=a.a,r=s[0],q=s[1] +if(r>=0)if(q>=0){s=this.b_.a +s=r<=s[0]&&q<=s[1]}else s=!1 +else s=!1 +return s}, +jr(){var s,r,q=this +q.anr() +s=q.b_.a +r=q.b6 +s=Math.min(q.gC(0).a[0]/s[0],q.gC(0).a[1]/s[1]) +r.p(s,s) +s=q.ay.e +s.a7(r) +s.D() +s=q.e +s.toString +t.O1.a(s).ax.dx=null}, +kd(a,b){return this.ay.kd(this.apM(a,b),b)}, +e5(a){return this.kd(a,null)}, +ro(a,b){return this.apN(this.ay.ro(a,b),b)}, +Zy(a){var s,r=this +a.aJ(0,r.gC(0).a[0]/2,r.gC(0).a[1]/2) +r.apO(a) +s=r.ay.e.a +a.aJ(0,-(r.gC(0).a[0]/2)/s[0],-(r.gC(0).a[1]/2)/s[1])}} +A.a3G.prototype={ +JC(a,b){var s=this.k4 +s===$&&A.c() +return b.JE(s,!1)}, +jh(a){var s=a.a,r=s[0],q=s[1] +return r>=0&&r<=this.gC(0).a[0]&&q>=0&&q<=this.gC(0).a[1]}, +jr(){this.k4=new A.A(0,0,0+this.gC(0).a[0],0+this.gC(0).a[1])}} +A.a6N.prototype={ +n(a){var s=this.bo().fx$ +s.toString +this.sC(0,s)}, +fI(a){this.sC(0,a) +this.ld(a)}, +JC(a,b){}, +jh(a){return!0}, +jr(){}} +A.a7.prototype={ +k6(a){}, +jh(a){return!0}, +wn(a){return null}, +$ia8:1} +A.fN.prototype={ +fd(a){}} +A.uJ.prototype={} +A.Qb.prototype={ +gF(a){return this.b.length}, +adJ(a,b){var s,r,q +for(s=this.b,r=this.$ti.h("uJ<1>"),q=0;q<1000;++q)s.push(new A.uJ(b,b,(A.eT(b)^A.eT(b))>>>0,r))}, +i(a,b){return this.b[b]}} +A.NG.prototype={ +gJG(){var s=this.DG$ +s===$&&A.c() +return s}, +aVc(a,b){var s,r,q=this.adN$ +if(q!=null){s=a.a +r=b.a +q=!(Math.abs(s[0]-r[0])>q||Math.abs(s[1]-r[1])>q)}else q=!0 +return q}, +aW4(a,b){return a.u2(b)&&b.u2(a)}} +A.B4.prototype={ +gaft(a){return this.a.d.gaiR()}, +ahe(a8){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,a7=a6.r +a7.af(0) +s=a6.w +B.b.af(s) +for(r=a6.b,q=A.w(r),r=new A.k1(r,r.uS(),q.h("k1<1>")),p=a6.d,o=a6.e,n=t.S,m=a6.a,l=m.r,k=m.$ti,j=k.h("v<1>"),q=q.c;r.H();){i=r.d +if(i==null)i=q.a(i) +h=i.a +if((h&8)!==0||(h&4)===0){m.P(0,i) +continue}h=i.hy$?i.iq$:i.kl() +g=new Float64Array(2) +f=new A.a(g) +e=h.a.a +g[1]=e[1] +g[0]=e[0] +f.E(0,h.b) +f.au(0,0.5) +d=l.i(0,i) +c=A.b([],j) +if(d==null)A.X(A.j(d)+" not found") +b=d.d +h=k.h("H<1>") +B.b.I(c,h.a(d.b)) +B.b.I(c,m.a4s(d)) +B.b.I(c,m.a4D(d)) +a=A.b3([b,c],n,h) +for(h=a.ghw(a),h=J.az(h.ga9(h).b);h.H();){g=h.ga1(h) +if(g.mh$.a===B.jd)continue +a0=o.i(0,i) +if(J.f(a0==null?null:a0.i(0,g),!1))continue +a0=g.f0$ +a0===$&&A.c() +a1=i.f0$ +a1===$&&A.c() +a0=a0===a1&&(g.a&4)!==0 +if(a0)continue +if(!p.$2(f,a6.Pg(g)))continue +s.push(i) +s.push(g)}}if(s.length!==0)for(r=t.VC,q=t.w,p=a6.x,n=p.b,a2=0;a2>>0 +a5.c=m +a7.u(0,m,a5)}else{if(o.i(0,a3)==null)o.u(0,a3,A.D(r,q)) +o.i(0,a3).u(0,a4,!1)}}return a7.gbm(0)}, +E(a,b){this.a.E(0,b) +if(b.mh$.a===B.H)this.b.E(0,b) +this.Pg(b)}, +P(a,b){var s,r,q,p,o=this +o.a.P(0,b) +o.f.P(0,b) +if(b.mh$.a===B.H)o.b.P(0,b) +s=o.e +r=s.i(0,b) +if(r!=null){for(q=r.ghw(r),q=q.gar(q);q.H();){p=s.i(0,q.ga1(q).a) +if(p!=null)p.P(0,b)}s.P(0,b)}}, +Pg(a){var s=this.f,r=s.i(0,a) +if(r==null){s.u(0,a,(a.hy$?a.iq$:a.kl()).gbC()) +r=s.i(0,a)}r.toString +return r}} +A.a9r.prototype={ +a4p(a){var s,r,q +if((a.hy$?a.iq$:a.kl()).a.a[0]<0)s=0 +else s=(a.hy$?a.iq$:a.kl()).a.a[0] +if((a.hy$?a.iq$:a.kl()).a.a[1]<0)r=0 +else r=(a.hy$?a.iq$:a.kl()).a.a[1] +q=(a.hy$?a.iq$:a.kl()).b.a +return A.pT(new A.i(s,r),new A.i(q[0],q[1]))}, +a4F(a,b){var s=a.gbC(),r=s.a +if(b.c<=r){r=s.b +if(b.d<=r)return B.I_ +else if(b.b>r)return B.I1 +else return B.h8}else if(b.a>r){r=s.b +if(b.d<=r)return B.I0 +else if(b.b>r)return B.I2 +else return B.h8}else return B.h8}, +E(a,b){var s,r=this,q=r.S1(0,r.d,0,r.c,b,null),p=b.hy$?b.iq$:b.kl(),o=new A.a(new Float64Array(2)) +o.v(p.a) +s=new A.a(new Float64Array(2)) +s.v(p.b) +r.f.u(0,b,new A.mV(o,s)) +r.r.u(0,b,q)}, +S1(a,b,c,d,e,f){var s,r,q,p=this,o=b.a +if(o[0]==null)if(c>=p.b||b.b.length").a(q),c+1,A.bp0(d,r),e,b)}else{b.b.push(e) +s=b}}if(f!=null&&s.c==null)s.c=f +return s}, +aJC(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g=this +for(s=a.a,r=g.$ti,q=r.c,p=0;p<4;++p){o=++g.e +n=A.bp_(q) +n.c=a +n.d=o +s[p]=n}m=A.b([],r.h("v<1>")) +for(r=a.b,o=r.length,n=g.r,l=t.VC,k=0;k")) +for(s=a.a,p=p.h("H<1>"),r=0;r<4;++r){q=s[r] +if(q!=null){B.b.I(o,p.a(q.b)) +if(q.a[0]!=null)B.b.I(o,this.a4s(q))}}return o}, +a4D(a){var s=this.$ti,r=A.b([],s.h("v<1>")),q=a.c +if(q!=null){B.b.I(r,s.h("H<1>").a(q.b)) +B.b.I(r,this.a4D(q))}return r}} +A.Qe.prototype={ +gag5(a){var s,r,q,p,o,n,m=this,l=A.b([m],t.y9) +for(s=m.a,r=m.c,q=m.b.a,p=0;p<4;++p){o=q[p] +if(o==null)continue +n=new A.Qe(A.bp0(s,A.bNs(p)),o,r) +l.push(n) +B.b.I(l,n.gag5(0))}return l}} +A.B5.prototype={ +gaiR(){var s,r,q,p=this.$ti,o=A.b([],p.h("v<1>")) +B.b.I(o,this.b) +for(s=this.a,p=p.h("H<1>"),r=0;r<4;++r){q=s[r] +if(q==null)continue +B.b.I(o,p.a(q.gaiR()))}return o}, +j(a){return"node "+this.d}} +A.CW.prototype={ +W(){return"_QuadTreeZone."+this.b}} +A.a9s.prototype={ +E(a,b){var s,r=this +b.tK$=new A.aOA(r,b) +s=new A.aOB(r,b) +b.mh$.an(0,s) +r.x.u(0,b,s) +r.amR(0,b)}, +P(a,b){var s,r +b.tK$=null +s=this.x +r=s.i(0,b) +if(r!=null){b.mh$.ad(0,r) +s.P(0,b)}this.amS(0,b)}, +fZ(){var s,r,q,p,o,n +for(s=this.y,r=A.cT(s,s.r,A.w(s).c),q=this.a,p=q.a,o=r.$ti.c;r.H();){n=r.d +if(n==null)n=o.a(n) +p.ahE(0,n,!0) +q.Pg(n) +p.E(0,n)}s.af(0) +this.amT()}} +A.aOA.prototype={ +$0(){return this.a.y.E(0,this.b)}, +$S:6} +A.aOB.prototype={ +$0(){var s,r=this.b +if((r.a&4)!==0){s=this.a.a +if(r.mh$.a===B.H)s.b.E(0,r) +else s.b.P(0,r)}}, +$S:0} +A.Sr.prototype={ +E(a,b){return this.a.push(b)}, +P(a,b){return B.b.P(this.a,b)}, +fd(a){B.b.i1(this.a,new A.aUM(this))}, +ahe(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=f.b +B.b.af(e) +s=f.c +s.af(0) +for(r=f.a,q=r.length,p=f.d,o=p.b,n=0;n=0;--j){i=e[j] +if((i.hy$?i.iq$:i.kl()).b.a[0]>=k){if(l.a===B.H||i.mh$.a===B.H){if(o.length<=s.a)p.adJ(0,m) +h=o[s.a] +h.a=m +h.b=i +g=(A.eT(m)^A.eT(i))>>>0 +h.c=g +s.u(0,g,h)}}else B.b.P(e,i)}e.push(m)}return s.gbm(0)}, +gaft(a){return this.a}} +A.aUM.prototype={ +$2(a,b){var s=(a.hy$?a.iq$:a.kl()).a.a[0] +return B.c.cK(s,(b.hy$?b.iq$:b.kl()).a.a[0])}, +$S(){return this.a.$ti.h("k(1,1)")}} +A.LM.prototype={ +W(){return"CollisionType."+this.b}} +A.uK.prototype={$iaq:1} +A.cP.prototype={ +gyh(){var s=this.h9$ +return s==null?this.h9$=A.C(t.Kj):s}, +ic(a,b){this.gyh().E(0,b)}, +kA(a){this.gyh().P(0,a)}, +u2(a){var s=this.e,r=a.gbs(a) +if(t.Oi.b(s)&&r instanceof A.au)return s.u2(r) +return!0}} +A.agG.prototype={} +A.qV.prototype={ +E(a,b){return this.a.E(0,b)}, +P(a,b){return this.a.P(0,b)}, +fZ(){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.a +h.fd(0) +s=h.ahe(0) +h=t.S +r=A.w(s) +h=A.jc(A.rI(s,new A.azg(i),r.h("z.E"),h),h) +for(r=r.h("@<1>").ak(r.y[1]),q=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];q.H();){p=q.a +if(p==null)p=r.a(p) +o=p.a +n=p.b +p=o.f0$ +p===$&&A.c() +m=n.f0$ +m===$&&A.c() +if(p!==m){p=o.hy$?o.iq$:o.kl() +p=p.af9(n.hy$?n.iq$:n.kl())}else p=!1 +if(p){l=A.bTm(o,n) +if(l.a!==0){p=o.lx$ +if(p!=null)p=p.G(0,n) +else p=!1 +if(!p){o.ic(l,n) +n.ic(l,o)}o.ag9(l,n) +n.ag9(l,o)}else{p=o.lx$ +if(p!=null)p=p.G(0,n) +else p=!1 +if(p){o.kA(n) +n.kA(o)}}}else{p=o.lx$ +if(p!=null)p=p.G(0,n) +else p=!1 +if(p){o.kA(n) +n.kA(o)}}}for(r=i.b,q=r.length,h=new A.Iw(h,t._i).a,k=0;k").ak(s.y[1]),r=new A.bt(J.az(a.a),a.b,s.h("bt<1,2>")),q=this.d,s=s.y[1];r.H();){p=r.a +if(p==null)p=s.a(p) +o=q.length +n=k.length +m=p.a +if(o>n){l=q[n] +l.a=m +l.b=p.b +l.c=p.c}else{o=p.b +l=new A.uJ(m,o,(A.eT(m)^A.eT(o))>>>0,p.$ti) +q.push(l)}k.push(l)}}} +A.azg.prototype={ +$1(a){return a.c}, +$S(){return A.w(this.a).h("k(uJ)")}} +A.LL.prototype={} +A.ds.prototype={ +gJG(){return this.ga30()}, +$iy:1, +ga30(){return this.dq$}} +A.Ls.prototype={ +gqK(){var s,r,q=this.f5 +if(q===$){s=new Float64Array(2) +r=new Float64Array(2) +q!==$&&A.N() +q=this.f5=new A.FP(new A.a(s),new A.a(r))}return q}, +gH6(){var s,r=this.d1 +if(r===$){s=new Float64Array(2) +r!==$&&A.N() +r=this.d1=new A.a(s)}return r}, +gSK(){var s,r=this.i8 +if(r===$){s=new Float64Array(2) +r!==$&&A.N() +r=this.i8=new A.a(s)}return r}, +gIJ(){var s,r=this.V +if(r===$){s=new Float64Array(2) +r!==$&&A.N() +r=this.V=new A.a(s)}return r}, +ahi(a,b){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null,f=a.a +h.gqK().a.v(f) +h.gIJ().v(h.eA(B.j)) +s=h.gSK() +s.v(h.gIJ()) +s.aq(0,f) +s=h.gSK().a +s=s[0]===0&&s[1]===0 +r=a.b +if(s)h.gqK().b.v(r) +else{s=h.gSK() +q=h.gqK().b +p=s.bO(r) +q.v(r) +q.au(0,p/r.gd2()) +s=h.gqK().b +o=s.a +n=r.a +s.sN(0,o[0]*(J.eY(n[0])*J.eY(h.gqK().b.a[0]))) +s.sO(0,o[1]*(J.eY(n[1])*J.eY(h.gqK().b.a[1])))}m=f.n2(h.gIJ())")) +if(!l.gar(0).H()){b.b=null +return g}else{k=l.ga9(0) +s=h.gH6() +s.v(k) +s.aq(0,h.gIJ()) +s.e0(0) +if(m)A.bqK(h.gH6()) +s=b.b!=null?b.c:g +s=s==null?g:s.b +j=s +if(j==null)j=new A.a(new Float64Array(2)) +j.v(r) +j.ahy(h.gH6()) +s=b.b!=null?b.c:g +if(s==null)i=g +else{s.a.v(k) +s.b.v(j) +s.Ca() +i=s}if(i==null)i=A.bgn(j,k) +s=h.gH6() +b.O5(Math.sqrt(f.n2(k)),h,m,s,i) +return b}}, +$ipp:1} +A.ayC.prototype={ +$1(a){return a.n2(this.a.a)>1e-7}, +$S:329} +A.b_a.prototype={ +$1(a){return a instanceof A.au}, +$S:64} +A.b_b.prototype={ +$0(){throw A.d(A.ad(u.F))}, +$S:91} +A.b_c.prototype={ +$0(){var s=this.a +s.hy$=!1 +s=s.tK$ +if(s!=null)s.$0()}, +$S:28} +A.b_d.prototype={ +$1(a){var s=this.a,r=a.at +s.r4$.push(r) +s=s.n5$ +s===$&&A.c() +r.an(0,s)}, +$S:105} +A.b_e.prototype={ +$0(){var s=this.a,r=s.f0$ +r===$&&A.c() +s.sC(0,r.ax)}, +$S:0} +A.b_f.prototype={ +$1(a){var s=this.a.n5$ +s===$&&A.c() +return a.ad(0,s)}, +$S:140} +A.agw.prototype={ +aX(){var s,r,q,p=this +p.cD() +p.f0$=t.Kj.a(p.yq().pJ(0,new A.b_a(),new A.b_b())) +p.n5$=new A.b_c(p) +new A.ca(p.vg(!0),t.ky).al(0,new A.b_d(p)) +if(p.e9){s=new A.b_e(p) +p.n6$=s +s.$0() +s=p.f0$ +s===$&&A.c() +r=p.n6$ +r.toString +s.ax.an(0,r)}s=t.AD +q=p.KX(s) +if(s.b(q)){s=q.gJG() +p.mi$=s +s.E(0,p)}}, +h3(){var s,r=this,q=r.n6$ +if(q!=null){s=r.f0$ +s===$&&A.c() +s.ax.ad(0,q)}B.b.al(r.r4$,new A.b_f(r)) +q=r.mi$ +if(q!=null)q.P(0,r) +r.p7()}} +A.a97.prototype={ +aRo(){throw A.d(A.af("Use the RectangleHitbox if you want to fill the parent"))}, +$ipp:1} +A.b4K.prototype={ +$1(a){return a instanceof A.au}, +$S:64} +A.b4L.prototype={ +$0(){throw A.d(A.ad(u.F))}, +$S:91} +A.b4M.prototype={ +$0(){var s=this.a +s.hy$=!1 +s=s.tK$ +if(s!=null)s.$0()}, +$S:28} +A.b4N.prototype={ +$1(a){var s=this.a,r=a.at +s.r4$.push(r) +s=s.n5$ +s===$&&A.c() +r.an(0,s)}, +$S:105} +A.b4O.prototype={ +$0(){var s=this.a,r=s.f0$ +r===$&&A.c() +s.sC(0,r.ax) +s.aRo()}, +$S:0} +A.b4P.prototype={ +$1(a){var s=this.a.n5$ +s===$&&A.c() +return a.ad(0,s)}, +$S:140} +A.anr.prototype={ +aX(){var s,r,q,p=this +p.cD() +p.f0$=t.Kj.a(p.yq().pJ(0,new A.b4K(),new A.b4L())) +p.n5$=new A.b4M(p) +new A.ca(p.vg(!0),t.ky).al(0,new A.b4N(p)) +if(p.KD$){s=new A.b4O(p) +p.n6$=s +s.$0() +s=p.f0$ +s===$&&A.c() +r=p.n6$ +r.toString +s.ax.an(0,r)}s=t.AD +q=p.KX(s) +if(s.b(q)){s=q.gJG() +p.mi$=s +s.E(0,p)}}, +h3(){var s,r=this,q=r.n6$ +if(q!=null){s=r.f0$ +s===$&&A.c() +s.ax.ad(0,q)}B.b.al(r.r4$,new A.b4P(r)) +q=r.mi$ +if(q!=null)q.P(0,r) +r.p7()}} +A.ans.prototype={} +A.B9.prototype={$ipp:1} +A.b50.prototype={ +$1(a){return a instanceof A.au}, +$S:64} +A.b51.prototype={ +$0(){throw A.d(A.ad(u.F))}, +$S:91} +A.b52.prototype={ +$0(){var s=this.a +s.hy$=!1 +s=s.tK$ +if(s!=null)s.$0()}, +$S:28} +A.b53.prototype={ +$1(a){var s=this.a,r=a.at +s.r4$.push(r) +s=s.n5$ +s===$&&A.c() +r.an(0,s)}, +$S:105} +A.b54.prototype={ +$0(){var s=this.a,r=s.f0$ +r===$&&A.c() +s.sC(0,r.ax) +s.ahz(A.pU(s.ax,s.ay))}, +$S:0} +A.b55.prototype={ +$1(a){var s=this.a.n5$ +s===$&&A.c() +return a.ad(0,s)}, +$S:140} +A.ao4.prototype={ +aX(){var s,r,q,p=this +p.cD() +p.f0$=t.Kj.a(p.yq().pJ(0,new A.b50(),new A.b51())) +p.n5$=new A.b52(p) +new A.ca(p.vg(!0),t.ky).al(0,new A.b53(p)) +if(p.es){s=new A.b54(p) +p.n6$=s +s.$0() +s=p.f0$ +s===$&&A.c() +r=p.n6$ +r.toString +s.ax.an(0,r)}s=t.AD +q=p.KX(s) +if(s.b(q)){s=q.gJG() +p.mi$=s +s.E(0,p)}}, +h3(){var s,r=this,q=r.n6$ +if(q!=null){s=r.f0$ +s===$&&A.c() +s.ax.ad(0,q)}B.b.al(r.r4$,new A.b55(r)) +q=r.mi$ +if(q!=null)q.P(0,r) +r.p7()}} +A.ao5.prototype={} +A.to.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=A.cO(q.en(0),t.H) +s=2 +return A.x(p,$async$n) +case 2:q.J(A.fg(B.H,null,null)) +p=q.KX(t.i)!=null +q.k4=p +if(p){q.gaC().k4.ax.at.an(0,q.gaLq()) +q.T9()}return A.p(null,r)}}) +return A.q($async$n,r)}, +T9(){var s,r,q,p,o,n=this,m=n.gaC().k4.ax,l=n.gaC().k4.ax.gun(),k=n.ax,j=l.a,i=l.b +k.mJ(l.c-j,l.d-i) +k.D() +s=n.ok +s.p(j,i) +i=n.at +j=i.d +j.a7(B.o.rD(s,m.ax,k)) +j.D() +n.ay=m.ax +n.i3() +i.c=-m.at.c +i.b=!0 +i.D() +j=i.c +if(j!==0){r=Math.abs(Math.cos(j)) +q=Math.abs(Math.sin(i.c)) +j=k.a +i=j[0] +j=j[1] +p=i*r+j*q +o=i*q+j*r +k.mJ(p*(i/p),o*(j/o)) +k.D()}}, +fI(a){var s=this +s.ld(a) +s.sC(0,a) +if(s.k4)s.T9()}} +A.apb.prototype={} +A.X3.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.c6.prototype={ +svq(a){var s=this.mh$ +if(s.a===a)return +s.a=a +s.D()}, +gyh(){var s=this.lx$ +return s==null?this.lx$=A.C(t.VC):s}, +kl(){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.ax.a,g=h[0],f=i.gaaI().a,e=f[0] +h=h[1] +f=f[1] +s=new Float64Array(2) +new A.a(s).p(g*Math.abs(e),h*Math.abs(f)) +f=i.KB$ +f.p(s[0]/2+1e-15,s[1]/2+1e-15) +s=i.gTl() +r=Math.cos(s) +q=Math.sin(s) +s=i.KC$.a +s[0]=r +s[1]=q +s[2]=0 +s[3]=-q +s[4]=r +s[5]=0 +s[6]=0 +s[7]=0 +s[8]=1 +i.hy$=!0 +h=i.iq$ +h.akV(i.eA(B.j),f) +f=$.buX() +e=$.buY() +g=h.a +f.v(g) +p=h.b +f.E(0,p) +f.au(0,0.5) +e.v(p) +e.aq(0,g) +e.au(0,0.5) +o=s[0] +n=s[3] +m=s[1] +s=s[4] +l=e.a +k=l[0] +j=l[1] +l[0]=k*Math.abs(o)+j*Math.abs(n) +l[1]=k*Math.abs(m)+j*Math.abs(s) +g.v(f) +g.aq(0,e) +p.v(f) +p.E(0,e) +return h}, +ag9(a,b){var s=this.f0$ +s===$&&A.c() +if(t.Oi.b(s))b.f0$===$&&A.c()}, +ic(a,b){var s,r +this.gyh().E(0,b) +s=this.f0$ +s===$&&A.c() +if(t.Oi.b(s)){r=b.f0$ +r===$&&A.c() +s.ic(a,r)}}, +kA(a){var s,r +this.gyh().P(0,a) +s=this.f0$ +s===$&&A.c() +if(t.Oi.b(s)){r=a.f0$ +r===$&&A.c() +s.kA(r)}}, +u2(a){var s,r,q,p,o=a.f0$ +o===$&&A.c() +s=this.f0$ +s===$&&A.c() +r=t.Oi +q=!r.b(s)||s.u2(o) +p=!r.b(o)||o.u2(this.f0$) +return q&&p}, +$ipp:1, +$iy:1, +$ia8:1, +$iag:1, +$iau:1, +$iax:1, +$iaH:1, +$iao:1, +$iaG:1, +$iP:1, +$iaE:1, +$ib5:1, +$ieL:1, +gvw(){return this.KA$}, +gMP(){return this.oo$}} +A.BV.prototype={ +MB(a0,a1,a2,a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=null +if(a4==null)s=a +else{a4.b=null +s=a4}r=a0.a.a +q=r[0] +p=r[1] +r=a3==null +if(!r){o=a0.b.a +n=q+o[0]*a3 +m=p+o[1]*a3}else{o=a0.b.a +n=o[0]>0?1/0:-1/0 +m=o[1]>0?1/0:-1/0}o=$.bjn() +o.a.p(Math.min(q,n),Math.min(p,m)) +o.b.p(Math.max(q,n),Math.max(p,m)) +for(o=this.a,o=o.gaft(o),l=o.length,k=0;kj +if(h)g=p[j] +else{i=A.a9H() +f=new A.a(new Float64Array(2)) +g=new A.mv(!1,null,i,17976931348623157e292,f,l)}o=s.aY8(k,null,null,g)!=null?5:7 +break +case 5:i=g.b!=null?g.c:null +i.toString +if(!h)p.push(g) +o=8 +return d.b=g,1 +case 8:o=6 +break +case 7:o=4 +break +case 6:case 3:++j,k=i +o=2 +break +case 4:return 0 +case 1:return d.c=m,3}}}}} +A.aTS.prototype={ +$1(a){return a.b=null}, +$S:333} +A.uG.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.a77() +q.ax.an(0,q.gaFF()) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a77(){var s=this,r=s.p1.$1(s.ax) +s.ok=r +s.k4=r.CA()}, +b4(a){var s=this.k4 +s===$&&A.c() +return a.m9(0,s)}, +jh(a){var s=this.ok +s===$&&A.c() +return s.jQ(0,a)}} +A.ayO.prototype={ +$1(a){var s=a.b1(0,2),r=a.a[0],q=new A.a(new Float64Array(2)) +q.v(s) +return new A.qS(q,r/2)}, +$S:334} +A.ayP.prototype={ +$1(a){var s=a.a +return A.a9K(0,0,0+s[0],0+s[1])}, +$S:335} +A.ayT.prototype={ +$1(a){return A.bCO(this.a,a)}, +$S:336} +A.ayS.prototype={ +$1(a){var s=new A.a(new Float64Array(2)) +s.v(a) +s.bL(0,this.a) +return s}, +$S:61} +A.jz.prototype={} +A.y.prototype={ +gkZ(a){var s +if((this.a&2)!==0)s=A.e5(null,t.H) +else{s=this.b +s=(s==null?this.b=new A.bH(new A.aM($.aK,t.D),t.h):s).a}return s}, +gED(){if((this.a&4)!==0)var s=A.e5(null,t.H) +else{s=this.c +s=(s==null?this.c=new A.bH(new A.aM($.aK,t.D),t.h):s).a}return s}, +gbs(a){return this.e}, +sbs(a,b){if(b==null)this.eb() +else b.J(this)}, +gbQ(a){var s=this.f +return s==null?this.f=A.btq().$0():s}, +gE2(){var s=this.f +s=s==null?null:s.gar(0).H() +return s===!0}, +KX(a){return A.aI2(new A.ca(this.vg(!1),a.h("ca<0>")))}, +vg(a){return new A.eW(this.aMl(a),t.jj)}, +yq(){return this.vg(!1)}, +aMl(a){var s=this +return function(){var r=a +var q=0,p=1,o,n +return function $async$vg(b,c,d){if(c===1){o=d +q=p}while(true)switch(q){case 0:n=r?s:s.gbs(s) +case 2:if(!(n!=null)){q=3 +break}q=4 +return b.b=n,1 +case 4:n=n.gbs(n) +q=2 +break +case 3:return 0 +case 1:return b.c=o,3}}}}, +Kf(a,b){return new A.eW(this.aPL(a,b),t.jj)}, +aPK(){return this.Kf(!1,!1)}, +aPL(a,b){var s=this +return function(){var r=a,q=b +var p=0,o=1,n,m,l +return function $async$Kf(c,d,e){if(d===1){n=e +p=o}while(true)switch(p){case 0:p=r&&!q?2:3 +break +case 2:p=4 +return c.b=s,1 +case 4:case 3:p=s.gE2()?5:6 +break +case 5:m=q?s.gbQ(0).ai6(0):s.gbQ(0) +l=m.gar(m) +case 7:if(!l.H()){p=8 +break}p=9 +return c.vd(l.ga1(l).Kf(!0,q)) +case 9:p=7 +break +case 8:case 6:p=r&&q?10:11 +break +case 10:p=12 +return c.b=s,1 +case 12:case 11:return 0 +case 1:return c.c=n,3}}}}, +ah2(a,b,c){return new A.ca(this.Kf(b,!0),c.h("ca<0>")).h8(0,a)}, +aXU(a,b){return this.ah2(a,!1,b)}, +bo(){if(this instanceof A.ae){t.J.a(this) +var s=this}else{s=this.e +s=s==null?null:s.bo()}return s}, +cC(){var s=this.bo() +while(!0){if(!((s==null?null:s.e)!=null))break +s=s.e.bo()}return s}, +G(a,b){var s=this.f +s=s==null?null:s.G(0,b) +return s===!0}, +fI(a){return this.mm(a)}, +n(a){return null}, +aX(){}, +h3(){}, +EP(a){}, +a8(a,b){}, +oQ(a){var s +this.a8(0,a) +s=this.f +if(s!=null)s.al(0,new A.azR(a))}, +Y8(a,b){}, +b4(a){}, +k6(a){var s,r=this +r.b4(a) +s=r.f +if(s!=null)s.al(0,new A.azQ(a)) +if(r.gmd())r.uf(a)}, +I(a,b){var s,r,q,p=A.b([],t.mo) +for(s=J.az(b),r=t.L0;s.H();){q=this.J(s.ga1(s)) +if(r.b(q))p.push(q)}return A.f2(p,t.H)}, +J(a){var s,r,q=this,p=q.bo() +if(p==null)p=a.bo() +s=q.a +r=(s&4)===0 +if(r&&(a.a&4)===0||p==null){s=a.e +if(s!=null)s.gbQ(0).AZ(0,a) +a.e=q +q.gbQ(0).OC(0,a)}else if(a.e!=null){if((a.a&8)!==0){p.aPI(a) +q.a&=4294967287}s=p.at.Ja() +s.a=B.ajo +s.b=a +s.c=q}else if(!r&&(s&8)===0&&(a.a&4)===0){a.e=q +s=p.at.Ja() +s.a=B.tB +s.b=a +s.c=q}else{a.e=q +q.gbQ(0).OC(0,a)}s=a.a +if((s&2)===0)if((s&1)===0){s=p==null?null:p.fx$!=null +s=s===!0}else s=!1 +else s=!1 +if(s)return a.a8F()}, +P(a,b){var s,r,q=this +if((q.a&4)!==0){s=q.bo() +s.toString +r=b.a +if((r&4)!==0||(r&32)!==0){if((r&8)===0){s=s.at.Ja() +s.a=B.tC +s.b=b +s.c=q +b.a|=8}}else{s.acY(b,q) +b.e=null}}else{s=q.f +if(s!=null)s.AZ(0,b) +b.e=null}return null}, +eb(){var s=this.e +return s==null?null:s.o6(0,this)}, +o6(a,b){var s,r,q=this +if((q.a&4)!==0){s=q.bo() +s.toString +r=b.a +if((r&4)!==0||(r&32)!==0){if((r&8)===0){s=s.at.Ja() +s.a=B.tC +s.b=b +s.c=q +b.a|=8}}else{s.acY(b,q) +b.e=null}}else{s=q.f +if(s!=null)s.AZ(0,b) +b.e=null}}, +jh(a){return!1}, +aO2(a,b){return this.vr(a,b,new A.azN(),new A.azO())}, +CU(a,b,c,d){return new A.eW(this.aO1(a,b,c,d),t.jj)}, +vr(a,b,c,d){return this.CU(a,b,c,d,t.z)}, +aO1(a,b,c,d){var s=this +return function(){var r=a,q=b,p=c,o=d +var n=0,m=1,l,k,j,i,h +return function $async$CU(e,f,g){if(f===1){l=g +n=m}while(true)switch(n){case 0:q.push(r) +k=s.f +n=k!=null?2:3 +break +case 2:k=k.ai6(0),k=k.gar(k),j=t.NT +case 4:if(!k.H()){n=5 +break}i=k.ga1(k) +h=j.b(i)?p.$2(i,r):r +n=h!=null?6:7 +break +case 6:n=8 +return e.vd(i.vr(h,q,p,o)) +case 8:case 7:n=4 +break +case 5:case 3:k=o.$2(s,r) +n=k?9:10 +break +case 9:n=11 +return e.b=s,1 +case 11:case 10:q.pop() +return 0 +case 1:return e.c=l,3}}}}, +gq0(){return this.r}, +sq0(a){var s,r,q=this +if(q.r!==a){q.r=a +s=q.bo() +if(s!=null&&q.e!=null){r=q.e +r.toString +s.ay.E(0,r)}}}, +aSe(a){var s=this,r=(a.a&4)!==0 +if(r&&(s.a&2)!==0){if(s.e==null)s.e=a +s.a6o() +return B.k5}else{if(r&&(s.a&1)===0)s.a8F() +return B.X9}}, +mm(a){var s=this.f +if(s!=null)s.al(0,new A.azP(a))}, +a8F(){var s,r=this +r.a|=1 +s=r.n(0) +if(t.L0.b(s))return s.cu(new A.azM(r),t.H) +else r.a4a()}, +a4a(){var s=this,r=s.a&=4294967294 +s.a=r|2 +r=s.b +if(r!=null)r.fl(0) +s.b=null}, +a6o(){var s,r,q=this +q.a|=32 +s=q.e.bo().fx$ +s.toString +q.fI(s) +s=q.e +if(t.sr.b(s))q.EP(s.gC(s)) +s=q.a +if((s&16)!==0)q.a=s&4294967279 +else if((s&8)!==0){q.e=null +s&=4294967287 +q.a=s +q.a=s|16 +return}q.smd(B.cE.nR(q.gmd(),q.e.gmd())) +q.aX() +q.a|=4 +s=q.c +if(s!=null)s.fl(0) +q.c=null +q.e.gbQ(0).OC(0,q) +q.a7g() +q.e.Y8(q,B.LK) +q.a&=4294967263 +s=q.y +if(s!=null){r=q.bo() +if(r instanceof A.ae)r.gc8().u(0,s,q)}}, +a7g(){var s,r,q=this,p=q.f +if(p!=null&&p.gar(0).H()){p=q.f +p.toString +B.b.I($.E6,p) +p=q.f +p.toString +p.a17(0) +for(p=$.E6.length,s=0;s<$.E6.length;$.E6.length===p||(0,A.E)($.E6),++s){r=$.E6[s] +r.e=null +q.J(r)}B.b.af($.E6)}}, +a36(a){this.e.gbQ(0).AZ(0,this) +this.ah2(new A.azL(),!0,t.F)}, +gn0(){var s,r=this,q=r.Q,p=t.O +if(!q.Xu(A.b([r.gvw()],p))){s=$.G().B() +s.sA(0,r.gvw()) +s.sbM(0) +s.sU(0,B.u) +p=A.b([r.gvw()],p) +q.a=s +q.b=p}q=q.a +q.toString +return q}, +gacR(){var s,r,q,p,o=this,n=null,m=$.o_.length===0,l=m?n:$.o_[0],k=l==null?n:l.ax +m=m?n:$.o_[0] +s=m==null?n:m.at +r=k==null?n:k.at.e.a[0] +if(r==null)r=1 +m=s==null +l=m?n:s.ay.e.a[0] +if(l==null)l=1 +m=m?n:s.ay.e.a[1] +if(m==null)m=1 +q=Math.max(l,m) +m=o.as +l=t.O +if(!m.Xu(A.b([o.gvw()],l))){p=A.dW(A.ep(n,n,o.gvw(),n,n,n,n,n,n,n,n,12/r/q,n,n,n,n,n,!0,n,n,n,n,n,n,n,n),B.r) +l=A.b([o.gvw()],l) +m.a=p +m.b=l}m=m.a +m.toString +return m}, +uf(a){}, +gmd(){return this.w}, +gvw(){return this.z}, +smd(a){return this.w=a}} +A.azR.prototype={ +$1(a){return a.oQ(this.a)}, +$S:42} +A.azQ.prototype={ +$1(a){return a.k6(this.a)}, +$S:42} +A.azN.prototype={ +$2(a,b){return a.wn(b)}, +$S:338} +A.azO.prototype={ +$2(a,b){return a.jh(b)}, +$S:339} +A.azP.prototype={ +$1(a){var s=a.a +if((s&1)!==0||(s&2)!==0)a.fI(this.a)}, +$S:42} +A.azM.prototype={ +$1(a){return this.a.a4a()}, +$S:36} +A.azL.prototype={ +$1(a){var s,r +a.h3() +s=a.y +if(s!=null){r=a.bo() +if(r instanceof A.ae)r.gc8().P(0,s)}s=a.a&=4294967291 +s&=4294967287 +a.a=s +a.a=s|16 +a.d=null +a.e.Y8(a,B.LL) +a.e=null +return!0}, +$S:64} +A.a0p.prototype={ +W(){return"ChildrenChangeType."+this.b}} +A.i3.prototype={ +gL(a){return this.a}, +k(a,b){if(b==null)return!1 +return t.ny.b(b)&&b.gBz()===this.a}, +gBz(){return this.a}} +A.E4.prototype={ +gcT(a){return this.gar(0).H()}} +A.azJ.prototype={ +$1(a){return a.gq0()}, +$S:340} +A.a1m.prototype={ +gc8(){var s=this.ch +if(s===$){s!==$&&A.N() +s=this.ch=A.D(t.ny,t.F)}return s}, +acY(a,b){var s,r,q +for(s=this.at,s.Bq(),s.d=-2,r=s.e;s.H();){q=r[s.d] +if(q.a===B.tB&&q.b===a&&q.c===b){q.a=B.m9 +return}}throw A.d(A.kg("Cannot find a lifecycle event Add(child="+a.j(0)+", parent="+b.j(0)+")"))}, +aPI(a){var s,r,q +for(s=this.at,s.Bq(),s.d=-2,r=s.e;s.H();){q=r[s.d] +if(q.a===B.tC&&q.b===a)q.a=B.m9}}, +aXQ(){var s,r,q,p,o,n,m +for(s=this.ax,r=this.at,q=r.e,p=!0;p;){for(r.Bq(),r.d=-2,p=!1;r.H();){o=q[r.d] +n=o.b +n.toString +m=o.c +m.toString +if(s.G(0,A.mR(n))||s.G(0,A.mR(m)))continue +switch(o.a.a){case 1:o=n.aSe(m) +break +case 2:if(n.e==null){o=m.f +if(o!=null)o.AZ(0,n)}else n.a36(0) +o=B.k5 +break +case 3:if(n.e!=null)n.a36(0) +if((m.a&4)!==0){n.e=m +n.a6o()}else m.J(n) +o=B.k5 +break +case 0:o=B.k5 +break +default:o=null}switch(o.a){case 2:o=r.d +n=q[o] +n.a=B.m9 +n.c=n.b=null +n=r.b +if(n===r.c)r.d=r.c=r.b=-1 +else if(o===n){o=n+1 +r.b=o +if(o===q.length)r.b=0}else B.b.E(r.f,o) +p=!0 +break +case 1:s.E(0,A.mR(n)) +s.E(0,A.mR(m)) +break}}s.af(0)}}, +aXR(){var s,r,q,p,o,n +for(s=this.ay,r=A.cT(s,s.r,A.w(s).c),q=r.$ti.c;r.H();){p=r.d +if(p==null)p=q.a(p) +o=p.f +p=o==null?p.f=A.btq().$0():o +n=A.ab(p,!0,A.w(p).h("z.E")) +p.a17(0) +B.b.al(n,A.jQ.prototype.gkJ.call(p,p))}s.af(0)}, +mm(a){this.amW(a) +this.at.al(0,new A.azK(a))}, +cl(a,b){return b.h("0?").a(this.gc8().i(0,a))}} +A.azK.prototype={ +$1(a){var s +if(a.a===B.tB){s=a.b.a +s=(s&1)!==0||(s&2)!==0}else s=!1 +if(s)a.b.fI(this.a)}, +$S:341} +A.a6b.prototype={ +W(){return"LifecycleEventStatus."+this.b}} +A.Jn.prototype={ +W(){return"_LifecycleEventKind."+this.b}} +A.xa.prototype={ +j(a){return"LifecycleEvent."+this.a.b+"(child: "+A.j(this.b)+", parent: "+A.j(this.c)+")"}} +A.Qq.prototype={ +gaA(a){return this.b<0}, +gcT(a){return this.b>=0}, +gF(a){var s,r=this.b +if(r<0)r=0 +else{s=this.c +r=s>=r?s-r+1:this.e.length-r+s+1}return r}, +ga9(a){return this.e[this.b]}, +ga_(a){return this.e[this.c]}, +Ja(){var s,r,q,p,o,n=this,m=n.b +if(m<0){n.c=n.b=0 +m=n.e +if(m.length===0)m.push(n.a.$0())}else{s=n.c +if(s>=m){++s +n.c=s +r=n.e +if(s===r.length)if(m===0)r.push(n.a.$0()) +else n.c=0}else if(s===m-1){m=n.e +q=Math.min(m.length,32) +p=J.el(q,n.$ti.c) +for(s=n.a,o=0;on.c)n.d=m+q +for(o=0;m=n.f,on.c)B.b.u(m,o,s+q)}++n.c}else n.c=s+1}return n.e[n.c]}, +gar(a){this.Bq() +this.d=-2 +return this}, +ga1(a){return this.e[this.d]}, +H(){var s,r=this,q=r.b +if(q<0||r.d===-1){r.d=-1 +return!1}s=r.d +if(s<0)r.d=q +else if(s===r.c){r.d=-1 +r.Bq() +return!1}else{q=s+1 +r.d=q +if(q===r.e.length)r.d=0}return!0}, +Bq(){var s,r,q,p,o,n,m,l,k,j=this,i=j.f,h=i.length +if(h===0)return +s=A.a5(i) +r=new J.cA(i,h,s.h("cA<1>")) +r.H() +q=r.d +if(q==null)q=s.c.a(q) +p=j.b +o=new A.aPf(j) +for(i=j.e,s=s.c,n=p,m=-1;p!==-1;)if(p===q){if(r.H()){q=r.d +if(q==null)q=s.a(q)}else q=-1 +p=o.$1(p)}else{if(p!==n){l=i[p] +i[p]=i[n] +i[n]=l}p=o.$1(p) +k=o.$1(n) +m=n +n=k}j.c=m +B.b.af(j.f)}, +j(a){var s,r=this,q=r.f,p=r.d +r.d=-1 +r.f=B.ok +s=r.anS(0) +r.d=p +r.f=q +return"RecycledQueue"+s}} +A.aPf.prototype={ +$1(a){var s=this.a +if(a===s.c)s=-1 +else s=a===s.e.length-1?0:a+1 +return s}, +$S:77} +A.a1Q.prototype={ +b4(a){var s,r=this.k4 +if(r!=null){s=this.ax.a +r.aO(a,new A.Q(s[0],s[1]))}}} +A.a4_.prototype={ +a8(a,b){var s=this,r=s.ax +r.ho(0,b) +s.ay+=b +if(r.gF(0)>s.at)s.ay=s.ay-r.ue()}} +A.Nm.prototype={ +a8(a,b){var s=this.K,r=s.ax +this.sd7(0,B.c.b8(r.b===r.c?0:r.gF(0)/s.ay,0)+" FPS")}} +A.Dq.prototype={ +OR(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var s,r=this +r.sKb(e) +s=r.R8 +s.u(0,B.ee,h) +r.jN() +r.jH() +r.j9(r.ry) +s.u(0,B.f2,i) +r.jN() +r.jH() +r.j9(r.ry) +s.u(0,B.ef,g) +r.jN() +r.jH() +r.j9(r.ry) +s=r.RG +s.u(0,B.bl,d) +r.qF() +r.po(r.ry) +s.u(0,B.ef,f) +r.qF() +r.po(r.ry) +r.ax.an(0,r.gaLn())}, +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +q.J(q.p2) +q.J(q.p3) +return A.p(null,r)}}) +return A.q($async$n,r)}, +aX(){var s,r=this +r.apU() +if(r.ry===B.bl){s=r.R8.i(0,B.bl) +s.toString +s=!r.G(0,s)}else s=!1 +if(s)r.R8.i(0,B.bl).sbs(0,r.p2)}, +cb(a){if(this.rx)return +this.p4=!0 +this.wB()}, +iX(a){if(this.rx)return +this.p4=!1 +this.wB()}, +Yh(){this.wB()}, +M_(){this.p4=!1 +this.wB()}, +sKb(a){var s,r=this,q=r.R8 +q.u(0,B.bl,a) +s=r.ax.a +if(s[0]===0&&s[1]===0){q=q.i(0,B.bl) +q=q==null?null:q.ax +if(q==null)q=new A.a(new Float64Array(2)) +r.sC(0,q)}r.jN() +r.jH() +r.j9(r.ry)}, +saU5(a){if(this.rx)return +this.rx=!0 +this.wB()}, +jN(){var s,r,q,p +for(s=this.R8.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),q=this.ax,r=r.y[1];s.H();){p=s.a +if(p==null)p=r.a(p) +if(p!=null)p.sC(0,q)}}, +wB(){var s=this +if(s.rx){s.aK(B.ef) +return}if(s.p4){s.aK(B.ee) +return}if(s.mj$){s.aK(B.f2) +return}s.aK(B.bl)}, +aK(a){var s=this +if(s.ry===a)return +s.ry=a +s.jH() +s.j9(s.ry) +s.qF() +s.po(s.ry)}, +j9(a){var s=this.R8,r=s.i(0,a) +s=r==null?s.i(0,B.bl):r +if(s!=null)s.sbs(0,this.p2)}, +jH(){var s,r,q,p +for(s=this.R8.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a +if(q==null)q=r.a(q) +if(q!=null){p=q.e +if(p!=null)p.o6(0,q)}}}, +po(a){var s=this.RG,r=s.i(0,a) +s=r==null?s.i(0,B.bl):r +this.p3.sbt(s)}, +qF(){var s,r,q,p +for(s=this.RG.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a +if(q==null)q=r.a(q) +if(q!=null){p=q.e +if(p!=null)p.o6(0,q)}}}, +$ims:1} +A.nZ.prototype={ +W(){return"ButtonState."+this.b}} +A.TN.prototype={ +aX(){this.cD() +A.bgf(this)}} +A.TO.prototype={ +aX(){var s,r +this.apT() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.Le.prototype={ +aX(){var s,r=this +r.aq0() +s=r.k4 +s.toString +if(!r.G(0,s)){s=r.k4 +s.toString +r.J(s)}}, +cb(a){var s=this,r=s.ok +if(r!=null){s.k4.eb() +r.sbs(0,s)}r=s.p1 +if(r!=null)r.$0()}, +iX(a){var s=this.ok +if(s!=null){s.eb() +this.k4.sbs(0,this)}}, +rr(a){var s=this.ok +if(s!=null){s.eb() +this.k4.sbs(0,this)}}} +A.U3.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.a52.prototype={} +A.ajW.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.ajX.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +if(q.tL$==null){p=q.e +if(p instanceof A.lD)o=p.gaU() +else{p.toString +t.sr.a(p) +o=p.gC(p)}p=q.at.d +n=q.ay.rD(p,B.o,q.ghC()).a +p=o.Y(0,q.ay.rD(p,B.bL,q.ghC())).a +q.tL$=new A.aS(n[0],n[1],p[0],p[1])}else q.ax.an(0,q.ga37()) +q.Bc() +return A.p(null,r)}}) +return A.q($async$n,r)}, +fI(a){this.ld(a) +if((this.a&4)!==0)this.Bc()}} +A.NN.prototype={ +aX(){var s,r,q=this +q.cD() +s=t.ai.a(A.bnh(q.yq(),new A.aGV())) +q.ok=s +s.toString +r=q.gaL7() +q.ax.an(0,r) +if(s.gC(s) instanceof A.aJ)t.bj.a(s.gC(s)).an(0,r) +q.T0()}, +fI(a){var s,r=this +r.ld(a) +if((r.a&4)!==0){s=r.ok +s===$&&A.c() +s=s!=null}else s=!1 +if(s)r.T0()}, +T0(){var s,r,q=this,p=q.k4,o=p.a +if(o!==0)s=o+q.ghC().a[0]/2 +else{o=q.ok +o===$&&A.c() +s=o.gC(o).a[0]-p.c-q.ghC().a[0]/2}o=p.b +if(o!==0)r=o+q.ghC().a[1]/2 +else{o=q.ok +o===$&&A.c() +r=o.gC(o).a[1]-p.d-q.ghC().a[1]/2}o=q.at.d +o.mJ(s,r) +o.D() +o.a7(B.j.rD(o,q.ay,q.ghC())) +o.D()}} +A.aGV.prototype={ +$1(a){return t.sr.b(a)}, +$S:64} +A.ok.prototype={ +W(){return"JoystickDirection."+this.b}} +A.a5G.prototype={ +aX(){var s,r,q,p=this +p.aqj() +s=p.k4 +s===$&&A.c() +s.ay=B.j +s.i3() +r=s.at.d +r.a7(p.ax.b1(0,2)) +r.D() +q=new A.a(new Float64Array(2)) +q.v(r) +p.R8=q +r=p.ok +r===$&&A.c() +p.J(r) +p.J(s)}, +a8(a,b){var s,r,q,p,o=this,n=o.p4 +n===$&&A.c() +s=n*n +n=o.p2 +n.v(o.p3) +r=n.a +if(r[0]===0&&r[1]===0){q=o.R8 +q===$&&A.c() +p=o.k4 +p===$&&A.c() +p=!q.k(0,p.at.d) +q=p}else q=!1 +if(q){q=o.k4 +q===$&&A.c() +p=o.R8 +p===$&&A.c() +q=q.at.d +q.a7(p) +q.D()}else if(n.gd2()>s)A.aea(n,o.p4) +if(!(r[0]===0&&r[1]===0)){r=o.k4 +r===$&&A.c() +r=r.at.d +q=o.R8 +q===$&&A.c() +r.a7(q) +r.D() +r.rY(0,n) +r.D()}o.p1=n.gd2()/s}, +wh(a,b){this.Os(0,b) +return!1}, +pW(a){var s=a.c +this.p3.E(0,B.b.ga_(s).a.Y(0,B.b.ga_(s).b)) +return!1}, +pV(a,b){this.AR(0,b) +this.p3.cv() +return!1}, +u3(a){this.anm(a) +this.p3.cv() +return!1}, +gqY(a){var s,r=this.p2,q=r.a +if(q[0]===0&&q[1]===0)return B.x0 +s=A.bqL(r) +if(s<0)s=6.283185307179586+s +if(s>=0&&s<=0.39269908169872414)return B.x_ +else if(s>0.39269908169872414&&s<=1.1780972450961724)return B.WL +else if(s>1.1780972450961724&&s<=1.9634954084936207)return B.WM +else if(s>1.9634954084936207&&s<=2.748893571891069)return B.WO +else if(s>2.748893571891069&&s<=3.5342917352885173)return B.WN +else if(s>3.5342917352885173&&s<=4.319689898685965)return B.WP +else if(s>4.319689898685965&&s<=5.105088062083414)return B.WQ +else if(s>5.105088062083414&&s<=5.890486225480862)return B.WK +else if(s>5.890486225480862)return B.x_ +else return B.x0}} +A.akq.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.akr.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +if(q.tL$==null){p=q.e +if(p instanceof A.lD)o=p.gaU() +else{p.toString +t.sr.a(p) +o=p.gC(p)}p=q.at.d +n=q.ay.rD(p,B.o,q.ghC()).a +p=o.Y(0,q.ay.rD(p,B.bL,q.ghC())).a +q.tL$=new A.aS(n[0],n[1],p[0],p[1])}else q.ax.an(0,q.ga37()) +q.Bc() +return A.p(null,r)}}) +return A.q($async$n,r)}, +fI(a){this.ld(a) +if((this.a&4)!==0)this.Bc()}} +A.VF.prototype={ +aX(){var s,r +this.cD() +s=this.cC() +if(s.cl(B.bm,t.F)==null){r=A.An() +s.gc8().u(0,B.bm,r) +s.J(r)}}} +A.a5U.prototype={ +jZ(a,b){var s=a instanceof A.ol?this.at:this.ax,r=s.i(0,a.b) +if(r!=null)return r.$1(b) +return!0}} +A.akE.prototype={} +A.Lg.prototype={ +W(){return"ButtonState."+this.b}} +A.Sd.prototype={ +aX(){var s,r=this,q=r.aM +q.toString +s=r.aS +if(s==null)s=q +r.sa0r(A.b3([B.dB,q,B.uq,s],t.kn,t.bU)) +r.arg()}, +cb(a){this.sa1(0,B.uq)}, +iX(a){this.sa1(0,B.dB) +this.ao.$0()}, +rr(a){this.sa1(0,B.dB)}} +A.Xz.prototype={ +aX(){var s,r +this.a1n() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.adF.prototype={ +asW(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,a0,a1,a2,a3,a4){var s=this,r=s.R8 +r.u(0,B.ed,f) +s.jN() +s.jH() +s.j9(s.ry) +r.u(0,B.j4,l) +s.jN() +s.jH() +s.j9(s.ry) +r.u(0,B.j5,n) +s.jN() +s.jH() +s.j9(s.ry) +r.u(0,B.j6,i) +s.jN() +s.jH() +s.j9(s.ry) +r=s.RG +r.u(0,B.ed,e) +s.qF() +s.po(s.ry) +r.u(0,B.j6,h) +s.qF() +s.po(s.ry)}, +aX(){this.amB()}, +iX(a){this.saUc(!this.bB) +this.amC(a)}, +saUc(a){if(this.bB===a)return +this.bB=a +this.wB()}, +j9(a){var s,r=this.R8,q=r.i(0,a) +if(a===B.j6&&r.i(0,a)==null)q=r.i(0,B.ef) +s=a===B.j4 +if(s&&r.i(0,a)==null)q=r.i(0,B.ee) +if(a===B.j5&&r.i(0,a)==null)q=r.i(0,B.f2) +if(s&&r.i(0,a)==null)q=r.i(0,B.ee) +if(q==null)q=this.bB?r.i(0,B.ed):r.i(0,B.bl) +if(q!=null)q.sbs(0,this.p2)}, +po(a){var s=this.RG,r=s.i(0,a) +if(r==null)s=this.bB?s.i(0,B.ed):s.i(0,B.bl) +else s=r +this.p3.sbt(s)}, +wB(){var s=this +if(s.rx){s.aK(s.bB?B.j6:B.ef) +return}if(s.p4){s.aK(s.bB?B.j4:B.ee) +return}if(s.mj$){s.aK(s.bB?B.j5:B.f2) +return}s.aK(s.bB?B.ed:B.bl)}} +A.a5A.prototype={ +gkR(){return this.p1}, +gKt(){return this.p2}, +b4(a){var s,r,q,p,o,n,m,l=this,k=l.gkR() +for(s=l.ok,r=l.k4,q=0;q<6;++q)for(p=0;o=s[q],p>>16&255,p>>>8&255,p&255)) +for(q=this.gaED().gbm(0),p=A.w(q),p=p.h("@<1>").ak(p.y[1]),q=new A.bt(J.az(q.a),q.b,p.h("bt<1,2>")),p=p.y[1];q.H();){s=q.a +if(s==null)s=p.a(s) +r=s.gA(s).a +s.sA(0,A.S(o,r>>>16&255,r>>>8&255,r&255))}}, +$iy:1, +$ib5:1} +A.aGq.prototype={ +sail(a){if(B.c.goD(a))return +this.KH$=a}} +A.aGr.prototype={} +A.m7.prototype={ +jZ(a,b){return!0}, +$iy:1} +A.a7F.prototype={} +A.a8t.prototype={} +A.tt.prototype={ +gbt(){var s=this.ze$ +s===$&&A.c() +return s}, +b4(a){this.gbt().b4(a)}} +A.a7x.prototype={ +aX(){}, +b4(a){var s=this.ax.a +this.k4.b7(a,new A.A(0,0,0+s[0],0+s[1]))}} +A.rW.prototype={ +sagF(a){this.ok=a +a.Fi(0,this.ax)}, +fI(a){var s,r,q=this +q.ld(a) +if(!q.k4)return +s=q.e +r=t.sr.b(s)?s.gC(s):q.gaC().k4.at.gaU() +s=q.ax +s.a7(r) +s.D() +s=q.ok +if(s!=null)s.Fi(0,r)}, +aX(){}, +a8(a,b){var s=this.ok +if(s!=null)s.a8(0,b)}, +b4(a){var s=this.ok +if(s!=null)s.b4(a)}} +A.Wb.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.a8x.prototype={ +b4(a){this.GH(a) +this.k4.b4(a)}, +a8(a,b){var s=this.k4 +s.a8(0,b) +s=s.c +if(s)this.eb()}} +A.au.prototype={ +b0(a,b,c,d,e,f,g,h,i){var s,r=this,q=r.at +r.CW=new A.aWH(q) +if(f!=null){s=q.d +s.a7(f) +s.D()}if(b!==0){q.c=b==null?0:b +q.b=!0 +q.D()}if(h!=null){q=q.e +q.a7(h) +q.D()}r.ax.an(0,r.gaE_()) +r.i3()}, +gbe(a){return this.at.d}, +sbe(a,b){var s=this.at.d +s.a7(b) +s.D()}, +gko(a){return this.at.c}, +sko(a,b){var s=this.at +s.c=b +s.b=!0 +s.D()}, +giE(a){return this.at.e}, +siE(a,b){var s=this.at.e +s.a7(b) +s.D()}, +gC(a){return this.ax}, +sC(a,b){var s=this,r=s.ax +r.a7(b) +r.D() +if(s.gE2())s.gbQ(0).al(0,new A.aOf(s))}, +ghC(){var s,r=this.ax.a,q=r[0],p=this.at.e.a,o=p[0] +r=r[1] +p=p[1] +s=new A.a(new Float64Array(2)) +s.p(q*Math.abs(o),r*Math.abs(p)) +return s}, +gTl(){var s=t.ba +return A.bG5(A.rI(new A.ca(this.vg(!0),s),new A.aOd(),s.h("z.E"),t.V))}, +gaaI(){var s=this.yq(),r=new A.a(new Float64Array(2)) +r.v(this.at.e) +return new A.ca(s,t.ky).nd(0,r,new A.aOe())}, +jh(a){var s,r=a.a,q=r[0] +if(q>=0){r=r[1] +if(r>=0){s=this.ax.a +r=q")) +i.b0(j,0,j,j,0,j,j,j,j) +i.qd() +k.k4!==$&&A.aj() +k.k4=i +k.ok!==$&&A.aj() +k.ok=r +i.fV=k +s=f.gcO(0) +r=f.gcX(0) +q=new A.a(new Float64Array(2)) +q.p(0,s+r) +q=a6.Y(0,q) +s=new A.a(new Float64Array(2)) +s.p(0,h) +q=A.bl8(c,e,s,k.r,k.at.e,q) +q.J(i) +k.J(q)}} +A.X8.prototype={ +n(a){var s=this,r=s.e +r.toString +t.hl.a(r) +s.fU!==$&&A.aj() +s.fU=r +s.ct.an(0,new A.b6h(s)) +return s.a1p(0)}, +a8(a,b){var s,r=this +if(!r.ea&&r.gWK(0)){r.ea=!0 +s=r.fU +s===$&&A.c() +r.fT=s.ax.a[1]-r.ax.a[1]}r.apy(0,b)}, +pW(a){var s,r,q,p=this +if(p.gWK(0)&&p.fT<0){s=p.at.d +r=s.a +q=a.c +s.dT(0,r[1]+B.b.ga_(q).a.Y(0,B.b.ga_(q).b).a[1]) +s.D() +s.dT(0,B.c.bX(r[1],p.fT,0)) +s.D()}}, +adk(a){this.fV===$&&A.c()}} +A.b6h.prototype={ +$0(){var s=this.a,r=s.ct.a,q=s.fU +q===$&&A.c() +if(r>q.ax.a[1]){s=s.at.d +s.dT(0,-r+q.ax.a[1]) +s.D()}}, +$S:0} +A.au0.prototype={ +aX(){var s,r +this.apw() +s=this.cC() +if(s.cl(B.bm,t.F)==null){r=A.An() +s.gc8().u(0,B.bm,r) +s.J(r)}}} +A.ac2.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=new A.aTm(q) +o.$0() +p=A.aWs(!0,null,new A.aTl(q,o),q.cx,!1,!0) +o=p.at +o===$&&A.c() +q.CW!==$&&A.aj() +q.CW=o +q.J(p) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.aTm.prototype={ +$0(){}, +$S:0} +A.aTl.prototype={ +$0(){var s,r=this.a,q=r.dy,p=r.at.$1(q) +q=r.ax.YW(r.dx,r.ay) +s=p.at.d +s.a7(q) +s.D() +q=r.e +if(q!=null)q.J(p) +this.b.$0();++r.dy}, +$S:0} +A.hx.prototype={ +mK(a,b,c,d,e,f,g,h,i,j,k,l,m,n){this.ax.an(0,this.gSC()) +this.C_()}, +siM(a,b){var s=this.k4 +if((s==null?null:s.a)!==b){this.k4=new A.ip(b) +this.C_()}}, +b4(a){var s=this.k4 +if(s!=null)s.a.a[s.b].a.MN(a,this.S$,this.ax)}, +a8(a,b){var s=this,r=s.k4 +if(r!=null)r.a8(0,b) +s.C_() +if(s.ok){r=s.k4 +r=r==null?null:r.y +r=r===!0}else r=!1 +if(r)s.eb()}, +C_(){var s,r,q,p,o,n=this +if(n.p2){s=n.p3=!0 +r=n.k4 +if(r==null)q=null +else{r=r.a.a[r.b].a.c +p=new Float64Array(2) +new A.a(p).p(r.c-r.a,r.d-r.b) +p=p[0] +q=p}if(q==null)q=0 +r=n.k4 +if(r==null)o=null +else{r=r.a.a[r.b].a.c +p=new Float64Array(2) +new A.a(p).p(r.c-r.a,r.d-r.b) +p=p[1] +o=p}if(o==null)o=0 +r=n.ax +p=r.a +if(p[0]===q?p[1]!==o:s){r.mJ(q,o) +r.D()}n.p3=!1}}, +aJE(){if(this.p2&&!this.p3)this.p2=!1}, +$ib5:1} +A.aq8.prototype={} +A.jW.prototype={ +a1L(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){this.ax.an(0,this.gaJF()) +this.IA()}, +gCu(){var s=this.p3 +return s==null?null:s.i(0,this.k4)}, +sa1(a,b){var s=this,r=s.k4 +s.k4=b +s.IA() +if(b!==r){r=s.gCu() +if(r!=null)r.bF(0)}}, +saMq(a){var s,r=this +if(r.p2!==a){r.p2=a +s=A.w(r) +s=A.OG(a.ghw(a).jo(0,new A.aTw(r),s.h("bK")).eT(0),s.h("jW.T"),t.by) +r.p3=s +r.IA()}}, +b4(a){var s=this.gCu() +if(s!=null)s.a.a[s.b].a.MN(a,this.S$,this.ax)}, +a8(a,b){var s=this,r=s.gCu() +if(r!=null)r.a8(0,b) +s.IA() +s.p1.i(0,s.k4)}, +IA(){var s,r,q,p,o,n=this +if(n.R8){s=n.rx=!0 +r=n.gCu() +if(r==null)q=null +else{r=r.a.a[r.b].a.c +p=new Float64Array(2) +new A.a(p).p(r.c-r.a,r.d-r.b) +p=p[0] +q=p}if(q==null)q=0 +r=n.gCu() +if(r==null)o=null +else{r=r.a.a[r.b].a.c +p=new Float64Array(2) +new A.a(p).p(r.c-r.a,r.d-r.b) +p=p[1] +o=p}if(o==null)o=0 +r=n.ax +p=r.a +if(p[0]===q?p[1]!==o:s){r.mJ(q,o) +r.D()}n.rx=!1}}, +aJG(){if(this.R8&&!this.rx)this.R8=!1}, +$ib5:1} +A.aTx.prototype={ +$1(a){return new A.bK(a.a,new A.ip(a.b),this.a.h("bK<0,ip>"))}, +$S(){return this.a.h("bK<0,ip>(bK<0,mA>)")}} +A.aTw.prototype={ +$1(a){return new A.bK(a.a,new A.ip(a.b),A.w(this.a).h("bK"))}, +$S(){return A.w(this.a).h("bK(bK)")}} +A.aq9.prototype={} +A.Sc.prototype={ +aX(){}, +b4(a){var s=this,r=s.at +if(r!=null)r.ahP(a,s.ax,s.ay,s.ch)}} +A.fv.prototype={ +lg(a,b,c,d,e,f,g,h,i,j,k,l){if(g!=null)this.S$=g +this.ax.an(0,this.gSD())}, +aX(){}, +b4(a){var s=this.ok +if(s!=null)s.MN(a,this.S$,this.ax)}, +tf(){var s,r,q,p,o,n=this +if(n.k4){s=n.p1=!0 +r=n.ok +if(r==null)q=null +else{r=r.c +p=new Float64Array(2) +new A.a(p).p(r.c-r.a,r.d-r.b) +p=p[0] +q=p}if(q==null)q=0 +r=n.ok +if(r==null)o=null +else{r=r.c +p=new Float64Array(2) +new A.a(p).p(r.c-r.a,r.d-r.b) +p=p[1] +o=p}if(o==null)o=0 +r=n.ax +p=r.a +if(p[0]===q?p[1]!==o:s){r.mJ(q,o) +r.D()}n.p1=!1}}, +aJH(){if(this.k4&&!this.p1)this.k4=!1}, +$ib5:1} +A.aqe.prototype={} +A.BT.prototype={ +OU(a,b,c,d,e,f,g,h,i,j,k,l,m){this.ax.an(0,this.gayM())}, +gOd(){var s=this.p1 +return s==null?null:s.i(0,this.k4)}, +sa1(a,b){this.k4=b +this.a8B()}, +sa0r(a){if(this.p1!==a){this.p1=a +this.a8B()}}, +aX(){}, +b4(a){var s=this.gOd() +if(s!=null)s.MN(a,this.S$,this.ax)}, +a8B(){var s,r,q,p,o,n=this +if(n.p2){s=n.p3=!0 +r=n.gOd() +if(r==null)q=null +else{r=r.c +p=new Float64Array(2) +new A.a(p).p(r.c-r.a,r.d-r.b) +p=p[0] +q=p}if(q==null)q=0 +r=n.gOd() +if(r==null)o=null +else{r=r.c +p=new Float64Array(2) +new A.a(p).p(r.c-r.a,r.d-r.b) +p=p[1] +o=p}if(o==null)o=0 +r=n.ax +p=r.a +if(p[0]===q?p[1]!==o:s){r.mJ(q,o) +r.D()}n.p3=!1}}, +ayN(){if(this.p2&&!this.p3)this.p2=!1}, +$ib5:1} +A.aqf.prototype={} +A.I8.prototype={} +A.qb.prototype={ +sd7(a,b){if(this.k4!==b){this.apz(0,b) +this.aS=-1}}, +n(a){return this.zS()}, +aX(){if(this.b2==null)this.zS()}, +qd(){var s,r=this,q={},p=r.a5 +B.b.af(p) +q.a=0 +s=r.aa?r.ax.a[0]:r.b6.a +B.b.al(A.b(r.k4.split(" "),t.T),new A.aV7(q,r,s)) +r.ao=p.length +r.av=q.a +r.sC(0,r.a7i())}, +gWK(a){var s=this.aM,r=this.k4 +return s>=r.length*this.b6.c+0}, +gGU(){var s=this.a5 +return A.bGb(new A.W(s,new A.aV4(),A.a5(s).h("W<1,k>")))}, +gK4(){var s=this,r=s.b6.c +return r===0?s.gGU():Math.min(B.c.eY(s.aM,r),s.gGU())}, +gacN(){var s,r,q,p,o=this.gK4() +for(s=this.a5,r=0,q=0;p=s.length,qo)return q}return p-1}, +a7i(){var s,r,q,p,o,n,m,l,k,j=this,i={} +if(j.aa)return j.ax +else{s=j.b6 +r=s.b +if(s.e){i.a=i.b=0 +q=j.gK4() +p=j.gacN() +s=j.a5 +o=B.b.cI(s,0,p+1) +n=new A.W(o,new A.aV5(i,j,p,q),A.a5(o).h("W<1,T>")).oM(0,B.hc) +o=r.ge_() +i=j.av +i===$&&A.c() +s=s.length +m=r.gcO(0) +r=r.gcX(0) +l=new A.a(new Float64Array(2)) +l.p(n+o,i*s+(m+r)) +return l}else{i=r.ge_() +o=j.av +o===$&&A.c() +m=j.ao +m===$&&A.c() +l=r.gcO(0) +r=r.gcX(0) +k=new A.a(new Float64Array(2)) +k.p(s.a+i,o*m+(l+r)) +return k}}}, +b4(a){var s +if(this.b2==null)return +a.bU(0) +a.au(0,1/this.K) +s=this.b2 +s.toString +a.mg(0,s,B.h,$.bxX()) +a.bw(0)}, +adk(a){}, +axM(a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2=this +a2.adk(a3) +s=a2.gacN()+1 +r=a2.ax.a +q=a2.b6 +p=q.b +o=r[0]-p.ge_() +n=r[1]-(p.gcO(0)+p.gcX(0)) +for(r=a2.a5,m=a2.ok,l=p.a,k=a2.S,j=k.a,p=p.b,k=k.b,i=s-1,q=q.c,h=q===0,g=a2.bB,f=a2.ct,e=0,d=0;da2.bD){a2.bD=b +g.sm(0,g.a+1) +f.sm(0,a2.bD+a2.av)}e+=J.bo(r[d])}}, +zS(){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j +var $async$zS=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:k=q.a7i() +j=q.b2 +if(j!=null&&!q.bp.G(0,j)){q.bp.E(0,j) +A.vb(B.b2,new A.aV6(q,j),t.P)}p=$.G() +o=p.lu() +n=q.K +m=k.a2(0,n).a +l=p.lt(o,new A.A(0,0,0+m[0],0+m[1])) +l.au(0,n) +q.axM(l) +s=2 +return A.x(A.a8J(o.jT(),B.c.d0(m[0]),B.c.d0(m[1])),$async$zS) +case 2:q.b2=b +q.sC(0,k) +return A.p(null,r)}}) +return A.q($async$zS,r)}, +a8(a,b){var s=this +s.aM+=b +if(s.aS!==s.gK4())s.zS() +s.aS=s.gK4() +if(s.gWK(0))if(!s.dg)s.dg=!0}, +h3(){this.p7() +var s=this.b2 +if(s!=null)s.t() +this.b2=null}} +A.aV7.prototype={ +$1(a){var s,r,q,p,o,n=A.b(a.split("\n"),t.T),m=this.b,l=m.a5 +if(l.length===0){s=n[0] +r=s}else{r=A.j(B.b.ga_(l)) +q=n[0] +s=r+" "+A.j(q) +r=q}p=m.ok.jm(s).goG() +q=this.a +q.a=Math.max(q.a,p.d+p.e) +q=p.c +if(q>m.M)m.M=q +if(q<=this.c-m.b6.b.ge_())o=l.length!==0 +else o=l.length!==0&&J.f(B.b.ga_(l),"") +if(o){B.b.sa_(l,A.j(B.b.ga_(l))+" "+A.j(r)) +B.b.di(n,0) +if(n.length!==0)B.b.I(l,n)}else B.b.I(l,n)}, +$S:26} +A.aV4.prototype={ +$1(a){return a.length}, +$S:49} +A.aV5.prototype={ +$1(a){var s=this,r=s.a,q=r.b,p=q=s.a&&!s.c)this.eb()}} +A.a1b.prototype={ +aX(){var s=0,r=A.r(t.H),q=this,p +var $async$aX=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:q.amY() +p=q.p2 +p===$&&A.c() +q.aM=p.l6(null).gqU() +return A.p(null,r)}}) +return A.q($async$aX,r)}, +d9(a){var s,r,q=this.aS +q===$&&A.c() +s=this.ao.a +r=A.S(B.c.ai(255*Math.min(Math.max(A.hg(q.az(0,a)),0),1)),s>>>16&255,s>>>8&255,s&255) +s=this.p2 +s===$&&A.c() +s.l6(null).sqU(new A.MO(r,B.mz,null,B.uP))}, +bF(a){var s +this.a0I(0) +s=this.p2 +s===$&&A.c() +s.l6(null).sqU(this.aM)}} +A.p8.prototype={ +aX(){var s,r,q=this +q.cD() +s=q.e +for(;s instanceof A.f1;)s=s.e +r=A.w(q).h("p8.T") +if(r.b(s))q.p2=s +else throw A.d(A.af("Can only apply this effect to "+A.ay(r).j(0)))}} +A.M2.prototype={ +gew(){return this.c.az(0,this.b/this.a)}} +A.a27.prototype={ +gbt(){return this.a}, +gOg(){return this.c===this.b}, +glr(a){var s +if(this.c===this.b){s=this.a +s=s.glr(s)}else s=!1 +return s}, +gew(){return this.c===this.b?this.a.gew():0}, +eE(a,b){var s,r=this,q=r.c,p=r.b +if(q===p)return r.a.eE(0,b) +q=r.c=q+b +if(q>p){s=r.a.eE(0,q-p) +r.c=p +return s}else return 0}, +j_(a){var s=this,r=s.c +r=r===s.b?s.c=r-s.a.j_(a):s.c=r-a +if(r<0){s.c=0 +return-r}return 0}, +lM(){this.c=0 +this.GM()}, +mG(){this.c=this.b +this.Oy()}} +A.ahJ.prototype={} +A.a31.prototype={ +glr(a){return this.b===this.a}, +eE(a,b){var s=this.b+=b,r=this.a +if(s>r){this.b=r +return s-r}return 0}, +j_(a){var s=this.b-=a +if(s<0){this.b=0 +return 0-s}return 0}, +lM(){this.b=0}, +mG(){this.b=this.a}} +A.fA.prototype={ +gOg(){return!0}, +iW(a){}} +A.m6.prototype={ +gbt(){return this.a}, +glr(a){return!1}, +gew(){return this.a.gew()}, +eE(a,b){var s,r +for(s=this.a,r=b;!0;){r=s.eE(0,r) +if(r===0)break +s.lM()}return 0}, +j_(a){var s,r +for(s=this.a,r=a;!0;){r=s.j_(r) +if(r===0)break +s.mG()}return 0}} +A.ake.prototype={} +A.pB.prototype={ +gew(){var s=this.b,r=this.a +return s===r?1:s/r}} +A.rr.prototype={ +lM(){this.gbt().lM()}, +mG(){this.gbt().mG()}, +iW(a){this.gbt().iW(a)}} +A.PO.prototype={ +gew(){return this.c}} +A.a9y.prototype={ +gbt(){return this.a}, +glr(a){var s=this.a +return s.b===s.a}, +gew(){return this.a.c}, +eE(a,b){return this.a.eE(0,b)}, +j_(a){return this.a.j_(a)}, +lM(){this.GM() +this.a5I()}, +a5I(){var s=this.b +this.a.a=-Math.log(1-s.a.aV())*s.b}} +A.aOH.prototype={} +A.b1D.prototype={} +A.anF.prototype={} +A.aao.prototype={ +gbt(){return this.a}, +gew(){return this.a.gew()}, +glr(a){return this.c===0}, +eE(a,b){var s=this,r=s.a,q=r.eE(0,b) +while(!0){if(!(q>0&&s.c>0))break +if(--s.c!==0){r.lM() +q=r.eE(0,q)}}if(s.c===1&&r.glr(r))--s.c +return q}, +j_(a){var s,r,q,p=this +if(p.c===0&&a>0)p.c=1 +s=p.a +r=s.j_(a) +q=p.b +while(!0){if(!(r>0&&p.c0&&s.b0&&s.b>0))break +q=r[--s.b].j_(q)}return q}, +lM(){this.b=0 +B.b.al(this.a,new A.aSq())}, +mG(){var s=this.a +this.b=s.length-1 +B.b.al(s,new A.aSp())}, +iW(a){return B.b.al(this.a,new A.aSo(a))}} +A.aSq.prototype={ +$1(a){return a.lM()}, +$S:160} +A.aSp.prototype={ +$1(a){return a.mG()}, +$S:160} +A.aSo.prototype={ +$1(a){return a.iW(this.a)}, +$S:160} +A.HJ.prototype={ +gew(){return Math.sin(6.283185307179586*this.b/this.a)}} +A.wy.prototype={ +gbt(){return this.a}, +glr(a){var s=this.a +return s.b===s.a}, +gew(){return this.a.gew()}, +eE(a,b){var s,r=this +if(!r.d){r.d=!0 +s=r.c +s===$&&A.c() +r.a.a=s.LJ(0)/r.b}return r.a.eE(0,b)}, +j_(a){var s=this.a.j_(a) +if(s>0)this.d=!1 +return s}, +mG(){this.d=!1 +this.Oy()}, +lM(){this.d=!1 +this.GM()}, +iW(a){t.k_.a(a) +this.c=a +this.anI(a)}} +A.aq5.prototype={} +A.IP.prototype={ +gew(){var s,r=this.b/this.c +$label0$0:{if(r<=1){s=r +break $label0$0}if(r>=3){s=r-4 +break $label0$0}s=2-r +break $label0$0}return s}} +A.f1.prototype={ +bF(a){var s=this +s.at.lM() +s.CW=s.ch=s.cy=!1 +s.cx=0}, +a8(a,b){var s,r=this,q=r.CW +if(q)return +if(!r.ch&&r.at.gOg()){r.ch=!0 +r.rq(0)}q=r.at +q.eE(0,b) +if(r.ch){s=q.gew() +r.d9(s) +r.cx=s}if(!r.CW&&q.glr(q)){r.CW=!0 +r.agg(0) +if(r.ax)r.eb()}}, +eE(a,b){var s,r,q,p=this +if(!p.ch&&p.at.gOg()){p.ch=!0 +p.rq(0)}s=p.at +r=s.eE(0,b) +if(p.ch){q=s.gew() +p.d9(q) +p.cx=q}if(!p.CW&&s.glr(s)){p.CW=!0 +p.agg(0)}return r}, +j_(a){var s,r,q,p=this +if(p.CW&&a>0)p.CW=!1 +s=p.at +r=s.j_(a) +if(p.ch){q=s.gew() +p.d9(q) +p.cx=q}return r}, +rq(a){}, +agg(a){var s=this.ay +if(s!=null)s.$0() +this.db=null}} +A.ej.prototype={ +aX(){var s,r,q=this +if(q.df$==null){s=q.yq().pI(0,new A.aD3()) +r=A.w(q).h("ej.T") +if(!r.b(s))throw A.d(A.af("Can only apply this effect to "+A.ay(r).j(0))) +q.df$=r.a(s)}}} +A.aD3.prototype={ +$1(a){return!(a instanceof A.f1)}, +$S:64} +A.a75.prototype={ +rq(a){var s,r,q,p=this +p.b2=new A.a(new Float64Array(2)) +p.bB=0 +s=p.aM +s===$&&A.c() +s=s.qh(0) +s.toString +if(p.ao){p.bB=-s.gko(0) +r=p.df$ +r.toString +t.Vx.a(r) +r.sko(0,-s.gko(0)) +if(r instanceof A.au){q=r.at +q.c=q.c+r.ch +q.b=!0 +q.D()}}if(p.av){r=p.df$ +r=r.gbe(r) +s=s.a +q=s.a +p.b2.sN(0,q) +r.sN(0,q) +q=p.df$ +q=q.gbe(q) +s=s.b +p.b2.sO(0,s) +q.sO(0,s)}}, +d9(a){var s,r,q,p,o,n=this,m=n.aS +m===$&&A.c() +s=n.aM +s===$&&A.c() +r=s.qh(a*m) +q=r.a +m=n.df$ +m=m.gbe(m) +s=m.a[0] +p=q.a +o=n.b2 +o===$&&A.c() +m.sN(0,s+(p-o.a[0])) +o=n.df$ +o=o.gbe(o) +s=q.b +o.sO(0,o.a[1]+(s-n.b2.a[1])) +n.b2.sN(0,p) +n.b2.sO(0,s) +if(n.ao){m=n.df$ +m.toString +t.Vx.a(m) +s=m.gko(m) +p=r.gko(0) +o=n.bB +o===$&&A.c() +m.sko(0,s+(-p-o)) +n.bB=-r.gko(0)}}, +LJ(a){var s=this.aS +s===$&&A.c() +return s}} +A.a76.prototype={ +d9(a){var s=this.cx,r=this.df$ +r.sbe(0,r.gbe(r).X(0,this.av.a2(0,a-s)))}, +LJ(a){return Math.sqrt(this.av.gd2())}} +A.OZ.prototype={$iAj:1} +A.alE.prototype={} +A.a77.prototype={ +rq(a){var s=this.df$ +this.ao.v(this.av.Y(0,s.gbe(s)))}, +d9(a){var s=this.cx,r=this.df$ +r.sbe(0,r.gbe(r).X(0,this.ao.a2(0,a-s)))}, +LJ(a){return Math.sqrt(this.ao.gd2())}} +A.a7T.prototype={ +d9(a){var s=this,r=s.cx,q=s.df$.S$,p=B.c.bX((q.gA(q).a>>>24&255)/255+s.p3+s.p2*(a-r),0,1) +s.df$.sh5(0,p) +r=s.df$.S$ +s.p3=p-(r.gA(r).a>>>24&255)/255}, +bF(a){this.a0I(0) +this.p3=0}} +A.amn.prototype={ +rq(a){var s=this.df$.S$ +this.p2=this.aM-(s.gA(s).a>>>24&255)/255}} +A.amm.prototype={} +A.a9Q.prototype={ +d9(a){var s +if(a===1){s=this.p2 +s===$&&A.c() +s.eb()}}} +A.R9.prototype={ +d9(a){var s=this.cx,r=this.df$ +r.sko(0,r.gko(r)+this.p2*(a-s))}, +LJ(a){return this.p2}, +$iAj:1} +A.aoW.prototype={ +rq(a){var s=this.df$ +this.p2=this.ao-s.gko(s)}} +A.aoV.prototype={} +A.Rg.prototype={ +rq(a){var s,r,q,p,o=this,n=o.df$ +n=n.giE(n).a[0] +s=o.p2.a +r=s[0] +q=o.df$ +q=q.giE(q).a[1] +s=s[1] +p=new A.a(new Float64Array(2)) +p.p(n*(r-1),q*(s-1)) +o.p3=p}, +d9(a){var s=this.cx,r=this.df$,q=r.giE(r),p=this.p3 +p===$&&A.c() +r.siE(0,q.X(0,p.a2(0,a-s)))}} +A.ap7.prototype={ +rq(a){var s=this.df$ +this.p3=this.aM.Y(0,s.giE(s))}} +A.ap6.prototype={} +A.b8T.prototype={ +$1(a){return a.ax=!1}, +$S:95} +A.abk.prototype={ +d9(a){}, +oQ(a){this.a8(0,a)}} +A.apv.prototype={ +glr(a){return this.d}, +gew(){return(this.c+1)/this.a.length}, +eE(a,b){var s,r,q,p,o,n=this +for(s=n.a,r=n.b,q=b;!0;){p=n.c +if(p>=0){q=s[p].eE(0,q) +if(q>0){p=++n.c +o=s.length +if(p===o)if(r)n.c=-1 +else{n.c=o-1 +n.d=!0 +break}}}else{o=s.length +q=s[p+o].j_(q) +if(q>0){p=--n.c +o=-s.length +if(p0)o.d=!1 +for(s=o.a,r=a;!0;){q=o.c +if(q>=0){r=s[q].j_(r) +if(r>0)if(--o.c<0){o.c=0 +break}}else{p=s.length +r=s[q+p].eE(0,r) +if(r>0)if(++o.c===0)o.c=s.length-1}if(r===0)break}return r}, +mG(){var s=this,r=s.a,q=r.length +if(s.b){s.c=-q +B.b.al(r,new A.b6y())}else{s.c=q-1 +B.b.al(r,new A.b6z())}s.d=!0}, +lM(){this.c=0 +this.d=!1 +B.b.al(this.a,new A.b6A())}} +A.b6y.prototype={ +$1(a){return a.bF(0)}, +$S:95} +A.b6z.prototype={ +$1(a){a.at.mG() +a.CW=a.ch=!0 +a.cx=1 +return null}, +$S:95} +A.b6A.prototype={ +$1(a){return a.bF(0)}, +$S:95} +A.S_.prototype={ +d9(a){var s=this,r=s.cx,q=s.df$ +q.sC(0,q.gC(q).X(0,s.p2.a2(0,a-r))) +r=s.df$ +r.gC(r).JB(0,1/0)}} +A.apS.prototype={ +rq(a){var s=this.df$ +this.p2=this.ao.Y(0,s.gC(s))}} +A.apR.prototype={} +A.jB.prototype={ +agc(a){}, +wg(a){}, +agb(a){}, +$iy:1} +A.ex.prototype={ +wh(a,b){this.f5$=!0}, +pW(a){}, +pV(a,b){this.f5$=!1}, +u3(a){var s=new A.a(new Float64Array(2)) +s.p(0,0) +return this.pV(0,new A.a2N(a.c,s))}, +$iy:1} +A.NJ.prototype={ +Yh(){}, +M_(){}} +A.b_.prototype={ +cb(a){}, +iX(a){}, +rr(a){}, +$iy:1} +A.N2.prototype={ +a8(a,b){var s=this.b +s===$&&A.c() +return this.a.aes(s,b)}, +Vp(a,b){var s=this.b +s===$&&A.c() +return this.a.aeq(s,b)}, +bq(a){var s=this.b +s===$&&A.c() +return this.a.aep(s)}} +A.My.prototype={ +gBz(){return A.X(A.iO(this,A.jH(B.lh,"gb_A",1,[],[],0)))}, +gL(a){return 20260645}, +k(a,b){if(b==null)return!1 +return b instanceof A.My}, +$ii3:1} +A.a2K.prototype={ +aDH(a){a.UM(new A.aBS(this,a),this.gaC(),t.Di)}, +aDI(a){var s=this.at +s.al(0,new A.aBT(a)) +s.af(0)}, +aDG(a){var s=this.at +s.al(0,new A.aBR(a)) +s.af(0)}, +aX(){this.gaC().gmA().m2(0,A.bue(),new A.aBX(this),t.TF)}, +h3(){this.gaC().gmA().Z3(0,t.TF) +this.gaC().gc8().P(0,B.cB)}} +A.aBS.prototype={ +$1(a){a.wg(this.b) +this.a.at.E(0,a)}, +$S:158} +A.aBT.prototype={ +$1(a){return a.agc(this.a)}, +$S:158} +A.aBR.prototype={ +$1(a){return a.agb(this.a)}, +$S:158} +A.aBX.prototype={ +$1(a){var s=this.a +a.f=new A.aBU(s) +a.w=new A.aBV(s) +a.r=new A.aBW(s)}, +$S:151} +A.aBU.prototype={ +$1(a){var s=this.a,r=s.gaC(),q=a.a,p=new A.a(new Float64Array(2)) +p.p(q.a,q.b) +return s.aDH(new A.a2M(r,p,A.b([],t.d)))}, +$S:19} +A.aBV.prototype={ +$0(){return this.a.aDG(new A.aBQ())}, +$S:0} +A.aBW.prototype={ +$0(){return this.a.aDI(new A.aBY())}, +$S:0} +A.aic.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.P0.prototype={ +gBz(){return A.X(A.iO(this,A.jH(B.lh,"gb_D",1,[],[],0)))}, +gL(a){return 91604879}, +k(a,b){if(b==null)return!1 +return b instanceof A.P0}, +$ii3:1} +A.a78.prototype={ +wh(a,b){var s=this.e +s.toString +b.UM(new A.aL4(this,b),t.J.a(s),t.Gm)}, +pW(a){var s,r,q,p=A.C(t.Ly),o=this.e +o.toString +a.Df(!0,new A.aL5(this,a,p),t.J.a(o),t.Gm) +for(o=this.at,o=A.cT(o,o.r,A.w(o).c),s=a.CW,r=o.$ti.c;o.H();){q=o.d +if(q==null)q=r.a(q) +if(q.a===s&&!p.G(0,q))q.b.pW(a)}}, +pV(a,b){this.at.xI(new A.aL3(b),!0)}, +u3(a){this.at.xI(new A.aL2(a),!0)}, +aer(a,b){var s,r,q,p=this.e +p.toString +t.J.a(p) +s=b.d +if(s==null)s=B.c8 +r=b.b +q=new A.a(new Float64Array(2)) +q.p(r.a,r.b) +this.wh(0,new A.a2P(a,s,p,q,A.b([],t.d)))}, +aes(a,b){var s,r,q,p,o,n=this.e +n.toString +t.J.a(n) +s=b.a +if(s==null)s=B.G +r=b.d +q=r.a +r=r.b +p=new A.a(new Float64Array(2)) +p.p(q,r) +o=new A.a(new Float64Array(2)) +o.p(q,r) +r=b.b +q=new A.a(new Float64Array(2)) +q.p(r.a,r.b) +this.pW(new A.a2Q(a,s,n,p,o.X(0,q),A.b([],t.Qc)))}, +aeq(a,b){var s=b.a.a,r=new A.a(new Float64Array(2)) +r.p(s.a,s.b) +this.pV(0,new A.a2N(a,r))}, +aep(a){this.u3(new A.aC_(a))}, +aX(){var s=this.e +s.toString +t.J.a(s).gmA().m2(0,A.biC(),new A.aL7(this),t.Tc)}, +h3(){var s,r=this.e +r.toString +s=t.J +s.a(r).gmA().Z3(0,t.Tc) +r=this.e +r.toString +s.a(r).gc8().P(0,B.bm)}, +gahQ(){var s=this.e +s.toString +s=t.J.a(s).fr$ +s.toString +return s}} +A.aL4.prototype={ +$1(a){var s=this.b +this.a.at.E(0,new A.kO(s.Q,a,t.Ly)) +a.wh(0,s)}, +$S:205} +A.aL5.prototype={ +$1(a){var s=this.b,r=new A.kO(s.CW,a,t.Ly) +if(this.a.at.G(0,r)){a.pW(s) +this.c.E(0,r)}}, +$S:205} +A.aL3.prototype={ +$1(a){var s=this.a +if(a.a===s.c){a.b.pV(0,s) +return!0}return!1}, +$S:200} +A.aL2.prototype={ +$1(a){var s=this.a +if(a.a===s.c){a.b.u3(s) +return!0}return!1}, +$S:200} +A.aL7.prototype={ +$1(a){a.f=new A.aL6(this.a)}, +$S:133} +A.aL6.prototype={ +$1(a){return A.beT(this.a,a)}, +$S:134} +A.P6.prototype={ +gBz(){return A.X(A.iO(this,A.jH(B.lh,"gb_E",1,[],[],0)))}, +gL(a){return 401913931}, +k(a,b){if(b==null)return!1 +return b instanceof A.P6}, +$ii3:1} +A.P5.prototype={ +cb(a){var s=this.e +s.toString +a.UM(new A.aLs(this,a),t.J.a(s),t.CL)}, +aWp(a){var s=this.e +s.toString +a.Df(!0,new A.aLq(this,a),t.J.a(s),t.CL)}, +iX(a){var s=this.e +s.toString +a.Df(!0,new A.aLt(this,a),t.J.a(s),t.CL)}, +aJV(a){this.at.xI(new A.aLp(a),!0)}, +X4(a){}, +X5(a){this.aJV(new A.aUT(a))}, +X7(a,b){var s=this.e +s.toString +this.cb(A.bq4(a,t.J.a(s),b))}, +X9(a,b){var s,r,q=this.e +q.toString +t.J.a(q) +s=b.a +r=new A.a(new Float64Array(2)) +r.p(s.a,s.b) +this.iX(new A.ad_(a,b.c,q,r,A.b([],t.d)))}, +WW(a,b){var s=this.e +s.toString +this.aWp(A.bq4(a,t.J.a(s),b))}, +aX(){var s=this.e +s.toString +t.J.a(s).gmA().m2(0,A.av8(),new A.aLr(this),t.Sw)}, +h3(){var s,r=this.e +r.toString +s=t.J +s.a(r).gmA().Z3(0,t.Sw) +r=this.e +r.toString +s.a(r).gc8().P(0,B.w)}, +$iAp:1} +A.aLs.prototype={ +$1(a){var s=this.b +this.a.at.E(0,new A.kO(s.Q,a,t.HF)) +a.cb(s)}, +$S:138} +A.aLq.prototype={ +$1(a){this.a.at.G(0,new A.kO(this.b.Q,a,t.HF))}, +$S:138} +A.aLt.prototype={ +$1(a){var s=this.b +if(this.a.at.P(0,new A.kO(s.Q,a,t.HF)))a.iX(s)}, +$S:138} +A.aLp.prototype={ +$1(a){var s=this.a +if(a.a===s.c){a.b.rr(s) +return!0}return!1}, +$S:360} +A.aLr.prototype={ +$1(a){var s +a.y=A.dE(0,300) +s=this.a +a.w=s.gE0() +a.f=s.gvZ() +a.r=s.gw_() +a.x=s.gE1() +a.z=s.gWV()}, +$S:83} +A.Q1.prototype={ +kB(a,b){var s,r,q,p,o,n=t.Nl,m=A.C(n),l=this.e +l.toString +b.Df(!0,new A.aNX(this,b,m),t.J.a(l),t.Jm) +s=A.C(n) +for(n=this.at,l=A.cT(n,n.r,A.w(n).c),r=b.Q,q=l.$ti.c;l.H();){p=l.d +if(p==null)p=q.a(p) +if(p.a===r&&!m.G(0,p)){o=p.b +if(o.mj$){o.mj$=!1 +o.M_()}s.E(0,p)}}n.ahF(s)}, +aAs(a){var s,r,q,p,o,n=this.e +n.toString +t.J.a(n) +s=a.gbP() +r=a.ghi(a) +q=a.gme() +p=new A.a(new Float64Array(2)) +p.p(q.a,q.b) +q=a.gbe(a) +o=new A.a(new Float64Array(2)) +o.p(q.a,q.b) +this.kB(0,new A.a91(s,r,p,n,o,A.b([],t.d)))}, +aX(){var s=this.e +s.toString +t.J.a(s) +s.dy$=this.gaAr() +s.zU()}, +h3(){var s,r=this.e +r.toString +s=t.J +s.a(r) +r.dy$=null +r.zU() +r=this.e +r.toString +s.a(r).gc8().P(0,B.mE)}} +A.aNX.prototype={ +$1(a){var s=this.b,r=new A.kO(s.Q,a,t.Nl) +this.a.at.E(0,r) +this.c.E(0,r) +s=s.c +if(a.jh(s.length===0?$.bwU():B.b.ga_(s))){if(!a.mj$){a.mj$=!0 +a.Yh()}}else if(a.mj$){a.mj$=!1 +a.M_()}}, +$S:362} +A.OY.prototype={ +gBz(){return A.X(A.iO(this,A.jH(B.lh,"gb_I",1,[],[],0)))}, +gL(a){return B.d.gL("MouseMoveDispatcherKey")}, +k(a,b){var s="MouseMoveDispatcherKey" +if(b==null)return!1 +return b instanceof A.OY&&B.d.gL(s)===B.d.gL(s)}, +$ii3:1} +A.a7c.prototype={ +Yb(a,b,c){}, +Yc(a,b){}, +agd(a,b,c){}, +u3(a){}, +aer(a,b){this.Yb(0,a,A.bml(this,b))}, +aes(a,b){this.Yc(a,A.bmm(this,b))}, +aeq(a,b){this.agd(0,a,new A.a2O(!1,b))}, +aep(a){this.u3(a)}} +A.Gf.prototype={ +Md(a,b){}, +Me(a,b){}, +rr(a){}, +X4(a){return null}, +X5(a){return this.rr(a)}, +X7(a,b){this.Md(a,A.aUV(this,b))}, +X9(a,b){this.Me(a,A.bq6(this,b))}, +WW(a,b){A.aUV(this,b)}} +A.NE.prototype={ +sagP(a){var s,r,q,p,o,n,m=this +if(a===m.ay)return +m.ay=a +s=$.f6.r2$ +for(r=m.at,q=r.length,p=0;p") +B.b.I(p.at,A.jc(new A.bk(s,r),r.h("z.E"))) +p.sagP(!1)}, +h3(){var s,r,q,p=this +p.p7() +s=$.f6.aS$ +s===$&&A.c() +r=p.ga5t() +if(s.d){q=s.e +B.b.P(q==null?s.e=A.ab(s.c,!0,t.nH):q,r)}else B.b.P(s.c,r) +p.sagP(!0) +B.b.af(p.at)}} +A.a2u.prototype={ +gabL(){var s,r=this,q=r.y +if(q===$){s=r.f.JM(r.x) +r.y!==$&&A.N() +r.y=s +q=s}return q}, +abX(a){var s,r=this,q=r.gabL(),p=r.Q +if(p===$){s=r.f.JM(r.z) +r.Q!==$&&A.N() +r.Q=s +p=s}return a.vr(new A.JL(p,q),r.c,new A.aBp(),new A.aBq())}} +A.aBp.prototype={ +$2(a,b){var s=a.wn(b.b),r=a.wn(b.a) +if(s==null||r==null)return null +return new A.JL(r,s)}, +$S:364} +A.aBq.prototype={ +$2(a,b){return!0}, +$S:365} +A.aBQ.prototype={} +A.a2M.prototype={} +A.aBY.prototype={} +A.aC_.prototype={ +j(a){return"DragCancelEvent(pointerId: "+this.c+")"}} +A.a2N.prototype={ +j(a){return"DragEndEvent(pointerId: "+this.c+", velocity: "+this.d.j(0)+")"}} +A.a2P.prototype={ +j(a){var s=this +return"DragStartEvent(canvasPosition: "+s.gCN().j(0)+", devicePosition: "+s.r.j(0)+", pointedId: "+s.Q+", deviceKind: "+s.as.j(0)+")"}} +A.a2Q.prototype={ +j(a){var s=this,r=s.c +return"DragUpdateEvent(devicePosition: "+s.x.j(0)+", canvasPosition: "+s.gabL().j(0)+", delta: "+B.b.ga_(r).a.Y(0,B.b.ga_(r).b).j(0)+", pointerId: "+s.CW+", timestamp: "+s.cx.j(0)+")"}} +A.aDH.prototype={} +A.on.prototype={ +Df(a,b,c,d){var s,r,q +for(s=this.abX(c).gar(0),r=new A.nA(s,d.h("nA<0>"));r.H();){q=d.a(s.ga1(0)) +this.b=a +b.$1(q) +if(!this.b){B.b.af($.o_) +break}}}, +UM(a,b,c){return this.Df(!1,a,b,c)}} +A.a91.prototype={ +j(a){var s=this +return"PointerMoveEvent(devicePosition: "+s.r.j(0)+", canvasPosition: "+s.gCN().j(0)+", delta: "+s.at.j(0)+", pointerId: "+s.Q+", timestamp: "+s.as.j(0)+")"}} +A.a9b.prototype={ +gCN(){var s,r=this,q=r.w +if(q===$){s=r.f.JM(r.r) +r.w!==$&&A.N() +r.w=s +q=s}return q}, +abX(a){return a.aO2(this.gCN(),this.c)}} +A.aUT.prototype={ +j(a){return"TapCancelEvent(pointerId: "+this.c+")"}} +A.acX.prototype={ +j(a){var s=this +return"TapDownEvent(canvasPosition: "+s.gCN().j(0)+", devicePosition: "+s.r.j(0)+", pointerId: "+s.Q+", deviceKind: "+s.as.j(0)+")"}} +A.ad_.prototype={ +j(a){var s=this +return"TapUpEvent(canvasPosition: "+s.gCN().j(0)+", devicePosition: "+s.r.j(0)+", pointerId: "+s.Q+", deviceKind: "+s.as.j(0)+")"}} +A.kO.prototype={ +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return this.$ti.b(b)&&b.a===this.a&&b.b===this.b}} +A.qS.prototype={ +gbC(){return this.a}, +CA(){var s,r=this.a.a,q=r[0] +r=r[1] +s=$.G().Z() +s.hq(A.jT(new A.i(q,r),this.b)) +return s}, +jQ(a,b){var s,r=$.biY() +r.v(b) +r.aq(0,this.a) +s=this.b +return r.gd2()<=s*s}, +Y3(a){var s,r,q=this.b +if(q===0)return this.a +s=$.biY() +s.v(a) +r=this.a +s.aq(0,r) +s.sF(0,q) +s.E(0,r) +return s}, +YW(a,b){var s,r,q,p,o,n=a.aV()*6.283185307179586,m=this.b +if(b)m=a.aV()*m +s=Math.cos(n) +r=Math.sin(n) +q=this.a.a +p=q[0] +q=q[1] +o=new A.a(new Float64Array(2)) +o.p(p+m*s,q+m*r) +return o}, +j(a){var s=this.a.a +return"Circle(["+A.j(s[0])+", "+A.j(s[1])+"], "+A.j(this.b)+")"}} +A.a94.prototype={ +a5J(){var s,r={},q=this.a +r.a=B.b.ga_(q) +s=A.a5(q).h("W<1,a>") +this.b=A.ab(new A.W(q,new A.aOa(r),s),!1,s.h("aI.E"))}, +awZ(){var s,r=this,q={} +q.a=q.b=0 +s=r.b +s===$&&A.c() +q.c=B.b.ga_(s) +B.b.al(r.b,new A.aO9(q)) +s=q.b +if(s=e&&i[1]>=g}else i=!1}else i=!1 +if(!i)return!1 +i=j.a +s=i.length +h=j.c +h===$&&A.c() +if(h){for(r=0;re)){f=l.a +k=f[1] +if(!(k===q&&f[0]>e))if(h>q!==k>q){f=f[0] +f=(q-k)*(g-f)/(h-k)>=e-f +h=f}else h=!1 +else h=!0}else h=!0 +if(h)++o}return(o&1)===1}}, +j(a){return"Polygon("+A.j(this.a)+")"}, +YW(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g=this +if(b){s=new Float64Array(2) +r=new A.a(s) +for(q=g.gTk().a.a,p=g.gTk().b.a;!0;){o=q[0] +n=a.aV() +m=p[0] +l=q[0] +k=q[1] +j=a.aV() +i=p[1] +h=q[1] +s[0]=o+n*(m-l) +s[1]=k+j*(i-h) +if(g.jQ(0,r))return r}}else return A.boK(g.a,a)}} +A.aOa.prototype={ +$1(a){var s=this.a,r=a.Y(0,s.a) +s.a=a +return r}, +$S:61} +A.aO9.prototype={ +$1(a){var s=this.a,r=a.bS(s.c) +s.c=a +if(r>=0)++s.b +if(r<=0)++s.a}, +$S:58} +A.H1.prototype={ +gbC(){var s=this,r=s.a,q=s.c,p=s.b,o=s.d,n=new A.a(new Float64Array(2)) +n.p((r+q)/2,(p+o)/2) +return n}, +CA(){var s=this,r=$.G().Z() +r.m3(new A.A(s.a,s.b,s.c,s.d)) +return r}, +jQ(a,b){var s=this,r=b.a,q=r[0] +if(q>=s.a){r=r[1] +r=r>=s.b&&q<=s.c&&r<=s.d}else r=!1 +return r}, +Y3(a){var s=this,r=$.bxv(),q=a.a +r.p(B.c.bX(q[0],s.a,s.c),B.c.bX(q[1],s.b,s.d)) +return r}, +YW(a,b){var s,r,q,p,o,n,m,l,k=this,j=k.a +if(b){s=a.aV() +r=k.c +q=k.a +p=k.b +o=a.aV() +n=k.d +m=k.b +l=new A.a(new Float64Array(2)) +l.p(j+s*(r-q),p+o*(n-m)) +return l}else{s=k.b +r=new A.a(new Float64Array(2)) +r.p(j,s) +s=k.c +j=k.b +q=new A.a(new Float64Array(2)) +q.p(s,j) +j=k.c +s=k.d +p=new A.a(new Float64Array(2)) +p.p(j,s) +s=k.a +j=k.d +o=new A.a(new Float64Array(2)) +o.p(s,j) +return A.boK(A.b([r,q,p,o],t.d),a)}}, +j(a){var s=this +return"Rectangle(["+A.j(s.a)+", "+A.j(s.b)+"], ["+A.j(s.c)+", "+A.j(s.d)+"])"}} +A.aaM.prototype={ +gbC(){var s=this,r=s.a,q=s.c,p=s.b,o=s.d,n=new A.a(new Float64Array(2)) +n.p((r+q)/2,(p+o)/2) +return n}, +CA(){var s=this,r=$.G().Z(),q=s.a,p=s.b,o=s.c,n=s.d,m=s.e +r.h_(A.GS(q,p,o,n,new A.bl(m,m))) +return r}, +jQ(a,b){var s,r,q,p=this,o=b.a,n=o[0],m=o[1] +o=p.a +if(np.c||mp.d)return!1 +s=p.e +r=s-Math.min(n-o,Math.min(p.c-n,s)) +q=s-Math.min(m-p.b,Math.min(p.d-m,s)) +return r*r+q*q<=s*s}, +Y3(a){var s,r,q,p,o=this,n=$.bxD(),m=a.a +n.p(B.c.bX(m[0],o.a,o.c),B.c.bX(m[1],o.b,o.d)) +if(o.jQ(0,n))return n +m=$.bxC() +s=n.a +r=s[0] +q=o.a +p=o.e +q+=p +r=r<=q?q:o.c-p +s=s[1] +q=o.b+p +m.p(r,s<=q?q:o.d-p) +n.v(a) +n.aq(0,m) +n.sF(0,o.e) +n.E(0,m) +return n}, +j(a){var s=this +return"RoundedRectangle(["+A.j(s.a)+", "+A.j(s.b)+"], ["+A.j(s.c)+", "+A.j(s.d)+"], "+A.j(s.e)+")"}} +A.q1.prototype={} +A.mv.prototype={ +O5(a,b,c,d,e){var s,r,q,p=this +p.b=b +if(e!=null){s=p.c +r=e.a +q=e.b +s.a.v(r) +s.b.v(q) +s.Ca()}if(d!=null)p.e.v(d) +p.d=a==null?17976931348623157e292:a +p.a=c}} +A.azi.prototype={ +$1(a){return"([0-9a-fA-F]{"+this.a+"})"}, +$S:78} +A.azj.prototype={ +$1(a){a.toString +return a}, +$S:197} +A.azk.prototype={ +$1(a){return this.a===1?a+a:a}, +$S:45} +A.azl.prototype={ +$1(a){return A.et(a,null,16)}, +$S:49} +A.aNx.prototype={ +$1(a){this.a.t() +return a}, +$S:368} +A.ae.prototype={ +aT(a,b,c,d){var s=this,r=s.k4 +r.ay=s.k3 +s.J(r) +s.J(s.k3)}, +sNm(a){var s=this,r=s.k3 +if(a===r)return +r.eb() +s.k3=s.k4.ay=a +if(a.e==null)s.J(a)}, +sabE(a){var s,r=this +r.k4.eb() +r.k4=a +if(a.e==null)r.J(a) +s=r.k4 +if(s.ay==null)s.ay=r.k3}, +gY5(){var s,r=this.ok +if(r===$){s=A.b([],t.BR) +this.ok!==$&&A.N() +this.ok=s +r=s}return r}, +gC(a){return this.k4.at.gaU()}, +iz(a){var s=0,r=A.r(t.H),q=this,p +var $async$iz=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=q.anA(0) +s=2 +return A.x(t.r.b(p)?p:A.cO(p,t.H),$async$iz) +case 2:q.a|=2 +p=q.b +if(p!=null)p.fl(0) +q.b=null +return A.p(null,r)}}) +return A.q($async$iz,r)}, +oH(){var s,r=this +r.anB() +r.a|=4 +s=r.c +if(s!=null)s.fl(0) +r.c=null +r.a7g()}, +WI(){this.anz() +this.a|=16 +this.d=null}, +b4(a){if(this.e==null)this.k6(a)}, +k6(a){var s,r,q +if(this.e!=null)this.b4(a) +for(s=this.gbQ(0).gar(0),r=s.$ti.y[1];s.H();){q=s.d;(q==null?r.a(q):q).k6(a)}}, +a8(a,b){if(this.e==null)this.oQ(b)}, +oQ(a){var s,r,q,p=this +p.aXQ() +if(p.e!=null)p.a8(0,a) +for(s=p.gbQ(0).gar(0),r=s.$ti.y[1];s.H();){q=s.d;(q==null?r.a(q):q).oQ(a)}p.aXR()}, +fI(a){var s=this +s.anC(a) +s.k4.at.fI(a) +s.mm(a) +s.gbQ(0).al(0,new A.aEd(a))}, +jh(a){var s,r=a.a,q=r[0] +if(q>=0){r=r[1] +if(r>=0){s=this.fx$.a +r=q"),p=0;p") +o=new A.jz(A.ab(new A.ca(this.aPK(),s),!0,s.h("z.E")),$.aa(),a.h("jz<0>")) +this.gY5().push(o) +return o}, +My(a,b){var s,r,q,p +for(s=this.gY5(),r=s.length,q=0;q"))}, +a5M(a){var s,r,q,p,o,n,m,l=this,k=l.as +if(k!=null){a.k2$=k +a.zU()}k=l.x +if(k!=null)for(k=k.ghw(k),k=k.gar(k),s=t.T,r=t.N,q=t.me;k.H();){p=k.ga1(k) +o=a.k1$ +if(o===$){n=A.b([],s) +a.k1$!==$&&A.N() +o=a.k1$=new A.Pz(a,n,A.D(r,q))}o.c.u(0,p.a,new A.aFw(l,p))}k=l.y +if(k!=null){s=a.gnr() +r=s.b +m=r.length +B.b.al(k,s.gatr()) +if(m!==r.length)s.a.Fe(!1)}}} +A.aFw.prototype={ +$2(a,b){return this.b.b.$2(a,this.a.$ti.c.a(b))}, +$S:371} +A.F7.prototype={ +gaUL(){var s=this.e +return s==null?this.e=new A.aFv(this).$0():s}, +a7c(a){var s=this,r=A.bn("result") +try{++s.r +r.shb(a.$0())}finally{--s.r}if(s.w&&s.r===0)A.bFu(s.gRP(),t.H) +return r.bl()}, +aDQ(){var s=this +if(s.r>0)s.w=!0 +else s.aK(new A.aFq(s))}, +aeW(){var s=this,r=s.a,q=r.c +if(q==null){r=r.d.$0() +s.d=r +s.a.a5M(r)}else s.d=q +r=s.d +r===$&&A.c() +r.k3$.push(s.gRP()) +r.LA(B.d8) +s.e=null}, +adb(a){var s=this,r=s.d +r===$&&A.c() +B.b.P(r.k3$,s.gRP()) +s.d.LA(B.iZ) +s.d.WI()}, +aQ4(){return this.adb(!1)}, +bu(){var s,r=this +r.bN() +r.aeW() +r.a.toString +s=A.zg(!0,null,!0,!0,null,null,!1) +r.f=s +s.lF()}, +bH(a){var s=this +s.c7(a) +if(a.c!=s.a.c){s.aQ4() +s.aeW()}}, +t(){var s,r=this +r.bG() +r.adb(!0) +r.a.toString +s=r.f +s===$&&A.c() +s.t()}, +azR(a,b){var s,r=this.d +r===$&&A.c() +s=this.f +s===$&&A.c() +if(!s.gpM())return B.dM +if(t.Bw.b(r)){s=$.f6.aS$ +s===$&&A.c() +s=s.a.gbm(0) +return r.jZ(b,A.jc(s,A.w(s).h("z.E")))}return B.ci}, +ab(a){return this.a7c(new A.aFu(this,a))}} +A.aFv.prototype={ +$0(){var s=0,r=A.r(t.P),q=this,p,o +var $async$$0=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:o=q.a.d +o===$&&A.c() +p=o.iz(0) +s=2 +return A.x(t.r.b(p)?p:A.cO(p,t.H),$async$$0) +case 2:o.oH() +if(!o.id$)o.a8(0,0) +return A.p(null,r)}}) +return A.q($async$$0,r)}, +$S:109} +A.aFq.prototype={ +$0(){return this.a.w=!1}, +$S:0} +A.aFu.prototype={ +$0(){var s,r,q,p,o,n=null,m=this.a,l=m.d +l===$&&A.c() +m.a.toString +s=l.gmA().ab(new A.aa2(l,!0,n)) +l=m.d +r=A.b([t.rs.b(l)||t.Mx.b(l)||l.dy$!=null?A.bR9(l,s):s],t.p) +m.a.toString +l=this.b +B.b.I(r,m.d.gnr().aN2(l)) +m.a.toString +q=m.f +q===$&&A.c() +p=m.d +o=p.k2$ +return A.beV(!1,A.v6(!0,n,A.pK(A.bex(new A.uL(p.mV(0),new A.vy(new A.aFt(m,l,r),n),n),B.r),o,n,n,n,n),n,!0,n,q,!0,n,n,n,m.gazQ(),n,n),n,n,n,n)}, +$S:373} +A.aFt.prototype={ +$2(a,b){var s=this.a +return s.a7c(new A.aFs(s,b,this.b,this.c))}, +$S:374} +A.aFs.prototype={ +$0(){var s,r,q=this,p=null,o=q.b,n=A.U(1/0,o.a,o.b) +o=A.U(1/0,o.c,o.d) +s=new Float64Array(2) +r=new A.a(s) +r.p(n,o) +if(s[0]===0&&s[1]===0){o=q.a.a.f +o=o==null?p:o.$1(q.c) +return o==null?A.dD(p,p,B.y,p,p,p,p,p,p,p):o}o=q.a +n=o.d +n===$&&A.c() +n.fI(r) +n=o.d +if(!n.id$){s=n.fr$ +s=(s==null?p:s.a5)!=null}else s=!1 +if(s)n.a8(0,0) +return A.bf7(new A.aFr(o,q.c,q.d),o.gaUL(),t.H)}, +$S:375} +A.aFr.prototype={ +$2(a,b){var s,r=this,q=b.c +if(q!=null){r.a.a.toString +s=b.d +s.toString +s=A.bmz(q,s) +throw A.d(s)}if(b.a===B.ju)return A.kL(B.bC,r.c,B.a4,B.bB,null) +q=r.a.a.f +q=q==null?null:q.$1(r.b) +return q==null?B.a8x:q}, +$S:376} +A.aFJ.prototype={ +m2(a,b,c,d){var s,r=this.b,q=r.i(0,A.ay(d)),p=q==null +if(p){this.a.u(0,A.ay(d),new A.dU(b,c,d.h("dU<0>"))) +this.c.$0()}s=A.ay(d) +r.u(0,s,(p?0:q)+1)}, +Z3(a,b){var s=this.b,r=s.i(0,A.ay(b)) +r.toString +if(r===1){s.P(0,A.ay(b)) +this.a.P(0,A.ay(b)) +this.c.$0()}else s.u(0,A.ay(b),r-1)}, +ab(a){var s=this.a +if(s.a===0)return a +return new A.lv(a,s,B.b9,!1,null)}, +aTE(a){var s=this +if(t.OI.b(a))s.m2(0,A.bVZ(),new A.aFK(a),t.Tn) +if(t.vF.b(a))s.m2(0,A.bue(),new A.aFL(a),t.TF) +if(t.PC.b(a))s.m2(0,A.bTU(),new A.aFM(a),t.tr) +if(t.T6.b(a))s.m2(0,A.bUZ(),new A.aFN(a),t.BD) +if(t.Dl.b(a))s.m2(0,A.av8(),new A.aFO(a),t.Sw)}} +A.aFK.prototype={ +$1(a){var s=this.a +a.b_=s.ghT() +a.b6=s.gags() +a.ah=s.gw_() +a.ac=s.gvZ()}, +$S:122} +A.aFL.prototype={ +$1(a){var s=this.a +a.r=s.gLZ() +a.f=s.gaS0() +a.w=s.gaW5()}, +$S:151} +A.aFM.prototype={ +$1(a){var s=this.a +a.ay=s.gaSo() +a.ch=s.gaSs() +a.CW=s.gaSu() +a.cx=s.gaSq() +a.cy=s.gYl()}, +$S:117} +A.aFN.prototype={ +$1(a){var s=this.a +a.ax=s.gaSI() +a.ay=s.gaSK() +a.ch=s.gaSG()}, +$S:379} +A.aFO.prototype={ +$1(a){var s=this.a +a.y=A.dE(0,300) +a.w=s.gE0() +a.f=s.gvZ() +a.r=s.gw_() +a.x=s.gE1() +a.z=s.gWV()}, +$S:83} +A.bbJ.prototype={ +$1(a){var s=this.a +if(s!=null)s.$1(new A.Q0(!1,this.b,a.gbe(a),a)) +s=this.c +if(s!=null)s.$1(a)}, +$S:137} +A.bbK.prototype={ +$1(a){var s=this.a +return t.Mx.b(s)&&t.Mj.b(a)?s.EQ(0,new A.a93(s,a.gbe(a),a)):null}, +$S:114} +A.aGp.prototype={} +A.oh.prototype={ +jZ(a,b){if(!this.aXU(new A.aGo(a,b),t.vW))return B.ci +return B.dM}} +A.aGo.prototype={ +$1(a){return a.jZ(this.a,this.b)}, +$S:381} +A.fB.prototype={ +jZ(a,b){return B.ci}} +A.aJ.prototype={ +p(a,b){this.mJ(a,b) +this.D()}, +v(a){this.a7(a) +this.D()}, +cv(){this.apJ() +this.D()}, +e0(a){var s=this.apI(0) +this.D() +return s}, +E(a,b){this.rY(0,b) +this.D()}, +vf(a,b){this.apE(a,b) +this.D()}, +aq(a,b){this.apL(0,b) +this.D()}, +bL(a,b){this.apH(0,b) +this.D()}, +au(a,b){this.OP(0,b) +this.D()}, +JB(a,b){this.apG(a,b) +this.D()}, +sN(a,b){this.eX(0,b) +this.D()}, +sO(a,b){this.dT(0,b) +this.D()}, +$iaq:1} +A.am4.prototype={} +A.Pz.prototype={ +E(a,b){var s=this.a1U(b) +if(s)this.a.Fe(!1) +return s}, +a1U(a){var s=this.b +if(B.b.G(s,a))return!1 +s.push(a) +return!0}, +P(a,b){var s=B.b.P(this.b,b) +if(s)this.a.Fe(!1) +return s}, +aN2(a){var s,r,q,p,o,n,m,l=A.b([],t.p) +for(s=this.b,r=s.length,q=this.c,p=t.kK,o=this.a,n=0;n") +return A.ab(new A.e7(new A.bg(r,new A.ayz(),q.h("bg<1>")),new A.ayA(a),s),!0,s.h("z.E"))}} +A.ayB.prototype={ +$0(){var s=this.a,r=s.ax.a +return s.a5=new A.i(r[0]/2,r[1]/2)}, +$S:0} +A.ayz.prototype={ +$1(a){return a>0&&a<=1}, +$S:383} +A.ayA.prototype={ +$1(a){var s=new A.a(new Float64Array(2)) +s.v(this.a.a) +s.vf($.biX(),a) +return s}, +$S:384} +A.aJc.prototype={ +Xq(a){var s,r,q,p=this.a,o=a.b,n=a.a,m=this.b,l=p*o-n*m +if(l===0)return A.b([],t.d) +s=this.c +r=a.c +q=new A.a(new Float64Array(2)) +q.p((o*s-m*r)/l,(p*r-n*s)/l) +return A.b([q],t.d)}, +j(a){var s=this.b,r=A.j(s),q=B.c.goD(s)?r+"y":"+"+r+"y" +return A.j(this.a)+"x"+q+"="+A.j(this.c)}} +A.FP.prototype={ +Xq(a){var s,r,q,p=this,o=p.a,n=p.b,m=a.a,l=a.b,k=A.bnH(o,n).Xq(A.bnH(m,l)) +if(k.length!==0){s=B.b.ga9(k) +if(p.jQ(0,s)&&a.jQ(0,s))return k}else{r=A.C(t.yw) +if(a.jQ(0,o))r.E(0,o) +if(a.jQ(0,n))r.E(0,n) +if(p.jQ(0,m))r.E(0,m) +if(p.jQ(0,l))r.E(0,l) +if(r.a!==0){q=new A.a(new Float64Array(2)) +r.al(0,q.gkJ(q)) +q.au(0,1/r.a) +return A.b([q],t.d)}}return A.b([],t.d)}, +jQ(a,b){var s,r=this.b,q=this.a,p=r.Y(0,q),o=b.a,n=q.a,m=o[1]-n[1],l=p.a,k=l[0] +n=o[0]-n[0] +l=l[1] +if(Math.abs(m*k-n*l)>0.000001)return!1 +s=n*k+m*l +if(s<0)return!1 +if(s>q.n2(r))return!1 +return!0}, +j(a){return"["+this.a.j(0)+", "+this.b.j(0)+"]"}} +A.jg.prototype={ +qt(a,b,c,d,e,f,g,h,i,j,k,l){var s,r,q,p=this,o=p.a5 +p.ahz(o) +s=o.length +r=J.vs(s,t.yw) +for(q=0;q") +s.Cq(A.ab(new A.W(q,new A.aO4(),n),!1,n.h("aI.E")),!0) +if(b==null?j.aM:b){k=s.hB(0) +s=j.ax +s.mJ(k.c-k.a,k.d-k.b) +s.D() +if(!j.aS){q=j.at.d +q.a7(B.o.rD(r,j.ay,s)) +q.D()}}}, +ahz(a){return this.MF(a,null)}, +a_K(){var s,r,q,p,o,n=this,m=n.gaaI(),l=n.gTl(),k=n.eA(B.o),j=n.b2,i=n.ax +if(!j.Xu([k,i,m,l])){for(s=n.a5,r=0;rl&&o.a[0]>l)){k=n[1] +j=o.a[1] +i=Math.min(k,j) +h=s[1] +k=i>h||Math.max(k,j)=0}} +A.aO3.prototype={ +$1(a){var s,r=new A.a(new Float64Array(2)) +r.v(a) +s=this.a +r.bL(0,s) +r.E(0,s) +return r}, +$S:61} +A.aO4.prototype={ +$1(a){var s=a.a +return new A.i(s[0],s[1])}, +$S:72} +A.t8.prototype={ +gv8(){var s,r=this.WE$ +if(r===$){s=new Float64Array(2) +r!==$&&A.N() +r=this.WE$=new A.a(s)}return r}, +ahi(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=null,d=f.a_K() +for(s=d.length,r=e,q=1/0,p=0,o=!1,n=0;n1e-10){++p +if(l0){s=b.b!=null?b.c:e +s=s==null?e:s.a +if(s==null)k=e +else{s.v(a.a) +k=s}if(k==null){k=new A.a(new Float64Array(2)) +k.v(a.a)}s=a.b +k.vf(s,q) +j=f.gv8() +j.v(r.a) +j.aq(0,r.b) +j=f.gv8() +j.p(f.gv8().a[1],-f.gv8().a[0]) +j.e0(0) +i=p===1||o +if(i)A.bqK(f.gv8()) +j=b.b!=null?b.c:e +j=j==null?e:j.b +h=j +if(h==null)h=new A.a(new Float64Array(2)) +h.v(s) +h.ahy(f.gv8()) +s=b.b!=null?b.c:e +if(s==null)g=e +else{s.a.v(k) +s.b.v(h) +s.Ca() +g=s}if(g==null)g=A.bgn(h,k) +s=b +A.w(f).h("t8.T").a(f) +s.O5(q,f,i,f.gv8(),g) +return s}b.b=null +return e}} +A.w8.prototype={ +Ca(){var s=this.b.a +A.yR(1/s[0]) +A.yR(1/s[1])}, +aUv(a){var s,r,q,p,o,n=$.bxr() +n.v(this.a) +s=a.a +n.aq(0,s) +r=$.bxs() +r.v(a.b) +r.aq(0,s) +s=$.bxt() +q=this.b.a +s.p(-q[1],q[0]) +p=r.bO(s) +o=r.bS(n)/p +s=n.bO(s)/p +if(o>=0&&s>=0&&s<=1)return o +return null}, +j(a){return"Ray2(origin: "+this.a.j(0)+", direction: "+this.b.j(0)+")"}} +A.lx.prototype={ +xm(a,b,c,d,e,f,g,h,i,j){this.ax.an(0,new A.aPd(this))}, +asK(a,b,c,d,e,f,g,h,i,j){this.ax.an(0,new A.aPc(this))}, +asJ(a,b,c,d,e,f,g,h,i,j,k,l){this.ax.an(0,new A.aPb(this))}} +A.aPd.prototype={ +$0(){var s=this.a +return s.MF(A.pU(s.ax,s.ay),!1)}, +$S:0} +A.aPc.prototype={ +$0(){var s=this.a +return s.MF(A.pU(s.ax,s.ay),!1)}, +$S:0} +A.aPb.prototype={ +$0(){var s=this.a +return s.MF(A.pU(s.ax,s.ay),!1)}, +$S:0} +A.eL.prototype={ +kj(a,b,c,d,e,f,g,h,i,j){this.S$=e==null?this.S$:e}, +$ib5:1, +gMP(){return this.k4}} +A.apA.prototype={} +A.hr.prototype={ +aZM(a,b){var s=A.w(this),r=s.h("hr.0") +if(r.b(a)&&s.h("hr.1").b(b))return this.Ll(a,b) +else if(s.h("hr.1").b(a)&&r.b(b))return this.Ll(b,a) +else throw A.d("Unsupported shapes")}} +A.a98.prototype={ +Ll(a,b){var s,r,q,p,o,n=A.C(t.yw),m=a.YK(null),l=b.YK(null) +for(s=m.length,r=0;ri+h)return A.C(t.yw) +else if(j=p;)if(q===r.length-1)if(s){n-=p +o.c=n +o.b=0}else{o.y=!0 +n=o.r +if(n!=null)n.$0() +n=o.w +if(n!=null){n=n.a +if((n.a&30)!==0)A.X(A.ad("Future already completed")) +n.pc(null)}return}else{n-=p +o.c=n +o.b=q+1}}} +A.a_I.prototype={} +A.N4.prototype={ +W(){return"FlippedAtlasStatus."+this.b}} +A.acb.prototype={ +HK(){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$HK=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:q.a=B.wv +p=q.w +o=p+"#with-flips" +p=q.r +p=(p==null?$.aC():p).a +n=p.i(0,o) +if(n==null){n=A.bho(new A.aTF(q).$0()) +p.u(0,o,n) +p=n}else p=n +s=2 +return A.x(p.Zd(),$async$HK) +case 2:q.f=b +q.a=B.ww +return A.p(null,r)}}) +return A.q($async$HK,r)}, +gF(a){return this.c.length}, +Tw(a,b,c,d){var s,r,q,p,o,n,m,l,k=this +if(d==null){d=k.y +if(d==null)d=A.bgl(1,0,0,0) +s=d}else s=d +r=a==null +q=r?k.x:a +p=$.G().B() +p.sA(0,q==null?B.B:q) +q=c.gaH(c) +o=c.gae(c) +n=c.gaQ(c) +m=c.gaj(c) +if(b)l=k.a===B.wu +else l=!1 +if(l)k.HK() +k.b.push(new A.a_I(c,new A.A(0,0,0+(q-o),0+(n-m)),s,b,p)) +if(b){q=k.f +q=q.gbW(q) +p=k.a===B.ww?1:2 +p=q*p-c.gaH(c) +q=c.gaj(c) +q=new A.A(p,q,p+(c.gaH(c)-c.gae(c)),q+(c.gaQ(c)-c.gaj(c)))}else q=c +k.c.push(q) +k.d.push(s) +if(!r)k.e.push(a)}, +ab1(a,b){return this.Tw(a,!1,b,null)}, +yl(a,b,c){return this.Tw(null,a,b,c)}, +To(a,b,c,d,e,f,g){var s,r,q,p,o,n,m +if(b==null)b=new A.a(new Float64Array(2)) +if(f===1)if(b.k(0,new A.a(new Float64Array(2))))if(e===0)s=!d.k(0,new A.a(new Float64Array(2))) +else s=!0 +else s=!0 +else s=!0 +if(s){s=b.a +r=s[0] +s=s[1] +q=d.a +p=q[0] +q=q[1] +o=Math.cos(e)*f +n=Math.sin(e)*f +m=A.bgl(o,n,p+-o*r+n*s,q+-n*r-o*s)}else m=null +this.Tw(c,!1,g,m)}, +aaM(a,b,c){return this.To(0,null,null,b,0,1,c)}, +ahP(a3,a4,a5,a6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this,a1=a0.b,a2=a1.length +if(a2===0)return +s=a6==null?a0.as:a6 +r=a0.a +if(r!==B.wv){a1=a0.f +a2=a0.e +if(a2.length===0)a2=null +r=a4==null?a0.z:a4 +a3.adj(a1,a0.d,a0.c,a2,r,a5,s)}else for(r=a4==null,q=0;q") +return A.ab(new A.W(p,new A.aTM(this,b),r),!0,r.h("aI.E"))}, +Us(a,b,c){return A.aTC(this.QE(0,a,c),!0,b)}, +yR(a,b){return this.Us(a,b,null)}} +A.aTM.prototype={ +$1(a){var s=this.a +return s.lL(this.b*s.f+a)}, +$S:191} +A.Nu.prototype={ +j(a){var s=this +return'Glyph(char="'+s.a+'", LTWH=['+s.b+", "+s.c+", "+s.d+", "+s.e+"], srcLTRB=["+s.f+", "+s.r+", "+s.w+", "+s.x+"])"}} +A.aJi.prototype={ +aJ(a,b,c){this.a+=b +this.b+=c}, +j(a){var s=this +return"LineMetrics(left: "+A.j(s.a)+", baseline: "+A.j(s.b)+", width: "+A.j(s.c)+", ascent: "+A.j(s.d)+", descent: "+A.j(s.e)+")"}} +A.aTJ.prototype={ +asT(a,b,c,d,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e +for(s=c.length,r=this.b,q=t.S,p=t.RF,o=this.d,n=0;nthis.c.length}, +XK(a){var s,r,q,p,o,n,m,l,k,j=this,i=null +for(s=j.c,r=j.b,q=i,p=q;o=j.e,o<=s.length;p=k){n=r.aiy(B.b.cj(B.b.cI(s,j.d,o)," ")) +o=n.b.a.oS(B.E) +m=n.b +l=m.c +m=m.a.c +l=A.a6f(o,i,m.gb9(m),l) +k=new A.If(n,l) +if(l.c>a)break +else q=j.e++}if(p!=null){q.toString +j.d=q +return p}else return i}} +A.SH.prototype={ +oq(a,b){this.b.oq(a,b)}, +jm(a){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=h.b.gEs(),f=h.a +f===$&&A.c() +f=f.b +s=a-(f==null?B.X:f).ge_() +r=A.b([],t.lc) +f=h.a +q=f.b +p=q==null +o=(p?B.X:q).a +n=(p?B.X:q).b +m=f.e +if(m==null)m=B.d0 +for(;!g.gXw();){l=g.XK(s) +if(l==null)break +else{k=l.goG() +f=k.d +l.aJ(0,o+(s-k.c)*h.aGe(m),n+f) +r.push(l) +n+=f+k.e}}f=h.a +q=f.b +n+=(q==null?B.X:q).d +j=A.bua(f.c,a,n) +if(j==null)i=r +else{f=A.b([j],t.Of) +B.b.I(f,r) +i=f}return new A.Fg(i,n)}, +aGe(a){var s +switch(a.a){case 0:s=0 +break +case 1:s=1 +break +case 2:s=0.5 +break +case 4:s=0 +break +case 5:s=1 +break +case 3:s=A.X(A.d_("The text rendering pipeline cannot justify text.")) +break +default:s=null}return s}} +A.adm.prototype={} +A.acg.prototype={ +jm(a){var s,r,q,p,o,n,m,l,k,j,i,h,g=a.length*4,f=new Float32Array(g),e=new Float32Array(g) +for(s=this.a,r=s.aih(a),r=new A.fH(r.a(),r.$ti.h("fH<1>")),q=s.c,p=this.c,o=0,n=0;r.H();){m=r.b +l=m.f +f[o]=l +k=o+1 +j=m.r +f[k]=j +i=o+2 +f[i]=m.w +h=o+3 +f[h]=m.x +e[o]=1 +e[k]=0 +e[i]=n+(l-m.b) +e[h]=j-m.c-q +o+=4 +n+=m.d+p}if(o=p.a){if(!p.c){p.e=!1 +s=p.b +if(s!=null)s.$0() +return}for(s=p.b;r=p.d,q=p.a,r>=q;){p.d=r-q +if(s!=null)s.$0()}}}}} +A.aca.prototype={ +ab(a){return new A.nX(this.e,new A.aTz(this),null,null,null,t.Cu)}} +A.aTz.prototype={ +$2(a,b){var s=new A.ip(b),r=this.a +s.glr(0).cu(new A.aTy(r),t.H) +return new A.zL(b,s,r.c,r.d,null)}, +$S:409} +A.aTy.prototype={ +$1(a){return null}, +$S:226} +A.zL.prototype={ +b5(){return new A.VD(null,null,B.p)}} +A.VD.prototype={ +bu(){var s=this +s.bN() +s.a8k() +if(s.a.f)s.Re()}, +bH(a){var s,r=this +r.c7(a) +if(a.c!==r.a.c){a.d.r=null +r.a8k() +if(r.a.f)r.Re()}s=r.a.f +if(s!==a.f)if(s)r.Re() +else r.a7_()}, +Re(){this.a.d.bF(0) +this.e=1000*Date.now() +var s=this.d +if(s!=null)s.aYL(0,B.U1)}, +a8k(){var s,r,q=this,p=null +q.a.d.r=q.gaF1() +if(q.d==null){s=A.cW(p,p,p,p,q) +s.cH() +r=s.e8$ +r.b=!0 +r.a.push(q.gaDw()) +q.d=s}}, +aDx(){var s,r,q=this,p=1000*Date.now(),o=q.e +if(o==null){q.e=p +o=p}s=q.a.d +r=s.b +s.a8(0,(p-o)*0.000001) +if(r!==q.a.d.b)q.aK(new A.b3a()) +q.e=p}, +a7_(){var s=this.d +if(s!=null)s.dM(0)}, +t(){var s=this.d +if(s!=null)s.t() +this.arS()}, +ab(a){var s=null,r=this.a,q=r.d +return A.ew(s,s,s,new A.Se(q.a.a[q.b].a,r.e,0,s),B.x)}} +A.b3a.prototype={ +$0(){}, +$S:0} +A.YP.prototype={ +t(){var s=this,r=s.dQ$ +if(r!=null)r.ad(0,s.gmQ()) +s.dQ$=null +s.bG()}, +dd(){this.eD() +this.ee() +this.mR()}} +A.nX.prototype={ +ab(a){var s=this,r=s.c,q=s.$ti,p=q.h("an<1>") +if(p.b(r))return A.bf7(new A.ax1(s,a),p.a(r),q.c) +return s.d.$2(a,q.c.a(r))}} +A.ax1.prototype={ +$2(a,b){var s +switch(b.a.a){case 1:case 0:case 2:return B.fP +case 3:if(b.c!=null)return B.fP +s=b.b +if(s!=null)return this.a.d.$2(this.b,s) +return B.fP}}, +$S(){return this.a.$ti.h("m(ah,kh<1>)")}} +A.E7.prototype={ +b5(){return new A.IV(B.p,this.$ti.h("IV<1>"))}} +A.IV.prototype={ +bu(){this.bN() +this.a.c.an(0,this.ga68())}, +t(){this.a.c.ad(0,this.ga68()) +this.bG()}, +aCC(){this.aK(new A.b_y())}, +ab(a){var s=this.a,r=s.c +return s.d.$2(a,r)}} +A.b_y.prototype={ +$0(){}, +$S:0} +A.amx.prototype={ +aO(a,b){var s=this.e +s===$&&A.c() +s.b7(a,new A.A(0,0,0+b.a,0+b.b))}, +cF(a){return!1}} +A.a7y.prototype={ +ab(a){return new A.nX(this.c,new A.aLQ(this),null,null,null,t.bx)}} +A.aLQ.prototype={ +$2(a,b){var s=null,r=this.a +return new A.Fy(b,r.d,r.e,s,s,r.w,s,s)}, +$S:410} +A.Fy.prototype={ +ab(a){var s=this,r=null,q=A.iS(s.c,r,r),p=B.f.aw(s.d) +p=A.boi(q,B.f.aw(s.e),p) +return A.dD(r,A.ew(A.dD(r,s.w,B.y,r,r,r,r,r,s.x,r),r,r,new A.amx(p,r),B.x),B.y,r,r,r,s.r,r,r,s.f)}} +A.acf.prototype={ +ab(a){return new A.nX(this.as,new A.aTI(this),null,null,null,t.cr)}} +A.aTI.prototype={ +$2(a,b){var s=J.al(b),r=this.a +return new A.zM(r.w,r.r,s.i(b,0),s.i(b,1),r.x,r.y,null)}, +$S:411} +A.zM.prototype={ +b5(){return new A.agg(B.p)}} +A.agg.prototype={ +ab(a){var s=this,r=null,q=s.a,p=q.r,o=q.w,n=s.d,m=n?q.f:q.e +n=n?B.Uq:r +return A.iH(r,A.dD(r,A.ew(A.l8(A.dD(r,q.d,B.y,r,r,r,r,r,n,r),r,r),r,r,new A.agf(m,r),B.x),B.y,r,r,r,o,r,r,p),B.ai,!1,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,new A.aZo(s),new A.aZp(s),new A.aZq(s),r,r,r)}} +A.aZp.prototype={ +$1(a){var s=this.a +s.aK(new A.aZm(s))}, +$S:19} +A.aZm.prototype={ +$0(){return this.a.d=!0}, +$S:0} +A.aZq.prototype={ +$1(a){var s=this.a +s.aK(new A.aZl(s)) +s.a.c.$0()}, +$S:51} +A.aZl.prototype={ +$0(){return this.a.d=!1}, +$S:0} +A.aZo.prototype={ +$0(){var s=this.a +s.aK(new A.aZn(s))}, +$S:0} +A.aZn.prototype={ +$0(){return this.a.d=!1}, +$S:0} +A.agf.prototype={ +cF(a){return a.b!==this.b}, +aO(a,b){var s=new A.a(new Float64Array(2)) +s.p(b.a,b.b) +this.b.Z6(a,s)}} +A.Se.prototype={ +cF(a){return a.b!==this.b||!a.c.k(0,this.c)||a.d!==this.d}, +aO(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=new A.a(new Float64Array(2)) +i.p(b.a,b.b) +s=new Float64Array(2) +r=new A.a(s) +r.v(i) +q=j.b +p=q.c +o=new A.a(new Float64Array(2)) +o.p(p.c-p.a,p.d-p.b) +r.Ko(o) +n=Math.min(s[0],s[1]) +s=q.c +p=new A.a(new Float64Array(2)) +p.p(s.c-s.a,s.d-s.b) +m=p.a2(0,n) +p=j.c +s=new Float64Array(2) +l=new A.a(s) +l.p(p.a,p.b) +p=new Float64Array(2) +k=new A.a(p) +k.v(i) +k.bL(0,l) +l.bL(0,m) +k.aq(0,l) +a.aJ(0,p[0],p[1]) +p=j.d +if(p===0)q.Z6(a,m) +else{a.bU(0) +a.aJ(0,s[0],s[1]) +a.oO(0,p) +s=l.fv(0).a +a.aJ(0,s[0],s[1]) +new A.aTK(j,m).$1(a) +a.bw(0)}}} +A.aTK.prototype={ +$1(a){return this.a.b.Z6(a,this.b)}, +$S:207} +A.ack.prototype={ +ab(a){return new A.nX(this.r,new A.aTN(this),null,null,null,t.Fc)}} +A.aTN.prototype={ +$2(a,b){var s=this.a +return new A.Fz(b,s.c,s.d,null)}, +$S:412} +A.Fz.prototype={ +ab(a){var s=null,r=this.c,q=r.c,p=new Float64Array(2) +new A.a(p).p(q.c-q.a,q.d-q.b) +return A.ew(s,s,s,new A.Se(r,this.d,this.e,s),new A.Q(p[0],p[1]))}} +A.a_L.prototype={ +oy(a){if(this.a)return +this.a=!0 +$.b1.fo$.push(this)}, +t(){var s=this +s.b.t() +if(!s.a)return +$.b1.oN(s) +s.a=!1}, +u9(a,b){return this.aXG(0,b)}, +aXG(a,b){var s=0,r=A.r(t.H),q=this,p +var $async$u9=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:p=q.b +s=2 +return A.x(p.nA(0),$async$u9) +case 2:s=3 +return A.x(p.wU(B.ra),$async$u9) +case 3:s=4 +return A.x(p.wW(1),$async$u9) +case 4:s=5 +return A.x(p.wV(new A.Dv(b,null)),$async$u9) +case 5:s=6 +return A.x(p.j2(0),$async$u9) +case 6:q.c=!0 +return A.p(null,r)}}) +return A.q($async$u9,r)}, +vx(a){var s=this +if(a===B.d8){if(s.c&&s.b.z===B.kN)s.b.j2(0)}else s.b.kC(0)}} +A.DA.prototype={ +iI(a,b,c,d,e,f,g){var s +if(e==null){s=$.G().B() +s.sA(0,B.l)}else s=e +this.S$=s}, +gbe(a){var s=this.at +s===$&&A.c() +return s.d.a}, +io(){var s,r=this.gaC().k3,q=this.ax +q.toString +s=r.go.fm(q) +return s}, +n(a){var s=0,r=A.r(t.H),q=this,p +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=A.cO(q.en(0),t.H) +s=2 +return A.x(p,$async$n) +case 2:q.at=q.io() +return A.p(null,r)}}) +return A.q($async$n,r)}, +gko(a){var s=this.at +s===$&&A.c() +return s.f.e}, +k6(a){var s,r=this,q=r.CW.gA5(),p=q.a,o=p[3],n=r.at +n===$&&A.c() +s=n.d.a.a +if(o!==s[0]||p[7]!==s[1]||r.cx!==n.f.e){q.ci() +o=r.at.d.a.a +q.aJ(0,o[0],o[1]) +q.mw(r.at.f.e) +r.cx=r.at.f.e}a.bU(0) +a.az(0,p) +r.Oo(a) +a.bw(0)}, +b4(a){var s,r,q +if(this.ch){s=this.at +s===$&&A.c() +s=s.Q +r=s.length +q=0 +for(;q") +a.tE(B.EZ,A.ab(new A.W(r,new A.axw(),s),!1,s.h("aI.E")),this.S$)}, +Z7(a,b,c){a.cs(b,c,this.S$)}, +aGm(a,b){var s,r,q,p=this,o=b.c +o===$&&A.c() +o=t.uC.a(o).d +s=A.a5(o).h("W<1,i>") +s=A.ab(new A.W(o,new A.axx(),s),!1,s.h("aI.E")) +r=p.cy +if(r===$){q=$.G().Z() +p.cy!==$&&A.N() +p.cy=q +r=q}r.bF(0) +r.Cq(s,!0) +a.a3(r,p.S$)}, +wn(a){return this.CW.e5(a)}, +ga5y(){var s,r=this.db +if(r===$){s=new Float64Array(2) +r!==$&&A.N() +r=this.db=new A.a(s)}return r}, +jh(a){var s,r=this +r.CW.ro(a,r.ga5y()) +s=r.at +s===$&&A.c() +return B.b.fk(s.Q,new A.axy(r))}, +h3(){var s=this.gaC().k3,r=this.at +r===$&&A.c() +s.go.aPP(r) +this.p7()}, +$ia8:1, +$iao:1, +$ib5:1} +A.axz.prototype={ +$1(a){return this.a.ahR(this.b,a)}, +$S:413} +A.axw.prototype={ +$1(a){var s=a.a +return new A.i(s[0],s[1])}, +$S:72} +A.axx.prototype={ +$1(a){var s=a.a +return new A.i(s[0],s[1])}, +$S:72} +A.axy.prototype={ +$1(a){var s=this.a.ga5y(),r=a.c +r===$&&A.c() +return r.MW(a.b.d,s)}, +$S:414} +A.TZ.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.U_.prototype={} +A.j4.prototype={ +CE(a,b){}} +A.bd.prototype={} +A.aB.prototype={ +a8(a,b){var s,r,q,p=this.go,o=p.CW.a +o.bF(0) +s=p.cx.a +s.bF(0) +r=p.a +if((r&1)===1){r=p.b +r===$&&A.c() +r.a.ZM(r) +r=p.a&=4294967294}p.a=r|2 +r=p.ch +r.a=b +r.e=r.d=10 +if(b>0)r.b=1/b +else r.b=0 +r.c=p.y*b +r.f=p.z +q=p.ax +q===$&&A.c() +q.b.q5(s.gn3()) +s.bF(0) +q=p.b +q===$&&A.c() +q.aNN() +p.ax.c.q5(s.gn3()) +if(p.at&&r.a>0){s.bF(0) +q=p.ay +q===$&&A.c() +q.x_(r) +p.ax.d.q5(s.gn3()) +s.bF(0) +p.x_(r) +p.ax.e.q5(s.gn3())}if(p.Q&&r.a>0){s.bF(0) +p.alX(r) +p.ax.y.q5(s.gn3())}if(r.a>0)p.y=r.b +if((p.a&4)===4)p.aNC() +p.a&=4294967293 +p.ax.a.q5(o.gn3())}, +ske(a){var s,r,q=this.go +q.e.v(a) +for(q=q.c,s=q.length,r=0;r")).al(0,new A.aUL(this)) +s.af(0)}} +A.aUK.prototype={ +$1(a){var s=this.a,r=this.b +s.c.O4(r,a) +B.b.P(s.e,r)}, +$S:208} +A.aUL.prototype={ +$1(a){var s=this.a.c.a.i(0,a) +if(s!=null)s.t()}, +$S:188} +A.acJ.prototype={ +OV(a,b,c,d,e,f,g,h,i,j){var s=this.S$ +this.S$=s}, +sOQ(a){var s=this.k4 +if(s!=null)s.t() +this.k4=a}, +b4(a){var s,r,q,p,o=this.k4 +if(o!=null){s=this.S$ +r=this.ax.a +q=new A.Q(r[0],r[1]) +p=o.ayd(q) +if(p!=null){a.bU(0) +a.au(0,1/o.b) +a.mg(0,p,B.h,s) +a.bw(0)}else o.a7A(a,q)}}, +h3(){this.p7() +var s=this.k4 +if(s!=null)s.t()}, +$ib5:1} +A.aqH.prototype={} +A.zb.prototype={ +ajP(){var s=this.a +if(s.length===0)return null +return new A.dB(A.aY_(s).gMU(0))}, +$iwP:1} +A.vK.prototype={ +gae(a){return this.e}, +gaj(a){return this.f}, +gaH(a){return this.r}, +gaQ(a){return this.w}} +A.rP.prototype={ +GS(a,b,c,d,e,f){var s=this.a +s[0]=a +s[1]=b +s[2]=c+this.b +s[3]=d+this.c}, +gGc(){return this.a[0]}, +gGz(){return this.a[1]}, +gZA(){return this.a[2]}, +gZB(){return this.a[3]}, +$iGT:1, +$iax:1} +A.a9L.prototype={ +gCH(){var s,r=this,q=r.c +if(q===$){s=A.b([new A.A(0,0,r.a,r.b)],t.AO) +r.c!==$&&A.N() +r.c=s +q=s}return q}, +aWZ(a,b){var s,r,q,p,o,n,m,l,k,j=this +for(s=j.gCH(),r=s.length,q=null,p=0;p=a&&o.d-o.b>=b){q=o +break}}if(q==null||q.c-q.a0)a.push(new A.T2(b1,c0,b2,m)) +else m.yl(b2.d,b1,c0) +if(J.l4(a2.w))c3.J5(a2,a3,b1)}for(b=a.length,c1=0;c10)a.push(new A.T2(b1,c0,b2,m)) +else m.yl(b2.d,b1,c0) +if(J.l4(a2.w))c3.J5(a2,a3,b1)}for(b=a.length,c1=0;c1"));r.H();)s.ga1(s).mv(a,this.d)}, +a8(a,b){var s,r,q +for(s=this.f.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a;(q==null?r.a(q):q).a8(0,b)}for(s=J.az(this.b);s.H();)s.ga1(s).a8(0,b)}} +A.aQe.prototype={ +$1(a){return A.aEg(a,this.a,this.b)}, +$S:419} +A.aQf.prototype={ +$2(a,b){var s,r=a.a +if(r==null)r=0 +s=b.a +return r-(s==null?0:s)}, +$S:420} +A.aQa.prototype={ +$1(a){return a.ay}, +$S:421} +A.aQb.prototype={ +$1(a){return this.ajy(a)}, +ajy(a){var s=0,r=A.r(t.VW),q,p=this,o,n,m,l,k,j,i,h,g +var $async$$1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=p.b +n=p.c +m=p.d +l=p.e +k=p.f +j=p.r +i=p.w +h=p.x +s=3 +return A.x(A.bgq(l,k,m,n,j,i,a,h,o,p.a),$async$$1) +case 3:g=c +s=a instanceof A.zv&&g instanceof A.NB?4:5 +break +case 4:s=6 +return A.x(A.bpd(a.CW,g,o,n,m,l,k,j,i,h),$async$$1) +case 6:o=c +g.z!==$&&A.aj() +g.z=o +case 5:q=g +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$$1,r)}, +$S:422} +A.aQg.prototype={ +$1(a){return a.gNh(a)}, +$S:423} +A.aSM.prototype={} +A.adx.prototype={} +A.Ij.prototype={ +a8(a,b){var s,r,q,p=this,o=p.c+=b +for(s=p.b;r=p.d,q=s[r],q<=o;){p.d=(r+1)%s.length +o-=q +p.c=o}}} +A.ady.prototype={ +eG(a){var s=this.a +s=s==null?null:s.eG(0) +return A.aW3(s,this.d,this.b,!0)}} +A.aW4.prototype={ +$1(a){return a.a}, +$S:424} +A.aW6.prototype={ +$1(a){var s,r,q,p,o,n=a.b,m=n.a +m.toString +s=a.a +if(s==null)return new A.bI(m,n) +r=t.T +q=A.b(s.split("/"),r) +p=A.b(m.split("/"),r) +r=q.length +if(r!==p.length){m=A.ab(B.b.cI(q,0,r-1),!0,t.N) +B.b.I(m,p) +o=B.b.cj(m,"/")}else o=m +return new A.bI(o,n)}, +$S:425} +A.aW7.prototype={ +$1(a){return a.b}, +$S:426} +A.aW8.prototype={ +$2(a,b){var s,r,q=b.d +q.toString +s=a.d +s.toString +r=q-s +if(r!==0)q=r +else{q=b.c +q.toString +s=a.c +s.toString +s=q-s +q=s}return q}, +$S:427} +A.aW9.prototype={ +$1(a){return this.a.d_(0,a.a)}, +$S:428} +A.T2.prototype={} +A.T3.prototype={ +sC(a,b){}, +n(a){var s=0,r=A.r(t.H),q=this,p +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.en(0) +p=q.k4 +if(p.d==null)p.d=A.aI2(q.gaC().gbQ(0).nw(0,t.O1)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){this.k4.a8(0,b)}, +b4(a){this.k4.b4(a)}, +fI(a){this.ld(a) +this.k4.mm(a)}} +A.XW.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.mY.prototype={ +W(){return"AnimationStatus."+this.b}} +A.dZ.prototype={ +j(a){return"#"+A.bU(this)+"("+this.N1()+")"}, +N1(){switch(this.gcz(this).a){case 1:var s="\u25b6" +break +case 2:s="\u25c0" +break +case 3:s="\u23ed" +break +case 0:s="\u23ee" +break +default:s=null}return s}} +A.IR.prototype={ +W(){return"_AnimationDirection."+this.b}} +A.ZY.prototype={ +W(){return"AnimationBehavior."+this.b}} +A.Dt.prototype={ +gm(a){var s=this.x +s===$&&A.c() +return s}, +sm(a,b){var s=this +s.dM(0) +s.Rk(b) +s.D() +s.B9()}, +gdt(){var s=this.r +if(!(s!=null&&s.a!=null))return 0 +s=this.w +s.toString +return s.jS(0,this.y.a/1e6)}, +Rk(a){var s=this,r=s.a,q=s.b,p=s.x=A.U(a,r,q) +if(p===r)s.Q=B.Y +else if(p===q)s.Q=B.af +else s.Q=s.z===B.b6?B.bD:B.bE}, +gcz(a){var s=this.Q +s===$&&A.c() +return s}, +pL(a,b){var s=this +s.z=B.b6 +if(b!=null)s.sm(0,b) +return s.a2a(s.b)}, +d5(a){return this.pL(0,null)}, +ai5(a,b){var s=this +s.z=B.m3 +if(b!=null)s.sm(0,b) +return s.a2a(s.a)}, +ex(a){return this.ai5(0,null)}, +o_(a,b,c){var s,r,q,p,o,n,m,l,k,j=this,i=j.d +$label0$0:{s=B.ml===i +if(s){r=$.abf.tM$ +r===$&&A.c() +q=(r.a&4)!==0 +r=q}else r=!1 +if(r){r=0.05 +break $label0$0}if(s||B.mm===i){r=1 +break $label0$0}r=null}if(c==null){p=j.b-j.a +if(isFinite(p)){o=j.x +o===$&&A.c() +n=Math.abs(a-o)/p}else n=1 +if(j.z===B.m3&&j.f!=null){o=j.f +o.toString +m=o}else{o=j.e +o.toString +m=o}l=new A.bv(B.c.ai(m.a*n))}else{o=j.x +o===$&&A.c() +l=a===o?B.G:c}j.dM(0) +o=l.a +if(o===B.G.a){r=j.x +r===$&&A.c() +if(r!==a){j.x=A.U(a,j.a,j.b) +j.D()}j.Q=j.z===B.b6?B.af:B.Y +j.B9() +return A.bh1()}k=j.x +k===$&&A.c() +return j.IC(new A.b3b(o*r/1e6,k,a,b,B.d2))}, +a2a(a){return this.o_(a,B.z,null)}, +ahT(a,b,c){var s,r=this,q=r.a,p=r.b,o=b==null?r.e:b +r.dM(0) +s=r.x +s===$&&A.c() +o=o.a/1e6 +s=p===q?0:(A.U(s,q,p)-q)/(p-q)*o +return r.IC(new A.b5L(q,p,!1,r.gawb(),o,s,B.d2))}, +aYL(a,b){return this.ahT(0,b,!1)}, +aYM(a,b){return this.ahT(0,null,b)}, +awc(a){this.z=a +this.Q=a===B.b6?B.bD:B.bE +this.B9()}, +ae4(a){var s,r,q,p,o,n,m=this,l=$.bz0(),k=a<0 +m.z=k?B.m3:B.b6 +s=k?m.a-0.01:m.b+0.01 +r=m.d +$label0$0:{q=B.ml===r +if(q){k=$.abf.tM$ +k===$&&A.c() +p=(k.a&4)!==0 +k=p}else k=!1 +if(k){k=200 +break $label0$0}if(q||B.mm===r){k=1 +break $label0$0}k=null}o=m.x +o===$&&A.c() +n=new A.Sa(s,A.Xy(l,o-s,a*k),B.d2) +n.a=B.age +m.dM(0) +return m.IC(n)}, +TC(a){this.dM(0) +this.z=B.b6 +return this.IC(a)}, +IC(a){var s,r=this +r.w=a +r.y=B.G +r.x=A.U(a.iB(0,0),r.a,r.b) +s=r.r.bR(0) +r.Q=r.z===B.b6?B.bD:B.bE +r.B9() +return s}, +AL(a,b){this.y=this.w=null +this.r.AL(0,b)}, +dM(a){return this.AL(0,!0)}, +t(){var s=this +s.r.t() +s.r=null +s.eg$.af(0) +s.e8$.af(0) +s.Om()}, +B9(){var s=this,r=s.Q +r===$&&A.c() +if(s.as!==r){s.as=r +s.EH(r)}}, +atF(a){var s,r=this +r.y=a +s=a.a/1e6 +r.x=A.U(r.w.iB(0,s),r.a,r.b) +if(r.w.rh(s)){r.Q=r.z===B.b6?B.af:B.Y +r.AL(0,!1)}r.D() +r.B9()}, +N1(){var s,r=this.r,q=r==null,p=!q&&r.a!=null?"":"; paused" +if(q)s="; DISPOSED" +else s=r.b?"; silenced":"" +r=this.Ol() +q=this.x +q===$&&A.c() +return r+" "+B.c.b8(q,3)+p+s}} +A.b3b.prototype={ +iB(a,b){var s,r,q=this,p=A.U(b/q.b,0,1) +if(p===0)return q.c +else{s=q.d +if(p===1)return s +else{r=q.c +return r+(s-r)*q.e.az(0,p)}}}, +jS(a,b){return(this.iB(0,b+0.001)-this.iB(0,b-0.001))/0.002}, +rh(a){return a>this.b}} +A.b5L.prototype={ +iB(a,b){var s=this,r=b+s.r,q=s.f,p=B.c.bx(r/q,1) +B.c.eY(r,q) +s.e.$1(B.b6) +q=A.ap(s.b,s.c,p) +q.toString +return q}, +jS(a,b){return(this.c-this.b)/this.f}, +rh(a){return!1}} +A.afn.prototype={} +A.afo.prototype={} +A.afp.prototype={} +A.ZZ.prototype={ +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.ZZ){s=b.b +if(s.a===r.b.a){s=b.d +s=s.a===r.d.a}else s=!1}else s=!1 +return s}, +gL(a){return A.a6(null,this.b,null,this.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.afr.prototype={} +A.af9.prototype={ +an(a,b){}, +ad(a,b){}, +kK(a){}, +ft(a){}, +gcz(a){return B.af}, +gm(a){return 1}, +j(a){return"kAlwaysCompleteAnimation"}} +A.afa.prototype={ +an(a,b){}, +ad(a,b){}, +kK(a){}, +ft(a){}, +gcz(a){return B.Y}, +gm(a){return 0}, +j(a){return"kAlwaysDismissedAnimation"}} +A.KI.prototype={ +an(a,b){return this.gbs(this).an(0,b)}, +ad(a,b){return this.gbs(this).ad(0,b)}, +kK(a){return this.gbs(this).kK(a)}, +ft(a){return this.gbs(this).ft(a)}, +gcz(a){var s=this.gbs(this) +return s.gcz(s)}} +A.B3.prototype={ +sbs(a,b){var s,r=this,q=r.c +if(b==q)return +if(q!=null){r.a=q.gcz(q) +q=r.c +r.b=q.gm(q) +if(r.tN$>0)r.Kk()}r.c=b +if(b!=null){if(r.tN$>0)r.Kj() +q=r.b +s=r.c +s=s.gm(s) +if(q==null?s!=null:q!==s)r.D() +q=r.a +s=r.c +if(q!==s.gcz(s)){q=r.c +r.EH(q.gcz(q))}r.b=r.a=null}}, +Kj(){var s=this,r=s.c +if(r!=null){r.an(0,s.gfa()) +s.c.kK(s.gag6())}}, +Kk(){var s=this,r=s.c +if(r!=null){r.ad(0,s.gfa()) +s.c.ft(s.gag6())}}, +gcz(a){var s=this.c +if(s!=null)s=s.gcz(s) +else{s=this.a +s.toString}return s}, +gm(a){var s=this.c +if(s!=null)s=s.gm(s) +else{s=this.b +s.toString}return s}, +j(a){var s=this.c +if(s==null)return"ProxyAnimation(null; "+this.Ol()+" "+B.c.b8(this.gm(0),3)+")" +return s.j(0)+"\u27a9ProxyAnimation"}} +A.oy.prototype={ +an(a,b){this.cH() +this.a.an(0,b)}, +ad(a,b){this.a.ad(0,b) +this.yZ()}, +Kj(){this.a.kK(this.gyb())}, +Kk(){this.a.ft(this.gyb())}, +ID(a){this.EH(this.a7M(a))}, +gcz(a){var s=this.a +return this.a7M(s.gcz(s))}, +gm(a){var s=this.a +return 1-s.gm(s)}, +a7M(a){var s +switch(a.a){case 1:s=B.bE +break +case 2:s=B.bD +break +case 3:s=B.Y +break +case 0:s=B.af +break +default:s=null}return s}, +j(a){return this.a.j(0)+"\u27aaReverseAnimation"}} +A.M1.prototype={ +a9Q(a){var s +$label0$0:{if(B.Y===a||B.af===a){s=null +break $label0$0}if(B.bD===a||B.bE===a){s=this.d +if(s==null)s=a +break $label0$0}s=null}this.d=s}, +gaaq(){if(this.c!=null){var s=this.d +if(s==null){s=this.a +s=s.gcz(s)}s=s!==B.bE}else s=!0 +return s}, +t(){this.a.ft(this.ga9P())}, +gm(a){var s=this,r=s.gaaq()?s.b:s.c,q=s.a,p=q.gm(q) +if(r==null)return p +if(p===0||p===1)return p +return r.az(0,p)}, +j(a){var s=this,r=s.c +if(r==null)return s.a.j(0)+"\u27a9"+s.b.j(0) +if(s.gaaq())return s.a.j(0)+"\u27a9"+s.b.j(0)+"\u2092\u2099/"+r.j(0) +return s.a.j(0)+"\u27a9"+s.b.j(0)+"/"+r.j(0)+"\u2092\u2099"}, +gbs(a){return this.a}} +A.arI.prototype={ +W(){return"_TrainHoppingMode."+this.b}} +A.Co.prototype={ +ID(a){if(a!==this.e){this.D() +this.e=a}}, +gcz(a){var s=this.a +return s.gcz(s)}, +aLw(){var s,r,q,p=this,o=p.b +if(o!=null){switch(p.c.a){case 0:o=o.gm(o) +s=p.a +s=o<=s.gm(s) +o=s +break +case 1:o=o.gm(o) +s=p.a +s=o>=s.gm(s) +o=s +break +default:o=null}if(o){s=p.a +r=p.gyb() +s.ft(r) +s.ad(0,p.gTc()) +s=p.b +p.a=s +p.b=null +s.kK(r) +r=p.a +p.ID(r.gcz(r))}q=o}else q=!1 +o=p.a +o=o.gm(o) +if(o!==p.f){p.D() +p.f=o}if(q&&p.d!=null)p.d.$0()}, +gm(a){var s=this.a +return s.gm(s)}, +t(){var s,r,q=this +q.a.ft(q.gyb()) +s=q.gTc() +q.a.ad(0,s) +q.a=null +r=q.b +if(r!=null)r.ad(0,s) +q.b=null +q.e8$.af(0) +q.eg$.af(0) +q.Om()}, +j(a){var s=this +if(s.b!=null)return A.j(s.a)+"\u27a9TrainHoppingAnimation(next: "+A.j(s.b)+")" +return A.j(s.a)+"\u27a9TrainHoppingAnimation(no next)"}} +A.E9.prototype={ +Kj(){var s,r=this,q=r.a,p=r.ga6j() +q.an(0,p) +s=r.ga6k() +q.kK(s) +q=r.b +q.an(0,p) +q.kK(s)}, +Kk(){var s,r=this,q=r.a,p=r.ga6j() +q.ad(0,p) +s=r.ga6k() +q.ft(s) +q=r.b +q.ad(0,p) +q.ft(s)}, +gcz(a){var s=this.b +if(s.gcz(s)===B.bD||s.gcz(s)===B.bE)return s.gcz(s) +s=this.a +return s.gcz(s)}, +j(a){return"CompoundAnimation("+this.a.j(0)+", "+this.b.j(0)+")"}, +aD4(a){var s=this +if(s.gcz(0)!==s.c){s.c=s.gcz(0) +s.EH(s.gcz(0))}}, +aD3(){var s=this +if(!J.f(s.gm(s),s.d)){s.d=s.gm(s) +s.D()}}} +A.KH.prototype={ +gm(a){var s,r=this.a +r=r.gm(r) +s=this.b +s=s.gm(s) +return Math.min(A.hg(r),A.hg(s))}} +A.Uj.prototype={} +A.Uk.prototype={} +A.Ul.prototype={} +A.ahs.prototype={} +A.anw.prototype={} +A.anx.prototype={} +A.any.prototype={} +A.aoG.prototype={} +A.aoH.prototype={} +A.arF.prototype={} +A.arG.prototype={} +A.arH.prototype={} +A.PJ.prototype={ +az(a,b){return this.oP(b)}, +oP(a){throw A.d(A.d_(null))}, +j(a){return"ParametricCurve"}} +A.ho.prototype={ +az(a,b){if(b===0||b===1)return b +return this.aor(0,b)}} +A.VI.prototype={ +oP(a){return a}} +A.ib.prototype={ +oP(a){var s=this.a +a=A.U((a-s)/(this.b-s),0,1) +if(a===0||a===1)return a +return this.c.az(0,a)}, +j(a){var s=this,r=s.c +if(!(r instanceof A.VI))return"Interval("+A.j(s.a)+"\u22ef"+A.j(s.b)+")\u27a9"+r.j(0) +return"Interval("+A.j(s.a)+"\u22ef"+A.j(s.b)+")"}} +A.SZ.prototype={ +oP(a){return a"))}} +A.bz.prototype={ +gm(a){var s=this.a +return this.b.az(0,s.gm(s))}, +j(a){var s=this.a,r=this.b +return s.j(0)+"\u27a9"+r.j(0)+"\u27a9"+A.j(r.az(0,s.gm(s)))}, +N1(){return this.Ol()+" "+this.b.j(0)}, +gbs(a){return this.a}} +A.h_.prototype={ +az(a,b){return this.b.az(0,this.a.az(0,b))}, +j(a){return this.a.j(0)+"\u27a9"+this.b.j(0)}} +A.br.prototype={ +iy(a){var s=this.a +return A.w(this).h("br.T").a(J.bAU(s,J.bAV(J.bAW(this.b,s),a)))}, +az(a,b){var s,r=this +if(b===0){s=r.a +return s==null?A.w(r).h("br.T").a(s):s}if(b===1){s=r.b +return s==null?A.w(r).h("br.T").a(s):s}return r.iy(b)}, +j(a){return"Animatable("+A.j(this.a)+" \u2192 "+A.j(this.b)+")"}, +sTN(a){return this.a=a}, +si7(a,b){return this.b=b}} +A.R3.prototype={ +iy(a){return this.c.iy(1-a)}} +A.fp.prototype={ +iy(a){return A.Z(this.a,this.b,a)}} +A.abG.prototype={ +iy(a){return A.aSV(this.a,this.b,a)}} +A.Qo.prototype={ +iy(a){return A.bJ0(this.a,this.b,a)}} +A.vp.prototype={ +iy(a){var s,r=this.a +r.toString +s=this.b +s.toString +return B.c.ai(r+(s-r)*a)}} +A.acs.prototype={ +iy(a){var s,r=this.a +r.toString +s=this.b +s.toString +return B.c.bK(r+(s-r)*a)}} +A.n2.prototype={ +az(a,b){if(b===0||b===1)return b +return this.a.az(0,b)}, +j(a){return"CurveTween(curve: "+this.a.j(0)+")"}} +A.Yw.prototype={} +A.Th.prototype={ +asX(a,b){var s,r,q,p,o,n,m,l=this.a +B.b.I(l,a) +for(s=l.length,r=0,q=0;q=n&&b"}} +A.LX.prototype={ +b5(){return new A.Ut(new A.br(1,null,t.Y),null,null,B.p)}} +A.Ut.prototype={ +bu(){var s,r,q,p=this +p.bN() +s=A.cW(null,B.ab,null,0,p) +p.e=s +r=t.ve +q=p.d +p.f=new A.bz(r.a(new A.bz(r.a(s),new A.n2(B.f6),t.HY.h("bz"))),q,q.$ti.h("bz")) +p.a8j()}, +bH(a){this.c7(a) +this.a8j()}, +a8j(){var s=this.a.x +this.d.b=s}, +t(){var s=this.e +s===$&&A.c() +s.t() +this.arF()}, +aBo(a){if(!this.r){this.r=!0 +this.GY(0)}}, +aBu(a){if(this.r){this.r=!1 +this.GY(0)}}, +aBm(){if(this.r){this.r=!1 +this.GY(0)}}, +GY(a){var s,r,q,p=this.e +p===$&&A.c() +s=p.r +if(s!=null&&s.a!=null)return +r=this.r +if(r){p.z=B.b6 +q=p.o_(1,B.af5,B.TX)}else{p.z=B.b6 +q=p.o_(0,B.SN,B.U3)}q.cu(new A.b_R(this,r),t.H)}, +ab(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=null,e=g.a.r==null,d=!e,c=A.yG(a0),b=c.giZ(),a=g.a.e +if(a==null)s=f +else s=a instanceof A.ev?a.eR(a0):a +a=s!=null +if(a)r=c.guc() +else if(d)r=b +else{q=B.SU.eR(a0) +r=q}p=c.gA3().gnH().e2(r) +q=d?B.d_:B.m +o=d?g.gaBn():f +n=d?g.gaBt():f +m=d?g.gaBl():f +l=g.a +k=l.r +j=l.w +i=g.f +i===$&&A.c() +h=l.y +if(a&&e){e=l.f +if(e instanceof A.ev)e=e.eR(a0)}else e=s +a=g.a +l=a.d +return A.pK(A.iH(B.b9,A.dg(!0,f,new A.lW(new A.bb(j,1/0,j,1/0),A.li(!1,A.Eq(new A.cu(l,new A.ke(a.z,1,1,A.r2(A.NP(a.c,new A.fr(f,f,f,f,f,r,f,f,f),f),f,f,B.cI,!0,p,f,f,B.aM),f),f),new A.fc(e,f,f,h,f,f,B.aV),B.dG),i),f),!1,f,f,!1,!1,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),B.ai,!1,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,k,m,o,n,f,f,f),q,f,f,f,f)}} +A.b_R.prototype={ +$1(a){var s=this.a +if(s.c!=null&&this.b!==s.r)s.GY(0)}, +$S:22} +A.YC.prototype={ +t(){var s=this,r=s.dQ$ +if(r!=null)r.ad(0,s.gmQ()) +s.dQ$=null +s.bG()}, +dd(){this.eD() +this.ee() +this.mR()}} +A.LY.prototype={ +b5(){return new A.Uu(new A.agq($.aa()),null,!1,$,null,null,B.p)}} +A.Uu.prototype={ +bu(){this.bN() +this.e=this.a.c}, +bH(a){var s +this.c7(a) +s=a.c +if(s!=this.a.c)this.e=s}, +t(){var s=this.d +s.ah$=$.aa() +s.ac$=0 +this.arG()}, +aWi(a){if(this.f!==a)this.f=a}, +ab(a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this,a1=null,a2=a0.a,a3=a2.x +a2=A.S(204,B.hr.gm(0)>>>16&255,B.hr.gm(0)>>>8&255,B.hr.gm(0)&255).a +s=(a2>>>16&255)/255 +r=(a2>>>8&255)/255 +q=(a2&255)/255 +p=Math.max(s,Math.max(r,q)) +o=Math.min(s,Math.min(r,q)) +n=p-o +m=A.bsA(s,r,q,p,n) +l=(p+o)/2 +if(l!==1)A.U(n/(1-Math.abs(2*l-1)),0,1) +a3=new A.ee((a2>>>24&255)/255,m,0.835,0.69).bk() +a2=a0.a +k=a2.c +a2=a2.y +j=a0.d +j.srd(a3) +j.sEj(a0.f) +j.sV5(a0.KS$) +j.sTn(B.hr) +j.sXl(B.ek) +j.sqR(B.l) +j.sm(0,a0.a.c) +j.sYM(a0.e) +j.stV(a0.a.d!=null) +a0.a.toString +i=A.L1(4) +j.scw(0,new A.ez(i,B.C)) +j.siH(a0.a.Q) +i=a0.a.d +h=a0.WD$ +if(h===$){g=A.b3([B.lQ,new A.e1(a0.ga9m(),new A.bW(A.b([],t.ot),t.wS),t.wY)],t.B,t.od) +a0.WD$!==$&&A.N() +a0.WD$=g +h=g}f=a0.a.d==null +e=!f +d=e?a0.gaKn():a1 +c=e?a0.ga9m():a1 +b=e?a0.ga9o():a1 +a=e?a0.ga9o():a1 +return A.dg(a1,k===!0,A.bf0(h,!1,A.iH(a1,A.dg(a1,a1,A.ew(a1,a1,a1,j,B.a8b),!1,a1,e,!1,!1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1),B.ai,f,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,c,a,d,b,a1,a1,a1),i!=null,a2,B.m,a0.gaWh(),a0.gaKk(),a1,a1),!1,a1,a1,!1,!1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1,a1)}} +A.agq.prototype={ +sqR(a){if(J.f(this.as,a))return +this.as=a +this.D()}, +sm(a,b){if(this.at==b)return +this.at=b +this.D()}, +sYM(a){if(this.ax==a)return +this.ax=a +this.D()}, +scw(a,b){if(J.f(this.ay,b))return +this.ay=b +this.D()}, +siH(a){return}, +Q9(a,b,c,d,e){if(e)a.a3(this.ay.nN(b),c) +if(d!=null)this.ay.qV(d).aO(a,b)}, +aO(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=$.G(),h=i.B(),g=j.as +g.toString +h.sA(0,g) +h.sU(0,B.u) +h.sbM(2.5) +h.suH(B.eS) +s=t.o.a(b.b1(0,2).Y(0,B.Go.b1(0,2))) +g=s.a +r=s.b +q=new A.A(g,r,g+18,r+18) +p=i.B() +o=j.at +if(o!==!1){o=j.f +o.toString}else o=!1 +if(o){o=j.a +o.toString}else{o=j.b +o.toString}p.sA(0,o) +o=j.at +n=j.ch +if(o===!1){g=p.gA(p) +j.Q9(a,q,p,new A.bL(g,1,B.J,-1),!1)}else{j.Q9(a,q,p,n,!0) +o=j.at +if(o===!0){m=i.Z() +m.a4(0,g+4.5,r+9.36) +o=g+8.280000000000001 +n=r+13.5 +m.q(0,o,n) +a.a3(m,h) +m.a4(0,o,n) +m.q(0,g+12.959999999999999,r+5.22) +a.a3(m,h)}else a.e7(s.X(0,B.a3F),s.X(0,B.a3r),h)}g=j.e +g.toString +if(g){l=q.ei(1) +k=i.B() +i=j.c +i.toString +k.sA(0,i) +k.sU(0,B.u) +k.sbM(3.5) +j.Q9(a,l,k,j.ch,!0)}}} +A.YD.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.atj.prototype={} +A.ev.prototype={ +gm(a){return this.b.a}, +gBE(){var s=this +return!s.e.k(0,s.f)||!s.x.k(0,s.y)||!s.r.k(0,s.w)||!s.z.k(0,s.Q)}, +gBC(){var s=this +return!s.e.k(0,s.r)||!s.f.k(0,s.w)||!s.x.k(0,s.z)||!s.y.k(0,s.Q)}, +gBD(){var s=this +return!s.e.k(0,s.x)||!s.f.k(0,s.y)||!s.r.k(0,s.z)||!s.w.k(0,s.Q)}, +eR(a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this,a1=null +if(a0.gBE()){s=a2.bh(t.WD) +r=s==null?a1:s.w.c.gtq() +if(r==null){r=A.e8(a2,B.tF) +r=r==null?a1:r.e}q=r==null?B.aW:r}else q=B.aW +if(a0.gBD())a2.bh(t.H5) +if(a0.gBC()){r=A.e8(a2,B.HZ) +r=r==null?a1:r.as +p=r===!0}else p=!1 +$label0$0:{o=B.aW===q +n=o +m=q +if(n){l=!0 +k=B.c2 +j=!0 +if(j){i=!p +r=i +h=p}else{h=a1 +i=h +r=!1}g=j}else{h=a1 +i=h +k=i +l=k +g=!1 +j=!1 +r=!1}if(r){r=a0.e +break $label0$0}if(o){if(n){f=l +e=n}else{l=!0 +e=!0 +k=B.c2 +n=!0 +f=!0}if(f){if(j)r=h +else{r=p +h=r +j=!0}d=!0===r +r=d}else{d=a1 +r=!1}}else{d=a1 +e=n +f=!1 +r=!1}if(r){r=a0.r +break $label0$0}if(o){if(n)r=k +else{k=B.c2 +n=!0 +r=B.c2}c=B.nn===r +r=c +if(r)if(g)r=i +else{if(j)r=h +else{r=p +h=r +j=!0}i=!1===r +r=i +g=!0}else r=!1}else{c=a1 +r=!1}if(r){r=a0.x +break $label0$0}if(o)if(c)if(f)r=d +else{if(j)r=h +else{r=p +h=r +j=!0}d=!0===r +r=d +f=!0}else r=!1 +else r=!1 +if(r){r=a0.z +break $label0$0}b=B.b8===m +r=b +if(r){if(e)r=l +else{if(n)r=k +else{k=B.c2 +n=!0 +r=B.c2}l=B.c2===r +r=l +e=!0}if(r)if(g)r=i +else{if(j)r=h +else{r=p +h=r +j=!0}i=!1===r +r=i +g=!0}else r=!1}else r=!1 +if(r){r=a0.f +break $label0$0}if(b){if(e)r=l +else{if(n)r=k +else{k=B.c2 +n=!0 +r=B.c2}l=B.c2===r +r=l}if(r)if(f)r=d +else{if(j)r=h +else{r=p +h=r +j=!0}d=!0===r +r=d +f=!0}else r=!1}else r=!1 +if(r){r=a0.w +break $label0$0}if(b){if(o){r=c +a=o}else{if(n)r=k +else{k=B.c2 +n=!0 +r=B.c2}c=B.nn===r +r=c +a=!0}if(r)if(g)r=i +else{if(j)r=h +else{r=p +h=r +j=!0}i=!1===r +r=i}else r=!1}else{a=o +r=!1}if(r){r=a0.y +break $label0$0}if(b){if(a)r=c +else{c=B.nn===(n?k:B.c2) +r=c}if(r)if(f)r=d +else{d=!0===(j?h:p) +r=d}else r=!1}else r=!1 +if(r){r=a0.Q +break $label0$0}r=a1}return new A.ev(r,a0.c,a1,a0.e,a0.f,a0.r,a0.w,a0.x,a0.y,a0.z,a0.Q,0)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.ev&&b.b.a===s.b.a&&b.e.k(0,s.e)&&b.f.k(0,s.f)&&b.r.k(0,s.r)&&b.w.k(0,s.w)&&b.x.k(0,s.x)&&b.y.k(0,s.y)&&b.z.k(0,s.z)&&b.Q.k(0,s.Q)}, +gL(a){var s=this +return A.a6(s.b.a,s.e,s.f,s.r,s.x,s.y,s.w,s.Q,s.z,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){var s=this,r=new A.aAh(s),q=A.b([r.$2("color",s.e)],t.T) +if(s.gBE())q.push(r.$2("darkColor",s.f)) +if(s.gBC())q.push(r.$2("highContrastColor",s.r)) +if(s.gBE()&&s.gBC())q.push(r.$2("darkHighContrastColor",s.w)) +if(s.gBD())q.push(r.$2("elevatedColor",s.x)) +if(s.gBE()&&s.gBD())q.push(r.$2("darkElevatedColor",s.y)) +if(s.gBC()&&s.gBD())q.push(r.$2("highContrastElevatedColor",s.z)) +if(s.gBE()&&s.gBC()&&s.gBD())q.push(r.$2("darkHighContrastElevatedColor",s.Q)) +r=s.c +if(r==null)r="CupertinoDynamicColor" +q=B.b.cj(q,", ") +return r+"("+q+", resolved by: UNRESOLVED)"}} +A.aAh.prototype={ +$2(a,b){var s=b.k(0,this.a.b)?"*":"" +return s+a+" = "+b.j(0)+s}, +$S:432} +A.ahg.prototype={} +A.ahf.prototype={} +A.aAg.prototype={ +Ah(a){return B.x}, +Jv(a,b,c,d){return B.bb}, +Ag(a,b){return B.h}} +A.atk.prototype={} +A.a1F.prototype={ +ab(a){var s=null,r=A.cj(a,B.cM,t.l).w.r.b+8,q=this.c.Y(0,new A.i(8,r)),p=A.hm(this.d,B.ah,B.ac,B.dj),o=$.G().act(20,20,B.N) +return new A.cu(new A.aS(8,r,8,8),new A.o3(new A.a2a(q),A.dD(s,A.bC5(A.Eq(new A.cu(B.cV,p,s),new A.fc(B.T0.eR(a),s,A.axF(B.SX.eR(a)),B.uh,s,s,B.aV),B.dG),o),B.a4,s,s,B.Jr,s,s,s,222),s),s)}} +A.yF.prototype={ +b5(){return new A.Uv(B.p)}} +A.Uv.prototype={ +aDM(a){this.aK(new A.b_S(this))}, +aDO(a){this.aK(new A.b_T(this))}, +ab(a){var s=this,r=null,q=s.a.f,p=A.dI(q,r,B.cJ,r,B.H4.e2(s.d?A.yG(a).guc():B.jw.eR(a)),r,r) +q=s.d?A.yG(a).giZ():r +return A.fF(A.pK(A.blr(B.aO,B.hb,p,q,B.T1,0,s.a.c,B.UP,0.7),B.m,r,s.gaDL(),s.gaDN(),r),r,1/0)}} +A.b_S.prototype={ +$0(){this.a.d=!0}, +$S:0} +A.b_T.prototype={ +$0(){this.a.d=!1}, +$S:0} +A.a1G.prototype={ +aG(a){var s=this.f,r=s instanceof A.ev?s.eR(a):s +return J.f(r,s)?this:this.e2(r)}, +JT(a,b,c,d,e,f,g,h,i){var s=this,r=h==null?s.a:h,q=c==null?s.b:c,p=i==null?s.c:i,o=d==null?s.d:d,n=f==null?s.e:f,m=b==null?s.f:b,l=e==null?s.gh5(0):e,k=g==null?s.w:g +return A.bls(a==null?s.x:a,m,q,o,l,n,k,r,p)}, +e2(a){var s=null +return this.JT(s,a,s,s,s,s,s,s,s)}} +A.ahi.prototype={} +A.a1M.prototype={ +W(){return"CupertinoUserInterfaceLevelData."+this.b}} +A.ahj.prototype={ +XA(a){return a.gzu(0)==="en"}, +d_(a,b){return new A.d9(B.Ke,t.Vr)}, +O9(a){return!1}, +j(a){return"DefaultCupertinoLocalizations.delegate(en_US)"}} +A.a20.prototype={$iLZ:1} +A.M_.prototype={ +b5(){return new A.Ux(B.h,null,null,B.p)}} +A.Ux.prototype={ +bu(){var s,r,q=this +q.bN() +s=A.cW(null,B.hv,null,0,q) +s.cH() +r=s.e8$ +r.b=!0 +r.a.push(new A.b00(q)) +q.f=s +r=q.a +r.d.a=s +r.w.an(0,q.gRv()) +r=t.Y +s=q.f +q.a.toString +q.r=new A.bz(A.dP(B.fb,s,null),new A.br(0,1,r),r.h("bz"))}, +t(){var s,r=this +r.a.d.a=null +s=r.f +s===$&&A.c() +s.t() +r.a.w.ad(0,r.gRv()) +r.arH()}, +bH(a){var s,r=this,q=a.w +if(q!==r.a.w){s=r.gRv() +q.ad(0,s) +r.a.w.an(0,s)}r.c7(a)}, +cR(){this.a6b() +this.fP()}, +a6b(){var s,r,q,p=this,o=p.a.w,n=o.gm(o),m=n.c.gbC().b +o=n.a +s=m-o.b +r=p.a +r.toString +if(s<-48){if(r.d.gGx())p.a.d.E5(!1) +return}if(!r.d.gGx()){r=p.f +r===$&&A.c() +r.d5(0)}p.a.toString +q=Math.max(m,m-s/10) +o=o.a-40 +s=q-73.5 +r=p.c +r.toString +r=A.cj(r,B.h5,t.l).w.a +p.a.toString +s=A.bnV(new A.A(10,-21.5,0+r.a-10,0+r.b+21.5),new A.A(o,s,o+80,s+47.5)) +p.aK(new A.b_Z(p,new A.i(s.a,s.b),m,q))}, +ab(a){var s,r,q=this +q.a.toString +s=q.d +r=q.r +r===$&&A.c() +return A.bkw(new A.a1H(r,new A.i(0,q.e),null),B.fb,B.U9,s.a,s.b)}} +A.b00.prototype={ +$0(){return this.a.aK(new A.b0_())}, +$S:0} +A.b0_.prototype={ +$0(){}, +$S:0} +A.b_Z.prototype={ +$0(){var s=this,r=s.a +r.d=s.b +r.e=s.c-s.d}, +$S:0} +A.a1H.prototype={ +ab(a){var s,r,q=this.r,p=q.b +q=q.a +p.az(0,q.gm(q)) +s=new A.i(0,49.75).X(0,this.w) +r=p.az(0,q.gm(q)) +r=A.pM(B.a3c,B.h,r==null?1:r) +r.toString +q=p.az(0,q.gm(q)) +if(q==null)q=1 +return A.bqx(new A.Qk(null,A.bnW(q,B.a_g,new A.ez(B.J6,B.Jb)),s,1,B.a82,null),r)}} +A.YE.prototype={ +t(){var s=this,r=s.dQ$ +if(r!=null)r.ad(0,s.gmQ()) +s.dQ$=null +s.bG()}, +dd(){this.eD() +this.ee() +this.mR()}} +A.aAj.prototype={ +$0(){return this.a.grg()}, +$S:6} +A.aAi.prototype={ +$0(){return this.a.gtV()}, +$S:6} +A.aAk.prototype={ +$0(){var s=this.a +s=A.ig.prototype.gaXH.call(s) +return s}, +$S:6} +A.aAl.prototype={ +$0(){return A.bDb(this.a,this.b)}, +$S(){return this.b.h("Us<0>()")}} +A.a1I.prototype={ +ab(a){var s,r=this,q=a.bh(t.I) +q.toString +s=q.w +q=r.e +return A.bgJ(A.bgJ(new A.a1X(q,r.f,q,null),r.c,s,!0),r.d,s,!1)}} +A.J_.prototype={ +b5(){return new A.J0(B.p,this.$ti.h("J0<1>"))}, +aQR(){return this.d.$0()}, +aWG(){return this.e.$0()}} +A.J0.prototype={ +bu(){var s,r=this +r.bN() +s=A.aGG(null,r,null) +s.ch=r.gazm() +s.CW=r.gazo() +s.cx=r.gazk() +s.cy=r.gazh() +r.e=s}, +t(){var s=this,r=s.e +r===$&&A.c() +r.p2.af(0) +r.nY() +if(s.d!=null)$.b1.dP$.push(new A.b_Q(s)) +s.bG()}, +azn(a){this.d=this.a.aWG()}, +azp(a){var s,r,q=this.d +q.toString +s=a.c +s.toString +s=this.a3n(s/this.c.gC(0).a) +q=q.a +r=q.x +r===$&&A.c() +q.sm(0,r-s)}, +azl(a){var s=this,r=s.d +r.toString +r.adh(s.a3n(a.a.a.a/s.c.gC(0).a)) +s.d=null}, +azi(){var s=this.d +if(s!=null)s.adh(0) +this.d=null}, +aGP(a){var s +if(this.a.aQR()){s=this.e +s===$&&A.c() +s.Cp(a)}}, +a3n(a){var s=this.c.bh(t.I) +s.toString +switch(s.w.a){case 0:s=-a +break +case 1:s=a +break +default:s=null}return s}, +ab(a){var s,r,q=null,p=a.bh(t.I) +p.toString +s=t.l +r=p.w===B.r?A.cj(a,B.cM,s).w.r.a:A.cj(a,B.cM,s).w.r.c +r=Math.max(r,20) +return A.kL(B.bC,A.b([this.a.c,new A.a9d(0,0,0,r,A.FX(B.dg,q,q,this.gaGO(),q,q,q),q)],t.p),B.a4,B.a8M,q)}} +A.b_Q.prototype={ +$1(a){var s=this.a,r=s.d,q=r==null,p=q?null:r.b.c!=null +if(p===!0)if(!q)r.b.Dk() +s.d=null}, +$S:3} +A.Us.prototype={ +adh(a){var s,r,q,p,o=this,n=o.d.$0() +if(!n)s=o.c.$0() +else if(Math.abs(a)>=1)s=a<=0 +else{r=o.a.x +r===$&&A.c() +s=r>0.5}if(s){r=o.a +q=r.x +q===$&&A.c() +q=A.ap(800,0,q) +q.toString +q=A.dE(0,Math.min(B.c.bK(q),300)) +r.z=B.b6 +r.o_(1,B.vM,q)}else{if(n)o.b.ie() +r=o.a +q=r.r +if(q!=null&&q.a!=null){q=r.x +q===$&&A.c() +q=A.ap(0,800,q) +q.toString +q=A.dE(0,B.c.bK(q)) +r.z=B.m3 +r.o_(0,B.vM,q)}}q=r.r +if(q!=null&&q.a!=null){p=A.bn("animationStatusCallback") +p.b=new A.b_P(o,p) +q=p.bl() +r.cH() +r=r.eg$ +r.b=!0 +r.a.push(q)}else o.b.Dk()}} +A.b_P.prototype={ +$1(a){var s=this.a +s.b.Dk() +s.a.ft(this.b.bl())}, +$S:5} +A.oT.prototype={ +hd(a,b){var s +if(a instanceof A.oT){s=A.b_U(a,this,b) +s.toString +return s}s=A.b_U(null,this,b) +s.toString +return s}, +he(a,b){var s +if(a instanceof A.oT){s=A.b_U(this,a,b) +s.toString +return s}s=A.b_U(this,null,b) +s.toString +return s}, +D3(a){return new A.ahh(this,a)}, +k(a,b){var s,r +if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +if(b instanceof A.oT){s=b.a +r=this.a +r=s==null?r==null:s===r +s=r}else s=!1 +return s}, +gL(a){return J.a1(this.a)}} +A.b_V.prototype={ +$1(a){var s=A.Z(null,a,this.a) +s.toString +return s}, +$S:130} +A.b_W.prototype={ +$1(a){var s=A.Z(null,a,1-this.a) +s.toString +return s}, +$S:130} +A.ahh.prototype={ +mt(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=null,e=this.b.a +if(e==null)return +s=c.e +r=s.a +q=0.05*r +p=s.b +o=q/(e.length-1) +switch(c.d.a){case 0:s=new A.bI(1,b.a+r) +break +case 1:s=new A.bI(-1,b.a) +break +default:s=f}n=s.a +m=s.b +l=m +k=n +for(s=b.b,r=s+p,j=0,i=0;i0)A.ND() +break +case 0:if(Math.abs(b.a.a)<10&&Math.abs(a.a-r.db)>0)A.ND() +break}}, +t(){var s=this.cy +s===$&&A.c() +s.t() +this.a18()}} +A.b_Y.prototype={ +$0(){this.a.FK()}, +$S:0} +A.b_X.prototype={ +$1(a){return A.ND()}, +$S:224} +A.ahl.prototype={ +aO(a,b){var s,r,q,p=$.G(),o=p.B() +o.sA(0,this.b) +s=A.jT(B.a3p,6) +r=A.pT(B.a3v,new A.i(7,b.b)) +q=p.Z() +q.hq(s) +q.m3(r) +a.a3(q,o)}, +cF(a){return!this.b.k(0,a.b)}} +A.a1K.prototype={} +A.aAm.prototype={ +Ah(a){return new A.Q(12,a+12-1.5)}, +Jv(a,b,c,d){var s,r,q,p=null,o=A.ew(p,p,p,new A.ahl(A.yG(a).giZ(),p),B.x) +switch(b.a){case 0:return A.aSW(o,new A.Q(12,c+12-1.5)) +case 1:s=c+12-1.5 +r=A.aSW(o,new A.Q(12,s)) +q=new A.by(new Float64Array(16)) +q.ci() +q.aJ(0,6,s/2) +q.mw(3.141592653589793) +q.aJ(0,-6,-s/2) +return A.adO(p,r,p,q,!0) +case 2:return B.bb}}, +Ag(a,b){switch(a.a){case 0:return new A.i(6,b+12-1.5) +case 1:return new A.i(6,b+12-1.5-12+1.5) +case 2:return new A.i(6,b+(b+12-1.5-b)/2)}}} +A.ahk.prototype={} +A.a1L.prototype={ +ab(a){var s,r,q=null,p=t.l,o=A.cj(a,B.cM,p).w.r,n=o.b+8,m=26+o.a,l=A.cj(a,B.h5,p).w.a.a-o.c-26 +p=this.c +s=new A.i(A.U(p.a,m,l),p.b-8-n) +p=this.d +r=new A.i(A.U(p.a,m,l),p.b+8-n) +return new A.cu(new A.aS(8,n,8,8),new A.o3(new A.ads(s,r,q),new A.Uz(s,r,this.e,A.bW1(),q),q),q)}} +A.ahn.prototype={ +bA(a){var s=new A.ao9(this.e,this.f,this.r,A.aX(t.xG),null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.saMn(this.e) +b.saMo(this.f) +b.sdG(0,this.r)}} +A.ao9.prototype={ +ghR(){return!0}, +saMn(a){if(a.k(0,this.V))return +this.V=a +this.aB()}, +saMo(a){if(a.k(0,this.aE))return +this.aE=a +this.aB()}, +sdG(a,b){if(J.f(b,this.bj))return +this.bj=b +this.bi()}, +gzr(){var s=this.V,r=this.a0$ +r=r==null?null:r.gC(0).b +if(r==null)r=0 +return s.b>=r-14}, +cM(){var s,r=this,q=r.a0$ +if(q==null)return +s=t.k.a(A.L.prototype.gaI.call(r)) +q.dc(new A.bb(30,1/0,0,1/0).tG(new A.bb(0,s.b,0,s.d)),!0) +s=q.b +s.toString +t.q.a(s) +s.a=new A.i(0,r.gzr()?-7:0) +r.id=new A.Q(q.gC(0).a,q.gC(0).b-7)}, +auR(a,b){var s,r,q,p,o,n=this,m=$.G().Z() +if(30>n.gC(0).a){m.h_(b) +return m}s=A.U(n.e5(n.gzr()?n.V:n.aE).a,15,n.gC(0).a-7-8) +r=s-7 +q=s+7 +if(n.gzr()){p=a.gC(0).b-7 +o=a.gC(0) +m.a4(0,q,p) +m.q(0,s,o.b) +m.q(0,r,p)}else{m.a4(0,r,7) +m.q(0,s,0) +m.q(0,q,7)}r=A.bNw(m,b,n.gzr()?1.5707963267948966:-1.5707963267948966) +r.T(0) +return r}, +aO(a,b){var s,r,q,p,o,n,m,l=this,k=l.a0$ +if(k==null)return +s=k.b +s.toString +t.q.a(s) +r=A.jS(new A.A(0,7,0+k.gC(0).a,7+(k.gC(0).b-14)),B.e0).Ao() +q=l.auR(k,r) +p=l.bj +if(p!=null){o=A.GS(r.a,r.b,r.c,r.d+7,B.e0).dz(b.X(0,s.a).X(0,B.h)) +a.gcP(a).dm(o,new A.cx(0,B.a0,p,B.h,15).mx())}p=l.ce +n=l.cx +n===$&&A.c() +s=b.X(0,s.a) +m=k.gC(0) +p.sbr(0,a.aXY(n,s,new A.A(0,0,0+m.a,0+m.b),q,new A.b5d(k),p.a))}, +t(){this.ce.sbr(0,null) +this.ja()}, +dZ(a,b){var s,r,q=this.a0$ +if(q==null)return!1 +s=q.b +s.toString +s=t.q.a(s).a +r=s.a +s=s.b+7 +if(!new A.A(r,s,r+q.gC(0).a,s+(q.gC(0).b-14)).G(0,b))return!1 +return this.aoS(a,b)}} +A.b5d.prototype={ +$2(a,b){return a.fb(this.a,b)}, +$S:9} +A.Uz.prototype={ +b5(){return new A.UA(new A.cK(null,t.re),null,null,B.p)}, +aZC(a,b,c,d){return this.f.$4(a,b,c,d)}} +A.UA.prototype={ +aDW(a){var s=a.b +if(s!=null&&s!==0)if(s>0)this.a5i() +else this.a5g()}, +a5g(){var s=this,r=$.b1.bf$.z.i(0,s.r) +r=r==null?null:r.gaF() +t.aA.a(r) +if(r instanceof A.CX){r=r.a5 +r===$&&A.c()}else r=!1 +if(r){r=s.d +r===$&&A.c() +r.ex(0) +r=s.d +r.cH() +r=r.eg$ +r.b=!0 +r.a.push(s.gIE()) +s.e=s.f+1}}, +a5i(){var s=this,r=$.b1.bf$.z.i(0,s.r) +r=r==null?null:r.gaF() +t.aA.a(r) +if(r instanceof A.CX){r=r.M +r===$&&A.c()}else r=!1 +if(r){r=s.d +r===$&&A.c() +r.ex(0) +r=s.d +r.cH() +r=r.eg$ +r.b=!0 +r.a.push(s.gIE()) +s.e=s.f-1}}, +aJQ(a){var s,r=this +if(a!==B.Y)return +r.aK(new A.b04(r)) +s=r.d +s===$&&A.c() +s.d5(0) +r.d.ft(r.gIE())}, +bu(){this.bN() +this.d=A.cW(null,B.nz,null,1,this)}, +bH(a){var s,r=this +r.c7(a) +if(r.a.e!==a.e){r.f=0 +r.e=null +s=r.d +s===$&&A.c() +s.d5(0) +r.d.ft(r.gIE())}}, +t(){var s=this.d +s===$&&A.c() +s.t() +this.arI()}, +ab(a){var s,r,q,p=this,o=null,n=B.jw.eR(a),m=A.l8(A.blt(A.zF(A.ew(o,o,o,new A.akO(n,!0,o),B.Gn),!0,o),p.gaAD()),1,1),l=A.l8(A.blt(A.zF(A.ew(o,o,o,new A.aoM(n,!1,o),B.Gn),!0,o),p.gaAd()),1,1),k=p.a.e,j=A.a5(k).h("W<1,iF>"),i=A.ab(new A.W(k,new A.b05(),j),!0,j.h("aI.E")) +j=p.a +k=j.c +s=j.d +r=p.d +r===$&&A.c() +q=p.f +return j.aZC(a,k,s,A.li(!1,A.bkx(A.iH(o,new A.UB(m,i,B.SY.eR(a),1/A.cj(a,B.cy,t.l).w.b,l,q,p.r),B.ai,!1,o,o,o,o,p.gaDV(),o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o),B.f6,B.nz),r))}} +A.b04.prototype={ +$0(){var s=this.a,r=s.e +r.toString +s.f=r +s.e=null}, +$S:0} +A.b05.prototype={ +$1(a){return A.l8(a,1,1)}, +$S:438} +A.akO.prototype={} +A.aoM.prototype={} +A.ahe.prototype={ +aO(a,b){var s,r,q,p,o=b.b,n=this.c,m=n?1:-1,l=new A.i(o/4*m,0) +m=o/2 +s=new A.i(m,0).X(0,l) +r=new A.i(n?0:o,m).X(0,l) +q=new A.i(m,o).X(0,l) +p=$.G().B() +p.sA(0,this.b) +p.sU(0,B.u) +p.sbM(2) +p.suH(B.eS) +p.sAM(B.iq) +a.e7(s,r,p) +a.e7(r,q,p)}, +cF(a){return!a.b.k(0,this.b)||a.c!==this.c}} +A.UB.prototype={ +bA(a){var s=new A.CX(A.D(t.TC,t.x),this.w,this.e,this.f,0,null,null,new A.bs(),A.aX(t.v)) +s.by() +return s}, +bI(a,b){b.saX_(0,this.w) +b.saQ5(this.e) +b.saQ6(this.f)}, +cJ(a){var s=t.U +return new A.ahm(A.D(t.TC,s),A.ek(s),this,B.al)}} +A.ahm.prototype={ +gaF(){return t.l0.a(A.bX.prototype.gaF.call(this))}, +aa8(a,b){var s +switch(b.a){case 0:s=t.l0.a(A.bX.prototype.gaF.call(this)) +s.aS=s.a9b(s.aS,a,B.tv) +break +case 1:s=t.l0.a(A.bX.prototype.gaF.call(this)) +s.b2=s.a9b(s.b2,a,B.tw) +break}}, +mo(a,b){var s,r +if(b instanceof A.CK){this.aa8(t.x.a(a),b) +return}if(b instanceof A.vj){s=t.l0.a(A.bX.prototype.gaF.call(this)) +t.x.a(a) +r=b.a +r=r==null?null:r.gaF() +t.aA.a(r) +s.kL(a) +s.Ri(a,r) +return}}, +mr(a,b,c){t.l0.a(A.bX.prototype.gaF.call(this)).EE(t.x.a(a),t.aA.a(c.a.gaF()))}, +nB(a,b){var s +if(b instanceof A.CK){this.aa8(null,b) +return}s=t.l0.a(A.bX.prototype.gaF.call(this)) +t.x.a(a) +s.S7(a) +s.oi(a)}, +cc(a){var s,r,q,p,o +this.ok.gbm(0).al(0,a) +s=this.k4 +s===$&&A.c() +r=s.length +q=this.p1 +p=0 +for(;p0){q=l.b2.b +q.toString +n=t.yS +n.a(q) +m=l.aS.b +m.toString +n.a(m) +if(l.av!==r){q.a=new A.i(o.bl(),0) +q.e=!0 +o.b=o.bl()+l.b2.gC(0).a}if(l.av>0){m.a=B.h +m.e=!0}}else o.b=o.bl()-l.aM +r=l.av +l.a5=r!==k.c +l.M=r>0 +l.id=s.a(A.L.prototype.gaI.call(l)).ca(new A.Q(o.bl(),k.a))}, +aO(a,b){this.cc(new A.b58(this,b,a))}, +i0(a){if(!(a.b instanceof A.jZ))a.b=new A.jZ(null,null,B.h)}, +dZ(a,b){var s,r,q=this.f1$ +for(s=t.yS;q!=null;){r=q.b +r.toString +s.a(r) +if(!r.e){q=r.dY$ +continue}if(A.bhy(q,a,b))return!0 +q=r.dY$}if(A.bhy(this.aS,a,b))return!0 +if(A.bhy(this.b2,a,b))return!0 +return!1}, +bc(a){var s,r,q +this.arU(a) +for(s=this.K.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a;(q==null?r.a(q):q).bc(a)}}, +b3(a){var s,r,q +this.arV(0) +for(s=this.K.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a;(q==null?r.a(q):q).b3(0)}}, +k5(){this.cc(new A.b5b(this))}, +cc(a){var s=this.aS +if(s!=null)a.$1(s) +s=this.b2 +if(s!=null)a.$1(s) +this.GJ(a)}, +jx(a){this.cc(new A.b5c(a))}} +A.b59.prototype={ +$1(a){var s,r +t.x.a(a) +s=this.b +s=a.aY(B.aN,t.k.a(A.L.prototype.gaI.call(s)).b,a.gcG()) +r=this.a +if(s>r.a)r.a=s}, +$S:12} +A.b5a.prototype={ +$1(a){var s,r,q,p,o,n,m,l=this,k=l.a,j=++k.d +t.x.a(a) +s=a.b +s.toString +t.yS.a(s) +s.e=!1 +r=l.b +if(a===r.aS||a===r.b2||k.c>r.av)return +if(k.c===0)q=j===r.dI$+1?0:r.b2.gC(0).a +else q=l.c +j=t.k +p=j.a(A.L.prototype.gaI.call(r)) +o=k.a +a.dc(new A.bb(0,p.b-q,o,o),!0) +if(k.b+q+a.gC(0).a>j.a(A.L.prototype.gaI.call(r)).b){++k.c +k.b=r.aS.gC(0).a+r.aM +p=r.aS.gC(0) +o=r.b2.gC(0) +j=j.a(A.L.prototype.gaI.call(r)) +n=k.a +a.dc(new A.bb(0,j.b-(p.a+o.a),n,n),!0)}j=k.b +s.a=new A.i(j,0) +m=j+(a.gC(0).a+r.aM) +k.b=m +r=k.c===r.av +s.e=r +if(r)l.d.b=m}, +$S:12} +A.b58.prototype={ +$1(a){var s,r,q,p,o,n=this +t.x.a(a) +s=a.b +s.toString +t.yS.a(s) +if(s.e){r=s.a.X(0,n.b) +q=n.c +q.fb(a,r) +if(s.bd$!=null||a===n.a.aS){s=q.gcP(q) +q=new A.i(a.gC(0).a,0).X(0,r) +p=new A.i(a.gC(0).a,a.gC(0).b).X(0,r) +o=$.G().B() +o.sA(0,n.a.ao) +s.e7(q,p,o)}}}, +$S:12} +A.b57.prototype={ +$2(a,b){return this.c.dK(a,b)}, +$S:8} +A.b5b.prototype={ +$1(a){this.a.q6(t.x.a(a))}, +$S:12} +A.b5c.prototype={ +$1(a){var s +t.x.a(a) +s=a.b +s.toString +if(t.yS.a(s).e)this.a.$1(a)}, +$S:12} +A.CK.prototype={ +W(){return"_CupertinoTextSelectionToolbarItemsSlot."+this.b}} +A.am6.prototype={} +A.am7.prototype={ +cJ(a){return A.X(A.d_(null))}} +A.YF.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.YT.prototype={ +bc(a){var s,r,q +this.fg(a) +s=this.aZ$ +for(r=t.yS;s!=null;){s.bc(a) +q=s.b +q.toString +s=r.a(q).bd$}}, +b3(a){var s,r,q +this.fh(0) +s=this.aZ$ +for(r=t.yS;s!=null;){s.b3(0) +q=s.b +q.toString +s=r.a(q).bd$}}} +A.atO.prototype={} +A.uN.prototype={ +b5(){return new A.Uy(B.p)}} +A.Uy.prototype={ +aE7(a){this.aK(new A.b02(this))}, +aE9(a){var s +this.aK(new A.b03(this)) +s=this.a.d +if(s!=null)s.$0()}, +aE5(){this.aK(new A.b01(this))}, +ab(a){var s=this,r=null,q=s.ay0(a),p=s.d?B.T_.eR(a):B.B,o=s.a.d,n=A.blr(B.a5,r,q,p,B.B,44,o,B.Uz,1) +if(o!=null)return A.iH(r,n,B.ai,!1,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,s.gaE4(),s.gaE6(),s.gaE8(),r,r,r) +else return n}, +ay0(a){var s,r=null,q=this.a,p=q.c +if(p!=null)return p +p=q.f +if(p==null){q=q.e +q.toString +q=A.blu(a,q)}else q=p +s=A.dI(q,r,B.cJ,r,B.abG.e2(this.a.d!=null?B.jw.eR(a):B.ek),r,r) +q=this.a.e +if(q==null)return s +switch(q.b.a){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 9:return s +case 8:q=B.jw.eR(a) +p=$.G().B() +p.suH(B.eS) +p.sAM(B.iq) +p.sbM(1) +p.sU(0,B.u) +return A.fF(A.ew(r,r,r,new A.al0(q,p,r),B.x),13,13)}}} +A.b02.prototype={ +$0(){return this.a.d=!0}, +$S:0} +A.b03.prototype={ +$0(){return this.a.d=!1}, +$S:0} +A.b01.prototype={ +$0(){return this.a.d=!1}, +$S:0} +A.al0.prototype={ +aO(a,b){var s,r,q,p,o,n=this.c +n.sA(0,this.b) +a.bU(0) +s=b.a +r=b.b +a.aJ(0,s/2,r/2) +s=-s/2 +r=-r/2 +q=$.G().Z() +q.a4(0,s,r+3.5) +q.q(0,s,r+1) +q.abe(new A.i(s+1,r),B.Fb) +q.q(0,s+3.5,r) +s=new Float64Array(16) +p=new A.by(s) +p.ci() +p.mw(1.5707963267948966) +for(o=0;o<4;++o){a.a3(q,n) +a.az(0,s)}a.e7(B.a3M,B.a3m,n) +a.e7(B.a3K,B.a3l,n) +a.e7(B.a3L,B.a3h,n) +a.bw(0)}, +cF(a){return!a.b.k(0,this.b)}} +A.Ej.prototype={ +gnH(){var s=this.c,r=this.a.a +s=B.jx.k(0,r)?B.H6:B.H6.e2(r) +return s}, +eR(a){var s,r=this,q=r.a,p=q.a,o=p instanceof A.ev?p.eR(a):p,n=q.b +if(n instanceof A.ev)n=n.eR(a) +q=o.k(0,p)&&n.k(0,B.ek)?q:new A.XS(o,n) +s=r.b +if(s instanceof A.ev)s=s.eR(a) +return new A.Ej(q,s,A.D8(r.c,a),A.D8(r.d,a),A.D8(r.e,a),A.D8(r.f,a),A.D8(r.r,a),A.D8(r.w,a),A.D8(r.x,a),A.D8(r.y,a))}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.Ej)if(b.a.k(0,r.a)){s=J.f(b.b,r.b) +s}else s=!1 +else s=!1 +return s}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.XS.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.XS&&b.a.k(0,s.a)&&b.b.k(0,s.b)}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aho.prototype={} +A.M0.prototype={ +ab(a){var s=null +return new A.Vt(this,A.NP(this.d,A.bls(s,this.c.giZ(),s,s,s,s,s,s,s),s),s)}} +A.Vt.prototype={ +wE(a,b,c){return new A.M0(this.w.c,c,null)}, +el(a){return!this.w.c.k(0,a.w.c)}} +A.Ek.prototype={ +giZ(){var s=this.b +return s==null?this.w.b:s}, +guc(){var s=this.c +return s==null?this.w.c:s}, +gA3(){var s=null,r=this.d +if(r==null){r=this.w.r +r=new A.b0J(r.a,r.b,B.ak3,this.giZ(),s,s,s,s,s,s,s,s)}return r}, +gCD(){var s=this.e +return s==null?this.w.d:s}, +gwQ(){var s=this.f +return s==null?this.w.e:s}, +gyu(){var s=this.r +return s==null?!1:s}, +eR(a){var s,r=this,q=new A.aAn(a),p=r.gtq(),o=q.$1(r.b),n=q.$1(r.c),m=r.d +m=m==null?null:m.eR(a) +s=q.$1(r.e) +q=q.$1(r.f) +r.gyu() +return A.bDh(p,o,n,m,s,q,!1,r.w.aYW(a,r.d==null))}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.Ek)if(b.gtq()==r.gtq())if(b.giZ().k(0,r.giZ()))if(b.guc().k(0,r.guc()))if(b.gA3().k(0,r.gA3()))if(b.gCD().k(0,r.gCD())){s=b.gwQ().k(0,r.gwQ()) +if(s){b.gyu() +r.gyu()}}else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +gL(a){var s=this,r=s.gtq(),q=s.giZ(),p=s.guc(),o=s.gA3(),n=s.gCD(),m=s.gwQ() +s.gyu() +return A.a6(r,q,p,o,n,m,!1,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aAn.prototype={ +$1(a){return a instanceof A.ev?a.eR(this.a):a}, +$S:185} +A.Pk.prototype={ +eR(a){var s=this,r=new A.aLR(a),q=s.gtq(),p=r.$1(s.giZ()),o=r.$1(s.guc()),n=s.gA3() +n=n==null?null:n.eR(a) +return new A.Pk(q,p,o,n,r.$1(s.gCD()),r.$1(s.gwQ()),s.gyu())}, +gtq(){return this.a}, +giZ(){return this.b}, +guc(){return this.c}, +gA3(){return this.d}, +gCD(){return this.e}, +gwQ(){return this.f}, +gyu(){return this.r}} +A.aLR.prototype={ +$1(a){return a instanceof A.ev?a.eR(this.a):a}, +$S:185} +A.ahr.prototype={ +aYW(a,b){var s,r,q=this,p=new A.b06(a),o=p.$1(q.b),n=p.$1(q.c),m=p.$1(q.d) +p=p.$1(q.e) +s=q.r +if(b){r=s.a +if(r instanceof A.ev)r=r.eR(a) +s=s.b +s=new A.ahp(r,s instanceof A.ev?s.eR(a):s)}return new A.ahr(q.a,o,n,m,p,!1,s)}} +A.b06.prototype={ +$1(a){return a instanceof A.ev?a.eR(this.a):a}, +$S:130} +A.ahp.prototype={} +A.b0J.prototype={ +gnH(){return A.Ej.prototype.gnH.call(this).e2(this.z)}} +A.ahq.prototype={} +A.T7.prototype={ +aKo(a){if(this.a.d!=null)this.aK(new A.aWy(this,a))}, +a9n(a){var s=this.a,r=s.d +if(r==null)return +switch(s.c){case!1:r.$1(!0) +break +case!0:r.$1(!1) +break +case null:case void 0:r.$1(!1) +break}this.c.gaF().Au(B.rY)}, +aKm(){return this.a9n(null)}, +a9p(a){if(this.KS$!=null)this.aK(new A.aWA(this))}, +aKp(){return this.a9p(null)}, +aKl(a){if(a!==this.adV$)this.aK(new A.aWv(this,a))}} +A.aWy.prototype={ +$0(){this.a.KS$=this.b.c}, +$S:0} +A.aWA.prototype={ +$0(){this.a.KS$=null}, +$S:0} +A.aWv.prototype={ +$0(){this.a.adV$=this.b}, +$S:0} +A.adG.prototype={ +sTn(a){if(J.f(this.a,a))return +this.a=a +this.D()}, +sXl(a){if(J.f(this.b,a))return +this.b=a +this.D()}, +srd(a){if(a.k(0,this.c))return +this.c=a +this.D()}, +sV5(a){if(J.f(a,this.d))return +this.d=a +this.D()}, +sEj(a){if(a===this.e)return +this.e=a +this.D()}, +stV(a){if(a===this.f)return +this.f=a +this.D()}, +cF(a){return!0}, +zm(a){return null}, +gAt(){return null}, +Gu(a){return!1}, +j(a){return"#"+A.bU(this)}} +A.b9x.prototype={ +$0(){return null}, +$S:444} +A.b8F.prototype={ +$0(){var s=self,r=s.window.navigator.platform.toLowerCase() +if(B.d.c4(r,"mac"))return B.ct +if(B.d.c4(r,"win"))return B.dq +if(B.d.G(r,"iphone")||B.d.G(r,"ipad")||B.d.G(r,"ipod"))return B.a6 +if(B.d.G(r,"android"))return B.ar +if(s.window.matchMedia("only screen and (pointer: fine)").matches)return B.dp +return B.ar}, +$S:445} +A.x4.prototype={ +FC(a,b){var s=A.lc.prototype.gm.call(this,0) +s.toString +return J.bkl(s)}, +j(a){return this.FC(0,B.bG)}} +A.EN.prototype={} +A.a3l.prototype={} +A.a3i.prototype={} +A.cI.prototype={ +aRb(){var s,r,q,p,o,n,m,l=this.a +if(t.vp.b(l)){s=l.gzA(l) +r=l.j(0) +if(typeof s=="string"&&s!==r){q=r.length +p=J.al(s) +if(q>p.gF(s)){o=B.d.Ep(r,s) +if(o===q-p.gF(s)&&o>2&&B.d.am(r,o-2,o)===": "){n=B.d.am(r,0,o-2) +m=B.d.f7(n," Failed assertion:") +if(m>=0)n=B.d.am(n,0,m)+"\n"+B.d.c5(n,m+1) +l=p.rF(s)+"\n"+n}else l=null}else l=null}else l=null +if(l==null)l=r}else if(!(typeof l=="string"))l=t.Lt.b(l)||t.VI.b(l)?J.i1(l):" "+A.j(l) +l=B.d.rF(l) +return l.length===0?" ":l}, +gamx(){return A.bDD(new A.aEp(this).$0(),!0,B.nx)}, +fu(){return"Exception caught by "+this.c}, +j(a){A.bMW(null,B.TB,this) +return""}} +A.aEp.prototype={ +$0(){return J.bBF(this.a.aRb().split("\n")[0])}, +$S:59} +A.zd.prototype={ +gzA(a){return this.j(0)}, +fu(){return"FlutterError"}, +j(a){var s,r,q=new A.ca(this.a,t.ow) +if(!q.gaA(0)){s=q.ga9(0) +r=J.f9(s) +s=A.lc.prototype.gm.call(r,s) +s.toString +s=J.bkl(s)}else s="FlutterError" +return s}, +$ixV:1} +A.aEq.prototype={ +$1(a){return A.cn(a)}, +$S:446} +A.aEr.prototype={ +$1(a){return a+1}, +$S:77} +A.aEs.prototype={ +$1(a){return a+1}, +$S:77} +A.bc2.prototype={ +$1(a){return B.d.G(a,"StackTrace.current")||B.d.G(a,"dart-sdk/lib/_internal")||B.d.G(a,"dart:sdk_internal")}, +$S:25} +A.aj5.prototype={} +A.aj7.prototype={} +A.aj6.prototype={} +A.a_M.prototype={ +kW(){}, +w2(){}, +aUN(a){var s;++this.c +s=a.$0() +s.l4(new A.axl(this)) +return s}, +ZD(){}, +j(a){return""}} +A.axl.prototype={ +$0(){var s,r,q,p=this.a +if(--p.c<=0)try{p.arq() +if(p.nb$.c!==0)p.a4_()}catch(q){s=A.b2(q) +r=A.bC(q) +p=A.cn("while handling pending events") +A.eR(new A.cI(s,r,"foundation",p,null,!1))}}, +$S:28} +A.aq.prototype={} +A.bu.prototype={ +an(a,b){var s,r,q,p,o=this +if(o.ghD(o)===o.gfi().length){s=t.Nw +if(o.ghD(o)===0)o.sfi(A.bc(1,null,!1,s)) +else{r=A.bc(o.gfi().length*2,null,!1,s) +for(q=0;q0){r.gfi()[s]=null +r.ste(r.gte()+1)}else r.a7u(s) +break}}, +t(){this.sfi($.aa()) +this.shD(0,0)}, +D(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this +if(f.ghD(f)===0)return +f.sqC(f.gqC()+1) +p=f.ghD(f) +for(s=0;s0){l=f.ghD(f)-f.gte() +if(l*2<=f.gfi().length){k=A.bc(l,null,!1,t.Nw) +for(j=0,s=0;s#"+A.bU(this)+"("+A.j(this.gm(this))+")"}} +A.Mf.prototype={ +W(){return"DiagnosticLevel."+this.b}} +A.pe.prototype={ +W(){return"DiagnosticsTreeStyle."+this.b}} +A.b4f.prototype={} +A.iG.prototype={ +FC(a,b){return this.du(0)}, +j(a){return this.FC(0,B.bG)}} +A.lc.prototype={ +gm(a){this.aD0() +return this.at}, +aD0(){return}} +A.yM.prototype={} +A.a2h.prototype={} +A.b0.prototype={ +fu(){return"#"+A.bU(this)}, +FC(a,b){var s=this.fu() +return s}, +j(a){return this.FC(0,B.bG)}} +A.a2g.prototype={ +fu(){return"#"+A.bU(this)}} +A.n3.prototype={ +j(a){return this.aip(B.nx).du(0)}, +fu(){return"#"+A.bU(this)}, +aZn(a,b){return A.beu(a,b,this)}, +aip(a){return this.aZn(null,a)}} +A.a2i.prototype={} +A.ahQ.prototype={} +A.ha.prototype={} +A.rG.prototype={} +A.qh.prototype={ +j(a){return"[#"+A.bU(this)+"]"}} +A.dp.prototype={ +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return A.w(this).h("dp").b(b)&&J.f(b.a,this.a)}, +gL(a){return A.a6(A.J(this),this.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){var s=A.w(this),r=s.h("dp.T"),q=this.a,p=A.ay(r)===B.Hw?"<'"+A.j(q)+"'>":"<"+A.j(q)+">" +if(A.J(this)===A.ay(s.h("dp")))return"["+p+"]" +return"["+A.ay(r).j(0)+" "+p+"]"}} +A.bhD.prototype={} +A.ne.prototype={} +A.Om.prototype={} +A.bW.prototype={ +gHX(){var s,r=this,q=r.c +if(q===$){s=A.ek(r.$ti.c) +r.c!==$&&A.N() +r.c=s +q=s}return q}, +P(a,b){this.b=!0 +this.gHX().af(0) +return B.b.P(this.a,b)}, +af(a){this.b=!1 +B.b.af(this.a) +this.gHX().af(0)}, +G(a,b){var s=this,r=s.a +if(r.length<3)return B.b.G(r,b) +if(s.b){s.gHX().I(0,r) +s.b=!1}return s.gHX().G(0,b)}, +gar(a){var s=this.a +return new J.cA(s,s.length,A.a5(s).h("cA<1>"))}, +gaA(a){return this.a.length===0}, +gcT(a){return this.a.length!==0}, +ig(a,b){var s=this.a,r=A.a5(s) +return b?A.b(s.slice(0),r):J.na(s.slice(0),r.c)}, +eT(a){return this.ig(0,!0)}} +A.rs.prototype={ +E(a,b){var s=this.a,r=s.i(0,b) +s.u(0,b,(r==null?0:r)+1)}, +P(a,b){var s=this.a,r=s.i(0,b) +if(r==null)return!1 +if(r===1)s.P(0,b) +else s.u(0,b,r-1) +return!0}, +G(a,b){return this.a.aR(0,b)}, +gar(a){var s=this.a +return A.jb(s,s.r,A.w(s).c)}, +gaA(a){return this.a.a===0}, +gcT(a){return this.a.a!==0}} +A.GF.prototype={ +aY_(a,b,c){var s=this.a,r=s==null?$.Zs():s,q=r.q4(0,0,b,A.eT(b),c) +if(q===s)return this +s=this.$ti +return new A.GF(q,s.h("@<1>").ak(s.y[1]).h("GF<1,2>"))}, +i(a,b){var s=this.a +return s==null?null:s.Ac(0,0,b,J.a1(b))}} +A.b8_.prototype={} +A.ajA.prototype={ +q4(a,b,c,d,e){var s,r,q,p,o=B.f.y9(d,b)&31,n=this.a,m=n[o] +if(m==null)m=$.Zs() +s=m.q4(0,b+5,c,d,e) +if(s===m)n=this +else{r=n.length +q=A.bc(r,null,!1,t.X) +for(p=0;p>>0,a1=c.a,a2=(a1&a0-1)>>>0,a3=a2-(a2>>>1&1431655765) +a3=(a3&858993459)+(a3>>>2&858993459) +a3=a3+(a3>>>4)&252645135 +a3+=a3>>>8 +s=a3+(a3>>>16)&63 +if((a1&a0)>>>0!==0){a=c.b +a2=2*s +r=a[a2] +q=a2+1 +p=a[q] +if(r==null){o=J.bBv(p,a5+5,a6,a7,a8) +if(o===p)return c +a2=a.length +n=A.bc(a2,b,!1,t.X) +for(m=0;m>>1&1431655765) +a3=(a3&858993459)+(a3>>>2&858993459) +a3=a3+(a3>>>4)&252645135 +a3+=a3>>>8 +i=a3+(a3>>>16)&63 +if(i>=16){a1=c.aFt(a5) +a1.a[a]=$.Zs().q4(0,a5+5,a6,a7,a8) +return a1}else{h=2*s +g=2*i +f=A.bc(g+2,b,!1,t.X) +for(a=c.b,e=0;e>>0,f)}}}, +Ac(a,b,c,d){var s,r,q,p,o=1<<(B.f.y9(d,b)&31)>>>0,n=this.a +if((n&o)>>>0===0)return null +n=(n&o-1)>>>0 +s=n-(n>>>1&1431655765) +s=(s&858993459)+(s>>>2&858993459) +s=s+(s>>>4)&252645135 +s+=s>>>8 +n=this.b +r=2*(s+(s>>>16)&63) +q=n[r] +p=n[r+1] +if(q==null)return p.Ac(0,b+5,c,d) +if(c===q)return p +return null}, +aFt(a){var s,r,q,p,o,n,m,l=A.bc(32,null,!1,t.X) +for(s=this.a,r=a+5,q=this.b,p=0,o=0;o<32;++o)if((B.f.y9(s,o)&1)!==0){n=q[p] +m=p+1 +if(n==null)l[o]=q[m] +else l[o]=$.Zs().q4(0,r,n,J.a1(n),q[m]) +p+=2}return new A.ajA(l)}} +A.Vn.prototype={ +q4(a,b,c,d,e){var s,r,q,p,o,n,m,l,k,j=this,i=j.a +if(d===i){s=j.a5A(c) +if(s!==-1){i=j.b +r=s+1 +q=i[r] +if(q==null?e==null:q===e)i=j +else{q=i.length +p=A.bc(q,null,!1,t.X) +for(o=0;o>>0,k).q4(0,b,c,d,e)}, +Ac(a,b,c,d){var s=this.a5A(c) +return s<0?null:this.b[s+1]}, +a5A(a){var s,r,q=this.b,p=q.length +for(s=J.nO(a),r=0;r=s.a.length)s.Sc(q) +B.L.dL(s.a,s.b,q,a) +s.b=s.b+r.gF(a)}, +BY(a,b,c){var s=this,r=c==null?s.e.length:c,q=s.b+(r-b) +if(q>=s.a.length)s.Sc(q) +B.L.dL(s.a,s.b,q,a) +s.b=q}, +aHu(a){return this.BY(a,0,null)}, +Sc(a){var s=this.a,r=s.length,q=a==null?0:a,p=Math.max(q,r*2),o=new Uint8Array(p) +B.L.dL(o,0,r,s) +this.a=o}, +aGA(){return this.Sc(null)}, +o8(a){var s=B.f.bx(this.b,a) +if(s!==0)this.BY($.byi(),0,a-s)}, +tB(){var s,r=this +if(r.c)throw A.d(A.ad("done() must not be called more than once on the same "+A.J(r).j(0)+".")) +s=A.kw(r.a.buffer,0,r.b) +r.a=new Uint8Array(0) +r.c=!0 +return s}} +A.Qm.prototype={ +oW(a){return J.bdN(this.a,this.b++)}, +Ny(a){var s=this.b,r=$.hi(),q=J.bBj(this.a,s,r) +this.b+=8 +return q}, +rM(a){var s=this.a,r=J.bS(s),q=J.iZ(r.gdl(s),r.gfY(s)+this.b,a) +this.b+=a +return q}, +o8(a){var s=this.b,r=B.f.bx(s,a) +if(r!==0)this.b=s+(a-r)}} +A.oE.prototype={ +gL(a){var s=this +return A.a6(s.b,s.d,s.f,s.r,s.w,s.x,s.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.oE&&b.b===s.b&&b.d===s.d&&b.f===s.f&&b.r===s.r&&b.w===s.w&&b.x===s.x&&b.a===s.a}, +j(a){var s=this +return"StackFrame(#"+s.b+", "+s.c+":"+s.d+"/"+s.e+":"+s.f+":"+s.r+", className: "+s.w+", method: "+s.x+")"}} +A.aTP.prototype={ +$1(a){return a.length!==0}, +$S:25} +A.d9.prototype={ +yE(a,b){return new A.aM($.aK,this.$ti.h("aM<1>"))}, +ts(a){return this.yE(a,null)}, +k7(a,b,c){var s=a.$1(this.a) +if(c.h("an<0>").b(s))return s +return new A.d9(s,c.h("d9<0>"))}, +cu(a,b){return this.k7(a,null,b)}, +l4(a){var s,r,q,p,o,n=this +try{s=a.$0() +if(t.L0.b(s)){p=s.cu(new A.aUN(n),n.$ti.c) +return p}return n}catch(o){r=A.b2(o) +q=A.bC(o) +p=A.bf8(r,q,n.$ti.c) +return p}}, +$ian:1} +A.aUN.prototype={ +$1(a){return this.a.a}, +$S(){return this.a.$ti.h("1(@)")}} +A.a4l.prototype={ +W(){return"GestureDisposition."+this.b}} +A.ey.prototype={} +A.F8.prototype={ +aG(a){this.a.ph(this.b,this.c,a)}} +A.Jf.prototype={ +j(a){var s=this,r=s.a +r=r.length===0?""+"":""+new A.W(r,new A.b2p(s),A.a5(r).h("W<1,h>")).cj(0,", ") +if(s.b)r+=" [open]" +if(s.c)r+=" [held]" +if(s.d)r+=" [hasPendingSweep]" +return r.charCodeAt(0)==0?r:r}} +A.b2p.prototype={ +$1(a){if(a===this.a.e)return a.j(0)+" (eager winner)" +return a.j(0)}, +$S:448} +A.aFC.prototype={ +ve(a,b,c){this.a.cU(0,b,new A.aFE(this,b)).a.push(c) +return new A.F8(this,b,c)}, +aNJ(a,b){var s=this.a.i(0,b) +if(s==null)return +s.b=!1 +this.a9u(b,s)}, +a1B(a){var s,r=this.a,q=r.i(0,a) +if(q==null)return +if(q.c){q.d=!0 +return}r.P(0,a) +r=q.a +if(r.length!==0){B.b.ga9(r).kn(a) +for(s=1;s").ak(q.y[1]),r=new A.bt(J.az(r.a),r.b,q.h("bt<1,2>")),p=n.r,q=q.y[1];r.H();){o=r.a;(o==null?q.a(o):o).AK(0,p)}s.af(0) +n.c=B.G +s=n.y +if(s!=null)s.bq(0)}} +A.F9.prototype={ +aAn(a){var s,r,q,p,o=this +try{o.Wk$.I(0,A.bIf(a.a,o.gaw5())) +if(o.c<=0)o.Qu()}catch(q){s=A.b2(q) +r=A.bC(q) +p=A.cn("while handling a pointer data packet") +A.eR(new A.cI(s,r,"gestures library",p,null,!1))}}, +aw6(a){var s +if($.bF().geV().b.i(0,a)==null)s=null +else{s=$.cF().d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}}return s}, +aNg(a){var s=this.Wk$ +if(s.b===s.c&&this.c<=0)A.iC(this.gaxB()) +s.Cn(A.boH(0,0,0,0,0,B.ba,!1,0,a,B.h,1,1,0,0,0,0,0,0,B.G,0))}, +Qu(){for(var s=this.Wk$;!s.gaA(0);)this.X0(s.ue())}, +X0(a){this.ga7E().dM(0) +this.a5h(a)}, +a5h(a){var s,r,q=this,p=!t.pY.b(a) +if(!p||t.ks.b(a)||t.XA.b(a)||t.w5.b(a)){s=A.aGD() +q.E8(s,a.gbe(a),a.gA7()) +if(!p||t.w5.b(a))q.Wm$.u(0,a.gbP(),s) +p=s}else if(t.oN.b(a)||t.Ko.b(a)||t.WQ.b(a)){s=q.Wm$.P(0,a.gbP()) +p=s}else p=a.gKp()||t.DB.b(a)?q.Wm$.i(0,a.gbP()):null +if(p!=null||t.ge.b(a)||t.PB.b(a)){r=q.DH$ +r.toString +r.b_2(a,t.n2.b(a)?null:p) +q.anE(0,a,p)}}, +E8(a,b,c){a.E(0,new A.m5(this,t.AL))}, +aQ_(a,b,c){var s,r,q,p,o,n,m,l,k,j,i="gesture library" +if(c==null){try{this.mk$.aia(b)}catch(p){s=A.b2(p) +r=A.bC(p) +A.eR(A.bF7(A.cn("while dispatching a non-hit-tested pointer event"),b,s,null,new A.aFH(b),i,r))}return}for(n=c.a,m=n.length,l=0;lr.CW){r.dy=B.m6 +r.aG(B.c3)}else if(a.gme().gvB()>A.qz(a.gdR(a),r.b))r.aG(B.aJ) +if(s>r.CW&&r.dy===B.HV){r.dy=B.m6 +if(r.at!=null)r.dr("onStart",new A.aF4(r,s))}}r.GD(a)}, +kn(a){var s=this,r=s.dy +if(r===B.m5)r=s.dy=B.HV +if(s.at!=null&&r===B.m6)s.dr("onStart",new A.aF2(s))}, +yY(a){var s=this,r=s.dy,q=r===B.m6||r===B.aiV +if(r===B.m5){s.aG(B.aJ) +return}if(q&&s.ch!=null)if(s.ch!=null)s.dr("onEnd",new A.aF3(s)) +s.dy=B.tA}, +j0(a){this.ki(a) +this.yY(a)}} +A.aF4.prototype={ +$0(){var s=this.a,r=s.at +r.toString +s=s.db +s===$&&A.c() +return r.$1(new A.zk(s.b))}, +$S:0} +A.aF2.prototype={ +$0(){var s=this.a,r=s.at +r.toString +s.dx===$&&A.c() +s=s.db +s===$&&A.c() +return r.$1(new A.zk(s.b))}, +$S:0} +A.aF3.prototype={ +$0(){var s=this.a,r=s.ch +r.toString +s=s.db +s===$&&A.c() +return r.$1(new A.zk(s.b))}, +$S:0} +A.a2d.prototype={ +gL(a){return A.a6(this.a,23,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.a2d&&b.a==this.a}, +j(a){return"DeviceGestureSettings(touchSlop: "+A.j(this.a)+")"}} +A.m5.prototype={ +j(a){return"#"+A.bU(this)+"("+this.a.j(0)+")"}} +A.K5.prototype={} +A.VQ.prototype={ +bL(a,b){return this.a.iV(b)}} +A.Jz.prototype={ +bL(a,b){var s,r,q,p,o=new Float64Array(16),n=new A.by(o) +n.v(b) +s=this.a +r=s.a +q=s.b +s=o[0] +p=o[3] +o[0]=s+r*p +o[1]=o[1]+q*p +o[2]=o[2]+0*p +o[3]=p +p=o[4] +s=o[7] +o[4]=p+r*s +o[5]=o[5]+q*s +o[6]=o[6]+0*s +o[7]=s +s=o[8] +p=o[11] +o[8]=s+r*p +o[9]=o[9]+q*p +o[10]=o[10]+0*p +o[11]=p +p=o[12] +s=o[15] +o[12]=p+r*s +o[13]=o[13]+q*s +o[14]=o[14]+0*s +o[15]=s +return n}} +A.rt.prototype={ +ayv(){var s,r,q,p,o=this.c +if(o.length===0)return +s=this.b +r=B.b.ga_(s) +for(q=o.length,p=0;p":B.b.cj(s,", "))+")"}} +A.FZ.prototype={} +A.Oz.prototype={} +A.FY.prototype={} +A.lt.prototype={ +mp(a){var s=this +switch(a.ghs(a)){case 1:if(s.p1==null&&s.p3==null&&s.p2==null&&s.p4==null&&s.RG==null&&s.R8==null)return!1 +break +case 2:return!1 +case 4:return!1 +default:return!1}return s.xc(a)}, +UV(){var s,r=this +r.aG(B.c3) +r.k2=!0 +s=r.CW +s.toString +r.a14(s) +r.auB()}, +aez(a){var s,r=this +if(!a.grZ()){if(t.pY.b(a)){s=new A.k0(a.gdR(a),A.bc(20,null,!1,t.av)) +r.K=s +s.pq(a.ghi(a),a.geI())}if(t.n2.b(a)){s=r.K +s.toString +s.pq(a.ghi(a),a.geI())}}if(t.oN.b(a)){if(r.k2)r.auz(a) +else r.aG(B.aJ) +r.Ru()}else if(t.Ko.b(a)){r.a2G() +r.Ru()}else if(t.pY.b(a)){r.k3=new A.hS(a.geI(),a.gbe(a)) +r.k4=a.ghs(a) +r.auy(a)}else if(t.n2.b(a))if(a.ghs(a)!==r.k4&&!r.k2){r.aG(B.aJ) +s=r.CW +s.toString +r.ki(s)}else if(r.k2)r.auA(a)}, +auy(a){this.k3.toString +this.e.i(0,a.gbP()).toString +switch(this.k4){case 1:break +case 2:break +case 4:break}}, +a2G(){var s,r=this +if(r.ch===B.jY)switch(r.k4){case 1:s=r.p1 +if(s!=null)r.dr("onLongPressCancel",s) +break +case 2:break +case 4:break}}, +auB(){var s,r,q=this +switch(q.k4){case 1:if(q.p3!=null){s=q.k3 +r=s.b +s=s.a +q.dr("onLongPressStart",new A.aJG(q,new A.FZ(r,s)))}s=q.p2 +if(s!=null)q.dr("onLongPress",s) +break +case 2:break +case 4:break}}, +auA(a){var s=this,r=a.gbe(a),q=a.geI(),p=a.gbe(a).Y(0,s.k3.b) +a.geI().Y(0,s.k3.a) +switch(s.k4){case 1:if(s.p4!=null)s.dr("onLongPressMoveUpdate",new A.aJF(s,new A.Oz(r,q,p))) +break +case 2:break +case 4:break}}, +auz(a){var s,r=this,q=r.K.Am(),p=q==null?B.du:new A.lC(q.a) +a.gbe(a) +s=a.geI() +r.K=null +switch(r.k4){case 1:if(r.RG!=null)r.dr("onLongPressEnd",new A.aJE(r,new A.FY(s,p))) +s=r.R8 +if(s!=null)r.dr("onLongPressUp",s) +break +case 2:break +case 4:break}}, +Ru(){var s=this +s.k2=!1 +s.K=s.k4=s.k3=null}, +aG(a){var s=this +if(a===B.aJ)if(s.k2)s.Ru() +else s.a2G() +s.a0Y(a)}, +kn(a){}} +A.aJG.prototype={ +$0(){return this.a.p3.$1(this.b)}, +$S:0} +A.aJF.prototype={ +$0(){return this.a.p4.$1(this.b)}, +$S:0} +A.aJE.prototype={ +$0(){return this.a.RG.$1(this.b)}, +$S:0} +A.u7.prototype={ +i(a,b){return this.c[b+this.a]}, +a2(a,b){var s,r,q,p,o,n,m +for(s=this.b,r=this.c,q=this.a,p=b.c,o=b.a,n=0,m=0;m"),q=A.pw(A.ab(new A.W(s,new A.aOc(),r),!0,r.h("aI.E")),"[","]") +r=this.b +r===$&&A.c() +return"PolynomialFit("+q+", confidence: "+B.c.b8(r,3)+")"}} +A.aOc.prototype={ +$1(a){return B.c.Zv(a,3)}, +$S:455} +A.a66.prototype={ +x_(a6){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=this.a,a5=a4.length +if(a6>a5)return null +s=a6+1 +r=new A.aOb(new Float64Array(s)) +q=s*a5 +p=new Float64Array(q) +for(o=this.c,n=0*a5,m=0;m=0;--c){p[c]=new A.u7(c*a5,a5,q).a2(0,d) +for(i=c*s,k=l;k>c;--k)p[c]=p[c]-n[i+k]*p[k] +p[c]=p[c]/n[i+c]}for(b=0,m=0;mr){r=p +s=q}}else{r.toString +if(p0:b.b>0,o=q?b.a:b.b,n=this.ayj(a,p) +if(n===c)return o +else{n.toString +s=this.QN(a,n,p) +r=this.QN(a,c,p) +if(p){q=r+o +if(q>s)return q-s +else return 0}else{q=r+o +if(q").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1],q=n;s.H();){p=s.a +if(p==null)p=r.a(p) +q=o?q+p.a:q+p.b}return q/m}, +jW(a){var s,r,q,p,o,n,m,l,k,j,i,h=this +if(!a.grZ())s=t.pY.b(a)||t.n2.b(a)||t.w5.b(a)||t.DB.b(a) +else s=!1 +if(s){s=h.p2.i(0,a.gbP()) +s.toString +if(t.w5.b(a))s.pq(a.ghi(a),B.h) +else if(t.DB.b(a))s.pq(a.ghi(a),a.gEW(a)) +else s.pq(a.ghi(a),a.geI())}s=t.n2.b(a) +if(s&&a.ghs(a)!==h.k3){h.QP(a.gbP()) +return}if((s||t.DB.b(a))&&h.aHY(a.gbP())){r=s?a.gme():t.DB.a(a).gagE() +q=s?a.gpR():t.DB.a(a).gafG() +if(s)p=a.gbe(a) +else{o=a.gbe(a) +t.DB.a(a) +p=o.X(0,a.gEW(a))}n=s?a.geI():a.geI().X(0,t.DB.a(a).gXQ()) +h.k1=new A.hS(n,p) +m=h.aGE(a.gbP(),q) +$label0$0:{l=h.fy +if(B.e7===l||B.HT===l){s=h.id +s===$&&A.c() +h.id=s.X(0,new A.hS(q,r)) +h.k2=a.ghi(a) +h.k4=a.gd3(a) +k=h.Bs(q) +if(a.gd3(a)==null)j=null +else{s=a.gd3(a) +s.toString +j=A.Ai(s)}s=h.ok +s===$&&A.c() +o=A.GI(j,null,k,n).ge6() +i=h.Bv(k) +h.ok=s+o*J.eY(i==null?1:i) +s=a.gdR(a) +o=h.b +if(h.Rb(s,o==null?null:o.a)){h.p1=!0 +if(B.b.G(h.RG,a.gbP()))h.a2C(a.gbP()) +else h.aG(B.c3)}break $label0$0}if(B.iQ===l){s=a.ghi(a) +h.a2L(h.Bs(m),p,n,h.Bv(m),s)}}h.aG6(a.gbP(),q)}if(t.oN.b(a)||t.Ko.b(a)||t.WQ.b(a))h.QP(a.gbP())}, +kn(a){var s=this +s.RG.push(a) +s.rx=a +if(!s.fr||s.p1)s.a2C(a)}, +j0(a){this.QP(a)}, +yY(a){var s,r=this +switch(r.fy.a){case 0:break +case 1:r.aG(B.aJ) +s=r.cy +if(s!=null)r.dr("onCancel",s) +break +case 2:r.aux(a) +break}r.p1=!1 +r.p2.af(0) +r.k3=null +r.fy=B.e7}, +QP(a){var s,r=this +r.ki(a) +s=r.RG +if(!B.b.P(s,a))r.MS(a,B.aJ) +r.p3.P(0,a) +if(r.rx===a)r.rx=s.length!==0?B.b.ga9(s):null}, +aDc(){var s,r=this +if(r.ay!=null){s=r.go +s===$&&A.c() +r.dr("onDown",new A.aC0(r,new A.r8(s.b)))}}, +a2C(a){var s,r,q,p,o,n,m,l,k=this +if(k.fy===B.iQ)return +k.fy=B.iQ +s=k.id +s===$&&A.c() +r=k.k2 +q=k.k4 +switch(k.at.a){case 1:p=k.go +p===$&&A.c() +k.go=p.X(0,s) +o=B.h +break +case 0:o=k.Bs(s.a) +break +default:o=null}k.id=B.Da +k.k4=k.k2=null +k.auD(r,a) +if(!J.f(o,B.h)&&k.CW!=null){n=q!=null?A.Ai(q):null +s=k.go +s===$&&A.c() +m=A.GI(n,null,o,s.a.X(0,o)) +l=k.go.X(0,new A.hS(o,m)) +k.a2L(o,l.b,l.a,k.Bv(o),r)}k.aG(B.c3)}, +auD(a,b){var s,r,q=this +if(q.ch!=null){s=q.go +s===$&&A.c() +r=q.e.i(0,b) +r.toString +q.dr("onStart",new A.aC5(q,new A.o7(a,s.b,r)))}}, +a2L(a,b,c,d,e){if(this.CW!=null)this.dr("onUpdate",new A.aC6(this,new A.n6(e,a,d,b)))}, +aux(a){var s,r,q,p,o,n=this,m={} +if(n.cx==null)return +s=n.p2.i(0,a) +r=s.Am() +m.a=null +if(r==null){q=new A.aC1() +p=null}else{o=m.a=n.PM(r,s.a) +q=o!=null?new A.aC2(m,r):new A.aC3(r) +p=o}if(p==null){n.k1===$&&A.c() +m.a=new A.lf(B.du,0)}n.aTX("onEnd",new A.aC4(m,n),q)}, +t(){this.p2.af(0) +this.nY()}} +A.aC0.prototype={ +$0(){return this.a.ay.$1(this.b)}, +$S:0} +A.aC5.prototype={ +$0(){return this.a.ch.$1(this.b)}, +$S:0} +A.aC6.prototype={ +$0(){return this.a.CW.$1(this.b)}, +$S:0} +A.aC1.prototype={ +$0(){return"Could not estimate velocity."}, +$S:59} +A.aC2.prototype={ +$0(){return this.b.j(0)+"; fling at "+this.a.a.a.j(0)+"."}, +$S:59} +A.aC3.prototype={ +$0(){return this.a.j(0)+"; judged to not be a fling."}, +$S:59} +A.aC4.prototype={ +$0(){var s,r=this.b.cx +r.toString +s=this.a.a +s.toString +return r.$1(s)}, +$S:0} +A.oO.prototype={ +PM(a,b){var s,r,q,p,o=this,n=o.dx +if(n==null)n=50 +s=o.db +if(s==null)s=A.qz(b,o.b) +r=a.a.b +if(!(Math.abs(r)>n&&Math.abs(a.d.b)>s))return null +q=o.dy +if(q==null)q=8000 +p=A.U(r,-q,q) +o.k1===$&&A.c() +return new A.lf(new A.lC(new A.i(0,p)),p)}, +Rb(a,b){var s=this.ok +s===$&&A.c() +return Math.abs(s)>A.qz(a,this.b)}, +Bs(a){return new A.i(0,a.b)}, +Bv(a){return a.b}, +QM(){return B.h2}} +A.oi.prototype={ +PM(a,b){var s,r,q,p,o=this,n=o.dx +if(n==null)n=50 +s=o.db +if(s==null)s=A.qz(b,o.b) +r=a.a.a +if(!(Math.abs(r)>n&&Math.abs(a.d.a)>s))return null +q=o.dy +if(q==null)q=8000 +p=A.U(r,-q,q) +o.k1===$&&A.c() +return new A.lf(new A.lC(new A.i(p,0)),p)}, +Rb(a,b){var s=this.ok +s===$&&A.c() +return Math.abs(s)>A.qz(a,this.b)}, +Bs(a){return new A.i(a.a,0)}, +Bv(a){return a.a}, +QM(){return B.h1}} +A.jO.prototype={ +PM(a,b){var s,r,q,p,o,n=this,m=n.dx +if(m==null)m=50 +s=n.db +if(s==null)s=A.qz(b,n.b) +r=a.a +if(!(r.gvB()>m*m&&a.d.gvB()>s*s))return null +q=n.dx +if(q==null)q=50 +p=n.dy +if(p==null)p=8000 +o=new A.lC(r).aNB(q,p) +n.k1===$&&A.c() +return new A.lf(o,null)}, +Rb(a,b){var s=this.ok +s===$&&A.c() +return Math.abs(s)>A.bbV(a,this.b)}, +Bs(a){return a}, +Bv(a){return null}} +A.aie.prototype={ +W(){return"_DragDirection."+this.b}} +A.P2.prototype={} +A.P1.prototype={ +jg(a){var s=this,r=a.gbe(a),q=a.gdR(a),p=new A.aka(s.b,r,new A.k0(q,A.bc(20,null,!1,t.av)),q,B.h) +q=s.r +q.toString +q.u(0,a.gbP(),p) +$.hq.mk$.aM9(a.gbP(),s.ga6p()) +p.w=$.hq.r7$.ve(0,a.gbP(),s)}, +aDi(a){var s,r,q,p=this.r +p.toString +p=p.i(0,a.gbP()) +p.toString +if(t.n2.b(a)){if(!a.grZ())p.c.pq(a.ghi(a),a.gbe(a)) +s=p.e +if(s!=null){p=a.ghi(a) +r=a.gme() +q=a.gbe(a) +s.a8(0,new A.n6(p,r,null,q))}else{s=p.f +s.toString +p.f=s.X(0,a.gme()) +p.r=a.ghi(a) +if(p.f.ge6()>A.qz(p.d,p.a)){p=p.w +p.a.ph(p.b,p.c,B.c3)}}}else if(t.oN.b(a)){if(p.e!=null){s=p.c.G5() +r=p.e +r.toString +p.e=null +r.Vp(0,new A.lf(s,null))}else p.r=p.f=null +this.BU(a.gbP())}else if(t.Ko.b(a)){s=p.e +if(s!=null){p.e=null +s.bq(0)}else p.r=p.f=null +this.BU(a.gbP())}}, +kn(a){var s=this.r.i(0,a) +if(s==null)return +new A.aL9(this,a).$1(s.b)}, +aJJ(a,b){var s,r,q,p=this,o=p.r.i(0,b) +o.toString +s=p.f!=null?p.dr("onStart",new A.aL8(p,a)):null +if(s!=null){o.e=s +r=o.r +q=o.f +q.toString +o.r=o.f=null +s.a8(0,new A.n6(r,q,null,o.b))}else p.BU(b) +return s}, +j0(a){var s +if(this.r.aR(0,a)){s=this.r.i(0,a) +s.w=s.r=s.f=null +this.BU(a)}}, +BU(a){var s,r +if(this.r==null)return +$.hq.mk$.Z5(a,this.ga6p()) +s=this.r.P(0,a) +r=s.w +if(r!=null)r.a.ph(r.b,r.c,B.aJ) +s.w=null}, +t(){var s,r=this,q=r.r +q.toString +s=A.w(q).h("bk<1>") +B.b.al(A.ab(new A.bk(q,s),!0,s.h("z.E")),r.gaGj()) +r.r=null +r.GL()}} +A.aL9.prototype={ +$1(a){return this.a.aJJ(a,this.b)}, +$S:456} +A.aL8.prototype={ +$0(){return this.a.f.$1(this.b)}, +$S:457} +A.aka.prototype={} +A.rw.prototype={} +A.Uq.prototype={ +aEa(){this.a=!0}} +A.u4.prototype={ +rS(a,b){if(!this.r){this.r=!0 +$.hq.mk$.Tu(this.b,a,b)}}, +ki(a){if(this.r){this.r=!1 +$.hq.mk$.Z5(this.b,a)}}, +XD(a,b){return a.gbe(a).Y(0,this.d).ge6()<=b}} +A.le.prototype={ +mp(a){var s,r=this +if(r.y==null)if(r.f==null&&r.r==null&&r.w==null)return!1 +s=r.xc(a) +if(!s)r.v_() +return s}, +jg(a){var s,r,q=this,p=q.y +if(p!=null)if(!p.XD(a,100))return +else{p=q.y +if(!p.f.a||a.ghs(a)!==p.e){q.v_() +return q.a9r(a)}else if(q.f!=null){p=a.gbe(a) +s=a.geI() +r=q.e.i(0,a.gbP()) +r.toString +q.dr("onDoubleTapDown",new A.aBZ(q,new A.oH(p,r,s)))}}q.a9r(a)}, +a9r(a){var s,r=this +r.a8K() +s=A.bNL(B.vY,$.hq.r7$.ve(0,a.gbP(),r),a,r.b) +r.z.u(0,a.gbP(),s) +s.rS(r.gHW(),a.gd3(a))}, +aDj(a){var s,r=this,q=r.z,p=q.i(0,a.gbP()) +p.toString +if(t.oN.b(a)){s=r.y +if(s==null){if(r.x==null)r.x=A.dn(B.df,r.gaDk()) +s=p.b +$.hq.r7$.aTi(s) +p.ki(r.gHW()) +q.P(0,s) +r.a2U() +r.y=p}else{s=s.c +s.a.ph(s.b,s.c,B.c3) +s=p.c +s.a.ph(s.b,s.c,B.c3) +p.ki(r.gHW()) +q.P(0,p.b) +q=r.r +if(q!=null)r.dr("onDoubleTap",q) +r.v_()}}else if(t.n2.b(a)){if(!p.XD(a,18))r.BT(p)}else if(t.Ko.b(a))r.BT(p)}, +kn(a){}, +j0(a){var s,r=this,q=r.z.i(0,a) +if(q==null){s=r.y +s=s!=null&&s.b===a}else s=!1 +if(s)q=r.y +if(q!=null)r.BT(q)}, +BT(a){var s,r=this,q=r.z +q.P(0,a.b) +s=a.c +s.a.ph(s.b,s.c,B.aJ) +a.ki(r.gHW()) +s=r.y +if(s!=null)if(a===s)r.v_() +else{r.a2A() +if(q.a===0)r.v_()}}, +t(){this.v_() +this.GL()}, +v_(){var s,r=this +r.a8K() +if(r.y!=null){if(r.z.a!==0)r.a2A() +s=r.y +s.toString +r.y=null +r.BT(s) +$.hq.r7$.zW(0,s.b)}r.a2U()}, +a2U(){var s=this.z.gbm(0) +B.b.al(A.ab(s,!0,A.w(s).h("z.E")),this.gaGd())}, +a8K(){var s=this.x +if(s!=null){s.bq(0) +this.x=null}}, +a2A(){var s=this.w +if(s!=null)this.dr("onDoubleTapCancel",s)}} +A.aBZ.prototype={ +$0(){return this.a.f.$1(this.b)}, +$S:0} +A.K0.prototype={ +at6(a,b,c,d){var s=this +s.rS(s.gml(),a.gd3(a)) +if(d.a>0)s.y=A.dn(d,new A.b7k(s,a))}, +jW(a){var s=this +if(t.n2.b(a))if(!s.XD(a,A.qz(a.gdR(a),s.a)))s.bq(0) +else s.z=new A.hS(a.geI(),a.gbe(a)) +else if(t.Ko.b(a))s.bq(0) +else if(t.oN.b(a)){s.ki(s.gml()) +s.Q=new A.hS(a.geI(),a.gbe(a)) +s.a2z()}}, +ki(a){var s=this.y +if(s!=null)s.bq(0) +this.y=null +this.a1A(a)}, +ahD(){var s=this +s.ki(s.gml()) +s.w.a3N(s.b)}, +bq(a){var s +if(this.x)this.ahD() +else{s=this.c +s.a.ph(s.b,s.c,B.aJ)}}, +a2z(){var s,r=this +if(r.x&&r.Q!=null){s=r.Q +s.toString +r.w.awj(r.b,s)}}} +A.b7k.prototype={ +$0(){var s=this.a +s.y=null +s.w.awi(this.b.gbP(),s.z)}, +$S:0} +A.rO.prototype={ +jg(a){var s=this,r=a.gbP(),q=s.y +s.Q.u(0,r,A.bNK(a,s,s.b,q)) +if(s.f!=null)s.dr("onTapDown",new A.aLy(s,a))}, +kn(a){var s=this.Q.i(0,a) +s.x=!0 +s.a2z()}, +j0(a){this.Q.i(0,a).ahD()}, +a3N(a){var s=this +s.Q.P(0,a) +if(s.x!=null)s.dr("onTapCancel",new A.aLu(s,a))}, +awj(a,b){var s=this +s.Q.P(0,a) +if(s.r!=null)s.dr("onTapUp",new A.aLw(s,a,b)) +if(s.w!=null)s.dr("onTap",new A.aLx(s,a))}, +awi(a,b){if(this.z!=null)this.dr("onLongTapDown",new A.aLv(this,a,b))}, +t(){var s,r,q,p,o,n=A.ab(this.Q.gbm(0),!0,t.Oz) +for(s=n.length,r=0;r")),r=r.c;q.H();){p=q.d +if(p==null)p=r.a(p) +o=$.hq.mk$ +n=k.gml() +o=o.a +m=o.i(0,p) +m.toString +l=J.cV(m) +l.P(m,n) +if(l.gaA(m))o.P(0,p)}s.af(0) +k.GL()}, +rS(a,b){var s,r=this +$.hq.mk$.Tu(a,r.gml(),b) +r.r.E(0,a) +s=r.w +s=s==null?null:s.ve(0,a,r) +if(s==null)s=$.hq.r7$.ve(0,a,r) +r.f.u(0,a,s)}, +ki(a){var s=this.r +if(s.G(0,a)){$.hq.mk$.Z5(a,this.gml()) +s.P(0,a) +if(s.a===0)this.yY(a)}}, +GD(a){if(t.oN.b(a)||t.Ko.b(a)||t.WQ.b(a))this.ki(a.gbP())}} +A.Ns.prototype={ +W(){return"GestureRecognizerState."+this.b}} +A.GL.prototype={ +jg(a){var s=this +s.AV(a) +if(s.ch===B.dK){s.ch=B.jY +s.CW=a.gbP() +s.cx=new A.hS(a.geI(),a.gbe(a)) +s.db=A.dn(s.at,new A.aOo(s,a))}}, +zl(a){if(!this.cy)this.a0X(a)}, +jW(a){var s,r,q,p=this +if(p.ch===B.jY&&a.gbP()===p.CW){if(!p.cy)s=p.a4u(a)>18 +else s=!1 +if(p.cy){r=p.ay +q=r!=null&&p.a4u(a)>r}else q=!1 +if(t.n2.b(a))r=s||q +else r=!1 +if(r){p.aG(B.aJ) +r=p.CW +r.toString +p.ki(r)}else p.aez(a)}p.GD(a)}, +UV(){}, +kn(a){if(a===this.CW){this.qJ() +this.cy=!0}}, +j0(a){var s=this +if(a===s.CW&&s.ch===B.jY){s.qJ() +s.ch=B.Vz}}, +yY(a){var s=this +s.qJ() +s.ch=B.dK +s.cx=null +s.cy=!1}, +t(){this.qJ() +this.nY()}, +qJ(){var s=this.db +if(s!=null){s.bq(0) +this.db=null}}, +a4u(a){return a.gbe(a).Y(0,this.cx.b).ge6()}} +A.aOo.prototype={ +$0(){this.a.UV() +return null}, +$S:0} +A.hS.prototype={ +X(a,b){return new A.hS(this.a.X(0,b.a),this.b.X(0,b.b))}, +Y(a,b){return new A.hS(this.a.Y(0,b.a),this.b.Y(0,b.b))}, +j(a){return"OffsetPair(local: "+this.a.j(0)+", global: "+this.b.j(0)+")"}} +A.ajI.prototype={} +A.JR.prototype={ +W(){return"_ScaleState."+this.b}} +A.CV.prototype={ +gaRJ(){var s=this +if(s.a.cy)return s.b +return s.b.X(0,s.c)}, +giE(a){var s,r=this,q=r.a +if(q.cy){s=r.c +q=q.db +return r.d*Math.exp(s.a*q.a+s.b*q.b)}return r.d}, +j(a){var s=this +return"_PointerPanZoomData(parent: "+s.a.j(0)+", _position: "+s.b.j(0)+", _pan: "+s.c.j(0)+", _scale: "+A.j(s.d)+", _rotation: "+s.e+")"}} +A.Ri.prototype={ +j(a){return"ScaleStartDetails(focalPoint: "+this.a.j(0)+", localFocalPoint: "+this.b.j(0)+", pointersCount: "+this.c+")"}} +A.Rj.prototype={ +j(a){var s=this +return"ScaleUpdateDetails(focalPoint: "+s.b.j(0)+", localFocalPoint: "+s.c.j(0)+", scale: "+A.j(s.d)+", horizontalScale: "+A.j(s.e)+", verticalScale: "+A.j(s.f)+", rotation: "+A.j(s.r)+", pointerCount: "+s.w+", focalPointDelta: "+s.a.j(0)+", sourceTimeStamp: "+s.x.j(0)+")"}} +A.Hn.prototype={ +j(a){return"ScaleEndDetails(velocity: "+this.a.j(0)+", scaleVelocity: "+A.j(this.b)+", pointerCount: "+this.c+")"}} +A.akX.prototype={} +A.pY.prototype={ +gMq(){return 2*this.R8.a+this.p1.length}, +gBQ(){var s,r=this.fr +r===$&&A.c() +if(r>0){s=this.fx +s===$&&A.c() +r=s/r}else r=1 +return r}, +gy4(){var s,r,q,p=this.gBQ() +for(s=this.R8.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a +p*=(q==null?r.a(q):q).giE(0)/this.RG}return p}, +gaBR(){var s,r,q,p=this,o=p.fy +o===$&&A.c() +if(o>0){s=p.go +s===$&&A.c() +r=s/o}else r=1 +for(o=p.R8.gbm(0),s=A.w(o),s=s.h("@<1>").ak(s.y[1]),o=new A.bt(J.az(o.a),o.b,s.h("bt<1,2>")),s=s.y[1];o.H();){q=o.a +r*=(q==null?s.a(q):q).giE(0)/p.RG}return r}, +gaLx(){var s,r,q,p=this,o=p.id +o===$&&A.c() +if(o>0){s=p.k1 +s===$&&A.c() +r=s/o}else r=1 +for(o=p.R8.gbm(0),s=A.w(o),s=s.h("@<1>").ak(s.y[1]),o=new A.bt(J.az(o.a),o.b,s.h("bt<1,2>")),s=s.y[1];o.H();){q=o.a +r*=(q==null?s.a(q):q).giE(0)/p.RG}return r}, +av9(){var s,r,q,p,o,n=this,m=n.k3 +if(m!=null&&n.k4!=null){s=m.a +m=m.c +r=n.k4 +q=r.a +r=r.c +p=Math.atan2(s.b-m.b,s.a-m.a) +o=Math.atan2(q.b-r.b,q.a-r.a)-p}else o=0 +for(m=n.R8.gbm(0),s=A.w(m),s=s.h("@<1>").ak(s.y[1]),m=new A.bt(J.az(m.a),m.b,s.h("bt<1,2>")),s=s.y[1];m.H();){r=m.a +o+=(r==null?s.a(r):r).e}return o-n.rx}, +jg(a){var s=this +s.AV(a) +s.p2.u(0,a.gbP(),new A.k0(a.gdR(a),A.bc(20,null,!1,t.av))) +s.ry=a.ghi(a) +if(s.CW===B.iR){s.CW=B.iS +s.k1=s.id=s.go=s.fy=s.fx=s.fr=0}}, +afl(a){return!0}, +J4(a){var s=this +s.a0O(a) +s.rS(a.gbP(),a.gd3(a)) +s.p2.u(0,a.gbP(),new A.k0(a.gdR(a),A.bc(20,null,!1,t.av))) +s.ry=a.ghi(a) +if(s.CW===B.iR){s.CW=B.iS +s.RG=1 +s.rx=0}}, +jW(a){var s,r,q,p,o,n,m=this +if(t.n2.b(a)){s=m.p2.i(0,a.gbP()) +s.toString +if(!a.grZ())s.pq(a.ghi(a),a.gbe(a)) +m.ok.u(0,a.gbP(),a.gbe(a)) +m.cx=a.gd3(a) +r=!1 +q=!0}else if(t.pY.b(a)){m.ok.u(0,a.gbP(),a.gbe(a)) +m.p1.push(a.gbP()) +m.cx=a.gd3(a) +r=!0 +q=!0}else if(t.oN.b(a)||t.Ko.b(a)){m.ok.P(0,a.gbP()) +B.b.P(m.p1,a.gbP()) +m.cx=a.gd3(a) +r=!0 +q=!1}else if(t.w5.b(a)){m.R8.u(0,a.gbP(),new A.CV(m,a.gbe(a),B.h,1,0)) +m.cx=a.gd3(a) +r=!0 +q=!0}else{q=t.DB.b(a) +if(q){if(!a.grZ()&&!m.cy){s=m.p2.i(0,a.gbP()) +s.toString +s.pq(a.ghi(a),a.gEW(a))}m.R8.u(0,a.gbP(),new A.CV(m,a.gbe(a),a.gEW(a),a.giE(a),a.gai9())) +m.cx=a.gd3(a) +r=!1}else{r=t.WQ.b(a) +if(r)m.R8.P(0,a.gbP())}}s=m.ok +if(s.a<2)m.k3=m.k4 +else{p=m.k3 +if(p!=null){o=m.p1 +p=p.b===o[0]&&p.d===o[1]}else p=!1 +o=m.p1 +if(p){p=o[0] +n=s.i(0,p) +n.toString +o=o[1] +s=s.i(0,o) +s.toString +m.k4=new A.akX(n,p,s,o)}else{p=o[0] +n=s.i(0,p) +n.toString +o=o[1] +s=s.i(0,o) +s.toString +m.k4=m.k3=new A.akX(n,p,s,o)}}m.aGV(0) +if(!r||m.aG4(a.gbP()))m.atC(q,a) +m.GD(a)}, +aGV(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=e.dy +for(s=e.ok,r=A.w(s).c,q=A.jb(s,s.r,r),p=B.h;q.H();){o=s.i(0,q.d) +p=new A.i(p.a+o.a,p.b+o.b)}for(q=e.R8,o=q.gbm(0),n=A.w(o),n=n.h("@<1>").ak(n.y[1]),o=new A.bt(J.az(o.a),o.b,n.h("bt<1,2>")),n=n.y[1];o.H();){m=o.a +m=(m==null?n.a(m):m).gaRJ() +p=new A.i(p.a+m.a,p.b+m.b)}q=e.dy=p.b1(0,Math.max(1,s.a+q.a)) +o=e.cx +if(d==null){e.k2=A.Q_(o,q) +e.p4=B.h}else{n=e.k2 +n===$&&A.c() +q=A.Q_(o,q) +e.k2=q +e.p4=q.Y(0,n)}l=s.a +for(q=A.jb(s,s.r,r),k=B.h;q.H();){o=s.i(0,q.d) +k=new A.i(k.a+o.a,k.b+o.b)}q=l>0 +if(q)k=k.b1(0,l) +for(r=A.jb(s,s.r,r),o=k.a,n=k.b,j=0,i=0,h=0;r.H();){m=r.d +g=s.i(0,m) +f=o-g.a +g=n-g.b +j+=Math.sqrt(f*f+g*g) +i+=Math.abs(o-s.i(0,m).a) +h+=Math.abs(n-s.i(0,m).b)}e.fx=q?j/l:0 +e.go=q?i/l:0 +e.k1=q?h/l:0}, +aG4(a){var s,r=this,q={},p=r.dy +p.toString +r.dx=p +p=r.fx +p===$&&A.c() +r.fr=p +r.k3=r.k4 +p=r.go +p===$&&A.c() +r.fy=p +p=r.k1 +p===$&&A.c() +r.id=p +p=r.R8 +if(p.a===0){r.RG=1 +r.rx=0}else{r.RG=r.gy4()/r.gBQ() +p=p.gbm(0) +r.rx=A.rI(p,new A.aRa(),A.w(p).h("z.E"),t.V).oM(0,new A.aRb())}if(r.CW===B.mj){if(r.ch!=null){s=r.p2.i(0,a).G5() +q.a=s +p=s.a +if(p.gvB()>2500){if(p.gvB()>64e6)q.a=new A.lC(p.b1(0,p.ge6()).a2(0,8000)) +r.dr("onEnd",new A.aRc(q,r))}else r.dr("onEnd",new A.aRd(r))}r.CW=B.I8 +r.p3=new A.k0(B.ba,A.bc(20,null,!1,t.av)) +return!1}r.p3=new A.k0(B.ba,A.bc(20,null,!1,t.av)) +return!0}, +atC(a,b){var s,r,q,p,o=this,n=o.CW +if(n===B.iR)n=o.CW=B.iS +if(n===B.iS){n=o.fx +n===$&&A.c() +s=o.fr +s===$&&A.c() +r=o.dy +r.toString +q=o.dx +q===$&&A.c() +p=r.Y(0,q).ge6() +if(Math.abs(n-s)>A.bRK(b.gdR(b))||p>A.bbV(b.gdR(b),o.b)||Math.max(o.gy4()/o.gBQ(),o.gBQ()/o.gy4())>1.05)o.aG(B.c3)}else if(n.a>=2)o.aG(B.c3) +if(o.CW===B.I8&&a){o.ry=b.ghi(b) +o.CW=B.mj +o.a3Q()}if(o.CW===B.mj){n=o.p3 +if(n!=null)n.pq(b.ghi(b),new A.i(o.gy4(),0)) +if(o.ay!=null)o.dr("onUpdate",new A.aR8(o,b))}}, +a3Q(){var s=this +if(s.ax!=null)s.dr("onStart",new A.aR9(s)) +s.ry=null}, +kn(a){var s,r=this +if(r.CW===B.iS){r.CW=B.mj +r.a3Q() +if(r.at===B.ai){s=r.dy +s.toString +r.dx=s +s=r.fx +s===$&&A.c() +r.fr=s +r.k3=r.k4 +s=r.go +s===$&&A.c() +r.fy=s +s=r.k1 +s===$&&A.c() +r.id=s +s=r.R8 +if(s.a===0){r.RG=1 +r.rx=0}else{r.RG=r.gy4()/r.gBQ() +s=s.gbm(0) +r.rx=A.rI(s,new A.aRe(),A.w(s).h("z.E"),t.V).oM(0,new A.aRf())}}}}, +j0(a){var s=this +s.R8.P(0,a) +s.ok.P(0,a) +B.b.P(s.p1,a) +s.ki(a)}, +yY(a){switch(this.CW.a){case 1:this.aG(B.aJ) +break +case 0:break +case 2:break +case 3:break}this.CW=B.iR}, +t(){this.p2.af(0) +this.nY()}} +A.aRa.prototype={ +$1(a){return a.e}, +$S:179} +A.aRb.prototype={ +$2(a,b){return a+b}, +$S:63} +A.aRc.prototype={ +$0(){var s,r,q=this.b,p=q.ch +p.toString +s=this.a.a +r=q.p3 +r=r==null?null:r.G5().a.a +if(r==null)r=-1 +return p.$1(new A.Hn(s,r,q.gMq()))}, +$S:0} +A.aRd.prototype={ +$0(){var s,r=this.a,q=r.ch +q.toString +s=r.p3 +s=s==null?null:s.G5().a.a +if(s==null)s=-1 +return q.$1(new A.Hn(B.du,s,r.gMq()))}, +$S:0} +A.aR8.prototype={ +$0(){var s,r,q,p,o,n,m,l,k=this.a,j=k.ay +j.toString +s=k.gy4() +r=k.gaBR() +q=k.gaLx() +p=k.dy +p.toString +o=k.k2 +o===$&&A.c() +n=k.av9() +m=k.gMq() +k=k.p4 +k===$&&A.c() +l=this.b +l=l.ghi(l) +j.$1(new A.Rj(k,p,o,s,r,q,n,m,l))}, +$S:0} +A.aR9.prototype={ +$0(){var s,r,q=this.a,p=q.ax +p.toString +s=q.dy +s.toString +r=q.k2 +r===$&&A.c() +q=q.gMq() +p.$1(new A.Ri(s,r,q))}, +$S:0} +A.aRe.prototype={ +$1(a){return a.e}, +$S:179} +A.aRf.prototype={ +$2(a,b){return a+b}, +$S:63} +A.oH.prototype={} +A.oI.prototype={} +A.a_G.prototype={ +jg(a){var s=this +if(s.ch===B.dK){if(s.k4!=null&&s.ok!=null)s.C4() +s.k4=a}if(s.k4!=null)s.aow(a)}, +rS(a,b){this.aok(a,b)}, +aez(a){var s,r,q=this +if(t.oN.b(a)){q.ok=a +q.a2K()}else if(t.Ko.b(a)){q.aG(B.aJ) +if(q.k2){s=q.k4 +s.toString +q.L3(a,s,"")}q.C4()}else{s=a.ghs(a) +r=q.k4 +if(s!==r.ghs(r)){q.aG(B.aJ) +s=q.CW +s.toString +q.ki(s)}}}, +aG(a){var s,r=this +if(r.k3&&a===B.aJ){s=r.k4 +s.toString +r.L3(null,s,"spontaneous") +r.C4()}r.a0Y(a)}, +UV(){this.a2B()}, +kn(a){var s=this +s.a14(a) +if(a===s.CW){s.a2B() +s.k3=!0 +s.a2K()}}, +j0(a){var s,r=this +r.aox(a) +if(a===r.CW){if(r.k2){s=r.k4 +s.toString +r.L3(null,s,"forced")}r.C4()}}, +a2B(){var s,r=this +if(r.k2)return +s=r.k4 +s.toString +r.aeB(s) +r.k2=!0}, +a2K(){var s,r,q=this +if(!q.k3||q.ok==null)return +s=q.k4 +s.toString +r=q.ok +r.toString +q.aeC(s,r) +q.C4()}, +C4(){var s=this +s.k3=s.k2=!1 +s.k4=s.ok=null}} +A.jk.prototype={ +mp(a){var s=this +switch(a.ghs(a)){case 1:if(s.ac==null&&s.b_==null&&s.ah==null&&s.b6==null)return!1 +break +case 2:if(s.K==null&&s.a5==null&&s.M==null&&s.av==null)return!1 +break +case 4:return!1 +default:return!1}return s.xc(a)}, +aeB(a){var s,r=this,q=a.gbe(a),p=a.geI(),o=r.e.i(0,a.gbP()) +o.toString +s=new A.oH(q,o,p) +switch(a.ghs(a)){case 1:if(r.ac!=null)r.dr("onTapDown",new A.aUW(r,s)) +break +case 2:if(r.a5!=null)r.dr("onSecondaryTapDown",new A.aUX(r,s)) +break +case 4:break}}, +aeC(a,b){var s,r=this,q=b.gdR(b),p=b.gbe(b) +b.geI() +s=new A.oI(p,q) +switch(a.ghs(a)){case 1:if(r.ah!=null)r.dr("onTapUp",new A.aUY(r,s)) +q=r.b_ +if(q!=null)r.dr("onTap",q) +break +case 2:if(r.M!=null)r.dr("onSecondaryTapUp",new A.aUZ(r,s)) +if(r.K!=null)r.dr("onSecondaryTap",new A.aV_(r)) +break +case 4:break}}, +L3(a,b,c){var s,r=this,q=c===""?c:c+" " +switch(b.ghs(b)){case 1:s=r.b6 +if(s!=null)r.dr(q+"onTapCancel",s) +break +case 2:s=r.av +if(s!=null)r.dr(q+"onSecondaryTapCancel",s) +break +case 4:break}}} +A.aUW.prototype={ +$0(){return this.a.ac.$1(this.b)}, +$S:0} +A.aUX.prototype={ +$0(){return this.a.a5.$1(this.b)}, +$S:0} +A.aUY.prototype={ +$0(){return this.a.ah.$1(this.b)}, +$S:0} +A.aUZ.prototype={ +$0(){return this.a.M.$1(this.b)}, +$S:0} +A.aV_.prototype={ +$0(){return this.a.K.$0()}, +$S:0} +A.UR.prototype={ +W(){return"_DragState."+this.b}} +A.Sz.prototype={} +A.SC.prototype={} +A.SB.prototype={} +A.SD.prototype={} +A.SA.prototype={} +A.XJ.prototype={ +jW(a){var s,r,q=this +if(t.n2.b(a)){s=A.qz(a.gdR(a),q.b) +r=q.KO$ +if(a.gbe(a).Y(0,r.b).ge6()>s){q.Ha() +q.DO$=q.DN$=null}}else if(t.oN.b(a)){q.zd$=a +if(q.ra$!=null){q.Ha() +if(q.vX$==null)q.vX$=A.dn(B.df,q.gavd())}}else if(t.Ko.b(a))q.II()}, +j0(a){this.II()}, +aBL(a){var s=this.DN$ +s.toString +if(a===s)return!0 +else return!1}, +aCl(a){var s=this.DO$ +if(s==null)return!1 +return a.Y(0,s).ge6()<=100}, +Ha(){var s=this.vX$ +if(s!=null){s.bq(0) +this.vX$=null}}, +avf(){}, +II(){var s,r=this +r.Ha() +r.DO$=r.KO$=r.DN$=null +r.pG$=0 +r.zd$=r.ra$=null +s=r.KQ$ +if(s!=null)s.$0()}} +A.KW.prototype={ +azq(){var s=this +if(s.cy!=null)s.dr("onDragUpdate",new A.axf(s)) +s.p2=s.p3=null}, +mp(a){var s=this +if(s.fy==null)switch(a.ghs(a)){case 1:if(s.ch==null&&s.cx==null&&s.cy==null&&s.db==null&&s.CW==null&&s.dx==null)return!1 +break +default:return!1}else if(a.gbP()!==s.fy)return!1 +return s.xc(a)}, +jg(a){var s,r=this +if(r.k1===B.iP){r.apV(a) +r.fy=a.gbP() +r.ok=r.k4=0 +r.k1=B.ty +s=a.gbe(a) +r.k3=new A.hS(a.geI(),s) +r.go=A.dn(B.b2,new A.axg(r,a))}}, +zl(a){if(a.ghs(a)!==1)if(!this.fx)this.a0X(a)}, +kn(a){var s,r=this +if(a!==r.fy)return +r.IG() +r.p4.E(0,a) +s=r.ra$ +if(s!=null)r.a2I(s) +r.fx=!0 +s=r.k2 +if(s!=null)r.OY(s) +s=r.zd$ +if(s!=null)r.a2J(s)}, +yY(a){var s,r=this +switch(r.k1.a){case 0:r.a8S() +r.aG(B.aJ) +break +case 1:if(r.dy)if(r.fx){if(r.ra$!=null){if(!r.p4.P(0,a))r.MS(a,B.aJ) +r.k1=B.m4 +s=r.ra$ +s.toString +r.OY(s) +r.a2D()}}else{r.a8S() +r.aG(B.aJ)}else{s=r.zd$ +if(s!=null)r.a2J(s)}break +case 2:r.a2D() +break}r.IG() +r.k1=B.iP +r.dy=!1}, +jW(a){var s,r,q,p,o,n,m=this +if(a.gbP()!==m.fy)return +m.arj(a) +if(t.n2.b(a)){s=A.qz(a.gdR(a),m.b) +if(!m.dy){r=m.k3 +r===$&&A.c() +r=a.gbe(a).Y(0,r.b).ge6()>s}else r=!0 +m.dy=r +r=m.k1 +if(r===B.m4)m.a2E(a) +else if(r===B.ty){if(m.k2==null){if(a.gd3(a)==null)q=null +else{r=a.gd3(a) +r.toString +q=A.Ai(r)}p=m.a8T(a.gpR()) +r=m.k4 +r===$&&A.c() +o=A.GI(q,null,p,a.geI()).ge6() +n=m.a8U(p) +m.k4=r+o*J.eY(n==null?1:n) +r=m.ok +r===$&&A.c() +m.ok=r+A.GI(q,null,a.gpR(),a.geI()).ge6()*B.f.gAF(1) +if(!m.a8V(a.gdR(a)))r=m.fx&&Math.abs(m.ok)>A.bbV(a.gdR(a),m.b) +else r=!0 +if(r){m.k2=a +m.k1=B.m4 +if(!m.fx)m.aG(B.c3)}}r=m.k2 +if(r!=null)m.OY(r)}}else if(t.oN.b(a)){r=m.k1 +if(r===B.ty)m.GD(a) +else if(r===B.m4)m.SJ(a.gbP())}else if(t.Ko.b(a)){m.k1=B.iP +m.SJ(a.gbP())}}, +j0(a){var s=this +if(a!==s.fy)return +s.ark(a) +s.IG() +s.SJ(a) +s.If() +s.Ie()}, +t(){this.IG() +this.Ie() +this.apW()}, +OY(a){var s,r,q,p,o,n=this +if(!n.fx)return +if(n.at===B.ai){s=n.k3 +s===$&&A.c() +r=a.gme() +n.k3=s.X(0,new A.hS(a.gpR(),r))}n.auw(a) +if(!a.gpR().k(0,B.h)){if(a.gd3(a)!=null){s=a.gd3(a) +s.toString +q=A.Ai(s)}else q=null +s=n.k3 +s===$&&A.c() +p=s.a.X(0,a.gpR()) +o=A.GI(q,null,a.gpR(),p) +s=a.gpR() +n.p1=n.k3.X(0,new A.hS(s,o)) +n.a2E(a) +n.p1=null}}, +a2I(a){var s,r,q,p,o=this +if(o.fr)return +s=a.gbe(a) +r=a.geI() +q=o.e.i(0,a.gbP()) +q.toString +p=o.pG$ +if(o.ch!=null)o.dr("onTapDown",new A.axd(o,new A.Sz(s,r,q,p))) +o.fr=!0}, +a2J(a){var s,r,q,p,o=this +if(!o.fx)return +s=a.gdR(a) +r=a.gbe(a) +q=a.geI() +p=o.pG$ +if(o.CW!=null)o.dr("onTapUp",new A.axe(o,new A.SC(r,q,s,p))) +o.If() +if(!o.p4.P(0,a.gbP()))o.MS(a.gbP(),B.aJ)}, +auw(a){var s,r,q,p=this +if(p.cx!=null){s=a.ghi(a) +r=p.k3 +r===$&&A.c() +q=p.e.i(0,a.gbP()) +q.toString +p.dr("onDragStart",new A.axb(p,new A.SB(s,r.b,r.a,q,p.pG$)))}p.k2=null}, +a2E(a){var s,r,q,p,o,n,m=this,l=m.p1,k=l!=null?l.b:a.gbe(a) +l=m.p1 +s=l!=null?l.a:a.geI() +l=a.ghi(a) +r=a.gpR() +q=m.e.i(0,a.gbP()) +q.toString +p=m.k3 +p===$&&A.c() +p=k.Y(0,p.b) +o=s.Y(0,m.k3.a) +n=m.pG$ +if(m.cy!=null)m.dr("onDragUpdate",new A.axc(m,new A.SD(l,r,k,s,q,p,o,n)))}, +a2D(){var s=this,r=s.p3 +if(r!=null){r.bq(0) +s.azq()}r=s.pG$ +if(s.db!=null)s.dr("onDragEnd",new A.axa(s,new A.SA(0,r))) +s.If() +s.Ie()}, +a8S(){var s,r=this +if(!r.fr)return +s=r.dx +if(s!=null)r.dr("onCancel",s) +r.Ie() +r.If()}, +SJ(a){this.ki(a) +if(!this.p4.P(0,a))this.MS(a,B.aJ)}, +If(){this.fx=this.fr=!1 +this.fy=null}, +Ie(){return}, +IG(){var s=this.go +if(s!=null){s.bq(0) +this.go=null}}} +A.axf.prototype={ +$0(){var s=this.a,r=s.cy +r.toString +s=s.p2 +s.toString +return r.$1(s)}, +$S:0} +A.axg.prototype={ +$0(){var s=this.a,r=s.ra$ +if(r!=null){s.a2I(r) +if(s.pG$>1)s.aG(B.c3)}return null}, +$S:0} +A.axd.prototype={ +$0(){return this.a.ch.$1(this.b)}, +$S:0} +A.axe.prototype={ +$0(){return this.a.CW.$1(this.b)}, +$S:0} +A.axb.prototype={ +$0(){return this.a.cx.$1(this.b)}, +$S:0} +A.axc.prototype={ +$0(){return this.a.cy.$1(this.b)}, +$S:0} +A.axa.prototype={ +$0(){return this.a.db.$1(this.b)}, +$S:0} +A.q8.prototype={ +a8V(a){var s=this.k4 +s===$&&A.c() +return Math.abs(s)>A.qz(a,this.b)}, +a8T(a){return new A.i(a.a,0)}, +a8U(a){return a.a}} +A.q9.prototype={ +a8V(a){var s=this.k4 +s===$&&A.c() +return Math.abs(s)>A.bbV(a,this.b)}, +a8T(a){return a}, +a8U(a){return null}} +A.TU.prototype={ +jg(a){var s,r=this +r.AV(a) +s=r.vX$ +if(s!=null&&s.b==null)r.II() +r.zd$=null +if(r.ra$!=null)s=!(r.vX$!=null&&r.aCl(a.gbe(a))&&r.aBL(a.ghs(a))) +else s=!1 +if(s)r.pG$=1 +else ++r.pG$ +r.Ha() +r.ra$=a +r.DN$=a.ghs(a) +r.DO$=a.gbe(a) +r.KO$=new A.hS(a.geI(),a.gbe(a)) +s=r.KP$ +if(s!=null)s.$0()}, +t(){this.II() +this.nY()}} +A.aqT.prototype={} +A.aqU.prototype={} +A.aqV.prototype={} +A.aqW.prototype={} +A.aqX.prototype={} +A.agK.prototype={ +aG(a){this.a.aJW(this.b,a)}, +$iF8:1} +A.CI.prototype={ +kn(a){var s,r,q,p,o=this +o.a8Y() +if(o.e==null){s=o.b[0] +o.e=s}for(s=o.b,r=s.length,q=0;qb*b)return new A.lC(s.b1(0,s.ge6()).a2(0,b)) +if(r40)return B.tk +s=t.n +r=A.b([],s) +q=A.b([],s) +p=A.b([],s) +o=A.b([],s) +n=this.d +s=this.c +m=s[n] +if(m==null)return null +l=m.a.a +k=m +j=k +i=0 +do{h=s[n] +if(h==null)break +g=h.a.a +f=(l-g)/1000 +if(f>100||Math.abs(g-j.a.a)/1000>40)break +e=h.b +r.push(e.a) +q.push(e.b) +p.push(1) +o.push(-f) +n=(n===0?20:n)-1;++i +if(i<20){k=h +j=k +continue}else{k=h +break}}while(!0) +if(i>=3){d=new A.a66(o,r,p).x_(2) +if(d!=null){c=new A.a66(o,q,p).x_(2) +if(c!=null){s=d.a[1] +g=c.a[1] +b=d.b +b===$&&A.c() +a=c.b +a===$&&A.c() +return new A.wT(new A.i(s*1000,g*1000),b*a,new A.bv(l-k.a.a),m.b.Y(0,k.b))}}}return new A.wT(B.h,1,new A.bv(l-k.a.a),m.b.Y(0,k.b))}, +G5(){var s=this.Am() +if(s==null||s.a.k(0,B.h))return B.du +return new A.lC(s.a)}} +A.zB.prototype={ +pq(a,b){var s,r=this +r.gv6().bR(0) +r.gv6().bF(0) +s=(r.d+1)%20 +r.d=s +r.e[s]=new A.Wg(a,b)}, +xW(a){var s,r,q=this.d+a,p=B.f.bx(q,20),o=B.f.bx(q-1,20) +q=this.e +s=q[p] +r=q[o] +if(s==null||r==null)return B.h +q=s.a.a-r.a.a +return q>0?s.b.Y(0,r.b).a2(0,1000).b1(0,q/1000):B.h}, +Am(){var s,r,q,p,o,n,m=this +if(m.gv6().gn3()>40)return B.tk +s=m.xW(-2).a2(0,0.6).X(0,m.xW(-1).a2(0,0.35)).X(0,m.xW(0).a2(0,0.05)) +r=m.e +q=m.d +p=r[q] +for(o=null,n=1;n<=20;++n){o=r[B.f.bx(q+n,20)] +if(o!=null)break}if(o==null||p==null)return B.HD +else return new A.wT(s,1,new A.bv(p.a.a-o.a.a),p.b.Y(0,o.b))}} +A.G1.prototype={ +Am(){var s,r,q,p,o,n,m=this +if(m.gv6().gn3()>40)return B.tk +s=m.xW(-2).a2(0,0.15).X(0,m.xW(-1).a2(0,0.65)).X(0,m.xW(0).a2(0,0.2)) +r=m.e +q=m.d +p=r[q] +for(o=null,n=1;n<=20;++n){o=r[B.f.bx(q+n,20)] +if(o!=null)break}if(o==null||p==null)return B.HD +else return new A.wT(s,1,new A.bv(p.a.a-o.a.a),p.b.Y(0,o.b))}} +A.ZH.prototype={ +gL(a){var s=this +return A.bM([s.a,s.b,s.c,s.d])}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.ZH}} +A.af6.prototype={} +A.ZK.prototype={ +ab(a){var s,r,q=this,p=q.c.length===0 +if(p)return B.bb +s=J.xI(A.bBN(a,q.c)) +switch(A.am(a).w.a){case 2:p=q.e +r=p.a +p=p.b +return A.bDe(r,p==null?r:p,s) +case 0:p=q.e +r=p.a +p=p.b +return A.bLa(r,p==null?r:p,s) +case 1:case 3:case 5:return new A.a29(q.e.a,s,null) +case 4:return new A.a1F(q.e.a,s,null)}}} +A.aw0.prototype={ +$1(a){return A.bDf(a)}, +$S:464} +A.aw1.prototype={ +$1(a){var s=this.a +return A.bDB(s,a.a,A.bdV(s,a))}, +$S:465} +A.aw2.prototype={ +$1(a){return A.bDa(a.a,A.bdV(this.a,a))}, +$S:466} +A.aVZ.prototype={ +W(){return"ThemeMode."+this.b}} +A.OL.prototype={ +b5(){return new A.VM(B.p)}} +A.aKf.prototype={ +$2(a,b){return new A.G5(a,b)}, +$S:467} +A.aKi.prototype={ +oT(a){return A.am(a).w}, +Jx(a,b,c){switch(A.ch(c.a).a){case 0:return b +case 1:switch(A.am(a).w.a){case 3:case 4:case 5:return A.bgA(b,c.b,null) +case 0:case 1:case 2:return b}break}}, +Jw(a,b,c){A.am(a) +switch(A.am(a).w.a){case 2:case 3:case 4:case 5:return b +case 0:switch(0){case 0:return new A.Sk(c.a,c.d,b,null)}case 1:break}return A.bmU(c.a,b,A.am(a).ax.y)}} +A.VM.prototype={ +bu(){this.bN() +this.d=A.bH0()}, +t(){var s=this.d +s===$&&A.c() +s.t() +this.bG()}, +gaCK(){var s=A.b([],t.a9) +this.a.toString +s.push(B.Lz) +s.push(B.Lr) +return s}, +aC8(a,b){return new A.a3P(B.Wc,b,B.aiT,null)}, +aCY(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=null +j.a.toString +s=A.e8(a,B.tF) +r=s==null?i:s.e +if(r==null)r=B.aW +q=r===B.b8 +s=A.e8(a,B.HZ) +s=s==null?i:s.as +p=s===!0 +if(q)if(p)j.a.toString +if(q)j.a.toString +if(p)j.a.toString +o=j.a.db +if(o==null)o=A.Cd(B.aW,i,i,i,i) +s=o.eH +n=s.b +if(n==null){m=o.ax.b +n=A.S(102,m.gm(m)>>>16&255,m.gm(m)>>>8&255,m.gm(m)&255)}l=s.a +if(l==null)l=o.ax.b +k=b==null?B.bb:b +j.a.toString +$.bv8() +k=new A.KD(o,k,B.z,B.ab,i,i) +return new A.Re(A.aAJ(k,l,i,i,n),i)}, +auh(a){var s,r,q,p,o,n=this,m=null,l=n.a,k=l.db +k=k==null?m:k.fr +s=k +if(s==null)s=B.bi +k=l.c +r=l.e +q=l.w +l=l.cx +p=n.gaCK() +o=n.a +return new A.Tw(k,q,m,new A.b3K(),m,m,m,m,m,r,B.a1m,m,m,m,B.Zw,n.gaCX(),l,m,B.acU,s,m,p,m,m,o.ok,!1,!1,!1,!1,n.gaC7(),o.R8,m,m,m,new A.zt(n,t.bT))}, +ab(a){var s,r=null,q=A.v6(!1,!1,this.auh(a),r,r,r,r,!0,r,r,r,new A.b3L(),r,r) +this.a.toString +s=this.d +s===$&&A.c() +return A.bpr(B.KK,new A.zy(s,q,r))}} +A.b3K.prototype={ +$1$2(a,b,c){return A.bnZ(b,a,c)}, +$2(a,b){return this.$1$2(a,b,t.z)}, +$S:470} +A.b3L.prototype={ +$2(a,b){if(!(b instanceof A.iL)&&!(b instanceof A.FF)||!b.b.k(0,B.hR))return B.dM +return A.bLJ()?B.ci:B.dM}, +$S:124} +A.KJ.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.KJ)if(J.f(b.a,r.a))if(J.f(b.b,r.b))if(b.c==r.c)if(b.d==r.d)if(J.f(b.e,r.e))if(J.f(b.f,r.f))if(J.f(b.r,r.r))if(J.f(b.w,r.w))if(J.f(b.x,r.x))if(b.z==r.z)if(b.Q==r.Q)if(J.f(b.as,r.as))s=J.f(b.at,r.at) +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.aft.prototype={} +A.OO.prototype={ +qx(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.a +f.toString +s=g.b +s.toString +r=s.Y(0,f) +q=Math.abs(r.a) +p=Math.abs(r.b) +o=r.ge6() +n=s.a +m=f.b +l=new A.i(n,m) +k=new A.aKg(g,o) +if(q>2&&p>2){j=o*o +i=f.a +h=s.b +if(q>>16&255,q.gm(q)>>>8&255,q.gm(q)&255),0,B.J,-1),s,r.c)}if(s==null){q=p.a +return A.bJ(p,new A.bL(A.S(0,q.gm(q)>>>16&255,q.gm(q)>>>8&255,q.gm(q)&255),0,B.J,-1),r.c)}return A.bJ(p,s,r.c)}, +$icf:1} +A.agh.prototype={} +A.aH4.prototype={ +W(){return"IconAlignment."+this.b}} +A.Lh.prototype={ +b5(){return new A.U4(null,null,B.p)}} +A.U4.prototype={ +X3(){this.aK(new A.aZW())}, +ghn(){var s=this.a.z +if(s==null){s=this.r +s.toString}return s}, +Ee(){var s,r,q=this +if(q.a.z==null)q.r=A.aXC(null) +s=q.ghn() +r=q.a.c +s.ey(0,B.K,r==null) +q.ghn().an(0,q.gvY())}, +bu(){this.bN() +this.Ee()}, +bH(a){var s,r,q=this +q.c7(a) +s=a.z +if(q.a.z!=s){if(s!=null)s.ad(0,q.gvY()) +if(q.a.z!=null){s=q.r +if(s!=null){s.ah$=$.aa() +s.ac$=0}q.r=null}q.Ee()}s=q.a.c +if(s!=null!==(a.c!=null)){s=q.ghn() +r=q.a.c +s.ey(0,B.K,r==null) +s=q.a.c +if(s==null)q.ghn().ey(0,B.ae,!1)}}, +t(){var s,r=this +r.ghn().ad(0,r.gvY()) +s=r.r +if(s!=null){s.ah$=$.aa() +s.ac$=0}s=r.d +if(s!=null)s.t() +r.arB()}, +ab(c7){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=this,c3=null,c4=c2.a,c5=new A.aZT(c4.r,c4.Zm(c7),c2.a.UH(c7)),c6=new A.aZU(c2,c5) +c4=t.PM +s=c6.$1$1(new A.aZu(),c4) +r=c6.$1$1(new A.aZv(),t.p8) +q=t.MH +p=c6.$1$1(new A.aZw(),q) +o=c6.$1$1(new A.aZH(),q) +n=c6.$1$1(new A.aZM(),q) +m=c6.$1$1(new A.aZN(),q) +l=c6.$1$1(new A.aZO(),t.pc) +k=t.tW +j=c6.$1$1(new A.aZP(),k) +i=c6.$1$1(new A.aZQ(),k) +h=c6.$1$1(new A.aZR(),k) +g=c6.$1$1(new A.aZS(),q) +f=c6.$1$1(new A.aZx(),c4) +e=c6.$1$1(new A.aZy(),t.oI) +d=c6.$1$1(new A.aZz(),t.KX) +c=c5.$1$1(new A.aZA(),t.X3) +b=c5.$1$1(new A.aZB(),t.Oc) +a=c5.$1$1(new A.aZC(),t.Tu) +a0=c5.$1$1(new A.aZD(),t.w) +a1=c5.$1$1(new A.aZE(),t.pC) +a2=new A.i(c.a,c.b).a2(0,4) +a3=c5.$1$1(new A.aZF(),t.Ya) +c4=t.QN +a4=c5.$1$1(new A.aZG(),c4) +a5=c5.$1$1(new A.aZI(),c4) +a6=c2.a.w +if(a6==null)a6=(a4==null?a5:a4)!=null?B.ce:B.y +c4=j.a +q=j.b +a7=c.adx(new A.bb(c4,h.a,q,h.b)) +if(i!=null){a8=a7.ca(i) +c4=a8.a +if(isFinite(c4))a7=a7.Uo(c4,c4) +c4=a8.b +if(isFinite(c4))a7=a7.aOO(c4,c4)}a9=a2.b +c4=a2.a +b0=Math.max(0,c4) +b1=l.E(0,new A.aS(b0,a9,b0,a9)).bX(0,B.X,B.tG) +if(a.a>0){q=c2.e +if(q!=null){k=c2.f +if(k!=null)if(q!==s)if(k.gm(k)!==p.gm(p)){q=c2.f +q=(q.gm(q)>>>24&255)/255===1&&(p.gm(p)>>>24&255)/255<1&&s===0}else q=!1 +else q=!1 +else q=!1}else q=!1}else q=!1 +if(q){q=c2.d +if(!J.f(q==null?c3:q.e,a)){q=c2.d +if(q!=null)q.t() +q=A.cW(c3,a,c3,c3,c2) +q.cH() +k=q.eg$ +k.b=!0 +k.a.push(new A.aZJ(c2)) +c2.d=q}p=c2.f +c2.d.sm(0,0) +c2.d.d5(0)}c2.e=s +c2.f=p +a1.toString +b2=new A.cu(b1,new A.ke(a1,1,1,a5!=null?a5.$3(c7,c2.ghn().a,c2.a.as):c2.a.as,c3),c3) +if(a4!=null)b2=a4.$3(c7,c2.ghn().a,b2) +s.toString +q=r==null?c3:r.e2(o) +k=d.qV(e) +b3=p==null?B.i4:B.oN +b4=c2.a +b5=b4.c +b6=b4.d +b7=b4.e +b8=b4.x +b4=b4.f +b9=d.qV(e) +c0=c2.ghn() +q=A.me(a,!0,c3,A.a5n(!1,c3,b5!=null,A.aH5(b2,new A.fr(f,c3,c3,c3,c3,g==null?o:g,c3,c3,c3)),b9,a0,c3,b8,B.B,c3,new A.alt(new A.aZK(c5)),b4,c3,b7,b6,b5,new A.d1(new A.aZL(c5),t.VZ),c3,a3,c0),a6,p,s,c3,n,k,m,q,b3) +switch(b.a){case 0:c1=new A.Q(48+c4,48+a9) +break +case 1:c1=B.x +break +default:c1=c3}c4=c2.a.c +return A.dg(!0,c3,new A.aki(c1,new A.lW(a7,q,c3),c3),!0,c3,c4!=null,!1,!1,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3,c3)}} +A.aZW.prototype={ +$0(){}, +$S:0} +A.aZT.prototype={ +$1$1(a,b){var s=a.$1(this.a),r=a.$1(this.b),q=a.$1(this.c),p=s==null?r:s +return p==null?q:p}, +$1(a){return this.$1$1(a,t.z)}, +$S:474} +A.aZU.prototype={ +$1$1(a,b){return this.b.$1$1(new A.aZV(this.a,a,b),b)}, +$1(a){return this.$1$1(a,t.z)}, +$S:475} +A.aZV.prototype={ +$1(a){var s=this.b.$1(a) +return s==null?null:s.aG(this.a.ghn().a)}, +$S(){return this.c.h("0?(cB?)")}} +A.aZu.prototype={ +$1(a){return a==null?null:a.gh1(a)}, +$S:178} +A.aZv.prototype={ +$1(a){return a==null?null:a.gnH()}, +$S:477} +A.aZw.prototype={ +$1(a){return a==null?null:a.gdH(a)}, +$S:85} +A.aZH.prototype={ +$1(a){return a==null?null:a.gjl()}, +$S:85} +A.aZM.prototype={ +$1(a){return a==null?null:a.gdG(a)}, +$S:85} +A.aZN.prototype={ +$1(a){return a==null?null:a.ged()}, +$S:85} +A.aZO.prototype={ +$1(a){return a==null?null:a.geP(a)}, +$S:479} +A.aZP.prototype={ +$1(a){return a==null?null:a.gno()}, +$S:146} +A.aZQ.prototype={ +$1(a){return a==null?null:a.y}, +$S:146} +A.aZR.prototype={ +$1(a){return a==null?null:a.gnm()}, +$S:146} +A.aZS.prototype={ +$1(a){return a==null?null:a.Q}, +$S:85} +A.aZx.prototype={ +$1(a){return a==null?null:a.gkw()}, +$S:178} +A.aZy.prototype={ +$1(a){return a==null?null:a.giH()}, +$S:481} +A.aZz.prototype={ +$1(a){return a==null?null:a.gcw(a)}, +$S:482} +A.aZK.prototype={ +$1(a){return this.a.$1$1(new A.aZs(a),t.Pb)}, +$S:483} +A.aZs.prototype={ +$1(a){var s +if(a==null)s=null +else{s=a.gnp() +s=s==null?null:s.aG(this.a)}return s}, +$S:484} +A.aZL.prototype={ +$1(a){return this.a.$1$1(new A.aZr(a),t.G)}, +$S:100} +A.aZr.prototype={ +$1(a){var s +if(a==null)s=null +else{s=a.gfJ() +s=s==null?null:s.aG(this.a)}return s}, +$S:486} +A.aZA.prototype={ +$1(a){return a==null?null:a.giA()}, +$S:487} +A.aZB.prototype={ +$1(a){return a==null?null:a.gnF()}, +$S:488} +A.aZC.prototype={ +$1(a){return a==null?null:a.cx}, +$S:489} +A.aZD.prototype={ +$1(a){return a==null?null:a.cy}, +$S:490} +A.aZE.prototype={ +$1(a){return a==null?null:a.db}, +$S:491} +A.aZF.prototype={ +$1(a){return a==null?null:a.gmH()}, +$S:492} +A.aZG.prototype={ +$1(a){return a==null?null:a.dy}, +$S:176} +A.aZI.prototype={ +$1(a){return a==null?null:a.fr}, +$S:176} +A.aZJ.prototype={ +$1(a){if(a===B.af)this.a.aK(new A.aZt())}, +$S:5} +A.aZt.prototype={ +$0(){}, +$S:0} +A.alt.prototype={ +aG(a){var s=this.a.$1(a) +s.toString +return s}, +gDc(){return"ButtonStyleButton_MouseCursor"}} +A.aki.prototype={ +bA(a){var s=new A.WE(this.e,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.sY_(this.e)}} +A.WE.prototype={ +sY_(a){if(this.V.k(0,a))return +this.V=a +this.aB()}, +c1(a){var s=this.a0$ +if(s!=null)return Math.max(s.aY(B.a9,a,s.gc0()),this.V.a) +return 0}, +c_(a){var s=this.a0$ +if(s!=null)return Math.max(s.aY(B.ay,a,s.gcd()),this.V.b) +return 0}, +bZ(a){var s=this.a0$ +if(s!=null)return Math.max(s.aY(B.aa,a,s.gbY()),this.V.a) +return 0}, +c2(a){var s=this.a0$ +if(s!=null)return Math.max(s.aY(B.aN,a,s.gcG()),this.V.b) +return 0}, +a2v(a,b){var s,r,q=this.a0$ +if(q!=null){s=b.$2(q,a) +q=s.a +r=this.V +return a.ca(new A.Q(Math.max(q,r.a),Math.max(s.b,r.b)))}return B.x}, +dA(a){return this.a2v(a,A.qB())}, +cM(){var s,r=this +r.id=r.a2v(t.k.a(A.L.prototype.gaI.call(r)),A.xy()) +s=r.a0$ +if(s!=null){s=s.b +s.toString +t.q.a(s).a=B.a5.yn(t.o.a(r.gC(0).Y(0,r.a0$.gC(0))))}}, +dK(a,b){var s +if(this.p9(a,b))return!0 +s=this.a0$.gC(0).ob(B.h) +return a.Tx(new A.b5l(this,s),s,A.bo2(s))}} +A.b5l.prototype={ +$2(a,b){return this.a.a0$.dK(a,this.b)}, +$S:8} +A.Yy.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.Li.prototype={ +W(){return"ButtonTextTheme."+this.b}} +A.axY.prototype={ +W(){return"ButtonBarLayoutBehavior."+this.b}} +A.a0a.prototype={ +geP(a){var s=this.e +if(s==null)switch(this.c.a){case 0:s=B.jF +break +case 1:s=B.jF +break +case 2:s=B.UD +break +default:s=null}return s}, +gcw(a){var s,r=this.f +if(r==null){s=this.c +$label0$0:{if(B.ur===s||B.K0===s){r=B.Fm +break $label0$0}if(B.K1===s){r=B.Fn +break $label0$0}r=null}}return r}, +k(a,b){var s=this +if(b==null)return!1 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.a0a&&b.c===s.c&&b.a===s.a&&b.b===s.b&&b.geP(0).k(0,s.geP(0))&&b.gcw(0).k(0,s.gcw(0))&&J.f(b.w,s.w)&&J.f(b.y,s.y)&&J.f(b.z,s.z)&&J.f(b.at,s.at)&&b.ax==s.ax}, +gL(a){var s=this +return A.a6(s.c,s.a,s.b,s.geP(0),s.gcw(0),!1,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.agi.prototype={} +A.aZZ.prototype={ +W(){return"_CardVariant."+this.b}} +A.a0g.prototype={ +ab(a){var s,r,q,p,o,n,m,l,k=this,j=null,i=A.am(a).y1 +A.am(a) +switch(0){case 0:s=new A.aZY(a,B.y,j,j,j,1,B.UL,j) +break}r=s +s=k.y +if(s==null)s=i.f +if(s==null){s=r.f +s.toString}q=k.c +if(q==null)q=i.b +if(q==null)q=r.gA(0) +p=k.d +if(p==null)p=i.c +if(p==null)p=r.gdG(0) +o=i.d +if(o==null)o=r.ged() +n=k.f +if(n==null)n=i.e +if(n==null){n=r.e +n.toString}m=i.r +if(m==null)m=r.gcw(0) +l=i.a +if(l==null){l=r.a +l.toString}return A.dg(j,j,A.dD(j,A.me(B.ab,!0,j,A.dg(j,j,k.Q,!1,j,j,!1,!1,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j),l,q,n,j,p,m,o,j,B.fs),B.y,j,j,j,j,s,j,j),!0,j,j,!1,!1,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j)}} +A.aZY.prototype={ +ga32(){var s,r=this,q=r.x +if(q===$){s=A.am(r.w) +r.x!==$&&A.N() +q=r.x=s.ax}return q}, +gA(a){var s=this.ga32(),r=s.p3 +return r==null?s.k2:r}, +gdG(a){var s=this.ga32().x1 +return s==null?B.q:s}, +ged(){return B.B}, +gcw(a){return B.Fo}} +A.DK.prototype={ +gL(a){var s=this +return A.a6(s.a,s.gA(s),s.gdG(s),s.ged(),s.e,s.f,s.gcw(s),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.DK&&b.a==s.a&&J.f(b.gA(b),s.gA(s))&&J.f(b.gdG(b),s.gdG(s))&&J.f(b.ged(),s.ged())&&b.e==s.e&&J.f(b.f,s.f)&&J.f(b.gcw(b),s.gcw(s))}, +gA(a){return this.b}, +gdG(a){return this.c}, +ged(){return this.d}, +gcw(a){return this.r}} +A.agn.prototype={} +A.b_8.prototype={ +W(){return"_CheckboxType."+this.b}} +A.Lo.prototype={ +b5(){return new A.agr(new A.agp($.aa()),$,$,$,$,$,$,$,$,$,null,!1,!1,null,null,B.p)}} +A.agr.prototype={ +bu(){this.arE() +this.e=this.a.c}, +bH(a){var s,r,q=this +q.c7(a) +s=a.c +r=q.a.c +if(s!=r){q.e=s +s=q.Wv$ +if(r===!0){s===$&&A.c() +s.d5(0)}else{s===$&&A.c() +s.ex(0)}}}, +t(){this.d.t() +this.arD()}, +gaaB(){return new A.d1(new A.b_6(this),t.VZ)}, +y_(a,b){if(a instanceof A.Yi)return A.ei(a,b,t.oI) +if(!b.G(0,B.ao))return a +return null}, +ab(b8){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=this,b7=null +switch(b6.a.dx.a){case 0:break +case 1:switch(A.am(b8).w.a){case 0:case 1:case 3:case 5:break +case 2:case 4:s=b6.a +return new A.LY(s.c,s.d,s.f,s.w,!1,b7,b7,!1,s.cx,s.CW,b7)}break}r=A.bl4(b8) +A.am(b8) +q=new A.b_1(A.am(b8),A.am(b8).ax,b7,b7,b7,b7,b7,b7,b7,b7,b7) +s=b6.a.y +p=s==null?r.f:s +if(p==null)p=q.gEz() +b6.a.toString +o=q.giA() +switch(p.a){case 0:s=B.Gt +break +case 1:s=B.Gr +break +default:s=b7}n=s.X(0,new A.i(o.a,o.b).a2(0,4)) +m=b6.gp6() +m.E(0,B.ao) +l=b6.gp6() +l.P(0,B.ao) +b6.a.toString +k=b6.gaaB().a.$1(m) +if(k==null){s=r.b +k=s==null?b7:s.aG(m)}s=k==null +if(s){j=q.gnc().a.$1(m) +j.toString +i=j}else i=k +b6.a.toString +h=b6.gaaB().a.$1(l) +if(h==null){j=r.b +h=j==null?b7:j.aG(l)}j=h==null +if(j){g=q.gnc().a.$1(l) +g.toString +f=g}else f=h +g=b6.y_(b6.a.cx,m) +e=g==null?b6.y_(r.x,m):g +if(e==null){g=b6.y_(q.giH(),m) +g.toString +e=g}g=b6.y_(b6.a.cx,l) +d=g==null?b6.y_(r.x,l):g +if(d==null){g=b6.y_(q.giH(),l) +g.toString +d=g}c=b6.gp6() +c.E(0,B.W) +b6.a.toString +g=r.d +b=g==null?b7:g.aG(c) +a=b +if(a==null){b=q.gfJ().a.$1(c) +b.toString +a=b}a0=b6.gp6() +a0.E(0,B.V) +b6.a.toString +b=g==null?b7:g.aG(a0) +a1=b +if(a1==null){b=q.gfJ().a.$1(a0) +b.toString +a1=b}m.E(0,B.ae) +b6.a.toString +b=g==null?b7:g.aG(m) +if(b==null){s=s?b7:A.S(31,k.gm(k)>>>16&255,k.gm(k)>>>8&255,k.gm(k)&255) +a2=s}else a2=b +if(a2==null){s=q.gfJ().a.$1(m) +s.toString +a2=s}l.E(0,B.ae) +b6.a.toString +s=g==null?b7:g.aG(l) +if(s==null){s=j?b7:A.S(31,h.gm(h)>>>16&255,h.gm(h)>>>8&255,h.gm(h)&255) +a3=s}else a3=s +if(a3==null){s=q.gfJ().a.$1(l) +s.toString +a3=s}if(b6.DP$!=null){a1=b6.gp6().G(0,B.ao)?a2:a3 +a=b6.gp6().G(0,B.ao)?a2:a3}b6.a.toString +a4=b6.gp6() +s=b6.a.w +j=r.c +s=j==null?b7:j.aG(a4) +a5=s +if(a5==null){s=q.gqR().aG(a4) +s.toString +a5=s}b6.a.toString +a6=r.e +if(a6==null)a6=q.guG() +s=b6.a +j=s.db +s=s.c +g=b6.d +b=b6.Ww$ +b===$&&A.c() +g.sbe(0,b) +b=b6.Wx$ +b===$&&A.c() +g.saYb(b) +b=b6.WA$ +b===$&&A.c() +g.saYd(b) +b=b6.Wy$ +b===$&&A.c() +g.saYe(b) +g.saTs(a3) +g.saYc(a2) +g.sw1(a1) +g.srd(a) +g.suG(a6) +g.sV5(b6.DP$) +g.sEj(b6.gp6().G(0,B.W)) +g.saU6(b6.gp6().G(0,B.V)) +g.sTn(i) +g.sXl(f) +g.sqR(a5) +g.sm(0,b6.a.c) +g.sYM(b6.e) +b6.a.toString +b=r.w +g.scw(0,b==null?q.gcw(0):b) +g.saLQ(e) +g.saTt(d) +a7=b6.WC$ +if(a7===$){a8=A.b3([B.lQ,new A.e1(b6.ga9k(),new A.bW(A.b([],t.ot),t.wS),t.wY)],t.B,t.od) +b6.WC$!==$&&A.N() +b6.WC$=a8 +a7=a8}b=b6.a.d +a9=new A.b_7(b6,r).$1(b6.gp6()) +b0=b6.a.d==null +b1=!b0 +b2=b1?b6.gaKi():b7 +b3=b1?b6.ga9k():b7 +b4=b1?b6.ga5o():b7 +b5=b1?b6.ga5o():b7 +return A.dg(b7,s===!0,A.bf0(a7,!1,A.iH(b7,A.dg(b7,b7,A.ew(b7,b7,b7,g,n),!1,b7,b1,!1,!1,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7),B.ai,b0,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b3,b5,b2,b4,b7,b7,b7),b!=null,b7,a9,b7,b6.gazG(),b6.gazM(),b7),!1,b7,b7,!1,!1,b7,b7,b7,b7,j,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7)}} +A.b_6.prototype={ +$1(a){if(a.G(0,B.K))return null +if(a.G(0,B.ao))return this.a.a.f +return null}, +$S:100} +A.b_7.prototype={ +$1(a){var s=A.ei(this.a.a.e,a,t.GE) +if(s==null)s=null +return s==null?B.h3.aG(a):s}, +$S:494} +A.agp.prototype={ +sqR(a){if(J.f(this.db,a))return +this.db=a +this.D()}, +sm(a,b){if(this.dx==b)return +this.dx=b +this.D()}, +sYM(a){if(this.dy==a)return +this.dy=a +this.D()}, +scw(a,b){if(J.f(this.fr,b))return +this.fr=b +this.D()}, +saLQ(a){if(J.f(this.fx,a))return +this.fx=a +this.D()}, +saTt(a){if(J.f(this.fy,a))return +this.fy=a +this.D()}, +a6F(a,b){var s=1-Math.abs(b-0.5)*2,r=18-s*2,q=a.a+s,p=a.b+s +return new A.A(q,p,q+r,p+r)}, +a31(a){var s,r=this.e +if(a>=0.25)r.toString +else{s=this.f +s.toString +r.toString +r=A.Z(s,r,a*4) +r.toString}return r}, +Pq(a,b,c,d){a.a3(this.fr.nN(b),c) +this.fr.qV(d).aO(a,b)}, +Qa(a,b,c,d){var s,r=$.G().Z(),q=b.a,p=b.b,o=q+2.6999999999999997,n=p+8.1 +if(c<0.5){s=A.pM(B.a3E,B.Dh,c*2) +s.toString +r.a4(0,o,n) +r.q(0,q+s.a,p+s.b)}else{s=A.pM(B.Dh,B.a3D,(c-0.5)*2) +s.toString +r.a4(0,o,n) +r.q(0,q+7.2,p+12.6) +r.q(0,q+s.a,p+s.b)}a.a3(r,d)}, +Qb(a,b,c,d){var s,r=A.pM(B.a3N,B.Dg,1-c) +r.toString +s=A.pM(B.Dg,B.a3t,c) +s.toString +a.e7(b.X(0,r),b.X(0,s),d)}, +aO(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=b.ob(B.h) +if(f.b.gcz(0)!==B.Y||f.c.gcz(0)!==B.Y||f.d.gcz(0)!==B.Y){s=$.G().B() +r=f.r +r.toString +q=f.w +q.toString +q=A.Z(r,q,f.a.gm(0)) +r=f.x +r.toString +r=A.Z(q,r,f.d.gm(0)) +q=f.y +q.toString +q=A.Z(r,q,f.c.gm(0)) +q.toString +s.sA(0,q) +q=f.z +q.toString +r=f.as +r.toString +if(!r){r=f.at +r.toString}else r=!0 +if(r)p=q +else p=new A.br(0,q,t.Y).az(0,f.b.gm(0)) +if(p>0)a.cs(e.X(0,B.h),p,s)}e=$.G() +o=e.B() +r=f.db +r.toString +o.sA(0,r) +o.sU(0,B.u) +o.sbM(2) +n=t.o.a(b.b1(0,2).Y(0,B.Go.b1(0,2))) +r=f.a.a +m=r.gcz(r) +r=m===B.bD||m===B.af +q=f.a +l=r?q.gm(0):1-q.gm(0) +if(f.dy===!1||f.dx===!1){k=f.dx===!1?1-l:l +j=f.a6F(n,k) +i=e.B() +i.sA(0,f.a31(k)) +e=f.fx +if(k<=0.5){r=f.fy +r.toString +e.toString +f.Pq(a,j,i,A.bJ(r,e,k))}else{e.toString +f.Pq(a,j,i,e) +h=(k-0.5)*2 +if(f.dy==null||f.dx==null)f.Qb(a,n,h,o) +else f.Qa(a,n,h,o)}}else{j=f.a6F(n,1) +i=e.B() +i.sA(0,f.a31(1)) +e=f.fx +e.toString +f.Pq(a,j,i,e) +if(l<=0.5){h=1-l*2 +e=f.dy +if(e===!0)f.Qa(a,n,h,o) +else f.Qb(a,n,h,o)}else{g=(l-0.5)*2 +e=f.dx +if(e===!0)f.Qa(a,n,g,o) +else f.Qb(a,n,g,o)}}}} +A.b_1.prototype={ +giH(){return A.bhM(new A.b_5(this))}, +gnc(){return new A.d1(new A.b_3(this),t.mN)}, +gqR(){return new A.d1(new A.b_2(this),t.mN)}, +gfJ(){return new A.d1(new A.b_4(this),t.mN)}, +guG(){return 20}, +gEz(){return this.y.f}, +giA(){return this.y.Q}, +gcw(a){return B.Fm}} +A.b_5.prototype={ +$1(a){var s,r,q=this +if(a.G(0,B.K)){if(a.G(0,B.ao))return B.J7 +s=q.a.z.k3.a +return new A.bL(A.S(97,s>>>16&255,s>>>8&255,s&255),2,B.J,-1)}if(a.G(0,B.ao))return B.J8 +if(a.G(0,B.cw))return new A.bL(q.a.z.fy,2,B.J,-1) +if(a.G(0,B.ae))return new A.bL(q.a.z.k3,2,B.J,-1) +if(a.G(0,B.V))return new A.bL(q.a.z.k3,2,B.J,-1) +if(a.G(0,B.W))return new A.bL(q.a.z.k3,2,B.J,-1) +s=q.a.z +r=s.rx +return new A.bL(r==null?s.k3:r,2,B.J,-1)}, +$S:149} +A.b_3.prototype={ +$1(a){var s +if(a.G(0,B.K)){if(a.G(0,B.ao)){s=this.a.z.k3.a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}return B.B}if(a.G(0,B.ao)){if(a.G(0,B.cw))return this.a.z.fy +return this.a.z.b}return B.B}, +$S:4} +A.b_2.prototype={ +$1(a){if(a.G(0,B.K)){if(a.G(0,B.ao))return this.a.z.k2 +return B.B}if(a.G(0,B.ao)){if(a.G(0,B.cw))return this.a.z.go +return this.a.z.c}return B.B}, +$S:4} +A.b_4.prototype={ +$1(a){var s,r=this +if(a.G(0,B.cw)){if(a.G(0,B.ae)){s=r.a.z.fy.a +return A.S(B.c.ai(25.5),s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.V)){s=r.a.z.fy.a +return A.S(20,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.W)){s=r.a.z.fy.a +return A.S(B.c.ai(25.5),s>>>16&255,s>>>8&255,s&255)}}if(a.G(0,B.ao)){if(a.G(0,B.ae)){s=r.a.z.k3.a +return A.S(B.c.ai(25.5),s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.V)){s=r.a.z.b +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=r.a.z.b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return B.B}if(a.G(0,B.ae)){s=r.a.z.b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=r.a.z.k3.a +return A.S(20,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.W)){s=r.a.z.k3.a +return A.S(B.c.ai(25.5),s>>>16&255,s>>>8&255,s&255)}return B.B}, +$S:4} +A.YA.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.YB.prototype={ +bu(){var s,r=this,q=null +r.bN() +s=A.cW(q,B.ab,q,r.a.c===!1?0:1,r) +r.Wv$=s +r.Ww$=A.dP(B.dE,s,B.fb) +s=A.cW(q,B.b2,q,q,r) +r.KR$=s +r.Wx$=A.dP(B.aQ,s,q) +s=A.cW(q,B.nC,q,r.DR$||r.DQ$?1:0,r) +r.Wz$=s +r.Wy$=A.dP(B.aQ,s,q) +s=A.cW(q,B.nC,q,r.DR$||r.DQ$?1:0,r) +r.WB$=s +r.WA$=A.dP(B.aQ,s,q)}, +t(){var s=this,r=s.Wv$ +r===$&&A.c() +r.t() +r=s.Ww$ +r===$&&A.c() +r.t() +r=s.KR$ +r===$&&A.c() +r.t() +r=s.Wx$ +r===$&&A.c() +r.t() +r=s.Wz$ +r===$&&A.c() +r.t() +r=s.Wy$ +r===$&&A.c() +r.t() +r=s.WB$ +r===$&&A.c() +r.t() +r=s.WA$ +r===$&&A.c() +r.t() +s.arC()}} +A.b_9.prototype={ +W(){return"_CheckboxType."+this.b}} +A.Lp.prototype={ +aBD(){var s=this +switch(s.c){case!1:s.d.$1(!0) +break +case!0:s.d.$1(!1) +break +case null:case void 0:s.d.$1(!1) +break}}, +ab(a){var s,r,q,p,o,n,m,l,k=this,j=null +switch(0){case 0:s=new A.a3p(A.bl3(j,!1,j,j,j,!1,B.CY,j,k.d,j,j,j,j,j,!1,k.c),j) +break}$label0$1:{r=new A.bI(j,s) +break $label0$1}q=r.a +p=r.b +o=p +n=A.am(a) +m=A.bl4(a) +r=m.b +r=r==null?j:r.aG(A.C(t.EK)) +l=r +if(l==null)l=n.ax.y +return new A.OT(A.bnN(!1,k.go,j,j,!0,j,!1,q,j,j,k.gaBC(),!1,l,j,j,j,j,k.cy,o,j),j)}} +A.DP.prototype={ +gL(a){var s=this +return A.a6(s.a,s.gnc(),s.gqR(),s.gfJ(),s.guG(),s.gEz(),s.giA(),s.gcw(s),s.giH(),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.DP&&b.gnc()==s.gnc()&&b.gqR()==s.gqR()&&b.gfJ()==s.gfJ()&&b.guG()==s.guG()&&b.gEz()==s.gEz()&&J.f(b.giA(),s.giA())&&J.f(b.gcw(b),s.gcw(s))&&J.f(b.giH(),s.giH())}, +gnc(){return this.b}, +gqR(){return this.c}, +gfJ(){return this.d}, +guG(){return this.e}, +gEz(){return this.f}, +giA(){return this.r}, +gcw(a){return this.w}, +giH(){return this.x}} +A.ags.prototype={} +A.Lq.prototype={ +gL(a){var s=this +return A.bM([s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,s.ay,s.ch,s.CW,s.cx,s.cy,s.db,s.dx,s.dy])}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.Lq&&b.a==s.a&&J.f(b.b,s.b)&&J.f(b.c,s.c)&&J.f(b.d,s.d)&&J.f(b.e,s.e)&&J.f(b.f,s.f)&&J.f(b.r,s.r)&&J.f(b.w,s.w)&&J.f(b.x,s.x)&&b.y==s.y&&J.f(b.z,s.z)&&J.f(b.Q,s.Q)&&J.f(b.as,s.as)&&J.f(b.at,s.at)&&J.f(b.ax,s.ax)&&J.f(b.ay,s.ay)&&J.f(b.ch,s.ch)&&b.CW==s.CW&&b.cx==s.cx&&b.cy==s.cy&&J.f(b.db,s.db)&&J.f(b.dx,s.dx)&&J.f(b.dy,s.dy)}} +A.agv.prototype={} +A.E2.prototype={ +k(a0,a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=this +if(a1==null)return!1 +if(a===a1)return!0 +if(J.ai(a1)!==A.J(a))return!1 +if(a1 instanceof A.E2)if(a1.a===a.a){s=a1.b +r=a.b +if(s.k(0,r)){q=a1.c +p=a.c +if(q.k(0,p)){o=a1.d +if(o==null)o=s +n=a.d +if(o.k(0,n==null?r:n)){o=a1.e +if(o==null)o=q +n=a.e +if(o.k(0,n==null?p:n)){o=a1.f +if(o==null)o=s +n=a.f +if(o.k(0,n==null?r:n)){o=a1.r +if(o==null)o=s +n=a.r +if(o.k(0,n==null?r:n)){o=a1.w +if(o==null)o=q +n=a.w +if(o.k(0,n==null?p:n)){o=a1.x +if(o==null)o=q +n=a.x +if(o.k(0,n==null?p:n)){o=a1.y +n=a.y +if(o.k(0,n)){m=a1.z +l=a.z +if(m.k(0,l)){k=a1.Q +if(k==null)k=o +j=a.Q +if(k.k(0,j==null?n:j)){k=a1.as +if(k==null)k=m +j=a.as +if(k.k(0,j==null?l:j)){k=a1.at +if(k==null)k=o +j=a.at +if(k.k(0,j==null?n:j)){k=a1.ax +if(k==null)k=o +j=a.ax +if(k.k(0,j==null?n:j)){k=a1.ay +if(k==null)k=m +j=a.ay +if(k.k(0,j==null?l:j)){k=a1.ch +if(k==null)k=m +j=a.ch +if(k.k(0,j==null?l:j)){k=a1.CW +j=k==null +i=j?o:k +h=a.CW +g=h==null +if(i.k(0,g?n:h)){i=a1.cx +f=i==null +e=f?m:i +d=a.cx +c=d==null +if(e.k(0,c?l:d)){e=a1.cy +if(e==null)e=j?o:k +b=a.cy +if(b==null)b=g?n:h +if(e.k(0,b)){e=a1.db +if(e==null)e=f?m:i +b=a.db +if(b==null)b=c?l:d +if(e.k(0,b)){e=a1.dx +if(e==null)e=j?o:k +b=a.dx +if(b==null)b=g?n:h +if(e.k(0,b)){e=a1.dy +if(e==null)o=j?o:k +else o=e +k=a.dy +if(k==null)n=g?n:h +else n=k +if(o.k(0,n)){o=a1.fr +if(o==null)o=f?m:i +n=a.fr +if(n==null)n=c?l:d +if(o.k(0,n)){o=a1.fx +if(o==null)o=f?m:i +n=a.fx +if(n==null)n=c?l:d +if(o.k(0,n)){o=a1.fy +n=a.fy +if(o.k(0,n)){m=a1.go +l=a.go +if(m.k(0,l)){k=a1.id +o=k==null?o:k +k=a.id +if(o.k(0,k==null?n:k)){o=a1.k1 +if(o==null)o=m +n=a.k1 +if(o.k(0,n==null?l:n)){o=a1.k2 +n=a.k2 +if(o.k(0,n)){m=a1.k3 +l=a.k3 +if(m.k(0,l)){k=a1.ok +if(k==null)k=o +j=a.ok +if(k.k(0,j==null?n:j)){k=a1.p1 +if(k==null)k=o +j=a.p1 +if(k.k(0,j==null?n:j)){k=a1.p2 +if(k==null)k=o +j=a.p2 +if(k.k(0,j==null?n:j)){k=a1.p3 +if(k==null)k=o +j=a.p3 +if(k.k(0,j==null?n:j)){k=a1.p4 +if(k==null)k=o +j=a.p4 +if(k.k(0,j==null?n:j)){k=a1.R8 +if(k==null)k=o +j=a.R8 +if(k.k(0,j==null?n:j)){k=a1.RG +if(k==null)k=o +j=a.RG +if(k.k(0,j==null?n:j)){k=a1.rx +if(k==null)k=m +j=a.rx +if(k.k(0,j==null?l:j)){k=a1.ry +if(k==null){k=a1.ac +if(k==null)k=m}j=a.ry +if(j==null){j=a.ac +if(j==null)j=l}if(k.k(0,j)){k=a1.to +if(k==null){k=a1.ac +if(k==null)k=m}j=a.to +if(j==null){j=a.ac +if(j==null)j=l}if(k.k(0,j)){k=a1.x1 +if(k==null)k=B.q +j=a.x1 +if(k.k(0,j==null?B.q:j)){k=a1.x2 +if(k==null)k=B.q +j=a.x2 +if(k.k(0,j==null?B.q:j)){k=a1.xr +if(k==null)k=m +j=a.xr +if(k.k(0,j==null?l:j)){k=a1.y1 +if(k==null)k=o +j=a.y1 +if(k.k(0,j==null?n:j)){k=a1.y2 +q=k==null?q:k +k=a.y2 +if(q.k(0,k==null?p:k)){q=a1.bv +s=q==null?s:q +q=a.bv +if(s.k(0,q==null?r:q)){s=a1.bn +if(s==null)s=o +r=a.bn +if(s.k(0,r==null?n:r)){s=a1.ac +if(s==null)s=m +r=a.ac +if(s.k(0,r==null?l:r)){s=a1.k4 +if(s==null)s=o +r=a.k4 +s=s.k(0,r==null?n:r)}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1 +else s=!1 +return s}, +gL(d1){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=this,c8=c7.b,c9=c7.c,d0=c7.d +if(d0==null)d0=c8 +s=c7.e +if(s==null)s=c9 +r=c7.y +q=c7.z +p=c7.Q +if(p==null)p=r +o=c7.as +if(o==null)o=q +n=c7.CW +m=n==null +l=m?r:n +k=c7.cx +j=k==null +i=j?q:k +h=c7.cy +if(h==null)h=m?r:n +g=c7.db +if(g==null)g=j?q:k +f=c7.fy +e=c7.go +d=c7.id +if(d==null)d=f +c=c7.k1 +if(c==null)c=e +b=c7.k2 +a=c7.k3 +a0=c7.ok +if(a0==null)a0=b +a1=c7.p1 +if(a1==null)a1=b +a2=c7.p2 +if(a2==null)a2=b +a3=c7.p3 +if(a3==null)a3=b +a4=c7.p4 +if(a4==null)a4=b +a5=c7.R8 +if(a5==null)a5=b +a6=c7.RG +if(a6==null)a6=b +a7=c7.rx +if(a7==null)a7=a +a8=c7.ry +if(a8==null){a8=c7.ac +if(a8==null)a8=a}a9=c7.to +if(a9==null){a9=c7.ac +if(a9==null)a9=a}b0=c7.x1 +if(b0==null)b0=B.q +b1=c7.x2 +if(b1==null)b1=B.q +b2=c7.xr +if(b2==null)b2=a +b3=c7.y1 +if(b3==null)b3=b +b4=c7.y2 +if(b4==null)b4=c9 +b5=c7.bv +if(b5==null)b5=c8 +b6=c7.f +if(b6==null)b6=c8 +b7=c7.r +if(b7==null)b7=c8 +b8=c7.w +if(b8==null)b8=c9 +b9=c7.x +if(b9==null)b9=c9 +c0=c7.at +if(c0==null)c0=r +c1=c7.ax +if(c1==null)c1=r +c2=c7.ay +if(c2==null)c2=q +c3=c7.ch +if(c3==null)c3=q +c4=c7.dx +if(c4==null)c4=m?r:n +c5=c7.dy +if(c5==null){if(m)n=r}else n=c5 +m=c7.fr +if(m==null)m=j?q:k +c5=c7.fx +if(c5==null){if(j)k=q}else k=c5 +j=c7.bn +if(j==null)j=b +c5=c7.ac +if(c5==null)c5=a +c6=c7.k4 +return A.a6(c7.a,c8,c9,d0,s,r,q,p,o,l,i,h,g,f,e,d,c,A.a6(b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,A.a6(b6,b7,b8,b9,c0,c1,c2,c3,c4,n,m,k,j,c5,c6==null?b:c6,B.a,B.a,B.a,B.a,B.a),B.a),B.a,B.a)}} +A.agJ.prototype={} +A.fR.prototype={} +A.pG.prototype={} +A.M6.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.M6)if(J.f(b.a,r.a))if(b.b==r.b)if(b.c==r.c)if(b.d==r.d)if(J.f(b.e,r.e))if(b.f==r.f)if(b.r==r.r)if(J.f(b.w,r.w))if(b.x==r.x)if(b.y==r.y)if(b.z==r.z)s=b.Q==r.Q +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.ahx.prototype={} +A.M7.prototype={ +gL(a){var s=this +return A.bM([s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,s.ay,s.ch,s.CW,s.cx,s.cy,s.db,s.dx,s.dy,s.fr,s.fx,s.fy,s.go,s.id,s.k1,s.k2,s.k3,s.k4,s.ok,s.p1,s.p2,s.p3,s.p4])}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return b instanceof A.M7&&J.f(b.a,s.a)&&b.b==s.b&&J.f(b.c,s.c)&&J.f(b.d,s.d)&&J.f(b.e,s.e)&&J.f(b.f,s.f)&&J.f(b.r,s.r)&&J.f(b.w,s.w)&&J.f(b.x,s.x)&&J.f(b.y,s.y)&&J.f(b.z,s.z)&&b.Q==s.Q&&b.as==s.as&&b.at==s.at&&b.ax==s.ax&&b.ay==s.ay&&b.ch==s.ch&&J.f(b.CW,s.CW)&&J.f(b.cx,s.cx)&&b.cy==s.cy&&b.db==s.db&&b.dx==s.dx&&J.f(b.dy,s.dy)&&b.fr==s.fr&&J.f(b.fx,s.fx)&&J.f(b.fy,s.fy)&&J.f(b.go,s.go)&&J.f(b.id,s.id)&&J.f(b.k1,s.k1)&&J.f(b.k2,s.k2)&&J.f(b.k3,s.k3)&&J.f(b.k4,s.k4)&&b.ok==s.ok&&J.f(b.p1,s.p1)&&J.f(b.p3,s.p3)&&J.f(b.p4,s.p4)}} +A.ahz.prototype={} +A.ahM.prototype={} +A.aAT.prototype={ +Ah(a){return B.x}, +Jv(a,b,c,d){return B.bb}, +Ag(a,b){return B.h}} +A.atl.prototype={} +A.a29.prototype={ +ab(a){var s=null,r=A.cj(a,B.cM,t.l).w.r.b+8 +return new A.cu(new A.aS(8,r,8,8),new A.o3(new A.a2a(this.c.Y(0,new A.i(8,r))),A.fF(A.me(B.ab,!0,B.J3,A.hm(this.d,B.ah,B.ac,B.dj),B.ce,s,1,s,s,s,s,s,B.fs),s,222),s),s)}} +A.Ev.prototype={ +ab(a){var s=null +return A.fF(A.ada(this.d,this.c,A.bq8(B.aO,s,s,s,s,B.cH,s,s,B.cH,A.am(a).ax.a===B.b8?B.l:B.an,s,B.a8d,B.UC,s,B.l0,s,s,s,s)),s,1/0)}} +A.a2j.prototype={ +ab(a){var s,r,q,p,o,n,m,l,k,j,i,h=null +A.am(a) +s=A.am(a).ah +r=t.l +q=A.cj(a,B.mb,r).w +p=s.Q +if(p==null)p=B.UH +o=q.f.X(0,p) +n=A.bre(a) +q=s.f +if(q==null){q=n.f +q.toString}p=s.a +if(p==null)p=A.am(a).ay +m=s.b +if(m==null){m=n.b +m.toString}l=s.c +if(l==null)l=n.gdG(0) +k=s.d +if(k==null)k=n.ged() +j=s.e +if(j==null){j=n.e +j.toString}i=new A.ke(q,h,h,new A.lW(B.Jl,A.me(B.ab,!0,h,this.as,this.y,p,m,h,l,j,k,h,B.fs),h),h) +return new A.Kz(o,new A.rK(A.cj(a,h,r).w.ahN(!0,!0,!0,!0),i,h),B.f6,B.b2,h,h)}} +A.ZL.prototype={ +ab(a){var s,r,q,p,o,n,m,l,k=null,j=A.am(a),i=A.am(a).ah,h=A.bre(a),g=j.w +switch(g.a){case 2:case 4:s=k +break +case 0:case 1:case 3:case 5:A.nf(a,B.cK,t.c4).toString +s="Alert" +break +default:s=k}r=A.e8(a,B.d6) +r=r==null?k:r.geS() +r=A.ap(1,0.3333333333333333,A.U(14*(r==null?B.aq:r).a/14,1,2)-1) +r.toString +A.eP(a) +q=24*r +p=i.r +if(p==null){p=h.gnI() +p.toString}g=s==null&&g!==B.a6 +o=new A.cu(new A.aS(q,q,q,0),A.r2(A.dg(k,k,this.f,!0,k,k,!1,!1,k,k,k,k,k,k,k,k,g,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k),k,k,B.cI,!0,p,B.aA,k,B.aM),k) +g=24*r +r=i.w +if(r==null){r=h.goe() +r.toString}n=new A.cu(new A.aS(g,16,g,24),A.r2(A.dg(k,k,this.x,!0,k,k,!1,!1,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k),k,k,B.cI,!0,r,k,k,B.aM),k) +g=this.Q +r=g!=null +if(r){q=i.x +if(q==null)q=h.gCi() +m=new A.cu(q,A.bHW(B.kv,g,B.a40,B.d3,0,8),k)}else m=k +g=A.b([],t.p) +o.toString +g.push(o) +n.toString +g.push(new A.EX(1,B.Va,n,k)) +if(r){m.toString +g.push(m)}l=new A.a5v(A.hm(g,B.fa,B.ac,B.dj),k) +return A.blz(k,k,s!=null?A.dg(k,k,l,!1,k,k,!1,!0,k,k,k,k,s,k,k,k,!0,k,k,k,k,k,k,k,k,k,!0,k,k,k,k,k,k):l,B.y,k,k,k,k,k)}} +A.Mg.prototype={} +A.aAX.prototype={ +$3(a,b,c){var s=new A.j1(this.a,null),r=new A.tS(this.b.a,s,null) +r=A.aaU(!0,r,B.X,!0) +return r}, +$C:"$3", +$R:3, +$S:497} +A.b0Y.prototype={ +ga3E(){var s,r=this,q=r.at +if(q===$){s=A.am(r.as) +r.at!==$&&A.N() +q=r.at=s.ax}return q}, +ga91(){var s,r=this,q=r.ax +if(q===$){s=A.am(r.as) +r.ax!==$&&A.N() +q=r.ax=s.p2}return q}, +ghN(){return this.ga3E().y}, +gdH(a){var s=this.ga3E(),r=s.R8 +return r==null?s.k2:r}, +gdG(a){return B.B}, +ged(){return B.B}, +gnI(){return this.ga91().f}, +goe(){return this.ga91().z}, +gCi(){return B.UE}} +A.Ew.prototype={ +gL(a){var s=this +return A.bM([s.gdH(s),s.b,s.gdG(s),s.ged(),s.e,s.f,s.ghN(),s.gnI(),s.goe(),s.gCi(),s.z,s.Q])}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.Ew&&J.f(b.gdH(b),s.gdH(s))&&b.b==s.b&&J.f(b.gdG(b),s.gdG(s))&&J.f(b.ged(),s.ged())&&J.f(b.e,s.e)&&J.f(b.f,s.f)&&J.f(b.ghN(),s.ghN())&&J.f(b.gnI(),s.gnI())&&J.f(b.goe(),s.goe())&&J.f(b.gCi(),s.gCi())&&J.f(b.z,s.z)&&J.f(b.Q,s.Q)}, +gdH(a){return this.a}, +gdG(a){return this.c}, +ged(){return this.d}, +gnI(){return this.r}, +goe(){return this.w}, +gCi(){return this.x}, +ghN(){return this.y}} +A.ahR.prototype={} +A.Mm.prototype={ +gL(a){var s=this +return A.a6(s.gA(s),s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.Mm&&J.f(b.gA(b),s.gA(s))&&b.b==s.b&&b.c==s.c&&b.d==s.d&&b.e==s.e}, +gA(a){return this.a}} +A.ai_.prototype={} +A.aCc.prototype={ +W(){return"DrawerAlignment."+this.b}} +A.a2Y.prototype={ +ab(a){var s,r,q,p,o,n,m,l,k,j=null,i=A.bEn(a) +switch(A.am(a).w.a){case 2:case 4:s=j +break +case 0:case 1:case 3:case 5:A.nf(a,B.cK,t.c4).toString +s="Navigation menu" +break +default:s=j}A.am(a) +r=a.bh(t.Vo) +r=r==null?j:r.f +r=r==null?j:r.d +q=new A.b11(a,j,j,1,j,j,j,j,j) +if(r!==B.TU){r=i.f +if(r==null)r=q.gcw(0) +p=r}else{r=i.r +if(r==null)r=q.gDy() +p=r}r=i.w +if(r==null)r=304 +o=i.a +if(o==null)o=q.gdH(0) +n=i.c +if(n==null){n=q.c +n.toString}m=i.d +if(m==null)m=q.gdG(0) +l=i.e +if(l==null)l=q.ged() +if(p!=null)k=B.a4 +else k=B.y +return A.dg(j,j,new A.lW(new A.bb(r,r,1/0,1/0),A.me(B.ab,!0,j,this.x,k,o,n,j,m,p,l,j,B.dT),j),!1,j,j,!1,!0,j,j,j,j,s,j,j,j,!0,j,j,j,j,j,j,j,j,j,!0,j,j,j,j,j,j)}} +A.b11.prototype={ +gqY(a){var s,r=this,q=r.y +if(q===$){s=r.x.bh(t.I) +s.toString +r.y!==$&&A.N() +q=r.y=s.w}return q}, +gdH(a){var s=A.am(this.x).ax,r=s.p3 +return r==null?s.k2:r}, +ged(){return B.B}, +gdG(a){return B.B}, +gcw(a){return new A.ez(B.IZ.aG(this.gqY(0)),B.C)}, +gDy(){return new A.ez(B.IY.aG(this.gqY(0)),B.C)}} +A.EC.prototype={ +gL(a){var s=this +return A.a6(s.gdH(s),s.b,s.c,s.gdG(s),s.ged(),s.gcw(s),s.gDy(),s.w,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.EC&&J.f(b.gdH(b),s.gdH(s))&&J.f(b.b,s.b)&&b.c==s.c&&J.f(b.gdG(b),s.gdG(s))&&J.f(b.ged(),s.ged())&&J.f(b.gcw(b),s.gcw(s))&&J.f(b.gDy(),s.gDy())&&b.w==s.w}, +gdH(a){return this.a}, +gdG(a){return this.d}, +ged(){return this.e}, +gcw(a){return this.f}, +gDy(){return this.r}} +A.ail.prototype={} +A.ain.prototype={ +aO(a,b){var s=null,r=b.b,q=A.U(this.r.$0(),0,Math.max(r-48,0)),p=t.Y,o=A.U(q+48,Math.min(48,r),r),n=this.f +q=new A.br(q,0,p).az(0,n.gm(0)) +this.w.mt(a,new A.i(0,q),new A.zG(s,s,s,s,new A.Q(b.a-0,new A.br(o,r,p).az(0,n.gm(0))-q),s))}, +cF(a){var s,r=this +if(a.b.k(0,r.b))if(a.c===r.c)if(a.d===r.d)s=a.f!==r.f +else s=!0 +else s=!0 +else s=!0 +return s}} +A.J5.prototype={ +b5(){return new A.J6(B.p,this.$ti.h("J6<1>"))}} +A.J6.prototype={ +awE(a){var s,r=$.b1.bf$.f.a.b +switch((r==null?A.CP():r).a){case 0:r=!1 +break +case 1:r=!0 +break +default:r=null}if(a&&r){r=this.a +s=r.c.NB(r.f,r.r.d,r.w) +this.a.d.o9(s.d,B.hq,B.b2)}}, +aAh(){var s,r=this.a +r=r.c.ce[r.w] +s=this.c +s.toString +A.vM(s,!1).Mr(new A.nD(r.f.r,this.$ti.h("nD<1>")))}, +ab(a){var s,r,q,p,o,n=this,m=null,l=n.a,k=l.c,j=0.5/(k.ce.length+1.5) +l=l.w +s=k.k2 +if(l===k.eB){s.toString +r=A.dP(B.lq,s,m)}else{q=A.U(0.5+(l+1)*j,0,1) +p=A.U(q+1.5*j,0,1) +s.toString +r=A.dP(new A.ib(q,p,B.z),s,m)}l=n.a +k=l.e +s=l.c +l=l.w +o=A.a5n(l===s.eB,m,!0,A.dD(m,s.ce[l],B.y,m,m,m,s.ea,m,k,m),m,!0,m,m,m,m,m,n.gawD(),m,m,m,n.gaAg(),m,m,m,m) +o=A.li(!1,o,r) +o=A.abw(o,m,B.a16) +return o}} +A.J4.prototype={ +b5(){return new A.US(B.p,this.$ti.h("US<1>"))}} +A.US.prototype={ +bu(){var s,r=this +r.bN() +s=r.a.c.k2 +s.toString +r.d=A.dP(B.WC,s,B.WD) +s=r.a.c.k2 +s.toString +r.e=A.dP(B.WE,s,B.lq)}, +ab(a){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null +A.nf(a,B.cK,t.c4).toString +s=h.a.c +r=A.b([],t.p) +for(q=s.ce,p=h.$ti.h("J5<1>"),o=0;o0?8+B.b.oM(B.b.cI(this.pH,0,a),new A.b1c()):8}, +NB(a,b,c){var s,r,q,p,o=this,n=b-96,m=a.b,l=a.d,k=Math.min(l,b),j=o.a_o(c),i=Math.min(48,m),h=Math.max(b-48,k),g=o.pH,f=o.eB +l-=m +s=m-j-(g[f]-l)/2 +r=B.jE.gcO(0)+B.jE.gcX(0) +if(o.ce.length!==0)r+=B.b.oM(g,new A.b1d()) +q=Math.min(n,r) +p=s+q +if(sh){p=Math.max(k,h) +s=p-q}g=g[f]/2 +l=k-l/2 +if(p-gn?Math.min(Math.max(0,j-(m-s)),r-q):0)}, +gJr(){return this.ha}} +A.b1b.prototype={ +$2(a,b){var s=this.a +return new A.CL(s,b,s.ce,s.dD,s.dj,s.eB,s.fU,s.eu,!0,s.nb,null,s.$ti.h("CL<1>"))}, +$S(){return this.a.$ti.h("CL<1>(ah,bb)")}} +A.b1c.prototype={ +$2(a,b){return a+b}, +$S:63} +A.b1d.prototype={ +$2(a,b){return a+b}, +$S:63} +A.CL.prototype={ +b5(){return new A.UU(B.p,this.$ti.h("UU<1>"))}} +A.UU.prototype={ +bu(){this.bN() +var s=this.a +this.d=A.Rp(s.c.NB(s.r,s.d.d,s.w).d)}, +ab(a){var s,r=this,q=A.eP(a),p=r.a,o=p.c,n=p.f,m=p.r,l=p.d,k=p.Q +p=p.at +s=r.d +s===$&&A.c() +return A.bo4(new A.j1(new A.b1a(r,q,new A.J4(o,n,m,l,k,!0,p,s,null,r.$ti.h("J4<1>"))),null),a,!0,!0,!0,!0)}, +t(){var s=this.d +s===$&&A.c() +s.t() +this.bG()}} +A.b1a.prototype={ +$1(a){var s=this.a,r=s.a +return new A.o3(new A.aio(r.r,r.c,this.b,s.$ti.h("aio<1>")),new A.tS(r.y.a,this.c,null),null)}, +$S:498} +A.Jv.prototype={ +bA(a){var s=new A.aoh(this.e,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.V=this.e}} +A.aoh.prototype={ +cM(){this.uN() +var s=this.gC(0) +this.V.$1(s)}} +A.aim.prototype={ +ab(a){var s=null +return A.dD(this.d,this.c,B.y,s,B.Jm,s,s,s,s,s)}} +A.lg.prototype={} +A.ED.prototype={ +b5(){return new A.J3(B.p,this.$ti.h("J3<1>"))}} +A.J3.prototype={ +gdJ(a){var s +this.a.toString +s=this.r +return s}, +bu(){var s,r,q=this +q.bN() +q.aae() +s=q.a +s.toString +if(q.r==null)q.r=A.zg(!0,A.J(s).j(0),!0,!0,null,null,!1) +s=t.ot +r=t.wS +q.w=A.b3([B.lQ,new A.e1(new A.b17(q),new A.bW(A.b([],s),r),t.wY),B.Hu,new A.e1(new A.b18(q),new A.bW(A.b([],s),r),t.nz)],t.B,t.od)}, +t(){var s,r=this +$.b1.oN(r) +r.S6() +s=r.r +if(s!=null)s.t() +r.bG()}, +S6(){var s,r,q=this.e +if(q!=null)if(q.gtV()){s=q.a +if(s!=null){r=q.grg() +s.e.pI(0,A.bhB(q)).hW(0) +s.Hp(!1) +if(r){s.xO(A.p0()) +s.Pj()}}}this.f=this.e=null}, +bH(a){var s,r=this +r.c7(a) +s=r.a +s.toString +if(r.r==null)r.r=A.zg(!0,A.J(s).j(0),!0,!0,null,null,!1) +r.aae()}, +aae(){var s,r=this,q=r.a,p=q.c +if(p.length!==0)q=q.d==null&&!new A.bg(p,new A.b15(r),A.a5(p).h("bg<1>")).gar(0).H() +else q=!0 +if(q){r.d=null +return}for(s=0;q=r.a,p=q.c,s>")) +for(q=a0.h("Jv<1>"),p=0;o=b.a.c,p?>") +g=a0.h("bH?>") +f=A.GQ(B.eh) +e=A.b([],t.wi) +d=$.aa() +c=$.aK +b.e=new A.UT(r,B.jF,q,o,8,l,m,48,a,a,!0,a,k,"Dismiss",a,a,j,A.C(t.kj),new A.cK(a,a0.h("cK>>")),new A.cK(a,t.re),new A.PD(),a,0,new A.bH(new A.aM(i,h),g),f,e,B.re,new A.cD(a,d,t.Ll),new A.bH(new A.aM(c,h),g),new A.bH(new A.aM(c,h),g),a0.h("UT<1>")) +a0=b.gdJ(0) +if(a0!=null)a0.lF() +a0=b.e +a0.toString +n.q1(a0).cu(new A.b14(b),t.H) +b.a.toString}, +gaBT(){var s,r,q=null,p=this.c +p.toString +s=A.am(p).ax.a +p=this.gxF() +r=this.a +if(p){r.toString +switch(s.a){case 1:p=B.jm +break +case 0:p=B.a8 +break +default:p=q}return p}else{r.toString +switch(s.a){case 1:p=B.na +break +case 0:p=B.jt +break +default:p=q}return p}}, +gxF(){var s=this.a +s=s.c.length!==0 +return s}, +ab(a){var s,r,q,p,o,n,m,l,k=this,j=null,i=A.e8(a,B.HY),h=i==null?j:i.grs(0) +if(h==null){s=A.Cx(a).gnv() +h=s.a>s.b?B.eH:B.fA}i=k.f +if(i==null){k.f=h +i=h}if(h!==i){k.S6() +k.f=h}i=k.a +r=A.ab(i.c,!0,t.l7) +k.a.toString +if(!k.gxF())k.a.toString +A.bkY(a) +if(r.length===0)q=B.bb +else{i=k.d +if(i==null)i=j +k.a.toString +p=A.a5(r).h("W<1,b6>") +p=A.ab(new A.W(r,new A.b16(k),p),!0,p.h("aI.E")) +q=new A.a5g(B.iT,i,p,j)}if(k.gxF()){i=k.gSM() +i.toString}else{i=k.gSM() +i.toString +i=i.e2(A.am(a).ch)}p=a.bh(t.I) +p.toString +p=B.X.aG(p.w) +k.a.toString +o=t.p +n=A.b([],o) +if(k.a.CW)n.push(A.m1(q,1)) +else n.push(q) +m=k.gaBT() +k.a.toString +n.push(A.NP(B.Wd,new A.fr(24,j,j,j,j,m,j,j,j),j)) +h=A.r2(A.dD(j,A.jU(n,B.ah,B.kw,B.dj,j),B.y,j,j,j,j,j,p,j),j,j,B.cI,!0,i,j,j,B.aM) +if(a.bh(t.U2)==null){k.a.toString +i=A.dD(j,j,B.y,j,j,B.Jp,1,j,j,j) +h=A.kL(B.bC,A.b([h,A.kA(8,i,j,j,0,0,j,j)],o),B.a4,B.bB,j)}i=A.C(t.EK) +if(!k.gxF())i.E(0,B.K) +l=A.ei(B.h3,i,t.Pb) +k.a.toString +i=k.w +i===$&&A.c() +p=k.gxF()?k.gaBk():j +o=k.gxF() +k.a.toString +n=k.gdJ(0) +k.a.toString +m=A.am(a) +k.a.toString +return A.dg(!0,j,A.xJ(i,A.a5n(!1,j,o,h,j,!1,m.cx,n,j,j,l,j,j,j,j,p,j,j,j,j)),!1,j,j,!1,!1,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j,j)}} +A.b17.prototype={ +$1(a){return this.a.R2()}, +$S:499} +A.b18.prototype={ +$1(a){return this.a.R2()}, +$S:500} +A.b15.prototype={ +$1(a){var s=J.f(a.r,this.a.a.d) +return s}, +$S(){return this.a.$ti.h("F(lg<1>)")}} +A.b13.prototype={ +$1(a){var s=this.a.e +if(s==null)return +s.pH[this.b]=a.b}, +$S:188} +A.b14.prototype={ +$1(a){var s=this.a +s.S6() +if(s.c==null||a==null)return +s.a.r.$1(a.a)}, +$S(){return this.a.$ti.h("bR(nD<1>?)")}} +A.b16.prototype={ +$1(a){var s +this.a.a.toString +s=A.fF(a,48,null) +return s}, +$S:501} +A.YI.prototype={} +A.MA.prototype={ +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.MA)if(J.f(b.a,r.a))s=J.f(b.c,r.c) +else s=!1 +else s=!1 +return s}} +A.aip.prototype={} +A.a38.prototype={ +UH(a){var s=null +A.am(a) +A.am(a) +return new A.aiA(a,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,B.ab,!0,B.a5,s,s,s)}, +Zm(a){var s +a.bh(t.Gt) +s=A.am(a) +return s.a5.a}} +A.V1.prototype={ +aG(a){if(a.G(0,B.K))return this.b +return this.a}} +A.aiz.prototype={ +aG(a){var s +if(a.G(0,B.ae)){s=this.a +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=this.a +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=this.a +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return null}} +A.aix.prototype={ +aG(a){var s=this +if(a.G(0,B.K))return 0 +if(a.G(0,B.ae))return s.a+6 +if(a.G(0,B.V))return s.a+2 +if(a.G(0,B.W))return s.a+2 +return s.a}} +A.aiy.prototype={ +aG(a){if(a.G(0,B.K))return this.b +return this.a}} +A.aiA.prototype={ +gt4(){var s,r=this,q=r.fy +if(q===$){s=A.am(r.fx) +r.fy!==$&&A.N() +q=r.fy=s.ax}return q}, +gnH(){return new A.d0(A.am(this.fx).p2.as,t.RP)}, +gdH(a){return new A.d1(new A.b1g(this),t.VZ)}, +gjl(){return new A.d1(new A.b1i(this),t.VZ)}, +gfJ(){return new A.d1(new A.b1k(this),t.VZ)}, +gdG(a){var s=this.gt4().x1 +if(s==null)s=B.q +return new A.d0(s,t.De)}, +ged(){return B.cv}, +gh1(a){return new A.d1(new A.b1h(),t.N5)}, +geP(a){return new A.d0(A.bQh(this.fx),t.mD)}, +gno(){return B.HG}, +gnm(){return B.h_}, +gcw(a){return B.fZ}, +gnp(){return new A.d1(new A.b1j(),t.B_)}, +giA(){return A.am(this.fx).Q}, +gnF(){return A.am(this.fx).f}, +gmH(){return A.am(this.fx).y}} +A.b1g.prototype={ +$1(a){var s,r +if(a.G(0,B.K)){s=this.a.gt4().k3.a +return A.S(31,s>>>16&255,s>>>8&255,s&255)}s=this.a.gt4() +r=s.p3 +return r==null?s.k2:r}, +$S:4} +A.b1i.prototype={ +$1(a){var s +if(a.G(0,B.K)){s=this.a.gt4().k3.a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}return this.a.gt4().b}, +$S:4} +A.b1k.prototype={ +$1(a){var s +if(a.G(0,B.ae)){s=this.a.gt4().b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=this.a.gt4().b +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=this.a.gt4().b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return null}, +$S:100} +A.b1h.prototype={ +$1(a){if(a.G(0,B.K))return 0 +if(a.G(0,B.ae))return 1 +if(a.G(0,B.V))return 3 +if(a.G(0,B.W))return 1 +return 1}, +$S:175} +A.b1j.prototype={ +$1(a){if(a.G(0,B.K))return B.cH +return B.d_}, +$S:67} +A.atn.prototype={} +A.ato.prototype={} +A.atp.prototype={} +A.atq.prototype={} +A.EJ.prototype={ +gL(a){return J.a1(this.a)}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.EJ&&J.f(b.a,this.a)}} +A.aiB.prototype={} +A.tW.prototype={} +A.aDR.prototype={} +A.MU.prototype={ +b5(){var s=null +return new A.V9(new A.ws(s,s),new A.fp(s,s),new A.fp(s,s),new A.fp(s,s),new A.n2(B.dE),s,s,B.p)}} +A.V9.prototype={ +bu(){var s,r,q,p,o,n,m=this,l=null +m.bN() +s=m.x=A.cW(l,B.ab,l,l,m) +r=m.w +q=t.ve +m.z=new A.bz(q.a(s),r,A.w(r).h("bz")) +r=$.byo() +p=$.bym() +o=r.$ti.h("h_") +m.y=new A.bz(q.a(s),new A.h_(p,r,o),o.h("bz")) +o=m.d +r=$.byn() +n=A.w(o).h("h_") +m.Q=new A.bz(q.a(s),new A.h_(r,o,n),n.h("bz")) +n=m.e +o=A.w(n).h("h_") +m.as=new A.bz(q.a(s),new A.h_(p,n,o),o.h("bz")) +o=m.f +n=A.w(o).h("h_") +m.at=new A.bz(q.a(s),new A.h_(p,o,n),n.h("bz")) +n=m.r +o=A.w(n).h("h_") +m.ax=new A.bz(q.a(s),new A.h_(r,n,o),o.h("bz")) +o=m.c +o.toString +o=A.aMy(o) +if(o==null)s=l +else{s=m.c +s.toString +s=o.aho(s)}A.qx(s) +if(s==null){m.a.toString +s=!0}m.ay=s +if(s)m.x.sm(0,1) +m.a.toString +s=new A.aDR() +m.ch=s +s.a=m}, +t(){var s=this,r=s.ch +r===$&&A.c() +r.a=null +r=s.x +r===$&&A.c() +r.t() +r=s.CW +if(r!=null)r.bq(0) +s.CW=null +s.arL()}, +aKg(){var s,r=this,q=r.c +q.toString +A.nf(q,B.Hx,t.Uh).toString +q=r.c +q.toString +A.nf(q,B.cK,t.c4).toString +s=r.ay?"Collapsed":"Expanded" +r.aK(new A.b1B(r)) +r.a.toString +if(A.ci()===B.a6){q=r.CW +if(q!=null)q.bq(0) +r.CW=A.dn(B.cU,new A.b1C(r,s,B.r))}else A.Hx(s,B.r,B.mo)}, +ax9(){this.aKg()}, +a3W(a){switch(1){case 0:return B.xh +case 1:case 2:return B.xi}}, +au2(a){var s +this.a.toString +if(this.a3W(null)!==B.xh)return null +s=this.y +s===$&&A.c() +return A.aQF(B.wS,s)}, +aug(a){var s +this.a.toString +if(this.a3W(null)!==B.xi)return null +s=this.y +s===$&&A.c() +return A.aQF(B.wS,s)}, +au0(a,b){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null,f=A.am(a),e=A.aDS(a),d=h.ax +d===$&&A.c() +s=d.a +s=d.b.az(0,s.gm(s)) +r=s==null?e.a:s +if(r==null)r=B.B +d=h.Q +d===$&&A.c() +s=d.a +q=d.b.az(0,s.gm(s)) +if(q==null)q=B.uk +h.a.toString +A.nf(a,B.cK,t.c4).toString +d=h.ay +p=d?"Collapse":"Expand for more details" +switch(f.w.a){case 2:case 4:o=d?"Expanded\n double tap to collapse":"Collapsed\n double tap to expand" +break +case 0:case 1:case 3:case 5:o=g +break +default:o=g}d=q.gog() +s=h.at +s===$&&A.c() +n=s.a +n=s.b.az(0,n.gm(n)) +s=n==null?e.f:n +n=h.as +n===$&&A.c() +m=n.a +m=n.b.az(0,m.gm(m)) +h.a.toString +n=h.au2(a) +l=h.a.d +k=h.aug(a) +h.a.toString +s=A.dg(g,g,A.bGJ(A.bnN(!1,e.c,g,!0,!0,g,!1,n,g,g,h.gax8(),!1,g,g,g,g,g,l,k,g),s,g,m),!1,g,g,!1,!1,g,g,o,g,g,g,g,g,g,g,g,g,g,g,g,g,g,p,g,g,g,g,g,g,g) +n=e.d +if(n==null)n=B.a5 +m=h.z +m===$&&A.c() +l=m.a +j=new A.cu(d,A.hm(A.b([s,A.LD(new A.ke(n,g,m.b.az(0,l.gm(l)),b,g),B.a4,g)],t.p),B.ah,B.ac,B.dj),g) +h.a.toString +if(e.y==null){d=e.z!=null +i=d}else i=!0 +if(i)return A.me(B.ab,!0,g,j,B.ce,r,0,g,g,q,g,g,B.dT) +return A.Eq(j,new A.kF(r,g,g,g,q),B.dG)}, +bH(a){var s,r=this +r.c7(a) +s=r.c +s.toString +A.am(s) +s=r.c +s.toString +A.aDS(s) +s=r.c +s.toString +A.brj(s) +r.a.toString}, +cR(){var s,r,q,p=this,o=p.c +o.toString +s=A.am(o) +o=p.c +o.toString +r=A.aDS(o) +o=p.c +o.toString +q=A.brj(o) +p.aKO(r) +p.aLm(r,s) +p.aKW(r,q) +p.aL_(r,q) +p.aKP(r) +p.aKX(r) +p.fP()}, +aKO(a){var s=this.x +s===$&&A.c() +this.a.toString +s.e=B.ab}, +aLm(a,b){var s,r=this.d +this.a.toString +s=a.z +r.a=s==null?B.uk:s +s=a.y +if(s==null){s=b.CW +s=new A.fM(new A.bL(s,1,B.J,-1),B.C,new A.bL(s,1,B.J,-1),B.C)}r.b=s}, +aKW(a,b){var s,r=this.e +this.a.toString +s=a.x +r.a=s==null?b.gCT():s +this.a.toString +s=a.w +r.b=s==null?b.gFv():s}, +aL_(a,b){var s,r=this.f +this.a.toString +s=a.r +r.a=s==null?b.gCS():s +this.a.toString +s=a.f +r.b=s==null?b.ghN():s}, +aKP(a){var s=this.r +this.a.toString +s.a=a.b +s.b=a.a}, +aKX(a){this.a.toString +this.w.a=B.dE}, +ab(a){var s,r,q,p,o=this,n=null,m=A.aDS(a) +if(!o.ay){s=o.x +s===$&&A.c() +r=s.gcz(0)===B.Y}else r=!1 +if(r)o.a.toString +s=o.a +s.toString +q=m.e +if(q==null)q=B.X +p=new A.Gp(r,new A.Cg(!r,new A.cu(q,A.hm(s.r,B.ah,B.ac,B.ak),n),n),n) +s=o.x +s===$&&A.c() +q=r?n:p +return A.mX(s,o.gau_(),q)}} +A.b1B.prototype={ +$0(){var s,r=this.a,q=!r.ay +r.ay=q +s=r.x +if(q){s===$&&A.c() +s.d5(0)}else{s===$&&A.c() +s.ex(0).cu(new A.b1A(r),t.H)}q=r.c +q.toString +q=A.aMy(q) +if(q!=null){s=r.c +s.toString +q.ajm(s,r.ay)}}, +$S:0} +A.b1A.prototype={ +$1(a){var s=this.a +if(s.c==null)return +s.aK(new A.b1z())}, +$S:22} +A.b1z.prototype={ +$0(){}, +$S:0} +A.b1C.prototype={ +$0(){var s,r +A.Hx(this.b,this.c,B.mo) +s=this.a +r=s.CW +if(r!=null)r.bq(0) +s.CW=null}, +$S:0} +A.b1y.prototype={ +gHm(){var s,r=this,q=r.ay +if(q===$){q=r.ax +if(q===$){s=A.am(r.at) +r.ax!==$&&A.N() +r.ax=s +q=s}r.ay!==$&&A.N() +q=r.ay=q.ax}return q}, +gFv(){return this.gHm().k3}, +ghN(){return this.gHm().b}, +gCT(){return this.gHm().k3}, +gCS(){var s=this.gHm(),r=s.rx +return r==null?s.k3:r}} +A.YJ.prototype={ +t(){var s=this,r=s.dQ$ +if(r!=null)r.ad(0,s.gmQ()) +s.dQ$=null +s.bG()}, +dd(){this.eD() +this.ee() +this.mR()}} +A.ET.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.ghN(),s.gCS(),s.gFv(),s.gCT(),s.y,s.z,s.Q,s.as,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.ET)if(J.f(b.a,r.a))if(J.f(b.b,r.b))if(J.f(b.c,r.c))if(J.f(b.d,r.d))if(J.f(b.e,r.e))if(J.f(b.ghN(),r.ghN()))if(J.f(b.gCS(),r.gCS()))if(J.f(b.gFv(),r.gFv()))if(J.f(b.gCT(),r.gCT()))if(J.f(b.y,r.y))s=J.f(b.z,r.z) +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +ghN(){return this.f}, +gCS(){return this.r}, +gFv(){return this.w}, +gCT(){return this.x}} +A.aiO.prototype={} +A.MY.prototype={ +gL(a){return J.a1(this.a)}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.MY&&J.f(b.a,this.a)}} +A.aiT.prototype={} +A.b0K.prototype={ +j(a){return""}} +A.aj4.prototype={ +W(){return"_FloatingActionButtonType."+this.b}} +A.a3P.prototype={ +ab(a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=null,a0=A.am(a5),a1=a0.ao,a2=this.k1,a3=new A.b1E(a5,a2,!0,a,a,a,a,a,6,6,8,a,6,a,!0,a,B.Jk,B.Jj,B.Jn,B.Jo,8,a,a,a),a4=a1.a +if(a4==null)a4=a3.gjl() +s=a1.b +if(s==null)s=a3.gdH(0) +r=a1.c +if(r==null)r=a3.grd() +q=a1.d +if(q==null)q=a3.gw1() +p=a1.e +if(p==null)p=a3.gAI() +o=a1.f +if(o==null){n=a3.f +n.toString +o=n}m=a1.r +if(m==null){n=a3.r +n.toString +m=n}l=a1.w +if(l==null){n=a3.w +n.toString +l=n}n=a1.x +k=n==null?a3.x:n +if(k==null)k=o +j=a1.y +if(j==null){n=a3.y +n.toString +j=n}i=a1.Q +if(i==null){n=a3.Q +n.toString +i=n}h=a1.as +if(h==null)h=a3.gkw() +n=a1.cy +if(n==null){n=a3.gDC() +n.toString}g=n.e2(a4) +f=a1.z +if(f==null)f=a3.gcw(0) +n=this.c +e=A.aH5(n,new A.fr(h,a,a,a,a,a,a,a,a)) +switch(a2.a){case 0:d=a1.at +if(d==null){a2=a3.at +a2.toString +d=a2}break +case 1:d=a1.ax +if(d==null){a2=a3.ax +a2.toString +d=a2}break +case 2:d=a1.ay +if(d==null){a2=a3.ay +a2.toString +d=a2}break +case 3:d=a1.ch +if(d==null){a2=a3.ch +a2.toString +d=a2}c=a1.cx +if(c==null)c=a3.gDB() +a2=A.b([],t.p) +a2.push(n) +e=new A.agt(new A.cu(c,A.jU(a2,B.ah,B.ac,B.dj,a),a),a) +break +default:d=a}b=A.bmY(new A.Ql(this.z,new A.aiv(a,a1.db),g,s,r,q,p,o,l,m,j,k,d,f,e,a0.f,a,!1,B.y,i,a),B.Lt,!1) +return new A.OT(b,a)}} +A.aiv.prototype={ +aG(a){var s=A.ei(this.a,a,t.GE) +if(s==null)s=null +return s==null?B.h3.aG(a):s}, +gDc(){return"MaterialStateMouseCursor(FloatActionButton)"}} +A.agt.prototype={ +bA(a){var s=a.bh(t.I) +s.toString +s=new A.Ww(B.a5,s.w,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){var s=a.bh(t.I) +s.toString +b.scV(s.w)}} +A.Ww.prototype={ +c1(a){return 0}, +c_(a){return 0}, +dA(a){var s=this.a0$,r=a.a,q=a.b,p=a.c,o=a.d +if(s!=null){s=s.aY(B.bg,B.eb,s.gjd()) +return new A.Q(Math.max(r,Math.min(q,s.a)),Math.max(p,Math.min(o,s.b)))}else return new A.Q(A.U(1/0,r,q),A.U(1/0,p,o))}, +cM(){var s=this,r=t.k.a(A.L.prototype.gaI.call(s)),q=s.a0$,p=r.a,o=r.b,n=r.c,m=r.d +if(q!=null){q.dc(B.eb,!0) +s.id=new A.Q(Math.max(p,Math.min(o,s.a0$.gC(0).a)),Math.max(n,Math.min(m,s.a0$.gC(0).b))) +s.Ty()}else s.id=new A.Q(A.U(1/0,p,o),A.U(1/0,n,m))}} +A.b1E.prototype={ +gBp(){var s,r=this,q=r.fx +if(q===$){s=A.am(r.dx) +r.fx!==$&&A.N() +q=r.fx=s.ax}return q}, +gjl(){var s=this.gBp(),r=s.e +return r==null?s.c:r}, +gdH(a){var s=this.gBp(),r=s.d +return r==null?s.b:r}, +gAI(){var s=this.gBp(),r=s.e +s=r==null?s.c:r +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}, +grd(){var s=this.gBp(),r=s.e +s=r==null?s.c:r +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}, +gw1(){var s=this.gBp(),r=s.e +s=r==null?s.c:r +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}, +gcw(a){var s +switch(this.dy.a){case 0:s=B.Fp +break +case 1:s=B.Fo +break +case 2:s=B.Fq +break +case 3:s=B.Fp +break +default:s=null}return s}, +gkw(){switch(this.dy.a){case 0:var s=24 +break +case 1:s=24 +break +case 2:s=36 +break +case 3:s=24 +break +default:s=null}return s}, +gDB(){return new A.kn(this.fr&&this.dy===B.aiU?16:20,0,20,0)}, +gDC(){var s,r=this,q=r.fy +if(q===$){s=A.am(r.dx) +r.fy!==$&&A.N() +q=r.fy=s.p2}return q.as}} +A.aEj.prototype={ +j(a){return"FloatingActionButtonLocation"}} +A.aTT.prototype={ +aU9(){return!1}, +a_t(a){var s=this.aU9()?4:0 +return new A.i(this.ak6(a,s),this.ak7(a,s))}} +A.aDX.prototype={ +ak7(a,b){var s=a.c,r=a.b.b,q=a.a.b,p=a.w.b,o=s-q-Math.max(16,a.f.d-(a.r.b-s)+16) +if(p>0)o=Math.min(o,s-p-q-16) +return(r>0?Math.min(o,s-r-q/2):o)+b}} +A.aDW.prototype={ +ak6(a,b){var s +switch(a.y.a){case 0:s=16+a.e.a-b +break +case 1:s=A.bKv(a,b) +break +default:s=null}return s}} +A.b1m.prototype={ +j(a){return"FloatingActionButtonLocation.endFloat"}} +A.aEi.prototype={ +j(a){return"FloatingActionButtonAnimator"}} +A.b6e.prototype={ +ak5(a,b,c){if(c<0.5)return a +else return b}} +A.TQ.prototype={ +gm(a){var s=this,r=s.w.x +r===$&&A.c() +if(r>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return s}if(a.G(0,B.V)){s=q.c +if(s==null){s=q.a +s=s==null?p:A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return s}if(a.G(0,B.W)){s=q.b +r=q.a +s=r==null?p:A.S(B.c.ai(25.5),r.gm(r)>>>16&255,r.gm(r)>>>8&255,r.gm(r)&255) +return s}}if(a.G(0,B.ae)){s=q.d +if(s==null){s=q.a +s=s==null?p:A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return s}if(a.G(0,B.V)){s=q.c +if(s==null){s=q.a +s=s==null?p:A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return s}if(a.G(0,B.W)){s=q.b +r=q.a +s=r==null?p:A.S(B.c.ai(25.5),r.gm(r)>>>16&255,r.gm(r)>>>8&255,r.gm(r)&255) +return s}return p}, +j(a){return"{hovered: "+A.j(this.c)+", focused: "+A.j(this.b)+", pressed: "+A.j(this.d)+", otherwise: null}"}} +A.ajZ.prototype={ +aG(a){if(a.G(0,B.K))return this.b +return this.a}} +A.ak0.prototype={ +gck(){var s,r=this,q=r.go +if(q===$){s=A.am(r.fx) +r.go!==$&&A.N() +q=r.go=s.ax}return q}, +gdH(a){return B.aii}, +gjl(){return new A.d1(new A.b2C(this),t.VZ)}, +gfJ(){return new A.d1(new A.b2E(this),t.VZ)}, +gh1(a){return B.iH}, +gdG(a){return B.cv}, +ged(){return B.cv}, +geP(a){return B.lV}, +gno(){return B.lU}, +gnm(){return B.h_}, +gkw(){return B.lT}, +giH(){return null}, +gcw(a){return B.fZ}, +gnp(){return new A.d1(new A.b2D(),t.B_)}, +giA(){return B.fY}, +gnF(){return A.am(this.fx).f}, +gmH(){return A.am(this.fx).y}} +A.b2C.prototype={ +$1(a){var s,r +if(a.G(0,B.K)){s=this.a.gck().k3.a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.ao))return this.a.gck().b +s=this.a.gck() +r=s.rx +return r==null?s.k3:r}, +$S:4} +A.b2E.prototype={ +$1(a){var s,r,q=this +if(a.G(0,B.ao)){if(a.G(0,B.ae)){s=q.a.gck().b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=q.a.gck().b +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=q.a.gck().b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}}if(a.G(0,B.ae)){s=q.a.gck() +r=s.rx +s=r==null?s.k3:r +s=s.a +return A.S(B.c.ai(25.5),s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.V)){s=q.a.gck() +r=s.rx +s=(r==null?s.k3:r).a +return A.S(20,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.W)){s=q.a.gck() +r=s.rx +s=r==null?s.k3:r +s=s.a +return A.S(B.c.ai(25.5),s>>>16&255,s>>>8&255,s&255)}return B.B}, +$S:4} +A.b2D.prototype={ +$1(a){if(a.G(0,B.K))return B.cH +return B.d_}, +$S:67} +A.aiU.prototype={ +gck(){var s,r=this,q=r.go +if(q===$){s=A.am(r.fx) +r.go!==$&&A.N() +q=r.go=s.ax}return q}, +gdH(a){return new A.d1(new A.b1G(this),t.VZ)}, +gjl(){return new A.d1(new A.b1H(this),t.VZ)}, +gfJ(){return new A.d1(new A.b1J(this),t.VZ)}, +gh1(a){return B.iH}, +gdG(a){return B.cv}, +ged(){return B.cv}, +geP(a){return B.lV}, +gno(){return B.lU}, +gnm(){return B.h_}, +gkw(){return B.lT}, +giH(){return null}, +gcw(a){return B.fZ}, +gnp(){return new A.d1(new A.b1I(),t.B_)}, +giA(){return B.fY}, +gnF(){return A.am(this.fx).f}, +gmH(){return A.am(this.fx).y}} +A.b1G.prototype={ +$1(a){var s,r +if(a.G(0,B.K)){s=this.a.gck().k3.a +return A.S(31,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.ao))return this.a.gck().b +s=this.a +if(s.fy){s=s.gck() +r=s.RG +return r==null?s.k2:r}return s.gck().b}, +$S:4} +A.b1H.prototype={ +$1(a){var s +if(a.G(0,B.K)){s=this.a.gck().k3.a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.ao))return this.a.gck().c +s=this.a +if(s.fy)return s.gck().b +return s.gck().c}, +$S:4} +A.b1J.prototype={ +$1(a){var s,r=this +if(a.G(0,B.ao)){if(a.G(0,B.ae)){s=r.a.gck().c +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=r.a.gck().c +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=r.a.gck().c +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}}s=r.a +if(s.fy){if(a.G(0,B.ae)){s=s.gck().b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=s.gck().b +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=s.gck().b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}}if(a.G(0,B.ae)){s=s.gck().c +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=s.gck().c +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=s.gck().c +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return B.B}, +$S:4} +A.b1I.prototype={ +$1(a){if(a.G(0,B.K))return B.cH +return B.d_}, +$S:67} +A.aiV.prototype={ +gck(){var s,r=this,q=r.go +if(q===$){s=A.am(r.fx) +r.go!==$&&A.N() +q=r.go=s.ax}return q}, +gdH(a){return new A.d1(new A.b1K(this),t.VZ)}, +gjl(){return new A.d1(new A.b1L(this),t.VZ)}, +gfJ(){return new A.d1(new A.b1N(this),t.VZ)}, +gh1(a){return B.iH}, +gdG(a){return B.cv}, +ged(){return B.cv}, +geP(a){return B.lV}, +gno(){return B.lU}, +gnm(){return B.h_}, +gkw(){return B.lT}, +giH(){return null}, +gcw(a){return B.fZ}, +gnp(){return new A.d1(new A.b1M(),t.B_)}, +giA(){return B.fY}, +gnF(){return A.am(this.fx).f}, +gmH(){return A.am(this.fx).y}} +A.b1K.prototype={ +$1(a){var s,r +if(a.G(0,B.K)){s=this.a.gck().k3.a +return A.S(31,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.ao)){s=this.a.gck() +r=s.Q +return r==null?s.y:r}s=this.a +if(s.fy){s=s.gck() +r=s.RG +return r==null?s.k2:r}s=s.gck() +r=s.Q +return r==null?s.y:r}, +$S:4} +A.b1L.prototype={ +$1(a){var s,r +if(a.G(0,B.K)){s=this.a.gck().k3.a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.ao)){s=this.a.gck() +r=s.as +return r==null?s.z:r}s=this.a +if(s.fy){s=s.gck() +r=s.rx +return r==null?s.k3:r}s=s.gck() +r=s.as +return r==null?s.z:r}, +$S:4} +A.b1N.prototype={ +$1(a){var s,r,q=this +if(a.G(0,B.ao)){if(a.G(0,B.ae)){s=q.a.gck() +r=s.as +s=r==null?s.z:r +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=q.a.gck() +r=s.as +s=r==null?s.z:r +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=q.a.gck() +r=s.as +s=r==null?s.z:r +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}}s=q.a +if(s.fy){if(a.G(0,B.ae)){s=s.gck() +r=s.rx +s=r==null?s.k3:r +s=s.a +return A.S(B.c.ai(25.5),s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.V)){s=s.gck() +r=s.rx +s=(r==null?s.k3:r).a +return A.S(20,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.W)){s=s.gck() +r=s.rx +s=r==null?s.k3:r +s=s.a +return A.S(B.c.ai(25.5),s>>>16&255,s>>>8&255,s&255)}}if(a.G(0,B.ae)){s=s.gck() +r=s.as +s=r==null?s.z:r +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=s.gck() +r=s.as +s=r==null?s.z:r +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=s.gck() +r=s.as +s=r==null?s.z:r +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return B.B}, +$S:4} +A.b1M.prototype={ +$1(a){if(a.G(0,B.K))return B.cH +return B.d_}, +$S:67} +A.amp.prototype={ +gck(){var s,r=this,q=r.go +if(q===$){s=A.am(r.fx) +r.go!==$&&A.N() +q=r.go=s.ax}return q}, +gdH(a){return new A.d1(new A.b4i(this),t.VZ)}, +gjl(){return new A.d1(new A.b4j(this),t.VZ)}, +gfJ(){return new A.d1(new A.b4l(this),t.VZ)}, +gh1(a){return B.iH}, +gdG(a){return B.cv}, +ged(){return B.cv}, +geP(a){return B.lV}, +gno(){return B.lU}, +gnm(){return B.h_}, +gkw(){return B.lT}, +giH(){return new A.d1(new A.b4m(this),t.j_)}, +gcw(a){return B.fZ}, +gnp(){return new A.d1(new A.b4k(),t.B_)}, +giA(){return B.fY}, +gnF(){return A.am(this.fx).f}, +gmH(){return A.am(this.fx).y}} +A.b4i.prototype={ +$1(a){var s,r +if(a.G(0,B.K)){if(a.G(0,B.ao)){s=this.a.gck().k3.a +return A.S(31,s>>>16&255,s>>>8&255,s&255)}return B.B}if(a.G(0,B.ao)){s=this.a.gck() +r=s.xr +return r==null?s.k3:r}return B.B}, +$S:4} +A.b4j.prototype={ +$1(a){var s,r +if(a.G(0,B.K)){s=this.a.gck().k3.a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.ao)){s=this.a.gck() +r=s.y1 +return r==null?s.k2:r}s=this.a.gck() +r=s.rx +return r==null?s.k3:r}, +$S:4} +A.b4l.prototype={ +$1(a){var s,r,q=this +if(a.G(0,B.ao)){if(a.G(0,B.ae)){s=q.a.gck() +r=s.y1 +s=r==null?s.k2:r +s=s.a +return A.S(B.c.ai(25.5),s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.V)){s=q.a.gck() +r=s.y1 +s=(r==null?s.k2:r).a +return A.S(20,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.W)){s=q.a.gck() +r=s.y1 +s=(r==null?s.k2:r).a +return A.S(20,s>>>16&255,s>>>8&255,s&255)}}if(a.G(0,B.ae)){s=q.a.gck().k3.a +return A.S(B.c.ai(25.5),s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.V)){s=q.a.gck() +r=s.rx +s=(r==null?s.k3:r).a +return A.S(20,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.W)){s=q.a.gck() +r=s.rx +s=(r==null?s.k3:r).a +return A.S(20,s>>>16&255,s>>>8&255,s&255)}return B.B}, +$S:4} +A.b4m.prototype={ +$1(a){var s,r +if(a.G(0,B.ao))return null +else{if(a.G(0,B.K)){s=this.a.gck().k3.a +return new A.bL(A.S(31,s>>>16&255,s>>>8&255,s&255),1,B.J,-1)}s=this.a.gck() +r=s.ry +if(r==null){r=s.ac +s=r==null?s.k3:r}else s=r +return new A.bL(s,1,B.J,-1)}}, +$S:505} +A.b4k.prototype={ +$1(a){if(a.G(0,B.K))return B.cH +return B.d_}, +$S:67} +A.atx.prototype={} +A.Fj.prototype={ +gL(a){return J.a1(this.a)}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.Fj&&J.f(b.a,this.a)}} +A.NO.prototype={ +wE(a,b,c){return A.bn2(c,this.w)}, +el(a){return!this.w.k(0,a.w)}} +A.ak2.prototype={} +A.NU.prototype={ +gaC1(){var s,r=this.e +if(r==null)return B.X +s=r.geP(r) +return s}, +b5(){return new A.Vy(new A.cK(null,t.re),B.p)}} +A.Vy.prototype={ +aAG(){this.e=null}, +ht(){var s=this.e +if(s!=null)s.t() +this.rX()}, +atX(a){var s,r,q,p=this,o=p.e,n=p.a +if(o==null){o=n.e +n=A.bqU(a) +s=A.Kg(a,null) +r=A.bfE(a,t.u9) +r.toString +q=$.b1.bf$.z.i(0,p.d).gaF() +q.toString +q=new A.NV(s,r,t.x.a(q),p.gaAF()) +q.sbJ(o) +q.safq(n) +r.J9(q) +p.e=q}else{o.sbJ(n.e) +o=p.e +o.toString +o.safq(A.bqU(a)) +o=p.e +o.toString +o.stw(A.Kg(a,null))}o=p.a.c +return o}, +ab(a){var s=this,r=s.a.gaC1() +s.a.toString +return new A.cu(r,new A.j1(s.gatW(),null),s.d)}} +A.NV.prototype={ +sbJ(a){var s,r=this +if(J.f(a,r.f))return +r.f=a +s=r.e +if(s!=null)s.t() +s=r.f +r.e=s==null?null:s.D3(r.gaC_()) +r.a.bi()}, +safq(a){if(a===this.r)return +this.r=a +this.a.bi()}, +stw(a){if(a.k(0,this.w))return +this.w=a +this.a.bi()}, +aC0(){this.a.bi()}, +t(){var s=this.e +if(s!=null)s.t() +this.qo()}, +Mg(a,b){var s,r,q=this +if(q.e==null||!q.r)return +s=A.a6K(b) +r=q.w.Uj(q.b.gC(0)) +if(s==null){a.bU(0) +a.az(0,b.a) +q.e.mt(a,B.h,r) +a.bw(0)}else q.e.mt(a,s,r)}} +A.vk.prototype={ +ayE(a){var s +if(a===B.Y&&!this.CW){s=this.ch +s===$&&A.c() +s.t() +this.qo()}}, +t(){var s=this.ch +s===$&&A.c() +s.t() +this.qo()}, +a6M(a,b,c){var s,r,q=this +a.bU(0) +s=q.f +if(s!=null)a.m9(0,s.fM(b,q.ax)) +switch(q.z.a){case 1:s=b.gbC() +r=q.Q +a.cs(s,r==null?35:r,c) +break +case 0:s=q.as +if(!s.k(0,B.aP))a.dm(A.aOG(b,s.c,s.d,s.a,s.b),c) +else a.b7(b,c) +break}a.bw(0)}, +Mg(a,b){var s,r,q,p=this,o=$.G().B(),n=p.e,m=p.ay +m===$&&A.c() +s=m.a +o.sA(0,A.S(m.b.az(0,s.gm(s)),n.gm(n)>>>16&255,n.gm(n)>>>8&255,n.gm(n)&255)) +r=A.a6K(b) +n=p.at +if(n!=null)q=n.$0() +else{n=p.b.gC(0) +q=new A.A(0,0,0+n.a,0+n.b)}if(r==null){a.bU(0) +a.az(0,b.a) +p.a6M(a,q,o) +a.bw(0)}else p.a6M(a,q.dz(r),o)}} +A.b95.prototype={ +$0(){var s=this.a.gC(0) +return new A.A(0,0,0+s.a,0+s.b)}, +$S:126} +A.b2X.prototype={ +acs(a,b,c,d,e,f,g,a0,a1,a2,a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h=null +if(a1==null){if(a2!=null){s=a2.$0() +r=J.bS(s) +q=new A.Q(r.gaH(s)-r.gae(s),r.gaQ(s)-r.gaj(s))}else q=a3.gC(0) +s=Math.max(q.Js(0,B.h).ge6(),new A.i(0+q.a,0).Y(0,new A.i(0,0+q.b)).ge6())/2}else s=a1 +r=new A.NX(a0,B.aP,s,A.bPj(a3,d,a2),a4,c,f,e,a3,g) +p=e.V +o=A.cW(h,B.jB,h,h,p) +n=e.gfH() +o.cH() +m=o.e8$ +m.b=!0 +m.a.push(n) +o.d5(0) +r.cx=o +m=c.gm(c) +l=t.ve +k=t.gD +r.CW=new A.bz(l.a(o),new A.vp(0,m>>>24&255),k.h("bz")) +m=A.cW(h,B.cU,h,h,p) +m.cH() +o=m.e8$ +o.b=!0 +o.a.push(n) +m.d5(0) +r.ch=m +o=t.Y +j=$.bwg() +i=o.h("h_") +r.ay=new A.bz(l.a(m),new A.h_(j,new A.br(s*0.3,s+5,o),i),i.h("bz")) +p=A.cW(h,B.vX,h,h,p) +p.cH() +i=p.e8$ +i.b=!0 +i.a.push(n) +p.cH() +n=p.eg$ +n.b=!0 +n.a.push(r.gaC2()) +r.db=p +n=c.gm(c) +i=$.bwh() +k=k.h("h_") +r.cy=new A.bz(l.a(p),new A.h_(i,new A.vp(n>>>24&255,0),k),k.h("bz")) +e.J9(r) +return r}} +A.NX.prototype={ +D_(a){var s=this.ch +s===$&&A.c() +s.e=B.U5 +s.d5(0) +s=this.cx +s===$&&A.c() +s.d5(0) +s=this.db +s===$&&A.c() +s.z=B.b6 +s.o_(1,B.z,B.vX)}, +bq(a){var s,r=this,q=r.cx +q===$&&A.c() +q.dM(0) +q=r.cx.x +q===$&&A.c() +s=1-q +q=r.db +q===$&&A.c() +q.sm(0,s) +if(s<1){q=r.db +q.z=B.b6 +q.o_(1,B.z,B.jB)}}, +aC3(a){if(a===B.af)this.t()}, +t(){var s=this,r=s.ch +r===$&&A.c() +r.t() +r=s.cx +r===$&&A.c() +r.t() +r=s.db +r===$&&A.c() +r.t() +s.qo()}, +Mg(a,b){var s,r,q,p,o,n,m=this,l=m.cx +l===$&&A.c() +l=l.r +if(l!=null&&l.a!=null){l=m.CW +l===$&&A.c() +s=l.a +r=l.b.az(0,s.gm(s))}else{l=m.cy +l===$&&A.c() +s=l.a +r=l.b.az(0,s.gm(s))}q=$.G().B() +l=m.e +q.sA(0,A.S(r,l.gm(l)>>>16&255,l.gm(l)>>>8&255,l.gm(l)&255)) +l=m.at +if(l!=null)p=l.$0() +else p=null +s=p!=null?p.gbC():m.b.gC(0).ob(B.h) +o=m.ch +o===$&&A.c() +o=o.x +o===$&&A.c() +o=A.pM(m.z,s,B.bt.az(0,o)) +o.toString +s=m.ay +s===$&&A.c() +n=s.a +n=s.b.az(0,n.gm(n)) +m.agA(m.Q,a,o,l,m.f,q,n,m.ax,b)}} +A.b94.prototype={ +$0(){var s=this.a.gC(0) +return new A.A(0,0,0+s.a,0+s.b)}, +$S:126} +A.b2Y.prototype={ +acs(a,b,c,d,e,f,g,h,i,j,k,a0){var s,r,q=null,p=i==null?A.bPn(k,d,j,h):i,o=new A.NY(h,B.aP,p,A.bPi(k,d,j),!d,a0,c,f,e,k,g),n=e.V,m=A.cW(q,B.cU,q,q,n),l=e.gfH() +m.cH() +s=m.e8$ +s.b=!0 +s.a.push(l) +m.d5(0) +o.CW=m +s=t.Y +r=t.ve +o.ch=new A.bz(r.a(m),new A.br(0,p,s),s.h("bz")) +n=A.cW(q,B.ab,q,q,n) +n.cH() +s=n.e8$ +s.b=!0 +s.a.push(l) +n.cH() +l=n.eg$ +l.b=!0 +l.a.push(o.gaC4()) +o.cy=n +l=c.gm(c) +o.cx=new A.bz(r.a(n),new A.vp(l>>>24&255,0),t.gD.h("bz")) +e.J9(o) +return o}} +A.NY.prototype={ +D_(a){var s=B.c.bK(this.as/1),r=this.CW +r===$&&A.c() +r.e=A.dE(0,s) +r.d5(0) +this.cy.d5(0)}, +bq(a){var s=this.cy +if(s!=null)s.d5(0)}, +aC5(a){if(a===B.af)this.t()}, +t(){var s=this,r=s.CW +r===$&&A.c() +r.t() +s.cy.t() +s.cy=null +s.qo()}, +Mg(a,b){var s,r,q=this,p=$.G().B(),o=q.e,n=q.cx +n===$&&A.c() +s=n.a +p.sA(0,A.S(n.b.az(0,s.gm(s)),o.gm(o)>>>16&255,o.gm(o)>>>8&255,o.gm(o)&255)) +r=q.z +if(q.ax){o=q.b.gC(0).ob(B.h) +n=q.CW +n===$&&A.c() +n=n.x +n===$&&A.c() +r=A.pM(r,o,n)}r.toString +o=q.ch +o===$&&A.c() +n=o.a +n=o.b.az(0,n.gm(n)) +q.agA(q.Q,a,r,q.at,q.f,p,n,q.ay,b)}} +A.vq.prototype={ +D_(a){}, +bq(a){}, +sA(a,b){if(b.k(0,this.e))return +this.e=b +this.a.bi()}, +sUB(a){if(J.f(a,this.f))return +this.f=a +this.a.bi()}, +agA(a,b,c,d,e,f,g,h,i){var s,r=A.a6K(i) +b.bU(0) +if(r==null)b.az(0,i.a) +else b.aJ(0,r.a,r.b) +if(d!=null){s=d.$0() +if(e!=null)b.m9(0,e.fM(s,h)) +else if(!a.k(0,B.aP))b.vp(A.aOG(s,a.c,a.d,a.a,a.b)) +else b.mZ(s)}b.cs(c,g,f) +b.bw(0)}} +A.Fw.prototype={} +A.Wc.prototype={ +el(a){return this.f!==a.f}} +A.NW.prototype={ +akf(a){return null}, +ab(a){var s=this,r=a.bh(t.sZ),q=r==null?null:r.f +return new A.Vx(s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.Q,s.z,s.as,s.at,s.ax,s.ay,s.ch,s.CW,s.cx,s.cy,s.db,s.dx,s.dy,s.fr,s.fx,s.fy,s.go,s.id,!1,s.k2,s.k3,s.k4,s.ok,q,s.gake(),s.gaPo(),s.p1,s.p2,null)}, +aPp(a){return!0}} +A.Vx.prototype={ +b5(){return new A.Vw(A.D(t.R9,t.Wg),new A.bW(A.b([],t.IU),t.qF),null,B.p)}} +A.x7.prototype={ +W(){return"_HighlightType."+this.b}} +A.Vw.prototype={ +gaTc(){var s=this.r.gbm(0) +return!new A.bg(s,new A.b2V(),A.w(s).h("bg")).gaA(0)}, +XT(a,b){var s,r=this.y,q=r.a,p=q.length +if(b){r.b=!0 +q.push(a)}else r.P(0,a) +s=q.length!==0 +if(s!==(p!==0)){r=this.a.p1 +if(r!=null)r.XT(this,s)}}, +aLP(a){var s=this,r=s.z +if(r!=null)r.bq(0) +s.z=null +r=s.c +r.toString +s.a8G(r) +r=s.e +if(r!=null)r.D_(0) +s.e=null +r=s.a +if(r.d!=null){if(r.id){r=s.c +r.toString +A.aE1(r)}r=s.a.d +if(r!=null)r.$0()}s.z=A.dn(B.b2,new A.b2R(s))}, +a0g(a){var s=this.c +s.toString +this.a8G(s) +this.aeA()}, +alD(){return this.a0g(null)}, +X3(){this.aK(new A.b2U())}, +ghn(){var s=this.a.p4 +if(s==null){s=this.x +s.toString}return s}, +Ee(){var s,r,q=this +if(q.a.p4==null)q.x=A.aXC(null) +s=q.ghn() +r=q.a +r.toString +s.ey(0,B.K,!(q.lY(r)||q.lZ(r))) +q.ghn().an(0,q.gvY())}, +bu(){this.arQ() +this.Ee() +$.b1.bf$.f.a.f.E(0,this.gaeu())}, +bH(a){var s,r,q,p,o=this +o.c7(a) +s=a.p4 +if(o.a.p4!=s){if(s!=null)s.ad(0,o.gvY()) +if(o.a.p4!=null){s=o.x +if(s!=null){s.ah$=$.aa() +s.ac$=0}o.x=null}o.Ee()}s=o.a +if(s.cx==a.cx){s=s.CW +s=s!==a.CW}else s=!0 +if(s){s=o.r +r=s.i(0,B.h4) +if(r!=null){q=r.ch +q===$&&A.c() +q.t() +r.qo() +o.ZL(B.h4,!1,o.f)}p=s.i(0,B.HX) +if(p!=null){s=p.ch +s===$&&A.c() +s.t() +p.qo()}}if(!J.f(o.a.db,a.db))o.aKZ() +s=o.a +s.toString +s=o.lY(s)||o.lZ(s) +if(s!==(o.lY(a)||o.lZ(a))){s=o.ghn() +q=o.a +q.toString +s.ey(0,B.K,!(o.lY(q)||o.lZ(q))) +s=o.a +s.toString +if(!(o.lY(s)||o.lZ(s))){o.ghn().ey(0,B.ae,!1) +r=o.r.i(0,B.h4) +if(r!=null){s=r.ch +s===$&&A.c() +s.t() +r.qo()}}o.ZL(B.h4,!1,o.f)}o.ZK()}, +t(){var s,r=this +$.b1.bf$.f.a.f.P(0,r.gaeu()) +r.ghn().ad(0,r.gvY()) +s=r.x +if(s!=null){s.ah$=$.aa() +s.ac$=0}s=r.z +if(s!=null)s.bq(0) +r.z=null +r.bG()}, +gwD(){if(!this.gaTc()){var s=this.d +s=s!=null&&s.a!==0}else s=!0 +return s}, +ajZ(a){switch(a.a){case 0:return B.ab +case 1:case 2:this.a.toString +return B.nC}}, +ZL(a,b,c){var s,r,q,p,o,n,m,l,k,j,i=this,h=null,g=i.r,f=g.i(0,a),e=a.a +switch(e){case 0:i.ghn().ey(0,B.ae,c) +break +case 1:if(b)i.ghn().ey(0,B.V,c) +break +case 2:break}if(a===B.f_){s=i.a.p1 +if(s!=null)s.XT(i,c)}s=f==null +if(c===(!s&&f.CW))return +if(c)if(s){s=i.a.fx +if(s==null)r=h +else{q=i.ghn().a +q=s.a.$1(q) +r=q}if(r==null){switch(e){case 0:s=i.a.fr +if(s==null){s=i.c +s.toString +s=A.am(s).cy}break +case 2:s=i.a.dx +if(s==null){s=i.c +s.toString +s=A.am(s).cx}break +case 1:s=i.a.dy +if(s==null){s=i.c +s.toString +s=A.am(s).dx}break +default:s=h}r=s}s=i.c.gaF() +s.toString +t.x.a(s) +q=i.c +q.toString +q=A.bfE(q,t.u9) +q.toString +p=i.a +p.toString +p=i.lY(p)||i.lZ(p)?r:A.S(0,r.gm(r)>>>16&255,r.gm(r)>>>8&255,r.gm(r)&255) +o=i.a +n=o.CW +m=o.cx +l=o.db +o=o.p2.$1(s) +k=i.c.bh(t.I) +k.toString +j=i.ajZ(a) +s=new A.vk(n,m,B.aP,o,k.w,p,l,q,s,new A.b2W(i,a)) +j=A.cW(h,j,h,h,q.V) +j.cH() +p=j.e8$ +p.b=!0 +p.a.push(q.gfH()) +j.cH() +p=j.eg$ +p.b=!0 +p.a.push(s.gayD()) +j.d5(0) +s.ch=j +p=s.e +p=p.gm(p) +s.ay=new A.bz(t.ve.a(j),new A.vp(0,p>>>24&255),t.gD.h("bz")) +q.J9(s) +g.u(0,a,s) +i.ul()}else{f.CW=!0 +g=f.ch +g===$&&A.c() +g.d5(0)}else{f.CW=!1 +g=f.ch +g===$&&A.c() +g.ex(0)}switch(e){case 0:g=i.a.at +if(g!=null)g.$1(c) +break +case 1:if(b){g=i.a.ax +if(g!=null)g.$1(c)}break +case 2:break}}, +rH(a,b){return this.ZL(a,!0,b)}, +aKZ(){var s,r,q,p=this +for(s=p.r.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a +if(q==null)q=r.a(q) +if(q!=null)q.sUB(p.a.db)}s=p.e +if(s!=null)s.sUB(p.a.db) +s=p.d +if(s!=null&&s.a!==0)for(r=A.w(s),s=new A.k1(s,s.uS(),r.h("k1<1>")),r=r.c;s.H();){q=s.d +if(q==null)q=r.a(q) +q.sUB(p.a.db)}}, +avL(a){var s,r,q,p,o,n,m,l,k,j,i=this,h={},g=i.c +g.toString +g=A.bfE(g,t.u9) +g.toString +s=i.c.gaF() +s.toString +t.x.a(s) +r=s.e5(a) +q=i.a.fx +if(q==null)q=null +else{p=i.ghn().a +p=q.a.$1(p) +q=p}o=q==null?i.a.fy:q +if(o==null){q=i.c +q.toString +o=A.am(q).k2}q=i.a +n=q.ch?q.p2.$1(s):null +q=i.a +m=q.cy +l=q.db +h.a=null +q=q.go +if(q==null){q=i.c +q.toString +q=A.am(q).y}p=i.a +k=p.ch +p=p.cx +j=i.c.bh(t.I) +j.toString +return h.a=q.acs(0,m,o,k,g,l,new A.b2Q(h,i),r,p,n,s,j.w)}, +aS4(a){if(this.c==null)return +this.aK(new A.b2T(this))}, +gaHV(){var s,r=this,q=r.c +q.toString +q=A.e8(q,B.h6) +s=q==null?null:q.ch +$label0$0:{if(B.fx===s||s==null){q=r.a +q.toString +q=(r.lY(q)||r.lZ(q))&&r.Q +break $label0$0}if(B.kA===s){q=r.Q +break $label0$0}q=null}return q}, +ZK(){var s=$.b1.bf$.f.a.b +switch((s==null?A.CP():s).a){case 0:s=!1 +break +case 1:s=this.gaHV() +break +default:s=null}this.rH(B.HX,s)}, +aS6(a){var s,r=this +r.Q=a +r.ghn().ey(0,B.W,a) +r.ZK() +s=r.a.k2 +if(s!=null)s.$1(a)}, +aem(a){if(this.y.a.length!==0)return +this.aJO(a)}, +X6(a){this.aem(a) +this.a.toString}, +X8(a){this.a.toString}, +aSR(a){this.aem(a) +this.a.toString}, +aST(a){this.a.toString}, +a8H(a,b){var s,r,q,p,o=this +if(a!=null){s=a.gaF() +s.toString +t.x.a(s) +r=s.gC(0) +r=new A.A(0,0,0+r.a,0+r.b).gbC() +q=A.dx(s.cW(0,null),r)}else q=b.a +o.ghn().ey(0,B.ae,!0) +p=o.avL(q) +s=o.d;(s==null?o.d=A.ek(t.nQ):s).E(0,p) +s=o.e +if(s!=null)s.bq(0) +o.e=p +o.ul() +o.rH(B.f_,!0)}, +aJO(a){return this.a8H(null,a)}, +a8G(a){return this.a8H(a,null)}, +aeA(){var s=this,r=s.e +if(r!=null)r.D_(0) +s.e=null +s.rH(B.f_,!1) +r=s.a +if(r.d!=null){if(r.id){r=s.c +r.toString +A.aE1(r)}r=s.a.d +if(r!=null)r.$0()}}, +aSY(){var s=this,r=s.e +if(r!=null)r.bq(0) +s.e=null +s.a.toString +s.rH(B.f_,!1)}, +aSN(){var s=this,r=s.e +if(r!=null)r.D_(0) +s.e=null +s.rH(B.f_,!1) +s.a.toString}, +aSP(){var s=this,r=s.e +if(r!=null)r.bq(0) +s.e=null +s.a.toString +s.rH(B.f_,!1)}, +ht(){var s,r,q,p,o,n,m,l=this,k=l.d +if(k!=null){l.d=null +for(s=A.w(k),k=new A.k1(k,k.uS(),s.h("k1<1>")),s=s.c;k.H();){r=k.d;(r==null?s.a(r):r).t()}l.e=null}for(k=l.r,s=A.jb(k,k.r,A.w(k).c);s.H();){r=s.d +q=k.i(0,r) +if(q!=null){p=q.ch +p===$&&A.c() +p.r.t() +p.r=null +o=p.eg$ +o.b=!1 +B.b.af(o.a) +n=o.c +if(n===$){m=A.ek(o.$ti.c) +o.c!==$&&A.N() +o.c=m +n=m}if(n.a>0){n.b=n.c=n.d=n.e=null +n.a=0}o=p.e8$ +o.b=!1 +B.b.af(o.a) +n=o.c +if(n===$){m=A.ek(o.$ti.c) +o.c!==$&&A.N() +o.c=m +n=m}if(n.a>0){n.b=n.c=n.d=n.e=null +n.a=0}p.Om() +q.qo()}k.u(0,r,null)}k=l.a.p1 +if(k!=null)k.XT(l,!1) +l.arP()}, +lY(a){return a.d!=null}, +lZ(a){return!1}, +aSk(a){var s=this,r=s.f=!0,q=s.a +q.toString +if(!s.lY(q)?s.lZ(q):r)s.rH(B.h4,s.f)}, +aSm(a){this.f=!1 +this.rH(B.h4,!1)}, +gaus(){var s,r=this,q=r.c +q.toString +q=A.e8(q,B.h6) +s=q==null?null:q.ch +$label0$0:{if(B.fx===s||s==null){q=r.a +q.toString +q=(r.lY(q)||r.lZ(q))&&r.a.ok +break $label0$0}if(B.kA===s){q=!0 +break $label0$0}q=null}return q}, +ab(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=null +c.GG(a) +s=new A.b2S(c,a) +for(r=c.r,q=A.jb(r,r.r,A.w(r).c);q.H();){p=q.d +o=r.i(0,p) +if(o!=null)o.sA(0,s.$1(p))}r=c.e +if(r!=null){q=c.a.fx +if(q==null)q=b +else{p=c.ghn().a +p=q.a.$1(p) +q=p}if(q==null)q=c.a.fy +r.sA(0,q==null?A.am(a).k2:q)}r=c.a.ay +if(r==null)r=B.h3 +n=A.ei(r,c.ghn().a,t.Pb) +m=c.w +if(m===$){r=c.gaLO() +q=t.ot +p=t.wS +l=A.b3([B.lQ,new A.e1(r,new A.bW(A.b([],q),p),t.wY),B.Hu,new A.e1(r,new A.bW(A.b([],q),p),t.nz)],t.B,t.od) +c.w!==$&&A.N() +c.w=l +m=l}r=c.a.k4 +q=c.gaus() +p=c.a +o=p.k3 +k=p.d +k=k==null?b:c.galC() +p=c.lY(p)?c.gvZ():b +j=c.a +j.toString +j=c.lY(j)?c.gw_():b +i=c.a +i.toString +i=c.lY(i)?c.gE0():b +h=c.a +h.toString +h=c.lY(h)?c.gE1():b +g=c.a +g.toString +g=c.lZ(g)?c.gaSQ():b +f=c.a +f.toString +f=c.lZ(f)?c.gaSS():b +e=c.a +e.toString +e=c.lZ(e)?c.gaSM():b +d=c.a +d.toString +d=c.lZ(d)?c.gaSO():b +return new A.Wc(c,A.xJ(m,A.v6(o,q,A.pK(A.bDw(A.dg(b,b,A.iH(B.b9,c.a.c,B.ai,!0,b,b,b,b,b,b,b,b,b,b,b,e,d,g,f,i,h,p,j,b,b,b),!1,b,b,!1,!1,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,k,b,b,b,b,b,b,b,b),n),n,b,c.gaSj(),c.gaSl(),b),b,b,b,r,!0,b,c.gaS5(),b,b,b,b)),b)}, +$ibhv:1} +A.b2V.prototype={ +$1(a){return a!=null}, +$S:511} +A.b2R.prototype={ +$0(){this.a.rH(B.f_,!1)}, +$S:0} +A.b2U.prototype={ +$0(){}, +$S:0} +A.b2W.prototype={ +$0(){var s=this.a +s.r.u(0,this.b,null) +s.ul()}, +$S:0} +A.b2Q.prototype={ +$0(){var s,r=this.b,q=r.d +if(q!=null){s=this.a +q.P(0,s.a) +if(r.e==s.a)r.e=null +r.ul()}}, +$S:0} +A.b2T.prototype={ +$0(){this.a.ZK()}, +$S:0} +A.b2S.prototype={ +$1(a){var s,r,q=this,p=null,o=A.am(q.b) +switch(a.a){case 0:s=q.a +r=s.a.fx +r=r==null?p:r.a.$1(B.a6D) +s=r==null?s.a.fr:r +if(s==null)s=o.cy +break +case 2:s=q.a +r=s.a.fx +r=r==null?p:r.a.$1(B.a6E) +s=r==null?s.a.dx:r +if(s==null)s=o.cx +break +case 1:s=q.a +r=s.a.fx +r=r==null?p:r.a.$1(B.a6B) +s=r==null?s.a.dy:r +if(s==null)s=o.dx +break +default:s=p}return s}, +$S:512} +A.a5m.prototype={} +A.YN.prototype={ +bu(){this.bN() +if(this.gwD())this.xG()}, +ht(){var s=this.ku$ +if(s!=null){s.D() +s.fN() +this.ku$=null}this.rX()}} +A.oj.prototype={} +A.mI.prototype={ +gEl(){return!1}, +aOq(a){var s=a==null?this.a:a +return new A.mI(this.b,s)}, +gog(){return new A.aS(0,0,0,this.a.b)}, +au(a,b){return new A.mI(B.j1,this.a.au(0,b))}, +iC(a,b){var s=$.G().Z(),r=a.a,q=a.b +s.m3(new A.A(r,q,r+(a.c-r),q+Math.max(0,a.d-q-this.a.b))) +return s}, +qe(a){return this.iC(a,null)}, +fM(a,b){var s=$.G().Z() +s.h_(this.b.eU(a)) +return s}, +nN(a){return this.fM(a,null)}, +ns(a,b,c,d){a.dm(this.b.eU(b),c)}, +glE(){return!0}, +hd(a,b){var s,r +if(a instanceof A.mI){s=A.bJ(a.a,this.a,b) +r=A.qL(a.b,this.b,b) +r.toString +return new A.mI(r,s)}return this.OM(a,b)}, +he(a,b){var s,r +if(a instanceof A.mI){s=A.bJ(this.a,a.a,b) +r=A.qL(this.b,a.b,b) +r.toString +return new A.mI(r,s)}return this.ON(a,b)}, +agz(a,b,c,d,e,f){var s,r,q,p,o=this.a,n=o.c +if(n===B.b7)return +s=this.b +r=s.c +q=!r.k(0,B.P)||!s.d.k(0,B.P) +p=b.d +if(q){q=(p-b.b)/2 +r=r.abR(0,new A.bl(q,q)) +q=s.d.abR(0,new A.bl(q,q)) +s=o.a +A.be5(a,b,new A.dO(B.P,B.P,r,q),new A.bL(s,o.b,n,0),s,B.C,B.C,B.aV,f,B.C)}else a.e7(new A.i(b.a,p),new A.i(b.c,p),o.mx())}, +jt(a,b,c){return this.agz(a,b,0,0,null,c)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.mI&&b.a.k(0,s.a)&&b.b.k(0,s.b)}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.VA.prototype={ +sp5(a,b){if(b!=this.a){this.a=b +this.D()}}, +sfQ(a){if(a!==this.b){this.b=a +this.D()}}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.VA&&b.a==s.a&&b.b===s.b}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"#"+A.bU(this)}} +A.VB.prototype={ +iy(a){var s=A.fE(this.a,this.b,a) +s.toString +return t.U1.a(s)}} +A.akg.prototype={ +aO(a,b){var s,r,q=this,p=q.c.az(0,q.b.gm(0)),o=new A.A(0,0,0+b.a,0+b.b),n=q.w.az(0,q.x.gm(0)) +n.toString +s=A.azB(n,q.r) +if((s.gm(s)>>>24&255)>0){n=p.fM(o,q.f) +r=$.G().B() +r.sA(0,s) +r.sU(0,B.i) +a.a3(n,r)}n=q.e +r=n.a +p.agz(a,o,n.b,q.d.gm(0),r,q.f)}, +cF(a){var s=this +return s.b!==a.b||s.x!==a.x||s.d!==a.d||s.c!==a.c||!s.e.k(0,a.e)||s.f!==a.f}, +j(a){return"#"+A.bU(this)}} +A.U0.prototype={ +b5(){return new A.afY(null,null,B.p)}} +A.afY.prototype={ +bu(){var s,r=this,q=null +r.bN() +r.e=A.cW(q,B.U_,q,r.a.w?1:0,r) +s=A.cW(q,B.dH,q,q,r) +r.d=s +r.f=A.dP(B.aQ,s,new A.rh(B.aQ)) +s=r.a.c +r.r=new A.VB(s,s) +r.w=A.dP(B.z,r.e,q) +r.x=new A.fp(B.B,r.a.r)}, +t(){var s=this,r=s.d +r===$&&A.c() +r.t() +r=s.e +r===$&&A.c() +r.t() +r=s.f +r===$&&A.c() +r.t() +r=s.w +r===$&&A.c() +r.t() +s.arA()}, +bH(a){var s,r,q=this +q.c7(a) +s=a.c +if(!q.a.c.k(0,s)){q.r=new A.VB(s,q.a.c) +s=q.d +s===$&&A.c() +s.sm(0,0) +s.d5(0)}if(!q.a.r.k(0,a.r))q.x=new A.fp(B.B,q.a.r) +s=q.a.w +if(s!==a.w){r=q.e +if(s){r===$&&A.c() +r.d5(0)}else{r===$&&A.c() +r.ex(0)}}}, +ab(a){var s,r,q,p,o,n,m,l,k=this,j=k.f +j===$&&A.c() +s=k.a.d +r=k.e +r===$&&A.c() +r=A.b([j,s,r],t.Eo) +s=k.f +j=k.r +j===$&&A.c() +q=k.a +p=q.e +q=q.d +o=a.bh(t.I) +o.toString +n=k.a.f +m=k.x +m===$&&A.c() +l=k.w +l===$&&A.c() +return A.ew(null,new A.akg(s,j,p,q,o.w,n,m,l,new A.CT(r)),null,null,B.x)}} +A.apy.prototype={ +gaZJ(){var s=t.ve.a(this.c),r=s.gm(s) +if(r<=0.25)return-r*4 +else if(r<0.75)return(r-0.5)*4 +else return(1-r)*4*4}, +ab(a){return A.adO(null,this.e,null,A.pH(this.gaZJ(),0,0),!0)}} +A.Vo.prototype={ +b5(){return new A.Vp(null,null,B.p)}} +A.Vp.prototype={ +gHD(){this.a.toString +return!1}, +gpe(){var s=this.a.x +return s!=null}, +bu(){var s,r=this +r.bN() +r.d=A.cW(null,B.dH,null,null,r) +if(r.gpe()){r.f=r.B8() +r.d.sm(0,1)}else if(r.gHD())r.e=r.H1() +s=r.d +s.cH() +s=s.e8$ +s.b=!0 +s.a.push(r.gRf())}, +t(){var s=this.d +s===$&&A.c() +s.t() +this.arO()}, +Rg(){this.aK(new A.b2v())}, +bH(a){var s,r,q=this +q.c7(a) +s=q.a.x!=null +r=s!==(a.x!=null) +if(r)if(s){q.f=q.B8() +s=q.d +s===$&&A.c() +s.d5(0)}else{s=q.d +s===$&&A.c() +s.ex(0)}}, +H1(){var s,r,q,p,o=null,n=t.Y,m=this.d +m===$&&A.c() +s=this.a +r=s.e +r.toString +q=s.f +p=s.c +p=A.dI(r,s.r,B.cJ,o,q,p,o) +return A.dg(o,o,A.li(!1,p,new A.bz(m,new A.br(1,0,n),n.h("bz"))),!0,o,o,!1,!1,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o)}, +B8(){var s,r,q,p,o,n=null,m=this.d +m===$&&A.c() +s=new A.br(B.a3z,B.h,t.Ni).az(0,m.gm(0)) +r=this.a +q=r.x +q.toString +p=r.y +o=r.c +o=A.dI(q,r.z,B.cJ,n,p,o,n) +return A.dg(n,n,A.li(!1,A.bmL(o,!0,s),m),!0,n,n,!1,!1,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)}, +ab(a){var s,r=this,q=r.d +q===$&&A.c() +if(q.gcz(0)===B.Y){r.f=null +if(r.gHD())return r.e=r.H1() +else{r.e=null +return B.bb}}if(r.d.gcz(0)===B.af){r.e=null +if(r.gpe())return r.f=r.B8() +else{r.f=null +return B.bb}}if(r.e==null&&r.gpe())return r.B8() +if(r.f==null&&r.gHD())return r.H1() +if(r.gpe()){q=t.Y +s=r.d +return A.kL(B.bC,A.b([A.li(!1,r.e,new A.bz(s,new A.br(1,0,q),q.h("bz"))),r.B8()],t.p),B.a4,B.bB,null)}if(r.gHD()){q=r.H1() +s=r.d +return A.kL(B.bC,A.b([q,A.li(!1,r.f,s)],t.p),B.a4,B.bB,null)}return B.bb}} +A.b2v.prototype={ +$0(){}, +$S:0} +A.N6.prototype={ +W(){return"FloatingLabelBehavior."+this.b}} +A.a3Q.prototype={ +gL(a){return B.f.gL(-1)}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.a3Q}, +j(a){return A.bF0(-1)}} +A.iU.prototype={ +W(){return"_DecorationSlot."+this.b}} +A.ahB.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.ahB&&b.a.k(0,s.a)&&b.c===s.c&&b.d===s.d&&b.e.k(0,s.e)&&b.f.k(0,s.f)&&b.r.k(0,s.r)&&b.x==s.x&&b.y.k(0,s.y)&&J.f(b.z,s.z)&&J.f(b.Q,s.Q)&&J.f(b.as,s.as)&&J.f(b.at,s.at)&&J.f(b.ax,s.ax)&&J.f(b.ay,s.ay)&&J.f(b.ch,s.ch)&&J.f(b.CW,s.CW)&&b.cx.AU(0,s.cx)&&J.f(b.cy,s.cy)&&b.db.AU(0,s.db)}, +gL(a){var s=this +return A.a6(s.a,s.c,s.d,s.e,s.f,s.r,!1,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,s.ay,s.ch,s.CW,s.cx,s.cy,s.db)}} +A.b5e.prototype={} +A.Wz.prototype={ +gbQ(a){var s,r=A.b([],t.Ik),q=this.hz$ +if(q.i(0,B.aH)!=null){s=q.i(0,B.aH) +s.toString +r.push(s)}if(q.i(0,B.bc)!=null){s=q.i(0,B.bc) +s.toString +r.push(s)}if(q.i(0,B.ax)!=null){s=q.i(0,B.ax) +s.toString +r.push(s)}if(q.i(0,B.aS)!=null){s=q.i(0,B.aS) +s.toString +r.push(s)}if(q.i(0,B.aY)!=null){s=q.i(0,B.aY) +s.toString +r.push(s)}if(q.i(0,B.aZ)!=null){s=q.i(0,B.aZ) +s.toString +r.push(s)}if(q.i(0,B.aB)!=null){s=q.i(0,B.aB) +s.toString +r.push(s)}if(q.i(0,B.bd)!=null){s=q.i(0,B.bd) +s.toString +r.push(s)}if(q.i(0,B.be)!=null){s=q.i(0,B.be) +s.toString +r.push(s)}if(q.i(0,B.aU)!=null){s=q.i(0,B.aU) +s.toString +r.push(s)}if(q.i(0,B.dw)!=null){q=q.i(0,B.dw) +q.toString +r.push(q)}return r}, +sbJ(a){if(this.K.k(0,a))return +this.K=a +this.aB()}, +scV(a){if(this.a5===a)return +this.a5=a +this.aB()}, +sZl(a,b){if(this.M===b)return +this.M=b +this.aB()}, +saZe(a){return}, +sEj(a){if(this.ao===a)return +this.ao=a +this.cf()}, +sVv(a){return}, +gRl(){this.K.f.gEl() +return!1}, +jx(a){var s,r=this.hz$ +if(r.i(0,B.aH)!=null){s=r.i(0,B.aH) +s.toString +a.$1(s)}if(r.i(0,B.aY)!=null){s=r.i(0,B.aY) +s.toString +a.$1(s)}if(r.i(0,B.ax)!=null){s=r.i(0,B.ax) +s.toString +a.$1(s)}if(r.i(0,B.aB)!=null){s=r.i(0,B.aB) +s.toString +a.$1(s)}if(r.i(0,B.bd)!=null)if(this.ao){s=r.i(0,B.bd) +s.toString +a.$1(s)}else if(r.i(0,B.aB)==null){s=r.i(0,B.bd) +s.toString +a.$1(s)}if(r.i(0,B.bc)!=null){s=r.i(0,B.bc) +s.toString +a.$1(s)}if(r.i(0,B.aS)!=null){s=r.i(0,B.aS) +s.toString +a.$1(s)}if(r.i(0,B.aZ)!=null){s=r.i(0,B.aZ) +s.toString +a.$1(s)}if(r.i(0,B.dw)!=null){s=r.i(0,B.dw) +s.toString +a.$1(s)}if(r.i(0,B.be)!=null){s=r.i(0,B.be) +s.toString +a.$1(s)}if(r.i(0,B.aU)!=null){r=r.i(0,B.aU) +r.toString +a.$1(r)}}, +glN(){return!1}, +pf(a,b){var s +if(a==null)return 0 +a.dc(b,!0) +s=a.oS(B.E) +s.toString +return s}, +aC9(a,b,c,d){var s=d.a +if(s<=0){if(a>=b)return b +return a+(b-a)*(s+1)}if(b>=c)return b +return b+(c-b)*s}, +c1(a){var s,r,q,p,o,n,m,l=this,k=l.hz$,j=k.i(0,B.aH) +j=j==null?0:j.aY(B.a9,a,j.gc0()) +if(k.i(0,B.ax)!=null)s=0 +else{s=l.a5 +r=l.K.a +s=s===B.r?r.a:r.c}r=k.i(0,B.ax) +r=r==null?0:r.aY(B.a9,a,r.gc0()) +q=k.i(0,B.aY) +q=q==null?0:q.aY(B.a9,a,q.gc0()) +p=k.i(0,B.bc) +p=p==null?0:p.aY(B.a9,a,p.gc0()) +o=k.i(0,B.bd) +o=o==null?0:o.aY(B.a9,a,o.gc0()) +o=Math.max(p,o) +p=k.i(0,B.aZ) +p=p==null?0:p.aY(B.a9,a,p.gc0()) +n=k.i(0,B.aS) +n=n==null?0:n.aY(B.a9,a,n.gc0()) +if(k.i(0,B.aS)!=null)k=0 +else{k=l.a5 +m=l.K.a +k=k===B.r?m.c:m.a}return j+s+r+q+o+p+n+k}, +bZ(a){var s,r,q,p,o,n,m,l=this,k=l.hz$,j=k.i(0,B.aH) +j=j==null?0:j.aY(B.aa,a,j.gbY()) +if(k.i(0,B.ax)!=null)s=0 +else{s=l.a5 +r=l.K.a +s=s===B.r?r.a:r.c}r=k.i(0,B.ax) +r=r==null?0:r.aY(B.aa,a,r.gbY()) +q=k.i(0,B.aY) +q=q==null?0:q.aY(B.aa,a,q.gbY()) +p=k.i(0,B.bc) +p=p==null?0:p.aY(B.aa,a,p.gbY()) +o=k.i(0,B.bd) +o=o==null?0:o.aY(B.aa,a,o.gbY()) +o=Math.max(p,o) +p=k.i(0,B.aZ) +p=p==null?0:p.aY(B.aa,a,p.gbY()) +n=k.i(0,B.aS) +n=n==null?0:n.aY(B.aa,a,n.gbY()) +if(k.i(0,B.aS)!=null)k=0 +else{k=l.a5 +m=l.K.a +k=k===B.r?m.c:m.a}return j+s+r+q+o+p+n+k}, +aCu(a,b,c){var s,r,q,p,o +for(s=0,r=0;r<2;++r){q=c[r] +if(q==null)continue +p=q.gcd() +o=B.ay.ib(q.fx,b,p) +p=o +s=Math.max(p,s)}return s}, +c_(a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this,a=b.hz$,a0=a.i(0,B.aH),a1=a0==null?0:a0.aY(B.ay,a2,a0.gcd()) +a0=a.i(0,B.aH) +a2=Math.max(a2-(a0==null?0:a0.aY(B.a9,a1,a0.gc0())),0) +a0=a.i(0,B.ax) +s=a0==null?0:a0.aY(B.ay,a2,a0.gcd()) +a0=a.i(0,B.ax) +r=a0==null?0:a0.aY(B.a9,s,a0.gc0()) +a0=a.i(0,B.aS) +q=a0==null?0:a0.aY(B.ay,a2,a0.gcd()) +a0=a.i(0,B.aS) +p=a0==null?0:a0.aY(B.a9,q,a0.gc0()) +a2=Math.max(a2-b.K.a.ge_(),0) +a0=a.i(0,B.aU) +o=a0==null?0:a0.aY(B.ay,a2,a0.gcd()) +a0=a.i(0,B.aU) +n=Math.max(a2-(a0==null?0:a0.aY(B.a9,o,a0.gc0())),0) +a0=a.i(0,B.be) +m=a0==null?0:a0.aY(B.ay,n,a0.gcd()) +l=Math.max(o,m) +if(l>0)l+=8 +a0=a.i(0,B.aY) +k=a0==null?0:a0.aY(B.ay,a2,a0.gcd()) +a0=a.i(0,B.aY) +j=a0==null?0:a0.aY(B.a9,k,a0.gc0()) +a0=a.i(0,B.aZ) +i=a0==null?0:a0.aY(B.ay,a2,a0.gcd()) +a0=a.i(0,B.aZ) +h=a0==null?0:a0.aY(B.a9,i,a0.gc0()) +a0=t.n +g=B.b.oM(A.b([b.aCu(0,Math.max(a2-j-h-r-p,0),A.b([a.i(0,B.bc),a.i(0,B.bd)],t.iG)),k,i],a0),B.hc) +f=b.K.y +e=new A.i(f.a,f.b).a2(0,4) +f=b.K +a=a.i(0,B.aB)==null?0:b.K.c +d=B.b.oM(A.b([a1,f.a.b+a+g+b.K.a.d+e.b,s,q],a0),B.hc) +a=b.K.x +a.toString +c=a?0:48 +return Math.max(d,c)+l}, +c2(a){return this.aY(B.ay,a,this.gcd())}, +iO(a){var s,r=this.hz$.i(0,B.bc) +if(r==null)r=0 +else{s=r.b +s.toString +s=t.q.a(s).a +r=r.nL(a) +if(r==null)r=0 +r=s.b+r}return r}, +dA(a){return B.x}, +auF(a){var s,r,q,p,o,n,m=null,l=t.Bd,k=A.b([],l),j=new A.a0n(k,A.b([],t.X_)) +for(s=a.length,r=m,q=r,p=0;p0 +a2=!a1?0:o.i(0,B.be).gC(0).b+8 +a3=Math.max(a0,a2) +e8=e6.K.y +a4=new A.i(e8.a,e8.b).a2(0,4) +e8=o.i(0,B.bc) +n=o.i(0,B.bc) +k=e6.K.a +j=a4.b +i=j/2 +s.u(0,e8,e6.pf(n,p.UI(new A.aS(0,k.b+a+i,0,k.d+a3+i)).Uo(c,c))) +k=o.i(0,B.bd) +a5=k==null?e7:k.gC(0).b +if(a5==null)a5=0 +e8=o.i(0,B.bc) +a6=e8==null?e7:e8.gC(0).b +if(a6==null)a6=0 +a7=Math.max(a5,a6) +e8=s.i(0,o.i(0,B.bc)) +e8.toString +n=s.i(0,o.i(0,B.bd)) +n.toString +a8=Math.max(e8,n) +n=o.i(0,B.aY) +a9=n==null?e7:n.gC(0).b +if(a9==null)a9=0 +e8=o.i(0,B.aZ) +b0=e8==null?e7:e8.gC(0).b +if(b0==null)b0=0 +e8=s.i(0,o.i(0,B.aY)) +e8.toString +n=s.i(0,o.i(0,B.aZ)) +n.toString +b1=Math.max(0,Math.max(e8,n)-a8) +n=s.i(0,o.i(0,B.aY)) +n.toString +e8=s.i(0,o.i(0,B.aZ)) +e8.toString +b2=Math.max(0,Math.max(a9-n,b0-e8)-(a7-a8)) +e8=o.i(0,B.ax) +b3=e8==null?e7:e8.gC(0).b +if(b3==null)b3=0 +e8=o.i(0,B.aS) +b4=e8==null?e7:e8.gC(0).b +if(b4==null)b4=0 +b5=Math.max(b3,b4) +e8=e6.K +n=e8.a +b6=Math.max(b5,a+n.b+b1+a7+b2+n.d+j) +e8=e8.x +e8.toString +b7=e8?0:48 +b8=Math.max(0,q-a3) +b9=Math.min(Math.max(b6,b7),b8) +c0=b7>b6?(b7-b6)/2:0 +c1=Math.max(0,b6-b8) +e8=e6.av +e8=e6.gRl()?B.GM:B.GN +c2=(e8.a+1)/2 +c3=b1-c1*(1-c2) +e8=e6.K.a +c4=e8.b+a+a8+c3+c0+i +c5=b9-(e8.gcO(0)+e8.gcX(0))-a-j-(b1+a7+b2) +c6=c4+c5*c2 +j=e6.av +e8=e6.gRl()?B.GM:B.GN +c7=e6.aC9(c4,a8+c3/2+(b9-a7)/2,c4+c5,e8) +if(o.i(0,B.aU)!=null){e8=s.i(0,o.i(0,B.aU)) +e8.toString +c8=b9+8+e8 +c9=o.i(0,B.aU).gC(0).b+8}else{c8=0 +c9=0}if(a1){e8=s.i(0,o.i(0,B.be)) +e8.toString +d0=b9+8+e8 +d1=a2}else{d0=0 +d1=0}d2=Math.max(c8,d0) +d3=Math.max(c9,d1) +d4=o.i(0,B.dw) +if(d4!=null){e8=o.i(0,B.aH) +d4.dc(A.jx(b9,r-(e8==null?B.x:e8.gC(0)).a),!0) +switch(e6.a5.a){case 0:e8=0 +break +case 1:e8=o.i(0,B.aH) +e8=(e8==null?B.x:e8.gC(0)).a +break +default:e8=e7}q=d4.b +q.toString +t.q.a(q).a=new A.i(e8,0)}d5=A.bn("height") +d6=new A.b5i(d5) +d7=A.bn("baseline") +d8=new A.b5h(d7,new A.b5e(s,c6,c7,d2,b9,d3)) +e8=e6.K.a +d9=e8.a +e0=r-e8.c +d5.b=b9 +d7.b=e6.gRl()?c7:c6 +if(o.i(0,B.aH)!=null){switch(e6.a5.a){case 0:e8=r-o.i(0,B.aH).gC(0).a +break +case 1:e8=0 +break +default:e8=e7}q=o.i(0,B.aH) +q.toString +d6.$2(q,e8)}switch(e6.a5.a){case 0:e8=o.i(0,B.aH) +e1=e0-(e8==null?B.x:e8.gC(0)).a +if(o.i(0,B.ax)!=null){e1+=e6.K.a.c +e8=o.i(0,B.ax) +e8.toString +e1-=d6.$2(e8,e1-o.i(0,B.ax).gC(0).a)}if(o.i(0,B.aB)!=null){e8=o.i(0,B.aB) +e8.toString +d6.$2(e8,e1-o.i(0,B.aB).gC(0).a)}if(o.i(0,B.aY)!=null){e8=o.i(0,B.aY) +e8.toString +e1-=d8.$2(e8,e1-o.i(0,B.aY).gC(0).a)}if(o.i(0,B.bc)!=null){e8=o.i(0,B.bc) +e8.toString +d8.$2(e8,e1-o.i(0,B.bc).gC(0).a)}if(o.i(0,B.bd)!=null){e8=o.i(0,B.bd) +e8.toString +d8.$2(e8,e1-o.i(0,B.bd).gC(0).a)}if(o.i(0,B.aS)!=null){e2=d9-e6.K.a.a +e8=o.i(0,B.aS) +e8.toString +e2+=d6.$2(e8,e2)}else e2=d9 +if(o.i(0,B.aZ)!=null){e8=o.i(0,B.aZ) +e8.toString +d8.$2(e8,e2)}break +case 1:e8=o.i(0,B.aH) +e1=d9+(e8==null?B.x:e8.gC(0)).a +if(o.i(0,B.ax)!=null){e1-=e6.K.a.a +e8=o.i(0,B.ax) +e8.toString +e1+=d6.$2(e8,e1)}if(o.i(0,B.aB)!=null){e8=o.i(0,B.aB) +e8.toString +d6.$2(e8,e1)}if(o.i(0,B.aY)!=null){e8=o.i(0,B.aY) +e8.toString +e1+=d8.$2(e8,e1)}if(o.i(0,B.bc)!=null){e8=o.i(0,B.bc) +e8.toString +d8.$2(e8,e1)}if(o.i(0,B.bd)!=null){e8=o.i(0,B.bd) +e8.toString +d8.$2(e8,e1)}if(o.i(0,B.aS)!=null){e2=e0+e6.K.a.c +e8=o.i(0,B.aS) +e8.toString +e2-=d6.$2(e8,e2-o.i(0,B.aS).gC(0).a)}else e2=e0 +if(o.i(0,B.aZ)!=null){e8=o.i(0,B.aZ) +e8.toString +d8.$2(e8,e2-o.i(0,B.aZ).gC(0).a)}break}if(o.i(0,B.be)!=null||o.i(0,B.aU)!=null){d5.b=d3 +d7.b=d2 +switch(e6.a5.a){case 0:if(o.i(0,B.be)!=null){e8=o.i(0,B.be) +e8.toString +q=o.i(0,B.be).gC(0) +n=o.i(0,B.aH) +n=n==null?B.x:n.gC(0) +d8.$2(e8,e0-q.a-n.a)}if(o.i(0,B.aU)!=null){e8=o.i(0,B.aU) +e8.toString +d8.$2(e8,d9)}break +case 1:if(o.i(0,B.be)!=null){e8=o.i(0,B.be) +e8.toString +q=o.i(0,B.aH) +d8.$2(e8,d9+(q==null?B.x:q.gC(0)).a)}if(o.i(0,B.aU)!=null){e8=o.i(0,B.aU) +e8.toString +d8.$2(e8,e0-o.i(0,B.aU).gC(0).a)}break}}if(o.i(0,B.aB)!=null){e8=o.i(0,B.aB).b +e8.toString +e3=t.q.a(e8).a.a +e8=o.i(0,B.aB) +e4=(e8==null?B.x:e8.gC(0)).a*0.75 +switch(e6.a5.a){case 0:e8=o.i(0,B.ax) +if(e8!=null)if(e6.aS){e8=o.i(0,B.ax) +e5=(e8==null?B.x:e8.gC(0)).a-d9}else e5=0 +else e5=0 +e8=e6.K +q=o.i(0,B.aB) +q=q==null?B.x:q.gC(0) +n=d4==null?B.x:d4.gC(0) +e8.r.sp5(0,A.ap(e3+q.a+e5,n.a/2+e4/2,0)) +break +case 1:e8=o.i(0,B.ax) +if(e8!=null)if(e6.aS){e8=o.i(0,B.ax) +e5=-(e8==null?B.x:e8.gC(0)).a+d9}else e5=0 +else e5=0 +e8=e6.K +q=o.i(0,B.aH) +q=q==null?B.x:q.gC(0) +n=d4==null?B.x:d4.gC(0) +e8.r.sp5(0,A.ap(e3-q.a+e5,n.a/2-e4/2,0)) +break}e6.K.r.sfQ(o.i(0,B.aB).gC(0).a*0.75)}else{e6.K.r.sp5(0,e7) +e6.K.r.sfQ(0)}e6.id=e9.ca(new A.Q(r,b9+d3))}, +aEy(a,b){var s=this.hz$.i(0,B.aB) +s.toString +a.fb(s,b)}, +aO(a,b){var s,r,q,p,o,n,m,l,k,j,i=this,h=new A.b5g(a,b),g=i.hz$ +h.$1(g.i(0,B.dw)) +if(g.i(0,B.aB)!=null){s=g.i(0,B.aB).b +s.toString +r=t.q +q=r.a(s).a +s=g.i(0,B.aB) +if(s!=null)s.gC(0) +s=g.i(0,B.aB) +p=(s==null?B.x:s.gC(0)).a +s=i.K +o=s.d +s.f.gEl() +s=i.K +n=A.ap(1,0.75,o) +n.toString +m=g.i(0,B.dw).b +m.toString +m=r.a(m).a +r=g.i(0,B.dw) +r=r==null?B.x:r.gC(0) +switch(i.a5.a){case 0:l=q.a+p*(1-n) +g.i(0,B.ax) +k=l +break +case 1:l=q.a +g.i(0,B.ax) +k=l +break +default:l=null +k=null}r=A.ap(k,m.a+r.a/2-p*0.75/2,0) +r.toString +r=A.ap(l,r,o) +r.toString +m=q.b +s=A.ap(0,s.a.b-m,o) +s.toString +j=new A.by(new Float64Array(16)) +j.ci() +j.aJ(0,r,m+s) +j.au(0,n) +i.b2=j +n=i.cx +n===$&&A.c() +s=i.ch +s.sbr(0,a.wt(n,b,j,i.gaEx(),t.zV.a(s.a)))}else i.ch.sbr(0,null) +h.$1(g.i(0,B.aH)) +h.$1(g.i(0,B.aY)) +h.$1(g.i(0,B.aZ)) +h.$1(g.i(0,B.ax)) +h.$1(g.i(0,B.aS)) +h.$1(g.i(0,B.bd)) +h.$1(g.i(0,B.bc)) +h.$1(g.i(0,B.be)) +h.$1(g.i(0,B.aU))}, +mn(a){return!0}, +dZ(a,b){var s,r,q,p,o,n,m +for(s=this.gbQ(0),r=s.length,q=t.q,p=0;p>>16&255,s>>>8&255,s&255)}s=this.a.gdN() +r=s.RG +return r==null?s.k2:r}, +$S:4} +A.b3_.prototype={ +$1(a){var s,r,q=this +if(a.G(0,B.K)){s=q.a.gdN().k3.a +return new A.bL(A.S(97,s>>>16&255,s>>>8&255,s&255),1,B.J,-1)}if(a.G(0,B.cw)){if(a.G(0,B.V)){s=q.a.gdN() +r=s.k1 +return new A.bL(r==null?s.go:r,1,B.J,-1)}if(a.G(0,B.W))return new A.bL(q.a.gdN().fy,2,B.J,-1) +return new A.bL(q.a.gdN().fy,1,B.J,-1)}if(a.G(0,B.V))return new A.bL(q.a.gdN().k3,1,B.J,-1) +if(a.G(0,B.W))return new A.bL(q.a.gdN().b,2,B.J,-1) +s=q.a.gdN() +r=s.rx +return new A.bL(r==null?s.k3:r,1,B.J,-1)}, +$S:149} +A.b36.prototype={ +$1(a){var s,r,q=this +if(a.G(0,B.K)){s=q.a.gdN().k3.a +return new A.bL(A.S(31,s>>>16&255,s>>>8&255,s&255),1,B.J,-1)}if(a.G(0,B.cw)){if(a.G(0,B.V)){s=q.a.gdN() +r=s.k1 +return new A.bL(r==null?s.go:r,1,B.J,-1)}if(a.G(0,B.W))return new A.bL(q.a.gdN().fy,2,B.J,-1) +return new A.bL(q.a.gdN().fy,1,B.J,-1)}if(a.G(0,B.V))return new A.bL(q.a.gdN().k3,1,B.J,-1) +if(a.G(0,B.W))return new A.bL(q.a.gdN().b,2,B.J,-1) +s=q.a.gdN() +r=s.ry +if(r==null){r=s.ac +s=r==null?s.k3:r}else s=r +return new A.bL(s,1,B.J,-1)}, +$S:149} +A.b37.prototype={ +$1(a){var s=this.a.gdN(),r=s.rx +return r==null?s.k3:r}, +$S:4} +A.b38.prototype={ +$1(a){var s,r +if(a.G(0,B.K)){s=this.a.gdN().k3.a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}if(a.G(0,B.cw))return this.a.gdN().fy +s=this.a.gdN() +r=s.rx +return r==null?s.k3:r}, +$S:4} +A.b35.prototype={ +$1(a){var s,r=this.a,q=r.gHH().y +if(q==null)q=B.eW +if(a.G(0,B.K)){r=r.gdN().k3.a +return q.e2(A.S(97,r>>>16&255,r>>>8&255,r&255))}if(a.G(0,B.cw)){if(a.G(0,B.V)){r=r.gdN() +s=r.k1 +return q.e2(s==null?r.go:s)}if(a.G(0,B.W))return q.e2(r.gdN().fy) +return q.e2(r.gdN().fy)}if(a.G(0,B.V)){r=r.gdN() +s=r.rx +return q.e2(s==null?r.k3:s)}if(a.G(0,B.W))return q.e2(r.gdN().b) +r=r.gdN() +s=r.rx +return q.e2(s==null?r.k3:s)}, +$S:69} +A.b32.prototype={ +$1(a){var s,r=this.a,q=r.gHH().y +if(q==null)q=B.eW +if(a.G(0,B.K)){r=r.gdN().k3.a +return q.e2(A.S(97,r>>>16&255,r>>>8&255,r&255))}if(a.G(0,B.cw)){if(a.G(0,B.V)){r=r.gdN() +s=r.k1 +return q.e2(s==null?r.go:s)}if(a.G(0,B.W))return q.e2(r.gdN().fy) +return q.e2(r.gdN().fy)}if(a.G(0,B.V)){r=r.gdN() +s=r.rx +return q.e2(s==null?r.k3:s)}if(a.G(0,B.W))return q.e2(r.gdN().b) +r=r.gdN() +s=r.rx +return q.e2(s==null?r.k3:s)}, +$S:69} +A.b33.prototype={ +$1(a){var s,r=this.a,q=r.gHH().Q +if(q==null)q=B.eW +if(a.G(0,B.K)){r=r.gdN().k3.a +return q.e2(A.S(97,r>>>16&255,r>>>8&255,r&255))}r=r.gdN() +s=r.rx +return q.e2(s==null?r.k3:s)}, +$S:69} +A.b30.prototype={ +$1(a){var s=this.a,r=s.gHH().Q +if(r==null)r=B.eW +return r.e2(s.gdN().fy)}, +$S:69} +A.akh.prototype={} +A.Yx.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.YM.prototype={ +t(){var s=this,r=s.dQ$ +if(r!=null)r.ad(0,s.gmQ()) +s.dQ$=null +s.bG()}, +dd(){this.eD() +this.ee() +this.mR()}} +A.YO.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.atP.prototype={ +bc(a){var s,r,q +this.fg(a) +for(s=this.gbQ(0),r=s.length,q=0;q0){h=c/2 +e-=h +d+=h}b=a7.b2 +if(ef){f=b2+k.b+2*b +d=b2+b +e=b}b2=b}a=f-q.b +a0=f-p.b +a1=a7.bD +$label0$0:{if(B.xj===a1){b2=new A.bI(a/2,a0/2) +break $label0$0}a2=B.Xf===a1 +if(a2&&f>72){b2=B.a5e +break $label0$0}if(a2){b2=new A.bI(Math.min(a/2,16),a0/2) +break $label0$0}if(B.Xg===a1){b2=new A.bI(b2,b2) +break $label0$0}if(B.Xh===a1){b2=new A.bI(a/2,a0/2) +break $label0$0}if(B.Xi===a1){b2=new A.bI(a-b2,a0-b2) +break $label0$0}b2=a8}a3=b2.a +a4=b2.b +a5=a4 +a6=a3 +switch(a7.av.a){case 0:if(b1){b2=b0.i(0,B.cx).b +b2.toString +t.q.a(b2).a=new A.i(b5-q.a,a6)}b2=b0.i(0,B.cb).b +b2.toString +h=t.q +h.a(b2).a=new A.i(n,e) +if(b3){b2=b0.i(0,B.cc) +b2.toString +d.toString +b2=b2.b +b2.toString +h.a(b2).a=new A.i(n,d)}if(b4){b0=b0.i(0,B.d5).b +b0.toString +h.a(b0).a=new A.i(0,a5)}break +case 1:if(b1){b2=b0.i(0,B.cx).b +b2.toString +t.q.a(b2).a=new A.i(0,a6)}b2=b0.i(0,B.cb).b +b2.toString +h=t.q +h.a(b2).a=new A.i(o,e) +if(b3){b2=b0.i(0,B.cc) +b2.toString +d.toString +b2=b2.b +b2.toString +h.a(b2).a=new A.i(o,d)}if(b4){b0=b0.i(0,B.d5).b +b0.toString +h.a(b0).a=new A.i(b5-p.a,a5)}break}a7.id=a9.ca(new A.Q(b5,f))}, +aO(a,b){var s=new A.b5p(a,b),r=this.hz$ +s.$1(r.i(0,B.cx)) +s.$1(r.i(0,B.cb)) +s.$1(r.i(0,B.cc)) +s.$1(r.i(0,B.d5))}, +mn(a){return!0}, +dZ(a,b){var s,r,q,p,o,n +for(s=this.gbQ(0),r=s.length,q=t.q,p=0;p#"+A.bU(this)}} +A.ws.prototype={ +iy(a){return A.fE(this.a,this.b,a)}} +A.VN.prototype={ +b5(){return new A.ald(null,null,B.p)}} +A.ald.prototype={ +tS(a){var s,r,q=this +q.CW=t.ir.a(a.$3(q.CW,q.a.z,new A.b3M())) +s=q.a +r=t.YJ +s=r.a(a.$3(q.cy,s.as,new A.b3N())) +q.cy=s +s=q.a.at +q.cx=s!=null?r.a(a.$3(q.cx,s,new A.b3O())):null +q.db=t.TZ.a(a.$3(q.db,q.a.w,new A.b3P()))}, +ab(a){var s,r,q,p,o,n=this,m=null,l=n.db +l.toString +l=l.az(0,n.gij().gm(0)) +l.toString +s=n.CW +s.toString +r=s.az(0,n.gij().gm(0)) +A.am(a) +s=n.a.Q +q=n.cx +p=A.bmu(s,q==null?m:q.az(0,n.gij().gm(0)),r) +n.a.toString +s=n.cy +o=s==null?m:s.az(0,n.gij().gm(0)) +if(o==null)o=B.B +s=A.eP(a) +q=n.a +return new A.a8I(new A.wr(l,s,m),q.y,r,p,o,new A.Xl(q.r,l,!0,m),m)}} +A.b3M.prototype={ +$1(a){return new A.br(A.oZ(a),null,t.Y)}, +$S:31} +A.b3N.prototype={ +$1(a){return new A.fp(t.G.a(a),null)}, +$S:103} +A.b3O.prototype={ +$1(a){return new A.fp(t.G.a(a),null)}, +$S:103} +A.b3P.prototype={ +$1(a){return new A.ws(t.RY.a(a),null)}, +$S:523} +A.Xl.prototype={ +ab(a){var s=A.eP(a) +return A.ew(this.c,new A.apz(this.d,s,null),null,null,B.x)}} +A.apz.prototype={ +aO(a,b){this.b.jt(a,new A.A(0,0,0+b.a,0+b.b),this.c)}, +cF(a){return!a.b.k(0,this.b)}} +A.atB.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.ale.prototype={ +XA(a){return a.gzu(0)==="en"}, +d_(a,b){return new A.d9(B.Kg,t.az)}, +O9(a){return!1}, +j(a){return"DefaultMaterialLocalizations.delegate(en_US)"}} +A.a22.prototype={$iON:1} +A.a6H.prototype={ +aiJ(a,b){return new A.aKl(this,a,b)}, +aiI(a){return this.aiJ(a,null)}, +aM3(a){if(this.zb$.E(0,a))this.aK(new A.aKj())}, +MK(a){if(this.zb$.P(0,a))this.aK(new A.aKk())}} +A.aKl.prototype={ +$1(a){var s=this.a,r=this.b +if(s.zb$.G(0,r)===a)return +if(a)s.aM3(r) +else s.MK(r)}, +$S:7} +A.aKj.prototype={ +$0(){}, +$S:0} +A.aKk.prototype={ +$0(){}, +$S:0} +A.a6P.prototype={} +A.OS.prototype={ +gL(a){return J.a1(this.a)}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.OS&&J.f(b.a,this.a)}} +A.alj.prototype={} +A.a6R.prototype={ +gL(a){var s=this +return A.bM([s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as])}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.a6R)if(b.a==r.a)if(b.b==r.b)if(b.c==r.c)if(b.d==r.d)if(b.e==r.e)if(b.f==r.f)if(b.r==r.r)if(b.w==r.w)if(b.x===r.x)if(b.y==r.y)s=J.f(b.as,r.as) +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.akT.prototype={ +aG(a){var s,r=this,q=r.a,p=q==null?null:q.aG(a) +q=r.b +s=q==null?null:q.aG(a) +q=p==null +if(q&&s==null)return null +if(q){q=s.a +return A.bJ(new A.bL(A.S(0,q.gm(q)>>>16&255,q.gm(q)>>>8&255,q.gm(q)&255),0,B.J,-1),s,r.c)}if(s==null){q=p.a +return A.bJ(p,new A.bL(A.S(0,q.gm(q)>>>16&255,q.gm(q)>>>8&255,q.gm(q)&255),0,B.J,-1),r.c)}return A.bJ(p,s,r.c)}, +$icf:1} +A.alk.prototype={} +A.Ga.prototype={ +gL(a){return J.a1(this.a)}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.Ga&&J.f(b.a,this.a)}} +A.all.prototype={} +A.Pg.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.Pg)if(b.a==r.a)if(J.f(b.b,r.b))if(b.c==r.c)if(J.f(b.d,r.d))if(J.f(b.e,r.e))if(J.f(b.f,r.f))if(J.f(b.r,r.r))if(b.w==r.w)if(b.x==r.x)s=b.z==r.z +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.alW.prototype={} +A.Ph.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.Ph&&b.a==s.a&&J.f(b.b,s.b)&&b.c==s.c&&J.f(b.d,s.d)&&J.f(b.e,s.e)&&J.f(b.f,s.f)&&J.f(b.r,s.r)&&J.f(b.w,s.w)&&b.x==s.x&&b.y==s.y}} +A.alX.prototype={} +A.Pi.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.Pi&&J.f(b.a,s.a)&&b.b==s.b&&J.f(b.c,s.c)&&J.f(b.d,s.d)&&J.f(b.e,s.e)&&J.f(b.f,s.f)&&b.r==s.r&&J.f(b.y,s.y)&&J.f(b.z,s.z)&&b.Q==s.Q&&b.as==s.as}} +A.alY.prototype={} +A.Py.prototype={ +gL(a){return J.a1(this.a)}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.Py&&J.f(b.a,this.a)}} +A.amo.prototype={} +A.ku.prototype={ +gyT(){return A.hX.prototype.gyT.call(this)+"("+A.j(this.b.a)+")"}, +gEx(){return!0}} +A.a6G.prototype={ +gN4(a){return B.df}, +gyz(){return null}, +gJr(){return null}, +TX(a){return a instanceof A.ku}, +TS(a,b,c){var s=null +return A.dg(s,s,this.eB.$1(a),!1,s,s,!1,!0,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,!0,s,s,s,s,s,s)}, +TT(a,b,c,d){A.am(a) +return new A.JD(B.CO,this,b,c,d,null,this.$ti.h("JD<1>"))}} +A.VO.prototype={} +A.atb.prototype={ +ab(a){var s=this +return new A.EE(s.c,new A.b8t(s),new A.b8u(s),new A.EE(new A.oy(s.d,new A.bW(A.b([],t.x8),t.jc),0),new A.b8v(s),new A.b8w(s),s.f,null),null)}} +A.b8t.prototype={ +$3(a,b,c){return new A.xt(b,c,this.a.e,!1,null)}, +$C:"$3", +$R:3, +$S:201} +A.b8u.prototype={ +$3(a,b,c){return new A.xu(b,this.a.e,!0,c,null)}, +$C:"$3", +$R:3, +$S:235} +A.b8v.prototype={ +$3(a,b,c){return new A.xt(b,c,this.a.e,!0,null)}, +$C:"$3", +$R:3, +$S:201} +A.b8w.prototype={ +$3(a,b,c){return new A.xu(b,this.a.e,!1,c,null)}, +$C:"$3", +$R:3, +$S:235} +A.xt.prototype={ +b5(){return new A.at7(new A.S6($.aa()),$,$,B.p)}} +A.at7.prototype={ +gZP(){return!1}, +BO(){var s,r=this,q=r.a,p=q.f +if(p)s=B.he +else{s=$.byE() +s=new A.bz(q.c,s,s.$ti.h("bz"))}r.r8$=s +p=p?$.byF():$.byG() +q=q.c +r.tO$=new A.bz(q,p,p.$ti.h("bz")) +q.an(0,r.gzF()) +r.a.c.kK(r.gzE())}, +bu(){var s,r,q,p,o=this +o.BO() +s=o.a +r=s.f +q=o.r8$ +q===$&&A.c() +p=o.tO$ +p===$&&A.c() +o.d=A.bs5(s.c,q,r,p) +o.bN()}, +bH(a){var s,r,q,p=this,o=p.a +if(a.f!==o.f||a.c!==o.c){o=a.c +o.ad(0,p.gzF()) +o.ft(p.gzE()) +p.BO() +o=p.d +o===$&&A.c() +o.t() +o=p.a +s=o.f +r=p.r8$ +r===$&&A.c() +q=p.tO$ +q===$&&A.c() +p.d=A.bs5(o.c,r,s,q)}p.c7(a)}, +t(){var s,r=this +r.a.c.ad(0,r.gzF()) +r.a.c.ft(r.gzE()) +s=r.d +s===$&&A.c() +s.t() +r.asg()}, +ab(a){var s=this.d +s===$&&A.c() +return A.bpQ(!0,this.a.d,this.vV$,B.GC,s)}} +A.xu.prototype={ +b5(){return new A.ata(new A.S6($.aa()),$,$,B.p)}} +A.ata.prototype={ +gZP(){return!1}, +BO(){var s,r=this,q=r.a,p=q.e +if(p){s=$.byI() +s=new A.bz(q.c,s,s.$ti.h("bz"))}else s=B.he +r.r8$=s +p=p?$.byJ():$.byK() +q=q.c +r.tO$=new A.bz(q,p,p.$ti.h("bz")) +q.an(0,r.gzF()) +r.a.c.kK(r.gzE())}, +bu(){var s,r,q,p,o=this +o.BO() +s=o.a +r=s.e +q=o.r8$ +q===$&&A.c() +p=o.tO$ +p===$&&A.c() +o.d=A.bs6(s.c,q,r,p) +o.bN()}, +bH(a){var s,r,q,p=this,o=p.a +if(a.e!==o.e||a.c!==o.c){o=a.c +o.ad(0,p.gzF()) +o.ft(p.gzE()) +p.BO() +o=p.d +o===$&&A.c() +o.t() +o=p.a +s=o.e +r=p.r8$ +r===$&&A.c() +q=p.tO$ +q===$&&A.c() +p.d=A.bs6(o.c,r,s,q)}p.c7(a)}, +t(){var s,r=this +r.a.c.ad(0,r.gzF()) +r.a.c.ft(r.gzE()) +s=r.d +s===$&&A.c() +s.t() +r.ash()}, +ab(a){var s=this.d +s===$&&A.c() +return A.bpQ(!0,this.a.f,this.vV$,B.GC,s)}} +A.rV.prototype={} +A.af2.prototype={ +abA(a,b,c,d,e){return new A.atb(c,d,!0,e,!0,null)}} +A.a1J.prototype={ +abA(a,b,c,d,e,f){return A.bDc(a,b,c,d,e,f)}} +A.a8_.prototype={ +atD(a){var s=t.Tr +return A.ab(new A.W(B.a_6,new A.aMz(a),s),!0,s.h("aI.E"))}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +if(b instanceof A.a8_)return!0 +return!1}, +gL(a){return A.bM(this.atD(B.CO))}} +A.aMz.prototype={ +$1(a){return this.a.i(0,a)}, +$S:526} +A.JD.prototype={ +b5(){return new A.Wa(B.p,this.$ti.h("Wa<1>"))}} +A.Wa.prototype={ +ab(a){var s,r,q=this,p=A.am(a).w,o=q.a +if(o.d.a.cx.a){s=q.d +if(s==null)q.d=p +else p=s}else q.d=null +r=o.c.i(0,p) +if(r==null){$label0$0:{if(B.a6===p){o=B.mD +break $label0$0}if(B.ar===p||B.dn===p||B.dq===p||B.ct===p||B.dp===p){o=B.uJ +break $label0$0}o=null}r=o}o=q.a +return r.abA(o.d,a,o.e,o.f,o.r,q.$ti.c)}} +A.Ka.prototype={ +aVX(){var s,r=this,q=r.tO$ +q===$&&A.c() +s=q.a +if(J.f(q.b.az(0,s.gm(s)),1)){q=r.r8$ +q===$&&A.c() +if(!J.f(q.gm(q),0)){q=r.r8$ +q=J.f(q.gm(q),1)}else q=!0}else q=!1 +s=r.vV$ +if(q)s.sTA(!1) +else{r.gZP() +s.sTA(!1)}}, +aVW(a){var s +$label0$0:{if(B.Y===a||B.af===a){s=!1 +break $label0$0}if(B.bD===a||B.bE===a){this.gZP() +s=!1 +break $label0$0}s=null}this.vV$.sTA(s)}} +A.Yu.prototype={ +RQ(a){this.D()}, +awy(a,b,c){var s,r,q,p,o +if(!this.r){s=this.w +s=s.gcz(s)!==B.af}else s=!1 +if(s){s=this.w +s=$.byH().az(0,s.gm(s)) +s.toString +r=s}else r=0 +if(r>0){s=a.gcP(a) +q=b.a +p=b.b +o=$.G().B() +o.sA(0,A.S(B.c.ai(255*r),0,0,0)) +s.b7(new A.A(q,p,q+c.a,p+c.b),o)}}, +EV(a,b,c,d){var s,r,q=this,p=q.w +switch(p.gcz(p).a){case 3:case 0:return d.$2(a,b) +case 1:case 2:break}q.awy(a,b,c) +p=q.z +s=q.x +r=s.a +A.btc(p,s.b.az(0,r.gm(r)),c) +r=q.as +r.sbr(0,a.wt(!0,b,p,new A.b8r(q,d),r.a))}, +t(){var s=this,r=s.w,q=s.gfa() +r.ad(0,q) +r.ft(s.gBN()) +s.x.a.ad(0,q) +s.y.ad(0,q) +s.Q.sbr(0,null) +s.as.sbr(0,null) +s.fN()}, +cF(a){var s,r,q,p,o=this +if(a.r===o.r){s=a.w +r=o.w +if(J.f(s.gm(s),r.gm(r))){s=a.x +r=s.a +q=o.x +p=q.a +if(J.f(s.b.az(0,r.gm(r)),q.b.az(0,p.gm(p)))){s=a.y +r=o.y +r=!J.f(s.gm(s),r.gm(r)) +s=r}else s=!0}else s=!0}else s=!0 +return s}} +A.b8r.prototype={ +$2(a,b){var s=this.a,r=s.Q +s=s.y +r.sbr(0,a.ahc(b,B.c.ai(s.gm(s)*255),this.b,r.a))}, +$S:9} +A.Yv.prototype={ +RQ(a){this.D()}, +EV(a,b,c,d){var s,r,q=this,p=q.y +switch(p.gcz(p).a){case 3:case 0:return d.$2(a,b) +case 1:case 2:break}p=q.z +s=q.w +r=s.a +A.btc(p,s.b.az(0,r.gm(r)),c) +r=q.as +r.sbr(0,a.wt(!0,b,p,new A.b8s(q,d),r.a))}, +cF(a){var s,r,q,p +if(a.r===this.r){s=a.x +r=this.x +if(J.f(s.gm(s),r.gm(r))){s=a.w +r=s.a +q=this.w +p=q.a +p=!J.f(s.b.az(0,r.gm(r)),q.b.az(0,p.gm(p))) +s=p}else s=!0}else s=!0 +return s}, +t(){var s,r=this +r.Q.sbr(0,null) +r.as.sbr(0,null) +s=r.gfa() +r.w.a.ad(0,s) +r.x.ad(0,s) +r.y.ft(r.gBN()) +r.fN()}} +A.b8s.prototype={ +$2(a,b){var s=this.a,r=s.Q +s=s.x +r.sbr(0,a.ahc(b,B.c.ai(s.gm(s)*255),this.b,r.a))}, +$S:9} +A.amv.prototype={} +A.Z5.prototype={ +t(){var s=this.vV$ +s.ah$=$.aa() +s.ac$=0 +this.bG()}} +A.Z6.prototype={ +t(){var s=this.vV$ +s.ah$=$.aa() +s.ac$=0 +this.bG()}} +A.Q4.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.Q4&&J.f(b.a,s.a)&&J.f(b.b,s.b)&&b.c==s.c&&J.f(b.d,s.d)&&J.f(b.e,s.e)&&J.f(b.f,s.f)&&b.r==s.r&&J.f(b.z,s.z)&&b.Q==s.Q}} +A.ant.prototype={} +A.Q9.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.Q9&&J.f(b.a,s.a)&&J.f(b.b,s.b)&&b.c==s.c&&J.f(b.d,s.d)&&J.f(b.e,s.e)}} +A.anu.prototype={} +A.Qg.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.Qg)if(b.b==r.b)if(b.c==r.c)s=b.d==r.d +else s=!1 +else s=!1 +else s=!1 +return s}} +A.anD.prototype={} +A.lK.prototype={ +W(){return"_ScaffoldSlot."+this.b}} +A.Re.prototype={ +b5(){var s=null +return new A.Rf(A.vD(t.Np),A.mc(s,t.nY),A.mc(s,t.BL),s,s,B.p)}} +A.Rf.prototype={ +cR(){var s,r=this,q=r.c +q.toString +s=A.cj(q,B.tD,t.l).w.z +q=r.y +if(q===!0)if(!s){q=r.x +q=q!=null&&q.b==null}else q=!1 +else q=!1 +if(q)r.Xg(B.GB) +r.y=s +r.fP()}, +T6(){var s,r,q,p,o,n +for(s=this.d,r=A.cT(s,s.r,A.w(s).c),q=t.Np,p=r.$ti.c;r.H();){o=r.d +if(o==null)o=p.a(o) +n=o.c.tP(q) +if(n==null||!s.G(0,n)){o.aak() +o.aa1()}}}, +aCi(a){var s=a.c.tP(t.Np) +return s==null||!this.d.G(0,s)}, +alz(a){var s,r,q,p,o,n=this,m=n.w +if(m==null){m=A.cW("SnackBar",B.vW,null,null,n) +m.cH() +q=m.eg$ +q.b=!0 +q.a.push(n.gaB7()) +n.w=m}q=n.r +if(q.b===q.c)m.d5(0) +s=A.bn("controller") +m=n.w +m.toString +q=new A.qh() +p=a.a +q=p==null?q:p +s.b=new A.Rd(new A.BQ(a.c,a.d,a.e,a.f,a.r,a.w,a.x,a.y,a.z,a.Q,a.as,a.at,a.ax,a.ay,m,a.CW,a.cx,a.cy,q),new A.bH(new A.aM($.aK,t.dH),t.fO),new A.aR1(n,s),t.BL) +try{n.aK(new A.aR2(n,s)) +n.T6()}catch(o){r=A.b2(o) +throw o}return s.bl()}, +aB8(a){var s=this +switch(a.a){case 0:s.aK(new A.aQY(s)) +s.T6() +if(!s.r.gaA(0))s.w.d5(0) +break +case 3:s.aK(new A.aQZ(s)) +s.T6() +break +case 1:break +case 2:break}}, +ahH(a){var s,r=this,q=r.r +if(q.b===q.c)return +s=q.ga9(0).b +if((s.a.a&30)===0)s.fC(0,a) +q=r.x +if(q!=null)q.bq(0) +r.x=null +r.w.sm(0,0)}, +Xg(a){var s,r,q=this,p=q.r +if(p.b!==p.c){s=q.w.Q +s===$&&A.c() +s=s===B.Y}else s=!0 +if(s)return +r=p.ga9(0).b +p=q.y +p.toString +s=q.w +if(p){s.sm(0,0) +r.fC(0,a)}else s.ex(0).cu(new A.aR0(q,r,a),t.H) +p=q.x +if(p!=null)p.bq(0) +q.x=null}, +aTa(){return this.Xg(B.a8F)}, +ab(a){var s,r,q,p=this +p.y=A.cj(a,B.tD,t.l).w.z +s=p.r +if(!s.gaA(0)){r=A.aKQ(a,t.X) +if(r==null||r.grg())if(p.w.gcz(0)===B.af&&p.x==null){q=s.ga9(0).a +p.x=A.dn(q.ay,new A.aR_(p,q,a))}}return new A.X_(p,p.a.c,null)}, +t(){var s=this,r=s.w +if(r!=null)r.t() +r=s.x +if(r!=null)r.bq(0) +s.x=null +s.ar4()}} +A.aR1.prototype={ +$0(){this.a.aTa()}, +$S:0} +A.aR2.prototype={ +$0(){this.a.r.ho(0,this.b.bl())}, +$S:0} +A.aQY.prototype={ +$0(){this.a.r.ue()}, +$S:0} +A.aQZ.prototype={ +$0(){}, +$S:0} +A.aR0.prototype={ +$1(a){var s=this.b +if((s.a.a&30)===0)s.fC(0,this.c)}, +$S:22} +A.aR_.prototype={ +$0(){this.a.Xg(B.GB)}, +$S:0} +A.X_.prototype={ +el(a){return this.f!==a.f}} +A.aR3.prototype={} +A.aaX.prototype={ +aOG(a,b){var s=a==null?this.a:a +return new A.aaX(s,b==null?this.b:b)}} +A.ap3.prototype={ +aan(a,b,c){var s=this +s.b=c==null?s.b:c +s.c=s.c.aOG(a,b) +s.D()}, +aam(a){return this.aan(null,null,a)}, +aLs(a,b){return this.aan(a,b,null)}} +A.TY.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(!s.amM(0,b))return!1 +return b instanceof A.TY&&b.r===s.r&&b.e===s.e&&b.f===s.f}, +gL(a){var s=this +return A.a6(A.bb.prototype.gL.call(s,0),s.r,s.e,s.f,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.afU.prototype={ +ab(a){return this.c}} +A.b6c.prototype={ +Mm(a9){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=this,a5=A.bkQ(a9),a6=a9.a,a7=a5.Fx(a6),a8=a9.b +if(a4.b.i(0,B.tL)!=null){s=a4.ix(B.tL,a7).b +a4.l2(B.tL,B.h) +r=s}else{r=0 +s=0}if(a4.b.i(0,B.tO)!=null){q=0+a4.ix(B.tO,a7).b +p=Math.max(0,a8-q) +a4.l2(B.tO,new A.i(0,p))}else{q=0 +p=null}if(a4.b.i(0,B.tN)!=null){q+=a4.ix(B.tN,new A.bb(0,a7.b,0,Math.max(0,a8-q-r))).b +a4.l2(B.tN,new A.i(0,Math.max(0,a8-q)))}if(a4.b.i(0,B.mh)!=null){o=a4.ix(B.mh,a7) +a4.l2(B.mh,new A.i(0,s)) +if(!a4.ay)r+=o.b}else o=B.x +n=a4.f +m=Math.max(0,a8-Math.max(n.d,q)) +if(a4.b.i(0,B.md)!=null){l=Math.max(0,m-r) +k=a4.d +if(k)l=A.U(l+q,0,a5.d-r) +k=k?q:0 +a4.ix(B.md,new A.TY(k,s,o.b,0,a7.b,0,l)) +a4.l2(B.md,new A.i(0,r))}if(a4.b.i(0,B.mf)!=null){a4.ix(B.mf,new A.bb(0,a7.b,0,m)) +a4.l2(B.mf,B.h)}k=a4.b.i(0,B.ha)!=null&&!a4.at?a4.ix(B.ha,a7):B.x +if(a4.b.i(0,B.mg)!=null){j=a4.ix(B.mg,new A.bb(0,a7.b,0,Math.max(0,m-r))) +a4.l2(B.mg,new A.i((a6-j.a)/2,m-j.b))}else j=B.x +i=A.bn("floatingActionButtonRect") +if(a4.b.i(0,B.mi)!=null){h=a4.ix(B.mi,a5) +g=new A.aR3(h,j,m,s,n,a4.r,a9,k,a4.w) +f=a4.z.a_t(g) +e=a4.as.ak5(a4.y.a_t(g),f,a4.Q) +a4.l2(B.mi,e) +d=e.a +c=e.b +i.b=new A.A(d,c,d+h.a,c+h.b)}if(a4.b.i(0,B.ha)!=null){d=a4.ax +b=d!=null&&d") +k=t.x8 +j=t.jc +i=t.V +h=A.bra(new A.oy(new A.bz(p,new A.n2(new A.rh(B.wX)),l),new A.bW(A.b([],k),j),0),new A.bz(p,new A.n2(B.wX),l),p,0.5,i) +p=d.a.d +g=$.byw() +m.a(p) +f=$.byx() +e=A.bra(new A.bz(p,g,g.$ti.h("bz")),new A.oy(new A.bz(p,f,A.w(f).h("bz")),new A.bW(A.b([],k),j),0),p,0.5,i) +d.e=A.bkz(h,s,i) +i=A.bkz(h,q,i) +d.r=i +d.w=new A.bz(m.a(i),new A.n2(B.WB),l) +d.f=A.bh3(new A.bz(r,new A.br(1,1,b),b.h("bz")),e,c) +d.x=A.bh3(new A.bz(o,n,n.$ti.h("bz")),e,c) +n=d.r +o=d.gaE1() +n.cH() +n=n.e8$ +n.b=!0 +n.a.push(o) +n=d.e +n.cH() +n=n.e8$ +n.b=!0 +n.a.push(o)}, +aAC(a){this.aK(new A.b1O(this,a))}, +ab(a){var s,r,q=this,p=A.b([],t.p),o=q.d +o===$&&A.c() +o=o.Q +o===$&&A.c() +if(o!==B.Y){o=q.e +s=q.y +o===$&&A.c() +r=q.f +r===$&&A.c() +p.push(A.bpo(A.aQF(s,r),o))}o=q.a +s=q.r +o=o.c +s===$&&A.c() +r=q.x +r===$&&A.c() +p.push(A.bpo(A.aQF(o,r),s)) +return A.kL(B.b_,p,B.a4,B.bB,null)}, +aE2(){var s,r,q=this.e +q===$&&A.c() +s=q.a +s=s.gm(s) +q=q.b +q=q.gm(q) +q=Math.min(A.hg(s),A.hg(q)) +s=this.r +s===$&&A.c() +r=s.a +r=r.gm(r) +s=s.b +s=s.gm(s) +s=Math.max(q,Math.min(A.hg(r),A.hg(s))) +this.a.f.aam(s)}} +A.b1O.prototype={ +$0(){this.a.a.toString}, +$S:0} +A.Bs.prototype={ +b5(){var s=null,r=t.bR,q=t.re,p=$.aa() +return new A.Hm(new A.cK(s,r),new A.cK(s,r),new A.cK(s,q),new A.Bj(!1,p),new A.Bj(!1,p),A.b([],t.Z4),new A.cK(s,q),B.q,s,A.D(t.yb,t.Q),s,!0,s,s,s,B.p)}} +A.Hm.prototype={ +ghY(){this.a.toString +return null}, +l3(a,b){var s=this +s.q7(s.w,"drawer_open") +s.q7(s.x,"end_drawer_open")}, +aak(){var s=this,r=!s.y.r.gaA(0)?s.y.r.ga9(0):null +if(s.z!=r)s.aK(new A.aR5(s,r))}, +aa1(){var s=this,r=!s.y.e.gaA(0)?s.y.e.ga9(0):null +if(s.Q!=r)s.aK(new A.aR4(s,r))}, +aD_(){this.a.toString}, +aBi(){var s,r=this.c +r.toString +s=A.Q7(r) +if(s!=null&&s.f.length!==0)s.o9(0,B.SS,B.cU)}, +gxZ(){this.a.toString +return!0}, +bu(){var s,r=this,q=null +r.bN() +s=r.c +s.toString +r.dx=new A.ap3(s,B.a5J,$.aa()) +r.a.toString +r.cy=B.mK +r.CW=B.LA +r.cx=B.mK +r.ch=A.cW(q,new A.bv(4e5),q,1,r) +r.db=A.cW(q,B.ab,q,q,r)}, +bH(a){this.ar7(a) +this.a.toString}, +cR(){var s,r=this,q=r.c.bh(t.Pu),p=q==null?null:q.f,o=r.y,n=o==null +if(!n)s=p==null||o!==p +else s=!1 +if(s)if(!n)o.d.P(0,r) +r.y=p +if(p!=null){p.d.E(0,r) +if(p.aCi(r)){if(!p.r.gaA(0))r.aak() +if(!p.e.gaA(0))r.aa1()}}r.aD_() +r.ar6()}, +t(){var s=this,r=s.dx +r===$&&A.c() +r.ah$=$.aa() +r.ac$=0 +r=s.ch +r===$&&A.c() +r.t() +r=s.db +r===$&&A.c() +r.t() +r=s.y +if(r!=null)r.d.P(0,s) +s.w.t() +s.x.t() +s.ar8()}, +P1(a,b,c,d,e,f,g,h,i){var s,r=this.c +r.toString +s=A.cj(r,null,t.l).w.ahJ(f,g,h,i) +if(e)s=s.aYz(!0) +if(d&&s.f.d!==0)s=s.Ui(s.r.JP(s.w.d)) +if(b!=null)a.push(A.aJ6(A.Ak(b,s),c))}, +atq(a,b,c,d,e,f,g,h){return this.P1(a,b,c,!1,d,e,f,g,h)}, +GV(a,b,c,d,e,f,g){return this.P1(a,b,c,!1,!1,d,e,f,g)}, +a1T(a,b,c,d,e,f,g,h){return this.P1(a,b,c,d,!1,e,f,g,h)}, +a2r(a,b){this.a.toString}, +a2q(a,b){this.a.toString}, +ab(a){var s,r,q,p,o,n,m,l,k,j=this,i=null,h={},g=A.am(a),f=a.bh(t.I) +f.toString +s=f.w +r=A.b([],t.sa) +f=j.a.f +j.gxZ() +j.atq(r,new A.afU(new A.vw(f,j.f),!1,!1,i),B.md,!0,!1,!1,!1,!1) +if(j.dy)j.GV(r,A.bfR(!0,i,j.fr,!1,i,i,i),B.mf,!0,!0,!0,!0) +j.a.toString +h.a=!1 +h.b=null +if(j.at!=null||j.as.length!==0){f=A.ab(j.as,!0,t.l7) +q=j.at +if(q!=null)f.push(q.a) +p=A.kL(B.cN,f,B.a4,B.bB,i) +j.gxZ() +j.GV(r,p,B.mg,!0,!1,!1,!0)}f=j.z +if(f!=null){h.a=!1 +h.b=g.dh.w +f=f.a +j.a.toString +j.gxZ() +j.a1T(r,f,B.ha,!1,!1,!1,!1,!0)}h.c=!1 +if(j.Q!=null){a.bh(t.iB) +f=A.am(a) +q=j.Q +if(q!=null){q=q.a +q.gh1(q)}o=f.rx.f +h.c=(o==null?0:o)!==0 +f=j.Q +f=f==null?i:f.a +j.a.toString +j.gxZ() +j.a1T(r,f,B.mh,!1,!0,!1,!1,!1)}j.a.toString +f=j.ch +f===$&&A.c() +q=j.CW +q===$&&A.c() +n=j.dx +n===$&&A.c() +m=j.db +m===$&&A.c() +j.GV(r,new A.Vc(i,f,q,n,m,i),B.mi,!0,!0,!0,!0) +switch(g.w.a){case 2:case 4:j.GV(r,A.iH(B.b9,i,B.ai,!0,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,j.gaBh(),i,i,i,i,i,i),B.me,!0,!1,!1,!0) +break +case 0:case 1:case 3:case 5:break}f=j.x +q=f.y +if(q==null?A.w(f).h("dv.T").a(q):q){j.a2q(r,s) +j.a2r(r,s)}else{j.a2r(r,s) +j.a2q(r,s)}f=t.l +q=A.cj(a,B.cM,f).w +j.gxZ() +n=A.cj(a,B.mb,f).w +l=q.r.JP(n.f.d) +q=A.cj(a,B.ajr,f).w +j.gxZ() +f=A.cj(a,B.mb,f).w +f=f.f.d!==0?0:i +k=q.w.JP(f) +if(l.d<=0)j.a.toString +j.a.toString +return new A.ap4(!1,new A.Rr(A.me(B.ab,!0,i,A.mX(j.ch,new A.aR6(h,j,!1,l,k,s,r),i),B.y,g.go,0,i,i,i,i,i,B.dT),i),i)}} +A.aR5.prototype={ +$0(){this.a.z=this.b}, +$S:0} +A.aR4.prototype={ +$0(){this.a.Q=this.b}, +$S:0} +A.aR6.prototype={ +$2(a,b){var s,r,q,p,o,n,m,l=this,k=A.b3([B.tb,new A.ahW(a,new A.bW(A.b([],t.ot),t.wS))],t.B,t.od),j=l.b +j.a.toString +s=j.cy +s.toString +r=j.ch +r===$&&A.c() +r=r.x +r===$&&A.c() +q=j.CW +q===$&&A.c() +p=j.dx +p===$&&A.c() +j=j.cx +j.toString +o=l.a +n=o.a +m=o.c +return A.xJ(k,new A.yH(new A.b6c(l.c,!1,l.d,l.e,l.f,p,j,s,r,q,n,o.b,m),l.r,null))}, +$S:527} +A.ahW.prototype={ +ri(a,b){var s=this.e,r=A.aR7(s).w,q=r.y +if(!(q==null?A.w(r).h("dv.T").a(q):q)){s=A.aR7(s).x +r=s.y +s=r==null?A.w(s).h("dv.T").a(r):r}else s=!0 +return s}, +hP(a){var s=this.e +A.aR7(s).a.toString +A.aR7(s).a.toString}} +A.Rd.prototype={} +A.ap4.prototype={ +el(a){return this.f!==a.f}} +A.b6d.prototype={ +$2(a,b){if(!a.a)a.ad(0,b)}, +$S:48} +A.X0.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.X1.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.X2.prototype={ +bH(a){this.c7(a) +this.vz()}, +cR(){var s,r,q,p,o=this +o.fP() +s=o.cS$ +r=o.guh() +q=o.c +q.toString +q=A.wh(q) +o.jV$=q +p=o.tn(q,r) +if(r){o.l3(s,o.hM$) +o.hM$=!1}if(p)if(s!=null)s.t()}, +t(){var s,r=this +r.jU$.al(0,new A.b6d()) +s=r.cS$ +if(s!=null)s.t() +r.cS$=null +r.ar5()}} +A.YK.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.ab6.prototype={ +ab(a){var s=this,r=null +if(A.am(a).w===B.a6)return new A.Ei(8,B.eO,s.c,s.d,s.e===!0,B.a5a,3,r,B.vW,B.TY,B.b2,A.ava(),r,r,r) +return new A.Ju(s.c,s.d,s.e,r,r,r,B.df,B.hx,B.G,A.ava(),r,r,r)}} +A.Ju.prototype={ +b5(){return new A.alf(new A.cK(null,t.re),null,null,B.p)}} +A.alf.prototype={ +gwZ(){var s=this.a.e +if(s==null){s=this.fr +s===$&&A.c() +s=s.a +s=s==null?null:s.aG(this.gC1())}return s==null?!1:s}, +gvG(){this.a.toString +var s=this.fr +s===$&&A.c() +s=s.d +if(s==null){s=this.fx +s===$&&A.c() +s=!s}return s}, +gIO(){return new A.d1(new A.b3U(this),t.Dm)}, +gC1(){var s=A.C(t.EK) +if(this.db)s.E(0,B.lW) +if(this.dx)s.E(0,B.V) +return s}, +gaKa(){var s,r,q,p,o,n,m,l=this,k=l.dy +k===$&&A.c() +s=k.k3 +r=A.bn("dragColor") +q=A.bn("hoverColor") +p=A.bn("idleColor") +switch(k.a.a){case 1:k=s.a +o=k>>>16&255 +n=k>>>8&255 +k&=255 +r.b=A.S(153,o,n,k) +q.b=A.S(B.c.ai(127.5),o,n,k) +m=l.fx +m===$&&A.c() +if(m){k=l.c +k.toString +k=A.am(k).cy.a +k=A.S(255,k>>>16&255,k>>>8&255,k&255)}else k=A.S(B.c.ai(25.5),o,n,k) +p.b=k +break +case 0:k=s.a +o=k>>>16&255 +n=k>>>8&255 +k&=255 +r.b=A.S(191,o,n,k) +q.b=A.S(166,o,n,k) +m=l.fx +m===$&&A.c() +if(m){k=l.c +k.toString +k=A.am(k).cy.a +k=A.S(255,k>>>16&255,k>>>8&255,k&255)}else k=A.S(B.c.ai(76.5),o,n,k) +p.b=k +break}return new A.d1(new A.b3R(l,r,q,p),t.mN)}, +gaKv(){var s=this.dy +s===$&&A.c() +return new A.d1(new A.b3T(this,s.a,s.k3),t.mN)}, +gaKu(){var s=this.dy +s===$&&A.c() +return new A.d1(new A.b3S(this,s.a,s.k3),t.mN)}, +gaK7(){return new A.d1(new A.b3Q(this),t.N5)}, +bu(){var s,r=this +r.a1b() +s=r.cy=A.cW(null,B.ab,null,null,r) +s.cH() +s=s.e8$ +s.b=!0 +s.a.push(new A.b4_(r))}, +cR(){var s,r=this,q=r.c +q.toString +s=A.am(q) +r.dy=s.ax +q=r.c +q.bh(t.NF) +q=A.am(q) +r.fr=q.x +switch(s.w.a){case 0:r.fx=!0 +break +case 2:case 3:case 1:case 4:case 5:r.fx=!1 +break}r.aoz()}, +FK(){var s,r=this,q=r.at +q===$&&A.c() +q.sA(0,r.gaKa().a.$1(r.gC1())) +q.saiA(r.gaKv().a.$1(r.gC1())) +q.saiz(r.gaKu().a.$1(r.gC1())) +s=r.c.bh(t.I) +s.toString +q.scV(s.w) +q.sZn(r.gaK7().a.$1(r.gC1())) +s=r.a.r +if(s==null){s=r.fr +s===$&&A.c() +s=s.e}if(s==null){s=r.fx +s===$&&A.c() +s=s?null:B.e0}q.shV(s) +s=r.fr +s===$&&A.c() +s=s.x +if(s==null){s=r.fx +s===$&&A.c() +s=s?0:2}q.sUA(s) +s=r.fr.y +q.sXS(s==null?0:s) +s=r.fr.z +q.sXZ(0,s==null?48:s) +s=r.c +s.toString +q.seP(0,A.cj(s,B.cM,t.l).w.r) +q.sNQ(r.a.db) +q.saeS(!r.gvG())}, +L6(a){this.a1a(a) +this.aK(new A.b3Z(this))}, +L5(a,b){this.a19(a,b) +this.aK(new A.b3Y(this))}, +WT(a){var s,r=this +r.aoA(a) +if(r.afk(a.gbe(a),a.gdR(a),!0)){r.aK(new A.b3W(r)) +s=r.cy +s===$&&A.c() +s.d5(0)}else if(r.dx){r.aK(new A.b3X(r)) +s=r.cy +s===$&&A.c() +s.ex(0)}}, +WU(a){var s,r=this +r.aoB(a) +r.aK(new A.b3V(r)) +s=r.cy +s===$&&A.c() +s.ex(0)}, +t(){var s=this.cy +s===$&&A.c() +s.t() +this.a18()}} +A.b3U.prototype={ +$1(a){var s=this.a,r=s.a.Q +s=s.fr +s===$&&A.c() +s=s.c +s=s==null?null:s.aG(a) +return s==null?!1:s}, +$S:529} +A.b3R.prototype={ +$1(a){var s,r,q,p=this,o=null +if(a.G(0,B.lW)){s=p.a.fr +s===$&&A.c() +s=s.f +s=s==null?o:s.aG(a) +return s==null?p.b.bl():s}s=p.a +if(s.gIO().a.$1(a)){s=s.fr +s===$&&A.c() +s=s.f +s=s==null?o:s.aG(a) +return s==null?p.c.bl():s}r=s.fr +r===$&&A.c() +r=r.f +r=r==null?o:r.aG(a) +if(r==null)r=p.d.bl() +q=s.fr.f +q=q==null?o:q.aG(a) +if(q==null)q=p.c.bl() +s=s.cy +s===$&&A.c() +s=s.x +s===$&&A.c() +s=A.Z(r,q,s) +s.toString +return s}, +$S:4} +A.b3T.prototype={ +$1(a){var s=this.a +if(s.gwZ()&&s.gIO().a.$1(a)){s=s.fr +s===$&&A.c() +s=s.r +s=s==null?null:s.aG(a) +if(s==null){s=this.c.a +s=this.b===B.aW?A.S(8,s>>>16&255,s>>>8&255,s&255):A.S(13,s>>>16&255,s>>>8&255,s&255)}return s}return B.B}, +$S:4} +A.b3S.prototype={ +$1(a){var s=this.a +if(s.gwZ()&&s.gIO().a.$1(a)){s=s.fr +s===$&&A.c() +s=s.w +s=s==null?null:s.aG(a) +if(s==null){s=this.c.a +s=this.b===B.aW?A.S(B.c.ai(25.5),s>>>16&255,s>>>8&255,s&255):A.S(64,s>>>16&255,s>>>8&255,s&255)}return s}return B.B}, +$S:4} +A.b3Q.prototype={ +$1(a){var s,r +if(a.G(0,B.V)&&this.a.gIO().a.$1(a)){s=this.a +r=s.a.w +if(r==null){s=s.fr +s===$&&A.c() +s=s.b +s=s==null?null:s.aG(a)}else s=r +return s==null?12:s}s=this.a +r=s.a.w +if(r==null){r=s.fr +r===$&&A.c() +r=r.b +r=r==null?null:r.aG(a)}if(r==null){s=s.fx +s===$&&A.c() +r=8/(s?2:1) +s=r}else s=r +return s}, +$S:175} +A.b4_.prototype={ +$0(){this.a.FK()}, +$S:0} +A.b3Z.prototype={ +$0(){this.a.db=!0}, +$S:0} +A.b3Y.prototype={ +$0(){this.a.db=!1}, +$S:0} +A.b3W.prototype={ +$0(){this.a.dx=!0}, +$S:0} +A.b3X.prototype={ +$0(){this.a.dx=!1}, +$S:0} +A.b3V.prototype={ +$0(){this.a.dx=!1}, +$S:0} +A.Rw.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.Rw&&b.a==s.a&&b.b==s.b&&b.c==s.c&&b.d==s.d&&J.f(b.e,s.e)&&b.f==s.f&&b.r==s.r&&b.w==s.w&&b.x==s.x&&b.y==s.y&&b.z==s.z}} +A.aph.prototype={} +A.Rx.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.Rx)if(b.a==r.a)if(b.b==r.b)if(b.c==r.c)if(b.d==r.d)if(b.e==r.e)if(b.f==r.f)if(b.r==r.r)if(b.w==r.w)if(b.x==r.x)if(b.y==r.y)s=J.f(b.z,r.z) +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.akS.prototype={ +aG(a){var s,r=this,q=r.a,p=q==null?null:q.aG(a) +q=r.b +s=q==null?null:q.aG(a) +if(p==s)return p +if(p==null){q=s.a +return A.bJ(new A.bL(A.S(0,q.gm(q)>>>16&255,q.gm(q)>>>8&255,q.gm(q)&255),0,B.J,-1),s,r.c)}if(s==null){q=p.a +return A.bJ(p,new A.bL(A.S(0,q.gm(q)>>>16&255,q.gm(q)>>>8&255,q.gm(q)&255),0,B.J,-1),r.c)}return A.bJ(p,s,r.c)}, +$icf:1} +A.api.prototype={} +A.Ry.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.Ry&&J.f(b.a,s.a)&&b.b==s.b&&J.f(b.c,s.c)&&J.f(b.d,s.d)&&J.f(b.e,s.e)&&b.f==s.f&&J.f(b.r,s.r)&&J.f(b.w,s.w)&&J.f(b.x,s.x)&&J.f(b.y,s.y)}} +A.apj.prototype={} +A.Rz.prototype={ +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s +if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +if(b instanceof A.Rz)s=J.f(b.a,this.a) +else s=!1 +return s}} +A.apk.prototype={} +A.arm.prototype={ +abz(a,b,c){return A.cS(A.b([this.ax],t.Ne),null,null,b,null)}, +sd7(a,b){throw A.d(A.d_(null))}} +A.apn.prototype={ +ga86(){var s,r=this.a,q=r.gaL() +if($.b1.bf$.z.i(0,q)==null)s=null +else{r=r.gaL() +r=$.b1.bf$.z.i(0,r) +r.toString +s=A.kE(r)}if(s==null)r=0 +else{r=s.d.at +r.toString}return r}, +ga85(){var s,r=this.a,q=r.gaL() +if($.b1.bf$.z.i(0,q)==null)s=null +else{r=r.gaL() +r=$.b1.bf$.z.i(0,r) +r.toString +s=A.kE(r)}return s==null?null:s.a.c}, +zH(a){var s +this.a1q(a) +s=this.a +if(s.gi_()&&this.b){s=s.gaL().gap() +s.toString +s.lb()}}, +EN(a){}, +zJ(a){var s,r,q=this,p=q.a +if(!p.gi_())return +s=p.gaL().gap() +s.toString +s=s.gaD() +r=s.ha +r.toString +s.ql(B.by,r) +r=q.x.c +r.toString +A.beR(r) +p=p.gaL().gap() +p.toString +p=p.gaD().i8.at +p.toString +q.z=p +q.y=q.ga86()}, +Yr(a){var s,r,q,p,o,n,m=this,l=m.a +if(!l.gi_())return +s=l.gaL().gap() +s.toString +if(s.gaD().eH===1){s=l.gaL().gap() +s.toString +s=s.gaD().i8.at +s.toString +r=new A.i(s-m.z,0)}else{s=l.gaL().gap() +s.toString +s=s.gaD().i8.at +s.toString +r=new A.i(0,s-m.z)}q=m.ga86()-m.y +p=m.ga85()===B.ag||m.ga85()===B.a7 +s=!p?q:0 +o=p?q:0 +l=l.gaL().gap() +l.toString +n=a.a +l.gaD().Ar(B.by,n.Y(0,a.c).Y(0,r).Y(0,new A.i(s,o)),n)}, +Yt(a){var s=this.a,r=s.gaL().gap() +r.toString +r.kv() +if(s.gi_()){r=this.x.c +r.toString +switch(A.am(r).w.a){case 2:case 4:s=s.gaL().gap() +s.toString +s.gaD().a_T(B.aX) +break +case 0:case 1:case 3:case 5:s=s.gaL().gap() +s.toString +s=s.gaD() +r=s.ha +r.toString +s.j7(B.aX,r) +break}}this.x.a.toString}} +A.wn.prototype={ +b5(){return new A.Xf(new A.cK(null,t.NE),B.p)}} +A.Xf.prototype={ +gIo(){var s,r=null +this.a.toString +s=this.e +if(s==null){s=A.zg(!0,r,!0,!0,r,r,!0) +this.e=s}return s}, +gWQ(){var s=this.w +s===$&&A.c() +return s}, +gi_(){this.a.toString +return!0}, +bu(){var s,r=this +r.bN() +r.r=new A.apn(r,r) +s=r.a.d +s=A.brK(s) +r.d=s +s.an(0,r.ga6y())}, +bH(a){var s,r,q=this +q.c7(a) +s=q.a.d.k(0,a.d) +if(!s){s=q.d +s===$&&A.c() +r=q.ga6y() +s.ad(0,r) +s=q.d +s.ah$=$.aa() +s.ac$=0 +s=q.a.d +s=A.brK(s) +q.d=s +s.an(0,r)}if(q.gIo().gda()){s=q.d +s===$&&A.c() +s=s.a.b +s=s.a===s.b}else s=!1 +if(s)q.f=!1 +else q.f=!0}, +t(){var s=this.e +if(s!=null)s.t() +s=this.d +s===$&&A.c() +s.ah$=$.aa() +s.ac$=0 +this.bG()}, +aDD(){var s,r,q=this +if(q.gIo().gda()){s=q.d +s===$&&A.c() +s=s.a.b +r=s.a!==s.b}else r=!0 +if(r===q.f)return +q.aK(new A.b6n(q,r))}, +aHl(a,b){var s,r=this,q=r.aHo(b) +if(q!==r.f)r.aK(new A.b6m(r,q)) +s=r.a.k3 +if(s!=null)s.$2(a,b) +s=r.c +s.toString +switch(A.am(s).w.a){case 2:case 4:if(b===B.by){s=r.x.gap() +if(s!=null)s.m8(a.gqO())}return +case 0:case 1:case 3:case 5:break}}, +aHn(){var s=this.d +s===$&&A.c() +s=s.a.b +if(s.a===s.b)this.x.gap().Zx()}, +aHo(a){var s,r=this.r +r===$&&A.c() +if(!r.b)return!1 +r=this.d +r===$&&A.c() +r=r.a +s=r.b +if(s.a===s.b)return!1 +if(a===B.aK)return!1 +if(a===B.by)return!0 +if(r.a.length!==0)return!0 +return!1}, +ab(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=null,b=A.am(a0),a=a0.bh(t.Uf) +if(a==null)a=B.fc +s=d.gIo() +d.a.toString +switch(b.w.a){case 2:r=A.yG(a0) +d.w=!0 +q=$.bjU() +d.a.toString +p=a.w +if(p==null)p=r.giZ() +o=a.x +if(o==null){a=r.giZ() +o=A.S(102,a.gm(a)>>>16&255,a.gm(a)>>>8&255,a.gm(a)&255)}n=new A.i(-2/A.cj(a0,B.cy,t.l).w.b,0) +m=!0 +l=!0 +k=B.e_ +break +case 4:r=A.yG(a0) +d.w=!1 +q=$.bjT() +d.a.toString +p=a.w +if(p==null)p=r.giZ() +o=a.x +if(o==null){a=r.giZ() +o=A.S(102,a.gm(a)>>>16&255,a.gm(a)>>>8&255,a.gm(a)&255)}n=new A.i(-2/A.cj(a0,B.cy,t.l).w.b,0) +m=!0 +l=!0 +k=B.e_ +break +case 0:case 1:d.w=!1 +q=$.bk2() +p=a.w +if(p==null)p=b.ax.b +o=a.x +if(o==null){a=b.ax.b +o=A.S(102,a.gm(a)>>>16&255,a.gm(a)>>>8&255,a.gm(a)&255)}k=c +n=k +m=!1 +l=!1 +break +case 3:case 5:d.w=!1 +q=$.bdA() +p=a.w +if(p==null)p=b.ax.b +o=a.x +if(o==null){a=b.ax.b +o=A.S(102,a.gm(a)>>>16&255,a.gm(a)>>>8&255,a.gm(a)&255)}k=c +n=k +m=!1 +l=!1 +break +default:k=c +o=k +p=o +n=p +l=n +m=l +q=m}a=a0.bh(t.sp) +if(a==null)a=B.vQ +d.a.toString +j=d.d +j===$&&A.c() +i=a.w.bT(j.ax.a) +j=d.a +h=j.z +if(h==null){$label0$1:{break $label0$1}h=c}g=d.f +f=d.d +f===$&&A.c() +j=j.w +e=$.bjq() +a=A.bmq(!0,c,c,c,!1,B.ek,B.a4,c,A.bV3(),f,p,c,n,l,k,2,B.ai,!0,!0,!0,!1,s,!1,c,d.x,B.aW,c,e,a.Q,c,c,!1,"\u2022",c,c,c,d.gaHk(),d.gaHm(),c,c,m,!0,!0,c,!0,c,B.dJ,c,o,q,B.dA,B.cO,!1,g,c,c,c,B.a8Y,i,j,B.lj,c,a.at,c,h,a.as,c,c) +d.a.toString +j=d.r +j===$&&A.c() +return A.dg(c,c,j.abx(B.dg,new A.mx(a,c)),!1,c,c,!1,!1,c,c,c,c,c,c,c,c,c,c,c,c,c,c,new A.b6o(d),c,c,c,c,c,c,c,c,c,c)}, +gaL(){return this.x}} +A.b6n.prototype={ +$0(){this.a.f=this.b}, +$S:0} +A.b6m.prototype={ +$0(){this.a.f=this.b}, +$S:0} +A.b6o.prototype={ +$0(){this.a.gIo().lF()}, +$S:0} +A.b6R.prototype={ +W(){return"_SliderType."+this.b}} +A.abN.prototype={ +W(){return"SliderInteraction."+this.b}} +A.S3.prototype={ +b5(){return new A.Xo(new A.cK(null,t.re),new A.FI(),null,null,B.p)}} +A.Xo.prototype={ +gdJ(a){var s +this.a.toString +s=this.at +s.toString +return s}, +bu(){var s,r=this,q=null +r.bN() +r.d=A.cW(q,B.b2,q,q,r) +r.e=A.cW(q,B.b2,q,q,r) +r.f=A.cW(q,B.jB,q,q,r) +r.r=A.cW(q,B.G,q,q,r) +s=r.f +r.a.toString +s.sm(0,1) +r.r.sm(0,r.a3l(r.a.c)) +r.y=A.b3([B.ahi,new A.e1(r.gat9(),new A.bW(A.b([],t.ot),t.wS),t.f6)],t.B,t.od) +r.a.toString +if(r.at==null)r.at=A.zg(!0,q,!0,!0,q,q,!1)}, +t(){var s=this,r=s.w +if(r!=null)r.bq(0) +r=s.d +r===$&&A.c() +r.t() +r=s.e +r===$&&A.c() +r.t() +r=s.f +r===$&&A.c() +r.t() +r=s.r +r===$&&A.c() +r.t() +r=s.CW +if(r!=null)r.hW(0) +r=s.CW +if(r!=null)r.t() +s.CW=null +r=s.at +if(r!=null)r.t() +s.as9()}, +ayX(a){var s,r=this,q=r.aCt(a) +if(r.as!==q){r.as=q +s=r.a +if(q!==s.c)s.e.$1(q)}}, +SB(a){this.Q=!0 +this.a.toString}, +Sz(a){this.Q=!1 +this.as=null +this.a.toString}, +ata(a){var s,r=this.x,q=$.b1.bf$.z.i(0,r).bh(t.I) +q.toString +s=q.w +switch(a.a.a){case 2:q=!0 +break +case 3:q=!1 +break +case 1:q=s===B.ad +break +case 0:q=s===B.r +break +default:q=null}r=$.b1.bf$.z.i(0,r).gaF() +r.toString +t.Sq.a(r) +return q?r.aeU():r.acU()}, +aIa(a){if(a!==this.ax)this.aK(new A.b6O(this,a))}, +aIc(a){if(a!==this.ay)this.aK(new A.b6P(this,a))}, +aCt(a){var s=this.a,r=s.x +s=s.w +return a*(r-s)+s}, +a3l(a){var s=this.a,r=s.x,q=s.w,p=r>q?(a-q)/(r-q):0,o=s.y +s=B.c.ai(p*o) +return s/o}, +ab(a){this.a.toString +switch(0){case 0:return this.au3(a)}}, +au3(b8){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=this,b5=null,b6={},b7=A.am(b8) +b8.bh(t.Dj) +s=A.am(b8) +r=b6.a=s.f3 +q=new A.b6I(b8,4,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5) +p=q.gFN() +s=A.C(t.EK) +b4.a.toString +if(b4.ay)s.E(0,B.V) +if(b4.ax)s.E(0,B.W) +if(b4.Q)s.E(0,B.lW) +o=r.dx +if(o==null)o=p +if(o instanceof A.aPe){n=r.ay +if(n==null){m=b7.ax +l=m.k3.a +m=m.k2.a +n=A.azB(A.S(153,l>>>16&255,l>>>8&255,l&255),A.S(B.c.ai(229.5),m>>>16&255,m>>>8&255,m&255))}}else{b4.a.toString +n=r.ay +if(n==null)n=b7.ax.b}m=r.a +l=m==null?q.a:m +b4.a.toString +k=r.b +if(k==null)k=q.gCk() +b4.a.toString +j=b6.a.c +if(j==null)j=q.gEb() +b4.a.toString +i=b6.a.d +if(i==null)i=q.gAq() +h=b6.a.e +if(h==null)h=q.gDn() +g=b6.a.r +if(g==null)g=q.gDp() +f=b6.a.f +if(f==null)f=q.gDq() +b4.a.toString +e=b6.a.w +if(e==null)e=q.gCj() +b4.a.toString +d=b6.a.x +if(d==null)d=q.gEa() +c=b6.a.y +if(c==null)c=q.gDm() +b=b6.a.z +if(b==null)b=q.gDo() +b4.a.toString +a=b6.a.Q +if(a==null)a=q.gFw() +a0=b6.a.at +if(a0==null)a0=q.gDr() +a1=new A.b6M(b6,b4,s,q).$0() +a2=b6.a +a3=a2.db +if(a3==null)a3=B.L2 +a4=a2.cx +if(a4==null)a4=B.L1 +a5=a2.cy +if(a5==null)a5=B.L0 +a6=a2.CW +if(a6==null)a6=B.L_ +a7=a2.go +if(a7==null)a7=B.a6Y +a2=a2.id +if(a2==null)a2=q.gFO() +m=l==null?m:l +l=a1==null?r.ax:a1 +b6.a=A.bpO(e,k,r.k4,c,h,b,g,f,a0,d,j,r.k1,r.k3,r.as,l,a6,r.fr,r.dy,r.fx,r.fy,i,a7,a,r.k2,a5,a4,m,a3,n,o,r.ch,a2) +b4.a.toString +m=A.ei(b5,s,t.GE) +if(m==null)a8=b5 +else a8=m +if(a8==null)a8=B.h3.aG(s) +b4.a.toString +switch(b7.w.a){case 0:case 1:case 2:case 3:case 4:a9=b5 +break +case 5:a9=new A.b6L(b4) +break +default:a9=b5}switch(A.cj(b8,B.h6,t.l).w.ch.a){case 1:s=B.a15 +break +case 0:s=B.a11 +break +default:s=b5}m=b6.a.id +b0=m==null?b5:m.r +if(b0==null)b0=14 +b1=b0===0?14:b0 +m=A.e8(b8,B.d6) +m=m==null?b5:m.geS() +if(m==null)m=B.aq +l=m.a +b2=A.U(l,0,1.3) +b3=b2===l?m:new A.k2(b2) +m=b4.y +m===$&&A.c() +l=b4.gdJ(0) +k=b4.a3l(b4.a.c) +j=b4.a +i=j.y +j=j.z +h=b6.a +g=new A.b6N(b8).$0() +f=b4.a +e=f.x +f=f.w +f=e>f?b4.gayW():b5 +return A.dg(b5,b5,A.bf0(m,!1,new A.yv(b4.ch,new A.apT(k,b5,i,j,h,b1*b3.a/b1,g,f,b4.gSA(),b4.gSy(),b5,b4,b4.ax,b4.ay,B.a8y,b4.x),b5),!0,l,a8,b5,b4.gaI9(),b4.gaIb(),s),!0,b5,b5,!1,!1,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,a9,b5,b5,b5,b5,b5,b5,b5,b5,!0,b5,b5,b5,b5)}, +alA(){var s,r,q=this +if(q.CW==null){q.CW=A.vP(new A.b6Q(q),!1,!1) +s=q.c +s.toString +q.a.toString +s=A.bnS(s,t.N1) +s.toString +r=q.CW +r.toString +s.Lj(0,r)}}} +A.b6O.prototype={ +$0(){this.a.ax=this.b}, +$S:0} +A.b6P.prototype={ +$0(){this.a.ay=this.b}, +$S:0} +A.b6M.prototype={ +$0(){var s,r,q,p=this +p.b.a.toString +s=p.c +r=t.MH +q=A.ei(p.a.a.ax,s,r) +return q==null?A.ei(p.d.gfJ(),s,r):q}, +$S:536} +A.b6N.prototype={ +$0(){return A.cj(this.a,B.h5,t.l).w.a}, +$S:169} +A.b6L.prototype={ +$0(){var s,r=this.a +if(!r.gdJ(0).gda()){s=r.gdJ(0) +s=s.b&&B.b.h8(s.gfj(),A.iV())}else s=!1 +if(s)r.gdJ(0).lF()}, +$S:0} +A.b6Q.prototype={ +$1(a){var s=this.a +return A.beg(new A.ask(s,null),s.ch,B.h,!0)}, +$S:538} +A.apT.prototype={ +bA(a){var s,r=this,q=a.bh(t.I) +q.toString +s=A.am(a) +return A.bNx(r.CW,r.f,A.cj(a,B.ma,t.l).w.CW,r.ay,r.ch,r.r,r.as,r.Q,r.z,s.w,r.y,r.e,r.at,r.w,r.ax,q.w,r.x,r.d)}, +bI(a,b){var s,r,q=this +b.saQ7(q.f) +b.sm(0,q.d) +b.sakI(q.e) +b.sEn(0,q.r) +b.salI(q.w) +b.saZg(q.x) +b.sakD(q.y) +b.saVZ(q.z) +b.f3=q.Q +b.dh=q.as +s=a.bh(t.I) +s.toString +b.scV(s.w) +b.sakO(q.at) +b.saXE(0,A.am(a).w) +b.sda(q.ay) +b.saTk(q.ch) +s=A.cj(a,B.ma,t.l).w.CW +r=b.aM +r===$&&A.c() +r.b=s +r=b.aS +r===$&&A.c() +r.b=s +b.saMj(q.CW)}} +A.JO.prototype={ +at5(a,b,c,d,e,f,g,h,i,j,k,l,m,n,a0,a1,a2,a3){var s,r,q,p=this,o=null +p.ye() +s=new A.aFF(A.D(t.S,t.EG)) +r=A.aGG(o,o,o) +r.w=s +r.ch=p.gSA() +r.CW=p.gaI7() +r.cx=p.gSy() +r.cy=p.gawV() +r.b=c +p.aM=r +r=A.I5(o,o,o) +r.w=s +r.ac=p.gaId() +r.ah=p.gaIf() +r.b=c +p.aS=r +r=p.K +q=r.d +q===$&&A.c() +p.a5=A.dP(B.aQ,q,o) +q=r.e +q===$&&A.c() +q=A.dP(B.aQ,q,o) +q.a.kK(new A.b5y(p)) +p.M=q +r=r.f +r===$&&A.c() +p.av=A.dP(B.hq,r,o)}, +gRx(){var s=this.ga8t() +return new A.W(s,new A.b5w(),A.a5(s).h("W<1,T>")).oM(0,B.hc)}, +gRw(){var s=this.ga8t() +return new A.W(s,new A.b5v(),A.a5(s).h("W<1,T>")).oM(0,B.hc)}, +ga8t(){var s,r=this.aN +r.CW.toString +r.cy.toString +s=this.d4 +return A.b([new A.Q(48,48),new A.Q(20,20),r.cx.NE(s!=null,r)],t.X4)}, +gSR(){var s=this.aN +return s.db.akc(!1,this,s)}, +sm(a,b){var s,r,q=this,p=q.aa,o=p>0?q.xD(b):b +if(o===q.bD)return +q.bD=o +p=q.aa +s=q.K.r +if(p>0){s===$&&A.c() +p=s.x +p===$&&A.c() +r=Math.abs(o-p) +s.e=r!==0?new A.bv(B.c.ai(75e3*(1/r))):B.G +s.z=B.b6 +s.o_(o,B.hq,null)}else{s===$&&A.c() +s.sm(0,o)}q.cf()}, +sakI(a){if(a==this.dg)return +this.dg=a +this.cf()}, +saXE(a,b){if(this.R===b)return +this.R=b +this.cf()}, +sakO(a){return}, +saQ7(a){if(a===this.aa)return +this.aa=a +this.bi()}, +sEn(a,b){if(b===this.bp)return +this.bp=b +this.ye()}, +salI(a){if(a.k(0,this.aN))return +this.aN=a +this.ye()}, +saZg(a){if(a===this.cZ)return +this.cZ=a +this.ye()}, +sakD(a){if(a.k(0,this.cL))return +this.cL=a +this.bi()}, +saVZ(a){var s,r,q=this +if(J.f(a,q.d4))return +s=q.d4 +q.d4=a +r=a!=null +if(s!=null!==r){s=q.K.f +if(r){s===$&&A.c() +s.d5(0)}else{s===$&&A.c() +s.ex(0)}q.bi() +q.cf()}}, +scV(a){if(a===this.c9)return +this.c9=a +this.ye()}, +sda(a){var s,r,q=this +if(a===q.eh)return +q.eh=a +s=q.K +r=s.d +if(a){r===$&&A.c() +r.d5(0) +if(q.gAD()){s=s.e +s===$&&A.c() +s.d5(0)}}else{r===$&&A.c() +r.ex(0) +if(q.gAD()){s=s.e +s===$&&A.c() +s.ex(0)}}q.cf()}, +saTk(a){if(a===this.f4)return +this.f4=a +this.a9W(a)}, +saTl(a){var s=this +if(a===s.eH)return +s.eH=a +s.a9W(s.f4)}, +saMj(a){if(a===this.e9)return +this.e9=a +this.cf()}, +a9W(a){var s,r=this +if(a&&r.eH){s=r.K.d +s===$&&A.c() +s.d5(0)}else if(!r.b2&&!r.eh){s=r.K.d +s===$&&A.c() +s.ex(0)}}, +gAD(){switch(this.aN.go.a){case 0:var s=this.aa>0 +break +case 1:s=this.aa +s=s<=0 +break +case 2:s=!0 +break +case 3:s=!1 +break +default:s=null}return s}, +ye(){var s=this,r=s.ao +r.sd7(0,A.cS(null,null,null,s.aN.id,s.bp)) +r.scV(s.c9) +r.seS(new A.k2(s.cZ)) +r.pP() +s.aB()}, +B4(){this.OD() +this.ao.aB() +this.ye()}, +bc(a){var s,r,q=this +q.arY(a) +s=q.a5 +s===$&&A.c() +r=q.gfH() +s.a.an(0,r) +s=q.M +s===$&&A.c() +s.a.an(0,r) +s=q.av +s===$&&A.c() +s.a.an(0,r) +s=q.K.r +s===$&&A.c() +s.cH() +s=s.e8$ +s.b=!0 +s.a.push(r)}, +b3(a){var s,r=this,q=r.a5 +q===$&&A.c() +s=r.gfH() +q.a.ad(0,s) +q=r.M +q===$&&A.c() +q.a.ad(0,s) +q=r.av +q===$&&A.c() +q.a.ad(0,s) +q=r.K.r +q===$&&A.c() +q.ad(0,s) +r.arZ(0)}, +t(){var s=this,r=s.aM +r===$&&A.c() +r.p2.af(0) +r.nY() +r=s.aS +r===$&&A.c() +r.qJ() +r.nY() +s.ao.t() +s.ja()}, +ayu(a){var s +switch(this.c9.a){case 0:s=1-a +break +case 1:s=a +break +default:s=null}return s}, +xD(a){var s=A.U(a,0,1),r=this.aa +return r>0?B.c.ai(s*r)/r:s}, +a8E(a){var s,r,q,p=this,o=p.K +if(o.c==null)return +o.alA() +if(!p.b2&&p.d4!=null){switch(p.e9.a){case 0:case 1:p.b2=!0 +s=p.e5(a) +r=p.gSR() +q=p.gSR() +p.bB=p.ayu((s.a-r.a)/(q.c-q.a)) +break +case 3:s=p.ct +s.toString +if(s.G(0,p.e5(a))){p.b2=!0 +p.bB=p.bD}break +case 2:p.f3.$1(p.xD(p.bD)) +break}if(p.b2){p.f3.$1(p.xD(p.bD)) +s=p.d4 +s.toString +s.$1(p.xD(p.bB)) +s=o.d +s===$&&A.c() +s.d5(0) +if(p.gAD()){s=o.e +s===$&&A.c() +s.d5(0) +s=o.w +if(s!=null)s.bq(0) +o.w=A.dn(new A.bv(5e5),new A.b5x(p))}}}}, +Qf(){var s,r,q=this,p=q.K +if(p.c==null)return +s=q.b2 +if(s){q.dh.$1(q.xD(q.bB)) +s=q.b2=!1 +q.bB=0 +r=p.d +r===$&&A.c() +r.ex(0) +if(q.gAD()?p.w==null:s){p=p.e +p===$&&A.c() +p.ex(0)}}}, +SB(a){this.a8E(a.b)}, +aI8(a){var s,r,q,p=this +if(p.K.c==null)return +s=p.b2 +if(!s&&p.e9===B.a8z){s=p.b2=!0 +p.bB=p.bD}switch(p.e9.a){case 0:case 2:case 3:if(s&&p.d4!=null){s=a.c +s.toString +r=p.gSR() +q=s/(r.c-r.a) +r=p.bB +switch(p.c9.a){case 0:s=-q +break +case 1:s=q +break +default:s=null}s=r+s +p.bB=s +r=p.d4 +r.toString +r.$1(p.xD(s))}break +case 1:break}}, +Sz(a){this.Qf()}, +aIe(a){this.a8E(a.a)}, +aIg(a){this.Qf()}, +mn(a){return!0}, +ow(a,b){var s,r=this +if(r.K.c==null)return +if(t.pY.b(a)&&r.d4!=null){s=r.aM +s===$&&A.c() +s.Cp(a) +s=r.aS +s===$&&A.c() +s.Cp(a)}if(r.d4!=null&&r.ct!=null){s=r.ct +s.toString +r.saTl(s.G(0,a.geI()))}}, +c1(a){return 144+this.gRx()}, +bZ(a){return 144+this.gRx()}, +c_(a){var s=this.aN.a +s.toString +return Math.max(s,this.gRw())}, +c2(a){var s=this.aN.a +s.toString +return Math.max(s,this.gRw())}, +glN(){return!0}, +dA(a){var s,r=a.b +r=r<1/0?r:144+this.gRx() +s=a.d +if(!(s<1/0)){s=this.aN.a +s.toString +s=Math.max(s,this.gRw())}return new A.Q(r,s)}, +aO(a8,a9){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=this,a5=null,a6=a4.K,a7=a6.r +a7===$&&A.c() +a7=a7.x +a7===$&&A.c() +s=a4.c9 +$label0$0:{r=B.ad===s +if(r&&a4.dg==null){a7=new A.bI(1-a7,a5) +break $label0$0}if(r){q=a4.dg +q.toString +q=new A.bI(1-a7,1-q) +a7=q +break $label0$0}if(B.r===s){a7=new A.bI(a7,a4.dg) +break $label0$0}a7=a5}p=a7.a +o=a7.b +n=o +m=p +a7=a4.aN +q=a4.aa +l=a7.db.akd(q>0,a9,a4,a7) +a7=l.a +q=l.c-a7 +k=new A.i(a7+m*q,l.gbC().b) +if(a4.d4!=null){a4.aN.CW.toString +a4.ct=A.jT(k,24)}j=n!=null?new A.i(a7+n*q,l.gbC().b):a5 +i=a4.aN +h=i.db +h.toString +g=a4.av +g===$&&A.c() +f=a4.c9 +e=a4.aa +h.aX0(a8,a9,g,e>0,a4.d4!=null,a4,j,i,f,k) +i=a4.a5 +i===$&&A.c() +if(i.gcz(0)!==B.Y){i=a4.aN +i.CW.toString +h=a4.a5 +if(a4.cL.gaA(0))a4.gC(0) +d=a8.gcP(a8) +h=new A.br(0,24,t.Y).az(0,h.gm(0)) +g=$.G().B() +i=i.ax +i.toString +g.sA(0,i) +d.cs(k,h,g)}i=a4.aa +if(i>0){i=a4.aN +i=i.cx.NE(a4.d4!=null,i) +c=l.d-l.b +b=q-c +if(b/a4.aa>=3*i.a){a=l.gbC().b +for(q=c/2,a0=0;i=a4.aa,a0<=i;++a0){h=a4.aN +g=a4.av +f=a4.c9 +h.cx.aX2(a8,new A.i(a7+a0/i*b+q,a),g,a4.d4!=null,a4,h,f,k)}}}if(a4.d4!=null){a7=a4.M +a7===$&&A.c() +a7=a7.gcz(0)!==B.Y}else a7=!1 +if(a7)if(a4.gAD())a6.z=new A.b5z(a4,k) +a6=a4.aN +a6.cy.toString +a7=a4.a5 +q=a4.av +if(a4.cL.gaA(0))a4.gC(0) +d=a8.gcP(a8) +i=t.Y +a6=new A.fp(a6.at,a6.Q).az(0,q.gm(0)) +a6.toString +a1=new A.br(10,10,i).az(0,q.gm(0)) +a2=new A.br(1,6,i).az(0,a7.gm(0)) +a7=$.G() +a3=a7.Z() +i=2*a1 +a3.Tq(A.wc(k,i,i),0,6.283185307179586) +d.tF(a3,B.q,a2,!0) +a7=a7.B() +a7.sA(0,a6) +d.cs(k,a1,a7)}, +iR(a){var s,r=this +r.lf(a) +a.a=!1 +s=r.d4 +a.cE(B.rr,!0) +a.cE(B.ro,s!=null) +a.bn=r.c9 +a.e=!0 +if(r.d4!=null){a.sM0(r.gaTu()) +a.sLV(r.gaPz())}s=r.bD +a.ry=new A.eH(""+B.c.ai(s*100)+"%",B.b4) +a.e=!0 +a.to=new A.eH(""+B.c.ai(A.U(s+r.gIp(),0,1)*100)+"%",B.b4) +a.e=!0 +a.x1=new A.eH(""+B.c.ai(A.U(r.bD-r.gIp(),0,1)*100)+"%",B.b4) +a.e=!0}, +gIp(){var s=this.aa +return 1/s}, +aeU(){var s,r=this +if(r.d4!=null){r.f3.$1(A.U(r.bD,0,1)) +s=A.U(r.bD+r.gIp(),0,1) +r.d4.$1(s) +r.dh.$1(s)}}, +acU(){var s,r=this +if(r.d4!=null){r.f3.$1(A.U(r.bD,0,1)) +s=A.U(r.bD-r.gIp(),0,1) +r.d4.$1(s) +r.dh.$1(s)}}} +A.b5y.prototype={ +$1(a){var s,r +if(a===B.Y){s=this.a.K +r=s.CW +if(r!=null)r.hW(0) +r=s.CW +if(r!=null)r.t() +s.CW=null}}, +$S:5} +A.b5w.prototype={ +$1(a){return a.a}, +$S:170} +A.b5v.prototype={ +$1(a){return a.b}, +$S:170} +A.b5x.prototype={ +$0(){var s=this.a,r=s.K +r.w=null +if(!s.b2){s=r.e +s===$&&A.c() +s=s.Q +s===$&&A.c() +s=s===B.af}else s=!1 +if(s){s=r.e +s===$&&A.c() +s.ex(0)}}, +$S:0} +A.b5z.prototype={ +$2(a,b){var s,r,q,p,o,n,m,l,k,j,i=this.a +if(i.y!=null){s=i.aN.dx +s.toString +r=b.X(0,this.b) +q=i.M +q===$&&A.c() +p=i.av +p===$&&A.c() +o=i.aa +n=i.aN +m=i.c9 +l=i.bD +k=i.cZ +j=i.cL.gaA(0)?i.gC(0):i.cL +s.aX1(a,r,q,p,o>0,i.ao,i,j,n,m,k,l)}}, +$S:9} +A.oR.prototype={} +A.JU.prototype={ +W(){return"_SliderAdjustmentType."+this.b}} +A.ask.prototype={ +bA(a){var s,r=new A.aou(this.d,!1,new A.bs(),A.aX(t.v)) +r.by() +s=r.a5.e +s===$&&A.c() +r.K=A.dP(B.aQ,s,null) +return r}, +bI(a,b){b.a5=this.d}} +A.aou.prototype={ +glN(){return!0}, +bc(a){var s,r,q=this +q.as1(a) +s=q.K +s===$&&A.c() +r=q.gfH() +s.a.an(0,r) +s=q.a5.r +s===$&&A.c() +s.cH() +s=s.e8$ +s.b=!0 +s.a.push(r)}, +b3(a){var s,r=this,q=r.K +q===$&&A.c() +s=r.gfH() +q.a.ad(0,s) +q=r.a5.r +q===$&&A.c() +q.ad(0,s) +r.as2(0)}, +aO(a,b){var s=this.a5.z +if(s!=null)s.$2(a,b)}, +dA(a){return new A.Q(A.U(0,a.a,a.b),A.U(0,a.c,a.d))}} +A.b6I.prototype={ +gjJ(){var s,r=this,q=r.p1 +if(q===$){s=A.am(r.ok) +r.p1!==$&&A.N() +q=r.p1=s.ax}return q}, +gCk(){return this.gjJ().b}, +gEb(){var s=this.gjJ(),r=s.RG +return r==null?s.k2:r}, +gAq(){var s=this.gjJ().b +return A.S(138,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}, +gDn(){var s=this.gjJ().k3.a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}, +gDp(){var s=this.gjJ().k3.a +return A.S(31,s>>>16&255,s>>>8&255,s&255)}, +gDq(){var s=this.gjJ().k3.a +return A.S(31,s>>>16&255,s>>>8&255,s&255)}, +gCj(){var s=this.gjJ().c +return A.S(97,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}, +gEa(){var s=this.gjJ(),r=s.rx +s=(r==null?s.k3:r).a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}, +gDm(){var s=this.gjJ().k3.a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}, +gDo(){var s=this.gjJ().k3.a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}, +gFw(){return this.gjJ().b}, +gDr(){var s=this.gjJ().k3.a +return A.azB(A.S(97,s>>>16&255,s>>>8&255,s&255),this.gjJ().k2)}, +gfJ(){return A.Yk(new A.b6J(this))}, +gFO(){var s=A.am(this.ok).p2.at +s.toString +return s.e2(this.gjJ().c)}, +gFN(){return B.Kj}} +A.b6J.prototype={ +$1(a){var s +if(a.G(0,B.lW)){s=this.a.gjJ().b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=this.a.gjJ().b +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=this.a.gjJ().b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return B.B}, +$S:4} +A.YV.prototype={ +bc(a){this.fg(a) +$.jN.ea$.a.E(0,this.gtg())}, +b3(a){$.jN.ea$.a.P(0,this.gtg()) +this.fh(0)}} +A.YX.prototype={ +bc(a){this.fg(a) +$.jN.ea$.a.E(0,this.gtg())}, +b3(a){$.jN.ea$.a.P(0,this.gtg()) +this.fh(0)}} +A.Z0.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.aSJ.prototype={ +W(){return"ShowValueIndicator."+this.b}} +A.HL.prototype={ +gL(a){var s=this +return A.a6(s.a,s.gCk(),s.gEb(),s.gAq(),s.gDn(),s.gDp(),s.gDq(),s.gCj(),s.gEa(),s.gDm(),s.gDo(),s.gFw(),s.as,s.gDr(),s.gfJ(),s.ay,s.CW,s.cx,s.cy,A.a6(s.db,s.gFN(),s.dy,s.fr,s.fx,s.fy,s.go,s.gFO(),s.k1,s.k2,s.k3,s.k4,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a))}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.HL)if(b.a==r.a)if(J.f(b.gCk(),r.gCk()))if(J.f(b.gEb(),r.gEb()))if(J.f(b.gAq(),r.gAq()))if(J.f(b.gDn(),r.gDn()))if(J.f(b.gDp(),r.gDp()))if(J.f(b.gDq(),r.gDq()))if(J.f(b.gCj(),r.gCj()))if(J.f(b.gEa(),r.gEa()))if(J.f(b.gDm(),r.gDm()))if(J.f(b.gDo(),r.gDo()))if(J.f(b.gFw(),r.gFw()))if(J.f(b.as,r.as))if(J.f(b.gDr(),r.gDr()))if(J.f(b.gfJ(),r.gfJ()))if(J.f(b.ay,r.ay))if(J.f(b.ch,r.ch))if(b.CW==r.CW)if(b.cx==r.cx)if(b.cy==r.cy)if(b.db==r.db)if(b.gFN()==r.gFN())if(b.go==r.go)if(J.f(b.gFO(),r.gFO()))s=b.k1==r.k1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +gCk(){return this.b}, +gEb(){return this.c}, +gAq(){return this.d}, +gDn(){return this.e}, +gDq(){return this.f}, +gDp(){return this.r}, +gCj(){return this.w}, +gEa(){return this.x}, +gDm(){return this.y}, +gDo(){return this.z}, +gFw(){return this.Q}, +gDr(){return this.at}, +gfJ(){return this.ax}, +gFN(){return this.dx}, +gFO(){return this.id}} +A.aT3.prototype={} +A.aT4.prototype={} +A.aT5.prototype={} +A.ax8.prototype={ +ND(a,b,c,d,e){var s,r,q,p +e.cy.toString +e.CW.toString +s=e.a +s.toString +r=c.a+Math.max(24,10) +q=c.b+(d.gC(0).b-s)/2 +p=r+d.gC(0).a-Math.max(20,48) +return new A.A(Math.min(r,p),q,Math.max(r,p),q+s)}, +akc(a,b,c){return this.ND(a,!1,B.h,b,c)}, +akd(a,b,c,d){return this.ND(a,!1,b,c,d)}} +A.aQJ.prototype={ +aX0(a1,a2,a3,a4,a5,a6,a7,a8,a9,b0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=a8.a +if(a0==null||a0<=0)return +a0=$.G() +s=a0.B() +r=new A.fp(a8.e,a8.b).az(0,a3.gm(0)) +r.toString +s.sA(0,r) +q=a0.B() +r=new A.fp(a8.r,a8.c).az(0,a3.gm(0)) +r.toString +q.sA(0,r) +switch(a9.a){case 1:r=new A.bI(s,q) +break +case 0:r=new A.bI(q,s) +break +default:r=null}p=r.a +o=r.b +n=o +m=this.ND(a4,a5,a2,a6,a8) +r=m.d +l=m.b +k=r-l +j=k/2 +i=new A.bl(j,j) +k=(k+2)/2 +h=new A.bl(k,k) +k=a1.gcP(a1) +j=a9===B.r +g=j?l-1:l +f=b0.a +e=j?r+1:r +d=j?h:i +c=j?h:i +k.dm(A.GR(m.a,g,f,e,c,B.P,d,B.P),p) +d=a1.gcP(a1) +k=a9===B.ad +g=k?l-1:l +e=k?r+1:r +c=k?h:i +k=k?h:i +d.dm(A.GR(f,g,m.c,e,B.P,k,B.P,c),n) +if(a7!=null){k=a7.a +b=j?k>f:k0){r=new A.bI(f.z,f.x) +break $label0$0}q=B.ad===g +if(q&&k<0){r=new A.bI(f.z,f.x) +break $label0$0}if(!s)r=q +else r=!0 +if(r){r=new A.bI(f.y,f.w) +break $label0$0}r=null}p=r.a +o=r.b +n=o +m=$.G().B() +r=new A.fp(p,n).az(0,c.gm(0)) +r.toString +m.sA(0,r) +l=this.NE(d,f).a/2 +if(l>0)a.gcP(a).cs(b,l,m)}} +A.aQH.prototype={} +A.aQG.prototype={} +A.aPe.prototype={} +A.aCf.prototype={ +aX1(a,b,c,d,e,f,g,h,i,j,k,l){var s=a.gcP(a),r=c.gm(0),q=i.ay +q.toString +B.Lv.aX3(q,s,b,f,g,r,h,i.ch,k)}} +A.b12.prototype={ +ak_(a,b,c,d,e,f){var s=this.aap(b,d),r=s/2,q=A.dx(c.cW(0,null),a).a,p=Math.max(0,r-q+8),o=e.a,n=Math.max(0,r-(o-q-8)) +if(s0)return p-r +else return-n+r}}, +aap(a,b){return(Math.max(20,a.b.c)+8)*b}, +aX3(a,b,c,d,e,f,g,h,i){var s,r,q,p,o,n,m,l,k,j +if(f===0)return +s=this.aap(d,f) +r=this.ak_(c,d,e,f,g,i) +q=-s/2+r +p=new A.A(q,-34,q+s,-6) +q=$.G() +o=q.B() +o.sA(0,a) +b.bU(0) +b.aJ(0,c.a,c.b-16) +b.ff(0,f,f) +n=A.L1(4) +m=p.giF()/2 +l=A.qL(n,A.L0(new A.bl(m,m)),1).eU(p) +k=q.Z() +k.q(0,-10,-10) +k.q(0,10,-10) +k.T(0) +k.h_(l) +if(h!=null){j=q.B() +j.sA(0,h) +j.sbM(1) +j.sU(0,B.u) +b.a3(k,j)}b.a3(k,o) +b.aJ(0,0,-36) +q=d.b +n=q.c +q=q.a.c +d.aO(b,new A.i(r,16).Y(0,new A.i(n/2,q.gb9(q)/2))) +b.bw(0)}} +A.aoZ.prototype={} +A.apU.prototype={} +A.q4.prototype={ +W(){return"SnackBarClosedReason."+this.b}} +A.BQ.prototype={ +b5(){return new A.Xq(B.p)}} +A.Xq.prototype={ +bu(){this.bN() +var s=this.a.ch +s.cH() +s=s.eg$ +s.b=!0 +s.a.push(this.gRM())}, +bH(a){var s,r,q=this +q.c7(a) +s=a.ch +if(q.a.ch!=s){r=q.gRM() +s.ft(r) +s=q.a.ch +s.cH() +s=s.eg$ +s.b=!0 +s.a.push(r)}}, +t(){this.a.ch.ft(this.gRM()) +this.bG()}, +aDv(a){switch(a.a){case 0:case 1:case 2:break +case 3:this.a.toString +this.d=!0 +break}}, +ab(a9){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this,a2=null,a3=t.l,a4=A.cj(a9,B.tD,a3).w,a5=A.am(a9),a6=a5.dh,a7=new A.b6W(a9,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2),a8=a6.d +if(a8==null)a8=a7.goe() +a1.a.toString +s=a7.gCF() +a1.a.toString +r=a6.w +a7.gAA() +q=s===B.a8C +p=q?16:24 +o=a1.a +n=o.r +n=new A.kn(p,0,p,0) +o=o.ch +o.toString +m=A.dP(B.aQ,o,a2) +o=a1.a.ch +o.toString +A.dP(B.Ww,o,a2) +o=a1.a.ch +o.toString +l=A.dP(B.Wy,o,a2) +o=a1.a.ch +o.toString +A.dP(B.WH,o,B.lq) +o=a1.a.ch +o.toString +k=A.dP(B.ST,o,B.lq) +a1.a.toString +j=A.qd(a2,a2,1,a2,A.cS(a2,a2,a2,A.am(a9).p2.as,""),B.aA,B.r,a2,B.aq,B.aM) +j.pP() +o=j.b +i=o.c +o=o.a.c +o.gb9(o) +a1.a.toString +j.t() +a1.a.toString +h=a6.x +if(h==null)h=a7.gEg() +a1.a.toString +g=A.cj(a9,B.h5,a3).w.a.a-(h.a+h.c) +a1.a.toString +f=a6.Q +if(f==null)f=a7.gCh() +e=(i+0+0)/g>f +a3=t.p +o=A.b([],a3) +i=a1.a +i=A.b([A.m1(A.dD(a2,A.r2(i.c,a2,a2,B.cI,!0,a8,a2,a2,B.aM),B.y,a2,a2,a2,a2,a2,B.Uj,a2),1)],a3) +if(!e)B.b.I(i,o) +if(e)i.push(A.fF(a2,a2,g*0.4)) +a3=A.b([A.jU(i,B.ah,B.ac,B.ak,a2)],a3) +if(e)a3.push(new A.cu(B.Ub,A.jU(o,B.ah,B.kv,B.ak,a2),a2)) +d=new A.cu(n,A.IH(B.ap,a3,B.iN),a2) +if(!q)d=A.aaU(!0,d,B.X,!1) +a1.a.toString +c=a6.e +if(c==null)c=a7.gh1(0) +a1.a.toString +b=a6.a +if(b==null)b=a7.gdH(0) +a1.a.toString +a=a6.f +if(a==null)a=q?a7.gcw(0):a2 +a3=a1.a +o=a3.cy +d=A.me(B.ab,!0,a2,new A.wJ(a5,d,a2),o,b,c,a2,a2,a,a2,a2,B.dT) +if(q)d=A.aaU(!1,r!=null?A.dD(a2,d,B.y,a2,a2,a2,a2,new A.aS(0,h.b,0,h.d),a2,r):new A.cu(h,d,a2),B.X,!1) +d=A.dg(a2,a2,new A.Ml(d,new A.b6S(a9),B.vT,a2,B.b9,B.ai4),!0,a2,a2,!1,!1,a2,a2,a2,a2,a2,!0,a2,a2,a2,a2,a2,a2,a2,new A.b6T(a9),a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2) +if(a4.z)a0=d +else a0=q?A.li(!1,A.mX(k,new A.b6U(k),d),l):A.mX(m,new A.b6V(m),d) +a3=a3.c.j(0) +return A.bmY(A.LD(a0,a1.a.cy,a2),"",!0)}} +A.b6T.prototype={ +$0(){var s=this.a.bh(t.Pu) +s.toString +s.f.ahH(B.a8D)}, +$S:0} +A.b6S.prototype={ +$1(a){var s=this.a.bh(t.Pu) +s.toString +s.f.ahH(B.a8E)}, +$S:540} +A.b6U.prototype={ +$2(a,b){return new A.ke(B.Ig,null,this.a.gm(0),b,null)}, +$S:171} +A.b6V.prototype={ +$2(a,b){return new A.ke(B.bC,null,this.a.gm(0),b,null)}, +$S:171} +A.b6W.prototype={ +gqH(){var s,r=this,q=r.CW +if(q===$){q=r.ch +if(q===$){s=A.am(r.ay) +r.ch!==$&&A.N() +r.ch=s +q=s}r.CW!==$&&A.N() +q=r.CW=q.ax}return q}, +gdH(a){var s=this.gqH(),r=s.xr +return r==null?s.k3:r}, +gJ2(){return A.Yk(new A.b6X(this))}, +gKl(){var s=this.gqH(),r=s.y2 +return r==null?s.c:r}, +goe(){var s,r,q=A.am(this.ay).p2.z +q.toString +s=this.gqH() +r=s.y1 +return q.e2(r==null?s.k2:r)}, +gh1(a){return 6}, +gcw(a){return B.Fn}, +gCF(){return B.a8B}, +gEg(){return B.Uw}, +gAA(){return!1}, +gJF(){var s=this.gqH(),r=s.y1 +return r==null?s.k2:r}, +gCh(){return 0.25}} +A.b6X.prototype={ +$1(a){var s,r,q=this +if(a.G(0,B.K)){s=q.a.gqH() +r=s.y2 +return r==null?s.c:r}if(a.G(0,B.ae)){s=q.a.gqH() +r=s.y2 +return r==null?s.c:r}if(a.G(0,B.V)){s=q.a.gqH() +r=s.y2 +return r==null?s.c:r}if(a.G(0,B.W)){s=q.a.gqH() +r=s.y2 +return r==null?s.c:r}s=q.a.gqH() +r=s.y2 +return r==null?s.c:r}, +$S:4} +A.abT.prototype={ +W(){return"SnackBarBehavior."+this.b}} +A.HP.prototype={ +gL(a){var s=this +return A.a6(s.gdH(s),s.gJ2(),s.gKl(),s.goe(),s.gh1(s),s.gcw(s),s.gCF(),s.w,s.gEg(),s.gAA(),s.gJF(),s.gCh(),s.as,s.at,s.ax,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.HP)if(J.f(b.gdH(b),r.gdH(r)))if(J.f(b.gJ2(),r.gJ2()))if(J.f(b.gKl(),r.gKl()))if(J.f(b.goe(),r.goe()))if(b.gh1(b)==r.gh1(r))if(J.f(b.gcw(b),r.gcw(r)))if(b.gCF()==r.gCF())if(b.w==r.w)if(J.f(b.gEg(),r.gEg()))if(b.gAA()==r.gAA())if(J.f(b.gJF(),r.gJF()))if(b.gCh()==r.gCh())if(J.f(b.as,r.as))s=J.f(b.at,r.at) +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +gdH(a){return this.a}, +gJ2(){return this.b}, +gKl(){return this.c}, +goe(){return this.d}, +gh1(a){return this.e}, +gcw(a){return this.f}, +gCF(){return this.r}, +gEg(){return this.x}, +gAA(){return null}, +gJF(){return this.z}, +gCh(){return this.Q}} +A.aq_.prototype={} +A.St.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.St)if(b.a==r.a)if(b.b==r.b)if(b.c==r.c)if(b.d==r.d)if(b.r==r.r)s=b.w==r.w +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.aqI.prototype={} +A.Sv.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.Sv)if(J.f(b.a,r.a))if(J.f(b.b,r.b))if(J.f(b.d,r.d))if(J.f(b.f,r.f))if(J.f(b.r,r.r))if(J.f(b.w,r.w))if(J.f(b.x,r.x))if(J.f(b.y,r.y))s=b.z==r.z +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.aqO.prototype={} +A.C3.prototype={ +UH(a){var s=null +A.am(a) +A.am(a) +return new A.ar6(a,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,B.ab,!0,B.a5,s,s,s)}, +Zm(a){var s=a.bh(t.if),r=s==null?null:s.w +return(r==null?A.am(a).f4:r).a}} +A.XL.prototype={ +aG(a){if(a.G(0,B.K))return this.b +return this.a}, +j(a){return"{disabled: "+A.j(this.b)+", otherwise: "+A.j(this.a)+"}"}} +A.ar5.prototype={ +aG(a){var s +if(a.G(0,B.ae)){s=this.a +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=this.a +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=this.a +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return null}, +j(a){var s=this.a +return"{hovered: "+A.S(10,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255).j(0)+", focused,pressed: "+A.S(31,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255).j(0)+", otherwise: null}"}} +A.ar4.prototype={ +aG(a){if(a.G(0,B.K))return this.b +return this.a}} +A.ar6.prototype={ +gC6(){var s,r=this,q=r.fy +if(q===$){s=A.am(r.fx) +r.fy!==$&&A.N() +q=r.fy=s.ax}return q}, +gnH(){return new A.d0(A.am(this.fx).p2.as,t.RP)}, +gdH(a){return B.cv}, +gjl(){return new A.d1(new A.b7m(this),t.VZ)}, +gfJ(){return new A.d1(new A.b7o(this),t.VZ)}, +gdG(a){return B.cv}, +ged(){return B.cv}, +gh1(a){return B.iH}, +geP(a){return new A.d0(A.bQi(this.fx),t.mD)}, +gno(){return B.HG}, +gnm(){return B.h_}, +gcw(a){return B.fZ}, +gnp(){return new A.d1(new A.b7n(),t.B_)}, +giA(){return A.am(this.fx).Q}, +gnF(){return A.am(this.fx).f}, +gmH(){return A.am(this.fx).y}} +A.b7m.prototype={ +$1(a){var s +if(a.G(0,B.K)){s=this.a.gC6().k3.a +return A.S(97,s>>>16&255,s>>>8&255,s&255)}return this.a.gC6().b}, +$S:4} +A.b7o.prototype={ +$1(a){var s +if(a.G(0,B.ae)){s=this.a.gC6().b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.V)){s=this.a.gC6().b +return A.S(20,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}if(a.G(0,B.W)){s=this.a.gC6().b +return A.S(B.c.ai(25.5),s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255)}return null}, +$S:100} +A.b7n.prototype={ +$1(a){if(a.G(0,B.K))return B.cH +return B.d_}, +$S:67} +A.aui.prototype={} +A.SI.prototype={ +gL(a){return J.a1(this.a)}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.SI&&J.f(b.a,this.a)}} +A.ar7.prototype={} +A.ara.prototype={ +zH(a){var s +this.a1q(a) +s=this.a +if(s.gi_()&&this.b){s=s.gaL().gap() +s.toString +s.lb()}}, +EN(a){}, +gagu(){this.x.a.toString +return!1}, +Yv(){this.x.a.toString}, +zJ(a){var s,r +this.apA(a) +if(this.a.gi_()){s=this.x +r=s.c +r.toString +switch(A.am(r).w.a){case 2:case 4:break +case 0:case 1:case 3:case 5:s=s.c +s.toString +A.beR(s) +break}}}} +A.SL.prototype={ +b5(){var s=null +return new A.XM(new A.cK(s,t.NE),s,A.D(t.yb,t.Q),s,!0,s,B.p)}} +A.XM.prototype={ +gqz(){var s=this.a.d +return s}, +ghE(){var s=this.a.e,r=this.e +if(r==null){s=A.zg(!0,null,!0,!0,null,null,!1) +this.e=s}else s=r +return s}, +gawP(){this.a.toString +var s=this.c +s.toString +A.am(s) +return B.a2a}, +gWQ(){var s=this.x +s===$&&A.c() +return s}, +gi_(){return this.a.bv&&this.gpk()}, +gpk(){var s=this.a,r=s.p3 +if(r==null)s=s.f.ac +else s=r +return s}, +gaBK(){this.a.toString +return!1}, +guY(){var s=this.a.f +if(s.ch==null)s=this.gaBK() +else s=!0 +return s}, +gBl(){this.a.toString +this.a4t() +var s=this.c +s.toString +s=A.am(s) +return s.ax.fy}, +a4t(){var s,r,q,p,o,n=this,m=n.c +m.toString +A.nf(m,B.cK,t.c4).toString +m=n.c +m.toString +s=A.am(m) +m=n.a.f +m=m.TF(s.e) +r=n.gpk() +q=n.a +p=q.f.at +o=m.aOK(r,p==null?q.dy:p) +m=o.R8==null +if(!m||o.p4!=null)return o +r=n.gqz().a.a;(r.length===0?B.cs:new A.hz(r)).gF(0) +if(m)if(o.p4==null)n.a.toString +n.a.toString +return o}, +bu(){var s,r,q=this +q.bN() +q.w=new A.ara(q,q) +q.a.toString +s=q.ghE() +q.a.toString +r=q.gpk() +s.sqQ(r) +q.ghE().an(0,q.ga93()) +q.aBW()}, +ga92(){var s,r=this.c +r.toString +r=A.e8(r,B.h6) +s=r==null?null:r.ch +switch((s==null?B.fx:s).a){case 0:this.a.toString +r=this.gpk() +break +case 1:r=!0 +break +default:r=null}return r}, +cR(){this.asd() +this.ghE().sqQ(this.ga92())}, +bH(a){var s=this +s.ase(a) +s.a.toString +s.ghE().sqQ(s.ga92()) +if(s.ghE().gda())s.a.toString +s.a.toString +s.gkm().ey(0,B.K,!s.gpk()) +s.gkm().ey(0,B.V,s.f) +s.gkm().ey(0,B.W,s.ghE().gda()) +s.gkm().ey(0,B.cw,s.guY())}, +l3(a,b){var s=this.d +if(s!=null)this.q7(s,"controller")}, +ghY(){return this.a.aS}, +t(){var s,r=this +r.ghE().ad(0,r.ga93()) +s=r.e +if(s!=null)s.t() +s=r.d +if(s!=null){s.awo() +s.ap_()}r.gkm().ad(0,r.ga5m()) +s=r.z +if(s!=null){s.ah$=$.aa() +s.ac$=0}r.asf()}, +aHW(a){var s=this,r=s.w +r===$&&A.c() +if(!r.b)return!1 +if(a===B.aK)return!1 +s.a.toString +if(!s.gpk())return!1 +if(a===B.by||a===B.l6)return!0 +if(s.gqz().a.a.length!==0)return!0 +return!1}, +aJZ(){this.aK(new A.b7q()) +this.gkm().ey(0,B.W,this.ghE().gda())}, +aK0(a,b){var s,r=this,q=r.aHW(b) +if(q!==r.r)r.aK(new A.b7s(r,q)) +s=r.c +s.toString +switch(A.am(s).w.a){case 2:case 4:case 3:case 5:case 1:case 0:if(b===B.by){s=r.y.gap() +if(s!=null)s.m8(a.gfQ())}break}s=r.c +s.toString +switch(A.am(s).w.a){case 2:case 1:case 0:break +case 4:case 3:case 5:if(b===B.aF){s=r.y.gap() +if(s!=null)s.kv()}break}}, +aAW(){var s=this.gqz().a.b +if(s.a===s.b)this.y.gap().Zx()}, +a5b(a){var s=this +if(a!==s.f){s.aK(new A.b7r(s,a)) +s.gkm().ey(0,B.V,s.f)}}, +aBg(){this.aK(new A.b7t())}, +gkm(){this.a.toString +var s=this.z +s.toString +return s}, +aBW(){var s=this +s.a.toString +s.z=A.aXC(null) +s.gkm().ey(0,B.K,!s.gpk()) +s.gkm().ey(0,B.V,s.f) +s.gkm().ey(0,B.W,s.ghE().gda()) +s.gkm().ey(0,B.cw,s.guY()) +s.gkm().an(0,s.ga5m())}, +grA(){var s,r,q,p,o=this,n=o.a.ao +if(n==null)s=null +else s=J.na(n.slice(0),A.a5(n).c) +if(s!=null){n=o.y.gap() +n.toString +n=A.eT(n) +r=o.gqz().a +q=o.a.f +p=new A.KO(!0,"EditableText-"+n,s,r,q.z)}else p=B.u4 +n=o.y.gap().grA() +return A.bqa(n.ay,!0,p,!1,!0,n.y,!0,n.Q,n.b,n.at,!1,n.c,n.r,n.w,n.as,n.a)}, +ab(e1){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,d1,d2,d3,d4,d5,d6=this,d7=null,d8={},d9=A.am(e1),e0=e1.bh(t.Uf) +if(e0==null)e0=B.fc +s=A.ei(d6.a.y,d6.gkm().a,t.p8) +r=A.am(e1).p2.y +r.toString +q=d6.c +q.toString +A.am(q) +q=d6.c +q.toString +q=A.bPR(q) +p=t.em +o=A.ei(q,d6.gkm().a,p) +n=A.ei(r,d6.gkm().a,p).bT(o).bT(s) +d6.a.toString +r=d9.ax +m=d6.gqz() +l=d6.ghE() +q=A.b([],t.VS) +p=d6.a.p2 +if(p!=null)B.b.I(q,p) +p=d6.a +p.toString +switch(A.ci().a){case 2:case 4:k=A.bDd(p.S) +break +case 0:case 1:case 3:case 5:k=A.bL4(p.S) +break +default:k=d7}p=d6.a +j=p.bn +i=p.ry +h=p.rx +d8.a=d8.b=null +switch(d9.w.a){case 2:g=A.yG(e1) +d6.x=!0 +j=$.bjU() +if(d6.guY())f=d6.gBl() +else{d6.a.toString +p=e0.w +f=p==null?g.giZ():p}e=e0.x +if(e==null){e0=g.giZ() +e=A.S(102,e0.gm(e0)>>>16&255,e0.gm(e0)>>>8&255,e0.gm(e0)&255)}d=new A.i(-2/A.cj(e1,B.cy,t.l).w.b,0) +c=e +b=!0 +i=!0 +h=B.e_ +break +case 4:g=A.yG(e1) +i=d6.x=!1 +j=$.bjT() +if(d6.guY())f=d6.gBl() +else{d6.a.toString +p=e0.w +f=p==null?g.giZ():p}e=e0.x +if(e==null){e0=g.giZ() +e=A.S(102,e0.gm(e0)>>>16&255,e0.gm(e0)>>>8&255,e0.gm(e0)&255)}d=new A.i(-2/A.cj(e1,B.cy,t.l).w.b,0) +d8.b=new A.b7v(d6) +d8.a=new A.b7w(d6) +c=d7 +b=!0 +h=B.e_ +break +case 0:case 1:d6.x=!1 +j=$.bk2() +if(d6.guY())f=d6.gBl() +else{d6.a.toString +p=e0.w +f=p==null?r.b:p}e=e0.x +if(e==null){e0=r.b +e=A.S(102,e0.gm(e0)>>>16&255,e0.gm(e0)>>>8&255,e0.gm(e0)&255)}c=d7 +d=c +b=!1 +i=!1 +break +case 3:d6.x=!1 +j=$.bdA() +if(d6.guY())f=d6.gBl() +else{d6.a.toString +p=e0.w +f=p==null?r.b:p}e=e0.x +if(e==null){e0=r.b +e=A.S(102,e0.gm(e0)>>>16&255,e0.gm(e0)>>>8&255,e0.gm(e0)&255)}d8.b=new A.b7x(d6) +d8.a=new A.b7y(d6) +c=d7 +d=c +b=!1 +i=!1 +break +case 5:d6.x=!1 +j=$.bdA() +if(d6.guY())f=d6.gBl() +else{d6.a.toString +p=e0.w +f=p==null?r.b:p}e=e0.x +if(e==null){e0=r.b +e=A.S(102,e0.gm(e0)>>>16&255,e0.gm(e0)>>>8&255,e0.gm(e0)&255)}d8.b=new A.b7z(d6) +d8.a=new A.b7A(d6) +c=d7 +d=c +b=!1 +i=!1 +break +default:c=d7 +e=c +f=e +d=f +b=d}e0=d6.cS$ +d6.a.toString +p=d6.gpk() +a=d6.a +a0=a.go +a1=a.id +a2=d6.r +a3=a.R +a4=a.r +a5=a.w +a6=a.x +a7=a.z +a8=a.Q +a9=a.at +b0=a.ch +b1=a.cy +b2=a.db +b3=a.dy +a=a.fr +b4=l.gda()?e:d7 +b5=d6.a +b6=b5.bv +b7=b6?j:d7 +b8=b5.k3 +b9=b5.k4 +c0=b5.ok +c1=b5.p1 +c2=b5.b6 +c3=b5.R8 +c4=b5.RG +c5=b5.x2 +c6=b5.xr +c7=b5.y2 +c8=b5.ac +c9=b5.av +d0=b5.M +d1=b5.aM +d2=b5.ct +b5=b5.bD +d3=$.bjq() +e0=A.Tk(e0,A.bmq(!0,c,d6,B.dQ,!1,B.ek,d1,d2,b5,m,f,c4,d,i,h,c3,c8,!0,b6,!0,!1,l,!0,q,d6.y,r.a,a4,d3,b3,a,B.m,!1,b0,c1,b8,b9,d6.gaK_(),d6.gaAV(),c0,c2,b,!p,!0,"editable",!0,c9,c7,d0,b4,b7,c5,c6,a1,a2,b1,b2,k,a7,n,a8,a6,a9,d7,a5,d7,B.aM,a0,a3)) +d6.a.toString +d4=A.mX(new A.CT(A.b([l,m],t.Eo)),new A.b7B(d6,l,m),new A.mx(e0,d7)) +d6.a.toString +d5=A.ei(B.aiO,d6.gkm().a,t.Pb) +d8.c=null +if(d6.gawP()!==B.a29)d6.a.toString +d6.a.toString +e0=d6.gpk() +r=d6.w +r===$&&A.c() +return A.pK(A.adg(A.zF(A.mX(m,new A.b7C(d8,d6),r.abx(B.dg,d4)),!e0,d7),d7,d7),d5,d7,new A.b7D(d6),new A.b7E(d6),d7)}, +gaL(){return this.y}} +A.b7q.prototype={ +$0(){}, +$S:0} +A.b7s.prototype={ +$0(){this.a.r=this.b}, +$S:0} +A.b7r.prototype={ +$0(){this.a.f=this.b}, +$S:0} +A.b7t.prototype={ +$0(){}, +$S:0} +A.b7v.prototype={ +$0(){var s,r=this.a +if(!r.ghE().gda()){s=r.ghE() +s=s.b&&B.b.h8(s.gfj(),A.iV())}else s=!1 +if(s)r.ghE().lF()}, +$S:0} +A.b7w.prototype={ +$0(){this.a.ghE().my()}, +$S:0} +A.b7x.prototype={ +$0(){var s,r=this.a +if(!r.ghE().gda()){s=r.ghE() +s=s.b&&B.b.h8(s.gfj(),A.iV())}else s=!1 +if(s)r.ghE().lF()}, +$S:0} +A.b7y.prototype={ +$0(){this.a.ghE().my()}, +$S:0} +A.b7z.prototype={ +$0(){var s,r=this.a +if(!r.ghE().gda()){s=r.ghE() +s=s.b&&B.b.h8(s.gfj(),A.iV())}else s=!1 +if(s)r.ghE().lF()}, +$S:0} +A.b7A.prototype={ +$0(){this.a.ghE().my()}, +$S:0} +A.b7B.prototype={ +$2(a,b){var s,r,q,p=this.a,o=p.a4t(),n=p.a,m=n.y,l=n.Q +n=n.as +s=p.f +r=this.b.gda() +q=this.c.a.a +p.a.toString +return A.bG0(m,b,o,!1,q.length===0,r,s,l,n)}, +$S:542} +A.b7D.prototype={ +$1(a){return this.a.a5b(!0)}, +$S:79} +A.b7E.prototype={ +$1(a){return this.a.a5b(!1)}, +$S:60} +A.b7C.prototype={ +$2(a,b){var s=null,r=this.b,q=r.gpk(),p=this.a,o=p.c,n=r.gqz().a.a +n=(n.length===0?B.cs:new A.hz(n)).gF(0) +r.a.toString +return A.dg(s,s,b,!1,n,q,!1,!1,s,s,s,s,s,s,o,s,s,s,s,p.b,p.a,s,s,s,new A.b7u(r),s,s,s,s,s,s,s,s)}, +$S:543} +A.b7u.prototype={ +$0(){var s=this.a +if(!s.gqz().a.b.gds())s.gqz().sAs(A.tF(B.v,s.gqz().a.a.length)) +s=s.y.gap() +if(s!=null)s.MR()}, +$S:0} +A.b9o.prototype={ +$1(a){var s,r=null +if(a.G(0,B.K)){s=A.am(this.a).p2.y.b +return A.ep(r,r,s==null?r:A.S(97,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255),r,r,r,r,r,r,r,r,r,r,r,r,r,r,!0,r,r,r,r,r,r,r,r)}return A.ep(r,r,A.am(this.a).p2.y.b,r,r,r,r,r,r,r,r,r,r,r,r,r,r,!0,r,r,r,r,r,r,r,r)}, +$S:69} +A.b8A.prototype={ +$2(a,b){if(!a.a)a.ad(0,b)}, +$S:48} +A.Z4.prototype={ +bH(a){this.c7(a) +this.vz()}, +cR(){var s,r,q,p,o=this +o.fP() +s=o.cS$ +r=o.guh() +q=o.c +q.toString +q=A.wh(q) +o.jV$=q +p=o.tn(q,r) +if(r){o.l3(s,o.hM$) +o.hM$=!1}if(p)if(s!=null)s.t()}, +t(){var s,r=this +r.jU$.al(0,new A.b8A()) +s=r.cS$ +if(s!=null)s.t() +r.cS$=null +r.bG()}} +A.SM.prototype={ +b5(){var s=null,r=$.aa() +return new A.K1(new A.R0(s,r),new A.Bj(!1,r),s,A.D(t.yb,t.Q),s,!0,s,B.p)}} +A.aVl.prototype={ +$1(a){var s,r,q,p,o,n,m=this +t.iN.a(a) +s=m.a +r=a.c +r.toString +q=s.TF(A.am(r).e) +r=a.cS$ +p=a.gyd() +o=a.e +n=o.y +o=q.aOt(n==null?A.w(o).h("dv.T").a(n):n) +n=m.p2 +s=s.ac +return A.Tk(r,A.bgW(m.cy,m.bv,m.as,m.y2,m.bD,m.bB,m.b2,m.b_,p,m.rx,m.ry,m.R8,m.av,m.RG,m.p4,o,m.aS,m.ac,!0,m.dy,s!==!1,m.go,m.d,m.p3,m.p1,null,m.x2,m.e,m.K,m.id,m.fr,m.fx,m.fy,m.ah,m.cx,m.CW,m.M,new A.aVm(a,m.b),m.k4,m.ok,m.k1,m.k2,m.k3,m.ay,m.c,m.ct,m.bn,m.to,m.x1,m.y1,m.ao,m.aM,m.ch,B.rH,B.rI,m.b6,m.at,m.w,m.r,m.x,m.y,m.Q,m.z,m.f,m.ax,m.a5))}, +$S:544} +A.aVm.prototype={ +$1(a){this.a.Kh(a) +this.b.$1(a)}, +$S:26} +A.K1.prototype={ +gyd(){var s=t.mr.a(A.aF.prototype.gba.call(this)) +return s.z}, +l3(a,b){var s,r=this +r.any(a,b) +s=r.ax +if(s!=null)r.q7(s,"controller") +r.d=r.gyd().a.a}, +bu(){var s,r=this +r.bN() +s=t.mr +s.a(A.aF.prototype.gba.call(r)) +s.a(A.aF.prototype.gba.call(r)).z.an(0,r.gQX())}, +bH(a){var s,r,q,p=this +p.aqa(a) +s=t.mr +r=a.z +if(s.a(A.aF.prototype.gba.call(p)).z!==r){q=p.gQX() +r.ad(0,q) +s.a(A.aF.prototype.gba.call(p)).z.an(0,q) +s.a(A.aF.prototype.gba.call(p)) +s.a(A.aF.prototype.gba.call(p)) +p.d=s.a(A.aF.prototype.gba.call(p)).z.a.a}}, +t(){var s,r=this +t.mr.a(A.aF.prototype.gba.call(r)).z.ad(0,r.gQX()) +s=r.ax +if(s!=null){s.awo() +s.ap_()}r.anx()}, +Kh(a){var s +this.anw(a) +if(this.gyd().a.a!==a){s=this.gyd() +s.sd7(0,a)}}, +az7(){var s=this +if(s.gyd().a.a!==s.gaau())s.Kh(s.gyd().a.a)}} +A.a6I.prototype={} +A.aKm.prototype={ +Ah(a){return B.a81}, +Jv(a,b,c,d){var s,r,q,p=null,o=A.am(a) +a.bh(t.jY) +s=A.am(a) +r=s.eH.c +if(r==null)r=o.ax.b +q=A.fF(A.ew(A.iH(B.dg,p,B.ai,!1,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,d,p,p,p,p,p,p),p,p,new A.ard(r,p),B.x),22,22) +switch(b.a){case 0:s=A.bh4(1.5707963267948966,q) +break +case 1:s=q +break +case 2:s=A.bh4(0.7853981633974483,q) +break +default:s=p}return s}, +Ag(a,b){var s +switch(a.a){case 2:s=B.a3g +break +case 0:s=B.a3j +break +case 1:s=B.h +break +default:s=null}return s}} +A.ard.prototype={ +aO(a,b){var s,r,q,p,o=$.G(),n=o.B() +n.sA(0,this.b) +s=b.a/2 +r=A.jT(new A.i(s,s),s) +q=0+s +p=o.Z() +p.hq(r) +p.m3(new A.A(0,0,q,q)) +a.a3(p,n)}, +cF(a){return!this.b.k(0,a.b)}} +A.alh.prototype={} +A.SW.prototype={ +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.SW&&J.f(b.a,s.a)&&J.f(b.b,s.b)&&J.f(b.c,s.c)}} +A.are.prototype={} +A.adr.prototype={ +ab(a){var s=this.c.Y(0,B.oX),r=this.d.X(0,B.a3a),q=A.cj(a,B.cM,t.l).w.r.b+8,p=44<=s.b-8-q,o=new A.i(8,q) +return new A.cu(new A.aS(8,q,8,8),new A.o3(new A.ads(s.Y(0,o),r.Y(0,o),p),new A.XR(this.e,p,A.bW2(),null),null),null)}} +A.XR.prototype={ +b5(){return new A.arj(new A.qh(),null,null,B.p)}, +aZB(a,b){return this.e.$2(a,b)}} +A.arj.prototype={ +bH(a){var s=this +s.c7(a) +if(!A.eu(s.a.c,a.c)){s.e=new A.qh() +s.d=!1}}, +ab(a){var s,r,q,p,o,n,m,l,k=this,j=null +A.nf(a,B.cK,t.c4).toString +s=k.e +r=k.d +q=a.bh(t.I) +q.toString +p=k.a +o=p.d +n=k.d +m=A.bfi(n?B.VR:B.W1,j,j) +l=n?"Back":"More" +l=A.b([new A.ari(m,new A.b7V(k),l,j)],t.p) +B.b.I(l,k.a.c) +return new A.ark(r,q.w,A.bkx(p.aZB(a,new A.arg(o,n,l,j)),B.z,B.TZ),s)}} +A.b7V.prototype={ +$0(){var s=this.a +s.aK(new A.b7U(s))}, +$S:0} +A.b7U.prototype={ +$0(){var s=this.a +s.d=!s.d}, +$S:0} +A.ark.prototype={ +bA(a){var s=new A.arl(this.e,this.f,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.sYx(this.e) +b.scV(this.f)}} +A.arl.prototype={ +sYx(a){if(a===this.aE)return +this.aE=a +this.aB()}, +scV(a){if(a===this.bj)return +this.bj=a +this.aB()}, +cM(){var s,r,q=this,p=q.a0$ +p.toString +s=t.k +r=s.a(A.L.prototype.gaI.call(q)) +p.dc(new A.bb(0,r.b,0,r.d),!0) +if(!q.aE&&q.V==null)q.V=q.a0$.gC(0).a +p=s.a(A.L.prototype.gaI.call(q)) +s=q.V +if(s!=null){s=q.a0$.gC(0) +r=q.V +r.toString +s=s.a>r}else{r=s +s=!0}if(s)s=q.a0$.gC(0).a +else{r.toString +s=r}q.id=p.ca(new A.Q(s,q.a0$.gC(0).b)) +s=q.a0$.b +s.toString +t.yS.a(s) +s.a=new A.i(q.bj===B.ad?0:q.gC(0).a-q.a0$.gC(0).a,0)}, +aO(a,b){var s=this.a0$,r=s.b +r.toString +a.fb(s,t.yS.a(r).a.X(0,b))}, +dZ(a,b){var s=this.a0$.b +s.toString +t.yS.a(s) +return a.m5(new A.b7W(this,b,s),s.a,b)}, +i0(a){if(!(a.b instanceof A.jZ))a.b=new A.jZ(null,null,B.h)}, +eK(a,b){var s=a.b +s.toString +s=t.yS.a(s).a +b.aJ(0,s.a,s.b) +this.aoL(a,b)}} +A.b7W.prototype={ +$2(a,b){return this.a.a0$.dK(a,b)}, +$S:8} +A.arg.prototype={ +bA(a){var s=new A.aot(this.e,this.f,0,null,null,new A.bs(),A.aX(t.v)) +s.by() +return s}, +bI(a,b){b.szr(this.e) +b.sYx(this.f)}, +cJ(a){return new A.arh(A.ek(t.U),this,B.al)}} +A.arh.prototype={} +A.aot.prototype={ +szr(a){if(a===this.a5)return +this.a5=a +this.aB()}, +sYx(a){if(a===this.M)return +this.M=a +this.aB()}, +aCr(){var s,r=this,q={},p=t.k,o=r.M?p.a(A.L.prototype.gaI.call(r)):A.bkQ(new A.Q(p.a(A.L.prototype.gaI.call(r)).b,44)) +q.a=-1 +q.b=0 +r.cc(new A.b5A(q,r,o)) +p=r.aZ$ +p.toString +s=r.K +if(s!==-1&&s===r.dI$-2&&q.b-p.gC(0).a<=o.b)r.K=-1}, +Su(a,b){var s,r=this +if(a===r.aZ$)return r.K!==-1 +s=r.K +if(s===-1)return!0 +return b>s===r.M}, +aFu(){var s,r,q,p,o=this,n={} +n.a=-1 +n.b=B.x +n.c=0 +s=o.aZ$ +s.toString +n.d=o.M&&!o.a5?s.gC(0).b:0 +o.cc(new A.b5B(n,o,s)) +r=s.b +r.toString +t.yS.a(r) +q=o.aZ$ +q.toString +if(o.Su(q,0)){r.e=!0 +if(o.M){q=o.a5 +r.a=q?new A.i(0,n.d):B.h +r=n.b +p=r.b +s=q?p+s.gC(0).b:p +n.b=new A.Q(r.a,s)}else{r.a=new A.i(n.c,0) +n.b=new A.Q(n.b.a+s.gC(0).a,n.b.b)}}else r.e=!1 +o.id=n.b}, +aGB(){var s,r=this,q={} +if(!r.M)return +s=r.aZ$ +s.toString +q.a=-1 +r.cc(new A.b5C(q,r,s))}, +cM(){var s,r=this +r.K=-1 +if(r.aZ$==null){s=t.k.a(A.L.prototype.gaI.call(r)) +r.id=new A.Q(A.U(0,s.a,s.b),A.U(0,s.c,s.d)) +return}r.aCr() +r.aFu() +r.aGB()}, +aO(a,b){this.cc(new A.b5E(a,b))}, +i0(a){if(!(a.b instanceof A.jZ))a.b=new A.jZ(null,null,B.h)}, +dZ(a,b){var s,r,q={},p=q.a=this.f1$ +for(s=t.yS;p!=null;){p=p.b +p.toString +s.a(p) +if(!p.e){r=p.dY$ +q.a=r +p=r +continue}if(a.m5(new A.b5D(q,b,p),p.a,b))return!0 +r=p.dY$ +q.a=r +p=r}return!1}, +jx(a){this.cc(new A.b5F(a))}} +A.b5A.prototype={ +$1(a){var s,r,q,p,o=this.a;++o.a +s=this.b +if(s.K!==-1&&!s.M)return +t.x.a(a) +r=this.c +q=r.b +a.dc(new A.bb(0,q,0,r.d),!0) +p=o.b+a.gC(0).a +o.b=p +if(p>q&&s.K===-1)s.K=o.a-1}, +$S:12} +A.b5B.prototype={ +$1(a){var s,r,q,p=this.a,o=++p.a +t.x.a(a) +s=a.b +s.toString +t.yS.a(s) +if(a===this.c)return +r=this.b +if(!r.Su(a,o)){s.e=!1 +return}s.e=!0 +if(!r.M){o=p.c +s.a=new A.i(o,0) +q=o+a.gC(0).a +p.c=q +p.b=new A.Q(q,Math.max(a.gC(0).b,p.b.b))}else{o=p.d +s.a=new A.i(0,o) +p.d=o+a.gC(0).b +p.b=new A.Q(Math.max(a.gC(0).a,p.b.a),p.d)}}, +$S:12} +A.b5C.prototype={ +$1(a){var s,r,q +t.x.a(a) +s=a.b +s.toString +t.yS.a(s) +r=++this.a.a +if(a===this.c)return +q=this.b +if(!q.Su(a,r)){s.e=!1 +return}a.dc(A.jx(null,q.gC(0).a),!0)}, +$S:12} +A.b5E.prototype={ +$1(a){var s +t.x.a(a) +s=a.b +s.toString +t.yS.a(s) +if(!s.e)return +this.a.fb(a,s.a.X(0,this.b))}, +$S:12} +A.b5D.prototype={ +$2(a,b){return this.a.a.dK(a,b)}, +$S:8} +A.b5F.prototype={ +$1(a){var s +t.x.a(a) +s=a.b +s.toString +if(t.yS.a(s).e)this.a.$1(a)}, +$S:12} +A.arf.prototype={ +ab(a){var s=null +return A.me(B.ab,!0,B.J4,this.c,B.ce,A.bNM(A.am(a).ax),1,s,s,s,s,s,B.fs)}} +A.ari.prototype={ +ab(a){var s=null +return A.me(B.ab,!0,s,A.bn1(s,s,s,s,this.c,s,this.d,s,s,s,this.e),B.y,B.B,0,s,s,s,s,s,B.fs)}} +A.atY.prototype={ +bc(a){var s,r,q +this.fg(a) +s=this.aZ$ +for(r=t.yS;s!=null;){s.bc(a) +q=s.b +q.toString +s=r.a(q).bd$}}, +b3(a){var s,r,q +this.fh(0) +s=this.aZ$ +for(r=t.yS;s!=null;){s.b3(0) +q=s.b +q.toString +s=r.a(q).bd$}}} +A.auj.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.K3.prototype={ +W(){return"_TextSelectionToolbarItemPosition."+this.b}} +A.adt.prototype={ +ab(a){var s=this,r=null +return A.ada(s.c,s.d,A.bq8(s.f,r,B.B,r,r,r,r,r,r,A.bLd(A.am(a).ax),r,B.Gt,s.e,r,B.l0,r,r,B.aco,r))}} +A.hB.prototype={ +bT(b3){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=this,b2=null +if(b3==null)return b1 +s=b1.a +r=s==null?b2:s.bT(b3.a) +if(r==null)r=b3.a +q=b1.b +p=q==null?b2:q.bT(b3.b) +if(p==null)p=b3.b +o=b1.c +n=o==null?b2:o.bT(b3.c) +if(n==null)n=b3.c +m=b1.d +l=m==null?b2:m.bT(b3.d) +if(l==null)l=b3.d +k=b1.e +j=k==null?b2:k.bT(b3.e) +if(j==null)j=b3.e +i=b1.f +h=i==null?b2:i.bT(b3.f) +if(h==null)h=b3.f +g=b1.r +f=g==null?b2:g.bT(b3.r) +if(f==null)f=b3.r +e=b1.w +d=e==null?b2:e.bT(b3.w) +if(d==null)d=b3.w +c=b1.x +b=c==null?b2:c.bT(b3.x) +if(b==null)b=b3.x +a=b1.y +a0=a==null?b2:a.bT(b3.y) +if(a0==null)a0=b3.y +a1=b1.z +a2=a1==null?b2:a1.bT(b3.z) +if(a2==null)a2=b3.z +a3=b1.Q +a4=a3==null?b2:a3.bT(b3.Q) +if(a4==null)a4=b3.Q +a5=b1.as +a6=a5==null?b2:a5.bT(b3.as) +if(a6==null)a6=b3.as +a7=b1.at +a8=a7==null?b2:a7.bT(b3.at) +if(a8==null)a8=b3.at +a9=b1.ax +b0=a9==null?b2:a9.bT(b3.ax) +if(b0==null)b0=b3.ax +s=r==null?s:r +r=p==null?q:p +q=n==null?o:n +p=l==null?m:l +o=j==null?k:j +n=h==null?i:h +m=f==null?g:f +l=d==null?e:d +k=b==null?c:b +j=a0==null?a:a0 +i=a2==null?a1:a2 +h=a4==null?a3:a4 +g=a6==null?a5:a6 +f=a8==null?a7:a8 +return A.aVU(j,i,h,s,r,q,p,o,n,g,f,b0==null?a9:b0,m,l,k)}, +aMt(a,b,a0,a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null,c=e.a +c=c==null?d:c.kM(a0,d,b,d,a1,a2,0,1,a3) +s=e.b +s=s==null?d:s.kM(a0,d,b,d,a1,a2,0,1,a3) +r=e.c +r=r==null?d:r.kM(a0,d,b,d,a1,a2,0,1,a3) +q=e.d +q=q==null?d:q.kM(a0,d,b,d,a1,a2,0,1,a3) +p=e.e +p=p==null?d:p.kM(a0,d,b,d,a1,a2,0,1,a3) +o=e.f +o=o==null?d:o.kM(a,d,b,d,a1,a2,0,1,a3) +n=e.r +n=n==null?d:n.kM(a,d,b,d,a1,a2,0,1,a3) +m=e.w +m=m==null?d:m.kM(a,d,b,d,a1,a2,0,1,a3) +l=e.x +l=l==null?d:l.kM(a,d,b,d,a1,a2,0,1,a3) +k=e.y +k=k==null?d:k.kM(a,d,b,d,a1,a2,0,1,a3) +j=e.z +j=j==null?d:j.kM(a,d,b,d,a1,a2,0,1,a3) +i=e.Q +i=i==null?d:i.kM(a0,d,b,d,a1,a2,0,1,a3) +h=e.as +h=h==null?d:h.kM(a,d,b,d,a1,a2,0,1,a3) +g=e.at +g=g==null?d:g.kM(a,d,b,d,a1,a2,0,1,a3) +f=e.ax +return A.aVU(k,j,i,c,s,r,q,p,o,h,g,f==null?d:f.kM(a,d,b,d,a1,a2,0,1,a3),n,m,l)}, +ab7(a,b,c){return this.aMt(a,b,c,null,null,null)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.hB&&J.f(s.a,b.a)&&J.f(s.b,b.b)&&J.f(s.c,b.c)&&J.f(s.d,b.d)&&J.f(s.e,b.e)&&J.f(s.f,b.f)&&J.f(s.r,b.r)&&J.f(s.w,b.w)&&J.f(s.x,b.x)&&J.f(s.y,b.y)&&J.f(s.z,b.z)&&J.f(s.Q,b.Q)&&J.f(s.as,b.as)&&J.f(s.at,b.at)&&J.f(s.ax,b.ax)}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,B.a,B.a,B.a,B.a,B.a)}} +A.arp.prototype={} +A.wJ.prototype={ +ab(a){var s,r,q=null,p=this.c,o=B.dF.a,n=B.dF.b,m=B.dF.c,l=B.dF.d,k=B.dF.e,j=B.dF.f,i=B.dF.r,h=a.bh(t.Uf) +if(h==null)h=B.fc +s=p.eH +r=s.b +if(r==null)r=h.x +s=s.a +h=s==null?h.w:s +return new A.Vv(this,new A.M0(new A.a6F(p,new A.Pk(o,n,m,l,k,j,i),B.tx,o,n,m,l,k,j,i),A.NP(A.aAJ(this.d,h,q,q,r),p.k4,q),q),q)}} +A.Vv.prototype={ +wE(a,b,c){return new A.wJ(this.w.c,c,null)}, +el(a){return!this.w.c.k(0,a.w.c)}} +A.Cc.prototype={ +iy(a){var s,r=this.a +r.toString +s=this.b +s.toString +return A.bLn(r,s,a)}} +A.KD.prototype={ +b5(){return new A.afm(null,null,B.p)}} +A.afm.prototype={ +tS(a){var s=a.$3(this.CW,this.a.r,new A.aYP()) +s.toString +this.CW=t.UW.a(s)}, +ab(a){var s=this.CW +s.toString +return new A.wJ(s.az(0,this.gij().gm(0)),this.a.w,null)}} +A.aYP.prototype={ +$1(a){return new A.Cc(t.we.a(a),null)}, +$S:545} +A.Ag.prototype={ +W(){return"MaterialTapTargetSize."+this.b}} +A.nv.prototype={ +Uq(d5,d6,d7,d8,d9,e0){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=this,c8=null,c9=d7==null?c7.w:d7,d0=e0==null?c7.Q:e0,d1=d5==null?c7.ax:d5,d2=d1.b,d3=d1.c,d4=d1.d +if(d4==null)d4=d2 +s=d1.e +if(s==null)s=d3 +r=d1.f +if(r==null)r=d2 +q=d1.r +if(q==null)q=d2 +p=d1.w +if(p==null)p=d3 +o=d1.x +if(o==null)o=d3 +n=d1.y +m=d1.z +l=d1.Q +if(l==null)l=n +k=d1.as +if(k==null)k=m +j=d1.at +if(j==null)j=n +i=d1.ax +if(i==null)i=n +h=d1.ay +if(h==null)h=m +g=d1.ch +if(g==null)g=m +f=d1.CW +e=f==null?n:f +d=d1.cx +c=d==null?m:d +b=d1.cy +if(b==null)b=f==null?n:f +a=d1.db +if(a==null)a=d==null?m:d +a0=d1.dx +if(a0==null)a0=f==null?n:f +a1=d1.dy +if(a1==null){if(f==null)f=n}else f=a1 +a1=d1.fr +if(a1==null)a1=d==null?m:d +a2=d1.fx +if(a2==null){if(d==null)d=m}else d=a2 +a2=d1.fy +a3=d1.go +a4=d1.id +if(a4==null)a4=a2 +a5=d1.k1 +if(a5==null)a5=a3 +a6=d1.k2 +a7=d1.k3 +a8=d1.ok +if(a8==null)a8=a6 +a9=d1.p1 +if(a9==null)a9=a6 +b0=d1.p2 +if(b0==null)b0=a6 +b1=d1.p3 +if(b1==null)b1=a6 +b2=d1.p4 +if(b2==null)b2=a6 +b3=d1.R8 +if(b3==null)b3=a6 +b4=d1.RG +if(b4==null)b4=a6 +b5=d1.rx +if(b5==null)b5=a7 +b6=d1.ry +if(b6==null){b6=d1.ac +if(b6==null)b6=a7}b7=d1.to +if(b7==null){b7=d1.ac +if(b7==null)b7=a7}b8=d1.x1 +if(b8==null)b8=B.q +b9=d1.x2 +if(b9==null)b9=B.q +c0=d1.xr +if(c0==null)c0=a7 +c1=d1.y1 +if(c1==null)c1=a6 +c2=d1.y2 +if(c2==null)c2=d3 +c3=d1.bv +if(c3==null)c3=d2 +c4=d1.bn +if(c4==null)c4=a6 +c5=d1.ac +if(c5==null)c5=a7 +c6=d1.k4 +if(c6==null)c6=a6 +f=A.bee(c4,d1.a,a2,a4,c2,c0,c5,a3,a5,c1,d3,s,p,o,m,k,h,g,a7,b5,c,a,a1,d,b6,b7,d2,d4,r,q,b9,n,l,j,i,b8,a6,a9,b2,b3,b4,b1,b0,a8,c3,c6,e,b,a0,f) +d1=d6==null?c7.CW:d6 +d2=d8==null?c7.p1:d8 +d3=d9==null?c7.p2:d9 +return A.bh_(c7.p4,c7.d,c7.R8,c7.a,c7.RG,c7.rx,c7.ry,c7.to,c7.x1,c7.x2,c7.xr,c7.as,c7.at,c7.y1,c7.y2,c7.bv,f,c7.b,c7.bn,c7.ac,c7.ay,c7.ah,c7.ch,d1,c7.b_,c7.b6,c7.K,c7.a5,c7.M,c7.c,c7.av,c7.ao,c7.cx,c7.cy,c7.db,c7.dx,c7.aM,c7.k4,c7.dy,c7.e,c7.aS,c7.f,c7.b2,c7.bB,c7.ct,c7.bD,c7.dg,c7.R,c7.S,c7.r,c9,c7.aa,c7.fr,c7.fx,c7.fy,c7.ok,d2,c7.bp,c7.aN,c7.go,c7.x,c7.cZ,c7.cL,c7.id,c7.d4,c7.k1,c7.f3,c7.dh,c7.k2,c7.y,c7.c9,c7.eh,c7.f4,c7.eH,d3,c7.e9,c7.f5,c7.d1,c7.p3,c7.k3,!0,d0)}, +aOS(a,b){var s=null +return this.Uq(s,s,s,a,b,s)}, +aOR(a,b){var s=null +return this.Uq(s,s,a,s,s,b)}, +aOs(a){var s=null +return this.Uq(s,a,s,s,s,s)}, +k(a,b){var s=this +if(b==null)return!1 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.nv&&A.av7(b.d,s.d)&&b.a===s.a&&A.av7(b.c,s.c)&&b.e.k(0,s.e)&&b.f===s.f&&b.r.k(0,s.r)&&b.w===s.w&&b.x.k(0,s.x)&&b.y===s.y&&b.Q.k(0,s.Q)&&b.as.k(0,s.as)&&b.at.k(0,s.at)&&b.ax.k(0,s.ax)&&b.ay.k(0,s.ay)&&b.ch.k(0,s.ch)&&b.CW.k(0,s.CW)&&b.cx.k(0,s.cx)&&b.cy.k(0,s.cy)&&b.db.k(0,s.db)&&b.dx.k(0,s.dx)&&b.dy.k(0,s.dy)&&b.fr.k(0,s.fr)&&b.fx.k(0,s.fx)&&b.fy.k(0,s.fy)&&b.go.k(0,s.go)&&b.id.k(0,s.id)&&b.k1.k(0,s.k1)&&b.k2.k(0,s.k2)&&b.k3.k(0,s.k3)&&b.k4.k(0,s.k4)&&b.ok.k(0,s.ok)&&b.p1.k(0,s.p1)&&b.p2.k(0,s.p2)&&b.p3.k(0,s.p3)&&J.f(b.p4,s.p4)&&b.R8.k(0,s.R8)&&b.RG.k(0,s.RG)&&b.rx.k(0,s.rx)&&b.ry.k(0,s.ry)&&b.to.k(0,s.to)&&b.x1.k(0,s.x1)&&b.x2.k(0,s.x2)&&b.xr.k(0,s.xr)&&b.y1.k(0,s.y1)&&b.y2.k(0,s.y2)&&b.bv.k(0,s.bv)&&b.bn.k(0,s.bn)&&b.ac.k(0,s.ac)&&b.ah.k(0,s.ah)&&b.b_.k(0,s.b_)&&b.b6.k(0,s.b6)&&b.K.k(0,s.K)&&b.a5.k(0,s.a5)&&b.M.k(0,s.M)&&b.av.k(0,s.av)&&b.ao.k(0,s.ao)&&b.aM.k(0,s.aM)&&b.aS.k(0,s.aS)&&b.b2.k(0,s.b2)&&b.bB.k(0,s.bB)&&b.ct.k(0,s.ct)&&b.bD.k(0,s.bD)&&b.dg.k(0,s.dg)&&b.R.k(0,s.R)&&b.S.k(0,s.S)&&b.aa.k(0,s.aa)&&b.bp.k(0,s.bp)&&b.aN.k(0,s.aN)&&b.cZ.k(0,s.cZ)&&b.cL.k(0,s.cL)&&b.d4.k(0,s.d4)&&b.f3.k(0,s.f3)&&b.dh.k(0,s.dh)&&b.c9.k(0,s.c9)&&b.eh.k(0,s.eh)&&b.f4.k(0,s.f4)&&b.eH.k(0,s.eH)&&b.e9.k(0,s.e9)&&b.f5.k(0,s.f5)&&b.d1.k(0,s.d1)}, +gL(a){var s=this,r=s.d,q=A.ab(new A.bk(r,A.w(r).h("bk<1>")),!0,t.X) +B.b.I(q,r.gbm(0)) +q.push(s.a) +q.push(s.b) +r=s.c +B.b.I(q,r.gdv(r)) +B.b.I(q,r.gbm(r)) +q.push(s.e) +q.push(s.f) +q.push(s.r) +q.push(s.w) +q.push(s.x) +q.push(s.y) +q.push(!0) +q.push(s.Q) +q.push(s.as) +q.push(s.at) +q.push(s.ax) +q.push(s.ay) +q.push(s.ch) +q.push(s.CW) +q.push(s.cx) +q.push(s.cy) +q.push(s.db) +q.push(s.dx) +q.push(s.dy) +q.push(s.fr) +q.push(s.fx) +q.push(s.fy) +q.push(s.go) +q.push(s.id) +q.push(s.k1) +q.push(s.k2) +q.push(s.k3) +q.push(s.k4) +q.push(s.ok) +q.push(s.p1) +q.push(s.p2) +q.push(s.p3) +q.push(s.p4) +q.push(s.R8) +q.push(s.RG) +q.push(s.rx) +q.push(s.ry) +q.push(s.to) +q.push(s.x1) +q.push(s.x2) +q.push(s.xr) +q.push(s.y1) +q.push(s.y2) +q.push(s.bv) +q.push(s.bn) +q.push(s.ac) +q.push(s.ah) +q.push(s.b_) +q.push(s.b6) +q.push(s.K) +q.push(s.a5) +q.push(s.M) +q.push(s.av) +q.push(s.ao) +q.push(s.aM) +q.push(s.aS) +q.push(s.b2) +q.push(s.bB) +q.push(s.ct) +q.push(s.bD) +q.push(s.dg) +q.push(s.R) +q.push(s.S) +q.push(s.aa) +q.push(s.bp) +q.push(s.aN) +q.push(s.cZ) +q.push(s.cL) +q.push(s.d4) +q.push(s.f3) +q.push(s.dh) +q.push(s.c9) +q.push(s.eh) +q.push(s.f4) +q.push(s.eH) +q.push(s.e9) +q.push(s.f5) +q.push(s.d1) +return A.bM(q)}} +A.aVY.prototype={ +$0(){var s=this.a,r=this.b +return s.aOS(r.bT(s.p1),r.bT(s.p2))}, +$S:546} +A.aVW.prototype={ +$2(a,b){return new A.bK(a,b.b0a(this.a.c.i(0,a),this.b),t.sw)}, +$S:547} +A.aVX.prototype={ +$1(a){return!this.a.c.aR(0,a.a)}, +$S:548} +A.a6F.prototype={ +gtq(){var s=this.ch.a +return s==null?this.ay.ax.a:s}, +giZ(){var s=this.ch.b +return s==null?this.ay.ax.b:s}, +guc(){var s=this.ch.c +return s==null?this.ay.ax.c:s}, +gwQ(){var s=this.ch.f +return s==null?this.ay.go:s}, +eR(a){return A.bH3(this.ay,this.ch.eR(a))}} +A.Jj.prototype={ +gL(a){return(A.mR(this.a)^A.mR(this.b))>>>0}, +k(a,b){if(b==null)return!1 +return b instanceof A.Jj&&b.a===this.a&&b.b===this.b}} +A.aiQ.prototype={ +cU(a,b,c){var s,r=this.a,q=r.i(0,b) +if(q!=null)return q +if(r.a===this.b)r.P(0,new A.bk(r,A.w(r).h("bk<1>")).ga9(0)) +s=c.$0() +r.u(0,b,s) +return s}} +A.tN.prototype={ +adx(a){var s=this.a,r=this.b,q=A.U(a.a+new A.i(s,r).a2(0,4).a,0,a.b) +return a.aOP(A.U(a.c+new A.i(s,r).a2(0,4).b,0,a.d),q)}, +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.tN&&b.a===this.a&&b.b===this.b}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +fu(){return this.anj()+"(h: "+A.jq(this.a)+", v: "+A.jq(this.b)+")"}} +A.art.prototype={} +A.aso.prototype={} +A.T4.prototype={ +gDa(){var s=this.e +if(s==null)return s +return A.Yk(new A.aWr(this))}, +gL(a){var s=this +return A.bM([s.a,s.b,s.c,s.d,s.gDa(),s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,s.ay,s.ch,s.CW,s.cx,s.cy,s.db,s.dx,s.dy,s.fr])}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.T4&&J.f(b.a,s.a)&&J.f(b.b,s.b)&&J.f(b.c,s.c)&&J.f(b.d,s.d)&&J.f(b.gDa(),s.gDa())&&J.f(b.f,s.f)&&J.f(b.r,s.r)&&J.f(b.w,s.w)&&J.f(b.x,s.x)&&J.f(b.y,s.y)&&J.f(b.z,s.z)&&J.f(b.Q,s.Q)&&b.as==s.as&&J.f(b.at,s.at)&&J.f(b.ax,s.ax)&&J.f(b.ay,s.ay)&&J.f(b.ch,s.ch)&&J.f(b.CW,s.CW)&&J.f(b.cx,s.cx)&&J.f(b.db,s.db)&&J.f(b.dx,s.dx)&&b.dy==s.dy&&b.fr==s.fr}} +A.aWr.prototype={ +$1(a){var s +if(a.G(0,B.ao)){s=this.a.e +return s==null?t.G.a(s):s}return B.B}, +$S:4} +A.arv.prototype={} +A.T5.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.y,s.x,s.z,s.Q,s.as,s.ax,s.at,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.T5&&J.f(b.a,s.a)&&J.f(b.b,s.b)&&J.f(b.c,s.c)&&J.f(b.d,s.d)&&J.f(b.e,s.e)&&J.f(b.f,s.f)&&J.f(b.r,s.r)&&J.f(b.w,s.w)&&J.f(b.y,s.y)&&J.f(b.x,s.x)&&J.f(b.z,s.z)&&J.f(b.Q,s.Q)&&J.f(b.as,s.as)&&J.f(b.ax,s.ax)&&b.at==s.at}} +A.arz.prototype={} +A.T8.prototype={ +aKj(a){var s,r=this +if(r.a.d!=null){r.aK(new A.aWz(r,a)) +s=r.KR$ +s===$&&A.c() +s.d5(0)}}, +a9l(a){var s=this.a,r=s.d +if(r==null)return +switch(s.c){case!1:r.$1(!0) +break +case!0:r.$1(!1) +break +case null:case void 0:r.$1(!1) +break}this.c.gaF().Au(B.rY)}, +aKh(){return this.a9l(null)}, +a5p(a){var s,r=this +if(r.DP$!=null)r.aK(new A.aWB(r)) +s=r.KR$ +s===$&&A.c() +s.ex(0)}, +aBp(){return this.a5p(null)}, +azH(a){var s,r=this +if(a!==r.DQ$){r.aK(new A.aWw(r,a)) +s=r.WB$ +if(a){s===$&&A.c() +s.d5(0)}else{s===$&&A.c() +s.ex(0)}}}, +azN(a){var s,r=this +if(a!==r.DR$){r.aK(new A.aWx(r,a)) +s=r.Wz$ +if(a){s===$&&A.c() +s.d5(0)}else{s===$&&A.c() +s.ex(0)}}}, +gp6(){var s,r=this,q=A.C(t.EK) +if(r.a.d==null)q.E(0,B.K) +if(r.DR$)q.E(0,B.V) +if(r.DQ$)q.E(0,B.W) +s=r.a.c +if(s!==!1)q.E(0,B.ao) +return q}} +A.aWz.prototype={ +$0(){this.a.DP$=this.b.c}, +$S:0} +A.aWB.prototype={ +$0(){this.a.DP$=null}, +$S:0} +A.aWw.prototype={ +$0(){this.a.DQ$=this.b}, +$S:0} +A.aWx.prototype={ +$0(){this.a.DR$=this.b}, +$S:0} +A.T6.prototype={ +sbe(a,b){var s=this,r=s.a +if(b===r)return +if(r!=null)r.a.ad(0,s.gfa()) +b.a.an(0,s.gfa()) +s.a=b +s.D()}, +saYb(a){var s=this,r=s.b +if(a===r)return +if(r!=null)r.a.ad(0,s.gfa()) +a.a.an(0,s.gfa()) +s.b=a +s.D()}, +saYd(a){var s=this,r=s.c +if(a===r)return +if(r!=null)r.a.ad(0,s.gfa()) +a.a.an(0,s.gfa()) +s.c=a +s.D()}, +saYe(a){var s=this,r=s.d +if(a===r)return +if(r!=null)r.a.ad(0,s.gfa()) +a.a.an(0,s.gfa()) +s.d=a +s.D()}, +sTn(a){if(J.f(this.e,a))return +this.e=a +this.D()}, +sXl(a){if(J.f(this.f,a))return +this.f=a +this.D()}, +saTs(a){if(a.k(0,this.r))return +this.r=a +this.D()}, +saYc(a){if(a.k(0,this.w))return +this.w=a +this.D()}, +sw1(a){if(a.k(0,this.x))return +this.x=a +this.D()}, +srd(a){if(a.k(0,this.y))return +this.y=a +this.D()}, +suG(a){if(a===this.z)return +this.z=a +this.D()}, +sV5(a){if(J.f(a,this.Q))return +this.Q=a +this.D()}, +sEj(a){if(a===this.as)return +this.as=a +this.D()}, +saU6(a){if(a===this.at)return +this.at=a +this.D()}, +t(){var s=this,r=s.a +if(r!=null)r.a.ad(0,s.gfa()) +r=s.b +if(r!=null)r.a.ad(0,s.gfa()) +r=s.c +if(r!=null)r.a.ad(0,s.gfa()) +r=s.d +if(r!=null)r.a.ad(0,s.gfa()) +s.fN()}, +cF(a){return!0}, +zm(a){return null}, +gAt(){return null}, +Gu(a){return!1}, +j(a){return"#"+A.bU(this)}} +A.aiN.prototype={ +bA(a){var s=new A.aod(!0,this.e,null,this.r,B.m,B.b9,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}} +A.aod.prototype={ +dK(a,b){var s,r=this,q=$.bhA +$.bhA=!1 +if(r.gC(0).G(0,b)){s=r.dZ(a,b)||r.V===B.b9 +if((s||r.V===B.dg)&&!$.bhz){$.bhz=!0 +a.E(0,new A.y8(b,r))}}else s=!1 +if(q){$.bhA=!0 +$.bhz=!1}return s}} +A.Tc.prototype={ +b5(){return new A.wM(new A.aMi(),A.C(t.S),B.Y,null,null,B.p)}} +A.wM.prototype={ +gaI_(){this.a.toString +this.f===$&&A.c() +return B.U0}, +gawR(){this.a.toString +this.f===$&&A.c() +return!0}, +gSP(){var s=this.a.c +return s==null?null.aiv():s}, +gtm(){var s,r=this,q=r.w +if(q==null){q=A.cW(null,B.hv,B.jB,null,r) +q.cH() +s=q.eg$ +s.b=!0 +s.a.push(r.gaKs()) +r.w=q}return q}, +aKt(a){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null +$label0$0:{s=A.bqw(h.Q) +r=A.bqw(a) +if(s){q=!r +p=q +o=r}else{o=g +q=o +p=!1}if(p){B.b.P($.Cm,h) +p=h.d +n=p.a +if(n!=null)n.w0() +else p.b=null +break $label0$0}m=!1===s +p=m +if(p){if(s){l=o +k=s}else{l=r +o=l +k=!0}j=!0===l +l=j}else{j=g +k=s +l=!1}if(l){p=h.d +n=p.a +i=$.bg4+1 +if(n!=null){$.bg4=i +n.alq(0,i)}else p.b=$.bg4=i +$.Cm.push(h) +A.aSi(h.gSP()) +break $label0$0}if(s)if(p)p=j +else{if(k)p=o +else{p=r +o=p +k=!0}j=!0===p +p=j}else p=!1 +if(!p)if(m)if(s)p=q +else{q=!1===(k?o:r) +p=q}else p=!1 +else p=!0 +if(p)break $label0$0}h.Q=a}, +aH2(a,b){var s,r,q=this,p=new A.aWE(q,a) +$label0$0:{s=q.gtm().Q +s===$&&A.c() +r=B.Y===s +if(r&&b.a>0){s=q.r +if(s!=null)s.bq(0) +q.r=A.dn(b,p) +break $label0$0}if(r||B.bD===s||B.bE===s||B.af===s)p.$0()}}, +a7W(a){return this.aH2(null,a)}, +BV(a){var s=this,r=s.r +if(r!=null)r.bq(0) +s.r=null +r=s.w +if(r==null)r=null +else{r=r.Q +r===$&&A.c()}switch(r){case null:case void 0:case B.bE:case B.Y:break +case B.bD:case B.af:if(a.a>0){r=s.gtm() +s.r=A.dn(a,r.gai4(r))}else s.gtm().ex(0) +break}}, +aKr(a){var s,r=this +r.a.toString +r.f===$&&A.c() +switch(1){case 1:s=r.x +if(s==null)s=r.x=A.aJD(null,r,null,null,B.a6K) +s.p1=r.gaBq() +s.p2=r.gazU() +s.R8=r.gaAz() +s.Cp(a) +break}}, +azJ(a){var s=this,r=s.y +r=r==null?null:r.CW +if(r!==a.gbP()){r=s.x +r=r==null?null:r.CW +r=r===a.gbP()}else r=!0 +if(r)return +if(s.r==null){r=s.gtm().Q +r===$&&A.c() +r=r===B.Y}else r=!1 +if(r||!t.pY.b(a))return +s.a5q()}, +a5q(){this.a.toString +this.BV(B.G) +this.z.af(0)}, +azV(){var s,r=this,q=r.e +q===$&&A.c() +if(!q)return +q=r.gtm().Q +q===$&&A.c() +s=q===B.Y +if(s)r.gawR() +if(s){q=r.c +q.toString +A.beR(q)}r.a.toString +r.a7W(B.G)}, +aAA(){if(this.z.a!==0)return +this.BV(this.gaI_())}, +aA1(a){var s,r,q,p=this +p.z.E(0,a.gof(a)) +s=A.a5($.Cm).h("bg<1>") +r=A.ab(new A.bg($.Cm,new A.aWD(),s),!0,s.h("z.E")) +for(s=r.length,q=0;q")),this.xn(a,b,s),a.a,null,a.b)}, +zw(a,b){var s=A.bgP(null,!1,t.oA) +return A.P4(new A.lH(s,A.w(s).h("lH<1>")),this.xn(a,b,s),a.a,null,a.b)}, +xn(a,b,c){return this.aCG(a,b,c)}, +aCG(a,b,c){var s=0,r=A.r(t.hP),q,p,o,n,m,l,k,j +var $async$xn=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:m=a.a +l=A.aX_().aG(m) +k=self.window.flutterCanvasKit +s=k!=null?3:5 +break +case 3:k=new A.aM($.aK,t.XC) +p=new A.bH(k,t.m8) +o=A.bPq() +o.open("GET",m,!0) +o.responseType="arraybuffer" +m=t.L +o.addEventListener("load",m.a(A.cd(new A.aLL(o,p,l)))) +o.addEventListener("error",m.a(A.cd(new A.aLM(p)))) +o.send() +s=6 +return A.x(k,$async$xn) +case 6:k=o.response +k.toString +n=A.jM(t.RZ.a(k),0,null) +if(n.byteLength===0)throw A.d(A.boh(A.a4(o,"status"),l)) +j=b +s=7 +return A.x(A.Fn(n),$async$xn) +case 7:q=j.$1(e) +s=1 +break +s=4 +break +case 5:q=$.G().Lk(l,new A.aLN(c)) +s=1 +break +case 4:case 1:return A.p(q,r)}}) +return A.q($async$xn,r)}, +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.Gm&&b.a===this.a&&b.b===this.b}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return'NetworkImage("'+this.a+'", scale: '+B.f.b8(this.b,1)+")"}} +A.aLL.prototype={ +$1(a){var s=this.a,r=s.status,q=r>=200&&r<300,p=r>307&&r<400,o=q||r===0||r===304||p,n=this.b +if(o)n.fC(0,s) +else{n.n_(a) +throw A.d(A.boh(r,this.c))}}, +$S:154} +A.aLM.prototype={ +$1(a){return this.a.n_(a)}, +$S:41} +A.aLN.prototype={ +$2(a,b){this.a.E(0,new A.pq(a,b))}, +$S:551} +A.xO.prototype={ +j(a){var s=this +if(s.gpj(s)===0)return A.bdX(s.gpm(),s.gpn()) +if(s.gpm()===0)return A.bdW(s.gpj(s),s.gpn()) +return A.bdX(s.gpm(),s.gpn())+" + "+A.bdW(s.gpj(s),0)}, +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.xO&&b.gpm()===s.gpm()&&b.gpj(b)===s.gpj(s)&&b.gpn()===s.gpn()}, +gL(a){var s=this +return A.a6(s.gpm(),s.gpj(s),s.gpn(),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.fL.prototype={ +gpm(){return this.a}, +gpj(a){return 0}, +gpn(){return this.b}, +Y(a,b){return new A.fL(this.a-b.a,this.b-b.b)}, +X(a,b){return new A.fL(this.a+b.a,this.b+b.b)}, +a2(a,b){return new A.fL(this.a*b,this.b*b)}, +yn(a){var s=a.a/2,r=a.b/2 +return new A.i(s+this.a*s,r+this.b*r)}, +Jh(a){var s=a.a/2,r=a.b/2 +return new A.i(s+this.a*s,r+this.b*r)}, +Nl(a){var s=a.a,r=(a.c-s)/2,q=a.b,p=(a.d-q)/2 +return new A.i(s+r+this.a*r,q+p+this.b*p)}, +Li(a,b){var s=b.a,r=a.a,q=(b.c-s-r)/2,p=b.b,o=a.b,n=(b.d-p-o)/2 +s=s+q+this.a*q +p=p+n+this.b*n +return new A.A(s,p,s+r,p+o)}, +aG(a){return this}, +j(a){return A.bdX(this.a,this.b)}} +A.jt.prototype={ +gpm(){return 0}, +gpj(a){return this.a}, +gpn(){return this.b}, +Y(a,b){return new A.jt(this.a-b.a,this.b-b.b)}, +X(a,b){return new A.jt(this.a+b.a,this.b+b.b)}, +a2(a,b){return new A.jt(this.a*b,this.b*b)}, +aG(a){var s,r=this +switch(a.a){case 0:s=new A.fL(-r.a,r.b) +break +case 1:s=new A.fL(r.a,r.b) +break +default:s=null}return s}, +j(a){return A.bdW(this.a,this.b)}} +A.alq.prototype={ +a2(a,b){return new A.alq(this.a*b,this.b*b,this.c*b)}, +aG(a){var s,r=this +switch(a.a){case 0:s=new A.fL(r.a-r.b,r.c) +break +case 1:s=new A.fL(r.a+r.b,r.c) +break +default:s=null}return s}, +gpm(){return this.a}, +gpj(a){return this.b}, +gpn(){return this.c}} +A.ad8.prototype={ +j(a){return"TextAlignVertical(y: "+this.a+")"}} +A.H4.prototype={ +W(){return"RenderComparison."+this.b}} +A.a_n.prototype={ +W(){return"Axis."+this.b}} +A.aef.prototype={ +W(){return"VerticalDirection."+this.b}} +A.Dy.prototype={ +W(){return"AxisDirection."+this.b}} +A.PG.prototype={ +af3(a,b,c,d){var s=$.G(),r=a.a +r.toString +return s.oz(r,!1,c,d)}, +aTN(a){return this.af3(a,!1,null,null)}, +af4(a,b){return A.Zg(a,b)}, +aTQ(a){return this.af4(a,null)}, +$iiQ:1} +A.aqK.prototype={ +D(){var s,r,q +for(s=this.a,s=A.cT(s,s.r,A.w(s).c),r=s.$ti.c;s.H();){q=s.d;(q==null?r.a(q):q).$0()}}, +an(a,b){this.a.E(0,b)}, +ad(a,b){this.a.P(0,b)}} +A.L2.prototype={ +Oj(a){var s=this +return new A.VS(s.gjK().Y(0,a.gjK()),s.gm1().Y(0,a.gm1()),s.glV().Y(0,a.glV()),s.gmL().Y(0,a.gmL()),s.gjL().Y(0,a.gjL()),s.gm0().Y(0,a.gm0()),s.gmM().Y(0,a.gmM()),s.glU().Y(0,a.glU()))}, +E(a,b){var s=this +return new A.VS(s.gjK().X(0,b.gjK()),s.gm1().X(0,b.gm1()),s.glV().X(0,b.glV()),s.gmL().X(0,b.gmL()),s.gjL().X(0,b.gjL()),s.gm0().X(0,b.gm0()),s.gmM().X(0,b.gmM()),s.glU().X(0,b.glU()))}, +j(a){var s,r,q,p,o=this +if(o.gjK().k(0,o.gm1())&&o.gm1().k(0,o.glV())&&o.glV().k(0,o.gmL()))if(!o.gjK().k(0,B.P))s=o.gjK().a===o.gjK().b?"BorderRadius.circular("+B.c.b8(o.gjK().a,1)+")":"BorderRadius.all("+o.gjK().j(0)+")" +else s=null +else{r=""+"BorderRadius.only(" +q=!o.gjK().k(0,B.P) +if(q)r+="topLeft: "+o.gjK().j(0) +if(!o.gm1().k(0,B.P)){if(q)r+=", " +r+="topRight: "+o.gm1().j(0) +q=!0}if(!o.glV().k(0,B.P)){if(q)r+=", " +r+="bottomLeft: "+o.glV().j(0) +q=!0}if(!o.gmL().k(0,B.P)){if(q)r+=", " +r+="bottomRight: "+o.gmL().j(0)}r+=")" +s=r.charCodeAt(0)==0?r:r}if(o.gjL().k(0,o.gm0())&&o.gm0().k(0,o.glU())&&o.glU().k(0,o.gmM()))if(!o.gjL().k(0,B.P))p=o.gjL().a===o.gjL().b?"BorderRadiusDirectional.circular("+B.c.b8(o.gjL().a,1)+")":"BorderRadiusDirectional.all("+o.gjL().j(0)+")" +else p=null +else{r=""+"BorderRadiusDirectional.only(" +q=!o.gjL().k(0,B.P) +if(q)r+="topStart: "+o.gjL().j(0) +if(!o.gm0().k(0,B.P)){if(q)r+=", " +r+="topEnd: "+o.gm0().j(0) +q=!0}if(!o.gmM().k(0,B.P)){if(q)r+=", " +r+="bottomStart: "+o.gmM().j(0) +q=!0}if(!o.glU().k(0,B.P)){if(q)r+=", " +r+="bottomEnd: "+o.glU().j(0)}r+=")" +p=r.charCodeAt(0)==0?r:r}r=s==null +if(!r&&p!=null)return A.j(s)+" + "+p +r=r?p:s +return r==null?"BorderRadius.zero":r}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.L2&&b.gjK().k(0,s.gjK())&&b.gm1().k(0,s.gm1())&&b.glV().k(0,s.glV())&&b.gmL().k(0,s.gmL())&&b.gjL().k(0,s.gjL())&&b.gm0().k(0,s.gm0())&&b.gmM().k(0,s.gmM())&&b.glU().k(0,s.glU())}, +gL(a){var s=this +return A.a6(s.gjK(),s.gm1(),s.glV(),s.gmL(),s.gjL(),s.gm0(),s.gmM(),s.glU(),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.dO.prototype={ +gjK(){return this.a}, +gm1(){return this.b}, +glV(){return this.c}, +gmL(){return this.d}, +gjL(){return B.P}, +gm0(){return B.P}, +gmM(){return B.P}, +glU(){return B.P}, +eU(a){var s=this,r=s.a.mY(0,B.P),q=s.b.mY(0,B.P) +return A.aOG(a,s.c.mY(0,B.P),s.d.mY(0,B.P),r,q)}, +Oj(a){if(a instanceof A.dO)return this.Y(0,a) +return this.amL(a)}, +E(a,b){if(b instanceof A.dO)return this.X(0,b) +return this.amK(0,b)}, +Y(a,b){var s=this +return new A.dO(s.a.Y(0,b.a),s.b.Y(0,b.b),s.c.Y(0,b.c),s.d.Y(0,b.d))}, +X(a,b){var s=this +return new A.dO(s.a.X(0,b.a),s.b.X(0,b.b),s.c.X(0,b.c),s.d.X(0,b.d))}, +a2(a,b){var s=this +return new A.dO(s.a.a2(0,b),s.b.a2(0,b),s.c.a2(0,b),s.d.a2(0,b))}, +aG(a){return this}} +A.y5.prototype={ +gjL(){return this.a}, +gm0(){return this.b}, +gmM(){return this.c}, +glU(){return this.d}, +gjK(){return B.P}, +gm1(){return B.P}, +glV(){return B.P}, +gmL(){return B.P}, +Y(a,b){var s=this +return new A.y5(s.a.Y(0,b.a),s.b.Y(0,b.b),s.c.Y(0,b.c),s.d.Y(0,b.d))}, +X(a,b){var s=this +return new A.y5(s.a.X(0,b.a),s.b.X(0,b.b),s.c.X(0,b.c),s.d.X(0,b.d))}, +a2(a,b){var s=this +return new A.y5(s.a.a2(0,b),s.b.a2(0,b),s.c.a2(0,b),s.d.a2(0,b))}, +aG(a){var s=this +switch(a.a){case 0:return new A.dO(s.b,s.a,s.d,s.c) +case 1:return new A.dO(s.a,s.b,s.c,s.d)}}} +A.VS.prototype={ +a2(a,b){var s=this +return new A.VS(s.a.a2(0,b),s.b.a2(0,b),s.c.a2(0,b),s.d.a2(0,b),s.e.a2(0,b),s.f.a2(0,b),s.r.a2(0,b),s.w.a2(0,b))}, +aG(a){var s=this +switch(a.a){case 0:return new A.dO(s.a.X(0,s.f),s.b.X(0,s.e),s.c.X(0,s.w),s.d.X(0,s.r)) +case 1:return new A.dO(s.a.X(0,s.e),s.b.X(0,s.f),s.c.X(0,s.r),s.d.X(0,s.w))}}, +gjK(){return this.a}, +gm1(){return this.b}, +glV(){return this.c}, +gmL(){return this.d}, +gjL(){return this.e}, +gm0(){return this.f}, +gmM(){return this.r}, +glU(){return this.w}} +A.a_X.prototype={ +W(){return"BorderStyle."+this.b}} +A.bL.prototype={ +au(a,b){var s=Math.max(0,this.b*b),r=b<=0?B.b7:this.c +return new A.bL(this.a,s,r,-1)}, +mx(){switch(this.c.a){case 1:var s=$.G().B() +s.sA(0,this.a) +s.sbM(this.b) +s.sU(0,B.u) +return s +case 0:s=$.G().B() +s.sA(0,B.B) +s.sbM(0) +s.sU(0,B.u) +return s}}, +gi2(){return this.b*(1-(1+this.d)/2)}, +gx8(){return this.b*(1+this.d)/2}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.bL&&b.a.k(0,s.a)&&b.b===s.b&&b.c===s.c&&b.d===s.d}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +fu(){return"BorderSide"}} +A.dH.prototype={ +mS(a,b,c){return null}, +E(a,b){return this.mS(0,b,!1)}, +X(a,b){var s=this.E(0,b) +if(s==null)s=b.mS(0,this,!0) +return s==null?new A.nC(A.b([b,this],t.N_)):s}, +hd(a,b){if(a==null)return this.au(0,b) +return null}, +he(a,b){if(a==null)return this.au(0,1-b) +return null}, +ns(a,b,c,d){}, +glE(){return!1}, +j(a){return"ShapeBorder()"}} +A.ht.prototype={ +gog(){var s=Math.max(this.a.gi2(),0) +return new A.aS(s,s,s,s)}, +hd(a,b){if(a==null)return this.au(0,b) +return null}, +he(a,b){if(a==null)return this.au(0,1-b) +return null}} +A.nC.prototype={ +gog(){return B.b.nd(this.a,B.X,new A.b_C())}, +mS(a,b,c){var s,r,q,p=b instanceof A.nC +if(!p){s=this.a +r=c?B.b.ga_(s):B.b.ga9(s) +q=r.mS(0,b,c) +if(q==null)q=b.mS(0,r,!c) +if(q!=null){p=A.ab(s,!0,t.RY) +p[c?p.length-1:0]=q +return new A.nC(p)}}s=A.b([],t.N_) +if(c)B.b.I(s,this.a) +if(p)B.b.I(s,b.a) +else s.push(b) +if(!c)B.b.I(s,this.a) +return new A.nC(s)}, +E(a,b){return this.mS(0,b,!1)}, +au(a,b){var s=this.a,r=A.a5(s).h("W<1,dH>") +return new A.nC(A.ab(new A.W(s,new A.b_E(b),r),!0,r.h("aI.E")))}, +hd(a,b){return A.brd(a,this,b)}, +he(a,b){return A.brd(this,a,b)}, +iC(a,b){var s,r +for(s=this.a,r=0;r") +return new A.W(new A.cz(s,r),new A.b_F(),r.h("W")).cj(0," + ")}} +A.b_C.prototype={ +$2(a,b){return a.E(0,b.gog())}, +$S:554} +A.b_E.prototype={ +$1(a){return a.au(0,this.a)}, +$S:555} +A.b_D.prototype={ +$1(a){return a.glE()}, +$S:556} +A.b_F.prototype={ +$1(a){return a.j(0)}, +$S:557} +A.afZ.prototype={} +A.a01.prototype={ +W(){return"BoxShape."+this.b}} +A.a_Y.prototype={ +mS(a,b,c){return null}, +E(a,b){return this.mS(0,b,!1)}, +iC(a,b){var s=$.G().Z() +s.m3(this.gog().aG(b).UJ(a)) +return s}, +qe(a){return this.iC(a,null)}, +fM(a,b){var s=$.G().Z() +s.m3(a) +return s}, +nN(a){return this.fM(a,null)}, +ns(a,b,c,d){a.b7(b,c)}, +glE(){return!0}} +A.fM.prototype={ +gog(){var s,r=this +if(r.gaaD()){s=r.a.gi2() +return new A.aS(s,s,s,s)}return new A.aS(r.d.gi2(),r.a.gi2(),r.b.gi2(),r.c.gi2())}, +gw7(){var s,r=this,q=r.a,p=q.a,o=r.d +if(o.a.k(0,p)&&r.c.a.k(0,p)&&r.b.a.k(0,p))if(r.gaaD())if(r.gC2()){s=q.d +q=o.d===s&&r.c.d===s&&r.b.d===s}else q=!1 +else q=!1 +else q=!1 +return q}, +gaaD(){var s=this,r=s.a.b +return s.d.b===r&&s.c.b===r&&s.b.b===r}, +gC2(){var s=this,r=s.a.c +return s.d.c===r&&s.c.c===r&&s.b.c===r}, +mS(a,b,c){var s=this +if(b instanceof A.fM&&A.qM(s.a,b.a)&&A.qM(s.b,b.b)&&A.qM(s.c,b.c)&&A.qM(s.d,b.d))return new A.fM(A.nY(s.a,b.a),A.nY(s.b,b.b),A.nY(s.c,b.c),A.nY(s.d,b.d)) +return null}, +E(a,b){return this.mS(0,b,!1)}, +au(a,b){var s=this +return new A.fM(s.a.au(0,b),s.b.au(0,b),s.c.au(0,b),s.d.au(0,b))}, +hd(a,b){if(a instanceof A.fM)return A.be4(a,this,b) +return this.OM(a,b)}, +he(a,b){if(a instanceof A.fM)return A.be4(this,a,b) +return this.ON(a,b)}, +Mf(a,b,c,d,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this +if(e.gw7()){s=e.a +switch(s.c.a){case 0:return +case 1:switch(d.a){case 1:A.bkM(a,b,s) +break +case 0:if(c!=null&&!c.k(0,B.aP)){A.bkN(a,b,s,c) +return}A.bkO(a,b,s) +break}return}}if(e.gC2()&&e.a.c===B.b7)return +r=A.C(t.G) +s=e.a +q=s.c +p=q===B.b7 +if(!p)r.E(0,s.a) +o=e.b +n=o.c +m=n===B.b7 +if(!m)r.E(0,o.a) +l=e.c +k=l.c +j=k===B.b7 +if(!j)r.E(0,l.a) +i=e.d +h=i.c +g=h===B.b7 +if(!g)r.E(0,i.a) +if(!(q===B.J&&s.b===0))if(!(n===B.J&&o.b===0)){if(!(k===B.J&&l.b===0))q=h===B.J&&i.b===0 +else q=!0 +f=q}else f=!0 +else f=!0 +if(r.a===1)if(!f)if(d!==B.uo)q=c!=null&&!c.k(0,B.aP) +else q=!0 +else q=!1 +else q=!1 +if(q){if(p)s=B.C +q=m?B.C:o +p=j?B.C:l +o=g?B.C:i +A.be5(a,b,c,p,r.ga9(0),o,q,d,a0,s) +return}A.biE(a,b,l,i,o,s)}, +jt(a,b,c){return this.Mf(a,b,null,B.aV,c)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.fM&&b.a.k(0,s.a)&&b.b.k(0,s.b)&&b.c.k(0,s.c)&&b.d.k(0,s.d)}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){var s,r,q=this +if(q.gw7())return"Border.all("+q.a.j(0)+")" +s=A.b([],t.T) +r=q.a +if(!r.k(0,B.C))s.push("top: "+r.j(0)) +r=q.b +if(!r.k(0,B.C))s.push("right: "+r.j(0)) +r=q.c +if(!r.k(0,B.C))s.push("bottom: "+r.j(0)) +r=q.d +if(!r.k(0,B.C))s.push("left: "+r.j(0)) +return"Border("+B.b.cj(s,", ")+")"}, +gaj(a){return this.a}} +A.jw.prototype={ +gog(){var s,r=this +if(r.gw7()){s=r.a.gi2() +return new A.kn(s,s,s,s)}return new A.kn(r.b.gi2(),r.a.gi2(),r.c.gi2(),r.d.gi2())}, +gw7(){var s,r,q=this,p=q.a,o=p.a,n=q.b +if(n.a.k(0,o)&&q.d.a.k(0,o)&&q.c.a.k(0,o)){s=p.b +if(n.b===s&&q.d.b===s&&q.c.b===s)if(q.gC2()){r=p.d +p=n.d===r&&q.d.d===r&&q.c.d===r}else p=!1 +else p=!1}else p=!1 +return p}, +gC2(){var s=this,r=s.a.c +return s.b.c===r&&s.d.c===r&&s.c.c===r}, +mS(a,b,c){var s,r,q,p=this,o=null +if(b instanceof A.jw){s=p.a +r=b.a +if(A.qM(s,r)&&A.qM(p.b,b.b)&&A.qM(p.c,b.c)&&A.qM(p.d,b.d))return new A.jw(A.nY(s,r),A.nY(p.b,b.b),A.nY(p.c,b.c),A.nY(p.d,b.d)) +return o}if(b instanceof A.fM){s=b.a +r=p.a +if(!A.qM(s,r)||!A.qM(b.c,p.d))return o +q=p.b +if(!q.k(0,B.C)||!p.c.k(0,B.C)){if(!b.d.k(0,B.C)||!b.b.k(0,B.C))return o +return new A.jw(A.nY(s,r),q,p.c,A.nY(b.c,p.d))}return new A.fM(A.nY(s,r),b.b,A.nY(b.c,p.d),b.d)}return o}, +E(a,b){return this.mS(0,b,!1)}, +au(a,b){var s=this +return new A.jw(s.a.au(0,b),s.b.au(0,b),s.c.au(0,b),s.d.au(0,b))}, +hd(a,b){if(a instanceof A.jw)return A.be3(a,this,b) +return this.OM(a,b)}, +he(a,b){if(a instanceof A.jw)return A.be3(this,a,b) +return this.ON(a,b)}, +Mf(a,a0,a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=null +if(c.gw7()){s=c.a +switch(s.c.a){case 0:return +case 1:switch(a2.a){case 1:A.bkM(a,a0,s) +break +case 0:if(a1!=null&&!a1.k(0,B.aP)){A.bkN(a,a0,s,a1) +return}A.bkO(a,a0,s) +break}return}}if(c.gC2()&&c.a.c===B.b7)return +switch(a3.a){case 0:s=new A.bI(c.c,c.b) +break +case 1:s=new A.bI(c.b,c.c) +break +default:s=b}r=s.a +q=s.b +p=q +o=r +n=A.C(t.G) +s=c.a +m=s.c +l=m===B.b7 +if(!l)n.E(0,s.a) +k=c.c +j=k.c +if(j!==B.b7)n.E(0,k.a) +i=c.d +h=i.c +g=h===B.b7 +if(!g)n.E(0,i.a) +f=c.b +e=f.c +if(e!==B.b7)n.E(0,f.a) +if(!(m===B.J&&s.b===0))if(!(j===B.J&&k.b===0)){if(!(h===B.J&&i.b===0))m=e===B.J&&f.b===0 +else m=!0 +d=m}else d=!0 +else d=!0 +if(n.a===1)if(!d)if(a2!==B.uo)m=a1!=null&&!a1.k(0,B.aP) +else m=!0 +else m=!1 +else m=!1 +if(m){if(l)s=B.C +m=p.c===B.b7?B.C:p +l=g?B.C:i +k=o.c===B.b7?B.C:o +A.be5(a,a0,a1,l,n.ga9(0),k,m,a2,a3,s) +return}A.biE(a,a0,i,o,p,s)}, +jt(a,b,c){return this.Mf(a,b,null,B.aV,c)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.jw&&b.a.k(0,s.a)&&b.b.k(0,s.b)&&b.c.k(0,s.c)&&b.d.k(0,s.d)}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){var s=this,r=A.b([],t.T),q=s.a +if(!q.k(0,B.C))r.push("top: "+q.j(0)) +q=s.b +if(!q.k(0,B.C))r.push("start: "+q.j(0)) +q=s.c +if(!q.k(0,B.C))r.push("end: "+q.j(0)) +q=s.d +if(!q.k(0,B.C))r.push("bottom: "+q.j(0)) +return"BorderDirectional("+B.b.cj(r,", ")+")"}, +gaj(a){return this.a}} +A.fc.prototype={ +geP(a){var s=this.c +s=s==null?null:s.gog() +return s==null?B.X:s}, +Nt(a,b){var s,r,q +switch(this.w.a){case 1:s=A.jT(a.gbC(),a.giF()/2) +r=$.G().Z() +r.hq(s) +return r +case 0:r=this.d +if(r!=null){q=$.G().Z() +q.h_(r.aG(b).eU(a)) +return q}r=$.G().Z() +r.m3(a) +return r}}, +au(a,b){var s=this,r=null,q=A.Z(r,s.a,b),p=A.beo(r,s.b,b),o=A.bkP(r,s.c,b),n=A.p4(r,s.d,b),m=A.be6(r,s.e,b) +return new A.fc(q,p,o,n,m,r,s.w)}, +gLq(){return this.e!=null}, +hd(a,b){if(a==null)return this.au(0,b) +if(a instanceof A.fc)return A.bkR(a,this,b) +return this.a0C(a,b)}, +he(a,b){if(a==null)return this.au(0,1-b) +if(a instanceof A.fc)return A.bkR(this,a,b) +return this.a0D(a,b)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.fc)if(J.f(b.a,r.a))if(J.f(b.b,r.b))if(J.f(b.c,r.c))if(J.f(b.d,r.d))if(A.eu(b.e,r.e))s=b.w===r.w +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +gL(a){var s=this,r=s.e +r=r==null?null:A.bM(r) +return A.a6(s.a,s.b,s.c,s.d,r,s.f,null,s.w,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +Xh(a,b,c){var s +switch(this.w.a){case 0:s=this.d +if(s!=null)return s.aG(c).eU(new A.A(0,0,0+a.a,0+a.b)).G(0,b) +return!0 +case 1:return b.Y(0,a.ob(B.h)).ge6()<=Math.min(a.a,a.b)/2}}, +D3(a){return new A.U1(this,a)}} +A.U1.prototype={ +a6J(a,b,c,d){var s=this.b +switch(s.w.a){case 1:a.cs(b.gbC(),b.giF()/2,c) +break +case 0:s=s.d +if(s==null||s.k(0,B.aP))a.b7(b,c) +else a.dm(s.aG(d).eU(b),c) +break}}, +atT(a,b,c){var s,r,q,p,o,n,m=this.b.e +if(m==null)return +for(s=m.length,r=0;r0?n*0.57735+0.5:0)) +o=b.dz(q.b) +n=q.d +this.a6J(a,new A.A(o.a-n,o.b-n,o.c+n,o.d+n),p,c)}}, +aEr(a,b,c){var s,r,q,p=this,o=p.b,n=o.b +if(n==null)return +if(p.e==null){s=p.a +s.toString +p.e=n.K0(s)}switch(o.w.a){case 1:r=A.jT(b.gbC(),b.giF()/2) +q=$.G().Z() +q.hq(r) +break +case 0:o=o.d +if(o!=null){q=$.G().Z() +q.h_(o.aG(c.d).eU(b))}else q=null +break +default:q=null}p.e.EV(a,b,q,c)}, +t(){var s=this.e +if(s!=null)s.t() +this.a0A()}, +mt(a,b,c){var s,r=this,q=c.e,p=b.a,o=b.b,n=new A.A(p,o,p+q.a,o+q.b),m=c.d +r.atT(a,n,m) +q=r.b +p=q.a +if(p!=null){o=r.c +if(o==null){s=$.G().B() +s.sA(0,p) +r.c=s +p=s}else p=o +p.toString +r.a6J(a,n,p,m)}r.aEr(a,n,c) +p=q.c +if(p!=null){o=q.d +o=o==null?null:o.aG(m) +p.Mf(a,n,o,q.w,m)}}, +j(a){return"BoxPainter for "+this.b.j(0)}} +A.a_Z.prototype={ +W(){return"BoxFit."+this.b}} +A.a3C.prototype={} +A.cx.prototype={ +mx(){var s=$.G().B() +s.sA(0,this.a) +s.snk(new A.pF(this.e,A.bJS(this.c))) +return s}, +au(a,b){var s=this +return new A.cx(s.d*b,s.e,s.a,s.b.a2(0,b),s.c*b)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.cx&&b.a.k(0,s.a)&&b.b.k(0,s.b)&&b.c===s.c&&b.d===s.d&&b.e===s.e}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){var s=this +return"BoxShadow("+s.a.j(0)+", "+s.b.j(0)+", "+A.jq(s.c)+", "+A.jq(s.d)+", "+s.e.j(0)+")"}} +A.hK.prototype={ +au(a,b){return new A.hK(this.b,this.a.au(0,b))}, +hd(a,b){var s,r +if(a instanceof A.hK){s=A.bJ(a.a,this.a,b) +r=A.ap(a.b,this.b,b) +r.toString +return new A.hK(A.U(r,0,1),s)}return this.xd(a,b)}, +he(a,b){var s,r +if(a instanceof A.hK){s=A.bJ(this.a,a.a,b) +r=A.ap(this.b,a.b,b) +r.toString +return new A.hK(A.U(r,0,1),s)}return this.xe(a,b)}, +iC(a,b){var s=$.G().Z() +s.hq(this.H5(a).ei(-this.a.gi2())) +return s}, +qe(a){return this.iC(a,null)}, +fM(a,b){var s=$.G().Z() +s.hq(this.H5(a)) +return s}, +nN(a){return this.fM(a,null)}, +ns(a,b,c,d){if(this.b===0)a.cs(b.gbC(),b.giF()/2,c) +else a.z0(this.H5(b),c)}, +glE(){return!0}, +qV(a){var s=a==null?this.a:a +return new A.hK(this.b,s)}, +jt(a,b,c){var s,r=this.a +switch(r.c.a){case 0:break +case 1:s=r.b*r.d +if(this.b===0)a.cs(b.gbC(),(b.giF()+s)/2,r.mx()) +else a.z0(this.H5(b).ei(s/2),r.mx()) +break}}, +aO(a,b){return this.jt(a,b,null)}, +H5(a){var s,r=this.b +if(r===0||a.gaH(a)-a.gae(a)===a.gaQ(a)-a.gaj(a))return A.jT(a.gbC(),a.giF()/2) +r=1-r +if(a.gaH(a)-a.gae(a)").b(b)&&A.av7(b.b,s.b)}, +gL(a){return A.a6(A.J(this),this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"ColorSwatch(primary value: "+this.amV(0)+")"}} +A.km.prototype={ +fu(){return"Decoration"}, +geP(a){return B.X}, +gLq(){return!1}, +hd(a,b){return null}, +he(a,b){return null}, +Xh(a,b,c){return!0}, +Nt(a,b){throw A.d(A.af("This Decoration subclass does not expect to be used for clipping."))}} +A.uB.prototype={ +t(){}} +A.ahD.prototype={} +A.vi.prototype={ +W(){return"ImageRepeat."+this.b}} +A.afR.prototype={ +K0(a){var s,r=this.a +r=r==null?null:r.K0(a) +s=this.b +s=s==null?null:s.K0(a) +return new A.aZ7(r,s,this.c)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.afR&&J.f(b.a,s.a)&&J.f(b.b,s.b)&&b.c===s.c}, +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"_BlendedDecorationImage("+A.j(this.a)+", "+A.j(this.b)+", "+A.j(this.c)+")"}} +A.aZ7.prototype={ +Yy(a,b,c,d,e,f){var s,r,q=this +a.hl(null,$.G().B()) +s=q.a +r=s==null +if(!r)s.Yy(a,b,c,d,e*(1-q.c),f) +s=q.b +if(s!=null){r=!r?B.j_:f +s.Yy(a,b,c,d,e*q.c,r)}a.bw(0)}, +EV(a,b,c,d){return this.Yy(a,b,c,d,1,B.bF)}, +t(){var s=this.a +if(s!=null)s.t() +s=this.b +if(s!=null)s.t()}, +j(a){return"_BlendedDecorationImagePainter("+A.j(this.a)+", "+A.j(this.b)+", "+A.j(this.c)+")"}} +A.f0.prototype={ +ge_(){var s=this +return s.gjF(s)+s.gjI(s)+s.gli(s)+s.glj()}, +aMk(a){var s,r=this +switch(a.a){case 0:s=r.ge_() +break +case 1:s=r.gcO(r)+r.gcX(r) +break +default:s=null}return s}, +E(a,b){var s=this +return new A.xd(s.gjF(s)+b.gjF(b),s.gjI(s)+b.gjI(b),s.gli(s)+b.gli(b),s.glj()+b.glj(),s.gcO(s)+b.gcO(b),s.gcX(s)+b.gcX(b))}, +bX(a,b,c){var s=this +return new A.xd(A.U(s.gjF(s),b.a,c.a),A.U(s.gjI(s),b.c,c.b),A.U(s.gli(s),0,c.c),A.U(s.glj(),0,c.d),A.U(s.gcO(s),b.b,c.e),A.U(s.gcX(s),b.d,c.f))}, +j(a){var s=this +if(s.gli(s)===0&&s.glj()===0){if(s.gjF(s)===0&&s.gjI(s)===0&&s.gcO(s)===0&&s.gcX(s)===0)return"EdgeInsets.zero" +if(s.gjF(s)===s.gjI(s)&&s.gjI(s)===s.gcO(s)&&s.gcO(s)===s.gcX(s))return"EdgeInsets.all("+B.c.b8(s.gjF(s),1)+")" +return"EdgeInsets("+B.c.b8(s.gjF(s),1)+", "+B.c.b8(s.gcO(s),1)+", "+B.c.b8(s.gjI(s),1)+", "+B.c.b8(s.gcX(s),1)+")"}if(s.gjF(s)===0&&s.gjI(s)===0)return"EdgeInsetsDirectional("+B.c.b8(s.gli(s),1)+", "+B.c.b8(s.gcO(s),1)+", "+B.c.b8(s.glj(),1)+", "+B.c.b8(s.gcX(s),1)+")" +return"EdgeInsets("+B.c.b8(s.gjF(s),1)+", "+B.c.b8(s.gcO(s),1)+", "+B.c.b8(s.gjI(s),1)+", "+B.c.b8(s.gcX(s),1)+") + EdgeInsetsDirectional("+B.c.b8(s.gli(s),1)+", 0.0, "+B.c.b8(s.glj(),1)+", 0.0)"}, +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.f0&&b.gjF(b)===s.gjF(s)&&b.gjI(b)===s.gjI(s)&&b.gli(b)===s.gli(s)&&b.glj()===s.glj()&&b.gcO(b)===s.gcO(s)&&b.gcX(b)===s.gcX(s)}, +gL(a){var s=this +return A.a6(s.gjF(s),s.gjI(s),s.gli(s),s.glj(),s.gcO(s),s.gcX(s),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aS.prototype={ +gjF(a){return this.a}, +gcO(a){return this.b}, +gjI(a){return this.c}, +gcX(a){return this.d}, +gli(a){return 0}, +glj(){return 0}, +Lg(a){var s=this +return new A.A(a.gae(a)-s.a,a.gaj(a)-s.b,a.gaH(a)+s.c,a.gaQ(a)+s.d)}, +UJ(a){var s=this +return new A.A(a.a+s.a,a.b+s.b,a.c-s.c,a.d-s.d)}, +E(a,b){if(b instanceof A.aS)return this.X(0,b) +return this.a0H(0,b)}, +bX(a,b,c){var s=this +return new A.aS(A.U(s.a,b.a,c.a),A.U(s.b,b.b,c.e),A.U(s.c,b.c,c.b),A.U(s.d,b.d,c.f))}, +Y(a,b){var s=this +return new A.aS(s.a-b.a,s.b-b.b,s.c-b.c,s.d-b.d)}, +X(a,b){var s=this +return new A.aS(s.a+b.a,s.b+b.b,s.c+b.c,s.d+b.d)}, +a2(a,b){var s=this +return new A.aS(s.a*b,s.b*b,s.c*b,s.d*b)}, +aG(a){return this}, +vt(a,b,c,d){var s=this,r=b==null?s.a:b,q=d==null?s.b:d,p=c==null?s.c:c +return new A.aS(r,q,p,a==null?s.d:a)}, +JP(a){return this.vt(a,null,null,null)}, +aOF(a,b){return this.vt(a,null,null,b)}, +aON(a,b){return this.vt(null,a,b,null)}} +A.kn.prototype={ +gli(a){return this.a}, +gcO(a){return this.b}, +glj(){return this.c}, +gcX(a){return this.d}, +gjF(a){return 0}, +gjI(a){return 0}, +E(a,b){if(b instanceof A.kn)return this.X(0,b) +return this.a0H(0,b)}, +Y(a,b){var s=this +return new A.kn(s.a-b.a,s.b-b.b,s.c-b.c,s.d-b.d)}, +X(a,b){var s=this +return new A.kn(s.a+b.a,s.b+b.b,s.c+b.c,s.d+b.d)}, +a2(a,b){var s=this +return new A.kn(s.a*b,s.b*b,s.c*b,s.d*b)}, +aG(a){var s,r=this +switch(a.a){case 0:s=new A.aS(r.c,r.b,r.a,r.d) +break +case 1:s=new A.aS(r.a,r.b,r.c,r.d) +break +default:s=null}return s}} +A.xd.prototype={ +a2(a,b){var s=this +return new A.xd(s.a*b,s.b*b,s.c*b,s.d*b,s.e*b,s.f*b)}, +aG(a){var s,r=this +switch(a.a){case 0:s=new A.aS(r.d+r.a,r.e,r.c+r.b,r.f) +break +case 1:s=new A.aS(r.c+r.a,r.e,r.d+r.b,r.f) +break +default:s=null}return s}, +gjF(a){return this.a}, +gjI(a){return this.b}, +gli(a){return this.c}, +glj(){return this.d}, +gcO(a){return this.e}, +gcX(a){return this.f}} +A.aGb.prototype={ +Rd(){var s,r,q,p=this.b +if(p!=null)return p +p=this.a.length +s=1/(p-1) +r=J.vs(p,t.V) +for(q=0;q").ak(q.y[1]),r=new A.bt(J.az(r.a),r.b,q.h("bt<1,2>")),q=q.y[1];r.H();){p=r.a;(p==null?q.a(p):p).t()}s.af(0) +for(s=this.a,r=s.gbm(0),q=A.w(r),q=q.h("@<1>").ak(q.y[1]),r=new A.bt(J.az(r.a),r.b,q.h("bt<1,2>")),q=q.y[1];r.H();){p=r.a +if(p==null)p=q.a(p) +p.a.ad(0,p.b)}s.af(0) +this.f=0}, +Vu(a){var s,r,q,p=this,o=p.c.P(0,a) +if(o!=null){s=o.a +r=o.d +r===$&&A.c() +if(s.x)A.X(A.ad(u.V)) +B.b.P(s.y,r) +o.a1u()}q=p.a.P(0,a) +if(q!=null){q.a.ad(0,q.b) +return!0}o=p.b.P(0,a) +if(o!=null){s=p.f +r=o.b +r.toString +p.f=s-r +o.t() +return!0}return!1}, +a9q(a,b,c){var s,r=this,q=b.b +if(q!=null)s=q<=104857600 +else s=!1 +if(s){s=r.f +q.toString +r.f=s+q +r.b.u(0,a,b) +r.auv(c)}else b.t()}, +SQ(a,b,c){var s=this.c.cU(0,a,new A.aH9(this,b,a)) +if(s.b==null)s.b=c}, +YQ(a,b,c,d){var s,r,q,p,o,n,m,l=this,k=null,j={},i=l.a,h=i.i(0,b),g=h==null?k:h.a +j.a=g +if(g!=null)return g +h=l.b +q=h.P(0,b) +if(q!=null){j=q.a +l.SQ(b,j,q.b) +h.u(0,b,q) +return j}p=l.c.i(0,b) +if(p!=null){j=p.a +i=p.b +if(j.x)A.X(A.ad(u.V)) +h=new A.Fm(j) +h.GR(j) +l.a9q(b,new A.U6(j,i,h),k) +return j}try{g=j.a=c.$0() +l.SQ(b,g,k) +h=g}catch(o){s=A.b2(o) +r=A.bC(o) +if(d!=null){d.$2(s,r) +return k}else throw o}j.b=!1 +n=A.bn("pendingImage") +m=new A.kq(new A.aHa(j,l,b,!0,k,n),k,k) +n.b=new A.amE(h,m) +i.u(0,b,n.bl()) +j.a.an(0,m) +return j.a}, +cU(a,b,c){return this.YQ(0,b,c,null)}, +auv(a){var s,r,q,p,o,n=this,m=n.b,l=A.w(m).h("bk<1>") +while(!0){if(!(n.f>104857600||m.a>1000))break +s=new A.bk(m,l).gar(0) +if(!s.H())A.X(A.cy()) +r=s.ga1(0) +q=m.i(0,r) +p=n.f +o=q.b +o.toString +n.f=p-o +q.t() +m.P(0,r)}}} +A.aH9.prototype={ +$0(){return A.bNb(this.b,new A.aH8(this.a,this.c))}, +$S:558} +A.aH8.prototype={ +$0(){this.a.c.P(0,this.b)}, +$S:0} +A.aHa.prototype={ +$2(a,b){var s,r,q,p,o,n=this +if(a!=null){s=a.a +r=s.gb9(s)*s.gbW(s)*4 +s.t()}else r=null +s=n.a +q=s.a +if(q.x)A.X(A.ad(u.V)) +p=new A.Fm(q) +p.GR(q) +o=new A.U6(q,r,p) +p=n.b +q=n.c +p.SQ(q,s.a,r) +if(n.d)p.a9q(q,o,n.e) +else o.t() +p.a.P(0,q) +if(!s.b){q=n.f.bl() +q.a.ad(0,q.b)}s.b=!0}, +$S:559} +A.agk.prototype={ +t(){$.cN.dP$.push(new A.aZX(this))}} +A.aZX.prototype={ +$1(a){var s=this.a,r=s.c +if(r!=null)r.t() +s.c=null}, +$S:3} +A.U6.prototype={} +A.Jr.prototype={ +at3(a,b,c){var s=new A.b3B(this,b) +this.d=s +if(a.x)A.X(A.ad(u.V)) +a.y.push(s)}, +j(a){return"#"+A.bU(this)}} +A.b3B.prototype={ +$0(){var s,r,q +this.b.$0() +s=this.a +r=s.a +q=s.d +q===$&&A.c() +if(r.x)A.X(A.ad(u.V)) +B.b.P(r.y,q) +s.a1u()}, +$S:0} +A.amE.prototype={} +A.zG.prototype={ +Uj(a){var s=this +return new A.zG(s.a,s.b,s.c,s.d,a,s.f)}, +k(a,b){var s=this +if(b==null)return!1 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.zG&&b.a==s.a&&b.b==s.b&&J.f(b.c,s.c)&&b.d==s.d&&J.f(b.e,s.e)&&b.f==s.f}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.e,s.f,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){var s=this,r=""+"ImageConfiguration(",q=s.a,p=q!=null +if(p)r+="bundle: "+q.j(0) +q=s.b +if(q!=null){if(p)r+=", " +q=r+("devicePixelRatio: "+B.c.b8(q,1)) +r=q +p=!0}q=s.c +if(q!=null){if(p)r+=", " +q=r+("locale: "+q.j(0)) +r=q +p=!0}q=s.d +if(q!=null){if(p)r+=", " +q=r+("textDirection: "+q.j(0)) +r=q +p=!0}q=s.e +if(q!=null){if(p)r+=", " +q=r+("size: "+q.j(0)) +r=q +p=!0}q=s.f +if(q!=null){if(p)r+=", " +q=r+("platform: "+q.b) +r=q}r+=")" +return r.charCodeAt(0)==0?r:r}} +A.iI.prototype={ +aG(a){var s=new A.aHn() +this.avB(a,new A.aHj(this,a,s),new A.aHk(this,a,s)) +return s}, +avB(a,b,c){var s,r,q,p,o,n={} +n.a=null +n.b=!1 +s=new A.aHg(n,c) +r=null +try{r=this.EJ(a)}catch(o){q=A.b2(o) +p=A.bC(o) +s.$2(q,p) +return}r.cu(new A.aHf(n,this,b,s),t.H).ts(s)}, +Fj(a,b,c,d){var s,r +if(b.a!=null){s=$.jN.fV$ +s===$&&A.c() +s.YQ(0,c,new A.aHh(b),d) +return}s=$.jN.fV$ +s===$&&A.c() +r=s.YQ(0,c,new A.aHi(this,c),d) +if(r!=null)b.a0_(r)}, +zv(a,b){return A.br9()}, +zw(a,b){return A.br9()}, +j(a){return"ImageConfiguration()"}} +A.aHj.prototype={ +$2(a,b){this.a.Fj(this.b,this.c,a,b)}, +$S(){return A.w(this.a).h("~(iI.T,~(B,eh?))")}} +A.aHk.prototype={ +$3(a,b,c){return this.ajw(a,b,c)}, +ajw(a,b,c){var s=0,r=A.r(t.H),q=this,p +var $async$$3=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:p=A.cO(null,t.P) +s=2 +return A.x(p,$async$$3) +case 2:p=q.c +if(p.a==null)p.a0_(new A.b1t(A.b([],t.XZ),A.b([],t.SM),A.b([],t.u))) +p=p.a +p.toString +p.A_(A.cn("while resolving an image"),b,null,!0,c) +return A.p(null,r)}}) +return A.q($async$$3,r)}, +$S(){return A.w(this.a).h("an<~>(iI.T?,B,eh?)")}} +A.aHg.prototype={ +ajv(a,b){var s=0,r=A.r(t.H),q,p=this,o +var $async$$2=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:o=p.a +if(o.b){s=1 +break}o.b=!0 +p.b.$3(o.a,a,b) +case 1:return A.p(q,r)}}) +return A.q($async$$2,r)}, +$2(a,b){return this.ajv(a,b)}, +$S:560} +A.aHf.prototype={ +$1(a){var s,r,q,p=this +p.a.a=a +try{p.c.$2(a,p.d)}catch(q){s=A.b2(q) +r=A.bC(q) +p.d.$2(s,r)}}, +$S(){return A.w(this.b).h("bR(iI.T)")}} +A.aHh.prototype={ +$0(){var s=this.a.a +s.toString +return s}, +$S:173} +A.aHi.prototype={ +$0(){var s=this.a,r=this.b,q=s.zw(r,$.jN.gaTP()) +return q instanceof A.af3?s.zv(r,$.jN.gaTM()):q}, +$S:173} +A.af3.prototype={} +A.p3.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.p3&&b.a===s.a&&b.b===s.b&&b.c===s.c}, +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"AssetBundleImageKey(bundle: "+this.a.j(0)+', name: "'+this.b+'", scale: '+A.j(this.c)+")"}} +A.a_b.prototype={ +zw(a,b){return A.P4(null,this.o3(a,b),a.b,null,a.c)}, +zv(a,b){return A.P4(null,this.o3(a,b),a.b,null,a.c)}, +o3(a,b){return this.aCE(a,b)}, +aCE(a,b){var s=0,r=A.r(t.hP),q,p=2,o,n,m,l,k +var $async$o3=A.t(function(c,d){if(c===1){o=d +s=p}while(true)switch(s){case 0:l=null +p=4 +s=7 +return A.x(a.a.LB(a.b),$async$o3) +case 7:l=d +p=2 +s=6 +break +case 4:p=3 +k=o +if(A.b2(k) instanceof A.zd){m=$.jN.fV$ +m===$&&A.c() +m.Vu(a) +throw k}else throw k +s=6 +break +case 3:s=2 +break +case 6:q=b.$1(l) +s=1 +break +case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$o3,r)}} +A.pI.prototype={ +EJ(a){return new A.d9(this,t.Q6)}, +zv(a,b){return A.P4(null,this.o3(a,b),"MemoryImage("+("#"+A.bU(a.a))+")",null,a.b)}, +zw(a,b){return A.P4(null,this.o3(a,b),"MemoryImage("+("#"+A.bU(a.a))+")",null,a.b)}, +o3(a,b){return this.aCF(a,b)}, +aCF(a,b){var s=0,r=A.r(t.hP),q,p=this,o +var $async$o3=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:o=b +s=3 +return A.x(A.Fn(p.a),$async$o3) +case 3:q=o.$1(d) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$o3,r)}, +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.pI&&b.a===this.a&&b.b===this.b}, +gL(a){return A.a6(J.a1(this.a),this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"MemoryImage("+("#"+A.bU(this.a))+", scale: "+B.f.b8(this.b,1)+")"}} +A.b1t.prototype={} +A.a7u.prototype={ +j(a){return this.b}, +$ic4:1} +A.Du.prototype={ +gni(){return this.a}, +EJ(a){var s,r={},q=a.a +if(q==null)q=$.l3() +r.a=r.b=null +s=t.P +A.bFt(A.bC2(q).cu(new A.awq(r,this,a,q),s),new A.awr(r),s,t.K) +s=r.a +if(s!=null)return s +s=new A.aM($.aK,t.Lv) +r.b=new A.bH(s,t.h8) +return s}, +auL(a,b,c){var s,r,q,p,o +if(c==null||c.length===0||b.b==null)return new A.uu(null,a) +s=A.bgL(t.V,t.pR) +for(r=c.length,q=0;q(r+q)/2){s=a.i(0,q) +s.toString +return s}else{s=a.i(0,r) +s.toString +return s}}, +k(a,b){var s +if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +if(b instanceof A.Du)s=b.gni()===this.gni() +else s=!1 +return s}, +gL(a){return A.a6(this.gni(),this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"AssetImage(bundle: "+A.j(this.b)+', name: "'+this.gni()+'")'}} +A.awq.prototype={ +$1(a){var s,r,q=this,p=q.b,o=a.ajL(p.gni()),n=p.auL(p.gni(),q.c,o) +p=n.a +if(p==null)p=1 +s=new A.p3(q.d,n.b,p) +p=q.a +r=p.b +if(r!=null)r.fC(0,s) +else p.a=new A.d9(s,t.Gu)}, +$S:562} +A.awr.prototype={ +$2(a,b){this.a.b.lq(a,b)}, +$S:33} +A.j8.prototype={ +eG(a){return new A.j8(this.a.eG(0),this.b,this.c)}, +j(a){var s=this.c +s=s!=null?s+" ":"" +return s+this.a.j(0)+" @ "+A.jq(this.b)+"x"}, +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.j8&&b.a===s.a&&b.b===s.b&&b.c==s.c}} +A.kq.prototype={ +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.kq&&J.f(b.a,s.a)&&J.f(b.b,s.b)&&J.f(b.c,s.c)}, +aWk(a,b){return this.a.$2(a,b)}} +A.pq.prototype={} +A.aHn.prototype={ +a0_(a){var s,r=this +r.a=a +s=r.b +if(s!=null){r.b=null +a.r=!0 +B.b.al(s,a.gJb(a)) +r.a.r=!1}}, +an(a,b){var s=this.a +if(s!=null)return s.an(0,b) +s=this.b;(s==null?this.b=A.b([],t.XZ):s).push(b)}, +ad(a,b){var s,r=this.a +if(r!=null)return r.ad(0,b) +for(s=0;r=this.b,s")),t.kE),!0,t.Lp) +n=i.b +B.b.I(o,n) +B.b.af(n) +s=!1 +for(n=o.length,m=0;m")),r),!0,r.h("z.E")) +for(s=q.length,p=0;p=s.a}else r=!0 +if(r){s=p.ax +p.a3X(new A.j8(s.giv(s).eG(0),p.as,p.e)) +p.ay=a +s=p.ax +p.ch=s.gKr(s) +s=p.ax +s.giv(s).t() +p.ax=null +q=B.f.eY(p.CW,p.Q.gDV()) +if(p.Q.gMQ()===-1||q<=p.Q.gMQ())p.xC() +return}s.toString +r=p.ay +r===$&&A.c() +p.cx=A.dn(new A.bv(B.f.ai(s.a-(a.a-r.a))),new A.aLb(p))}, +xC(){var s=0,r=A.r(t.H),q,p=2,o,n=this,m,l,k,j,i +var $async$xC=A.t(function(a,b){if(a===1){o=b +s=p}while(true)switch(s){case 0:j=n.ax +if(j!=null)j.giv(j).t() +n.ax=null +p=4 +s=7 +return A.x(n.Q.lK(),$async$xC) +case 7:n.ax=b +p=2 +s=6 +break +case 4:p=3 +i=o +m=A.b2(i) +l=A.bC(i) +n.A_(A.cn("resolving an image frame"),m,n.at,!0,l) +s=1 +break +s=6 +break +case 3:s=2 +break +case 6:if(n.Q.gDV()===1){if(n.a.length===0){s=1 +break}j=n.ax +n.a3X(new A.j8(j.giv(j).eG(0),n.as,n.e)) +j=n.ax +j.giv(j).t() +n.ax=null +s=1 +break}n.a7P() +case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$xC,r)}, +a7P(){if(this.cy)return +this.cy=!0 +$.cN.Ga(this.gayJ())}, +a3X(a){this.a05(a);++this.CW}, +an(a,b){var s,r=this +if(r.a.length===0){s=r.Q +if(s!=null)s=r.c==null||s.gDV()>1 +else s=!1}else s=!1 +if(s)r.xC() +r.anK(0,b)}, +ad(a,b){var s,r=this +r.anL(0,b) +if(r.a.length===0){s=r.cx +if(s!=null)s.bq(0) +r.cx=null}}, +HR(){var s,r=this +r.anJ() +if(r.x){s=r.z +if(s!=null)s.zG(null) +s=r.z +if(s!=null)s.bq(0) +r.z=null}}} +A.aLc.prototype={ +$2(a,b){this.a.A_(A.cn("resolving an image codec"),a,this.b,!0,b)}, +$S:33} +A.aLd.prototype={ +$2(a,b){this.a.A_(A.cn("loading an image"),a,this.b,!0,b)}, +$S:33} +A.aLb.prototype={ +$0(){this.a.a7P()}, +$S:0} +A.ak7.prototype={} +A.ak9.prototype={} +A.ak8.prototype={} +A.ZG.prototype={} +A.ry.prototype={ +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.ry&&b.a===s.a&&b.b==s.b&&b.c==s.c&&b.d===s.d&&A.eu(b.f,s.f)}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"InlineSpanSemanticsInformation{text: "+this.a+", semanticsLabel: "+A.j(this.b)+", recognizer: "+A.j(this.c)+"}"}} +A.ia.prototype={ +a_A(a){var s={} +s.a=null +this.cc(new A.aHN(s,a,new A.ZG())) +return s.a}, +FB(a){var s,r=new A.d8("") +this.CZ(r,!0,a) +s=r.a +return s.charCodeAt(0)==0?s:s}, +aiv(){return this.FB(!0)}, +qT(a,b){var s={} +if(b<0)return null +s.a=null +this.cc(new A.aHM(s,b,new A.ZG())) +return s.a}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.ia&&J.f(b.a,this.a)}, +gL(a){return J.a1(this.a)}} +A.aHN.prototype={ +$1(a){var s=a.a_B(this.b,this.c) +this.a.a=s +return s==null}, +$S:86} +A.aHM.prototype={ +$1(a){var s=a.abW(this.b,this.c) +this.a.a=s +return s==null}, +$S:86} +A.a8N.prototype={ +CZ(a,b,c){var s=A.cs(65532) +a.a+=s}, +JJ(a){a.push(B.Wn)}} +A.ez.prototype={ +au(a,b){var s=this.a.au(0,b) +return new A.ez(this.b.a2(0,b),s)}, +hd(a,b){var s,r,q=this +if(a instanceof A.ez){s=A.bJ(a.a,q.a,b) +r=A.p4(a.b,q.b,b) +r.toString +return new A.ez(r,s)}if(a instanceof A.hK){s=A.bJ(a.a,q.a,b) +return new A.k3(q.b,1-b,a.b,s)}return q.xd(a,b)}, +he(a,b){var s,r,q=this +if(a instanceof A.ez){s=A.bJ(q.a,a.a,b) +r=A.p4(q.b,a.b,b) +r.toString +return new A.ez(r,s)}if(a instanceof A.hK){s=A.bJ(q.a,a.a,b) +return new A.k3(q.b,b,a.b,s)}return q.xe(a,b)}, +qV(a){var s=a==null?this.a:a +return new A.ez(this.b,s)}, +iC(a,b){var s=this.b.aG(b).eU(a).ei(-this.a.gi2()),r=$.G().Z() +r.h_(s) +return r}, +qe(a){return this.iC(a,null)}, +fM(a,b){var s=$.G().Z() +s.h_(this.b.aG(b).eU(a)) +return s}, +nN(a){return this.fM(a,null)}, +ns(a,b,c,d){var s=this.b +if(s.k(0,B.aP))a.b7(b,c) +else a.dm(s.aG(d).eU(b),c)}, +glE(){return!0}, +jt(a,b,c){var s,r,q,p,o=this.a +switch(o.c.a){case 0:break +case 1:s=this.b +if(o.b===0)a.dm(s.aG(c).eU(b),o.mx()) +else{r=$.G().B() +r.sA(0,o.a) +q=s.aG(c).eU(b) +p=q.ei(-o.gi2()) +a.vD(q.ei(o.gx8()),p,r)}break}}, +aO(a,b){return this.jt(a,b,null)}, +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.ez&&b.a.k(0,this.a)&&b.b.k(0,this.b)}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"RoundedRectangleBorder("+this.a.j(0)+", "+this.b.j(0)+")"}} +A.k3.prototype={ +au(a,b){var s=this.a.au(0,b) +return new A.k3(this.b.a2(0,b),b,this.d,s)}, +hd(a,b){var s,r,q,p=this +if(a instanceof A.ez){s=A.bJ(a.a,p.a,b) +r=A.p4(a.b,p.b,b) +r.toString +return new A.k3(r,p.c*b,p.d,s)}if(a instanceof A.hK){s=A.bJ(a.a,p.a,b) +r=p.c +return new A.k3(p.b,r+(1-r)*(1-b),a.b,s)}if(a instanceof A.k3){s=A.bJ(a.a,p.a,b) +r=A.p4(a.b,p.b,b) +r.toString +q=A.ap(a.c,p.c,b) +q.toString +return new A.k3(r,q,p.d,s)}return p.xd(a,b)}, +he(a,b){var s,r,q,p=this +if(a instanceof A.ez){s=A.bJ(p.a,a.a,b) +r=A.p4(p.b,a.b,b) +r.toString +return new A.k3(r,p.c*(1-b),p.d,s)}if(a instanceof A.hK){s=A.bJ(p.a,a.a,b) +r=p.c +return new A.k3(p.b,r+(1-r)*b,a.b,s)}if(a instanceof A.k3){s=A.bJ(p.a,a.a,b) +r=A.p4(p.b,a.b,b) +r.toString +q=A.ap(p.c,a.c,b) +q.toString +return new A.k3(r,q,p.d,s)}return p.xe(a,b)}, +B7(a){var s,r,q=this.c +if(q===0||a.gaH(a)-a.gae(a)===a.gaQ(a)-a.gaj(a))return a +s=1-this.d +if(a.gaH(a)-a.gae(a)")),!0,t.Q2)}if(s.e.glE())p.x=A.ab(new A.W(r,new A.b6D(a),A.a5(r).h("W<1,A>")),!0,t.YT) +else p.y=A.ab(new A.W(r,new A.b6E(p,a,b),A.a5(r).h("W<1,rZ>")),!0,t.Zf)}r=s.e +if(!r.glE())q=p.r!=null||p.w!=null +else q=!1 +if(q)p.e=r.fM(a,b) +if(s.c!=null)p.f=r.iC(a,b) +p.c=a +p.d=b}, +aEA(a,b,c){var s,r,q,p,o=this +if(o.w!=null){s=o.b.e +if(s.glE()){r=0 +while(!0){q=o.w +q.toString +if(!(r>>0)+r+-56613888 +break $label0$0}if(56320===s){r=r.qT(0,a-1) +r.toString +r=(r<<10>>>0)+q+-56613888 +break $label0$0}r=q +break $label0$0}return r}, +aI5(a,b){var s,r=this.auU(b?a-1:a),q=b?a:a-1,p=this.a.qT(0,q) +if(!(r==null||p==null||A.bhc(r)||A.bhc(p))){q=A.bw("[\\p{Space_Separator}\\p{Punctuation}]",!0,!1,!0) +s=A.cs(r) +q=!q.b.test(s)}else q=!0 +return q}, +gag0(){var s=this,r=s.c +if(r===$){r!==$&&A.N() +r=s.c=new A.ash(s.gaI4(),s)}return r}} +A.ash.prototype={ +ka(a){var s +if(a<0)return null +s=this.b.ka(a) +return s==null||this.a.$2(s,!1)?s:this.ka(s-1)}, +kc(a){var s=this.b.kc(Math.max(a,0)) +return s==null||this.a.$2(s,!0)?s:this.kc(s)}} +A.b7F.prototype={ +oS(a){var s +switch(a.a){case 0:s=this.c +s=s.gyo(s) +break +case 1:s=this.c +s=s.gaeR(s) +break +default:s=null}return s}, +av4(){var s,r,q,p,o,n,m=this,l=m.c.gY7() +l=m.c.NA(l-1) +l.toString +s=m.b +r=s.charCodeAt(s.length-1) +$label0$0:{s=9===r||32===r +if(s)break $label0$0 +break $label0$0}q=l.gmW() +p=A.bhp("lastGlyph",new A.b7G(m)) +if(s&&p.xX()!=null){o=p.xX().a +l=m.a +switch(l.a){case 1:s=o.c +break +case 0:s=o.a +break +default:s=null}n=s}else{s=m.a +switch(s.a){case 1:l=l.gae(l)+l.gbW(l) +break +case 0:l=l.gae(l) +break +default:l=null}n=l +l=s}return new A.Jo(new A.i(n,q),l)}, +PO(a,b,c){var s +switch(c.a){case 1:s=A.U(this.c.gafJ(),a,b) +break +case 0:s=A.U(this.c.grp(),a,b) +break +default:s=null}return s}} +A.b7G.prototype={ +$0(){var s=this.a +return s.c.Nw(s.b.length-1)}, +$S:574} +A.arb.prototype={ +gmu(){var s,r,q=this.d +if(q===0)return B.h +s=this.a +r=s.c +if(!isFinite(r.gbW(r)))return B.a3Q +r=this.c +s=s.c +return new A.i(q*(r-s.gbW(s)),0)}, +aGC(a,b,c){var s,r,q,p=this,o=p.c +if(b===o&&a===o){p.c=p.a.PO(a,b,c) +return!0}if(!isFinite(p.gmu().a)){o=p.a.c +o=!isFinite(o.gbW(o))&&isFinite(a)}else o=!1 +if(o)return!1 +o=p.a +s=o.c.grp() +if(b!==p.b){r=o.c +q=r.gbW(r)-s>-1e-10&&b-s>-1e-10}else q=!0 +if(q){p.c=o.PO(a,b,c) +return!0}return!1}} +A.Jo.prototype={} +A.C9.prototype={ +aB(){var s=this.b +if(s!=null)s.a.c.t() +this.b=null}, +sd7(a,b){var s,r,q,p=this +if(J.f(p.e,b))return +s=p.e +s=s==null?null:s.a +r=b==null +if(!J.f(s,r?null:b.a)){s=p.ch +if(s!=null)s.t() +p.ch=null}if(r)q=B.bZ +else{s=p.e +s=s==null?null:s.cK(0,b) +q=s==null?B.bZ:s}p.e=b +p.f=null +s=q.a +if(s>=3)p.aB() +else if(s>=2)p.c=!0}, +gpZ(){var s=this.f +if(s==null){s=this.e +s=s==null?null:s.FB(!1) +this.f=s}return s==null?"":s}, +suj(a,b){if(this.r===b)return +this.r=b +this.aB()}, +scV(a){var s,r=this +if(r.w==a)return +r.w=a +r.aB() +s=r.ch +if(s!=null)s.t() +r.ch=null}, +seS(a){var s,r=this +if(a.k(0,r.x))return +r.x=a +r.aB() +s=r.ch +if(s!=null)s.t() +r.ch=null}, +sVm(a){if(this.y==a)return +this.y=a +this.aB()}, +stZ(a,b){if(J.f(this.z,b))return +this.z=b +this.aB()}, +su0(a){if(this.Q==a)return +this.Q=a +this.aB()}, +snW(a){if(J.f(this.as,a))return +this.as=a +this.aB()}, +suk(a){if(this.at===a)return +this.at=a}, +swx(a){return}, +gaf_(){var s,r,q,p=this.b +if(p==null)return null +s=p.gmu() +if(!isFinite(s.a)||!isFinite(s.b))return A.b([],t.Lx) +r=p.e +if(r==null)r=p.e=p.a.c.FS() +if(s.k(0,B.h))return r +q=A.a5(r).h("W<1,hW>") +return A.ab(new A.W(r,new A.aVR(s),q),!1,q.h("aI.E"))}, +nS(a){if(a==null||a.length===0||A.eu(a,this.ay))return +this.ay=a +this.aB()}, +a3s(a){var s,r,q,p,o=this,n=o.e,m=n==null?null:n.a +if(m==null)m=B.eW +n=a==null?o.r:a +s=o.w +r=o.x +q=o.Q +p=o.ax +return m.aka(o.y,o.z,q,o.as,n,s,p,r)}, +avF(){return this.a3s(null)}, +eo(){var s,r,q=this,p=q.ch +if(p==null){p=q.a3s(B.d0) +s=$.G().D7(p) +p=q.e +if(p==null)r=null +else{p=p.a +r=p==null?null:p.G3(q.x)}if(r!=null)s.ws(r) +s.yk(" ") +p=s.cY() +p.kY(B.Dn) +q.ch=p}return p}, +a3r(a){var s=this,r=s.avF(),q=$.G().D7(r) +r=s.x +a.Ju(q,s.ay,r) +s.c=!1 +return q.cY()}, +nj(a,b){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=h.b,f=g==null +if(!f&&g.aGC(b,a,h.at))return +s=h.e +if(s==null)throw A.d(A.ad("TextPainter.text must be set to a non-null value before using the TextPainter.")) +r=h.w +if(r==null)throw A.d(A.ad("TextPainter.textDirection must be set to a non-null value before using the TextPainter.")) +q=A.bqf(h.r,r) +if(!(!isFinite(a)&&q!==0))p=a +else p=f?null:g.a.c.grp() +o=p==null +n=o?a:p +m=f?null:g.a.c +if(m==null)m=h.a3r(s) +m.kY(new A.vT(n)) +l=new A.b7F(r,h.gpZ(),m) +k=l.PO(b,a,h.at) +if(o&&isFinite(b)){j=l.c.grp() +m.kY(new A.vT(j)) +i=new A.arb(l,j,k,q)}else i=new A.arb(l,n,k,q) +h.b=i}, +pP(){return this.nj(1/0,0)}, +aO(a,b){var s,r,q,p=this,o=p.b +if(o==null)throw A.d(A.ad("TextPainter.paint called when text geometry was not yet calculated.\nPlease call layout() before paint() to position the text before painting it.")) +if(!isFinite(o.gmu().a)||!isFinite(o.gmu().b))return +if(p.c){s=o.a +r=s.c +q=p.e +q.toString +q=p.a3r(q) +q.kY(new A.vT(o.b)) +s.c=q +r.t()}a.qZ(o.a.c,b.X(0,o.gmu()))}, +a_u(a){var s=this.e.qT(0,a) +if(s==null)return null +return(s&64512)===55296?a+2:a+1}, +a_v(a){var s=a-1,r=this.e.qT(0,s) +if(r==null)return null +return(r&64512)===56320?a-2:s}, +qg(a,b){var s,r,q,p,o,n,m,l,k=this,j=k.b +j.toString +s=k.PG(a) +if(s==null){r=k.r +q=k.w +q.toString +p=A.bqf(r,q) +return new A.i(p===0?0:p*j.c,0)}$label0$0:{o=s.b +n=B.r===o +if(n)m=s.a +else m=null +if(n){l=m +r=l +break $label0$0}n=B.ad===o +if(n){m=s.a +r=m +r=r instanceof A.i}else r=!1 +if(r){l=n?m:s.a +r=new A.i(l.a-(b.c-b.a),l.b) +break $label0$0}r=null}return new A.i(A.U(r.a+j.gmu().a,0,j.c),r.b+j.gmu().b)}, +a_i(a,b){var s=B.b.ge1(this.eo().Ns(0,1,B.un)) +return s.d-s.b}, +PG(a3){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.b,a2=a1.a +if(a2.c.gY7()<1||a.gpZ().length===0)return a0 +$label0$0:{s=a3.a +if(0===s){r=B.a5d +break $label0$0}q=a3.b +r=B.v===q +if(r){r=new A.bI(s,!0) +break $label0$0}p=B.aL===q +r=p +if(r){r=s-1 +r=0<=r&&r") +r=A.ab(new A.W(s,new A.aVQ(p),r),!1,r.h("aI.E"))}return r}, +oR(a){return this.wG(a,B.dA,B.cO)}, +a_7(a){var s=this.b,r=s.a.c.a_8(a.Y(0,s.gmu())) +if(r==null||s.gmu().k(0,B.h))return r +return new A.pn(r.a.dz(s.gmu()),r.b,r.c)}, +iD(a){var s=this.b +return s.a.c.iD(a.Y(0,s.gmu()))}, +yJ(){var s,r,q=this.b,p=q.gmu() +if(!isFinite(p.a)||!isFinite(p.b))return B.ZC +s=q.f +if(s==null){s=q.a.c.yJ() +q.f=s}if(p.k(0,B.h))r=s +else{r=A.a5(s).h("W<1,vB>") +r=A.ab(new A.W(s,new A.aVP(p),r),!1,r.h("aI.E"))}return r}, +t(){var s=this,r=s.ch +if(r!=null)r.t() +s.ch=null +r=s.b +if(r!=null)r.a.c.t() +s.e=s.b=null}} +A.aVR.prototype={ +$1(a){return A.bqg(a,this.a)}, +$S:148} +A.aVQ.prototype={ +$1(a){return A.bqg(a,this.a)}, +$S:148} +A.aVP.prototype={ +$1(a){var s=this.a,r=a.gaeF(),q=a.gabm(),p=a.gUN(),o=a.gaiF(),n=a.gb9(a),m=a.gbW(a),l=a.gae(a),k=a.gmW(),j=a.gXM(a) +return $.G().acy(q,k+s.b,p,r,n,l+s.a,j,o,m)}, +$S:576} +A.k2.prototype={ +k(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.k2&&b.a===this.a}, +gL(a){return B.c.gL(this.a)}, +j(a){var s=this.a +return s===1?"no scaling":"linear ("+A.j(s)+"x)"}, +$ibqj:1} +A.lA.prototype={ +gacO(a){return this.e}, +gZR(){return!0}, +ow(a,b){var s +if(t.pY.b(a)){s=this.d +if(s!=null)s.Cp(a)}}, +Ju(a,b,c){var s,r,q,p,o,n=this.a,m=n!=null +if(m)a.ws(n.G3(c)) +n=this.b +if(n!=null)try{a.yk(n)}catch(q){n=A.b2(q) +if(n instanceof A.n_){s=n +r=A.bC(q) +A.eR(new A.cI(s,r,"painting library",A.cn("while building a TextSpan"),null,!0)) +a.yk("\ufffd")}else throw q}p=this.c +if(p!=null)for(n=p.length,o=0;oq.a)q=p +if(q===B.bZ)return q}s=n.c +if(s!=null)for(r=b.c,o=0;oq.a)q=p +if(q===B.bZ)return q}return q}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +if(!s.a0Q(0,b))return!1 +return b instanceof A.lA&&b.b==s.b&&b.d==s.d&&s.e.k(0,b.e)&&A.eu(b.c,s.c)}, +gL(a){var s=this,r=A.ia.prototype.gL.call(s,0),q=s.c +q=q==null?null:A.bM(q) +return A.a6(r,s.b,s.d,s.w,null,null,s.e,q,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +fu(){return"TextSpan"}, +$iaW:1, +$ipL:1, +gage(){return null}, +gagf(){return null}} +A.I.prototype={ +gou(){return this.e}, +gva(a){return this.d}, +mc(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){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this,a2=a1.ay +if(a2==null&&b8==null)s=a5==null?a1.b:a5 +else s=null +r=a1.ch +if(r==null&&a3==null)q=a4==null?a1.c:a4 +else q=null +p=b4==null?a1.r:b4 +o=b7==null?a1.w:b7 +n=b5==null?a1.x:b5 +m=c1==null?a1.y:c1 +l=c7==null?a1.z:c7 +k=c6==null?a1.Q:c6 +j=b9==null?a1.as:b9 +i=c0==null?a1.at:c0 +a2=b8==null?a2:b8 +r=a3==null?r:a3 +h=c5==null?a1.dy:c5 +g=b3==null?a1.fr:b3 +f=b6==null?a1.fx:b6 +e=a7==null?a1.CW:a7 +d=a8==null?a1.cx:a8 +c=a9==null?a1.cy:a9 +b=b0==null?a1.db:b0 +a=b1==null?a1.gva(0):b1 +a0=b2==null?a1.e:b2 +return A.ep(r,q,s,null,e,d,c,b,a,a0,g,p,n,f,o,a2,j,a1.a,i,m,a1.ax,a1.fy,a1.f,h,k,l)}, +aOV(a,b,c){var s=null +return this.mc(s,s,a,s,s,s,s,s,b,s,s,s,s,s,s,s,s,s,c,s,s,s,s,s,s)}, +acj(a){var s=null +return this.mc(s,s,s,s,s,s,s,s,s,s,s,a,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +aOv(a){var s=null +return this.mc(s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,a,s,s,s,s,s,s,s,s,s)}, +aOH(a,b){var s=null +return this.mc(s,s,a,s,b,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +aOM(a,b){var s=null +return this.mc(s,s,s,s,s,s,s,s,s,s,s,a,s,s,b,s,s,s,s,s,s,s,s,s,s)}, +aOD(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var s=null +return this.mc(a,b,c,s,d,e,f,g,s,s,h,i,j,s,k,l,m,s,n,o,s,s,p,q,r)}, +aOL(a,b){var s=null +return this.mc(s,s,s,s,s,s,s,s,a,b,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +e2(a){var s=null +return this.mc(s,s,a,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Un(a,b){var s=null +return this.mc(s,s,a,s,s,s,s,s,s,s,s,b,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +ack(a){var s=null +return this.mc(s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,a,s,s,s,s,s,s,s,s)}, +aOu(a){var s=null +return this.mc(s,s,s,s,s,s,s,s,s,s,a,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +aOU(a,b,c){var s=null +return this.mc(s,a,s,s,s,s,s,s,b,s,s,c,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +kM(a,b,c,d,e,a0,a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null,f=h.ay +if(f==null)s=a==null?h.b:a +else s=g +r=h.ch +if(r==null)q=h.c +else q=g +p=h.gva(0) +o=h.r +o=o==null?g:o*a2+a1 +n=h.w +n=n==null?g:B.oj[B.f.bX(n.a,0,8)] +m=h.y +m=m==null?g:m+0 +l=h.z +l=l==null?g:l+0 +k=h.as +k=k==null?g:k+0 +j=c==null?h.cx:c +i=h.db +i=i==null?g:i+0 +return A.ep(r,q,s,g,h.CW,j,h.cy,i,p,h.e,h.fr,o,h.x,h.fx,n,f,k,h.a,h.at,m,h.ax,h.fy,h.f,h.dy,h.Q,l)}, +bT(a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3 +if(a4==null)return this +if(!a4.a)return a4 +s=a4.b +r=a4.c +q=a4.r +p=a4.w +o=a4.x +n=a4.y +m=a4.z +l=a4.Q +k=a4.as +j=a4.at +i=a4.ax +h=a4.ay +g=a4.ch +f=a4.dy +e=a4.fr +d=a4.fx +c=a4.CW +b=a4.cx +a=a4.cy +a0=a4.db +a1=a4.gva(0) +a2=a4.e +a3=a4.f +return this.mc(g,r,s,null,c,b,a,a0,a1,a2,e,q,o,d,p,h,k,j,n,i,a4.fy,a3,f,l,m)}, +G3(a){var s,r,q,p,o,n,m,l=this,k=l.r +$label0$0:{if(k==null){s=null +break $label0$0}s=a.k(0,B.aq) +if(s){s=k +break $label0$0}s=k*a.a +break $label0$0}r=l.gou() +q=l.ch +p=l.c +$label1$1:{o=t.Q2 +if(o.b(q)){n=q==null?o.a(q):q +o=n +break $label1$1}if(p instanceof A.n){m=p==null?t.G.a(p):p +o=$.G().B() +o.sA(0,m) +break $label1$1}o=null +break $label1$1}return A.bgZ(o,l.b,l.CW,l.cx,l.cy,l.db,l.d,r,l.fr,s,l.x,l.fx,l.w,l.ay,l.as,l.at,l.y,l.ax,l.dy,l.Q,l.z)}, +aka(a,b,c,a0,a1,a2,a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null,f=h.at,e=f==null?g:new A.SN(f),d=h.r +if(d==null)d=14 +s=a4.a +if(a0==null)r=g +else{r=a0.a +q=a0.gou() +p=a0.d +$label0$0:{if(p==null){o=g +break $label0$0}o=p*s +break $label0$0}n=a0.e +m=a0.x +l=a0.f +k=a0.r +j=a0.w +i=a0.y +l=$.G().acH(r,q,o,j,k,i,n,m,l) +r=l}return A.bg7(a,h.d,d*s,h.x,h.w,h.as,b,c,r,a1,a2,e)}, +cK(a,b){var s,r=this +if(r===b)return B.e1 +if(r.a===b.a)if(r.d==b.d)if(r.r==b.r)if(r.w==b.w)if(r.x==b.x)if(r.y==b.y)if(r.z==b.z)if(r.Q==b.Q)if(r.as==b.as)if(r.at==b.at)if(r.ay==b.ay)if(r.ch==b.ch)if(A.eu(r.dy,b.dy))if(A.eu(r.fr,b.fr))if(A.eu(r.fx,b.fx)){s=A.eu(r.gou(),b.gou()) +s=!s}else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +if(s)return B.bZ +if(!J.f(r.b,b.b)||!J.f(r.c,b.c)||!J.f(r.CW,b.CW)||!J.f(r.cx,b.cx)||r.cy!=b.cy||r.db!=b.db)return B.a5B +return B.e1}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.I)if(b.a===r.a)if(J.f(b.b,r.b))if(J.f(b.c,r.c))if(b.r==r.r)if(b.w==r.w)if(b.x==r.x)if(b.y==r.y)if(b.z==r.z)if(b.Q==r.Q)if(b.as==r.as)if(b.at==r.at)if(b.ay==r.ay)if(b.ch==r.ch)if(A.eu(b.dy,r.dy))if(A.eu(b.fr,r.fr))if(A.eu(b.fx,r.fx))if(J.f(b.CW,r.CW))if(J.f(b.cx,r.cx))if(b.cy==r.cy)if(b.db==r.db)if(b.d==r.d)s=A.eu(b.gou(),r.gou()) +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +gL(a){var s,r,q=this,p=null,o=q.gou(),n=o==null?p:A.bM(o),m=A.a6(q.cy,q.db,q.d,n,q.f,q.fy,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a),l=q.dy,k=q.fr,j=q.fx +n=l==null?p:A.bM(l) +s=k==null?p:A.bM(k) +r=j==null?p:A.bM(j) +return A.a6(q.a,q.b,q.c,q.r,q.w,q.x,q.y,q.z,q.Q,q.as,q.at,q.ax,q.ay,q.ch,n,s,r,q.CW,q.cx,m)}, +fu(){return"TextStyle"}, +gkV(a){return this.w}, +gov(a){return this.x}} +A.arn.prototype={} +A.a47.prototype={ +asu(a,b,c,d,e){var s=this +s.r=A.bsS(new A.aFd(s),s.gKs(s),0,10,0)}, +iB(a,b){var s,r,q=this +if(b>q.r)return q.gKV() +s=q.e +r=q.c +return q.d+s*Math.pow(q.b,b)/r-s/r-q.f/2*b*b}, +jS(a,b){var s=this +if(b>s.r)return 0 +return s.e*Math.pow(s.b,b)-s.f*b}, +gKV(){var s=this +if(s.f===0)return s.d-s.e/s.c +return s.iB(0,s.r)}, +aij(a){var s,r=this,q=r.d +if(a===q)return 0 +s=r.e +if(s!==0)if(s>0)q=ar.gKV() +else q=a>q||a=r.b&&r.c>=r.d +else q=!0 +if(q){o.dM(0) +o=p.dn +p.id=o.a=o.b=new A.Q(A.U(0,r.a,r.b),A.U(0,r.c,r.d)) +p.ip=B.Fi +o=p.a0$ +if(o!=null)o.kY(r) +return}s.dc(r,!0) +switch(p.ip.a){case 0:o=p.dn +o.a=o.b=p.a0$.gC(0) +p.ip=B.rb +break +case 1:s=p.dn +if(!J.f(s.b,p.a0$.gC(0))){s.a=p.gC(0) +s.b=p.a0$.gC(0) +p.bf=0 +o.pL(0,0) +p.ip=B.a5y}else{q=o.x +q===$&&A.c() +if(q===o.b)s.a=s.b=p.a0$.gC(0) +else{s=o.r +if(!(s!=null&&s.a!=null))o.d5(0)}}break +case 2:s=p.dn +if(!J.f(s.b,p.a0$.gC(0))){s.a=s.b=p.a0$.gC(0) +p.bf=0 +o.pL(0,0) +p.ip=B.a5z}else{p.ip=B.rb +s=o.r +if(!(s!=null&&s.a!=null))o.d5(0)}break +case 3:s=p.dn +if(!J.f(s.b,p.a0$.gC(0))){s.a=s.b=p.a0$.gC(0) +p.bf=0 +o.pL(0,0)}else{o.dM(0) +p.ip=B.rb}break}o=p.dn +s=p.ef +s===$&&A.c() +s=o.az(0,s.gm(0)) +s.toString +p.id=r.ca(s) +p.Ty() +if(p.gC(0).a=a.b&&a.c>=a.d +else s=!0 +if(s)return new A.Q(A.U(0,a.a,a.b),A.U(0,a.c,a.d)) +p=p.aY(B.bg,a,p.gjd()) +switch(q.ip.a){case 0:return a.ca(p) +case 1:if(!J.f(q.dn.b,p))return a.ca(q.gC(0)) +else{s=q.dC +s===$&&A.c() +r=s.x +r===$&&A.c() +if(r===s.b)return a.ca(p)}break +case 3:case 2:if(!J.f(q.dn.b,p))return a.ca(p) +break}p=q.ef +p===$&&A.c() +p=q.dn.az(0,p.gm(0)) +p.toString +return a.ca(p)}, +atE(a){switch(a.a){case 3:break +case 0:case 1:case 2:break}}, +aO(a,b){var s,r,q,p=this +if(p.a0$!=null){s=p.hL +s===$&&A.c() +s=s&&p.fo!==B.y}else s=!1 +r=p.Kz +if(s){s=p.gC(0) +q=p.cx +q===$&&A.c() +r.sbr(0,a.q2(q,b,new A.A(0,0,0+s.a,0+s.b),A.Bd.prototype.gjs.call(p),p.fo,r.a))}else{r.sbr(0,null) +p.aoT(a,b)}}, +t(){var s,r=this +r.Kz.sbr(0,null) +s=r.dC +s===$&&A.c() +s.t() +s=r.ef +s===$&&A.c() +s.t() +r.ja()}} +A.aPh.prototype={ +$0(){var s=this.a,r=s.dC +r===$&&A.c() +r=r.x +r===$&&A.c() +if(r!==s.bf)s.aB()}, +$S:0} +A.Ha.prototype={ +gMo(){var s,r=this,q=r.adP$ +if(q===$){s=A.bI3(new A.aQj(r),new A.aQk(r),new A.aQl(r)) +q!==$&&A.N() +r.adP$=s +q=s}return q}, +WX(){var s,r,q,p,o,n,m,l,k,j,i +for(s=this.z7$.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1],q=!1;s.H();){p=s.a +if(p==null)p=r.a(p) +q=q||p.a0$!=null +o=p.go +n=$.cF() +m=n.d +if(m==null){l=self.window.devicePixelRatio +m=l===0?1:l}l=o.ax +if(l==null){l=o.CW.Ub() +o.ax=l}l=A.bqR(o.as,new A.Q(l.a/m,l.b/m)) +o=l.a*m +k=l.b*m +j=l.c*m +l=l.d*m +i=n.d +if(i==null){n=self.window.devicePixelRatio +i=n===0?1:n}p.stw(new A.Tr(new A.bb(o/i,k/i,j/i,l/i),new A.bb(o,k,j,l),i))}if(q)this.akA()}, +Xa(){}, +X_(){}, +aTA(){var s,r=this.DH$ +if(r!=null){r.ah$=$.aa() +r.ac$=0}r=t.S +s=$.aa() +this.DH$=new A.a73(new A.aQi(this),new A.aKU(B.cH,A.D(r,t.ZA)),A.D(r,t.xg),s)}, +aBI(a){B.a2j.lm("first-frame",null,!1,t.H)}, +aAj(a){this.Va() +this.aGZ()}, +aGZ(){$.cN.dP$.push(new A.aQh(this))}, +ab4(){--this.DI$ +if(!this.KK$)this.a_Q()}, +Va(){var s,r,q=this,p=q.vT$ +p===$&&A.c() +p.ae9() +q.vT$.ae8() +q.vT$.aea() +if(q.KK$||q.DI$===0){for(p=q.z7$.gbm(0),s=A.w(p),s=s.h("@<1>").ak(s.y[1]),p=new A.bt(J.az(p.a),p.b,s.h("bt<1,2>")),s=s.y[1];p.H();){r=p.a;(r==null?s.a(r):r).aO3()}q.vT$.aeb() +q.KK$=!0}}, +$iaW:1, +$iiQ:1} +A.aQj.prototype={ +$0(){var s=this.a.gMo().e +if(s!=null)s.Gb()}, +$S:0} +A.aQl.prototype={ +$1(a){var s=this.a.gMo().e +if(s!=null)s.go.ga_W().b__(a)}, +$S:177} +A.aQk.prototype={ +$0(){var s=this.a.gMo().e +if(s!=null)s.vo()}, +$S:0} +A.aQi.prototype={ +$2(a,b){var s=A.aGD() +this.a.E8(s,a,b) +return s}, +$S:578} +A.aQh.prototype={ +$1(a){this.a.DH$.aZP()}, +$S:3} +A.TV.prototype={ +t(){this.a.gBW().ad(0,this.gfa()) +this.fN()}} +A.ahF.prototype={} +A.aoF.prototype={ +YL(){if(this.a5)return +this.aoV() +this.a5=!0}, +Gb(){this.vo() +this.aoI()}, +t(){this.sbt(null)}} +A.bb.prototype={ +yO(a,b,c,d){var s=this,r=d==null?s.a:d,q=b==null?s.b:b,p=c==null?s.c:c +return new A.bb(r,q,p,a==null?s.d:a)}, +Uo(a,b){return this.yO(null,a,null,b)}, +aOO(a,b){return this.yO(a,null,b,null)}, +aOP(a,b){return this.yO(null,null,a,b)}, +aOX(a,b,c){return this.yO(null,a,b,c)}, +aOW(a,b,c){return this.yO(a,null,b,c)}, +JQ(a){return this.yO(null,a,null,null)}, +UI(a){var s=this,r=a.ge_(),q=a.gcO(0)+a.gcX(0),p=Math.max(0,s.a-r),o=Math.max(0,s.c-q) +return new A.bb(p,Math.max(p,s.b-r),o,Math.max(o,s.d-q))}, +tG(a){var s=this,r=a.a,q=a.b,p=a.c,o=a.d +return new A.bb(A.U(s.a,r,q),A.U(s.b,r,q),A.U(s.c,p,o),A.U(s.d,p,o))}, +Zo(a,b){var s,r,q=this,p=b==null,o=q.a,n=p?o:A.U(b,o,q.b),m=q.b +p=p?m:A.U(b,o,m) +o=a==null +m=q.c +s=o?m:A.U(a,m,q.d) +r=q.d +return new A.bb(n,p,s,o?r:A.U(a,m,r))}, +MX(a){return this.Zo(a,null)}, +Fx(a){return this.Zo(null,a)}, +gae5(){var s=this +return new A.bb(s.c,s.d,s.a,s.b)}, +ca(a){var s=this +return new A.Q(A.U(a.a,s.a,s.b),A.U(a.b,s.c,s.d))}, +yK(a){var s,r,q,p,o,n=this,m=n.a,l=n.b +if(m>=l&&n.c>=n.d)return new A.Q(A.U(0,m,l),A.U(0,n.c,n.d)) +s=a.a +r=a.b +q=s/r +if(s>l){r=l/q +s=l}p=n.d +if(r>p){s=p*q +r=p}if(s=s.b&&s.c>=s.d}, +a2(a,b){var s=this +return new A.bb(s.a*b,s.b*b,s.c*b,s.d*b)}, +gaUb(){var s=this,r=s.a +if(r>=0)if(r<=s.b){r=s.c +r=r>=0&&r<=s.d}else r=!1 +else r=!1 +return r}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.bb&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){var s,r=this,q=r.gaUb()?"":"; NOT NORMALIZED",p=r.a +if(p===1/0&&r.c===1/0)return"BoxConstraints(biggest"+q+")" +if(p===0&&r.b===1/0&&r.c===0&&r.d===1/0)return"BoxConstraints(unconstrained"+q+")" +s=new A.axK() +return"BoxConstraints("+s.$3(p,r.b,"w")+", "+s.$3(r.c,r.d,"h")+q+")"}} +A.axK.prototype={ +$3(a,b,c){if(a===b)return c+"="+B.c.b8(a,1) +return B.c.b8(a,1)+"<="+c+"<="+B.c.b8(b,1)}, +$S:242} +A.qO.prototype={ +Cr(a,b,c){if(c!=null){c=A.Ai(A.bge(c)) +if(c==null)return!1}return this.Tx(a,b,c)}, +m5(a,b,c){var s,r=b==null,q=r?c:c.Y(0,b) +r=!r +if(r)this.c.push(new A.Jz(new A.i(-b.a,-b.b))) +s=a.$2(this,q) +if(r)this.Mt() +return s}, +Tx(a,b,c){var s,r=c==null,q=r?b:A.dx(c,b) +r=!r +if(r)this.c.push(new A.VQ(c)) +s=a.$2(this,q) +if(r)this.Mt() +return s}, +ab2(a,b,c){var s,r=this +if(b!=null)r.c.push(new A.Jz(new A.i(-b.a,-b.b))) +else{c.toString +c=A.Ai(A.bge(c)) +c.toString +r.c.push(new A.VQ(c))}s=a.$1(r) +r.Mt() +return s}, +aMe(a,b){return this.ab2(a,null,b)}, +aMd(a,b){return this.ab2(a,b,null)}} +A.y8.prototype={ +j(a){return"#"+A.bU(this.a)+"@"+this.c.j(0)}} +A.j0.prototype={ +j(a){return"offset="+this.a.j(0)}} +A.LV.prototype={} +A.b1e.prototype={ +ib(a,b,c){var s=a.b +if(s==null)s=a.b=A.D(t.k,t.FW) +return s.cU(0,b,new A.b1f(c,b))}} +A.b1f.prototype={ +$0(){return this.a.$1(this.b)}, +$S:169} +A.aZ5.prototype={ +ib(a,b,c){var s +switch(b.b){case B.E:s=a.c +if(s==null){s=A.D(t.k,t.PM) +a.c=s}break +case B.as:s=a.d +if(s==null){s=A.D(t.k,t.PM) +a.d=s}break +default:s=null}return s.cU(0,b.a,new A.aZ6(c,b))}} +A.aZ6.prototype={ +$0(){return this.a.$1(this.b)}, +$S:579} +A.CR.prototype={ +W(){return"_IntrinsicDimension."+this.b}, +ib(a,b,c){var s=a.a +if(s==null)s=a.a=A.D(t.Yr,t.V) +return s.cU(0,new A.bI(this,b),new A.b3c(c,b))}} +A.b3c.prototype={ +$0(){return this.a.$1(this.b)}, +$S:142} +A.bs.prototype={} +A.Y.prototype={ +i0(a){if(!(a.b instanceof A.j0))a.b=new A.j0(B.h)}, +av7(a,b,c){var s=a.ib(this.fx,b,c) +return s}, +aY(a,b,c){return this.av7(a,b,c,t.K,t.z)}, +c1(a){return 0}, +bZ(a){return 0}, +c_(a){return 0}, +c2(a){return 0}, +av3(a){return this.dA(a)}, +dA(a){return B.x}, +gC(a){var s=this.id +return s==null?A.X(A.ad("RenderBox was not laid out: "+A.J(this).j(0)+"#"+A.bU(this))):s}, +gux(){var s=this.gC(0) +return new A.A(0,0,0+s.a,0+s.b)}, +FY(a,b){var s=null +try{s=this.nL(a)}finally{}if(s==null&&!b)return this.gC(0).b +return s}, +oS(a){return this.FY(a,!1)}, +nL(a){return this.aY(B.Lo,new A.bI(t.k.a(A.L.prototype.gaI.call(this)),a),new A.aPj(this))}, +iO(a){return null}, +gaI(){return t.k.a(A.L.prototype.gaI.call(this))}, +aB(){var s,r=this,q=null,p=r.fx,o=p.b,n=o==null,m=n?q:o.a!==0 +if(m!==!0){m=p.a +m=m==null?q:m.a!==0 +if(m!==!0){m=p.c +m=m==null?q:m.a!==0 +if(m!==!0){m=p.d +m=m==null?q:m.a!==0 +m=m===!0}else m=!0 +s=m}else s=!0}else s=!0 +if(s){if(!n)o.af(0) +o=p.a +if(o!=null)o.af(0) +o=p.c +if(o!=null)o.af(0) +p=p.d +if(p!=null)p.af(0)}if(s&&r.gbs(r)!=null){r.LH() +return}r.aoG()}, +zN(){this.id=this.dA(t.k.a(A.L.prototype.gaI.call(this)))}, +cM(){}, +dK(a,b){var s=this +if(s.id.G(0,b))if(s.dZ(a,b)||s.mn(b)){a.E(0,new A.y8(b,s)) +return!0}return!1}, +mn(a){return!1}, +dZ(a,b){return!1}, +eK(a,b){var s,r=a.b +r.toString +s=t.q.a(r).a +b.aJ(0,s.a,s.b)}, +e5(a){var s,r,q,p,o,n=this.cW(0,null) +if(n.jR(n)===0)return B.h +s=new A.dX(new Float64Array(3)) +s.kG(0,0,1) +r=new A.dX(new Float64Array(3)) +r.kG(0,0,0) +q=n.Mn(r) +r=new A.dX(new Float64Array(3)) +r.kG(0,0,1) +p=n.Mn(r).Y(0,q) +r=new A.dX(new Float64Array(3)) +r.kG(a.a,a.b,0) +o=n.Mn(r) +r=o.Y(0,p.G8(s.bO(o)/s.bO(p))).a +return new A.i(r[0],r[1])}, +gpX(){var s=this.gC(0) +return new A.A(0,0,0+s.a,0+s.b)}, +ow(a,b){this.aoF(a,b)}} +A.aPj.prototype={ +$1(a){return this.a.iO(a.b)}, +$S:581} +A.f5.prototype={ +aPC(a){var s,r,q,p=this.aZ$ +for(s=A.w(this).h("f5.1");p!=null;){r=p.b +r.toString +s.a(r) +q=p.nL(a) +if(q!=null)return q+r.a.b +p=r.bd$}return null}, +Ka(a){var s,r,q,p,o,n=this.aZ$ +for(s=A.w(this).h("f5.1"),r=null;n!=null;){q=n.b +q.toString +s.a(q) +p=n.nL(a) +o=q.a +r=A.bC8(r,p==null?null:p+o.b) +n=q.bd$}return r}, +De(a,b){var s,r,q={},p=q.a=this.f1$ +for(s=A.w(this).h("f5.1");p!=null;p=r){p=p.b +p.toString +s.a(p) +if(a.m5(new A.aPi(q,b,p),p.a,b))return!0 +r=p.dY$ +q.a=r}return!1}, +yU(a,b){var s,r,q,p,o,n=this.aZ$ +for(s=A.w(this).h("f5.1"),r=b.a,q=b.b;n!=null;){p=n.b +p.toString +s.a(p) +o=p.a +a.fb(n,new A.i(o.a+r,o.b+q)) +n=p.bd$}}} +A.aPi.prototype={ +$2(a,b){return this.a.a.dK(a,b)}, +$S:8} +A.Un.prototype={ +b3(a){this.AW(0)}} +A.nh.prototype={ +j(a){return this.AP(0)+"; id="+A.j(this.e)}} +A.aL0.prototype={ +ix(a,b){var s=this.b.i(0,a) +s.dc(b,!0) +return s.gC(0)}, +l2(a,b){var s=this.b.i(0,a).b +s.toString +t.Wz.a(s).a=b}, +aun(a,b){var s,r,q,p,o,n,m=this,l=m.b +try{m.b=A.D(t.K,t.x) +for(r=t.Wz,q=b;q!=null;q=n){p=q.b +p.toString +s=r.a(p) +p=m.b +p.toString +o=s.e +o.toString +p.u(0,o,q) +n=s.bd$}m.Mm(a)}finally{m.b=l}}, +j(a){return"MultiChildLayoutDelegate"}} +A.Qy.prototype={ +i0(a){if(!(a.b instanceof A.nh))a.b=new A.nh(null,null,B.h)}, +sUK(a){var s=this.K +if(s===a)return +if(A.J(a)!==A.J(s)||a.uC(s))this.aB() +this.K=a}, +bc(a){this.aqB(a)}, +b3(a){this.aqC(0)}, +c1(a){var s=A.l7(a,1/0),r=s.ca(new A.Q(A.U(1/0,s.a,s.b),A.U(1/0,s.c,s.d))).a +if(isFinite(r))return r +return 0}, +bZ(a){var s=A.l7(a,1/0),r=s.ca(new A.Q(A.U(1/0,s.a,s.b),A.U(1/0,s.c,s.d))).a +if(isFinite(r))return r +return 0}, +c_(a){var s=A.l7(1/0,a),r=s.ca(new A.Q(A.U(1/0,s.a,s.b),A.U(1/0,s.c,s.d))).b +if(isFinite(r))return r +return 0}, +c2(a){var s=A.l7(1/0,a),r=s.ca(new A.Q(A.U(1/0,s.a,s.b),A.U(1/0,s.c,s.d))).b +if(isFinite(r))return r +return 0}, +dA(a){return a.ca(new A.Q(A.U(1/0,a.a,a.b),A.U(1/0,a.c,a.d)))}, +cM(){var s=this,r=t.k.a(A.L.prototype.gaI.call(s)) +s.id=r.ca(new A.Q(A.U(1/0,r.a,r.b),A.U(1/0,r.c,r.d))) +s.K.aun(s.gC(0),s.aZ$)}, +aO(a,b){this.yU(a,b)}, +dZ(a,b){return this.De(a,b)}} +A.Wy.prototype={ +bc(a){var s,r,q +this.fg(a) +s=this.aZ$ +for(r=t.Wz;s!=null;){s.bc(a) +q=s.b +q.toString +s=r.a(q).bd$}}, +b3(a){var s,r,q +this.fh(0) +s=this.aZ$ +for(r=t.Wz;s!=null;){s.b3(0) +q=s.b +q.toString +s=r.a(q).bd$}}} +A.aoa.prototype={} +A.a1P.prototype={ +an(a,b){var s=this.a +return s==null?null:s.an(0,b)}, +ad(a,b){var s=this.a +return s==null?null:s.ad(0,b)}, +gAt(){return null}, +Gu(a){return this.cF(a)}, +zm(a){return null}, +j(a){var s=A.bU(this),r=this.a +r=r==null?null:r.j(0) +if(r==null)r="" +return"#"+s+"("+r+")"}} +A.Qz.prototype={ +swm(a){var s=this.V +if(s==a)return +this.V=a +this.a3H(a,s)}, +saei(a){var s=this.aE +if(s==a)return +this.aE=a +this.a3H(a,s)}, +a3H(a,b){var s=this,r=a==null +if(r)s.bi() +else if(b==null||A.J(a)!==A.J(b)||a.cF(b))s.bi() +if(s.y!=null){if(b!=null)b.ad(0,s.gfH()) +if(!r)a.an(0,s.gfH())}if(r){if(s.y!=null)s.cf()}else if(b==null||A.J(a)!==A.J(b)||a.Gu(b))s.cf()}, +saXM(a){if(this.bj.k(0,a))return +this.bj=a +this.aB()}, +c1(a){var s +if(this.a0$==null){s=this.bj.a +return isFinite(s)?s:0}return this.OK(a)}, +bZ(a){var s +if(this.a0$==null){s=this.bj.a +return isFinite(s)?s:0}return this.OI(a)}, +c_(a){var s +if(this.a0$==null){s=this.bj.b +return isFinite(s)?s:0}return this.OJ(a)}, +c2(a){var s +if(this.a0$==null){s=this.bj.b +return isFinite(s)?s:0}return this.OH(a)}, +bc(a){var s,r=this +r.B2(a) +s=r.V +if(s!=null)s.an(0,r.gfH()) +s=r.aE +if(s!=null)s.an(0,r.gfH())}, +b3(a){var s=this,r=s.V +if(r!=null)r.ad(0,s.gfH()) +r=s.aE +if(r!=null)r.ad(0,s.gfH()) +s.uO(0)}, +dZ(a,b){var s=this.aE +if(s!=null){s=s.zm(b) +s=s===!0}else s=!1 +if(s)return!0 +return this.B_(a,b)}, +mn(a){var s=this.V +if(s!=null){s=s.zm(a) +s=s!==!1}else s=!1 +return s}, +cM(){this.uN() +this.cf()}, +CY(a){return a.ca(this.bj)}, +a6Q(a,b,c){A.bn("debugPreviousCanvasSaveCount") +a.bU(0) +if(!b.k(0,B.h))a.aJ(0,b.a,b.b) +c.aO(a,this.gC(0)) +a.bw(0)}, +aO(a,b){var s,r,q=this +if(q.V!=null){s=a.gcP(a) +r=q.V +r.toString +q.a6Q(s,b,r) +q.a8i(a)}q.lS(a,b) +if(q.aE!=null){s=a.gcP(a) +r=q.aE +r.toString +q.a6Q(s,b,r) +q.a8i(a)}}, +a8i(a){}, +iR(a){var s,r=this +r.lf(a) +s=r.V +r.dj=s==null?null:s.gAt() +s=r.aE +r.eB=s==null?null:s.gAt() +a.a=!1}, +yw(a,b,c){var s,r,q,p,o=this +o.fT=A.bp9(o.fT,B.xC) +o.fU=A.bp9(o.fU,B.xC) +s=o.fT +r=s!=null&&!s.gaA(s) +s=o.fU +q=s!=null&&!s.gaA(s) +s=A.b([],t.QF) +if(r){p=o.fT +p.toString +B.b.I(s,p)}B.b.I(s,c) +if(q){p=o.fU +p.toString +B.b.I(s,p)}o.a1e(a,b,s)}, +vo(){this.OE() +this.fU=this.fT=null}} +A.aAB.prototype={} +A.Ca.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.Ca&&b.a.k(0,s.a)&&b.b==s.b}, +j(a){var s,r=this +switch(r.b){case B.r:s=r.a.j(0)+"-ltr" +break +case B.ad:s=r.a.j(0)+"-rtl" +break +case null:case void 0:s=r.a.j(0) +break +default:s=null}return s}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aXi.prototype={ +gds(){var s=this +if(!s.f)return!1 +if(s.e.aN.yJ()!==s.d)s.f=!1 +return s.f}, +a4P(a){var s,r,q=this,p=q.r,o=p.i(0,a) +if(o!=null)return o +s=new A.i(q.a.a,q.d[a].gmW()) +r=new A.bK(s,q.e.aN.iD(s),t.tO) +p.u(0,a,r) +return r}, +ga1(a){return this.c}, +H(){var s,r=this,q=r.b+1 +if(q>=r.d.length)return!1 +s=r.a4P(q);++r.b +r.a=s.a +r.c=s.b +return!0}, +ag1(){var s,r=this,q=r.b +if(q<=0)return!1 +s=r.a4P(q-1);--r.b +r.a=s.a +r.c=s.b +return!0}, +aVH(a){var s,r=this,q=r.a +if(a>=0){for(s=q.b+a;r.a.bs;)if(!r.ag1())break +return!q.k(0,r.a)}} +A.Bc.prototype={ +t(){var s,r,q=this,p=null +q.r3.sbr(0,p) +s=q.K +if(s!=null)s.ch.sbr(0,p) +q.K=null +s=q.a5 +if(s!=null)s.ch.sbr(0,p) +q.a5=null +q.Vw.sbr(0,p) +s=q.b2 +if(s!=null){s.ah$=$.aa() +s.ac$=0}s=q.bB +if(s!=null){s.ah$=$.aa() +s.ac$=0}s=q.aa +r=s.ah$=$.aa() +s.ac$=0 +s=q.bp +s.ah$=r +s.ac$=0 +s=q.aS +s.ah$=r +s.ac$=0 +s=q.aM +s.ah$=r +s.ac$=0 +s=q.giK() +s.ah$=r +s.ac$=0 +q.aN.t() +s=q.d4 +if(s!=null)s.t() +if(q.f3){s=q.dh +s.ah$=r +s.ac$=0 +q.f3=!1}q.ja()}, +a9X(a){var s,r=this,q=r.gaui(),p=r.K +if(p==null){s=A.brB(q) +r.kL(s) +r.K=s}else p.swm(q) +r.M=a}, +aa4(a){var s,r=this,q=r.gauj(),p=r.a5 +if(p==null){s=A.brB(q) +r.kL(s) +r.a5=s}else p.swm(q) +r.av=a}, +giK(){var s,r,q=this.ao +if(q===$){s=$.G().B() +r=$.aa() +this.ao!==$&&A.N() +q=this.ao=new A.Ua(s,B.h,r)}return q}, +gaui(){var s=this,r=s.b2 +if(r==null){r=A.b([],t.xT) +if(s.bj)r.push(s.giK()) +r=s.b2=new A.IW(r,$.aa())}return r}, +gauj(){var s=this,r=s.bB +if(r==null){r=A.b([s.aS,s.aM],t.xT) +if(!s.bj)r.push(s.giK()) +r=s.bB=new A.IW(r,$.aa())}return r}, +swx(a){return}, +suk(a){var s=this.aN +if(s.at===a)return +s.suk(a) +this.aB()}, +spw(a,b){if(this.bD===b)return +this.bD=b +this.aB()}, +saVV(a){if(this.dg===a)return +this.dg=a +this.aB()}, +saVU(a){return}, +Ai(a){var s=this.aN.b.a.c.Nz(a) +return A.dJ(B.v,s.a,s.b,!1)}, +aLh(a){var s,r,q,p,o,n,m=this +if(!m.d1.gds()){m.aa.sm(0,!1) +m.bp.sm(0,!1) +return}s=m.gC(0) +r=new A.A(0,0,0+s.a,0+s.b) +s=m.aN +q=m.d1 +p=m.hK +p===$&&A.c() +o=s.qg(new A.c0(q.a,q.e),p) +m.aa.sm(0,r.ei(0.5).G(0,o.X(0,a))) +p=m.d1 +n=s.qg(new A.c0(p.b,p.e),m.hK) +m.bp.sm(0,r.ei(0.5).G(0,n.X(0,a)))}, +tj(a,b){var s,r +if(a.gds()){s=this.S.a.c.a.a.length +a=a.JR(Math.min(a.c,s),Math.min(a.d,s))}r=this.S.a.c.a.mb(a) +this.S.kE(r,b)}, +bi(){this.aoH() +var s=this.K +if(s!=null)s.bi() +s=this.a5 +if(s!=null)s.bi()}, +B4(){this.OD() +this.aN.aB()}, +sd7(a,b){var s=this,r=s.aN +if(J.f(r.e,b))return +s.na=null +r.sd7(0,b) +s.dP=s.cL=s.cZ=null +s.aB() +s.cf()}, +gv9(){var s,r=null,q=this.d4 +if(q==null)q=this.d4=A.qd(r,r,r,r,r,B.aA,r,r,B.aq,B.aM) +s=this.aN +q.sd7(0,s.e) +q.suj(0,s.r) +q.scV(s.w) +q.seS(s.x) +q.su0(s.Q) +q.sVm(s.y) +q.stZ(0,s.z) +q.snW(s.as) +q.suk(s.at) +q.swx(s.ax) +return q}, +suj(a,b){var s=this.aN +if(s.r===b)return +s.suj(0,b) +this.aB()}, +scV(a){var s=this.aN +if(s.w===a)return +s.scV(a) +this.aB() +this.cf()}, +stZ(a,b){var s=this.aN +if(J.f(s.z,b))return +s.stZ(0,b) +this.aB()}, +snW(a){var s=this.aN +if(J.f(s.as,a))return +s.snW(a) +this.aB()}, +salw(a){var s=this,r=s.dh +if(r===a)return +if(s.y!=null)r.ad(0,s.gIu()) +if(s.f3){r=s.dh +r.ah$=$.aa() +r.ac$=0 +s.f3=!1}s.dh=a +if(s.y!=null){s.giK().sO8(s.dh.a) +s.dh.an(0,s.gIu())}}, +aI0(){this.giK().sO8(this.dh.a)}, +sda(a){if(this.c9===a)return +this.c9=a +this.cf()}, +saRQ(a){if(this.eh===a)return +this.eh=a +this.aB()}, +sYZ(a,b){if(this.f4===b)return +this.f4=b +this.cf()}, +su0(a){var s,r=this +if(r.eH==a)return +r.eH=a +s=a===1?1:null +r.aN.su0(s) +r.aB()}, +saV8(a){return}, +sVv(a){return}, +seS(a){var s=this.aN +if(s.x.k(0,a))return +s.seS(a) +this.aB()}, +sAs(a){var s=this +if(s.d1.k(0,a))return +s.d1=a +s.aM.sLd(a) +s.bi() +s.cf()}, +sl0(a,b){var s=this,r=s.i8 +if(r===b)return +if(s.y!=null)r.ad(0,s.gfH()) +s.i8=b +if(s.y!=null)b.an(0,s.gfH()) +s.aB()}, +saPj(a){if(this.V===a)return +this.V=a +this.aB()}, +saPi(a){return}, +saX5(a){var s=this +if(s.bj===a)return +s.bj=a +s.bB=s.b2=null +s.a9X(s.M) +s.aa4(s.av)}, +samk(a){if(this.ce===a)return +this.ce=a +this.bi()}, +saQY(a){if(this.dD===a)return +this.dD=a +this.bi()}, +saQQ(a){var s=this +if(s.fU===a)return +s.fU=a +s.aB() +s.cf()}, +gi_(){var s=this.fU +return s}, +oR(a){var s,r +this.o0() +s=this.aN.oR(a) +r=A.a5(s).h("W<1,hW>") +return A.ab(new A.W(s,new A.aPp(this),r),!0,r.h("aI.E"))}, +iR(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this +d.lf(a) +s=d.aN +r=s.e +r.toString +q=A.b([],t.O_) +r.JJ(q) +d.eu=q +if(B.b.fk(q,new A.aPo())&&A.ci()!==B.ct){a.c=a.a=!0 +return}r=d.cZ +if(r==null){p=new A.d8("") +o=A.b([],t.oU) +for(r=d.eu,n=r.length,m=0,l=0,k="";lh){d=c1[h].dy +d=d!=null&&d.G(0,new A.t0(i,b8))}else d=!1 +if(!d)break +b=c1[h] +d=s.b +d.toString +m.a(d) +b6.push(b);++h}b8=s.b +b8.toString +s=n.a(b8).bd$;++i}else{a=b7.oR(new A.kQ(j,e,B.v,!1,c,d)) +if(a.length===0)continue +d=B.b.ga9(a) +a0=new A.A(d.a,d.b,d.c,d.d) +a1=B.b.ga9(a).e +for(d=A.a5(a),c=d.h("aT<1>"),a2=new A.aT(a,1,b5,c),a2.cq(a,1,b5,d.c),a2=new A.cR(a2,a2.gF(0),c.h("cR")),c=c.h("aI.E");a2.H();){d=a2.d +if(d==null)d=c.a(d) +a0=a0.jj(new A.A(d.a,d.b,d.c,d.d)) +a1=d.e}d=a0.a +c=Math.max(0,d) +a2=a0.b +a3=Math.max(0,a2) +d=Math.min(a0.c-d,o.a(A.L.prototype.gaI.call(b4)).b) +a2=Math.min(a0.d-a2,o.a(A.L.prototype.gaI.call(b4)).d) +a4=Math.floor(c)-4 +a5=Math.floor(a3)-4 +d=Math.ceil(c+d)+4 +a2=Math.ceil(a3+a2)+4 +a6=new A.A(a4,a5,d,a2) +a7=A.q0() +a8=k+1 +a7.k2=new A.AH(k,b5) +a7.e=!0 +a7.bn=l +a3=f.b +b8=a3==null?b8:a3 +a7.rx=new A.eH(b8,f.f) +a9=f.c +if(a9!=null){b8=a9.b_ +if(b8!=null){a7.kk(B.dm,b8) +a7.cE(B.rq,!0)}}b8=b9.r +if(b8!=null){b0=b8.fp(a6) +if(b0.a>=b0.c||b0.b>=b0.d)b8=!(a4>=d||a5>=a2) +else b8=!1 +a7.cE(B.la,b8)}b1=A.bn("newChild") +b8=b4.i9 +d=b8==null?b5:b8.a!==0 +if(d===!0){b8.toString +b2=new A.bk(b8,A.w(b8).h("bk<1>")).gar(0) +if(!b2.H())A.X(A.cy()) +b8=b8.P(0,b2.ga1(0)) +b8.toString +if(b1.b!==b1)A.X(A.nc(b1.a)) +b1.b=b8}else{b3=new A.qh() +b8=A.RE(b3,b4.avK(b3)) +if(b1.b!==b1)A.X(A.nc(b1.a)) +b1.b=b8}if(b8===b1)A.X(A.fC(b1.a)) +J.bBI(b8,a7) +if(!b8.e.k(0,a6)){b8.e=a6 +b8.m_()}b8=b1.b +if(b8===b1)A.X(A.fC(b1.a)) +d=b8.a +d.toString +r.u(0,d,b8) +b8=b1.b +if(b8===b1)A.X(A.fC(b1.a)) +b6.push(b8) +k=a8 +l=a1}}b4.i9=r +b9.rI(0,b6,c0)}, +avK(a){return new A.aPl(this,a)}, +aB4(a){this.tj(a,B.aK)}, +aA8(a){var s=this,r=s.aN.a_u(s.d1.d) +if(r==null)return +s.tj(A.dJ(B.v,!a?r:s.d1.c,r,!1),B.aK)}, +aA4(a){var s=this,r=s.aN.a_v(s.d1.d) +if(r==null)return +s.tj(A.dJ(B.v,!a?r:s.d1.c,r,!1),B.aK)}, +aAa(a){var s,r=this,q=r.d1.gfQ(),p=r.a4B(r.aN.b.a.c.qj(q).b) +if(p==null)return +s=a?r.d1.c:p.a +r.tj(A.dJ(B.v,s,p.a,!1),B.aK)}, +aA6(a){var s,r=this,q=r.d1.gfQ(),p=r.a4E(r.aN.b.a.c.qj(q).a-1) +if(p==null)return +s=a?r.d1.c:p.a +r.tj(A.dJ(B.v,s,p.a,!1),B.aK)}, +a4B(a){var s,r,q +for(s=this.aN;!0;){r=s.b.a.c.qj(new A.c0(a,B.v)) +q=r.a +if(!(q>=0&&r.b>=0)||q===r.b)return null +if(!this.a6E(r))return r +a=r.b}}, +a4E(a){var s,r,q +for(s=this.aN;a>=0;){r=s.b.a.c.qj(new A.c0(a,B.v)) +q=r.a +if(!(q>=0&&r.b>=0)||q===r.b)return null +if(!this.a6E(r))return r +a=q-1}return null}, +a6E(a){var s,r,q,p +for(s=a.a,r=a.b,q=this.aN;s=m.gpZ().length)return A.Ig(new A.c0(m.gpZ().length,B.aL)) +s=m.b.a.c.qj(a) +switch(a.b.a){case 0:r=n-1 +break +case 1:r=n +break +default:r=null}if(r>0&&A.bqd(m.gpZ().charCodeAt(r))){m=s.a +q=o.a4E(m) +switch(A.ci().a){case 2:if(q==null){p=o.a4B(m) +if(p==null)return A.tF(B.v,n) +return A.dJ(B.v,n,p.b,!1)}return A.dJ(B.v,q.a,n,!1) +case 0:if(o.f4){if(q==null)return A.dJ(B.v,n,n+1,!1) +return A.dJ(B.v,q.a,n,!1)}break +case 1:case 4:case 3:case 5:break}}return A.dJ(B.v,s.a,s.b,!1)}, +B6(a,b){var s=Math.max(0,a-(1+this.V)),r=Math.min(b,s),q=this.eh?s:r +return new A.bI(q,this.eH!==1?s:1/0)}, +a21(a){return this.B6(a,0)}, +a20(){return this.B6(1/0,0)}, +o0(){var s=this,r=null,q=t.k,p=q.a(A.L.prototype.gaI.call(s)),o=s.B6(q.a(A.L.prototype.gaI.call(s)).b,p.a),n=o.a,m=o.b,l=m,k=n +s.aN.nj(l,k)}, +av1(){var s,r,q=this +switch(A.ci().a){case 2:case 4:s=q.V +r=q.aN.eo() +r=r.gb9(r) +q.hK=new A.A(0,0,s,0+(r+2)) +break +case 0:case 1:case 3:case 5:s=q.V +r=q.aN.eo() +r=r.gb9(r) +q.hK=new A.A(0,2,s,2+(r-4)) +break}}, +auq(){var s=this.aN.e +s=s==null?null:s.cc(new A.aPk()) +return s!==!1}, +gH2(){var s=this.dP +return s==null?this.dP=this.auq():s}, +dA(a){var s,r,q,p,o,n,m,l,k,j,i=this,h=null +if(!i.gH2())return B.x +s=a.a +r=a.b +q=i.B6(r,s) +p=q.a +o=q.b +n=o +m=p +l=i.gv9() +l.nS(i.pQ(r,A.qB())) +l.nj(n,m) +if(i.eh)k=r +else{l=i.gv9().b +j=l.c +l=l.a.c +l.gb9(l) +k=A.U(j+(1+i.V),s,r)}return new A.Q(k,A.U(i.a76(r),a.c,a.d))}, +cM(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null,c=t.k.a(A.L.prototype.gaI.call(e)),b=c.b +e.kt=e.pQ(b,A.xy()) +s=c.a +r=e.B6(b,s) +q=r.a +p=r.b +o=p +n=q +m=e.aN +m.nS(e.kt) +m.nj(o,n) +l=m.gaf_() +l.toString +e.agU(l) +e.av1() +l=m.b +k=l.c +l=l.a.c +l=l.gb9(l) +if(!e.eh){j=m.b +i=j.c +j=j.a.c +j.gb9(j) +b=A.U(i+(1+e.V),s,b)}h=e.eH +$label0$0:{if(h==null){s=m.b.a.c +s=s.gb9(s) +m=m.eo() +m=m.gb9(m) +s=Math.max(s,m*0) +break $label0$0}if(1===h){s=m.b.a.c +s=s.gb9(s) +break $label0$0}s=m.b.a.c +s=s.gb9(s) +j=m.eo() +j=j.gb9(j) +m=m.eo() +m=A.U(s,j*h,m.gb9(m)*h) +s=m +break $label0$0}e.id=new A.Q(b,A.U(s,c.c,c.d)) +g=new A.Q(k+(1+e.V),l) +f=A.L9(g) +l=e.K +if(l!=null)l.kY(f) +s=e.a5 +if(s!=null)s.kY(f) +e.fV=e.ayi(g) +e.i8.Cz(e.gaLA()) +e.i8.yr(0,e.fV)}, +abC(a,b){var s,r,q,p,o,n,m,l=this,k=l.gC(0),j=l.aN,i=j.b.a.c +i=Math.min(k.b,i.gb9(i)) +k=j.eo() +s=i-k.gb9(k)+5 +r=Math.min(l.gC(0).a,j.b.c)+4 +q=new A.A(-4,-4,r,s) +if(b!=null)l.fF=b +if(!l.fF)return A.bpa(a,q) +k=l.kT +p=k!=null?a.Y(0,k):B.h +if(l.vN&&p.a>0){l.fE=new A.i(a.a- -4,l.fE.b) +l.vN=!1}else if(l.r0&&p.a<0){l.fE=new A.i(a.a-r,l.fE.b) +l.r0=!1}if(l.r1&&p.b>0){l.fE=new A.i(l.fE.a,a.b- -4) +l.r1=!1}else if(l.vO&&p.b<0){l.fE=new A.i(l.fE.a,a.b-s) +l.vO=!1}k=l.fE +o=a.a-k.a +n=a.b-k.b +m=A.bpa(new A.i(o,n),q) +if(o<-4&&p.a<0)l.vN=!0 +else if(o>r&&p.a>0)l.r0=!0 +if(n<-4&&p.b<0)l.r1=!0 +else if(n>s&&p.b>0)l.vO=!0 +l.kT=a +return m}, +aNd(a){return this.abC(a,null)}, +a03(a,b,c,d){var s,r,q=this,p=a===B.jR +if(p){q.fE=B.h +q.kT=null +q.fF=!0 +q.r0=q.r1=q.vO=!1}p=!p +q.eB=p +q.r2=d +if(p){q.fT=c +if(d!=null){p=A.a35(B.wd,B.X,d) +p.toString +s=p}else s=B.wd +p=q.giK() +r=q.hK +r===$&&A.c() +p.sae6(s.Lg(r).dz(b))}else q.giK().sae6(null) +q.giK().w=q.r2==null}, +O1(a,b,c){return this.a03(a,b,c,null)}, +aCv(a,b){var s,r,q,p,o,n=this.aN.qg(a,B.M) +for(s=b.length,r=n.b,q=0;p=b.length,qr)return new A.bK(J.bkd(o),new A.i(n.a,o.gmW()),t.DC)}s=Math.max(0,p-1) +r=p!==0?B.b.ga_(b).gmW()+B.b.ga_(b).gUN():0 +return new A.bK(s,new A.i(n.a,r),t.DC)}, +a6L(a,b){var s,r,q=this,p=b.X(0,q.gje()),o=q.eB +if(!o)q.aLh(p) +s=q.K +r=q.a5 +if(r!=null)a.fb(r,b) +q.aN.aO(a.gcP(a),p) +q.agB(a,p) +if(s!=null)a.fb(s,b)}, +eK(a,b){if(a===this.K||a===this.a5)return +this.acV(a,b)}, +aO(a,b){var s,r,q,p,o,n,m,l=this +l.o0() +s=(l.fV>0||!l.gje().k(0,B.h))&&l.ea!==B.y +r=l.Vw +if(s){s=l.cx +s===$&&A.c() +q=l.gC(0) +r.sbr(0,a.q2(s,b,new A.A(0,0,0+q.a,0+q.b),l.gaEv(),l.ea,r.a))}else{r.sbr(0,null) +l.a6L(a,b)}p=l.d1 +s=p.gds() +if(s){s=l.Nv(p) +o=s[0].a +r=A.U(o.a,0,l.gC(0).a) +q=A.U(o.b,0,l.gC(0).b) +n=l.r3 +n.sbr(0,A.bfA(l.ce,new A.i(r,q).X(0,b))) +n=n.a +n.toString +a.wr(n,A.L.prototype.gjs.call(l),B.h) +if(s.length===2){m=s[1].a +s=A.U(m.a,0,l.gC(0).a) +r=A.U(m.b,0,l.gC(0).b) +a.wr(A.bfA(l.dD,new A.i(s,r).X(0,b)),A.L.prototype.gjs.call(l),B.h)}}}, +tA(a){var s,r=this +switch(r.ea.a){case 0:return null +case 1:case 2:case 3:if(r.fV>0||!r.gje().k(0,B.h)){s=r.gC(0) +s=new A.A(0,0,0+s.a,0+s.b)}else s=null +return s}}} +A.aPp.prototype={ +$1(a){var s=this.a +return new A.hW(a.a+s.gje().a,a.b+s.gje().b,a.c+s.gje().a,a.d+s.gje().b,a.e)}, +$S:148} +A.aPo.prototype={ +$1(a){return a.c!=null}, +$S:583} +A.aPl.prototype={ +$0(){var s=this.a,r=s.i9.i(0,this.b) +r.toString +s.uE(s,r.e)}, +$S:0} +A.aPq.prototype={ +$2(a,b){var s=a==null?null:a.jj(new A.A(b.a,b.b,b.c,b.d)) +return s==null?new A.A(b.a,b.b,b.c,b.d):s}, +$S:584} +A.aPn.prototype={ +$2(a,b){return new A.Q(a.aY(B.a9,1/0,a.gc0()),0)}, +$S:65} +A.aPm.prototype={ +$2(a,b){return new A.Q(a.aY(B.aa,1/0,a.gbY()),0)}, +$S:65} +A.aPk.prototype={ +$1(a){var s,r +if(a instanceof A.oW){s=a.b +$label0$0:{if(B.kG===s||B.kH===s||B.kI===s){r=!1 +break $label0$0}if(B.kJ===s||B.kK===s||B.dX===s){r=!0 +break $label0$0}r=null}}else r=!0 +return r}, +$S:86} +A.aob.prototype={ +gbs(a){return t.CA.a(A.L.prototype.gbs.call(this,0))}, +ghR(){return!0}, +glN(){return!0}, +swm(a){var s,r=this,q=r.K +if(a===q)return +r.K=a +s=a.cF(q) +if(s)r.bi() +if(r.y!=null){s=r.gfH() +q.ad(0,s) +a.an(0,s)}}, +aO(a,b){var s=t.CA.a(A.L.prototype.gbs.call(this,0)),r=this.K +if(s!=null){s.o0() +r.mt(a.gcP(a),this.gC(0),s)}}, +bc(a){this.fg(a) +this.K.an(0,this.gfH())}, +b3(a){this.K.ad(0,this.gfH()) +this.fh(0)}, +dA(a){return new A.Q(A.U(1/0,a.a,a.b),A.U(1/0,a.c,a.d))}} +A.wf.prototype={} +A.XN.prototype={ +sLc(a){if(J.f(a,this.w))return +this.w=a +this.D()}, +sLd(a){if(J.f(a,this.x))return +this.x=a +this.D()}, +sa_U(a){if(this.y===a)return +this.y=a +this.D()}, +sa_V(a){if(this.z===a)return +this.z=a +this.D()}, +mt(a,b,c){var s,r,q,p,o,n,m,l,k,j=this,i=j.x,h=j.w +if(i==null||h==null||i.a===i.b)return +s=j.r +s.sA(0,h) +r=c.aN +q=r.wG(A.dJ(B.v,i.a,i.b,!1),j.y,j.z) +for(p=q.length,o=0;o>>16&255,o>>>8&255,o&255)}if(r||n==null||!k.r)return +r=A.jS(s,B.Fb) +m=k.y +if(m===$){l=$.G().B() +k.y!==$&&A.N() +k.y=l +m=l}m.sA(0,n) +a.dm(r,m)}, +cF(a){var s=this +if(s===a)return!1 +return!(a instanceof A.Ua)||a.r!==s.r||a.w!==s.w||!J.f(a.z,s.z)||!J.f(a.Q,s.Q)||!a.as.k(0,s.as)||!J.f(a.at,s.at)||!J.f(a.ax,s.ax)}} +A.IW.prototype={ +an(a,b){var s,r,q +for(s=this.r,r=s.length,q=0;q")) +s=this.r +p=A.a5(s) +o=new J.cA(s,s.length,p.h("cA<1>")) +s=p.c +r=r.c +while(!0){if(!(q.H()&&o.H()))break +p=o.d +if(p==null)p=s.a(p) +n=q.d +if(p.cF(n==null?r.a(n):n))return!0}return!1}} +A.WA.prototype={ +bc(a){this.fg(a) +$.jN.ea$.a.E(0,this.gtg())}, +b3(a){$.jN.ea$.a.P(0,this.gtg()) +this.fh(0)}} +A.WB.prototype={ +bc(a){var s,r,q +this.aqD(a) +s=this.aZ$ +for(r=t.tq;s!=null;){s.bc(a) +q=s.b +q.toString +s=r.a(q).bd$}}, +b3(a){var s,r,q +this.aqE(0) +s=this.aZ$ +for(r=t.tq;s!=null;){s.b3(0) +q=s.b +q.toString +s=r.a(q).bd$}}} +A.aoc.prototype={} +A.QB.prototype={ +asN(a){var s,r,q,p,o=this +try{r=o.K +if(r!==""){q=$.bxx() +s=$.G().D7(q) +s.ws($.bxy()) +s.yk(r) +r=s.cY() +o.a5!==$&&A.aj() +o.a5=r}else{o.a5!==$&&A.aj() +o.a5=null}}catch(p){}}, +bZ(a){return 1e5}, +c2(a){return 1e5}, +glN(){return!0}, +mn(a){return!0}, +dA(a){return a.ca(B.a7S)}, +aO(a,b){var s,r,q,p,o,n,m,l,k,j=this +try{p=a.gcP(a) +o=j.gC(0) +n=b.a +m=b.b +l=$.G().B() +l.sA(0,$.bxw()) +p.b7(new A.A(n,m,n+o.a,m+o.b),l) +p=j.a5 +p===$&&A.c() +if(p!=null){s=j.gC(0).a +r=0 +q=0 +if(s>328){s-=128 +r+=64}p.kY(new A.vT(s)) +o=j.gC(0) +if(o.b>96+p.gb9(p)+12)q+=96 +o=a.gcP(a) +o.qZ(p,b.X(0,new A.i(r,q)))}}catch(k){}}} +A.a3N.prototype={ +W(){return"FlexFit."+this.b}} +A.lk.prototype={ +j(a){return this.AP(0)+"; flex="+A.j(this.e)+"; fit="+A.j(this.f)}} +A.a6v.prototype={ +W(){return"MainAxisSize."+this.b}} +A.vE.prototype={ +W(){return"MainAxisAlignment."+this.b}} +A.yD.prototype={ +W(){return"CrossAxisAlignment."+this.b}} +A.QD.prototype={ +saUU(a){if(this.a5!==a){this.a5=a +this.aB()}}, +sUz(a){if(this.av!==a){this.av=a +this.aB()}}, +i0(a){if(!(a.b instanceof A.lk))a.b=new A.lk(null,null,B.h)}, +Hs(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this +if(f.av===B.jv)return 0 +s=f.K +r=f.aZ$ +if(s===c){for(s=t.US,q=0,p=0,o=0;r!=null;){n=r.b +n.toString +m=s.a(n).e +if(m==null)m=0 +q+=m +if(m>0){n=a.$2(r,b) +l=r.b +l.toString +l=s.a(l).e +o=Math.max(o,n/(l==null?0:l))}else p+=a.$2(r,b) +n=r.b +n.toString +r=s.a(n).bd$}return o*q+p}else{for(s=t.US,q=0,p=0,k=0;r!=null;){n=r.b +n.toString +m=s.a(n).e +if(m==null)m=0 +q+=m +j=A.bn("mainSize") +i=A.bn("crossSize") +if(m===0){switch(f.K.a){case 0:n=r.gbY() +h=B.aa.ib(r.fx,1/0,n) +if(j.b!==j)A.X(A.nc(j.a)) +j.b=h +n=a.$2(r,h) +if(i.b!==i)A.X(A.nc(i.a)) +i.b=n +break +case 1:n=r.gcG() +h=B.aN.ib(r.fx,1/0,n) +if(j.b!==j)A.X(A.nc(j.a)) +j.b=h +n=a.$2(r,h) +if(i.b!==i)A.X(A.nc(i.a)) +i.b=n +break}n=j.b +if(n===j)A.X(A.fC(j.a)) +p+=n +n=i.b +if(n===i)A.X(A.fC(i.a)) +k=Math.max(k,A.hg(n))}n=r.b +n.toString +r=s.a(n).bd$}g=Math.max(0,(b-p)/q) +r=f.aZ$ +for(;r!=null;){n=r.b +n.toString +m=s.a(n).e +if(m==null)m=0 +if(m>0)k=Math.max(k,A.hg(a.$2(r,g*m))) +n=r.b +n.toString +r=s.a(n).bd$}return k}}, +c1(a){return this.Hs(new A.aPv(),a,B.b0)}, +bZ(a){return this.Hs(new A.aPt(),a,B.b0)}, +c_(a){return this.Hs(new A.aPu(),a,B.b1)}, +c2(a){return this.Hs(new A.aPs(),a,B.b1)}, +iO(a){if(this.K===B.b0)return this.Ka(a) +return this.aPC(a)}, +Br(a){var s +switch(this.K.a){case 0:s=a.b +break +case 1:s=a.a +break +default:s=null}return s}, +Bt(a){var s +switch(this.K.a){case 0:s=a.a +break +case 1:s=a.b +break +default:s=null}return s}, +dA(a){var s,r +if(this.av===B.jv)return B.x +s=this.a3h(a,A.qB()) +switch(this.K.a){case 0:r=new A.Q(s.a,s.b) +break +case 1:r=new A.Q(s.b,s.a) +break +default:r=null}return a.ca(r)}, +a3h(b5,b6){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,a7=null,a8=b5.a,a9=b5.b,b0=b5.c,b1=b5.d,b2=a6.Bt(new A.Q(A.U(1/0,a8,a9),A.U(1/0,b0,b1))),b3=isFinite(b2),b4=a6.aZ$ +switch(a6.av.a){case 0:s=!1 +break +case 2:s=!1 +break +case 1:s=!1 +break +case 4:s=!1 +break +case 3:s=!0 +break +default:s=a7}for(r=t.US,q=a7,p=0,o=0,n=0;b4!=null;){m=b4.b +m.toString +r.a(m) +l=m.e +if(l==null)l=0 +if(l>0){p+=l +q=b4}else{k=a6.K +$label0$1:{j=s +i=j +h=i +if(j){g=B.b0===k +f=g +e=k}else{e=a7 +g=e +f=!1}if(f){f=A.jx(b1,a7) +break $label0$1}if(h){if(j){f=e +d=j}else{f=k +e=f +d=!0}c=B.b1===f +f=c}else{c=a7 +d=j +f=!1}if(f){f=A.jx(a7,a9) +break $label0$1}b=!1===i +f=b +if(f)if(j){f=g +j=d}else{if(d){f=e +j=d}else{f=k +e=f +j=!0}g=B.b0===f +f=g}else{j=d +f=!1}if(f){f=new A.bb(0,1/0,0,b1) +break $label0$1}if(b)if(h)f=c +else{c=B.b1===(j?e:k) +f=c}else f=!1 +if(f){f=new A.bb(0,a9,0,1/0) +break $label0$1}f=a7}a=b6.$2(b4,f) +n+=a6.Bt(a) +o=Math.max(o,a6.Br(a))}b4=m.bd$}a0=Math.max(0,(b3?b2:0)-n) +if(p>0){a1=b3?a0/p:0/0 +b4=a6.aZ$ +for(a2=0;b4!=null;){m=b4.b +m.toString +r.a(m) +l=m.e +if(l==null)l=0 +if(l>0){$label1$2:{if(b3&&b4===q){f=a0-a2 +break $label1$2}if(b3){f=a1*l +break $label1$2}f=1/0 +break $label1$2}m=m.f +switch((m==null?B.hB:m).a){case 0:m=f +break +case 1:m=0 +break +default:m=a7}a3=s?a6.Br(new A.Q(A.U(1/0,a8,a9),A.U(1/0,b0,b1))):0 +switch(a6.K.a){case 0:m=b5.aOX(f,a3,m) +break +case 1:m=b5.aOW(f,m,a3) +break +default:m=a7}a=b6.$2(b4,m) +n+=a6.Bt(a) +a2+=f +o=Math.max(o,a6.Br(a))}m=b4.b +m.toString +b4=r.a(m).bd$}}a4=a6.M +$label2$5:{a5=B.ak===a4 +if(a5&&b3){a8=b2 +break $label2$5}if(a5||B.dj===a4){a8=n +break $label2$5}a8=a7}return new A.b3u(a8,o,n)}, +cM(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this,a1=null,a2="RenderBox was not laid out: ",a3=t.k.a(A.L.prototype.gaI.call(a0)),a4=a0.a3h(a3,A.xy()),a5=a4.a,a6=a4.b +if(a0.av===B.jv){s=a0.aZ$ +for(r=t.US,q=0,p=0,o=0;s!=null;){n=a0.aS +n.toString +m=s.FY(n,!0) +if(m!=null){q=Math.max(q,m) +p=Math.max(m,p) +n=s.id +o=Math.max((n==null?A.X(A.ad(a2+A.J(s).j(0)+"#"+A.bU(s))):n).b-m,o) +a6=Math.max(p+o,a6)}n=s.b +n.toString +s=r.a(n).bd$}}else q=0 +switch(a0.K.a){case 0:a0.id=a3.ca(new A.Q(a5,a6)) +a5=a0.gC(0).a +a6=a0.gC(0).b +break +case 1:a0.id=a3.ca(new A.Q(a6,a5)) +a5=a0.gC(0).b +a6=a0.gC(0).a +break}l=a5-a4.c +a0.b2=Math.max(0,-l) +k=Math.max(0,l) +j=a0.a5 +$label0$1:{if(B.ac===j||B.kv===j||B.i1===j){r=0 +break $label0$1}i=B.kw===j +if(i&&a0.dI$>1){r=k/(a0.dI$-1) +break $label0$1}h=B.CE===j +if(h&&a0.dI$>0){r=k/a0.dI$ +break $label0$1}g=B.kx===j +if(g&&a0.dI$>0){r=k/(a0.dI$+1) +break $label0$1}if(!i)if(!h)r=g +else r=!0 +else r=!0 +if(r){r=0 +break $label0$1}r=a1}switch(j.a){case 0:n=0 +break +case 1:n=k +break +case 2:n=k/2 +break +case 3:n=0 +break +case 4:n=r/2 +break +case 5:n=r +break +default:n=a1}f=A.bt8(a0.K,a0.ao,a0.aM) +e=f===!1 +d=e?a5-n:n +s=a0.aZ$ +for(n=t.US,f=a6/2;s!=null;){c=s.b +c.toString +n.a(c) +b=a0.av +switch(b.a){case 0:case 1:if(A.bt8(A.btN(a0.K),a0.ao,a0.aM)===(b===B.nm))a=0 +else{b=s.id +a=a6-a0.Br(b==null?A.X(A.ad(a2+A.J(s).j(0)+"#"+A.bU(s))):b)}break +case 2:b=s.id +a=f-a0.Br(b==null?A.X(A.ad(a2+A.J(s).j(0)+"#"+A.bU(s))):b)/2 +break +case 3:a=0 +break +case 4:if(a0.K===B.b0){b=a0.aS +b.toString +m=s.FY(b,!0) +a=m!=null?q-m:0}else a=0 +break +default:a=a1}if(e){b=s.id +d-=a0.Bt(b==null?A.X(A.ad(a2+A.J(s).j(0)+"#"+A.bU(s))):b)}switch(a0.K.a){case 0:b=new A.i(d,a) +break +case 1:b=new A.i(a,d) +break +default:b=a1}c.a=b +if(e)d-=r +else{b=s.id +d+=a0.Bt(b==null?A.X(A.ad(a2+A.J(s).j(0)+"#"+A.bU(s))):b)+r}s=c.bd$}}, +dZ(a,b){return this.De(a,b)}, +aO(a,b){var s,r,q,p=this +if(!(p.b2>1e-10)){p.yU(a,b) +return}if(p.gC(0).gaA(0))return +s=p.ct +r=p.cx +r===$&&A.c() +q=p.gC(0) +s.sbr(0,a.q2(r,b,new A.A(0,0,0+q.a,0+q.b),p.gacW(),p.bB,s.a))}, +t(){this.ct.sbr(0,null) +this.aqH()}, +tA(a){var s +switch(this.bB.a){case 0:return null +case 1:case 2:case 3:if(this.b2>1e-10){s=this.gC(0) +s=new A.A(0,0,0+s.a,0+s.b)}else s=null +return s}}, +fu(){return this.aoJ()}} +A.aPv.prototype={ +$2(a,b){return a.aY(B.a9,b,a.gc0())}, +$S:68} +A.aPt.prototype={ +$2(a,b){return a.aY(B.aa,b,a.gbY())}, +$S:68} +A.aPu.prototype={ +$2(a,b){return a.aY(B.ay,b,a.gcd())}, +$S:68} +A.aPs.prototype={ +$2(a,b){return a.aY(B.aN,b,a.gcG())}, +$S:68} +A.b3u.prototype={} +A.aoe.prototype={ +bc(a){var s,r,q +this.fg(a) +s=this.aZ$ +for(r=t.US;s!=null;){s.bc(a) +q=s.b +q.toString +s=r.a(q).bd$}}, +b3(a){var s,r,q +this.fh(0) +s=this.aZ$ +for(r=t.US;s!=null;){s.b3(0) +q=s.b +q.toString +s=r.a(q).bd$}}} +A.aof.prototype={} +A.WC.prototype={ +t(){var s,r,q +for(s=this.aRk$,r=s.length,q=0;q>")) +this.os(new A.a__(s,c.h("a__<0>")),b,!0) +return s.length===0?null:B.b.ga9(s).gb_T()}, +aty(a){var s,r=this +if(!r.w&&r.x!=null){s=r.x +s.toString +a.aaZ(s) +return}r.m4(a) +r.w=!1}, +fu(){var s=this.ank() +return s+(this.y==null?" DETACHED":"")}} +A.aIW.prototype={ +$0(){this.b.$1(this.a)}, +$S:0} +A.aIX.prototype={ +$0(){var s=this.a +s.a.P(0,this.b) +s.Cb(-1)}, +$S:0} +A.a61.prototype={ +sbr(a,b){var s=this.a +if(b==s)return +if(s!=null)if(--s.f===0)s.t() +this.a=b +if(b!=null)++b.f}, +j(a){var s=this.a +return"LayerHandle("+(s!=null?s.j(0):"DISPOSED")+")"}} +A.a8L.prototype={ +sagR(a){var s +this.jp() +s=this.ay +if(s!=null)s.t() +this.ay=a}, +t(){this.sagR(null) +this.a0T()}, +m4(a){var s=this.ay +s.toString +a.aaX(B.h,s,this.ch,this.CW)}, +ia(a,b,c){return!1}, +os(a,b,c){return this.ia(a,b,c,t.K)}} +A.j5.prototype={ +Bo(a){var s +this.anX(a) +if(!a)return +s=this.ax +for(;s!=null;){s.Bo(!0) +s=s.Q}}, +aN3(a){var s=this +s.Nd() +s.m4(a) +if(s.b>0)s.Bo(!0) +s.w=!1 +return a.cY()}, +t(){this.Z4() +this.a.af(0) +this.a0T()}, +Nd(){var s,r=this +r.ao0() +s=r.ax +for(;s!=null;){s.Nd() +r.w=r.w||s.w +s=s.Q}}, +ia(a,b,c){var s,r,q +for(s=this.ay,r=a.a;s!=null;s=s.as){if(s.os(a,b,!0))return!0 +q=r.length +if(q!==0)return!1}return!1}, +os(a,b,c){return this.ia(a,b,c,t.K)}, +bc(a){var s +this.anY(a) +s=this.ax +for(;s!=null;){s.bc(a) +s=s.Q}}, +b3(a){var s +this.anZ(0) +s=this.ax +for(;s!=null;){s.b3(0) +s=s.Q}this.Bo(!1)}, +Jm(a,b){var s,r=this +if(!r.gyp())r.jp() +s=b.b +if(s!==0)r.Cb(s) +b.r=r +s=r.y +if(s!=null)b.bc(s) +r.q6(b) +s=b.as=r.ay +if(s!=null)s.Q=b +r.ay=b +if(r.ax==null)r.ax=b +b.e.sbr(0,b)}, +k5(){var s,r,q=this.ax +for(;q!=null;){s=q.z +r=this.z +if(s<=r){q.z=r+1 +q.k5()}q=q.Q}}, +q6(a){var s=a.z,r=this.z +if(s<=r){a.z=r+1 +a.k5()}}, +a64(a){var s,r=this +if(!r.gyp())r.jp() +s=a.b +if(s!==0)r.Cb(-s) +a.r=null +if(r.y!=null)a.b3(0)}, +Z4(){var s,r=this,q=r.ax +for(;q!=null;q=s){s=q.Q +q.Q=q.as=null +r.a64(q) +q.e.sbr(0,null)}r.ay=r.ax=null}, +m4(a){this.mT(a)}, +mT(a){var s=this.ax +for(;s!=null;){s.aty(a) +s=s.Q}}, +yv(a,b){}} +A.or.prototype={ +sl0(a,b){if(!b.k(0,this.k3))this.jp() +this.k3=b}, +ia(a,b,c){return this.uJ(a,b.Y(0,this.k3),!0)}, +os(a,b,c){return this.ia(a,b,c,t.K)}, +yv(a,b){var s=this.k3 +b.aJ(0,s.a,s.b)}, +m4(a){var s=this,r=s.k3 +s.sks(a.YP(r.a,r.b,t.Yj.a(s.x))) +s.mT(a) +a.ie()}} +A.yl.prototype={ +ia(a,b,c){if(!this.k3.G(0,b))return!1 +return this.uJ(a,b,!0)}, +os(a,b,c){return this.ia(a,b,c,t.K)}, +m4(a){var s=this,r=s.k3 +r.toString +s.sks(a.ah9(r,s.k4,t.e4.a(s.x))) +s.mT(a) +a.ie()}} +A.LC.prototype={ +ia(a,b,c){if(!this.k3.G(0,b))return!1 +return this.uJ(a,b,!0)}, +os(a,b,c){return this.ia(a,b,c,t.K)}, +m4(a){var s=this,r=s.k3 +r.toString +s.sks(a.ah7(r,s.k4,t.cW.a(s.x))) +s.mT(a) +a.ie()}} +A.DZ.prototype={ +ia(a,b,c){if(!this.k3.G(0,b))return!1 +return this.uJ(a,b,!0)}, +os(a,b,c){return this.ia(a,b,c,t.K)}, +m4(a){var s=this,r=s.k3 +r.toString +s.sks(a.ah6(r,s.k4,t.Ax.a(s.x))) +s.mT(a) +a.ie()}} +A.NQ.prototype={ +m4(a){var s=this +s.sks(a.aha(s.bv,s.k3,t.IB.a(s.x))) +s.mT(a) +a.ie()}} +A.qg.prototype={ +sd3(a,b){var s=this +if(b.k(0,s.bv))return +s.bv=b +s.ah=!0 +s.jp()}, +m4(a){var s,r,q=this +q.bn=q.bv +if(!q.k3.k(0,B.h)){s=q.k3 +s=A.pH(s.a,s.b,0) +r=q.bn +r.toString +s.bL(0,r) +q.bn=s}q.sks(a.F6(q.bn.a,t.qf.a(q.x))) +q.mT(a) +a.ie()}, +SS(a){var s,r=this +if(r.ah){s=r.bv +s.toString +r.ac=A.Ai(A.bge(s)) +r.ah=!1}s=r.ac +if(s==null)return null +return A.dx(s,a)}, +ia(a,b,c){var s=this.SS(b) +if(s==null)return!1 +return this.aoj(a,s,!0)}, +os(a,b,c){return this.ia(a,b,c,t.K)}, +yv(a,b){var s=this.bn +if(s==null){s=this.bv +s.toString +b.bL(0,s)}else b.bL(0,s)}} +A.Pv.prototype={ +sTB(a,b){var s=this,r=s.bv +if(b!=r){if(b===255||r===255)s.sks(null) +s.bv=b +s.jp()}}, +m4(a){var s,r,q,p=this +if(p.ax==null){p.sks(null) +return}s=p.bv +s.toString +r=p.k3 +q=p.x +if(s<255)p.sks(a.ahb(s,r,t.Zr.a(q))) +else p.sks(a.YP(r.a,r.b,t.Yj.a(q))) +p.mT(a) +a.ie()}} +A.KR.prototype={ +sKT(a,b){if(!b.k(0,this.k3)){this.k3=b +this.jp()}}, +m4(a){var s=this,r=s.k3 +r.toString +s.sks(a.ah5(r,s.k4,t.tX.a(s.x))) +s.mT(a) +a.ie()}} +A.FI.prototype={ +j(a){var s=A.bU(this),r=this.a!=null?"":"" +return"#"+s+"("+r+")"}} +A.Ol.prototype={ +sw9(a){var s=this,r=s.k3 +if(r===a)return +if(s.y!=null){if(r.a===s)r.a=null +a.a=s}s.k3=a}, +sl0(a,b){if(b.k(0,this.k4))return +this.k4=b +this.jp()}, +bc(a){this.an0(a) +this.k3.a=this}, +b3(a){var s=this.k3 +if(s.a===this)s.a=null +this.an1(0)}, +ia(a,b,c){return this.uJ(a,b.Y(0,this.k4),!0)}, +os(a,b,c){return this.ia(a,b,c,t.K)}, +m4(a){var s,r=this +if(!r.k4.k(0,B.h)){s=r.k4 +r.sks(a.F6(A.pH(s.a,s.b,0).a,t.qf.a(r.x)))}else r.sks(null) +r.mT(a) +if(!r.k4.k(0,B.h))a.ie()}, +yv(a,b){var s +if(!this.k4.k(0,B.h)){s=this.k4 +b.aJ(0,s.a,s.b)}}} +A.Ne.prototype={ +SS(a){var s,r,q,p,o=this +if(o.R8){s=o.a_p() +s.toString +o.p4=A.Ai(s) +o.R8=!1}if(o.p4==null)return null +r=new A.oN(new Float64Array(4)) +r.p_(a.a,a.b,0,1) +s=o.p4.az(0,r).a +q=s[0] +p=o.p1 +return new A.i(q-p.a,s[1]-p.b)}, +ia(a,b,c){var s,r=this +if(r.k3.a==null){if(r.k4)return r.uJ(a,b.Y(0,r.ok),!0) +return!1}s=r.SS(b) +if(s==null)return!1 +return r.uJ(a,s,!0)}, +os(a,b,c){return this.ia(a,b,c,t.K)}, +a_p(){var s,r +if(this.p3==null)return null +s=this.p2 +r=A.pH(-s.a,-s.b,0) +s=this.p3 +s.toString +r.bL(0,s) +return r}, +ax0(){var s,r,q,p,o,n,m=this +m.p3=null +s=m.k3.a +if(s==null)return +r=t.KV +q=A.b([s],r) +p=A.b([m],r) +A.aEJ(s,m,q,p) +o=A.bmJ(q) +s.yv(null,o) +r=m.p1 +o.aJ(0,r.a,r.b) +n=A.bmJ(p) +if(n.jR(n)===0)return +n.bL(0,o) +m.p3=n +m.R8=!0}, +gyp(){return!0}, +m4(a){var s,r,q=this +if(q.k3.a==null&&!q.k4){q.p2=q.p3=null +q.R8=!0 +q.sks(null) +return}q.ax0() +s=q.p3 +r=t.qf +if(s!=null){q.p2=q.ok +q.sks(a.F6(s.a,r.a(q.x))) +q.mT(a) +a.ie()}else{q.p2=null +s=q.ok +q.sks(a.F6(A.pH(s.a,s.b,0).a,r.a(q.x))) +q.mT(a) +a.ie()}q.R8=!0}, +yv(a,b){var s=this.p3 +if(s!=null)b.bL(0,s) +else{s=this.ok +b.bL(0,A.pH(s.a,s.b,0))}}} +A.akK.prototype={} +A.alz.prototype={ +aYN(a){var s=this.a +this.a=a +return s}, +j(a){var s="#",r=A.bU(this.b),q=this.a.a +return s+A.bU(this)+"("+("latestEvent: "+(s+r))+", "+("annotations: [list of "+q+"]")+")"}} +A.alA.prototype={ +gof(a){var s=this.c +return s.gof(s)}} +A.a73.prototype={ +a5x(a){var s,r,q,p,o,n,m=t._h,l=A.lq(null,null,m,t.xV) +for(s=a.a,r=s.length,q=0;q") +this.b.aRZ(a.gof(0),a.d,A.rI(new A.bk(s,r),new A.aKX(),r.h("z.E"),t.Pb))}, +b_2(a,b){var s,r,q,p,o,n=this,m={} +if(a.gdR(a)!==B.cq)return +if(t.ks.b(a))return +m.a=null +if(t.PB.b(a))m.a=A.aGD() +else{s=a.gA7() +m.a=b==null?n.a.$2(a.gbe(a),s):b}r=a.gof(a) +q=n.c +p=q.i(0,r) +if(!A.bHn(p,a))return +o=q.a +new A.aL_(m,n,p,a,r).$0() +if(o!==0!==(q.a!==0))n.D()}, +aZP(){new A.aKY(this).$0()}} +A.aKX.prototype={ +$1(a){return a.gacO(a)}, +$S:586} +A.aL_.prototype={ +$0(){var s=this +new A.aKZ(s.a,s.b,s.c,s.d,s.e).$0()}, +$S:0} +A.aKZ.prototype={ +$0(){var s,r,q,p,o,n=this,m=null,l=n.c +if(l==null){s=n.d +if(t.PB.b(s))return +n.b.c.u(0,n.e,new A.alz(A.lq(m,m,t._h,t.xV),s))}else{s=n.d +if(t.PB.b(s))n.b.c.P(0,s.gof(s))}r=n.b +q=r.c.i(0,n.e) +if(q==null){l.toString +q=l}p=q.b +q.b=s +o=t.PB.b(s)?A.lq(m,m,t._h,t.xV):r.a5x(n.a.a) +r.a51(new A.alA(q.aYN(o),o,p,s))}, +$S:0} +A.aKY.prototype={ +$0(){var s,r,q,p,o,n,m +for(s=this.a,r=s.c.gbm(0),q=A.w(r),q=q.h("@<1>").ak(q.y[1]),r=new A.bt(J.az(r.a),r.b,q.h("bt<1,2>")),q=q.y[1];r.H();){p=r.a +if(p==null)p=q.a(p) +o=p.b +n=s.axo(p) +m=p.a +p.a=n +s.a51(new A.alA(m,n,o,null))}}, +$S:0} +A.aKV.prototype={ +$2(a,b){var s +if(a.gZR()&&!this.a.aR(0,a)){s=a.gagf(a) +if(s!=null)s.$1(this.b.cn(this.c.i(0,a)))}}, +$S:587} +A.aKW.prototype={ +$1(a){return!this.a.aR(0,a)}, +$S:588} +A.atD.prototype={} +A.eg.prototype={ +b3(a){}, +j(a){return""}} +A.vS.prototype={ +fb(a,b){var s,r=this +if(a.ghR()){r.GC() +if(!a.cy){s=a.ay +s===$&&A.c() +s=!s}else s=!0 +if(s)A.boq(a,null,!0) +else if(a.db)A.bHX(a) +s=a.ch.a +s.toString +t.gY.a(s) +s.sl0(0,b) +r.ab6(s)}else{s=a.ay +s===$&&A.c() +if(s){a.ch.sbr(0,null) +a.RV(r,b)}else a.RV(r,b)}}, +ab6(a){a.hW(0) +this.a.Jm(0,a)}, +gcP(a){var s +if(this.e==null)this.a8I() +s=this.e +s.toString +return s}, +a8I(){var s,r,q=this +q.c=A.bI2(q.b) +s=$.G() +r=s.lu() +q.d=r +q.e=s.lt(r,null) +r=q.c +r.toString +q.a.Jm(0,r)}, +GC(){var s,r=this +if(r.e==null)return +s=r.c +s.toString +s.sagR(r.d.jT()) +r.e=r.d=r.c=null}, +a08(){if(this.c==null)this.a8I() +var s=this.c +if(!s.ch){s.ch=!0 +s.jp()}}, +zP(a,b,c,d){var s,r=this +if(a.ax!=null)a.Z4() +r.GC() +r.ab6(a) +s=r.aP7(a,d==null?r.b:d) +b.$2(s,c) +s.GC()}, +wr(a,b,c){return this.zP(a,b,c,null)}, +aP7(a,b){return new A.vS(a,b)}, +q2(a,b,c,d,e,f){var s,r,q=this +if(e===B.y){d.$2(q,b) +return null}s=c.dz(b) +if(a){r=f==null?new A.yl(B.a4,A.D(t.S,t.Q),A.aX(t.kd)):f +if(!s.k(0,r.k3)){r.k3=s +r.jp()}if(e!==r.k4){r.k4=e +r.jp()}q.zP(r,d,b,s) +return r}else{q.aNI(s,e,s,new A.aMD(q,d,b)) +return null}}, +ah8(a,b,c,d,e,f,g){var s,r,q,p=this +if(f===B.y){e.$2(p,b) +return null}s=c.dz(b) +r=d.dz(b) +if(a){q=g==null?new A.LC(B.ce,A.D(t.S,t.Q),A.aX(t.kd)):g +if(!r.k(0,q.k3)){q.k3=r +q.jp()}if(f!==q.k4){q.k4=f +q.jp()}p.zP(q,e,b,s) +return q}else{p.aNG(r,f,s,new A.aMC(p,e,b)) +return null}}, +YO(a,b,c,d,e,f,g){var s,r,q,p=this +if(f===B.y){e.$2(p,b) +return null}s=c.dz(b) +r=d.dz(b) +if(a){q=g==null?new A.DZ(B.ce,A.D(t.S,t.Q),A.aX(t.kd)):g +if(r!==q.k3){q.k3=r +q.jp()}if(f!==q.k4){q.k4=f +q.jp()}p.zP(q,e,b,s) +return q}else{p.aNE(r,f,s,new A.aMB(p,e,b)) +return null}}, +aXY(a,b,c,d,e,f){return this.YO(a,b,c,d,e,B.ce,f)}, +wt(a,b,c,d,e){var s,r=this,q=b.a,p=b.b,o=A.pH(q,p,0) +o.bL(0,c) +o.aJ(0,-q,-p) +if(a){s=e==null?A.bqy(null):e +s.sd3(0,o) +r.zP(s,d,b,A.bo3(o,r.b)) +return s}else{q=r.gcP(r) +q.bU(0) +q.az(0,o.a) +d.$2(r,b) +r.gcP(r).bw(0) +return null}}, +ahc(a,b,c,d){var s=d==null?A.bg2():d +s.sTB(0,b) +s.sl0(0,a) +this.wr(s,c,B.h) +return s}, +j(a){return"PaintingContext#"+A.eT(this)+"(layer: "+this.a.j(0)+", canvas bounds: "+this.b.j(0)+")"}} +A.aMD.prototype={ +$0(){return this.b.$2(this.a,this.c)}, +$S:0} +A.aMC.prototype={ +$0(){return this.b.$2(this.a,this.c)}, +$S:0} +A.aMB.prototype={ +$0(){return this.b.$2(this.a,this.c)}, +$S:0} +A.aA1.prototype={} +A.t_.prototype={ +A0(){var s=this.cx +if(s!=null)s.a.Vr()}, +sZf(a){var s=this.e +if(s==a)return +if(s!=null)s.b3(0) +this.e=a +if(a!=null)a.bc(this)}, +ae9(){var s,r,q,p,o,n,m,l,k,j,i,h=this +try{for(o=t.TT;n=h.r,n.length!==0;){s=n +h.r=A.b([],o) +J.bko(s,new A.aNz()) +for(r=0;r")) +i.cq(m,l,k,j.c) +B.b.I(n,i) +break}}q=J.bG(s,r) +if(q.z&&q.y===h)q.aCs()}h.f=!1}for(o=h.CW,o=A.cT(o,o.r,A.w(o).c),n=o.$ti.c;o.H();){m=o.d +p=m==null?n.a(m):m +p.ae9()}}finally{h.f=!1}}, +awS(a){try{a.$0()}finally{this.f=!0}}, +ae8(){var s,r,q,p,o=this.z +B.b.i1(o,new A.aNy()) +for(s=o.length,r=0;r0){if(s.at==null){r=t.bu +s.at=new A.RF(s.c,A.C(r),A.D(t.S,r),A.C(r),$.aa()) +r=s.b +if(r!=null)r.$0()}}else{r=s.at +if(r!=null){r.t() +s.at=null +r=s.d +if(r!=null)r.$0()}}}, +aeb(){var s,r,q,p,o,n,m,l,k=this +if(k.at==null)return +try{p=k.ch +o=A.ab(p,!0,A.w(p).c) +B.b.i1(o,new A.aNB()) +s=o +p.af(0) +for(p=s,n=p.length,m=0;m0;n=m){m=n-1 +r[n].eK(r[m],o)}return o}, +tA(a){return null}, +UO(a){return null}, +Gb(){this.y.ch.E(0,this) +this.y.A0()}, +iR(a){}, +Au(a){var s,r,q=this +if(q.y.at==null)return +s=q.fr +if(s!=null)r=!(s.ch!=null&&s.y) +else r=!1 +if(r)s.akR(a) +else if(q.gbs(q)!=null)q.gbs(q).Au(a)}, +gIq(){var s,r=this +if(r.dx==null){s=A.q0() +r.dx=s +r.iR(s)}s=r.dx +s.toString +return s}, +vo(){this.dy=!0 +this.fr=null +this.cc(new A.aPG())}, +cf(){var s,r,q,p,o=this,n=o.y +if(n==null||n.at==null){o.dx=null +return}if(o.fr!=null){n=o.dx +n=n==null?null:n.a +s=n===!0}else s=!1 +n=o.dx +r=(n==null?null:n.k1)!=null||o.gIq().k1!=null +o.dx=null +q=o.gIq().a&&s +p=o +while(!0){if(p.gbs(p)!=null)n=r||!q +else n=!1 +if(!n)break +if(p!==o&&p.dy)break +p.dy=!0 +if(q)r=!1 +p=p.gbs(p) +if(p.dx==null){n=A.q0() +p.dx=n +p.iR(n)}q=p.dx.a +if(q&&p.fr==null)return}if(p!==o&&o.fr!=null&&o.dy)o.y.ch.P(0,o) +if(!p.dy){p.dy=!0 +n=o.y +if(n!=null){n.ch.E(0,p) +o.y.A0()}}}, +aLj(){var s,r,q,p,o,n,m,l=this,k=null +if(l.z)return +s=l.fr +r=s==null +if(r)q=k +else{q=s.ch +if(q==null)q=k +else if(!q.Q)q=q.ch!=null&&q.y +else q=!0}s=r?k:s.z +p=t.pp.a(l.a4L(s===!0,q===!0)) +s=t.QF +o=A.b([],s) +n=A.b([],s) +s=l.fr +r=s==null +q=r?k:s.f +m=r?k:s.r +s=r?k:s.w +p.yH(s==null?0:s,m,q,o,n)}, +a4L(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d={},c=e.gIq() +d.a=c.d +d.b=!c.e&&!c.a +s=a||c.b +r=b||c.p4 +q=A.b([],t.Bd) +p=c.c||e.gbs(e)==null +o=c.k1 +n=t.pp +m=A.D(t.ZX,n) +l=t.CZ +k=A.b([],l) +j=A.b([],t.i1) +i=c.K +i=i==null?null:i.a!==0 +e.jx(new A.aPB(d,e,r,s,q,k,j,c,i===!0,o,m)) +if(p)for(n=k.length,h=0;h"))) +for(i=g.b,f=i.length,h=0;h#"+A.bU(this)}, +j(a){return this.fu()}, +iG(a,b,c,d){var s,r=this +if(r.gbs(r) instanceof A.L){s=r.gbs(r) +s.toString +s.iG(a,b==null?r:b,c,d)}}, +AC(){return this.iG(B.bt,null,B.G,null)}, +uD(a){return this.iG(B.bt,null,B.G,a)}, +wY(a,b,c){return this.iG(a,null,b,c)}, +uE(a,b){return this.iG(B.bt,a,B.G,b)}, +$iaW:1} +A.aPE.prototype={ +$0(){var s=A.b([],t._),r=this.a +s.push(A.beu("The following RenderObject was being processed when the exception was fired",B.Tz,r)) +s.push(A.beu("RenderObject",B.TA,r)) +return s}, +$S:24} +A.aPH.prototype={ +$0(){this.b.$1(this.c.a(this.a.gaI()))}, +$S:0} +A.aPF.prototype={ +$1(a){var s +a.a9N() +s=a.cx +s===$&&A.c() +if(s)this.a.cx=!0}, +$S:12} +A.aPG.prototype={ +$1(a){a.vo()}, +$S:12} +A.aPB.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=a.a4L(f.d,f.c) +if(e.a){B.b.af(f.e) +B.b.af(f.f) +B.b.af(f.r) +if(!f.w.a)f.a.a=!0}for(s=e.gafV(),r=s.length,q=f.f,p=f.y!=null,o=f.x,n=f.b,m=f.w,l=f.e,k=f.z,j=0;j1){b=new A.aps() +b.a3i(a3,a4,c)}else b=a2 +c=b.c +c===$&&A.c() +a=b.d +a===$&&A.c() +a0=A.ie(c,a) +e=e==null?a2:e.jj(a0) +if(e==null)e=a0 +c=b.b +if(c!=null){a1=A.ie(b.c,c) +f=f==null?a2:f.fp(a1) +if(f==null)f=a1}c=b.a +if(c!=null){a1=A.ie(b.c,c) +g=g==null?a2:g.fp(a1) +if(g==null)g=a1}d=d.c +if(d!=null)l.I(0,d)}}if(h!=null)j=!(e.a>=e.c||e.b>=e.d) +else j=!1 +if(j){if(i==null||a6.G(0,i.b))i=A.RE(a2,B.b.ga9(o).gwX()) +a6.E(0,i.b) +i.dy=l +if(!i.e.k(0,e)){i.e=e +i.m_()}if(!A.bfN(i.d,a2)){i.d=null +i.m_()}i.f=f +i.r=g +for(k=k.gar(m);k.H();){j=k.ga1(k) +if(j.gma()!=null)B.b.ga9(j.b).fr=i}i.ZO(0,h) +a5.push(i)}}}, +yH(a,b,a0,a1,a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=null,d=A.C(t.S),c=f.y +for(s=f.x,r=s.length,q=0;q");s.H();){n=s.ga1(s) +if(n instanceof A.D1){if(n.z){m=n.b +m=B.b.ga9(m).fr!=null&&d.G(0,B.b.ga9(m).fr.b)}else m=!1 +if(m)B.b.ga9(n.b).fr=null}m=n.b +l=new A.aT(r,1,e,p) +l.cq(r,1,e,o) +B.b.I(m,l) +n.yH(a+f.f.y2,b,a0,a1,a2)}return}s=f.b +k=s.length>1?A.bNE(s,b,a0):e +r=!f.e +if(r){if(k==null)p=e +else{p=k.d +p===$&&A.c() +if(!p.gaA(0)){p=k.c +p===$&&A.c() +p=p.afs()}else p=!0}p=p===!0}else p=!1 +if(p)return +p=B.b.ga9(s) +j=p.fr +if(j==null)j=p.fr=A.RE(e,B.b.ga9(s).gwX()) +j.dy=f.c +j.w=a +if(a!==0){f.Hl() +p=f.f +p.sh1(0,p.y2+a)}if(k!=null){p=k.d +p===$&&A.c() +j.scg(0,p) +p=k.c +p===$&&A.c() +j.sd3(0,p) +j.f=k.b +j.r=k.a +if(r&&k.e){f.Hl() +f.f.cE(B.la,!0)}}r=t.QF +i=A.b([],r) +f.a6n(j.f,j.r,a2,d) +for(p=J.az(c);p.H();){o=p.ga1(p) +if(o instanceof A.D1){if(o.z){n=o.b +n=B.b.ga9(n).fr!=null&&d.G(0,B.b.ga9(n).fr.b)}else n=!1 +if(n)B.b.ga9(o.b).fr=null}h=A.b([],r) +n=j.f +o.yH(0,j.r,n,i,h) +B.b.I(a2,h)}r=f.f +if(r.a)B.b.ga9(s).yw(j,f.f,i) +else j.rI(0,i,r) +a1.push(j) +for(s=a2.length,r=t.g3,q=0;q0;){r=c[s];--s +q=c[s] +A.bNF(r,q,g.c) +if(r===q.gbs(q))g.a3b(r,q,g.b,g.a) +else{p=A.b([q],e) +o=q.gbs(q) +while(!0){n=o==null +m=!n +if(!(m&&o.fr==null))break +p.push(o) +o=o.gbs(o)}if(n)l=f +else{l=o.fr +l=l==null?f:l.r}g.a=l +if(n)n=f +else{n=o.fr +n=n==null?f:n.f}g.b=n +if(m)for(k=p.length-1,j=o;k>=0;--k){g.a3b(j,p[k],g.b,g.a) +j=p[k]}}}i=B.b.ga9(c) +e=g.b +e=e==null?f:e.fp(i.gux()) +if(e==null)e=i.gux() +g.d=e +n=g.a +if(n!=null){h=n.fp(e) +e=h.gaA(0)&&!g.d.gaA(0) +g.e=e +if(!e)g.d=h}}, +a3b(a,b,c,d){var s,r,q,p=$.byy() +p.ci() +a.eK(b,p) +s=a.tA(b) +r=A.brG(A.brF(s,d),p) +this.a=r +if(r==null)this.b=null +else{q=a.UO(b) +this.b=A.brG(q==null?A.brF(c,s):q,p)}}} +A.amI.prototype={} +A.aoi.prototype={} +A.t0.prototype={ +k(a,b){if(b==null)return!1 +return b instanceof A.t0&&b.b===this.b}, +gL(a){return A.a6(B.ahu,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.nu.prototype={ +b3(a){this.a=this.b=null +this.arl(0)}, +j(a){var s=A.j(this.b),r=this.a +r=r==null?"not laid out":"offset: "+r.j(0) +return"widget: "+s+", "+r}} +A.aa4.prototype={ +i0(a){if(!(a.b instanceof A.nu))a.b=new A.nu(null,null)}, +pQ(a,b){var s,r=A.b([],t.UZ),q=this.aZ$,p=A.w(this).h("aZ.1") +while(q!=null){r.push(A.bJ6(q,a,b)) +s=q.b +s.toString +q=p.a(s).bd$}return r}, +agU(a){var s,r,q,p,o,n,m=this.aZ$ +for(s=a.length,r=t.tq,q=A.w(this).h("aZ.1"),p=0;ph){d=c1[h].dy +d=d!=null&&d.G(0,new A.t0(i,b8))}else d=!1 +if(!d)break +b=c1[h] +d=s.b +d.toString +if(m.a(d).a!=null)b6.push(b);++h}b8=s.b +b8.toString +s=n.a(b8).bd$;++i}else{a=o.a(A.L.prototype.gaI.call(b4)) +b7.nS(b4.R) +b7.nj(a.b,a.a) +a0=b7.wG(new A.kQ(j,e,B.v,!1,c,d),B.dA,B.cO) +if(a0.length===0)continue +d=B.b.ga9(a0) +a1=new A.A(d.a,d.b,d.c,d.d) +a2=B.b.ga9(a0).e +for(d=A.a5(a0),c=d.h("aT<1>"),a=new A.aT(a0,1,b5,c),a.cq(a0,1,b5,d.c),a=new A.cR(a,a.gF(0),c.h("cR")),c=c.h("aI.E");a.H();){d=a.d +if(d==null)d=c.a(d) +a1=a1.jj(new A.A(d.a,d.b,d.c,d.d)) +a2=d.e}d=a1.a +c=Math.max(0,d) +a=a1.b +a3=Math.max(0,a) +d=Math.min(a1.c-d,o.a(A.L.prototype.gaI.call(b4)).b) +a=Math.min(a1.d-a,o.a(A.L.prototype.gaI.call(b4)).d) +a4=Math.floor(c)-4 +a5=Math.floor(a3)-4 +d=Math.ceil(c+d)+4 +a=Math.ceil(a3+a)+4 +a6=new A.A(a4,a5,d,a) +a7=A.q0() +a8=k+1 +a7.k2=new A.AH(k,b5) +a7.e=!0 +a7.bn=l +a3=f.b +b8=a3==null?b8:a3 +a7.rx=new A.eH(b8,f.f) +a9=f.c +if(a9!=null){b8=a9.b_ +if(b8!=null){a7.kk(B.dm,b8) +a7.cE(B.rq,!0)}}b8=b9.r +if(b8!=null){b0=b8.fp(a6) +if(b0.a>=b0.c||b0.b>=b0.d)b8=!(a4>=d||a5>=a) +else b8=!1 +a7.cE(B.la,b8)}b8=b4.aa +d=b8==null?b5:b8.a!==0 +if(d===!0){b8.toString +b1=new A.bk(b8,A.w(b8).h("bk<1>")).gar(0) +if(!b1.H())A.X(A.cy()) +b8=b8.P(0,b1.ga1(0)) +b8.toString +b2=b8}else{b3=new A.qh() +b2=A.RE(b3,b4.aEF(b3))}b2.ZO(0,a7) +if(!b2.e.k(0,a6)){b2.e=a6 +b2.m_()}b8=b2.a +b8.toString +r.u(0,b8,b2) +b6.push(b2) +k=a8 +l=a2}}b4.aa=r +b9.rI(0,b6,c0)}, +aEF(a){return new A.aPK(this,a)}, +vo(){this.OE() +this.aa=null}} +A.aPN.prototype={ +$1(a){return a.z=null}, +$S:593} +A.aPO.prototype={ +$1(a){var s=a.x +s===$&&A.c() +return s.c!==B.fJ}, +$S:594} +A.aPM.prototype={ +$2(a,b){return new A.Q(a.aY(B.a9,1/0,a.gc0()),0)}, +$S:65} +A.aPL.prototype={ +$2(a,b){return new A.Q(a.aY(B.aa,1/0,a.gbY()),0)}, +$S:65} +A.aPJ.prototype={ +$1(a){var s,r +if(a instanceof A.oW){s=a.b +$label0$0:{if(B.kG===s||B.kH===s||B.kI===s){r=!1 +break $label0$0}if(B.kJ===s||B.kK===s||B.dX===s){r=!0 +break $label0$0}r=null}}else r=!0 +return r}, +$S:86} +A.aPK.prototype={ +$0(){var s=this.a,r=s.aa.i(0,this.b) +r.toString +s.uE(s,r.e)}, +$S:0} +A.u1.prototype={ +gm(a){var s=this.x +s===$&&A.c() +return s}, +aEG(){var s=this,r=s.a4K(),q=s.x +q===$&&A.c() +if(q.k(0,r))return +s.x=r +s.D()}, +a4K(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=f.d +if(e==null||f.e==null)return B.FB +s=e.a +r=f.e.a +e=f.b +q=e.Bu(new A.c0(s,B.v)) +p=s===r?q:e.Bu(new A.c0(r,B.v)) +o=e.K +n=o.w +n.toString +m=s>r!==(B.ad===n) +l=A.dJ(B.v,s,r,!1) +k=A.b([],t.AO) +for(e=e.oR(l),n=e.length,j=0;j=p&&m.a.a>p}else s=!0}else s=!1 +if(s)m=g +if(b){if(m!=null)if(h.f&&f!=null&&e!=null){s=n.a +p=f.a +o=e.a +if(s!==p&&p>o!==sp?m.a:e}else if(f!=null)l=n.ae.a +if(i!==sp!==s>p){l=sp?m.a:f}else if(e!=null)l=n.ap +if(s!==p&&i!==s>p){k=h.xM(e) +h.e=i?k.a:k.b}}l=g}s=l==null?n:l}l=h.Ps(s) +if(b)h.e=l +else h.d=l +s=l.a +p=h.a +if(s===p.b)return B.bz +if(s===p.a)return B.c_ +return A.aRW(h.gqE(),q)}, +Ps(a){var s,r=a.a,q=this.a,p=q.b +if(r<=p)s=r===p&&a.b===B.v +else s=!0 +if(s)return new A.c0(p,B.aL) +q=q.a +if(r=q&&s.a.a>q)return B.bz}o.d=n +o.e=s.a +o.f=!0 +return B.bA}, +xM(a){var s,r,q,p,o=this.b +o.t7(t.k.a(A.L.prototype.gaI.call(o))) +s=o.K.b.a.c.qj(a) +r=A.bn("start") +q=A.bn("end") +o=a.a +p=s.b +if(o>p)r.b=q.b=new A.c0(o,B.v) +else{r.b=new A.c0(s.a,B.v) +q.b=new A.c0(p,B.aL)}o=r.bl() +return new A.anX(q.bl(),o)}, +aza(a,b,c){var s,r,q,p,o,n,m,l,k=this,j=k.b,i=j.cW(0,null) +if(i.jR(i)===0)switch(c){case B.ri:case B.l8:return B.c_ +case B.rj:case B.l7:return B.bz}s=A.dx(i,new A.i(a,0)).a +switch(c){case B.ri:case B.rj:if(b){j=k.e +j.toString +r=j}else{j=k.d +j.toString +r=j}q=k.aBE(r,!1,s) +p=q.a +o=q.b +break +case B.l7:case B.l8:n=k.e +if(n==null){n=new A.c0(k.a.b,B.aL) +k.e=n +r=n}else r=n +n=k.d +if(n==null){k.d=r +m=r}else m=n +l=j.Bu(b?r:m) +n=j.K.eo() +p=j.iD(new A.i(s,l.b-n.gb9(n)/2)) +o=B.bA +break +default:p=null +o=null}if(b)k.e=p +else k.d=p +return o}, +azK(a,b,c){var s,r,q,p,o,n,m=this,l=m.e +if(l==null){l=m.a +l=a?new A.c0(l.a,B.v):new A.c0(l.b,B.aL) +m.e=l +s=l}else s=l +l=m.d +if(l==null){m.d=s +r=s}else r=l +s=b?s:r +if(a&&s.a===m.a.b)return B.bz +l=!a +if(l&&s.a===m.a.a)return B.c_ +switch(c){case B.t_:l=m.a +q=m.RD(s,a,new A.DN(B.d.am(m.c,l.a,l.b))) +p=B.bA +break +case B.aa6:l=m.b.K +o=l.e +o.toString +q=m.RD(s,a,new A.IG(o,l.b.a.c).gag0()) +p=B.bA +break +case B.aa7:q=m.aDh(s,a,new A.FM(m)) +p=B.bA +break +case B.aa8:o=m.a +n=o.a +o=o.b +q=m.RD(s,a,new A.Mp(B.d.am(m.c,n,o))) +if(a&&q.a===o)p=B.bz +else p=l&&q.a===n?B.c_:B.bA +break +default:p=null +q=null}if(b)m.e=q +else m.d=q +return p}, +RD(a,b,c){var s,r=a.a +if(b){r=c.kc(r) +s=r==null?this.a.b:r}else{r=c.ka(r-1) +s=r==null?this.a.a:r}return new A.c0(s,B.v)}, +aDh(a,b,c){var s,r,q,p,o=this +switch(a.b.a){case 0:s=a.a +if(s<1&&!b)return B.fR +r=o.a.a +s=new A.DN(o.c).ka(r+s) +if(s==null)s=r +q=Math.max(0,s)-1 +break +case 1:q=a.a +break +default:q=null}if(b){s=c.kc(q) +p=s==null?o.a.b:s}else{s=c.ka(q) +p=s==null?o.a.a:s}return new A.c0(p,B.v)}, +aBE(a,b,c){var s,r,q,p,o,n=this,m=n.b,l=m.K.yJ(),k=m.qg(a,B.M),j=l.length,i=j-1 +for(s=k.b,r=0;rs){i=J.bkd(q) +break}}if(b&&i===l.length-1)p=new A.c0(n.a.b,B.aL) +else if(!b&&i===0)p=new A.c0(n.a.a,B.v) +else p=n.Ps(m.iD(new A.i(c,l[b?i+1:i-1].gmW()))) +m=p.a +j=n.a +if(m===j.a)o=B.c_ +else o=m===j.b?B.bz:B.bA +return new A.bK(p,o,t.UH)}, +aFw(a){var s,r,q,p,o=this +if(o.d==null||o.e==null)return!1 +s=A.bn("currentStart") +r=A.bn("currentEnd") +q=o.d +q.toString +p=o.e +p.toString +if(A.bhC(q,p)>0){s.b=q +r.b=p}else{s.b=p +r.b=q}return A.bhC(s.bl(),a)>=0&&A.bhC(r.bl(),a)<=0}, +cW(a,b){return this.b.cW(0,b)}, +q3(a,b){if(this.b.y==null)return}, +gyC(){var s,r,q,p,o,n,m,l=this +if(l.y==null){s=l.b +r=l.a +q=r.a +p=s.oR(A.dJ(B.v,q,r.b,!1)) +r=t.AO +if(p.length!==0){l.y=A.b([],r) +for(s=p.length,o=0;o=q)return r.a +s=this.OK(a) +r=this.V +q=r.a +if(!(q>=1/0))return A.U(s,q,r.b) +return s}, +bZ(a){var s,r=this.V,q=r.b +if(q<1/0&&r.a>=q)return r.a +s=this.OI(a) +r=this.V +q=r.a +if(!(q>=1/0))return A.U(s,q,r.b) +return s}, +c_(a){var s,r=this.V,q=r.d +if(q<1/0&&r.c>=q)return r.c +s=this.OJ(a) +r=this.V +q=r.c +if(!(q>=1/0))return A.U(s,q,r.d) +return s}, +c2(a){var s,r=this.V,q=r.d +if(q<1/0&&r.c>=q)return r.c +s=this.OH(a) +r=this.V +q=r.c +if(!(q>=1/0))return A.U(s,q,r.d) +return s}, +cM(){var s=this,r=t.k.a(A.L.prototype.gaI.call(s)),q=s.a0$,p=s.V +if(q!=null){q.dc(p.tG(r),!0) +s.id=s.a0$.gC(0)}else s.id=p.tG(r).ca(B.x)}, +dA(a){var s=this.a0$,r=this.V +if(s!=null)return s.aY(B.bg,r.tG(a),s.gjd()) +else return r.tG(a).ca(B.x)}} +A.aa6.prototype={ +saV0(a,b){if(this.V===b)return +this.V=b +this.aB()}, +saV_(a,b){if(this.aE===b)return +this.aE=b +this.aB()}, +a66(a){var s,r,q=a.a,p=a.b +p=p<1/0?p:A.U(this.V,q,p) +s=a.c +r=a.d +return new A.bb(q,p,s,r<1/0?r:A.U(this.aE,s,r))}, +t3(a,b){var s=this.a0$ +if(s!=null)return a.ca(b.$2(s,this.a66(a))) +return this.a66(a).ca(B.x)}, +dA(a){return this.t3(a,A.qB())}, +cM(){this.id=this.t3(t.k.a(A.L.prototype.gaI.call(this)),A.xy())}} +A.QI.prototype={ +samo(a){return}, +samm(a){return}, +c1(a){return this.aY(B.aa,a,this.gbY())}, +bZ(a){var s=this.a0$ +if(s==null)return 0 +return A.aPA(s.aY(B.aa,a,s.gbY()),this.V)}, +c_(a){var s,r=this +if(r.a0$==null)return 0 +if(!isFinite(a))a=r.aY(B.aa,1/0,r.gbY()) +s=r.a0$ +return A.aPA(s.aY(B.ay,a,s.gcd()),r.aE)}, +c2(a){var s,r=this +if(r.a0$==null)return 0 +if(!isFinite(a))a=r.aY(B.aa,1/0,r.gbY()) +s=r.a0$ +return A.aPA(s.aY(B.aN,a,s.gcG()),r.aE)}, +t3(a,b){var s=this.a0$ +if(s!=null){if(!(a.a>=a.b))a=a.Fx(A.aPA(s.aY(B.aa,a.d,s.gbY()),this.V)) +s=this.a0$ +s.toString +return b.$2(s,a)}else return new A.Q(A.U(0,a.a,a.b),A.U(0,a.c,a.d))}, +dA(a){return this.t3(a,A.qB())}, +cM(){this.id=this.t3(t.k.a(A.L.prototype.gaI.call(this)),A.xy())}} +A.QH.prototype={ +c1(a){var s=this.a0$ +if(s==null)return 0 +if(!isFinite(a))a=s.aY(B.aN,1/0,s.gcG()) +s=this.a0$ +return s.aY(B.a9,a,s.gc0())}, +bZ(a){var s=this.a0$ +if(s==null)return 0 +if(!isFinite(a))a=s.aY(B.aN,1/0,s.gcG()) +s=this.a0$ +return s.aY(B.aa,a,s.gbY())}, +c_(a){return this.aY(B.aN,a,this.gcG())}, +t3(a,b){var s=this.a0$ +if(s!=null){if(!(a.c>=a.d))a=a.MX(s.aY(B.aN,a.b,s.gcG())) +s=this.a0$ +s.toString +return b.$2(s,a)}else return new A.Q(A.U(0,a.a,a.b),A.U(0,a.c,a.d))}, +dA(a){return this.t3(a,A.qB())}, +cM(){this.id=this.t3(t.k.a(A.L.prototype.gaI.call(this)),A.xy())}} +A.aa8.prototype={ +gqN(){return this.a0$!=null&&this.V>0}, +ghR(){return this.a0$!=null&&this.V>0}, +sh5(a,b){var s,r,q,p,o=this +if(o.aE===b)return +s=o.a0$!=null +r=s&&o.V>0 +q=o.V +o.aE=b +p=B.c.ai(A.U(b,0,1)*255) +o.V=p +if(r!==(s&&p>0))o.pS() +o.afM() +s=o.V +if(q!==0!==(s!==0))o.cf()}, +sJi(a){return}, +u6(a){return this.V>0}, +A6(a){var s=a==null?A.bg2():a +s.sTB(0,this.V) +return s}, +aO(a,b){if(this.a0$==null||this.V===0)return +this.lS(a,b)}, +jx(a){var s,r=this.a0$ +if(r!=null){s=this.V +s=s!==0}else s=!1 +if(s){r.toString +a.$1(r)}}} +A.Qv.prototype={ +ghR(){if(this.a0$!=null){var s=this.Wq$ +s.toString}else s=!1 +return s}, +A6(a){var s=a==null?A.bg2():a +s.sTB(0,this.z9$) +return s}, +sh5(a,b){var s=this,r=s.za$ +if(r===b)return +if(s.y!=null&&r!=null)r.ad(0,s.gIS()) +s.za$=b +if(s.y!=null)b.an(0,s.gIS()) +s.T2()}, +sJi(a){if(!1===this.Wr$)return +this.Wr$=!1 +this.cf()}, +T2(){var s,r=this,q=r.z9$,p=r.za$ +p=r.z9$=B.c.ai(A.U(p.gm(p),0,1)*255) +if(q!==p){s=r.Wq$ +p=p>0 +r.Wq$=p +if(r.a0$!=null&&s!==p)r.pS() +r.afM() +if(q===0||r.z9$===0)r.cf()}}, +u6(a){var s=this.za$ +return s.gm(s)>0}, +jx(a){var s,r=this.a0$ +if(r!=null)if(this.z9$===0){s=this.Wr$ +s.toString}else s=!0 +else s=!1 +if(s){r.toString +a.$1(r)}}} +A.a9S.prototype={} +A.a9T.prototype={ +sKT(a,b){if(this.V.k(0,b))return +this.V=b +this.bi()}, +sde(a){if(this.aE===a)return +this.aE=a +this.bi()}, +gqN(){return this.a0$!=null}, +aO(a,b){var s,r,q,p=this +if(p.a0$!=null){s=t.m2 +if(s.a(A.L.prototype.gbr.call(p,0))==null)p.ch.sbr(0,A.bkC(null)) +s.a(A.L.prototype.gbr.call(p,0)).sKT(0,p.V) +r=s.a(A.L.prototype.gbr.call(p,0)) +q=p.aE +if(q!==r.k4){r.k4=q +r.jp()}s=s.a(A.L.prototype.gbr.call(p,0)) +s.toString +a.wr(s,A.jh.prototype.gjs.call(p),b)}else p.ch.sbr(0,null)}} +A.M3.prototype={ +an(a,b){var s=this.a +return s==null?null:s.a.an(0,b)}, +ad(a,b){var s=this.a +return s==null?null:s.a.ad(0,b)}, +ajK(a){return new A.A(0,0,0+a.a,0+a.b)}, +j(a){return"CustomClipper"}} +A.wr.prototype={ +FW(a){return this.b.fM(new A.A(0,0,0+a.a,0+a.b),this.c)}, +Gv(a){if(A.J(a)!==B.ah1)return!0 +t.jH.a(a) +return!a.b.k(0,this.b)||a.c!=this.c}} +A.JM.prototype={ +syG(a){var s,r=this,q=r.V +if(q==a)return +r.V=a +s=a==null +if(s||q==null||A.J(a)!==A.J(q)||a.Gv(q))r.xQ() +if(r.y!=null){if(q!=null)q.ad(0,r.gHN()) +if(!s)a.an(0,r.gHN())}}, +bc(a){var s +this.B2(a) +s=this.V +if(s!=null)s.an(0,this.gHN())}, +b3(a){var s=this.V +if(s!=null)s.ad(0,this.gHN()) +this.uO(0)}, +xQ(){this.aE=null +this.bi() +this.cf()}, +sod(a){if(a!==this.bj){this.bj=a +this.bi()}}, +cM(){var s=this,r=s.id!=null?s.gC(0):null +s.uN() +if(!J.f(r,s.gC(0)))s.aE=null}, +pl(){var s,r=this +if(r.aE==null){s=r.V +s=s==null?null:s.FW(r.gC(0)) +r.aE=s==null?r.gBf():s}}, +tA(a){var s,r=this +switch(r.bj.a){case 0:return null +case 1:case 2:case 3:s=r.V +s=s==null?null:s.ajK(r.gC(0)) +if(s==null){s=r.gC(0) +s=new A.A(0,0,0+s.a,0+s.b)}return s}}, +t(){this.dD=null +this.ja()}} +A.a9X.prototype={ +gBf(){var s=this.gC(0) +return new A.A(0,0,0+s.a,0+s.b)}, +dK(a,b){var s=this +if(s.V!=null){s.pl() +if(!s.aE.G(0,b))return!1}return s.p9(a,b)}, +aO(a,b){var s,r,q=this,p=q.a0$ +if(p!=null){s=q.ch +if(q.bj!==B.y){q.pl() +p=q.cx +p===$&&A.c() +r=q.aE +r.toString +s.sbr(0,a.q2(p,b,r,A.jh.prototype.gjs.call(q),q.bj,t.W0.a(s.a)))}else{a.fb(p,b) +s.sbr(0,null)}}else q.ch.sbr(0,null)}} +A.a9W.prototype={ +sTQ(a,b){if(this.dn.k(0,b))return +this.dn=b +this.xQ()}, +scV(a){if(this.hL==a)return +this.hL=a +this.xQ()}, +gBf(){var s=this.dn,r=this.gC(0) +return s.eU(new A.A(0,0,0+r.a,0+r.b))}, +dK(a,b){var s=this +if(s.V!=null){s.pl() +if(!s.aE.G(0,b))return!1}return s.p9(a,b)}, +aO(a,b){var s,r,q=this,p=q.a0$ +if(p!=null){s=q.ch +if(q.bj!==B.y){q.pl() +p=q.cx +p===$&&A.c() +r=q.aE +s.sbr(0,a.ah8(p,b,new A.A(r.a,r.b,r.c,r.d),r,A.jh.prototype.gjs.call(q),q.bj,t.eG.a(s.a)))}else{a.fb(p,b) +s.sbr(0,null)}}else q.ch.sbr(0,null)}} +A.a9V.prototype={ +gBf(){var s=$.G().Z(),r=this.gC(0) +s.m3(new A.A(0,0,0+r.a,0+r.b)) +return s}, +dK(a,b){var s=this +if(s.V!=null){s.pl() +if(!s.aE.G(0,b))return!1}return s.p9(a,b)}, +aO(a,b){var s,r,q,p=this,o=p.a0$ +if(o!=null){s=p.ch +if(p.bj!==B.y){p.pl() +o=p.cx +o===$&&A.c() +r=p.gC(0) +q=p.aE +q.toString +s.sbr(0,a.YO(o,b,new A.A(0,0,0+r.a,0+r.b),q,A.jh.prototype.gjs.call(p),p.bj,t.JG.a(s.a)))}else{a.fb(o,b) +s.sbr(0,null)}}else p.ch.sbr(0,null)}} +A.WK.prototype={ +sh1(a,b){if(this.dn===b)return +this.dn=b +this.bi()}, +sdG(a,b){if(this.hL.k(0,b))return +this.hL=b +this.bi()}, +sA(a,b){if(this.bf.k(0,b))return +this.bf=b +this.bi()}, +iR(a){this.lf(a) +a.sh1(0,this.dn)}} +A.aa9.prototype={ +scw(a,b){if(this.vQ===b)return +this.vQ=b +this.xQ()}, +sTQ(a,b){if(J.f(this.vR,b))return +this.vR=b +this.xQ()}, +gBf(){var s,r,q=this.gC(0),p=0+q.a +q=0+q.b +switch(this.vQ.a){case 0:s=this.vR +if(s==null)s=B.aP +q=s.eU(new A.A(0,0,p,q)) +break +case 1:s=(p-0)/2 +r=(q-0)/2 +r=new A.nm(0,0,p,q,s,r,s,r,s,r,s,r,s===r) +q=r +break +default:q=null}return q}, +dK(a,b){var s=this +if(s.V!=null){s.pl() +if(!s.aE.G(0,b))return!1}return s.p9(a,b)}, +aO(a,b){var s,r,q,p,o,n,m,l,k,j=this +if(j.a0$==null){j.ch.sbr(0,null) +return}j.pl() +s=j.aE.dz(b) +r=$.G() +q=r.Z() +q.h_(s) +p=a.gcP(a) +o=j.dn +if(o!==0){n=j.hL +m=j.bf +p.tF(q,n,o,(m.gm(m)>>>24&255)!==255)}l=j.bj===B.f8 +if(!l){r=r.B() +r.sA(0,j.bf) +p.dm(s,r)}r=j.cx +r===$&&A.c() +o=j.gC(0) +n=j.aE +n.toString +m=j.ch +k=t.eG.a(m.a) +m.sbr(0,a.ah8(r,b,new A.A(0,0,0+o.a,0+o.b),n,new A.aPP(j,l),j.bj,k))}} +A.aPP.prototype={ +$2(a,b){var s,r +if(this.b){s=a.gcP(a) +r=$.G().B() +r.sA(0,this.a.bf) +s.vF(r)}this.a.lS(a,b)}, +$S:9} +A.aaa.prototype={ +gBf(){var s=$.G().Z(),r=this.gC(0) +s.m3(new A.A(0,0,0+r.a,0+r.b)) +return s}, +dK(a,b){var s=this +if(s.V!=null){s.pl() +if(!s.aE.G(0,b))return!1}return s.p9(a,b)}, +aO(a,b){var s,r,q,p,o,n,m,l,k=this +if(k.a0$==null){k.ch.sbr(0,null) +return}k.pl() +s=k.aE.dz(b) +r=a.gcP(a) +q=k.dn +if(q!==0){p=k.hL +o=k.bf +r.tF(s,p,q,(o.gm(o)>>>24&255)!==255)}n=k.bj===B.f8 +if(!n){q=$.G().B() +q.sA(0,k.bf) +r.a3(s,q)}q=k.cx +q===$&&A.c() +p=k.gC(0) +o=k.aE +o.toString +m=k.ch +l=t.JG.a(m.a) +m.sbr(0,a.YO(q,b,new A.A(0,0,0+p.a,0+p.b),o,new A.aPQ(k,n),k.bj,l))}} +A.aPQ.prototype={ +$2(a,b){var s,r +if(this.b){s=a.gcP(a) +r=$.G().B() +r.sA(0,this.a.bf) +s.vF(r)}this.a.lS(a,b)}, +$S:9} +A.a1Y.prototype={ +W(){return"DecorationPosition."+this.b}} +A.a9Z.prototype={ +sbJ(a){var s,r=this +if(a.k(0,r.aE))return +s=r.V +if(s!=null)s.t() +r.V=null +r.aE=a +r.bi()}, +sbe(a,b){if(b===this.bj)return +this.bj=b +this.bi()}, +stw(a){if(a.k(0,this.ce))return +this.ce=a +this.bi()}, +b3(a){var s=this,r=s.V +if(r!=null)r.t() +s.V=null +s.uO(0) +s.bi()}, +t(){var s=this.V +if(s!=null)s.t() +this.ja()}, +mn(a){return this.aE.Xh(this.gC(0),a,this.ce.d)}, +aO(a,b){var s,r,q=this +if(q.V==null)q.V=q.aE.D3(q.gfH()) +s=q.ce.Uj(q.gC(0)) +if(q.bj===B.dG){r=q.V +r.toString +r.mt(a.gcP(a),b,s) +if(q.aE.gLq())a.a08()}q.lS(a,b) +if(q.bj===B.Tb){r=q.V +r.toString +r.mt(a.gcP(a),b,s) +if(q.aE.gLq())a.a08()}}} +A.aaj.prototype={ +sagx(a,b){return}, +sil(a){var s=this +if(J.f(s.aE,a))return +s.aE=a +s.bi() +s.cf()}, +scV(a){var s=this +if(s.bj==a)return +s.bj=a +s.bi() +s.cf()}, +gqN(){return this.a0$!=null&&this.dj!=null}, +sd3(a,b){var s,r=this +if(J.f(r.dD,b))return +s=new A.by(new Float64Array(16)) +s.v(b) +r.dD=s +r.bi() +r.cf()}, +sor(a){var s,r,q=this,p=q.dj +if(p==a)return +s=q.a0$!=null +r=s&&p!=null +q.dj=a +if(r!==(s&&a!=null))q.pS() +q.bi()}, +gQe(){var s,r,q=this,p=q.aE,o=p==null?null:p.aG(q.bj) +if(o==null)return q.dD +s=new A.by(new Float64Array(16)) +s.ci() +r=o.Jh(q.gC(0)) +s.aJ(0,r.a,r.b) +p=q.dD +p.toString +s.bL(0,p) +s.aJ(0,-r.a,-r.b) +return s}, +dK(a,b){return this.dZ(a,b)}, +dZ(a,b){var s=this.ce?this.gQe():null +return a.Cr(new A.aQ7(this),b,s)}, +aO(a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this +if(a1.a0$!=null){s=a1.gQe() +s.toString +if(a1.dj==null){r=A.a6K(s) +if(r==null){q=s.a +p=q[0] +o=q[5] +n=q[1] +m=q[4] +l=p*o-n*m +k=q[6] +j=q[2] +i=p*k-j*m +h=q[7] +g=q[3] +f=p*h-g*m +e=n*k-j*o +d=n*h-g*o +c=j*h-g*k +k=q[8] +g=q[9] +h=q[10] +j=q[11] +b=-(g*c-h*d+j*e)*q[12]+(k*c-h*f+j*i)*q[13]-(k*d-g*f+j*l)*q[14]+(k*e-g*i+h*l)*q[15] +if(b===0||!isFinite(b)){a1.ch.sbr(0,null) +return}q=a1.cx +q===$&&A.c() +p=A.jh.prototype.gjs.call(a1) +o=a1.ch +n=o.a +o.sbr(0,a2.wt(q,a3,s,p,n instanceof A.qg?n:null))}else{a1.lS(a2,a3.X(0,r)) +a1.ch.sbr(0,null)}}else{q=a3.a +p=a3.b +a=A.pH(q,p,0) +a.bL(0,s) +a.aJ(0,-q,-p) +p=a1.dj +p.toString +a0=A.bn5(a.a,p) +s=a1.ch +q=s.a +if(q instanceof A.NQ){if(!a0.k(0,q.bv)){q.bv=a0 +q.jp()}}else s.sbr(0,new A.NQ(a0,B.h,A.D(t.S,t.Q),A.aX(t.kd))) +s=s.a +s.toString +a2.wr(s,A.jh.prototype.gjs.call(a1),a3)}}}, +eK(a,b){var s=this.gQe() +s.toString +b.bL(0,s)}} +A.aQ7.prototype={ +$2(a,b){return this.a.B_(a,b)}, +$S:8} +A.QC.prototype={ +aFP(){if(this.V!=null)return +this.V=this.bj}, +a4d(a){switch(a.a){case 6:return!0 +case 1:case 2:case 0:case 4:case 3:case 5:return!1}}, +stR(a){var s=this,r=s.aE +if(r===a)return +s.aE=a +if(s.a4d(r)||s.a4d(a))s.aB() +else{s.dj=s.dD=null +s.bi()}}, +sil(a){var s=this +if(s.bj.k(0,a))return +s.bj=a +s.V=s.dj=s.dD=null +s.bi()}, +scV(a){var s=this +if(s.ce==a)return +s.ce=a +s.V=s.dj=s.dD=null +s.bi()}, +dA(a){var s=this.a0$ +if(s!=null){s=s.aY(B.bg,B.eb,s.gjd()) +switch(this.aE.a){case 6:return a.ca(new A.bb(0,a.b,0,a.d).yK(s)) +case 1:case 2:case 0:case 4:case 3:case 5:return a.yK(s)}}else return new A.Q(A.U(0,a.a,a.b),A.U(0,a.c,a.d))}, +cM(){var s,r,q=this,p=q.a0$ +if(p!=null){p.dc(B.eb,!0) +switch(q.aE.a){case 6:p=t.k +s=p.a(A.L.prototype.gaI.call(q)) +r=new A.bb(0,s.b,0,s.d).yK(q.a0$.gC(0)) +q.id=p.a(A.L.prototype.gaI.call(q)).ca(r) +break +case 1:case 2:case 0:case 4:case 3:case 5:q.id=t.k.a(A.L.prototype.gaI.call(q)).yK(q.a0$.gC(0)) +break}q.dj=q.dD=null}else{p=t.k.a(A.L.prototype.gaI.call(q)) +q.id=new A.Q(A.U(0,p.a,p.b),A.U(0,p.c,p.d))}}, +T3(){var s,r,q,p,o,n,m,l,k,j,i=this +if(i.dj!=null)return +if(i.a0$==null){i.dD=!1 +s=new A.by(new Float64Array(16)) +s.ci() +i.dj=s}else{i.aFP() +r=i.a0$.gC(0) +q=A.bi9(i.aE,r,i.gC(0)) +s=q.b +p=q.a +o=r.a +n=r.b +m=i.V.Li(p,new A.A(0,0,0+o,0+n)) +l=i.V +l.toString +k=i.gC(0) +j=l.Li(s,new A.A(0,0,0+k.a,0+k.b)) +l=m.a +i.dD=m.c-l=r +m.dc(s,!(q&&s.c>=s.d)) +m=n.a0$.b +m.toString +t.q.a(m) +p=n.V +o=n.gC(0) +m.a=p.Aj(o,q&&s.c>=s.d?new A.Q(A.U(0,l,r),A.U(0,s.c,s.d)):n.a0$.gC(0))}}} +A.WO.prototype={ +bc(a){var s +this.fg(a) +s=this.a0$ +if(s!=null)s.bc(a)}, +b3(a){var s +this.fh(0) +s=this.a0$ +if(s!=null)s.b3(0)}} +A.a4D.prototype={ +W(){return"GrowthDirection."+this.b}} +A.wv.prototype={ +gafp(){return!1}, +aMB(a,b){var s=this.w +switch(A.ch(this.a).a){case 0:return new A.bb(b,a,s,s) +case 1:return new A.bb(s,s,b,a)}}, +aMA(){return this.aMB(1/0,0)}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(!(b instanceof A.wv))return!1 +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&&b.y===s.y&&b.Q===s.Q&&b.z===s.z}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.Q,s.z,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){var s=this,r=A.b([s.a.j(0),s.b.j(0),s.c.j(0),"scrollOffset: "+B.c.b8(s.d,1),"precedingScrollExtent: "+B.c.b8(s.e,1),"remainingPaintExtent: "+B.c.b8(s.r,1)],t.T),q=s.f +if(q!==0)r.push("overlap: "+B.c.b8(q,1)) +r.push("crossAxisExtent: "+B.c.b8(s.w,1)) +r.push("crossAxisDirection: "+s.x.j(0)) +r.push("viewportMainAxisExtent: "+B.c.b8(s.y,1)) +r.push("remainingCacheExtent: "+B.c.b8(s.Q,1)) +r.push("cacheOrigin: "+B.c.b8(s.z,1)) +return"SliverConstraints("+B.b.cj(r,", ")+")"}} +A.abO.prototype={ +fu(){return"SliverGeometry"}} +A.HM.prototype={} +A.abP.prototype={ +j(a){return A.J(this.a).j(0)+"@(mainAxis: "+A.j(this.c)+", crossAxis: "+A.j(this.d)+")"}} +A.ww.prototype={ +j(a){var s=this.a +return"layoutOffset="+(s==null?"None":B.c.b8(s,1))}} +A.tx.prototype={} +A.wx.prototype={ +j(a){return"paintOffset="+this.a.j(0)}} +A.ty.prototype={} +A.fh.prototype={ +gaI(){return t.R.a(A.L.prototype.gaI.call(this))}, +gux(){return this.gpX()}, +gpX(){var s=this,r=t.R +switch(A.ch(r.a(A.L.prototype.gaI.call(s)).a).a){case 0:return new A.A(0,0,0+s.fx.c,0+r.a(A.L.prototype.gaI.call(s)).w) +case 1:return new A.A(0,0,0+r.a(A.L.prototype.gaI.call(s)).w,0+s.fx.c)}}, +zN(){}, +aeM(a,b,c){var s,r=this +if(c>=0&&c=0&&br;j=h,i=o){o=a3.af2(p,!0) +if(o==null){n=a3.aZ$ +k=n.b +k.toString +m.a(k).a=0 +if(r===0){n.dc(p,!0) +o=a3.aZ$ +if(a5.a==null)a5.a=o +i=o +break}else{a3.fx=A.BO(a4,!1,a4,a4,0,0,0,0,-r) +return}}n=a3.aZ$ +n.toString +h=j-a3.wl(n) +if(h<-1e-10){a3.fx=A.BO(a4,!1,a4,a4,0,0,0,0,-h) +a7=a3.aZ$.b +a7.toString +m.a(a7).a=0 +return}n=o.b +n.toString +m.a(n).a=h +if(a5.a==null)a5.a=o}if(r<1e-10)while(!0){n=a3.aZ$ +n.toString +n=n.b +n.toString +m.a(n) +k=n.b +k.toString +if(!(k>0))break +n=n.a +n.toString +o=a3.af2(p,!0) +k=a3.aZ$ +k.toString +h=n-a3.wl(k) +k=a3.aZ$.b +k.toString +m.a(k).a=0 +if(h<-1e-10){a3.fx=A.BO(a4,!1,a4,a4,0,0,0,0,-h) +return}}if(i==null){o.dc(p,!0) +a5.a=o}a5.b=!0 +a5.c=o +n=o.b +n.toString +m.a(n) +k=n.b +k.toString +a5.d=k +n=n.a +n.toString +a5.e=n+a3.wl(o) +g=new A.aPX(a5,a3,p) +for(f=0;a5.es+a6.r||s>0,a4,a4,a,a1,0,a,a4) +if(a===n)a7.p3=!0 +a7.UW()}} +A.aPX.prototype={ +$0(){var s,r,q,p=this.a,o=p.c,n=p.a +if(o==n)p.b=!1 +s=this.b +o=o.b +o.toString +r=p.c=A.w(s).h("aZ.1").a(o).bd$ +o=r==null +if(o)p.b=!1 +q=++p.d +if(!p.b){if(!o){o=r.b +o.toString +o=t.b.a(o).b +o.toString +q=o!==q +o=q}else o=!0 +q=this.c +if(o){r=s.aTH(q,n,!0) +p.c=r +if(r==null)return!1}else r.dc(q,!0) +o=p.a=p.c}else o=r +n=o.b +n.toString +t.b.a(n) +q=p.e +n.a=q +p.e=q+s.wl(o) +return!0}, +$S:6} +A.py.prototype={$ieg:1} +A.aQ0.prototype={ +i0(a){}} +A.q2.prototype={ +j(a){var s=this.b,r=this.DM$?"keepAlive; ":"" +return"index="+A.j(s)+"; "+r+this.apo(0)}} +A.H5.prototype={ +i0(a){if(!(a.b instanceof A.q2))a.b=new A.q2(!1,null,null)}, +kL(a){var s +this.a1d(a) +s=a.b +s.toString +if(!t.b.a(s).c)this.ac.UQ(t.x.a(a))}, +Xn(a,b,c){this.Oq(0,b,c)}, +EE(a,b){var s,r=this,q=a.b +q.toString +t.b.a(q) +if(!q.c){r.an3(a,b) +r.ac.UQ(a) +r.aB()}else{s=r.ah +if(s.i(0,q.b)===a)s.P(0,q.b) +r.ac.UQ(a) +q=q.b +q.toString +s.u(0,q,a)}}, +P(a,b){var s=b.b +s.toString +t.b.a(s) +if(!s.c){this.an4(0,b) +return}this.ah.P(0,s.b) +this.oi(b)}, +PW(a,b){this.Lo(new A.aPY(this,a,b),t.R)}, +a3A(a){var s,r=this,q=a.b +q.toString +t.b.a(q) +if(q.DM$){r.P(0,a) +s=q.b +s.toString +r.ah.u(0,s,a) +a.b=q +r.a1d(a) +q.c=!0}else r.ac.ahG(a)}, +bc(a){var s,r,q +this.aqL(a) +for(s=this.ah.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a;(q==null?r.a(q):q).bc(a)}}, +b3(a){var s,r,q +this.aqM(0) +for(s=this.ah.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a;(q==null?r.a(q):q).b3(0)}}, +k5(){this.a0B() +this.ah.gbm(0).al(0,this.gZ1())}, +cc(a){this.GJ(a) +this.ah.gbm(0).al(0,a)}, +jx(a){this.GJ(a)}, +aM2(a,b){var s +this.PW(a,null) +s=this.aZ$ +if(s!=null){s=s.b +s.toString +t.b.a(s).a=b +return!0}this.ac.p3=!0 +return!1}, +aaU(){return this.aM2(0,0)}, +af2(a,b){var s,r,q,p=this,o=p.aZ$ +o.toString +o=o.b +o.toString +s=t.b +o=s.a(o).b +o.toString +r=o-1 +p.PW(r,null) +o=p.aZ$ +o.toString +q=o.b +q.toString +q=s.a(q).b +q.toString +if(q===r){o.dc(a,b) +return p.aZ$}p.ac.p3=!0 +return null}, +aTH(a,b,c){var s,r,q,p=b.b +p.toString +s=t.b +p=s.a(p).b +p.toString +r=p+1 +this.PW(r,b) +p=b.b +p.toString +q=A.w(this).h("aZ.1").a(p).bd$ +if(q!=null){p=q.b +p.toString +p=s.a(p).b +p.toString +p=p===r}else p=!1 +if(p){q.dc(a,c) +return q}this.ac.p3=!0 +return null}, +U7(a,b){var s={} +s.a=a +s.b=b +this.Lo(new A.aQ_(s,this),t.R)}, +wl(a){var s +switch(A.ch(t.R.a(A.L.prototype.gaI.call(this)).a).a){case 0:s=a.gC(0).a +break +case 1:s=a.gC(0).b +break +default:s=null}return s}, +Xi(a,b,c){var s,r,q=this.f1$,p=A.bkS(a) +for(s=A.w(this).h("aZ.1");q!=null;){if(this.aTg(p,q,b,c))return!0 +r=q.b +r.toString +q=s.a(r).dY$}return!1}, +U2(a){var s=a.b +s.toString +return t.b.a(s).a}, +u6(a){var s=t.MR.a(a.b) +return(s==null?null:s.b)!=null&&!this.ah.aR(0,s.b)}, +eK(a,b){if(!this.u6(a))b.cv() +else this.aMw(a,b)}, +aO(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=null +if(d.aZ$==null)return +s=t.R +switch(A.ug(s.a(A.L.prototype.gaI.call(d)).a,s.a(A.L.prototype.gaI.call(d)).b).a){case 0:r=b.X(0,new A.i(0,d.fx.c)) +q=B.De +p=B.fz +o=!0 +break +case 1:r=b +q=B.fz +p=B.cF +o=!1 +break +case 2:r=b +q=B.cF +p=B.fz +o=!1 +break +case 3:r=b.X(0,new A.i(d.fx.c,0)) +q=B.Di +p=B.cF +o=!0 +break +default:o=c +r=o +p=r +q=p}n=d.aZ$ +for(m=A.w(d).h("aZ.1"),l=t.b;n!=null;){k=n.b +k.toString +k=l.a(k).a +k.toString +j=k-s.a(A.L.prototype.gaI.call(d)).d +k=r.a +i=q.a +k=k+i*j+p.a*0 +h=r.b +g=q.b +h=h+g*j+p.b*0 +f=new A.i(k,h) +if(o){e=d.wl(n) +f=new A.i(k+i*e,h+g*e)}if(j0)a.fb(n,f) +k=n.b +k.toString +n=m.a(k).bd$}}} +A.aPY.prototype={ +$1(a){var s=this.a,r=s.ah,q=this.b,p=this.c +if(r.aR(0,q)){r=r.P(0,q) +r.toString +q=r.b +q.toString +t.b.a(q) +s.oi(r) +r.b=q +s.Oq(0,r,p) +q.c=!1}else s.ac.aP6(q,p)}, +$S:183} +A.aQ_.prototype={ +$1(a){var s,r,q +for(s=this.a,r=this.b;s.a>0;){q=r.aZ$ +q.toString +r.a3A(q);--s.a}for(;s.b>0;){q=r.f1$ +q.toString +r.a3A(q);--s.b}s=r.ah.gbm(0) +q=A.w(s).h("bg") +B.b.al(A.ab(new A.bg(s,new A.aPZ(),q),!0,q.h("z.E")),r.ac.gaYw())}, +$S:183} +A.aPZ.prototype={ +$1(a){var s=a.b +s.toString +return!t.b.a(s).DM$}, +$S:599} +A.WQ.prototype={ +bc(a){var s,r,q +this.fg(a) +s=this.aZ$ +for(r=t.b;s!=null;){s.bc(a) +q=s.b +q.toString +s=r.a(q).bd$}}, +b3(a){var s,r,q +this.fh(0) +s=this.aZ$ +for(r=t.b;s!=null;){s.b3(0) +q=s.b +q.toString +s=r.a(q).bd$}}} +A.aop.prototype={} +A.aoq.prototype={} +A.apX.prototype={ +b3(a){this.AW(0)}} +A.apY.prototype={} +A.QS.prototype={ +gTM(){var s=this,r=t.R +switch(A.ug(r.a(A.L.prototype.gaI.call(s)).a,r.a(A.L.prototype.gaI.call(s)).b).a){case 0:r=s.c9.d +break +case 1:r=s.c9.a +break +case 2:r=s.c9.b +break +case 3:r=s.c9.c +break +default:r=null}return r}, +gaMf(){var s=this,r=t.R +switch(A.ug(r.a(A.L.prototype.gaI.call(s)).a,r.a(A.L.prototype.gaI.call(s)).b).a){case 0:r=s.c9.b +break +case 1:r=s.c9.c +break +case 2:r=s.c9.d +break +case 3:r=s.c9.a +break +default:r=null}return r}, +gaPg(){switch(A.ch(t.R.a(A.L.prototype.gaI.call(this)).a).a){case 0:var s=this.c9 +s=s.gcO(0)+s.gcX(0) +break +case 1:s=this.c9.ge_() +break +default:s=null}return s}, +i0(a){if(!(a.b instanceof A.wx))a.b=new A.wx(B.h)}, +cM(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2=this,a3=null,a4=t.R,a5=a4.a(A.L.prototype.gaI.call(a2)),a6=new A.aPU(a2,a5),a7=new A.aPT(a2,a5),a8=a2.c9 +a8.toString +s=a2.gTM() +a2.gaMf() +r=a2.c9 +r.toString +q=r.aMk(A.ch(a4.a(A.L.prototype.gaI.call(a2)).a)) +p=a2.gaPg() +if(a2.a0$==null){o=a6.$2$from$to(0,q) +a2.fx=A.BO(a7.$2$from$to(0,q),!1,a3,a3,q,Math.min(o,a5.r),0,q,a3) +return}n=a6.$2$from$to(0,s) +m=a5.f +if(m>0)m=Math.max(0,m-n) +a4=a2.a0$ +a4.toString +r=Math.max(0,a5.d-s) +l=Math.min(0,a5.z+s) +k=a5.r +j=a6.$2$from$to(0,s) +i=a5.Q +h=a7.$2$from$to(0,s) +g=Math.max(0,a5.w-p) +f=a5.a +e=a5.b +a4.dc(new A.wv(f,e,a5.c,r,s+a5.e,m,k-j,g,a5.x,a5.y,l,i-h),!0) +d=a2.a0$.fx +a4=d.y +if(a4!=null){a2.fx=A.BO(a3,!1,a3,a3,0,0,0,0,a4) +return}c=d.a +b=a7.$2$from$to(0,s) +a4=s+c +r=q+c +a=a7.$2$from$to(a4,r) +a0=a6.$2$from$to(a4,r) +a1=n+a0 +a4=d.c +l=d.d +o=Math.min(n+Math.max(a4,l+a0),k) +k=d.b +l=Math.min(a1+l,o) +i=Math.min(b+a+d.z,i) +j=d.e +a4=Math.max(a1+a4,n+d.r) +a2.fx=A.BO(i,d.x,a4,l,q+j,o,k,r,a3) +switch(A.ug(f,e).a){case 0:a4=a6.$2$from$to(a8.d+c,a8.gcO(0)+a8.gcX(0)+c) +break +case 3:a4=a6.$2$from$to(a8.c+c,a8.ge_()+c) +break +case 1:a4=a6.$2$from$to(0,a8.a) +break +case 2:a4=a6.$2$from$to(0,a8.b) +break +default:a4=a3}r=a2.a0$.b +r.toString +t.jB.a(r) +switch(A.ch(f).a){case 0:a4=new A.i(a4,a8.b) +break +case 1:a4=new A.i(a8.a,a4) +break +default:a4=a3}r.a=a4}, +Xi(a,b,c){var s,r,q,p=this,o=p.a0$ +if(o!=null&&o.fx.r>0){o=o.b +o.toString +t.jB.a(o) +s=p.TU(t.R.a(A.L.prototype.gaI.call(p)),0,p.gTM()) +r=p.a0$ +r.toString +r=p.aNy(r) +o=o.a +q=p.a0$.gaTf() +a.c.push(new A.Jz(new A.i(-o.a,-o.b))) +q.$3$crossAxisPosition$mainAxisPosition(a,b-r,c-s) +a.Mt()}return!1}, +aNy(a){var s +switch(A.ch(t.R.a(A.L.prototype.gaI.call(this)).a).a){case 0:s=this.c9.b +break +case 1:s=this.c9.a +break +default:s=null}return s}, +U2(a){return this.gTM()}, +eK(a,b){var s=a.b +s.toString +s=t.jB.a(s).a +b.aJ(0,s.a,s.b)}, +aO(a,b){var s,r=this.a0$ +if(r!=null&&r.fx.w){s=r.b +s.toString +a.fb(r,b.X(0,t.jB.a(s).a))}}} +A.aPU.prototype={ +$2$from$to(a,b){return this.a.TU(this.b,a,b)}, +$S:184} +A.aPT.prototype={ +$2$from$to(a,b){return this.a.abD(this.b,a,b)}, +$S:184} +A.aah.prototype={ +aIh(){if(this.c9!=null)return +this.c9=this.eh}, +seP(a,b){var s=this +if(s.eh.k(0,b))return +s.eh=b +s.c9=null +s.aB()}, +scV(a){var s=this +if(s.f4===a)return +s.f4=a +s.c9=null +s.aB()}, +cM(){this.aIh() +this.aoU()}} +A.aoo.prototype={ +bc(a){var s +this.fg(a) +s=this.a0$ +if(s!=null)s.bc(a)}, +b3(a){var s +this.fh(0) +s=this.a0$ +if(s!=null)s.b3(0)}} +A.hf.prototype={ +gEm(){var s=this +return s.e!=null||s.f!=null||s.r!=null||s.w!=null||s.x!=null||s.y!=null}, +j(a){var s=this,r=A.b([],t.T),q=s.e +if(q!=null)r.push("top="+A.jq(q)) +q=s.f +if(q!=null)r.push("right="+A.jq(q)) +q=s.r +if(q!=null)r.push("bottom="+A.jq(q)) +q=s.w +if(q!=null)r.push("left="+A.jq(q)) +q=s.x +if(q!=null)r.push("width="+A.jq(q)) +q=s.y +if(q!=null)r.push("height="+A.jq(q)) +if(r.length===0)r.push("not positioned") +r.push(s.AP(0)) +return B.b.cj(r,"; ")}} +A.acm.prototype={ +W(){return"StackFit."+this.b}} +A.H6.prototype={ +i0(a){if(!(a.b instanceof A.hf))a.b=new A.hf(null,null,B.h)}, +aJI(){var s=this +if(s.a5!=null)return +s.a5=s.M.aG(s.av)}, +sil(a){var s=this +if(s.M.k(0,a))return +s.M=a +s.a5=null +s.aB()}, +scV(a){var s=this +if(s.av==a)return +s.av=a +s.a5=null +s.aB()}, +stR(a){if(this.ao!==a){this.ao=a +this.aB()}}, +sod(a){var s=this +if(a!==s.aM){s.aM=a +s.bi() +s.cf()}}, +c1(a){return A.Be(this.aZ$,new A.aQ4(a))}, +bZ(a){return A.Be(this.aZ$,new A.aQ2(a))}, +c_(a){return A.Be(this.aZ$,new A.aQ3(a))}, +c2(a){return A.Be(this.aZ$,new A.aQ1(a))}, +iO(a){return this.Ka(a)}, +dA(a){return this.a8C(a,A.qB())}, +a8C(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this +f.aJI() +if(f.dI$===0){s=a.a +r=a.b +q=A.U(1/0,s,r) +p=a.c +o=a.d +n=A.U(1/0,p,o) +return isFinite(q)&&isFinite(n)?new A.Q(A.U(1/0,s,r),A.U(1/0,p,o)):new A.Q(A.U(0,s,r),A.U(0,p,o))}m=a.a +l=a.c +switch(f.ao.a){case 0:s=new A.bb(0,a.b,0,a.d) +break +case 1:s=A.L9(new A.Q(A.U(1/0,m,a.b),A.U(1/0,l,a.d))) +break +case 2:s=a +break +default:s=null}k=f.aZ$ +for(r=t.Qv,j=l,i=m,h=!1;k!=null;){q=k.b +q.toString +r.a(q) +if(!q.gEm()){g=b.$2(k,s) +i=Math.max(i,g.a) +j=Math.max(j,g.b) +h=!0}k=q.bd$}return h?new A.Q(i,j):new A.Q(A.U(1/0,m,a.b),A.U(1/0,l,a.d))}, +cM(){var s,r,q,p,o,n,m,l=this,k="RenderBox was not laid out: ",j=t.k.a(A.L.prototype.gaI.call(l)) +l.K=!1 +l.id=l.a8C(j,A.xy()) +s=l.aZ$ +for(r=t.Qv,q=t.o;s!=null;){p=s.b +p.toString +r.a(p) +if(!p.gEm()){o=l.a5 +o.toString +n=l.id +if(n==null)n=A.X(A.ad(k+A.J(l).j(0)+"#"+A.bU(l))) +m=s.id +p.a=o.yn(q.a(n.Y(0,m==null?A.X(A.ad(k+A.J(s).j(0)+"#"+A.bU(s))):m)))}else{o=l.id +if(o==null)o=A.X(A.ad(k+A.J(l).j(0)+"#"+A.bU(l))) +n=l.a5 +n.toString +l.K=A.bpb(s,p,o,n)||l.K}s=p.bd$}}, +dZ(a,b){return this.De(a,b)}, +Mh(a,b){this.yU(a,b)}, +aO(a,b){var s,r=this,q=r.aM!==B.y&&r.K,p=r.aS +if(q){q=r.cx +q===$&&A.c() +s=r.gC(0) +p.sbr(0,a.q2(q,b,new A.A(0,0,0+s.a,0+s.b),r.gagD(),r.aM,p.a))}else{p.sbr(0,null) +r.Mh(a,b)}}, +t(){this.aS.sbr(0,null) +this.ja()}, +tA(a){var s +switch(this.aM.a){case 0:return null +case 1:case 2:case 3:if(this.K){s=this.gC(0) +s=new A.A(0,0,0+s.a,0+s.b)}else s=null +return s}}} +A.aQ4.prototype={ +$1(a){return a.aY(B.a9,this.a,a.gc0())}, +$S:44} +A.aQ2.prototype={ +$1(a){return a.aY(B.aa,this.a,a.gbY())}, +$S:44} +A.aQ3.prototype={ +$1(a){return a.aY(B.ay,this.a,a.gcd())}, +$S:44} +A.aQ1.prototype={ +$1(a){return a.aY(B.aN,this.a,a.gcG())}, +$S:44} +A.QG.prototype={ +jx(a){var s=this.H4() +if(s!=null)a.$1(s)}, +H4(){var s,r,q,p,o=this.fV +if(o==null)return null +s=this.aZ$ +r=A.w(this).h("aZ.1") +q=0 +while(!0){if(!(q=a||l>=b.length||!J.f(s,b[l]) +else s=!1 +if(s){s=j.K[m] +s.toString +p.E(0,s)}}for(o=0;i=o*a,i=s||o>=j.M||!J.f(j.K[n+o*s],k) +else s=!1 +if(s)if(!p.P(0,b[l])){s=b[l] +s.toString +j.kL(s)}}++o}p.al(0,j.gaQy()) +j.a5=a +j.M=B.f.eY(b.length,a) +j.K=A.ab(b,!0,t.aA) +j.aB()}, +a_Z(a,b,c){var s=this,r=a+b*s.a5,q=s.K[r] +if(q==c)return +if(q!=null)s.oi(q) +B.b.u(s.K,r,c) +if(c!=null)s.kL(c)}, +bc(a){var s,r,q,p +this.fg(a) +for(s=this.K,r=s.length,q=0;q0){n=isFinite(p)?p:o +if(0p){i=l-p +h=q +while(!0){if(!(i>1e-10&&s>1e-10))break +for(g=0,r=0;r1e-10&&h>0))break +j=i/h +for(c=0,r=0;r0)if(b<=j){i-=b +a1[r]=f}else{i-=j +a1[r]=a0-j;++c}}h=c}}return a1}, +dA(a){var s,r,q,p,o,n,m,l,k,j,i,h=this +if(h.M*h.a5===0)return a.ca(B.x) +s=h.PH(a) +r=B.b.nd(s,0,new A.aQ5()) +for(q=t.o3,p=0,o=0;o=0;--p){o=p+1 +q[p]=q[o]+s[o]}a2.aa=new A.cz(q,A.a5(q).h("cz<1>")) +a2.bp=B.b.ga9(q)+B.b.ga9(s) +break +case 1:q[0]=0 +for(p=1;p=0;--s){q=this.K[s] +if(q!=null){p=q.b +p.toString +r.a(p) +if(a.m5(new A.aQ6(b,p,q),p.a,b))return!0}}return!1}, +aO(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this +if(e.M*e.a5===0){s=e.aS +if(s!=null){r=b.a +q=b.b +p=e.bp +p===$&&A.c() +s.agy(a.gcP(a),new A.A(r,q,r+p,q+0),B.on,B.on)}return}if(e.b2!=null){o=a.gcP(a) +for(s=e.S,r=b.a,q=b.b,p=e.gfH(),n=0;n=r.b&&r.c>=r.d) +r=s.a0$ +if(r!=null)r.dc(s.gaI(),q) +if(q&&s.a0$!=null)r=s.a0$.gC(0) +else{r=s.gaI() +r=new A.Q(A.U(0,r.a,r.b),A.U(0,r.c,r.d))}s.fx=r}, +ghR(){return!0}, +aO(a,b){var s=this.a0$ +if(s!=null)a.fb(s,b)}, +eK(a,b){var s=this.k1 +s.toString +b.bL(0,s) +this.aoE(a,b)}, +aO3(){var s,r,q,p,o,n,m=this +try{s=$.G().acG() +r=m.ch.a.aN3(s) +m.aLp() +q=m.go +p=m.fy +o=m.fx +p=p.b.ca(o.a2(0,p.c)) +o=$.cF().d +if(o==null){o=self.window.devicePixelRatio +if(o===0)o=1}n=p.b1(0,o) +o=q.ghv().a.style +A.M(o,"width",A.j(n.a)+"px") +A.M(o,"height",A.j(n.b)+"px") +q.PK() +q.b.mv(r,q) +r.t()}finally{}}, +aLp(){var s=this.gpX(),r=s.gbC(),q=s.gbC(),p=this.ch,o=t.ey +p.a.ae_(0,new A.i(r.a,0),o) +switch(A.ci().a){case 0:p.a.ae_(0,new A.i(q.a,s.d-1-0),o) +break +case 1:case 2:case 3:case 4:case 5:break}return}, +gpX(){var s=this.fx.a2(0,this.fy.c) +return new A.A(0,0,0+s.a,0+s.b)}, +gux(){var s,r=this.k1 +r.toString +s=this.fx +return A.ie(r,new A.A(0,0,0+s.a,0+s.b))}} +A.aov.prototype={ +bc(a){var s +this.fg(a) +s=this.a0$ +if(s!=null)s.bc(a)}, +b3(a){var s +this.fh(0) +s=this.a0$ +if(s!=null)s.b3(0)}} +A.ay5.prototype={ +W(){return"CacheExtentStyle."+this.b}} +A.Bk.prototype={ +j(a){return"RevealedOffset(offset: "+A.j(this.a)+", rect: "+this.b.j(0)+")"}} +A.H9.prototype={ +iR(a){this.lf(a) +a.Tv(B.FT)}, +jx(a){var s=this.gU3() +new A.bg(s,new A.aQ9(),A.a5(s).h("bg<1>")).al(0,a)}, +skN(a){if(a===this.K)return +this.K=a +this.aB()}, +sacL(a){if(a===this.a5)return +this.a5=a +this.aB()}, +sl0(a,b){var s=this,r=s.M +if(b===r)return +if(s.y!=null)r.ad(0,s.gLG()) +s.M=b +if(s.y!=null)b.an(0,s.gLG()) +s.aB()}, +saNb(a){if(250===this.av)return +this.av=250 +this.aB()}, +saNc(a){if(a===this.aM)return +this.aM=a +this.aB()}, +sod(a){var s=this +if(a!==s.aS){s.aS=a +s.bi() +s.cf()}}, +bc(a){this.aqO(a) +this.M.an(0,this.gLG())}, +b3(a){this.M.ad(0,this.gLG()) +this.aqP(0)}, +c1(a){return 0}, +bZ(a){return 0}, +c_(a){return 0}, +c2(a){return 0}, +ghR(){return!0}, +XL(a,b,c,d,e,f,g,h,a0,a1,a2){var s,r,q,p,o,n,m,l,k=this,j=A.bR8(k.M.k4,e),i=f+h +for(s=f,r=0;c!=null;){q=a2<=0?0:a2 +p=Math.max(b,-q) +o=b-p +c.dc(new A.wv(k.K,e,j,q,r,i-s,Math.max(0,a1-s+f),d,k.a5,g,p,Math.max(0,a0+o)),!0) +n=c.fx +m=n.y +if(m!=null)return m +l=s+n.b +if(n.w||a2>0)k.ZF(c,l,e) +else k.ZF(c,-a2+f,e) +i=Math.max(l+n.c,i) +m=n.a +a2-=m +r+=m +s+=n.d +m=n.z +if(m!==0){a0-=m-o +b=Math.min(p+m,0)}k.aiL(e,n) +c=a.$1(c)}return 0}, +tA(a){var s,r,q,p,o,n +switch(this.aS.a){case 0:return null +case 1:case 2:case 3:break}s=this.gC(0) +r=0+s.a +q=0+s.b +s=t.R +if(s.a(A.L.prototype.gaI.call(a)).f===0||!isFinite(s.a(A.L.prototype.gaI.call(a)).y))return new A.A(0,0,r,q) +p=s.a(A.L.prototype.gaI.call(a)).y-s.a(A.L.prototype.gaI.call(a)).r+s.a(A.L.prototype.gaI.call(a)).f +switch(A.ug(this.K,s.a(A.L.prototype.gaI.call(a)).b).a){case 2:o=0+p +n=0 +break +case 0:q-=p +n=0 +o=0 +break +case 1:n=0+p +o=0 +break +case 3:r-=p +n=0 +o=0 +break +default:n=0 +o=0}return new A.A(n,o,r,q)}, +UO(a){var s,r,q,p,o=this +if(o.ao==null){s=o.gC(0) +return new A.A(0,0,0+s.a,0+s.b)}switch(A.ch(o.K).a){case 1:o.gC(0) +o.gC(0) +s=o.ao +s.toString +r=o.gC(0) +q=o.gC(0) +p=o.ao +p.toString +return new A.A(0,0-s,0+r.a,0+q.b+p) +case 0:o.gC(0) +s=o.ao +s.toString +o.gC(0) +r=o.gC(0) +q=o.ao +q.toString +return new A.A(0-s,0,0+r.a+q,0+o.gC(0).b)}}, +aO(a,b){var s,r,q,p=this +if(p.aZ$==null)return +s=p.gaeL()&&p.aS!==B.y +r=p.b2 +if(s){s=p.cx +s===$&&A.c() +q=p.gC(0) +r.sbr(0,a.q2(s,b,new A.A(0,0,0+q.a,0+q.b),p.gaLz(),p.aS,r.a))}else{r.sbr(0,null) +p.aaw(a,b)}}, +t(){this.b2.sbr(0,null) +this.ja()}, +aaw(a,b){var s,r,q,p,o,n,m +for(s=this.gU3(),r=s.length,q=b.a,p=b.b,o=0;o0}, +$S:602} +A.aQ8.prototype={ +$1(a){var s=this,r=s.c,q=s.a,p=s.b.ac6(r,q.b) +return r.aeM(s.d,q.a,p)}, +$S:182} +A.QU.prototype={ +i0(a){if(!(a.b instanceof A.ty))a.b=new A.ty(null,null,B.h)}, +saMm(a){if(a===this.ea)return +this.ea=a +this.aB()}, +sbC(a){if(a==this.eu)return +this.eu=a +this.aB()}, +glN(){return!0}, +dA(a){return new A.Q(A.U(1/0,a.a,a.b),A.U(1/0,a.c,a.d))}, +cM(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=null +switch(A.ch(g.K).a){case 1:g.M.Cz(g.gC(0).b) +break +case 0:g.M.Cz(g.gC(0).a) +break}if(g.eu==null){g.na=g.i9=0 +g.nb=!1 +g.M.yr(0,0) +return}switch(A.ch(g.K).a){case 1:s=new A.bI(g.gC(0).b,g.gC(0).a) +break +case 0:s=new A.bI(g.gC(0).a,g.gC(0).b) +break +default:s=f}r=s.a +q=s.b +p=q +o=r +g.eu.toString +n=10*g.dI$ +s=0 +do{m=g.M.at +m.toString +l=g.Pb(o,p,m+0) +if(l!==0)g.M.Ur(l) +else{m=g.M +k=g.i9 +k===$&&A.c() +j=g.ea +k=Math.min(0,k+o*j) +i=g.na +i===$&&A.c() +if(m.yr(k,Math.max(0,i-o*(1-j))))break}h=s+1 +if(h=a?s:r +f=e.ao +f.toString +return e.XL(e.gabN(),A.U(s,-f,0),q,b,B.jZ,j,a,o,k,p,h)}, +gaeL(){return this.nb}, +aiL(a,b){var s,r=this +switch(a.a){case 0:s=r.na +s===$&&A.c() +r.na=s+b.a +break +case 1:s=r.i9 +s===$&&A.c() +r.i9=s-b.a +break}if(b.x)r.nb=!0}, +ZF(a,b,c){var s=a.b +s.toString +t.jB.a(s).a=this.ac5(a,b,c)}, +Yz(a){var s=a.b +s.toString +return t.jB.a(s).a}, +a_R(a,b){var s,r,q,p,o=this +switch(t.R.a(A.L.prototype.gaI.call(a)).b.a){case 0:s=o.eu +for(r=A.w(o).h("aZ.1"),q=0;s!==a;){q+=s.fx.a +p=s.b +p.toString +s=r.a(p).bd$}return q+b +case 1:r=o.eu.b +r.toString +p=A.w(o).h("aZ.1") +s=p.a(r).dY$ +for(q=0;s!==a;){q-=s.fx.a +r=s.b +r.toString +s=p.a(r).dY$}return q-b}}, +afR(a){var s,r,q,p=this +switch(t.R.a(A.L.prototype.gaI.call(a)).b.a){case 0:s=p.eu +for(r=A.w(p).h("aZ.1");s!==a;){s.fx.toString +q=s.b +q.toString +s=r.a(q).bd$}return 0 +case 1:r=p.eu.b +r.toString +q=A.w(p).h("aZ.1") +s=q.a(r).dY$ +for(;s!==a;){s.fx.toString +r=s.b +r.toString +s=q.a(r).dY$}return 0}}, +eK(a,b){var s=a.b +s.toString +s=t.jB.a(s).a +b.aJ(0,s.a,s.b)}, +ac6(a,b){var s,r=a.b +r.toString +s=t.jB.a(r).a +r=t.R +switch(A.ug(r.a(A.L.prototype.gaI.call(a)).a,r.a(A.L.prototype.gaI.call(a)).b).a){case 2:r=b-s.b +break +case 1:r=b-s.a +break +case 0:r=a.fx.c-(b-s.b) +break +case 3:r=a.fx.c-(b-s.a) +break +default:r=null}return r}, +gU3(){var s,r,q=this,p=A.b([],t.Ry),o=q.aZ$ +if(o==null)return p +for(s=A.w(q).h("aZ.1");o!=q.eu;){o.toString +p.push(o) +r=o.b +r.toString +o=s.a(r).bd$}o=q.f1$ +for(;!0;){o.toString +p.push(o) +if(o===q.eu)return p +r=o.b +r.toString +o=s.a(r).dY$}}, +gabP(){var s,r,q,p=this,o=A.b([],t.Ry) +if(p.aZ$==null)return o +s=p.eu +for(r=A.w(p).h("aZ.1");s!=null;){o.push(s) +q=s.b +q.toString +s=r.a(q).bd$}q=p.eu.b +q.toString +s=r.a(q).dY$ +for(;s!=null;){o.push(s) +q=s.b +q.toString +s=r.a(q).dY$}return o}} +A.aaf.prototype={ +i0(a){if(!(a.b instanceof A.tx))a.b=new A.tx(null,null)}, +cM(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null,c=t.k.a(A.L.prototype.gaI.call(e)) +if(e.aZ$==null){switch(A.ch(e.K).a){case 1:s=new A.Q(c.b,c.c) +break +case 0:s=new A.Q(c.a,c.d) +break +default:s=d}e.id=s +e.M.Cz(0) +e.eu=e.ea=0 +e.i9=!1 +e.M.yr(0,0) +return}switch(A.ch(e.K).a){case 1:s=new A.bI(c.d,c.b) +break +case 0:s=new A.bI(c.b,c.d) +break +default:s=d}r=s.a +q=s.b +p=q +o=r +for(s=c.a,n=c.b,m=c.c,l=c.d,k=d;!0;){j=e.M.at +j.toString +i=e.Pb(o,p,j) +if(i!==0){j=e.M +h=j.at +h.toString +j.at=h+i +j.ch=!0}else{switch(A.ch(e.K).a){case 1:j=e.eu +j===$&&A.c() +j=A.U(j,m,l) +break +case 0:j=e.eu +j===$&&A.c() +j=A.U(j,s,n) +break +default:j=d}h=e.M +if(h.ax!==j){h.ax=j +h.ch=!0}g=e.ea +g===$&&A.c() +f=h.yr(0,Math.max(0,g-j)) +if(f){k=j +break}k=j}}switch(A.ch(e.K).a){case 1:s=new A.Q(A.U(p,s,n),A.U(k,m,l)) +break +case 0:s=new A.Q(A.U(k,s,n),A.U(p,m,l)) +break +default:s=d}e.id=s}, +Pb(a,b,c){var s,r,q,p,o,n=this +n.eu=n.ea=0 +n.i9=c<0 +switch(n.aM.a){case 0:s=n.av +break +case 1:s=a*n.av +break +default:s=null}n.ao=s +r=n.aZ$ +q=Math.max(0,c) +p=Math.min(0,c) +o=Math.max(0,-c) +s.toString +return n.XL(n.gabN(),-s,r,b,B.jZ,o,a,p,a+2*s,a+p,q)}, +gaeL(){return this.i9}, +aiL(a,b){var s=this,r=s.ea +r===$&&A.c() +s.ea=r+b.a +if(b.x)s.i9=!0 +r=s.eu +r===$&&A.c() +s.eu=r+b.e}, +ZF(a,b,c){var s=a.b +s.toString +t.Xp.a(s).a=b}, +Yz(a){var s=a.b +s.toString +s=t.Xp.a(s).a +s.toString +return this.ac5(a,s,B.jZ)}, +a_R(a,b){var s,r,q,p=this.aZ$ +for(s=A.w(this).h("aZ.1"),r=0;p!==a;){r+=p.fx.a +q=p.b +q.toString +p=s.a(q).bd$}return r+b}, +afR(a){var s,r,q=this.aZ$ +for(s=A.w(this).h("aZ.1");q!==a;){q.fx.toString +r=q.b +r.toString +q=s.a(r).bd$}return 0}, +eK(a,b){var s=this.Yz(t.nl.a(a)) +b.aJ(0,s.a,s.b)}, +ac6(a,b){var s,r,q=a.b +q.toString +q=t.Xp.a(q).a +q.toString +s=t.R +r=A.ug(s.a(A.L.prototype.gaI.call(a)).a,s.a(A.L.prototype.gaI.call(a)).b) +$label0$0:{if(B.a7===r||B.d9===r){q=b-q +break $label0$0}if(B.ag===r){q=this.gC(0).b-b-q +break $label0$0}if(B.cA===r){q=this.gC(0).a-b-q +break $label0$0}q=null}return q}, +gU3(){var s,r,q=A.b([],t.Ry),p=this.f1$ +for(s=A.w(this).h("aZ.1");p!=null;){q.push(p) +r=p.b +r.toString +p=s.a(r).dY$}return q}, +gabP(){var s,r,q=A.b([],t.Ry),p=this.aZ$ +for(s=A.w(this).h("aZ.1");p!=null;){q.push(p) +r=p.b +r.toString +p=s.a(r).bd$}return q}} +A.nG.prototype={ +bc(a){var s,r,q +this.fg(a) +s=this.aZ$ +for(r=A.w(this).h("nG.0");s!=null;){s.bc(a) +q=s.b +q.toString +s=r.a(q).bd$}}, +b3(a){var s,r,q +this.fh(0) +s=this.aZ$ +for(r=A.w(this).h("nG.0");s!=null;){s.b3(0) +q=s.b +q.toString +s=r.a(q).bd$}}} +A.Rq.prototype={ +W(){return"ScrollDirection."+this.b}} +A.mJ.prototype={ +EF(a,b,c,d){var s=d.a===B.G.a +if(s){this.iw(b) +return A.e5(null,t.H)}else return this.o9(b,c,d)}, +j(a){var s=this,r=A.b([],t.T) +s.aph(r) +r.push(A.J(s.w).j(0)) +r.push(s.r.j(0)) +r.push(A.j(s.fr)) +r.push(s.k4.j(0)) +return"#"+A.bU(s)+"("+B.b.cj(r,", ")+")"}, +hu(a){var s=this.at +if(s!=null)a.push("offset: "+B.c.b8(s,1))}} +A.aXL.prototype={ +W(){return"WrapAlignment."+this.b}} +A.aeH.prototype={ +W(){return"WrapCrossAlignment."+this.b}} +A.WY.prototype={} +A.qk.prototype={} +A.QV.prototype={ +sqY(a,b){if(this.K===b)return +this.K=b +this.aB()}, +sil(a){if(this.a5===a)return +this.a5=a +this.aB()}, +sOb(a,b){if(this.M===b)return +this.M=b +this.aB()}, +saZ9(a){if(this.av===a)return +this.av=a +this.aB()}, +saZb(a){if(this.ao===a)return +this.ao=a +this.aB()}, +sUz(a){if(this.aM===a)return +this.aM=a +this.aB()}, +i0(a){if(!(a.b instanceof A.qk))a.b=new A.qk(null,null,B.h)}, +c1(a){var s,r,q,p,o,n=this +switch(n.K.a){case 0:s=n.aZ$ +for(r=A.w(n).h("aZ.1"),q=0;s!=null;){p=s.gc0() +o=B.a9.ib(s.fx,1/0,p) +q=Math.max(q,o) +p=s.b +p.toString +s=r.a(p).bd$}return q +case 1:return n.aY(B.bg,new A.bb(0,1/0,0,a),n.gjd()).a}}, +bZ(a){var s,r,q,p,o,n=this +switch(n.K.a){case 0:s=n.aZ$ +for(r=A.w(n).h("aZ.1"),q=0;s!=null;){p=s.gbY() +o=B.aa.ib(s.fx,1/0,p) +q+=o +p=s.b +p.toString +s=r.a(p).bd$}return q +case 1:return n.aY(B.bg,new A.bb(0,1/0,0,a),n.gjd()).a}}, +c_(a){var s,r,q,p,o,n=this +switch(n.K.a){case 0:return n.aY(B.bg,new A.bb(0,a,0,1/0),n.gjd()).b +case 1:s=n.aZ$ +for(r=A.w(n).h("aZ.1"),q=0;s!=null;){p=s.gcd() +o=B.ay.ib(s.fx,1/0,p) +q=Math.max(q,o) +p=s.b +p.toString +s=r.a(p).bd$}return q}}, +c2(a){var s,r,q,p,o,n=this +switch(n.K.a){case 0:return n.aY(B.bg,new A.bb(0,a,0,1/0),n.gjd()).b +case 1:s=n.aZ$ +for(r=A.w(n).h("aZ.1"),q=0;s!=null;){p=s.gcG() +o=B.aN.ib(s.fx,1/0,p) +q+=o +p=s.b +p.toString +s=r.a(p).bd$}return q}}, +iO(a){return this.Ka(a)}, +QJ(a){var s +switch(this.K.a){case 0:s=a.a +break +case 1:s=a.b +break +default:s=null}return s}, +QH(a){var s +switch(this.K.a){case 0:s=a.b +break +case 1:s=a.a +break +default:s=null}return s}, +ayk(a,b){var s +switch(this.K.a){case 0:s=new A.i(a,b) +break +case 1:s=new A.i(b,a) +break +default:s=null}return s}, +axW(a,b,c){var s,r=b-c +switch(this.aM.a){case 0:s=a?r:0 +break +case 1:s=a?0:r +break +case 2:s=r/2 +break +default:s=null}return s}, +dA(a){return this.aLG(a)}, +aLG(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=null +switch(d.K.a){case 0:s=a.b +s=new A.bI(new A.bb(0,s,0,1/0),s) +break +case 1:s=a.d +s=new A.bI(new A.bb(0,1/0,0,s),s) +break +default:s=c}r=s.a +q=s.b +p=q +o=r +n=d.aZ$ +for(s=A.w(d).h("aZ.1"),m=0,l=0,k=0,j=0,i=0;n!=null;){h=A.bl5(n,o) +g=d.QJ(h) +f=d.QH(h) +if(i>0&&k+g+d.M>p){m=Math.max(m,k) +l+=j+d.ao +k=0 +j=0 +i=0}k+=g +j=Math.max(j,f) +if(i>0)k+=d.M;++i +e=n.b +e.toString +n=s.a(e).bd$}l+=j +m=Math.max(m,k) +switch(d.K.a){case 0:s=new A.Q(m,l) +break +case 1:s=new A.Q(l,m) +break +default:s=c}return a.ca(s)}, +cM(){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=this,b4="RenderBox was not laid out: ",b5=t.k.a(A.L.prototype.gaI.call(b3)) +b3.ct=!1 +s=b3.aZ$ +if(s==null){b3.id=new A.Q(A.U(0,b5.a,b5.b),A.U(0,b5.c,b5.d)) +return}switch(b3.K.a){case 0:r=b5.b +q=new A.bb(0,r,0,1/0) +p=b3.aS===B.ad +o=b3.b2===B.tl +break +case 1:r=b5.d +q=new A.bb(0,1/0,0,r) +p=b3.b2===B.tl +o=b3.aS===B.ad +break +default:q=null +r=0 +p=!1 +o=!1}n=b3.M +m=b3.ao +l=A.b([],t.M6) +for(k=t.Qy,j=0,i=0,h=0,g=0,f=0;s!=null;){s.dc(q,!0) +e=s.id +d=b3.QJ(e==null?A.X(A.ad(b4+A.J(s).j(0)+"#"+A.bU(s))):e) +e=s.id +c=b3.QH(e==null?A.X(A.ad(b4+A.J(s).j(0)+"#"+A.bU(s))):e) +if(f>0&&h+n+d>r){j=Math.max(j,h) +i+=g +if(l.length!==0)i+=m +l.push(new A.WY(h,g,f)) +h=0 +g=0 +f=0}h+=d +if(f>0)h+=n +g=Math.max(g,c);++f +e=s.b +e.toString +k.a(e) +e.e=l.length +s=e.bd$}if(f>0){j=Math.max(j,h) +i+=g +if(l.length!==0)i+=m +l.push(new A.WY(h,g,f))}b=l.length +switch(b3.K.a){case 0:b3.id=b5.ca(new A.Q(j,i)) +a=b3.gC(0).a +a0=b3.gC(0).b +break +case 1:b3.id=b5.ca(new A.Q(i,j)) +a=b3.gC(0).b +a0=b3.gC(0).a +break +default:a=0 +a0=0}b3.ct=a1?a1/(b-1):0 +a2=0 +break +case 4:a3=a1/b +a2=a3/2 +break +case 5:a3=a1/(b+1) +a2=a3 +break +default:a2=0 +a3=0}a3+=m +a4=o?a0-a2:a2 +s=b3.aZ$ +for(a5=0;a51?a7/(f-1):0 +a8=0 +break +case 4:a9=a7/f +a8=a9/2 +break +case 5:a9=a7/(f+1) +a8=a9 +break +default:a8=0 +a9=0}a9+=n +b0=p?a-a8:a8 +if(o)a4-=g +for(;s!=null;){e=s.b +e.toString +k.a(e) +if(e.e!==a5)break +b1=s.id +d=b3.QJ(b1==null?A.X(A.ad(b4+A.J(s).j(0)+"#"+A.bU(s))):b1) +b1=s.id +b2=b3.axW(o,g,b3.QH(b1==null?A.X(A.ad(b4+A.J(s).j(0)+"#"+A.bU(s))):b1)) +if(p)b0-=d +e.a=b3.ayk(b0,a4+b2) +b0=p?b0-a9:b0+(d+a9) +s=e.bd$}a4=o?a4-a3:a4+(g+a3)}}, +dZ(a,b){return this.De(a,b)}, +aO(a,b){var s,r=this,q=r.ct&&r.bB!==B.y,p=r.bD +if(q){q=r.cx +q===$&&A.c() +s=r.gC(0) +p.sbr(0,a.q2(q,b,new A.A(0,0,0+s.a,0+s.b),r.gacW(),r.bB,p.a))}else{p.sbr(0,null) +r.yU(a,b)}}, +t(){this.bD.sbr(0,null) +this.ja()}} +A.aox.prototype={ +bc(a){var s,r,q +this.fg(a) +s=this.aZ$ +for(r=t.Qy;s!=null;){s.bc(a) +q=s.b +q.toString +s=r.a(q).bd$}}, +b3(a){var s,r,q +this.fh(0) +s=this.aZ$ +for(r=t.Qy;s!=null;){s.b3(0) +q=s.b +q.toString +s=r.a(q).bd$}}} +A.aoy.prototype={} +A.Jd.prototype={} +A.Bt.prototype={ +W(){return"SchedulerPhase."+this.b}} +A.aNr.prototype={} +A.iQ.prototype={ +ahL(a){var s=this.eu$ +B.b.P(s,a) +if(s.length===0){s=$.bF() +s.dx=null +s.dy=$.aK}}, +ax4(a){var s,r,q,p,o,n,m,l,k=this.eu$,j=A.ab(k,!0,t.ph) +for(p=j.length,o=0;o0)return!1 +if(k)A.X(A.ad(m)) +s=l.Hk(0) +k=s.gq0() +if(n.na$.$2$priority$scheduler(k,n)){try{if(l.c===0)A.X(A.ad(m));++l.d +l.Hk(0) +p=l.aGg() +if(l.c>0)l.atV(p,0) +s.fZ()}catch(o){r=A.b2(o) +q=A.bC(o) +k=A.cn("during a task callback") +A.eR(new A.cI(r,q,"scheduler library",k,null,!1))}return l.c!==0}return!1}, +Ap(a,b){var s,r=this +r.qk() +s=++r.ha$ +r.hJ$.u(0,s,new A.Jd(a)) +return r.ha$}, +Ga(a){return this.Ap(a,!1)}, +abJ(a){this.hJ$.P(0,a) +this.kt$.E(0,a)}, +gaR_(){var s=this +if(s.fE$==null){if(s.fF$===B.fI)s.qk() +s.fE$=new A.bH(new A.aM($.aK,t.D),t.h) +s.dP$.push(new A.aRj(s))}return s.fE$.a}, +gaej(){return this.vN$}, +a8e(a){if(this.vN$===a)return +this.vN$=a +if(a)this.qk()}, +adI(){var s=$.bF() +if(s.at==null){s.at=this.gayR() +s.ax=$.aK}if(s.ay==null){s.ay=this.gazr() +s.ch=$.aK}}, +Vr(){switch(this.fF$.a){case 0:case 4:this.qk() +return +case 1:case 2:case 3:return}}, +qk(){var s,r=this +if(!r.kT$)s=!(A.iQ.prototype.gaej.call(r)&&r.Vy$) +else s=!0 +if(s)return +r.adI() +$.bF().qk() +r.kT$=!0}, +akA(){if(this.kT$)return +this.adI() +$.bF().qk() +this.kT$=!0}, +a_Q(){var s,r=this +if(r.r0$||r.fF$!==B.fI)return +r.r0$=!0 +s=r.kT$ +$.bF() +A.dn(B.G,new A.aRl(r)) +A.dn(B.G,new A.aRm(r,s)) +r.aUN(new A.aRn(r))}, +a22(a){var s=this.r1$ +return A.dE(B.c.ai((s==null?B.G:new A.bv(a.a-s.a)).a/1)+this.vO$.a,0)}, +ayS(a){if(this.r0$){this.hx$=!0 +return}this.aen(a)}, +azs(){var s=this +if(s.hx$){s.hx$=!1 +s.dP$.push(new A.aRi(s)) +return}s.aet()}, +aen(a){var s,r,q=this +if(q.r1$==null)q.r1$=a +r=a==null +q.r3$=q.a22(r?q.r2$:a) +if(!r)q.r2$=a +q.kT$=!1 +try{q.fF$=B.a5K +s=q.hJ$ +q.hJ$=A.D(t.S,t.h1) +J.lQ(s,new A.aRk(q)) +q.kt$.af(0)}finally{q.fF$=B.a5L}}, +aYU(a){var s=this,r=s.ef$,q=r==null +if(!q&&r!==a)return null +if(r===a)++s.dn$ +else if(q){s.ef$=a +s.dn$=1}return new A.aNr(s.gawp())}, +awq(){if(--this.dn$===0){this.ef$=null +$.bF()}}, +aet(){var s,r,q,p,o,n,m,l,k=this +try{k.fF$=B.l2 +for(p=t.Vu,o=A.ab(k.hK$,!0,p),n=o.length,m=0;m0&&r<4){s=s.r3$ +s.toString +q.c=s}s=q.a +s.toString +return s}, +AL(a,b){var s=this,r=s.a +if(r==null)return +s.c=s.a=null +s.N9() +if(b)r.a9e(s) +else r.a9f()}, +dM(a){return this.AL(0,!1)}, +aKb(a){var s,r=this +r.e=null +s=r.c +if(s==null)s=r.c=a +r.d.$1(new A.bv(a.a-s.a)) +if(!r.b&&r.a!=null&&r.e==null)r.e=$.cN.Ap(r.gIL(),!0)}, +N9(){var s=this.e +if(s!=null){$.cN.abJ(s) +this.e=null}}, +t(){var s=this,r=s.a +if(r!=null){s.a=null +s.N9() +r.a9e(s)}}, +aZu(a,b){var s=""+"Ticker()" +return s.charCodeAt(0)==0?s:s}, +j(a){return this.aZu(0,!1)}} +A.Cf.prototype={ +a9f(){this.c=!0 +this.a.fl(0) +var s=this.b +if(s!=null)s.fl(0)}, +a9e(a){var s +this.c=!1 +s=this.b +if(s!=null)s.n_(new A.T_(a))}, +b_i(a){var s,r,q=this,p=new A.aW_(a) +if(q.b==null){s=q.b=new A.bH(new A.aM($.aK,t.D),t.h) +r=q.c +if(r!=null)if(r)s.fl(0) +else s.n_(B.af7)}q.b.a.k7(p,p,t.H)}, +yE(a,b){return this.a.a.yE(a,b)}, +ts(a){return this.yE(a,null)}, +k7(a,b,c){return this.a.a.k7(a,b,c)}, +cu(a,b){return this.k7(a,null,b)}, +l4(a){return this.a.a.l4(a)}, +j(a){var s=A.bU(this),r=this.c +if(r==null)r="active" +else r=r?"complete":"canceled" +return"#"+s+"("+r+")"}, +$ian:1} +A.aW_.prototype={ +$1(a){this.a.$0()}, +$S:36} +A.T_.prototype={ +j(a){var s=this.a +if(s!=null)return"This ticker was canceled: "+s.j(0) +return'The ticker was canceled before the "orCancel" property was first used.'}, +$ic4:1} +A.abe.prototype={ +gBW(){var s,r,q=this.adT$ +if(q===$){s=$.bF().c +r=$.aa() +q!==$&&A.N() +q=this.adT$=new A.cD(s.c,r,t.uh)}return q}, +aw8(){--this.Wp$ +this.gBW().sm(0,this.Wp$>0)}, +a5l(){var s,r=this +if($.bF().c.c){if(r.KL$==null){++r.Wp$ +r.gBW().sm(0,!0) +r.KL$=new A.aS7(r.gaw7())}}else{s=r.KL$ +if(s!=null)s.a.$0() +r.KL$=null}}, +aB1(a){var s,r,q=a.d +if(t.V4.b(q)){s=B.bf.kQ(q) +if(J.f(s,B.mF))s=q +r=new A.BC(a.a,a.b,a.c,s)}else r=a +s=this.z7$.i(0,r.b) +if(s!=null){s=s.y +if(s!=null){s=s.at +if(s!=null)s.aXA(r.c,r.a,r.d)}}}} +A.aS7.prototype={} +A.oA.prototype={ +j(a){return"SemanticsTag("+this.a+")"}} +A.DQ.prototype={} +A.a0n.prototype={} +A.Em.prototype={ +gL(a){return A.a6(null,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.Em&&b.b===this.b&&b.c===this.c}, +j(a){return"CustomSemanticsAction("+A.j($.ben.i(0,this))+", label:null, hint:"+this.b+", action:"+this.c.j(0)+")"}} +A.eH.prototype={ +X(a,b){var s,r,q,p,o,n,m,l=this.a,k=l.length +if(k===0)return b +s=b.a +if(s.length===0)return this +r=A.ab(this.b,!0,t.Vd) +q=b.b +p=q.length +if(p!==0)for(o=0;o=0;--o)r[o]=n[q-o-1].b}n=a3.fx +m=n.length +if(m!==0){l=new Int32Array(m) +for(o=0;o0?r[n-1].p3:null +if(n!==0){k=J.ai(l)===J.ai(o) +if(k)if(l!=null)o.toString}else k=!0 +if(!k&&p.length!==0){if(o!=null)B.b.kg(p) +B.b.I(q,p) +B.b.af(p)}p.push(new A.u5(m,l,n))}if(o!=null)B.b.kg(p) +B.b.I(q,p) +s=t.rB +return A.ab(new A.W(q,new A.aS9(),s),!0,s.h("aI.E"))}, +akR(a){if(this.ay==null)return +B.f1.kf(0,a.N_(this.b))}, +fu(){return"SemanticsNode#"+this.b}, +aZo(a,b,c){return new A.apr(a,this,b,!0,!0,null,c)}, +aip(a){return this.aZo(B.T9,null,a)}} +A.aSb.prototype={ +$1(a){var s,r,q,p=this.a +p.a=p.a|a.fr +s=p.b +r=a.z +q=a.dx +p.b=s|(r?q&$.avr():q) +if(p.y==null)p.y=a.p2 +if(p.Q==null)p.Q=a.p4 +if(p.as==null)p.as=a.RG +if(p.at==null)p.at=a.rx +if(p.ax==null)p.ax=a.ry +if(p.ay==null)p.ay=a.to +if(p.ch==null)p.ch=a.x1 +p.CW=a.x2 +p.cx=a.xr +if(p.cy==null)p.cy=a.y1 +if(p.c==="")p.c=a.fx +if(p.e.a==="")p.e=a.go +if(p.f.a==="")p.f=a.id +if(p.r.a==="")p.r=a.k1 +if(p.x==="")p.x=a.k3 +s=a.dy +if(s!=null){r=p.z;(r==null?p.z=A.C(t.g3):r).I(0,s)}for(s=this.b.db,s=A.jb(s,s.r,A.w(s).c),r=this.c;s.H();)r.E(0,A.aAv(s.d)) +s=a.p1 +if(s!=null){s=s.a +if(s!=null)r.E(0,A.aAv(new A.Em(s,B.dm))) +a.p1.toString}s=p.d +r=p.y +p.d=A.b8R(a.fy,a.p2,s,r) +r=p.w +s=p.y +p.w=A.b8R(a.k2,a.p2,r,s) +p.db=Math.max(p.db,a.ok+a.k4) +return!0}, +$S:125} +A.aS9.prototype={ +$1(a){return a.a}, +$S:608} +A.tR.prototype={ +cK(a,b){return B.c.cK(this.b,b.b)}, +$idC:1} +A.oX.prototype={ +cK(a,b){return B.c.cK(this.a,b.a)}, +am6(){var s,r,q,p,o,n,m,l,k,j=A.b([],t.TV) +for(s=this.c,r=s.length,q=0;q") +return A.ab(new A.m0(n,new A.b6x(),s),!0,s.h("z.E"))}, +am5(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3=this.c,a4=a3.length +if(a4<=1)return a3 +s=t.S +r=A.D(s,t.bu) +q=A.D(s,s) +for(p=this.b,o=p===B.ad,p=p===B.r,n=a4,m=0;m2.356194490192345 +else a0=!1 +if(a||a0)q.u(0,l.b,f.b)}}a1=A.b([],t.t) +a2=A.b(a3.slice(0),A.a5(a3)) +B.b.i1(a2,new A.b6t()) +new A.W(a2,new A.b6u(),A.a5(a2).h("W<1,k>")).al(0,new A.b6w(A.C(s),q,a1)) +a3=t.qn +a3=A.ab(new A.W(a1,new A.b6v(r),a3),!0,a3.h("aI.E")) +a4=A.a5(a3).h("cz<1>") +return A.ab(new A.cz(a3,a4),!0,a4.h("aI.E"))}, +$idC:1} +A.b6x.prototype={ +$1(a){return a.am5()}, +$S:189} +A.b6t.prototype={ +$2(a,b){var s,r,q=a.e,p=A.D7(a,new A.i(q.a,q.b)) +q=b.e +s=A.D7(b,new A.i(q.a,q.b)) +r=B.c.cK(p.b,s.b) +if(r!==0)return-r +return-B.c.cK(p.a,s.a)}, +$S:123} +A.b6w.prototype={ +$1(a){var s=this,r=s.a +if(r.G(0,a))return +r.E(0,a) +r=s.b +if(r.aR(0,a)){r=r.i(0,a) +r.toString +s.$1(r)}s.c.push(a)}, +$S:13} +A.b6u.prototype={ +$1(a){return a.b}, +$S:611} +A.b6v.prototype={ +$1(a){var s=this.a.i(0,a) +s.toString +return s}, +$S:612} +A.b8L.prototype={ +$1(a){return a.am6()}, +$S:189} +A.u5.prototype={ +cK(a,b){var s,r=this.b +if(r==null||b.b==null)return this.c-b.c +r.toString +s=b.b +s.toString +return r.cK(0,s)}, +$idC:1} +A.RF.prototype={ +t(){var s=this +s.b.af(0) +s.c.af(0) +s.d.af(0) +s.fN()}, +akS(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.b +if(f.a===0)return +s=A.C(t.S) +r=A.b([],t.QF) +for(q=A.w(f).h("bg<1>"),p=q.h("z.E"),o=g.d;f.a!==0;){n=A.ab(new A.bg(f,new A.aSe(g),q),!0,p) +f.af(0) +o.af(0) +B.b.i1(n,new A.aSf()) +B.b.I(r,n) +for(m=n.length,l=0;l#"+A.bU(this)}} +A.aSe.prototype={ +$1(a){return!this.a.d.G(0,a)}, +$S:125} +A.aSf.prototype={ +$2(a,b){return a.CW-b.CW}, +$S:123} +A.aSg.prototype={ +$2(a,b){return a.CW-b.CW}, +$S:123} +A.aSd.prototype={ +$1(a){if(a.cy.aR(0,this.b)){this.a.a=a +return!1}return!0}, +$S:125} +A.oz.prototype={ +uQ(a,b){var s=this +s.f.u(0,a,b) +s.r=s.r|a.a +s.e=!0}, +kk(a,b){this.uQ(a,new A.aRX(b))}, +shT(a){a.toString +this.kk(B.dm,a)}, +su4(a){a.toString +this.kk(B.FD,a)}, +sM8(a){this.kk(B.ii,a)}, +sLY(a){this.kk(B.a67,a)}, +sM9(a){this.kk(B.ij,a)}, +sMa(a){this.kk(B.ig,a)}, +sM7(a){this.kk(B.ih,a)}, +sM0(a){this.kk(B.FE,a)}, +sLV(a){this.kk(B.FC,a)}, +sLT(a,b){this.kk(B.a68,b)}, +sLU(a,b){this.kk(B.a6b,b)}, +sM6(a,b){this.kk(B.a63,b)}, +sM3(a){this.uQ(B.a69,new A.aS0(a))}, +sM1(a){this.uQ(B.a6c,new A.aRZ(a))}, +sM4(a){this.uQ(B.a6a,new A.aS1(a))}, +sM2(a){this.uQ(B.a62,new A.aS_(a))}, +sMb(a){this.uQ(B.a64,new A.aS2(a))}, +sMc(a){this.uQ(B.a65,new A.aS3(a))}, +sLW(a){this.kk(B.rm,a)}, +sLX(a){this.kk(B.rn,a)}, +sakE(a){if(a==this.k4)return +this.k4=a +this.e=!0}, +sakF(a){if(a==this.ok)return +this.ok=a +this.e=!0}, +sXV(a){return}, +sK5(a){if(a==this.p3)return +this.p3=a +this.e=!0}, +saTe(a){if(a==null)return +this.y1=a +this.e=!0}, +sh1(a,b){if(b===this.y2)return +this.y2=b +this.e=!0}, +Tv(a){var s=this.K;(s==null?this.K=A.C(t.g3):s).E(0,a)}, +cE(a,b){var s=this,r=s.a5,q=a.a +if(b)s.a5=r|q +else s.a5=r&~q +s.e=!0}, +afh(a){var s=this +if(a==null||!a.e||!s.e)return!0 +if((s.r&a.r)!==0)return!1 +if((s.a5&a.a5)!==0)return!1 +if(s.p3!=null&&a.p3!=null)return!1 +if(s.ry.a.length!==0&&a.ry.a.length!==0)return!1 +return!0}, +yg(a){var s,r,q,p=this +if(!a.e)return +s=a.f +if(a.b)s.al(0,new A.aRY(p)) +else p.f.I(0,s) +s=p.r +r=a.b +q=a.r +p.r=s|(r?q&$.avr():q) +p.R8.I(0,a.R8) +p.a5=p.a5|a.a5 +if(p.ac==null)p.ac=a.ac +if(p.ah==null)p.ah=a.ah +if(p.b_==null)p.b_=a.b_ +if(p.b6==null)p.b6=a.b6 +if(p.y1==null)p.y1=a.y1 +if(p.k3==null)p.k3=a.k3 +if(p.ok==null)p.ok=a.ok +if(p.k4==null)p.k4=a.k4 +p.p1=a.p1 +p.p2=a.p2 +if(p.p3==null)p.p3=a.p3 +s=p.bn +if(s==null){s=p.bn=a.bn +p.e=!0}if(p.k2==null)p.k2=a.k2 +if(p.RG==="")p.RG=a.RG +r=p.rx +p.rx=A.b8R(a.rx,a.bn,r,s) +if(p.ry.a==="")p.ry=a.ry +if(p.to.a==="")p.to=a.to +if(p.x1.a==="")p.x1=a.x1 +s=p.x2 +r=p.bn +p.x2=A.b8R(a.x2,a.bn,s,r) +if(p.xr==="")p.xr=a.xr +p.bv=Math.max(p.bv,a.bv+a.y2) +p.e=p.e||a.e}, +iP(){var s=this,r=A.q0() +r.a=s.a +r.c=s.c +r.d=s.d +r.e=s.e +r.p4=s.p4 +r.bn=s.bn +r.k2=s.k2 +r.RG=s.RG +r.rx=s.rx +r.to=s.to +r.ry=s.ry +r.x1=s.x1 +r.x2=s.x2 +r.y1=s.y1 +r.xr=s.xr +r.y2=s.y2 +r.bv=s.bv +r.a5=s.a5 +r.K=s.K +r.ac=s.ac +r.ah=s.ah +r.b_=s.b_ +r.b6=s.b6 +r.r=s.r +r.k3=s.k3 +r.ok=s.ok +r.k4=s.k4 +r.p1=s.p1 +r.p2=s.p2 +r.p3=s.p3 +r.f.I(0,s.f) +r.R8.I(0,s.R8) +r.b=s.b +return r}} +A.aRX.prototype={ +$1(a){this.a.$0()}, +$S:11} +A.aS0.prototype={ +$1(a){a.toString +this.a.$1(A.u9(a))}, +$S:11} +A.aRZ.prototype={ +$1(a){a.toString +this.a.$1(A.u9(a))}, +$S:11} +A.aS1.prototype={ +$1(a){a.toString +this.a.$1(A.u9(a))}, +$S:11} +A.aS_.prototype={ +$1(a){a.toString +this.a.$1(A.u9(a))}, +$S:11} +A.aS2.prototype={ +$1(a){var s,r,q +a.toString +s=J.avE(t.f.a(a),t.N,t.S) +r=s.i(0,"base") +r.toString +q=s.i(0,"extent") +q.toString +this.a.$1(A.dJ(B.v,r,q,!1))}, +$S:11} +A.aS3.prototype={ +$1(a){a.toString +this.a.$1(A.cE(a))}, +$S:11} +A.aRY.prototype={ +$2(a,b){if(($.avr()&a.a)>0)this.a.f.u(0,a,b)}, +$S:614} +A.aAC.prototype={ +W(){return"DebugSemanticsDumpOrder."+this.b}} +A.Hy.prototype={ +cK(a,b){var s=this.aQ8(b) +return s}, +$idC:1} +A.AH.prototype={ +aQ8(a){var s=a.b,r=this.b +if(s===r)return 0 +return B.f.cK(r,s)}} +A.apq.prototype={} +A.apt.prototype={} +A.apu.prototype={} +A.a_9.prototype={ +W(){return"Assertiveness."+this.b}} +A.aS5.prototype={ +N_(a){var s=A.b3(["type",this.a,"data",this.wI()],t.N,t.z) +if(a!=null)s.u(0,"nodeId",a) +return s}, +ais(){return this.N_(null)}, +j(a){var s,r,q=A.b([],t.T),p=this.wI(),o=p.gdv(p),n=A.ab(o,!0,A.w(o).h("z.E")) +B.b.kg(n) +for(o=n.length,s=0;s#"+A.bU(this)+"()"}} +A.ay7.prototype={ +rn(a,b){if(b)return this.a.cU(0,a,new A.ay8(this,a)) +return this.a0y(a,!0)}, +zx(a){return this.rn(a,!0)}, +aUK(a,b,c){var s,r=this,q={},p=r.b +if(p.aR(0,a)){q=p.i(0,a) +q.toString +return c.h("an<0>").a(q)}q.a=q.b=null +r.rn(a,!1).cu(b,c).k7(new A.ay9(q,r,a,c),new A.aya(q,r,a),t.H) +s=q.a +if(s!=null)return s +s=new A.aM($.aK,c.h("aM<0>")) +q.b=new A.bH(s,c.h("bH<0>")) +p.u(0,a,s) +return q.b.a}, +Vu(a){this.a.P(0,a) +this.b.P(0,a) +this.c.P(0,a)}} +A.ay8.prototype={ +$0(){return this.a.a0y(this.b,!0)}, +$S:615} +A.ay9.prototype={ +$1(a){var s=this,r=new A.d9(a,s.d.h("d9<0>")),q=s.a +q.a=r +s.b.b.u(0,s.c,r) +q=q.b +if(q!=null)q.fC(0,a)}, +$S(){return this.d.h("bR(0)")}} +A.aya.prototype={ +$2(a,b){this.b.b.P(0,this.c) +this.a.b.lq(a,b)}, +$S:33} +A.aNC.prototype={ +d_(a,b){var s,r=null,q=B.bn.dB(A.asi(r,r,A.lM(B.dR,b,B.a1,!1),r,r,r).e),p=$.f6.bB$ +p===$&&A.c() +s=p.NV(0,"flutter/assets",A.be8(q)).cu(new A.aND(b),t.V4) +return s}, +LB(a){return this.aUC(a)}, +aUC(a){var s=0,r=A.r(t.SG),q,p=this,o,n +var $async$LB=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=A +n=A +s=3 +return A.x(p.d_(0,a),$async$LB) +case 3:q=o.Fn(n.aWT(c,0,null)) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$LB,r)}} +A.aND.prototype={ +$1(a){if(a==null)throw A.d(A.ze(A.b([A.bP3(this.a),A.cn("The asset does not exist or has empty data.")],t._))) +return a}, +$S:616} +A.aww.prototype={ +$1(a){return this.ajq(a)}, +ajq(a){var s=0,r=A.r(t.LS),q +var $async$$1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q=new A.CE(t.pE.a(B.bf.kQ(A.be8(B.f3.dB(A.cE(B.db.hH(0,a)))))),A.D(t.N,t.Rk)) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$$1,r)}, +$S:617} +A.CE.prototype={ +ajL(a){var s,r,q,p=this.b +if(!p.aR(0,a)){s=this.a +r=J.al(s) +if(r.i(s,a)==null)return null +q=r.i(s,a) +if(q==null)q=[] +p.u(0,a,J.mU(J.nT(t.VG.a(q),t.pE),new A.aYS(a),t.pR).eT(0)) +r.P(s,a)}p=p.i(0,a) +p.toString +return p}, +$iawv:1} +A.aYS.prototype={ +$1(a){var s,r=J.al(a),q=r.i(a,"asset") +q.toString +A.cE(q) +s=r.i(a,"dpr") +r=r.i(a,"asset") +r.toString +A.cE(r) +return new A.uu(A.bhN(s),r)}, +$S:618} +A.uu.prototype={} +A.KO.prototype={ +rC(){var s,r,q=this +if(q.a){s=A.D(t.N,t.z) +s.u(0,"uniqueIdentifier",q.b) +s.u(0,"hints",q.c) +s.u(0,"editingValue",q.d.Zs()) +r=q.e +if(r!=null)s.u(0,"hintText",r)}else s=null +return s}} +A.axk.prototype={} +A.Hz.prototype={ +aBV(){var s,r,q=this,p=t.v3,o=new A.aGn(A.D(p,t.bd),A.C(t.SQ),A.b([],t.sA)) +q.aS$!==$&&A.aj() +q.aS$=o +s=$.bjk() +r=A.b([],t.K0) +q.b2$!==$&&A.aj() +q.b2$=new A.a5S(o,s,r,A.C(p)) +p=q.aS$ +p===$&&A.c() +p.GQ().cu(new A.aSt(q),t.P)}, +DZ(){var s=$.l3() +s.a.af(0) +s.b.af(0) +s.c.af(0)}, +tU(a){return this.aSW(a)}, +aSW(a){var s=0,r=A.r(t.H),q,p=this +var $async$tU=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:switch(A.cE(J.bG(t.a.a(a),"type"))){case"memoryPressure":p.DZ() +break}s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$tU,r)}, +att(){var s=A.bn("controller") +s.shb(A.bgP(new A.aSs(s),!1,t.hz)) +return J.bkf(s.bl())}, +aYi(){if(this.i9$==null)$.bF() +return}, +R_(a){return this.azT(a)}, +azT(a){var s=0,r=A.r(t.ob),q,p=this,o,n +var $async$R_=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:a.toString +o=A.bJP(a) +n=p.i9$ +o.toString +B.b.al(p.axR(n,o),p.gaRW()) +q=null +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$R_,r)}, +axR(a,b){var s,r,q,p +if(a===b)return B.ZM +s=A.b([],t.QP) +if(a==null)s.push(b) +else{r=B.b.f7(B.hO,a) +q=B.b.f7(B.hO,b) +if(b===B.f0){for(p=r+1;p<5;++p)s.push(B.hO[p]) +s.push(B.f0)}else if(r>q)for(p=q;p>") +s=2 +return A.x(A.f2(A.ab(new A.W(p,new A.aEX(q),o),!0,o.h("aI.E")),t.H),$async$iz) +case 2:return A.p(null,r)}}) +return A.q($async$iz,r)}} +A.aEV.prototype={ +$1(a){var s=J.bS(a) +return J.iZ(s.gdl(a),s.gfY(a),s.gjY(a))}, +$S:623} +A.aEX.prototype={ +$1(a){return a.cu(new A.aEW(this.a),t.H)}, +$S:624} +A.aEW.prototype={ +$1(a){return A.av5(a,this.a.a)}, +$S:625} +A.FG.prototype={ +W(){return"KeyboardLockMode."+this.b}} +A.kt.prototype={} +A.iL.prototype={} +A.ol.prototype={} +A.FF.prototype={} +A.aGn.prototype={ +GQ(){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k +var $async$GQ=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:l=t.S +s=2 +return A.x(B.a3U.afe("getKeyboardState",l,l),$async$GQ) +case 2:k=b +if(k!=null)for(l=J.bS(k),p=J.az(l.gdv(k)),o=q.a;p.H();){n=p.ga1(p) +m=l.i(k,n) +m.toString +o.u(0,new A.K(n),new A.u(m))}return A.p(null,r)}}) +return A.q($async$GQ,r)}, +awh(a){var s,r,q,p,o,n,m,l,k,j,i,h=this +h.d=!0 +s=!1 +for(n=h.c,m=n.length,l=0;l") +r=A.jc(new A.bk(c,s),s.h("z.E")) +q=A.b([],t.K0) +p=c.i(0,b) +o=$.f6.r2$ +n=a0.a +if(n==="")n=d +m=e.avm(a0) +if(a0 instanceof A.w7)if(p==null){l=new A.iL(b,a,n,o,!1) +r.E(0,b)}else l=A.bnx(n,m,p,b,o) +else if(p==null)l=d +else{l=A.bfw(m,p,b,!1,o) +r.P(0,b)}for(s=e.c.d,k=A.w(s).h("bk<1>"),j=k.h("z.E"),i=r.vA(A.jc(new A.bk(s,k),j)),i=i.gar(i),h=e.e;i.H();){g=i.ga1(i) +if(g.k(0,b))q.push(new A.ol(g,a,d,o,!0)) +else{f=c.i(0,g) +f.toString +h.push(new A.ol(g,f,d,o,!0))}}for(c=A.jc(new A.bk(s,k),j).vA(r),c=c.gar(c);c.H();){k=c.ga1(c) +j=s.i(0,k) +j.toString +h.push(new A.iL(k,j,d,o,!0))}if(l!=null)h.push(l) +B.b.I(h,q)}} +A.akA.prototype={} +A.aID.prototype={ +j(a){return"KeyboardInsertedContent("+this.a+", "+this.b+", "+A.j(this.c)+")"}, +k(a,b){var s,r,q=this +if(b==null)return!1 +if(J.ai(b)!==A.J(q))return!1 +if(b instanceof A.aID)if(b.a===q.a)if(b.b===q.b){s=b.c +r=q.c +r=s==null?r==null:s===r +s=r}else s=!1 +else s=!1 +else s=!1 +return s}, +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aIE.prototype={} +A.u.prototype={ +gL(a){return B.f.gL(this.a)}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.u&&b.a===this.a}} +A.aJC.prototype={ +$1(a){var s=$.bwv().i(0,a) +return s==null?A.cC([a],t.bd):s}, +$S:628} +A.K.prototype={ +gL(a){return B.f.gL(this.a)}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.K&&b.a===this.a}} +A.akC.prototype={} +A.pJ.prototype={ +j(a){return"MethodCall("+this.a+", "+A.j(this.b)+")"}} +A.AP.prototype={ +j(a){var s=this +return"PlatformException("+s.a+", "+A.j(s.b)+", "+A.j(s.c)+", "+A.j(s.d)+")"}, +$ic4:1} +A.OV.prototype={ +j(a){return"MissingPluginException("+A.j(this.a)+")"}, +$ic4:1} +A.aUj.prototype={ +kQ(a){if(a==null)return null +return B.a1.hH(0,A.aWT(a,0,null))}, +e3(a){if(a==null)return null +return A.be8(B.bn.dB(a))}} +A.aI5.prototype={ +e3(a){if(a==null)return null +return B.mH.e3(B.db.vH(a))}, +kQ(a){var s +if(a==null)return a +s=B.mH.kQ(a) +s.toString +return B.db.hH(0,s)}} +A.aI7.prototype={ +ol(a){var s=B.eg.e3(A.b3(["method",a.a,"args",a.b],t.N,t.X)) +s.toString +return s}, +n1(a){var s,r,q,p=null,o=B.eg.kQ(a) +if(!t.f.b(o))throw A.d(A.dj("Expected method call Map, got "+A.j(o),p,p)) +s=J.al(o) +r=s.i(o,"method") +q=s.i(o,"args") +if(typeof r=="string")return new A.pJ(r,q) +throw A.d(A.dj("Invalid method call: "+A.j(o),p,p))}, +UE(a){var s,r,q,p=null,o=B.eg.kQ(a) +if(!t.j.b(o))throw A.d(A.dj("Expected envelope List, got "+A.j(o),p,p)) +s=J.al(o) +if(s.gF(o)===1)return s.i(o,0) +if(s.gF(o)===3)if(typeof s.i(o,0)=="string")r=s.i(o,1)==null||typeof s.i(o,1)=="string" +else r=!1 +else r=!1 +if(r){r=A.cE(s.i(o,0)) +q=A.eE(s.i(o,1)) +throw A.d(A.aNF(r,s.i(o,2),q,p))}if(s.gF(o)===4)if(typeof s.i(o,0)=="string")if(s.i(o,1)==null||typeof s.i(o,1)=="string")r=s.i(o,3)==null||typeof s.i(o,3)=="string" +else r=!1 +else r=!1 +else r=!1 +if(r){r=A.cE(s.i(o,0)) +q=A.eE(s.i(o,1)) +throw A.d(A.aNF(r,s.i(o,2),q,A.eE(s.i(o,3))))}throw A.d(A.dj("Invalid envelope: "+A.j(o),p,p))}, +Dw(a){var s=B.eg.e3([a]) +s.toString +return s}, +vI(a,b,c){var s=B.eg.e3([a,c,b]) +s.toString +return s}, +adE(a,b){return this.vI(a,null,b)}} +A.aTV.prototype={ +e3(a){var s +if(a==null)return null +s=A.aXT(64) +this.j3(0,s,a) +return s.tB()}, +kQ(a){var s,r +if(a==null)return null +s=new A.Qm(a) +r=this.ny(0,s) +if(s.b=J.avH(b.a))throw A.d(B.ch) +return this.rz(b.oW(0),b)}, +rz(a,b){var s,r,q,p,o,n,m,l,k=this +switch(a){case 0:return null +case 1:return!0 +case 2:return!1 +case 3:s=b.b +r=$.hi() +q=J.bBi(b.a,s,r) +b.b+=4 +return q +case 4:return b.Ny(0) +case 6:b.o8(8) +s=b.b +r=$.hi() +q=J.bBh(b.a,s,r) +b.b+=8 +return q +case 5:case 7:p=k.k0(b) +return new A.k8(!1).lh(b.rM(p),0,null,!0) +case 8:return b.rM(k.k0(b)) +case 9:p=k.k0(b) +b.o8(4) +s=b.a +r=J.bS(s) +o=J.bdF(r.gdl(s),r.gfY(s)+b.b,p) +b.b=b.b+4*p +return o +case 10:p=k.k0(b) +b.o8(8) +s=b.a +r=J.bS(s) +o=J.bB1(r.gdl(s),r.gfY(s)+b.b,p) +b.b=b.b+8*p +return o +case 14:p=k.k0(b) +b.o8(4) +s=b.a +r=J.bS(s) +o=J.avD(r.gdl(s),r.gfY(s)+b.b,p) +b.b=b.b+4*p +return o +case 11:p=k.k0(b) +b.o8(8) +s=b.a +r=J.bS(s) +o=J.bk8(r.gdl(s),r.gfY(s)+b.b,p) +b.b=b.b+8*p +return o +case 12:p=k.k0(b) +n=A.bc(p,null,!1,t.X) +for(s=b.a,r=J.bS(s),m=0;m=r.gjY(s))A.X(B.ch) +n[m]=k.rz(r.j5(s,b.b++),b)}return n +case 13:p=k.k0(b) +s=t.X +n=A.D(s,s) +for(s=b.a,r=J.bS(s),m=0;m=r.gjY(s))A.X(B.ch) +l=k.rz(r.j5(s,b.b++),b) +if(b.b>=r.gjY(s))A.X(B.ch) +n.u(0,l,k.rz(r.j5(s,b.b++),b))}return n +default:throw A.d(B.ch)}}, +k8(a,b){var s,r +if(b<254)a.jf(0,b) +else{s=a.d +if(b<=65535){a.jf(0,254) +r=$.hi() +s.setUint16(0,b,B.n===r) +a.BY(a.e,0,2)}else{a.jf(0,255) +r=$.hi() +s.setUint32(0,b,B.n===r) +a.BY(a.e,0,4)}}}, +k0(a){var s,r,q=a.oW(0) +$label0$0:{if(254===q){s=a.b +r=$.hi() +q=J.bkh(a.a,s,r) +a.b+=2 +s=q +break $label0$0}if(255===q){s=a.b +r=$.hi() +q=J.bdM(a.a,s,r) +a.b+=4 +s=q +break $label0$0}s=q +break $label0$0}return s}} +A.aTX.prototype={ +$2(a,b){var s=this.a,r=this.b +s.j3(0,r,a) +s.j3(0,r,b)}, +$S:93} +A.aTZ.prototype={ +ol(a){var s=A.aXT(64) +B.bf.j3(0,s,a.a) +B.bf.j3(0,s,a.b) +return s.tB()}, +n1(a){var s,r,q +a.toString +s=new A.Qm(a) +r=B.bf.ny(0,s) +q=B.bf.ny(0,s) +if(typeof r=="string"&&s.b>=a.byteLength)return new A.pJ(r,q) +else throw A.d(B.wE)}, +Dw(a){var s=A.aXT(64) +s.jf(0,0) +B.bf.j3(0,s,a) +return s.tB()}, +vI(a,b,c){var s=A.aXT(64) +s.jf(0,1) +B.bf.j3(0,s,a) +B.bf.j3(0,s,c) +B.bf.j3(0,s,b) +return s.tB()}, +adE(a,b){return this.vI(a,null,b)}, +UE(a){var s,r,q,p,o,n=J.bS(a) +if(n.gjY(a)===0)throw A.d(B.Vs) +s=new A.Qm(a) +if(s.oW(0)===0)return B.bf.ny(0,s) +r=B.bf.ny(0,s) +q=B.bf.ny(0,s) +p=B.bf.ny(0,s) +o=s.b=n.gjY(a) +else n=!1 +if(n)throw A.d(A.aNF(r,p,A.eE(q),o)) +else throw A.d(B.Vr)}} +A.aKU.prototype={ +aRZ(a,b,c){var s,r,q,p +if(t.PB.b(b)){this.b.P(0,a) +return}s=this.b +r=s.i(0,a) +q=A.bMI(c) +if(q==null)q=this.a +if(J.f(r==null?null:t.U8.a(r.a),q))return +p=q.K2(a) +s.u(0,a,p) +B.a3T.eO("activateSystemCursor",A.b3(["device",p.b,"kind",t.U8.a(p.a).a],t.N,t.z),t.H)}} +A.OX.prototype={} +A.f4.prototype={ +j(a){var s=this.gDc() +return s}} +A.ahI.prototype={ +K2(a){throw A.d(A.d_(null))}, +gDc(){return"defer"}} +A.aqL.prototype={} +A.nt.prototype={ +gDc(){return"SystemMouseCursor("+this.a+")"}, +K2(a){return new A.aqL(this,a)}, +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.nt&&b.a===this.a}, +gL(a){return B.d.gL(this.a)}} +A.alv.prototype={} +A.uy.prototype={ +gCG(){var s=$.f6.bB$ +s===$&&A.c() +return s}, +kf(a,b){return this.akP(0,b,this.$ti.h("1?"))}, +akP(a,b,c){var s=0,r=A.r(c),q,p=this,o,n,m +var $async$kf=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:o=p.b +n=p.gCG().NV(0,p.a,o.e3(b)) +m=o +s=3 +return A.x(t.T8.b(n)?n:A.cO(n,t.CD),$async$kf) +case 3:q=m.kQ(e) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$kf,r)}, +Gi(a){this.gCG().Gj(this.a,new A.axj(this,a))}} +A.axj.prototype={ +$1(a){return this.ajs(a)}, +ajs(a){var s=0,r=A.r(t.CD),q,p=this,o,n +var $async$$1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=p.a.b +n=o +s=3 +return A.x(p.b.$1(o.kQ(a)),$async$$1) +case 3:q=n.e3(c) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$$1,r)}, +$S:192} +A.rL.prototype={ +gCG(){var s=$.f6.bB$ +s===$&&A.c() +return s}, +lm(a,b,c,d){return this.aCg(a,b,c,d,d.h("0?"))}, +aCg(a,b,c,d,e){var s=0,r=A.r(e),q,p=this,o,n,m,l,k +var $async$lm=A.t(function(f,g){if(f===1)return A.o(g,r) +while(true)switch(s){case 0:o=p.b +n=o.ol(new A.pJ(a,b)) +m=p.a +l=p.gCG().NV(0,m,n) +s=3 +return A.x(t.T8.b(l)?l:A.cO(l,t.CD),$async$lm) +case 3:k=g +if(k==null){if(c){q=null +s=1 +break}throw A.d(A.aKK("No implementation found for method "+a+" on channel "+m))}q=d.h("0?").a(o.UE(k)) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$lm,r)}, +eO(a,b,c){return this.lm(a,b,!1,c)}, +Lp(a,b,c,d){return this.aTY(a,b,c,d,c.h("@<0>").ak(d).h("bA<1,2>?"))}, +afe(a,b,c){return this.Lp(a,null,b,c)}, +aTY(a,b,c,d,e){var s=0,r=A.r(e),q,p=this,o +var $async$Lp=A.t(function(f,g){if(f===1)return A.o(g,r) +while(true)switch(s){case 0:s=3 +return A.x(p.eO(a,b,t.f),$async$Lp) +case 3:o=g +q=o==null?null:J.avE(o,c,d) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Lp,r)}, +uy(a){var s=this.gCG() +s.Gj(this.a,new A.aKE(this,a))}, +Hw(a,b){return this.ayL(a,b)}, +ayL(a,b){var s=0,r=A.r(t.CD),q,p=2,o,n=this,m,l,k,j,i,h,g,f,e +var $async$Hw=A.t(function(c,d){if(c===1){o=d +s=p}while(true)switch(s){case 0:h=n.b +g=h.n1(a) +p=4 +e=h +s=7 +return A.x(b.$1(g),$async$Hw) +case 7:k=e.Dw(d) +q=k +s=1 +break +p=2 +s=6 +break +case 4:p=3 +f=o +k=A.b2(f) +if(k instanceof A.AP){m=k +k=m.a +i=m.b +q=h.vI(k,m.c,i) +s=1 +break}else if(k instanceof A.OV){q=null +s=1 +break}else{l=k +h=h.adE("error",J.i1(l)) +q=h +s=1 +break}s=6 +break +case 3:s=2 +break +case 6:case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$Hw,r)}} +A.aKE.prototype={ +$1(a){return this.a.Hw(a,this.b)}, +$S:192} +A.mm.prototype={ +eO(a,b,c){return this.aTZ(a,b,c,c.h("0?"))}, +oA(a,b){return this.eO(a,null,b)}, +aTZ(a,b,c,d){var s=0,r=A.r(d),q,p=this +var $async$eO=A.t(function(e,f){if(e===1)return A.o(f,r) +while(true)switch(s){case 0:q=p.ao3(a,b,!0,c) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$eO,r)}} +A.aDI.prototype={ +aYm(){var s=new A.rL(this.a,B.c1),r=A.bn("controller") +r.b=new A.jp(new A.aDM(this,r,s,null),new A.aDN(this,s,null),t.zr) +return J.bkf(r.bl())}} +A.aDM.prototype={ +$0(){var s=0,r=A.r(t.H),q=1,p,o=this,n,m,l,k,j,i,h +var $async$$0=A.t(function(a,b){if(a===1){p=b +s=q}while(true)switch(s){case 0:i=$.f6.bB$ +i===$&&A.c() +l=o.a +k=l.a +i.Gj(k,new A.aDL(l,o.b)) +q=3 +s=6 +return A.x(o.c.lm("listen",o.d,!1,t.H),$async$$0) +case 6:q=1 +s=5 +break +case 3:q=2 +h=p +n=A.b2(h) +m=A.bC(h) +i=A.cn("while activating platform stream on channel "+k) +A.eR(new A.cI(n,m,"services library",i,null,!1)) +s=5 +break +case 2:s=1 +break +case 5:return A.p(null,r) +case 1:return A.o(p,r)}}) +return A.q($async$$0,r)}, +$S:15} +A.aDL.prototype={ +$1(a){return this.ajt(a)}, +ajt(a){var s=0,r=A.r(t.P),q,p=this,o,n,m +var $async$$1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:if(a==null)J.bdG(p.b.bl()) +else try{J.iD(p.b.bl(),B.c1.UE(a))}catch(l){m=A.b2(l) +if(m instanceof A.AP){o=m +p.b.bl().J7(o)}else throw l}q=null +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$$1,r)}, +$S:630} +A.aDN.prototype={ +$0(){var s=0,r=A.r(t.H),q=1,p,o=this,n,m,l,k,j,i +var $async$$0=A.t(function(a,b){if(a===1){p=b +s=q}while(true)switch(s){case 0:j=$.f6.bB$ +j===$&&A.c() +l=o.a.a +j.Gj(l,null) +q=3 +s=6 +return A.x(o.b.lm("cancel",o.c,!1,t.H),$async$$0) +case 6:q=1 +s=5 +break +case 3:q=2 +i=p +n=A.b2(i) +m=A.bC(i) +j=A.cn("while de-activating platform stream on channel "+l) +A.eR(new A.cI(n,m,"services library",j,null,!1)) +s=5 +break +case 2:s=1 +break +case 5:return A.p(null,r) +case 1:return A.o(p,r)}}) +return A.q($async$$0,r)}, +$S:15} +A.Ss.prototype={ +W(){return"SwipeEdge."+this.b}} +A.a9f.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.a9f&&J.f(s.a,b.a)&&s.b===b.b&&s.c===b.c}, +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"PredictiveBackEvent{touchOffset: "+A.j(this.a)+", progress: "+A.j(this.b)+", swipeEdge: "+this.c.j(0)+"}"}} +A.GO.prototype={ +k(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.GO&&b.a===this.a&&b.b===this.b}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aAI.prototype={ +Mz(){var s=0,r=A.r(t.Xf),q,p=2,o,n=this,m,l,k,j,i,h,g,f,e +var $async$Mz=A.t(function(a,b){if(a===1){o=b +s=p}while(true)switch(s){case 0:g=null +p=4 +l=n.a +l===$&&A.c() +e=t.J1 +s=7 +return A.x(l.oA("ProcessText.queryTextActions",t.z),$async$Mz) +case 7:m=e.a(b) +if(m==null){l=A.b([],t.RW) +q=l +s=1 +break}g=m +p=2 +s=6 +break +case 4:p=3 +f=o +l=A.b([],t.RW) +q=l +s=1 +break +s=6 +break +case 3:s=2 +break +case 6:l=A.b([],t.RW) +for(j=J.az(J.avG(g));j.H();){i=j.ga1(j) +i.toString +A.cE(i) +h=J.bG(g,i) +h.toString +l.push(new A.GO(i,A.cE(h)))}q=l +s=1 +break +case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$Mz,r)}, +Mx(a,b,c){return this.aXS(a,b,c)}, +aXS(a,b,c){var s=0,r=A.r(t.ob),q,p=this,o,n +var $async$Mx=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:o=p.a +o===$&&A.c() +n=A +s=3 +return A.x(o.eO("ProcessText.processTextAction",[a,b,c],t.z),$async$Mx) +case 3:q=n.eE(e) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Mx,r)}} +A.zV.prototype={ +W(){return"KeyboardSide."+this.b}} +A.mf.prototype={ +W(){return"ModifierKey."+this.b}} +A.Qj.prototype={ +gaVF(){var s,r,q=A.D(t.xS,t.Dk) +for(s=0;s<9;++s){r=B.xG[s] +if(this.aUa(r))q.u(0,r,B.fl)}return q}} +A.th.prototype={} +A.aOJ.prototype={ +$0(){var s,r,q,p=this.b,o=J.al(p),n=A.eE(o.i(p,"key")),m=n==null +if(!m){s=n.length +s=s!==0&&s===1}else s=!1 +if(s)this.a.a=n +s=A.eE(o.i(p,"code")) +if(s==null)s="" +m=m?"":n +r=A.lN(o.i(p,"location")) +if(r==null)r=0 +q=A.lN(o.i(p,"metaState")) +if(q==null)q=0 +p=A.lN(o.i(p,"keyCode")) +return new A.a9F(s,m,r,q,p==null?0:p)}, +$S:631} +A.w7.prototype={} +A.GZ.prototype={} +A.aOM.prototype={ +aSD(a){var s,r,q,p,o,n,m,l,k,j,i=this +if(a instanceof A.w7){p=a.c +i.d.u(0,p.goK(),p.gXR())}else if(a instanceof A.GZ)i.d.P(0,a.c.goK()) +i.aJU(a) +for(p=i.a,o=A.ab(p,!0,t.Sp),n=o.length,m=0;m")),e),a0=a1 instanceof A.w7 +if(a0)a.E(0,g.goK()) +for(s=g.a,r=null,q=0;q<9;++q){p=B.xG[q] +o=$.bxq() +n=o.i(0,new A.fm(p,B.dh)) +if(n==null)continue +m=B.CP.i(0,s) +if(n.G(0,m==null?new A.K(98784247808+B.d.gL(s)):m))r=p +if(f.i(0,p)===B.fl){c.I(0,n) +if(n.fk(0,a.gpt(a)))continue}l=f.i(0,p)==null?A.C(e):o.i(0,new A.fm(p,f.i(0,p))) +if(l==null)continue +for(o=A.w(l),m=new A.xb(l,l.r,o.h("xb<1>")),m.c=l.e,o=o.c;m.H();){k=m.d +if(k==null)k=o.a(k) +j=$.bxp().i(0,k) +j.toString +d.u(0,k,j)}}i=b.i(0,B.dW)!=null&&!J.f(b.i(0,B.dW),B.hS) +for(e=$.bjj(),e=A.jb(e,e.r,A.w(e).c);e.H();){a=e.d +h=i&&a.k(0,B.dW) +if(!c.G(0,a)&&!h)b.P(0,a)}b.P(0,B.fD) +b.I(0,d) +if(a0&&r!=null&&!b.aR(0,g.goK())){e=g.goK().k(0,B.eM) +if(e)b.u(0,g.goK(),g.gXR())}}} +A.fm.prototype={ +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.fm&&b.a===this.a&&b.b==this.b}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.anH.prototype={} +A.anG.prototype={} +A.a9F.prototype={ +goK(){var s=this.a,r=B.CP.i(0,s) +return r==null?new A.K(98784247808+B.d.gL(s)):r}, +gXR(){var s,r=this.b,q=B.a0R.i(0,r),p=q==null?null:q[this.c] +if(p!=null)return p +s=B.a1J.i(0,r) +if(s!=null)return s +if(r.length===1)return new A.u(r.toLowerCase().charCodeAt(0)) +return new A.u(B.d.gL(this.a)+98784247808)}, +aUa(a){var s,r=this +$label0$0:{if(B.ft===a){s=(r.d&4)!==0 +break $label0$0}if(B.fu===a){s=(r.d&1)!==0 +break $label0$0}if(B.fv===a){s=(r.d&2)!==0 +break $label0$0}if(B.fw===a){s=(r.d&8)!==0 +break $label0$0}if(B.oS===a){s=(r.d&16)!==0 +break $label0$0}if(B.oR===a){s=(r.d&32)!==0 +break $label0$0}if(B.oT===a){s=(r.d&64)!==0 +break $label0$0}if(B.oU===a||B.D3===a){s=!1 +break $label0$0}s=null}return s}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.a9F&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d&&b.e===s.e}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.R1.prototype={ +gaZ4(){var s=this +if(s.c)return new A.d9(s.a,t.hr) +if(s.b==null){s.b=new A.bH(new A.aM($.aK,t.HC),t.F2) +s.Hv()}return s.b.a}, +Hv(){var s=0,r=A.r(t.H),q,p=this,o +var $async$Hv=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:s=3 +return A.x(B.p_.oA("get",t.pE),$async$Hv) +case 3:o=b +if(p.b==null){s=1 +break}p.a6R(o) +case 1:return A.p(q,r)}}) +return A.q($async$Hv,r)}, +a6R(a){var s,r=a==null +if(!r){s=J.bG(a,"enabled") +s.toString +A.u9(s)}else s=!1 +this.aSF(r?null:t.n6.a(J.bG(a,"data")),s)}, +aSF(a,b){var s,r,q=this,p=q.c&&b +q.d=p +if(p)$.cN.dP$.push(new A.aQv(q)) +s=q.a +if(b){p=q.avS(a) +r=t.N +if(p==null){p=t.X +p=A.D(p,p)}r=new A.fV(p,q,null,"root",A.D(r,t.z4),A.D(r,t.I1)) +p=r}else p=null +q.a=p +q.c=!0 +r=q.b +if(r!=null)r.fC(0,p) +q.b=null +if(q.a!=s){q.D() +if(s!=null)s.t()}}, +RB(a){return this.aDa(a)}, +aDa(a){var s=0,r=A.r(t.H),q=this,p +var $async$RB=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=a.a +switch(p){case"push":q.a6R(t.pE.a(a.b)) +break +default:throw A.d(A.d_(p+" was invoked but isn't implemented by "+A.J(q).j(0)))}return A.p(null,r)}}) +return A.q($async$RB,r)}, +avS(a){var s +if(a==null)return null +s=J.bS(a) +return t.J1.a(B.bf.kQ(J.Zz(s.gdl(a),s.gfY(a),s.gjY(a))))}, +akB(a){var s=this +s.r.E(0,a) +if(!s.f){s.f=!0 +$.cN.dP$.push(new A.aQw(s))}}, +a3S(){var s,r,q,p,o,n=this +if(!n.f)return +n.f=!1 +for(s=n.r,r=A.cT(s,s.r,A.w(s).c),q=r.$ti.c;r.H();){p=r.d;(p==null?q.a(p):p).w=!1}s.af(0) +o=B.bf.e3(n.a.a) +B.p_.eO("put",A.jM(o.buffer,o.byteOffset,o.byteLength),t.H)}, +aRI(){if($.cN.kT$)return +this.a3S()}, +t(){var s=this.a +if(s!=null)s.t() +this.fN()}} +A.aQv.prototype={ +$1(a){this.a.d=!1}, +$S:3} +A.aQw.prototype={ +$1(a){return this.a.a3S()}, +$S:3} +A.fV.prototype={ +gBR(){var s=J.ZA(this.a,"c",new A.aQs()) +s.toString +return t.pE.a(s)}, +gtd(){var s=J.ZA(this.a,"v",new A.aQt()) +s.toString +return t.pE.a(s)}, +aYs(a,b,c){var s=this,r=J.Kt(s.gtd(),b),q=c.h("0?").a(J.up(s.gtd(),b)) +if(J.kd(s.gtd()))J.up(s.a,"v") +if(r)s.xR() +return q}, +aNA(a,b){var s,r,q,p,o=this,n=o.f +if(n.aR(0,a)||!J.Kt(o.gBR(),a)){n=t.N +s=new A.fV(A.D(n,t.X),null,null,a,A.D(n,t.z4),A.D(n,t.I1)) +o.kL(s) +return s}r=t.N +q=o.c +p=J.bG(o.gBR(),a) +p.toString +s=new A.fV(t.pE.a(p),q,o,a,A.D(r,t.z4),A.D(r,t.I1)) +n.u(0,a,s) +return s}, +kL(a){var s=this,r=a.d +if(r!==s){if(r!=null)r.I8(a) +a.d=s +s.a1Q(a) +if(a.c!=s.c)s.a7q(a)}}, +awC(a){this.I8(a) +a.d=null +if(a.c!=null){a.Sf(null) +a.aay(this.ga7p())}}, +xR(){var s,r=this +if(!r.w){r.w=!0 +s=r.c +if(s!=null)s.akB(r)}}, +a7q(a){a.Sf(this.c) +a.aay(this.ga7p())}, +Sf(a){var s=this,r=s.c +if(r==a)return +if(s.w)if(r!=null)r.r.P(0,s) +s.c=a +if(s.w&&a!=null){s.w=!1 +s.xR()}}, +I8(a){var s,r,q,p=this +if(J.f(p.f.P(0,a.e),a)){J.up(p.gBR(),a.e) +s=p.r +r=s.i(0,a.e) +if(r!=null){q=J.cV(r) +p.a44(q.eQ(r)) +if(q.gaA(r))s.P(0,a.e)}if(J.kd(p.gBR()))J.up(p.a,"c") +p.xR() +return}s=p.r +q=s.i(0,a.e) +if(q!=null)J.up(q,a) +q=s.i(0,a.e) +q=q==null?null:J.kd(q) +if(q===!0)s.P(0,a.e)}, +a1Q(a){var s=this +if(s.f.aR(0,a.e)){J.iD(s.r.cU(0,a.e,new A.aQr()),a) +s.xR() +return}s.a44(a) +s.xR()}, +a44(a){this.f.u(0,a.e,a) +J.kc(this.gBR(),a.e,a.a)}, +aaz(a,b){var s=this.f.gbm(0),r=this.r.gbm(0),q=s.WN(0,new A.m0(r,new A.aQu(),A.w(r).h("m0"))) +J.lQ(b?A.ab(q,!1,A.w(q).h("z.E")):q,a)}, +aay(a){return this.aaz(a,!1)}, +aYA(a){var s,r=this +if(a===r.e)return +s=r.d +if(s!=null)s.I8(r) +r.e=a +s=r.d +if(s!=null)s.a1Q(r)}, +t(){var s,r=this +r.aaz(r.gawB(),!0) +r.f.af(0) +r.r.af(0) +s=r.d +if(s!=null)s.I8(r) +r.d=null +r.Sf(null) +r.x=!0}, +j(a){return"RestorationBucket(restorationId: "+this.e+", owner: "+A.j(this.b)+")"}} +A.aQs.prototype={ +$0(){var s=t.X +return A.D(s,s)}, +$S:195} +A.aQt.prototype={ +$0(){var s=t.X +return A.D(s,s)}, +$S:195} +A.aQr.prototype={ +$0(){return A.b([],t.QT)}, +$S:635} +A.aQu.prototype={ +$1(a){return a}, +$S:636} +A.wD.prototype={ +k(a,b){var s,r +if(b==null)return!1 +if(this===b)return!0 +if(b instanceof A.wD){s=b.a +r=this.a +s=s.a===r.a&&s.b===r.b&&A.eu(b.b,this.b)}else s=!1 +return s}, +gL(a){var s=this.a +return A.a6(s.a,s.b,A.bM(this.b),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.S8.prototype={ +k(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.S8&&b.a===this.a&&A.eu(b.b,this.b)}, +gL(a){return A.a6(this.a,A.bM(this.b),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aAL.prototype={ +Kx(a,b){return this.aRi(a,b)}, +aRi(a0,a1){var s=0,r=A.r(t.EZ),q,p=2,o,n=this,m,l,k,j,i,h,g,f,e,d,c,b,a +var $async$Kx=A.t(function(a2,a3){if(a2===1){o=a3 +s=p}while(true)switch(s){case 0:d=null +c=a0.S3("-") +p=4 +m=n.b +m===$&&A.c() +a=t.j +s=7 +return A.x(m.eO("SpellCheck.initiateSpellCheck",A.b([c,a1],t.T),t.z),$async$Kx) +case 7:d=a.a(a3) +p=2 +s=6 +break +case 4:p=3 +b=o +q=null +s=1 +break +s=6 +break +case 3:s=2 +break +case 6:k=A.b([],t.bt) +for(m=J.az(d),j=t.f,i=t.N,h=t.z,g=t.j;m.H();){f=A.bnL(j.a(m.ga1(m)),i,h) +k.push(new A.wD(new A.cZ(A.dS(f.i(0,"startIndex")),A.dS(f.i(0,"endIndex"))),J.nT(g.a(f.i(0,"suggestions")),i)))}m=n.a +if(m!=null){j=m.a +e=A.eu(m.b,k) +if(j===a1&&e)k=A.bDx(n.a.b,k)}n.a=new A.S8(a1,k) +q=k +s=1 +break +case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$Kx,r)}} +A.awp.prototype={} +A.acN.prototype={ +W(){return"SystemSoundType."+this.b}} +A.mE.prototype={ +ka(a){var s +if(a<0)return null +s=this.Al(a).a +return s>=0?s:null}, +kc(a){var s=this.Al(Math.max(0,a)).b +return s>=0?s:null}, +Al(a){var s,r=this.ka(a) +if(r==null)r=-1 +s=this.kc(a) +return new A.cZ(r,s==null?-1:s)}} +A.DN.prototype={ +ka(a){var s +if(a<0)return null +s=this.a +return A.aUi(s,Math.min(a,s.length)).b}, +kc(a){var s,r=this.a +if(a>=r.length)return null +s=A.aUi(r,Math.max(0,a+1)) +return s.b+s.ga1(0).length}, +Al(a){var s,r,q,p=this +if(a<0){s=p.kc(a) +return new A.cZ(-1,s==null?-1:s)}else{s=p.a +if(a>=s.length){s=p.ka(a) +return new A.cZ(s==null?-1:s,-1)}}r=A.aUi(s,a) +s=r.b +if(s!==r.c)s=new A.cZ(s,s+r.ga1(0).length) +else{q=p.kc(a) +s=new A.cZ(s,q==null?-1:q)}return s}} +A.FM.prototype={ +Al(a){return this.a.Ai(new A.c0(Math.max(a,0),B.v))}} +A.PH.prototype={ +ka(a){var s,r,q +if(a<0||this.a.length===0)return null +s=this.a +r=s.length +if(a>=r)return r +if(a===0)return 0 +if(a>1&&s.charCodeAt(a)===10&&s.charCodeAt(a-1)===13)q=a-2 +else q=A.bgX(s.charCodeAt(a))?a-1:a +for(;q>0;){if(A.bgX(s.charCodeAt(q)))return q+1;--q}return Math.max(q,0)}, +kc(a){var s,r=this.a,q=r.length +if(a>=q||q===0)return null +if(a<0)return 0 +for(s=a;!A.bgX(r.charCodeAt(s));){++s +if(s===q)return s}return s=s?null:s}} +A.kQ.prototype={ +gqO(){var s,r=this +if(!r.gds()||r.c===r.d)s=r.e +else s=r.c=n&&o<=p.b)return p +s=p.c +r=p.d +q=s<=r +if(o<=n){if(b)return p.yN(a.b,p.b,o) +n=q?o:s +return p.JR(n,q?r:o)}if(b)return p.yN(a.b,n,o) +n=q?s:o +return p.JR(n,q?o:r)}, +adK(a){if(this.gfQ().k(0,a))return this +return this.aOE(a.b,a.a)}} +A.wH.prototype={} +A.adc.prototype={} +A.adb.prototype={} +A.add.prototype={} +A.Ia.prototype={} +A.ar9.prototype={} +A.a6M.prototype={ +W(){return"MaxLengthEnforcement."+this.b}} +A.wI.prototype={} +A.alL.prototype={} +A.b7p.prototype={} +A.MZ.prototype={ +aRS(a,b){var s,r,q,p,o,n,m,l,k,j,i=this,h=null,g=b.b +g=g.gds()?new A.alL(g.c,g.d):h +s=b.c +s=s.gds()&&s.a!==s.b?new A.alL(s.a,s.b):h +r=new A.b7p(b,new A.d8(""),g,s) +s=b.a +q=J.avC(i.a,s) +for(g=q.gar(q),p=i.b,o=!p,n=h;g.H();n=m){m=g.ga1(g) +l=n==null?h:n.gi7(n) +if(l==null)l=0 +i.S_(p,l,m.gp5(m),r) +i.S_(o,m.gp5(m),m.gi7(m),r)}g=n==null?h:n.gi7(n) +if(g==null)g=0 +i.S_(p,g,s.length,r) +s=r.e=!0 +k=r.c +j=r.d +g=r.b.a +s=(j!=null?j.a===j.b:s)?B.c9:new A.cZ(j.a,j.b) +if(k==null)p=B.lo +else{p=r.a.b +p=A.dJ(p.e,k.a,k.b,p.f)}return new A.eN(g.charCodeAt(0)==0?g:g,p,s)}, +S_(a,b,c,d){var s,r,q,p +if(a)s=b===c?"":this.c +else s=B.d.am(d.a.a,b,c) +d.b.a+=s +if(s.length===c-b)return +r=new A.aE8(b,c,s) +q=d.c +p=q==null +if(!p)q.a=q.a+r.$1(d.a.b.c) +if(!p)q.b=q.b+r.$1(d.a.b.d) +q=d.d +p=q==null +if(!p)q.a=q.a+r.$1(d.a.c.a) +if(!p)q.b=q.b+r.$1(d.a.c.b)}} +A.aE8.prototype={ +$1(a){var s=this,r=s.a,q=a<=r&&a=r.a&&s<=this.a.length}else r=!1 +return r}, +ahV(a,b){var s,r,q,p,o=this +if(!a.gds())return o +s=a.a +r=a.b +q=B.d.j1(o.a,s,r,b) +if(r-s===b.length)return o.aOC(q) +s=new A.aVc(a,b) +r=o.b +p=o.c +return new A.eN(q,A.dJ(B.v,s.$1(r.c),s.$1(r.d),!1),new A.cZ(s.$1(p.a),s.$1(p.b)))}, +Zs(){var s=this.b,r=this.c +return A.b3(["text",this.a,"selectionBase",s.c,"selectionExtent",s.d,"selectionAffinity",s.e.W(),"selectionIsDirectional",s.f,"composingBase",r.a,"composingExtent",r.b],t.N,t.z)}, +j(a){return"TextEditingValue(text: \u2524"+this.a+"\u251c, selection: "+this.b.j(0)+", composing: "+this.c.j(0)+")"}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return b instanceof A.eN&&b.a===s.a&&b.b.k(0,s.b)&&b.c.k(0,s.c)}, +gL(a){var s=this.c +return A.a6(B.d.gL(this.a),this.b.gL(0),A.a6(B.f.gL(s.a),B.f.gL(s.b),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aVc.prototype={ +$1(a){var s=this.a,r=s.a,q=a<=r&&a") +l=p.f +k=A.w(l).h("bk<1>") +j=k.h("e7>") +q=A.ab(new A.e7(new A.bg(new A.bk(l,k),new A.aVG(p,A.ab(new A.W(n,new A.aVH(),m),!0,m.h("aI.E"))),k.h("bg")),new A.aVI(p),j),!0,j.h("z.E")) +s=1 +break $async$outer +case"TextInputClient.scribbleInteractionBegan":p.r=!0 +s=1 +break $async$outer +case"TextInputClient.scribbleInteractionFinished":p.r=!1 +s=1 +break $async$outer}n=p.d +if(n==null){s=1 +break}if(b==="TextInputClient.requestExistingInputState"){m=p.e +m===$&&A.c() +p.Pa(n,m) +p.Is(p.d.r.a.c.a) +s=1 +break}n=t.j +o=n.a(a.b) +if(b===u.l){n=t.a +i=n.a(J.bG(o,1)) +for(m=J.bS(i),l=J.az(m.gdv(i));l.H();)A.bq9(n.a(m.i(i,l.ga1(l)))) +s=1 +break}m=J.al(o) +h=A.dS(m.i(o,0)) +l=p.d +if(h!==l.f){s=1 +break}switch(b){case"TextInputClient.updateEditingState":g=A.bq9(t.a.a(m.i(o,1))) +$.dN().aKU(g,$.bdv()) +break +case u.W:f=A.b([],t.Od) +l=t.a +for(n=J.az(n.a(J.bG(l.a(m.i(o,1)),"deltas")));n.H();)f.push(A.bL2(l.a(n.ga1(n)))) +t.rg.a(p.d.r).b0t(f) +break +case"TextInputClient.performAction":if(A.cE(m.i(o,1))==="TextInputAction.commitContent"){n=t.a.a(m.i(o,2)) +m=J.al(n) +A.cE(m.i(n,"mimeType")) +A.cE(m.i(n,"uri")) +if(m.i(n,"data")!=null)new Uint8Array(A.eG(A.iN(t.JY.a(m.i(n,"data")),!0,t.S))) +p.d.r.a.toString}else p.d.r.aXz(A.bQA(A.cE(m.i(o,1)))) +break +case"TextInputClient.performSelectors":e=J.nT(n.a(m.i(o,1)),t.N) +e.al(e,p.d.r.gaXB()) +break +case"TextInputClient.performPrivateCommand":n=t.a +d=n.a(m.i(o,1)) +m=p.d.r +l=J.al(d) +A.cE(l.i(d,"action")) +if(l.i(d,"data")!=null)n.a(l.i(d,"data")) +m.a.toString +break +case"TextInputClient.updateFloatingCursor":n=l.r +l=A.bQz(A.cE(m.i(o,1))) +m=t.a.a(m.i(o,2)) +if(l===B.jQ){k=J.al(m) +c=new A.i(A.iA(k.i(m,"X")),A.iA(k.i(m,"Y")))}else c=B.h +n.Nc(new A.GX(c,null,l)) +break +case"TextInputClient.onConnectionClosed":n=l.r +if(n.gll()){n.z.toString +n.k3=n.z=$.dN().d=null +n.a.d.my()}break +case"TextInputClient.showAutocorrectionPromptRect":l.r.alu(A.dS(m.i(o,1)),A.dS(m.i(o,2))) +break +case"TextInputClient.showToolbar":l.r.lb() +break +case"TextInputClient.insertTextPlaceholder":l.r.aTJ(new A.Q(A.iA(m.i(o,1)),A.iA(m.i(o,2)))) +break +case"TextInputClient.removeTextPlaceholder":l.r.ahK() +break +default:throw A.d(A.aKK(null))}case 1:return A.p(q,r)}}) +return A.q($async$R3,r)}, +aGW(){if(this.w)return +this.w=!0 +A.iC(new A.aVK(this))}, +aHx(a,b){var s,r,q,p,o,n,m +for(s=this.b,s=A.cT(s,s.r,A.w(s).c),r=t.jl,q=t.H,p=s.$ti.c;s.H();){o=s.d +if(o==null)o=p.a(o) +n=$.dN() +m=n.c +m===$&&A.c() +m.eO("TextInput.setClient",A.b([n.d.f,o.a3j(b)],r),q)}}, +a2Q(){var s,r,q,p,o=this +o.d.toString +for(s=o.b,s=A.cT(s,s.r,A.w(s).c),r=t.H,q=s.$ti.c;s.H();){p=s.d +if(p==null)q.a(p) +p=$.dN().c +p===$&&A.c() +p.oA("TextInput.clearClient",r)}o.d=null +o.aGW()}, +a9O(a){var s,r,q,p,o +for(s=this.b,s=A.cT(s,s.r,A.w(s).c),r=t.H,q=s.$ti.c;s.H();){p=s.d +if(p==null)p=q.a(p) +o=$.dN().c +o===$&&A.c() +o.eO("TextInput.updateConfig",p.a3j(a),r)}}, +Is(a){var s,r,q,p +for(s=this.b,s=A.cT(s,s.r,A.w(s).c),r=t.H,q=s.$ti.c;s.H();){p=s.d +if(p==null)q.a(p) +p=$.dN().c +p===$&&A.c() +p.eO("TextInput.setEditingState",a.Zs(),r)}}, +Sw(){var s,r,q,p +for(s=this.b,s=A.cT(s,s.r,A.w(s).c),r=t.H,q=s.$ti.c;s.H();){p=s.d +if(p==null)q.a(p) +p=$.dN().c +p===$&&A.c() +p.oA("TextInput.show",r)}}, +aBO(){var s,r,q,p +for(s=this.b,s=A.cT(s,s.r,A.w(s).c),r=t.H,q=s.$ti.c;s.H();){p=s.d +if(p==null)q.a(p) +p=$.dN().c +p===$&&A.c() +p.oA("TextInput.hide",r)}}, +aHE(a,b){var s,r,q,p,o,n,m,l,k +for(s=this.b,s=A.cT(s,s.r,A.w(s).c),r=a.a,q=a.b,p=b.a,o=t.N,n=t.z,m=t.H,l=s.$ti.c;s.H();){k=s.d +if(k==null)l.a(k) +k=$.dN().c +k===$&&A.c() +k.eO("TextInput.setEditableSizeAndTransform",A.b3(["width",r,"height",q,"transform",p],o,n),m)}}, +aHy(a){var s,r,q,p,o,n,m,l,k,j +for(s=this.b,s=A.cT(s,s.r,A.w(s).c),r=a.a,q=a.c-r,p=a.b,o=a.d-p,n=t.N,m=t.z,l=t.H,k=s.$ti.c;s.H();){j=s.d +if(j==null)k.a(j) +j=$.dN().c +j===$&&A.c() +j.eO("TextInput.setMarkedTextRect",A.b3(["width",q,"height",o,"x",r,"y",p],n,m),l)}}, +aHw(a){var s,r,q,p,o,n,m,l,k,j +for(s=this.b,s=A.cT(s,s.r,A.w(s).c),r=a.a,q=a.c-r,p=a.b,o=a.d-p,n=t.N,m=t.z,l=t.H,k=s.$ti.c;s.H();){j=s.d +if(j==null)k.a(j) +j=$.dN().c +j===$&&A.c() +j.eO("TextInput.setCaretRect",A.b3(["width",q,"height",o,"x",r,"y",p],n,m),l)}}, +aHJ(a){var s,r,q +for(s=this.b,s=A.cT(s,s.r,A.w(s).c),r=s.$ti.c;s.H();){q=s.d;(q==null?r.a(q):q).al9(a)}}, +Sq(a,b,c,d,e){var s,r,q,p,o,n,m,l,k +for(s=this.b,s=A.cT(s,s.r,A.w(s).c),r=d.a,q=e.a,p=t.N,o=t.z,n=t.H,m=c==null,l=s.$ti.c;s.H();){k=s.d +if(k==null)l.a(k) +k=$.dN().c +k===$&&A.c() +k.eO("TextInput.setStyle",A.b3(["fontFamily",a,"fontSize",b,"fontWeightIndex",m?null:c.a,"textAlignIndex",r,"textDirectionIndex",q],p,o),n)}}, +aGx(){var s,r,q,p +for(s=this.b,s=A.cT(s,s.r,A.w(s).c),r=t.H,q=s.$ti.c;s.H();){p=s.d +if(p==null)q.a(p) +p=$.dN().c +p===$&&A.c() +p.oA("TextInput.requestAutofill",r)}}, +aKU(a,b){var s,r,q,p +if(this.d==null)return +for(s=$.dN().b,s=A.cT(s,s.r,A.w(s).c),r=s.$ti.c,q=t.H;s.H();){p=s.d +if((p==null?r.a(p):p)!==b){p=$.dN().c +p===$&&A.c() +p.eO("TextInput.setEditingState",a.Zs(),q)}}$.dN().d.r.aZX(a)}} +A.aVJ.prototype={ +$0(){var s=null +return A.b([A.pd("call",this.a,!0,B.cC,s,!1,s,s,B.bG,s,!1,!0,!0,B.de,s,t.Pw)],t._)}, +$S:24} +A.aVH.prototype={ +$1(a){return a}, +$S:637} +A.aVG.prototype={ +$1(a){var s,r,q,p=this.b,o=p[0],n=p[1],m=p[2] +p=p[3] +s=this.a.f +r=s.i(0,a) +p=r==null?null:r.aU7(new A.A(o,n,o+m,n+p)) +if(p!==!0)return!1 +p=s.i(0,a) +q=p==null?null:p.goa(0) +if(q==null)q=B.M +return!(q.k(0,B.M)||q.gaT1()||q.a>=1/0||q.b>=1/0||q.c>=1/0||q.d>=1/0)}, +$S:25} +A.aVI.prototype={ +$1(a){var s=this.a.f.i(0,a).goa(0),r=[a],q=s.a,p=s.b +B.b.I(r,[q,p,s.c-q,s.d-p]) +return r}, +$S:638} +A.aVK.prototype={ +$0(){var s=this.a +s.w=!1 +if(s.d==null)s.aBO()}, +$S:0} +A.SO.prototype={} +A.amK.prototype={ +a3j(a){var s,r=a.rC() +if($.dN().a!==$.bdv()){s=B.aak.rC() +s.u(0,"isMultiline",a.b.k(0,B.ll)) +r.u(0,"inputType",s)}return r}, +al9(a){var s,r=$.dN().c +r===$&&A.c() +s=A.a5(a).h("W<1,H>") +r.eO("TextInput.setSelectionRects",A.ab(new A.W(a,new A.b4A(),s),!0,s.h("aI.E")),t.H)}} +A.b4A.prototype={ +$1(a){var s=a.b,r=s.a,q=s.b +return A.b([r,q,s.c-r,s.d-q,a.a,a.c.a],t.a0)}, +$S:639} +A.atI.prototype={} +A.adX.prototype={ +W(){return"UndoDirection."+this.b}} +A.adY.prototype={ +gaKF(){var s=this.a +s===$&&A.c() +return s}, +R4(a){return this.aBz(a)}, +aBz(a){var s=0,r=A.r(t.z),q,p=this,o,n +var $async$R4=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:n=t.j.a(a.b) +if(a.a==="UndoManagerClient.handleUndo"){o=p.b +o.toString +o.aSy(p.aKf(A.cE(J.bG(n,0)))) +s=1 +break}throw A.d(A.aKK(null)) +case 1:return A.p(q,r)}}) +return A.q($async$R4,r)}, +aKf(a){var s +$label0$0:{if("undo"===a){s=B.ahx +break $label0$0}if("redo"===a){s=B.ahy +break $label0$0}s=A.X(A.ze(A.b([A.ra("Unknown undo direction: "+a)],t._)))}return s}} +A.aWV.prototype={} +A.b96.prototype={ +$1(a){this.a.shb(a) +return!1}, +$S:20} +A.c9.prototype={} +A.cm.prototype={ +jM(a){this.b=a}, +ri(a,b){return this.goB()}, +BB(a,b){var s=this +if(A.w(s).h("fq").b(s))return s.rj(0,a,b) +return s.ri(0,a)}, +goB(){return!0}, +yL(a){return!0}, +Zt(a,b){return this.yL(a)?B.ci:B.k0}, +BA(a,b){var s=this +if(A.w(s).h("fq").b(s))return s.hQ(a,b) +return s.hP(a)}, +Tp(a){var s=this.a +s.b=!0 +s.a.push(a) +return null}, +MJ(a){return this.a.P(0,a)}, +h7(a){return new A.W7(this,a,!1,!1,!1,!1,new A.bW(A.b([],t.ot),t.wS),A.w(this).h("W7"))}} +A.fq.prototype={ +rj(a,b,c){return this.amz(0,b)}, +ri(a,b){return this.rj(0,b,null)}, +h7(a){return new A.W8(this,a,!1,!1,!1,!1,new A.bW(A.b([],t.ot),t.wS),A.w(this).h("W8"))}} +A.e1.prototype={ +hP(a){return this.c.$1(a)}} +A.avT.prototype={ +afb(a,b,c){return a.BA(b,c)}, +aTW(a,b,c){if(a.BB(b,c))return new A.bI(!0,a.BA(b,c)) +return B.a5h}} +A.qE.prototype={ +b5(){return new A.TM(A.C(t.od),new A.B(),B.p)}} +A.avW.prototype={ +$1(a){t.L1.a(a.gba()) +return!1}, +$S:70} +A.avZ.prototype={ +$1(a){var s=this,r=A.avV(t.L1.a(a.gba()),s.b,s.d) +if(r!=null){s.c.GK(a,null) +s.a.a=r +return!0}return!1}, +$S:70} +A.avX.prototype={ +$1(a){var s=A.avV(t.L1.a(a.gba()),this.b,this.c) +if(s!=null){this.a.a=s +return!0}return!1}, +$S:70} +A.avY.prototype={ +$1(a){var s=this,r=s.b,q=A.avV(t.L1.a(a.gba()),r,s.d),p=q!=null +if(p&&q.BB(r,s.c))s.a.a=A.bdR(a).afb(q,r,s.c) +return p}, +$S:70} +A.aw_.prototype={ +$1(a){var s=this,r=s.b,q=A.avV(t.L1.a(a.gba()),r,s.d),p=q!=null +if(p&&q.BB(r,s.c))s.a.a=A.bdR(a).afb(q,r,s.c) +return p}, +$S:70} +A.TM.prototype={ +bu(){this.bN() +this.a9B()}, +ayC(a){this.aK(new A.aYA(this))}, +a9B(){var s,r,q=this,p=q.a.d.gbm(0),o=A.jc(p,A.w(p).h("z.E")),n=q.d.vA(o) +p=q.d +p.toString +s=o.vA(p) +for(p=n.gar(n),r=q.ga4W();p.H();)p.ga1(p).MJ(r) +for(p=s.gar(s);p.H();)p.ga1(p).Tp(r) +q.d=o}, +bH(a){this.c7(a) +this.a9B()}, +t(){var s,r,q,p,o=this +o.bG() +for(s=o.d,s=A.cT(s,s.r,A.w(s).c),r=o.ga4W(),q=s.$ti.c;s.H();){p=s.d;(p==null?q.a(p):p).MJ(r)}o.d=null}, +ab(a){var s=this.a +return new A.TL(null,s.d,this.e,s.e,null)}} +A.aYA.prototype={ +$0(){this.a.e=new A.B()}, +$S:0} +A.TL.prototype={ +el(a){var s +if(this.w===a.w)s=!A.av7(a.r,this.r) +else s=!0 +return s}} +A.zh.prototype={ +b5(){return new A.Vg(new A.cK(null,t.re),B.p)}} +A.Vg.prototype={ +bu(){this.bN() +$.cN.dP$.push(new A.b20(this)) +$.b1.bf$.f.a.f.E(0,this.ga55())}, +t(){$.b1.bf$.f.a.f.P(0,this.ga55()) +this.bG()}, +a9Z(a){this.HQ(new A.b1Z(this))}, +azI(a){if(this.c==null)return +this.a9Z(a)}, +atg(a){if(!this.e)this.HQ(new A.b1U(this))}, +ati(a){if(this.e)this.HQ(new A.b1V(this))}, +ate(a){var s,r=this +if(r.f!==a){r.HQ(new A.b1T(r,a)) +s=r.a.Q +if(s!=null)s.$1(r.f)}}, +a6i(a,b){var s,r,q,p,o,n,m=this,l=new A.b1Y(m),k=new A.b1X(m,new A.b1W(m)) +if(a==null){s=m.a +s.toString +r=s}else r=a +q=l.$1(r) +p=k.$1(r) +if(b!=null)b.$0() +s=m.a +s.toString +o=l.$1(s) +s=m.a +s.toString +n=k.$1(s) +if(p!==n)m.a.y.$1(n) +if(q!==o){l=m.a.z +if(l!=null)l.$1(o)}}, +HQ(a){return this.a6i(null,a)}, +aCZ(a){return this.a6i(a,null)}, +bH(a){this.c7(a) +if(this.a.c!==a.c)$.cN.dP$.push(new A.b2_(this,a))}, +gatc(){var s,r=this.c +r.toString +r=A.e8(r,B.h6) +s=r==null?null:r.ch +$label0$0:{if(B.fx===s||s==null){r=this.a.c +break $label0$0}if(B.kA===s){r=!0 +break $label0$0}r=null}return r}, +ab(a){var s,r,q,p=this,o=null,n=p.a,m=n.as +n=n.d +s=p.gatc() +r=p.a +q=A.pK(A.v6(!1,s,r.ax,o,!0,!0,n,!0,o,p.gatd(),o,o,o,o),m,p.r,p.gatf(),p.gath(),o) +n=r.c +if(n)m=r.w.a!==0 +else m=!1 +if(m)q=A.xJ(r.w,q) +if(n){n=r.x +n=n!=null&&n.gcT(n)}else n=!1 +if(n){n=p.a.x +n.toString +q=A.abw(q,o,n)}return q}} +A.b20.prototype={ +$1(a){var s=$.b1.bf$.f.a.b +if(s==null)s=A.CP() +this.a.a9Z(s)}, +$S:3} +A.b1Z.prototype={ +$0(){var s=$.b1.bf$.f.a.b +switch((s==null?A.CP():s).a){case 0:s=!1 +break +case 1:s=!0 +break +default:s=null}this.a.d=s}, +$S:0} +A.b1U.prototype={ +$0(){this.a.e=!0}, +$S:0} +A.b1V.prototype={ +$0(){this.a.e=!1}, +$S:0} +A.b1T.prototype={ +$0(){this.a.f=this.b}, +$S:0} +A.b1Y.prototype={ +$1(a){var s=this.a +return s.e&&a.c&&s.d}, +$S:152} +A.b1W.prototype={ +$1(a){var s,r=this.a.c +r.toString +r=A.e8(r,B.h6) +s=r==null?null:r.ch +$label0$0:{if(B.fx===s||s==null){r=a.c +break $label0$0}if(B.kA===s){r=!0 +break $label0$0}r=null}return r}, +$S:152} +A.b1X.prototype={ +$1(a){var s=this.a +return s.f&&s.d&&this.b.$1(a)}, +$S:152} +A.b2_.prototype={ +$1(a){this.a.aCZ(this.b)}, +$S:3} +A.aeu.prototype={ +hP(a){a.b_V() +return null}} +A.Mn.prototype={ +yL(a){return this.c}, +hP(a){}} +A.uq.prototype={} +A.uC.prototype={} +A.ld.prototype={} +A.a2t.prototype={} +A.tb.prototype={} +A.a9k.prototype={ +rj(a,b,c){var s,r,q,p,o,n=$.b1.bf$.f.c +if(n==null||n.e==null)return!1 +for(s=t.vz,r=0;r<2;++r){q=B.Ye[r] +p=n.e +p.toString +o=A.bdT(p,q,s) +if(o!=null&&o.BB(q,c)){this.e=o +this.f=q +return!0}}return!1}, +ri(a,b){return this.rj(0,b,null)}, +hQ(a,b){var s,r=this.e +r===$&&A.c() +s=this.f +s===$&&A.c() +r.BA(s,b)}, +hP(a){return this.hQ(a,null)}} +A.JC.prototype={ +a5S(a,b,c){var s +a.jM(this.gtx()) +s=a.BA(b,c) +a.jM(null) +return s}, +hQ(a,b){var s=this,r=A.bdS(s.gEw(),A.w(s).c) +return r==null?s.afd(a,s.b,b):s.a5S(r,a,b)}, +hP(a){return this.hQ(a,null)}, +goB(){var s,r,q=this,p=A.bdT(q.gEw(),null,A.w(q).c) +if(p!=null){p.jM(q.gtx()) +s=p.goB() +p.jM(null) +r=s}else r=q.gtx().goB() +return r}, +rj(a,b,c){var s,r=this,q=A.bdS(r.gEw(),A.w(r).c),p=q==null +if(!p)q.jM(r.gtx()) +s=(p?r.gtx():q).BB(b,c) +if(!p)q.jM(null) +return s}, +ri(a,b){return this.rj(0,b,null)}, +yL(a){var s,r=this,q=A.bdS(r.gEw(),A.w(r).c),p=q==null +if(!p)q.jM(r.gtx()) +s=(p?r.gtx():q).yL(a) +if(!p)q.jM(null) +return s}} +A.W7.prototype={ +afd(a,b,c){var s=this.e +if(b==null)return s.hP(a) +else return s.hP(a)}, +gtx(){return this.e}, +gEw(){return this.f}} +A.W8.prototype={ +a5S(a,b,c){var s +c.toString +a.jM(new A.Uo(c,this.e,new A.bW(A.b([],t.ot),t.wS),this.$ti.h("Uo<1>"))) +s=a.BA(b,c) +a.jM(null) +return s}, +afd(a,b,c){var s=this.e +if(b==null)return s.hQ(a,c) +else return s.hQ(a,c)}, +gtx(){return this.e}, +gEw(){return this.f}} +A.Uo.prototype={ +jM(a){this.d.jM(a)}, +ri(a,b){return this.d.rj(0,b,this.c)}, +goB(){return this.d.goB()}, +yL(a){return this.d.yL(a)}, +Tp(a){var s +this.amy(a) +s=this.d.a +s.b=!0 +s.a.push(a)}, +MJ(a){this.amA(a) +this.d.a.P(0,a)}, +hP(a){return this.d.hQ(a,this.c)}} +A.af7.prototype={} +A.af5.prototype={} +A.akn.prototype={} +A.YR.prototype={ +jM(a){this.a0x(a) +this.e.jM(a)}} +A.YS.prototype={ +jM(a){this.a0x(a) +this.e.jM(a)}} +A.KC.prototype={ +b5(){return new A.afl(null,null,B.p)}} +A.afl.prototype={ +ab(a){var s=this.a +return new A.afk(B.a5,s.e,s.f,null,this,B.a4,null,s.c,null)}} +A.afk.prototype={ +bA(a){var s=this +return A.bJ4(s.e,s.y,s.f,s.r,s.z,s.w,A.eP(a),s.x)}, +bI(a,b){var s,r=this +b.sil(r.e) +b.sKr(0,r.r) +b.saZ2(r.w) +b.saPk(0,r.f) +b.sb_f(r.x) +b.scV(A.eP(a)) +s=r.y +if(s!==b.fo){b.fo=s +b.bi() +b.cf()}b.saWg(0,r.z)}} +A.ate.prototype={ +t(){var s=this,r=s.dQ$ +if(r!=null)r.ad(0,s.gmQ()) +s.dQ$=null +s.bG()}, +dd(){this.eD() +this.ee() +this.mR()}} +A.Tw.prototype={ +b5(){return new A.Ym(B.p)}} +A.Ym.prototype={ +gaBX(){$.b1.toString +var s=$.bF() +if(s.gUG()!=="/"){$.b1.toString +s=s.gUG()}else{this.a.toString +$.b1.toString +s=s.gUG()}return s}, +aw_(a){switch(this.d){case null:case void 0:case B.f0:case B.iX:return!0 +case B.d8:case B.iY:case B.iZ:A.bgS(a.a) +return!0}}, +vx(a){this.d=a +this.apR(a)}, +bu(){var s=this +s.bN() +s.aLb() +$.b1.toString +s.w=s.a7K($.bF().c.f,s.a.go) +$.b1.fo$.push(s) +s.d=$.b1.i9$}, +bH(a){this.c7(a) +this.aac(a)}, +t(){$.b1.oN(this) +var s=this.e +if(s!=null)s.t() +this.bG()}, +a2T(){var s=this.e +if(s!=null)s.t() +this.f=this.e=null}, +aac(a){var s,r=this +r.a.toString +if(r.gaas()){r.a2T() +s=r.r==null +if(!s){r.a.toString +a.toString}if(s){s=r.a.c +r.r=new A.zt(r,t.TX)}}else{r.a2T() +r.r=null}}, +aLb(){return this.aac(null)}, +gaas(){var s=this.a +if(s.Q==null){s=s.as +s=s==null?null:s.gcT(s) +if(s!==!0){s=this.a.d +s=s!=null}else s=!0}else s=!0 +return s}, +aDS(a){var s,r=this,q=a.a,p=q==="/"&&r.a.Q!=null?new A.b8i(r):r.a.as.i(0,q) +if(p!=null)return r.a.f.$1$2(a,p,t.z) +s=r.a.d +if(s!=null)return s.$1(a) +return null}, +aEe(a){return this.a.at.$1(a)}, +Ki(){var s=0,r=A.r(t.w),q,p=this,o,n +var $async$Ki=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:p.a.toString +o=p.r +n=o==null?null:o.gap() +if(n==null){q=!1 +s=1 +break}q=n.afU() +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Ki,r)}, +Dj(a){return this.aPU(a)}, +aPU(a){var s=0,r=A.r(t.w),q,p=this,o,n,m,l +var $async$Dj=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p.a.toString +o=p.r +n=o==null?null:o.gap() +if(n==null){q=!1 +s=1 +break}m=a.grJ() +o=m.ghg(m).length===0?"/":m.ghg(m) +l=m.gru() +l=l.gaA(l)?null:m.gru() +o=A.asi(m.gne().length===0?null:m.gne(),null,o,null,l,null).gC5() +o=n.Si(A.nI(o,0,o.length,B.a1,!1),null,t.X) +o.toString +n.q1(o) +q=!0 +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Dj,r)}, +a7K(a,b){this.a.toString +return A.bRj(a,b)}, +ad1(a){var s=this,r=s.a7K(a,s.a.go) +if(!r.k(0,s.w))s.aK(new A.b8k(s,r))}, +ab(a){var s,r,q,p,o,n,m,l,k,j,i=this,h=null,g={} +g.a=null +s=i.a +s.toString +if(i.gaas()){s=i.r +r=i.gaBX() +q=i.a +p=q.ch +p.toString +g.a=A.beV(!0,new A.Pj(r,i.gaDR(),i.gaEd(),p,"nav",B.agl,A.bU_(),!0,B.y,s),"Navigator Scope",h,h,h) +s=q}else{s=i.a +s.toString}g.b=null +o=new A.j1(new A.b8j(g,i),h) +g.b=o +g.b=A.r2(o,h,h,B.cI,!0,s.db,h,h,B.aM) +s=i.a +r=s.cx +s=s.dx +s=A.S(255,s.gm(s)>>>16&255,s.gm(s)>>>8&255,s.gm(s)&255) +g=g.b +q=i.a +q.toString +p=i.w +p.toString +n=A.bMf() +m=A.A1($.byg(),t.B,t.od) +m.u(0,B.tf,new A.Rk(new A.bW(A.b([],t.ot),t.wS)).h7(a)) +l=A.bgo() +k=t.a9 +j=A.b([],k) +B.b.I(j,i.a.fr) +j.push(B.LC) +k=A.b(j.slice(0),k) +return new A.R7(new A.RQ(new A.fS(i.gavZ(),A.abw(new A.a24(A.xJ(m,A.bmG(new A.acZ(new A.RR(new A.Ow(p,k,new A.adD(r,s,g,h),h),h),h),l)),h),"",n),h,t.w3),h),q.p4,h)}} +A.b8i.prototype={ +$1(a){var s=this.a.a.Q +s.toString +return s}, +$S:18} +A.b8k.prototype={ +$0(){this.a.w=this.b}, +$S:0} +A.b8j.prototype={ +$1(a){return this.b.a.CW.$2(a,this.a.a)}, +$S:18} +A.auJ.prototype={} +A.LT.prototype={ +W(){return"ConnectionState."+this.b}} +A.kh.prototype={ +j(a){var s=this +return"AsyncSnapshot("+s.a.j(0)+", "+A.j(s.b)+", "+A.j(s.c)+", "+A.j(s.d)+")"}, +k(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return s.$ti.b(b)&&b.a===s.a&&J.f(b.b,s.b)&&J.f(b.c,s.c)&&b.d==s.d}, +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.F4.prototype={ +b5(){return new A.Vj(B.p,this.$ti.h("Vj<1>"))}} +A.Vj.prototype={ +bu(){var s=this +s.bN() +s.a.toString +s.e=new A.kh(B.vD,null,null,null,s.$ti.h("kh<1>")) +s.a2i()}, +bH(a){var s,r=this +r.c7(a) +if(a.c==r.a.c)return +if(r.d!=null){r.d=null +s=r.e +s===$&&A.c() +r.e=new A.kh(B.vD,s.b,s.c,s.d,s.$ti)}r.a2i()}, +ab(a){var s,r=this.a +r.toString +s=this.e +s===$&&A.c() +return r.d.$2(a,s)}, +t(){this.d=null +this.bG()}, +a2i(){var s,r=this,q=r.a.c +if(q==null)return +s=r.d=new A.B() +q.k7(new A.b28(r,s),new A.b29(r,s),t.H) +q=r.e +q===$&&A.c() +if(q.a!==B.ju)r.e=new A.kh(B.SG,q.b,q.c,q.d,q.$ti)}} +A.b28.prototype={ +$1(a){var s=this.a +if(s.d===this.b)s.aK(new A.b27(s,a))}, +$S(){return this.a.$ti.h("bR(1)")}} +A.b27.prototype={ +$0(){var s=this.a +s.e=new A.kh(B.ju,this.b,null,null,s.$ti.h("kh<1>"))}, +$S:0} +A.b29.prototype={ +$2(a,b){var s=this.a +if(s.d===this.b)s.aK(new A.b26(s,a,b))}, +$S:33} +A.b26.prototype={ +$0(){var s=this.a +s.e=new A.kh(B.ju,null,this.b,this.c,s.$ti.h("kh<1>"))}, +$S:0} +A.KP.prototype={ +b5(){return new A.TS(B.p)}} +A.TS.prototype={ +bu(){this.bN() +this.a9I()}, +bH(a){this.c7(a) +this.a9I()}, +a9I(){this.e=new A.fS(this.gatn(),this.a.c,null,t.Jg)}, +t(){var s,r,q=this.d +if(q!=null)for(q=A.jb(q,q.r,A.w(q).c);q.H();){s=q.d +r=this.d.i(0,s) +r.toString +s.ad(0,r)}this.bG()}, +ato(a){var s,r=this,q=a.a,p=r.d +if(p==null)p=r.d=A.D(t.I_,t.Q) +p.u(0,q,r.avx(q)) +p=r.d.i(0,q) +p.toString +q.an(0,p) +if(!r.f){r.f=!0 +s=r.a4r() +if(s!=null)r.aa5(s) +else $.cN.dP$.push(new A.aYX(r))}return!1}, +a4r(){var s={},r=this.c +r.toString +s.a=null +r.cc(new A.aZ1(s)) +return t.xO.a(s.a)}, +aa5(a){var s,r +this.c.toString +s=this.f +r=this.e +r===$&&A.c() +a.a2f(t.Fw.a(A.bGl(r,s)))}, +avx(a){var s=A.bn("callback"),r=new A.aZ0(this,a,s) +s.shb(r) +return r}, +ab(a){var s=this.f,r=this.e +r===$&&A.c() +return new A.O9(s,r,null)}} +A.aYX.prototype={ +$1(a){var s,r=this.a +if(r.c==null)return +s=r.a4r() +s.toString +r.aa5(s)}, +$S:3} +A.aZ1.prototype={ +$1(a){this.a.a=a}, +$S:16} +A.aZ0.prototype={ +$0(){var s=this.a,r=this.b +s.d.P(0,r) +r.ad(0,this.c.bl()) +if(s.d.a===0)if($.cN.fF$.a<3)s.aK(new A.aYZ(s)) +else{s.f=!1 +A.iC(new A.aZ_(s))}}, +$S:0} +A.aYZ.prototype={ +$0(){this.a.f=!1}, +$S:0} +A.aZ_.prototype={ +$0(){var s=this.a +if(s.c!=null&&s.d.a===0)s.aK(new A.aYY(s))}, +$S:0} +A.aYY.prototype={ +$0(){}, +$S:0} +A.FE.prototype={} +A.Oa.prototype={ +t(){this.D() +this.fN()}} +A.uv.prototype={ +xG(){var s=new A.Oa($.aa()) +this.ku$=s +this.c.hI(new A.FE(s))}, +ul(){var s,r=this +if(r.gwD()){if(r.ku$==null)r.xG()}else{s=r.ku$ +if(s!=null){s.D() +s.fN() +r.ku$=null}}}, +ab(a){if(this.gwD()&&this.ku$==null)this.xG() +return B.ajN}} +A.am8.prototype={ +ab(a){throw A.d(A.N9("Widgets that mix AutomaticKeepAliveClientMixin into their State must call super.build() but must ignore the return value of the superclass."))}} +A.as2.prototype={ +a00(a,b){}, +u1(a){A.brL(this,new A.b81(this,a))}} +A.b81.prototype={ +$1(a){var s=a.y +if(s!=null&&s.G(0,this.a))a.cR()}, +$S:16} +A.b80.prototype={ +$1(a){A.brL(a,this.a)}, +$S:16} +A.as3.prototype={ +cJ(a){return new A.as2(A.jF(null,null,null,t.U,t.X),this,B.al)}} +A.n4.prototype={ +el(a){return this.w!==a.w}} +A.Pu.prototype={ +bA(a){var s=this.e +s=new A.aa8(B.c.ai(A.U(s,0,1)*255),s,!1,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.sh5(0,this.e) +b.sJi(!1)}} +A.a_o.prototype={ +bA(a){var s=new A.a9T(this.e,B.bF,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.sKT(0,this.e) +b.sde(B.bF)}} +A.uO.prototype={ +bA(a){var s=new A.Qz(this.e,this.f,this.r,!1,!1,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.swm(this.e) +b.saei(this.f) +b.saXM(this.r) +b.dD=b.ce=!1}, +Dl(a){a.swm(null) +a.saei(null)}} +A.uH.prototype={ +bA(a){var s=new A.a9X(this.e,this.f,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.syG(this.e) +b.sod(this.f)}, +Dl(a){a.syG(null)}} +A.a0Y.prototype={ +bA(a){var s=new A.a9W(this.e,A.eP(a),null,this.r,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.sTQ(0,this.e) +b.sod(this.r) +b.syG(null) +b.scV(A.eP(a))}} +A.DY.prototype={ +bA(a){var s=new A.a9V(this.e,this.f,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.syG(this.e) +b.sod(this.f)}, +Dl(a){a.syG(null)}} +A.ayZ.prototype={ +$1(a){return A.a0W(this.c,this.b,new A.wr(this.a,A.eP(a),null))}, +$S:649} +A.a8H.prototype={ +bA(a){var s=this,r=new A.aa9(s.e,s.r,s.w,s.y,s.x,null,s.f,null,new A.bs(),A.aX(t.v)) +r.by() +r.sbt(null) +return r}, +bI(a,b){var s=this +b.scw(0,s.e) +b.sod(s.f) +b.sTQ(0,s.r) +b.sh1(0,s.w) +b.sA(0,s.x) +b.sdG(0,s.y)}} +A.a8I.prototype={ +bA(a){var s=this,r=new A.aaa(s.r,s.x,s.w,s.e,s.f,null,new A.bs(),A.aX(t.v)) +r.by() +r.sbt(null) +return r}, +bI(a,b){var s=this +b.syG(s.e) +b.sod(s.f) +b.sh1(0,s.r) +b.sA(0,s.w) +b.sdG(0,s.x)}} +A.In.prototype={ +bA(a){var s=this,r=A.eP(a),q=new A.aaj(s.w,null,new A.bs(),A.aX(t.v)) +q.by() +q.sbt(null) +q.sd3(0,s.e) +q.sil(s.r) +q.scV(r) +q.sor(s.x) +q.sagx(0,null) +return q}, +bI(a,b){var s=this +b.sd3(0,s.e) +b.sagx(0,null) +b.sil(s.r) +b.scV(A.eP(a)) +b.ce=s.w +b.sor(s.x)}} +A.yv.prototype={ +bA(a){var s=new A.aa5(this.e,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.sw9(this.e)}} +A.E8.prototype={ +bA(a){var s=new A.aa0(this.e,this.f,this.x,B.dx,B.dx,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.sw9(this.e) +b.salB(this.f) +b.sl0(0,this.x) +b.saUq(B.dx) +b.saRO(B.dx)}} +A.a3A.prototype={ +bA(a){var s=new A.QC(B.mC,B.a5,A.eP(a),B.y,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.stR(B.mC) +b.sil(B.a5) +b.scV(A.eP(a)) +if(B.y!==b.eB){b.eB=B.y +b.bi() +b.cf()}}} +A.a41.prototype={ +bA(a){var s=new A.aa1(this.e,this.f,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.saZK(this.e) +b.aE=this.f}} +A.Hh.prototype={ +bA(a){var s=new A.QQ(this.e,A.aX(t.bq),null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.saY0(this.e)}} +A.cu.prototype={ +bA(a){var s=new A.QM(this.e,A.eP(a),null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.seP(0,this.e) +b.scV(A.eP(a))}} +A.ke.prototype={ +bA(a){var s=new A.QO(this.f,this.r,this.e,A.eP(a),null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.sil(this.e) +b.sb_j(this.f) +b.saT6(this.r) +b.scV(A.eP(a))}} +A.iF.prototype={} +A.o3.prototype={ +bA(a){var s=new A.QA(this.e,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.sUK(this.e)}} +A.Ok.prototype={ +vi(a){var s,r,q=a.b +q.toString +t.Wz.a(q) +s=this.f +if(q.e!==s){q.e=s +r=a.gbs(a) +if(r instanceof A.L)r.aB()}}} +A.yH.prototype={ +bA(a){var s=new A.Qy(this.e,0,null,null,new A.bs(),A.aX(t.v)) +s.by() +s.I(0,null) +return s}, +bI(a,b){b.sUK(this.e)}} +A.iR.prototype={ +bA(a){return A.bp7(A.jx(this.f,this.e))}, +bI(a,b){b.sab3(A.jx(this.f,this.e))}, +fu(){var s,r=this,q=r.e +if(q===1/0&&r.f===1/0)s="SizedBox.expand" +else s=q===0&&r.f===0?"SizedBox.shrink":"SizedBox" +q=r.a +return q==null?s:s+"-"+q.j(0)}} +A.lW.prototype={ +bA(a){return A.bp7(this.e)}, +bI(a,b){b.sab3(this.e)}} +A.a6c.prototype={ +bA(a){var s=new A.aa6(this.e,this.f,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.saV0(0,this.e) +b.saV_(0,this.f)}} +A.Gp.prototype={ +bA(a){var s=new A.QL(this.e,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.sLR(this.e)}, +cJ(a){return new A.amk(this,B.al)}} +A.amk.prototype={} +A.a5v.prototype={ +bA(a){var s=null,r=new A.QI(s,s,s,new A.bs(),A.aX(t.v)) +r.by() +r.sbt(s) +return r}, +bI(a,b){b.samo(null) +b.samm(null)}} +A.a5u.prototype={ +bA(a){var s=new A.QH(null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}} +A.abR.prototype={ +bA(a){var s=a.bh(t.I) +s.toString +s=new A.aah(this.e,s.w,null,A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){var s +b.seP(0,this.e) +s=a.bh(t.I) +s.toString +b.scV(s.w)}} +A.Sg.prototype={ +bA(a){var s=A.eP(a) +return A.bJc(this.e,null,this.w,this.r,s)}, +bI(a,b){var s +b.sil(this.e) +s=A.eP(a) +b.scV(s) +b.stR(this.r) +b.sod(this.w)}} +A.a5g.prototype={ +ab(a){var s,r,q=this.w,p=q.length,o=J.el(p,t.l7) +for(s=this.r,r=0;r0&&n.b>0){n=a.gcP(a) +s=o.gC(0) +r=b.a +q=b.b +p=$.G().B() +p.sA(0,o.es) +n.b7(new A.A(r,q,r+s.a,q+s.b),p)}n=o.a0$ +if(n!=null)a.fb(n,b)}} +A.b8m.prototype={ +$1(a){var s=a==null?t.K.a(a):a +return this.a.tU(s)}, +$S:166} +A.b8n.prototype={ +$1(a){var s=a==null?t.K.a(a):a +return this.a.QR(s)}, +$S:166} +A.fY.prototype={ +Ki(){return A.e5(!1,t.w)}, +Dj(a){var s=null,r=a.grJ(),q=r.ghg(r).length===0?"/":r.ghg(r),p=r.gru() +p=p.gaA(p)?s:r.gru() +q=A.asi(r.gne().length===0?s:r.gne(),s,q,s,p,s).gC5() +A.nI(q,0,q.length,B.a1,!1) +return A.e5(!1,t.w)}, +UR(){}, +ad3(){}, +ad2(){}, +ad1(a){}, +vx(a){}, +UZ(){var s=0,r=A.r(t.s1),q +var $async$UZ=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:q=B.tW +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$UZ,r)}} +A.Tx.prototype={ +oN(a){if(a===this.pB$)this.pB$=null +return B.b.P(this.fo$,a)}, +L2(){var s=0,r=A.r(t.s1),q,p=this,o,n,m,l +var $async$L2=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:o=A.ab(p.fo$,!0,t.X5),n=o.length,m=!1,l=0 +case 3:if(!(l=s.b&&s.c>=s.d) +else s=!0}else s=!1 +if(s)m=new A.a6c(0,0,new A.lW(B.ul,n,n),n) +else{s=o.d +if(s!=null)m=new A.ke(s,n,n,m,n)}r=o.gaEp() +if(r!=null)m=new A.cu(r,m,n) +s=o.f +if(s!=null)m=new A.uL(s,m,n) +s=o.as +if(s!==B.y){q=A.eP(a) +p=o.r +p.toString +m=A.a0W(m,s,new A.ahC(q==null?B.r:q,p,n))}s=o.r +if(s!=null)m=A.Eq(m,s,B.dG) +s=o.x +if(s!=null)m=new A.lW(s,m,n) +s=o.y +if(s!=null)m=new A.cu(s,m,n) +m.toString +return m}} +A.ahC.prototype={ +FW(a){return this.c.Nt(new A.A(0,0,0+a.a,0+a.b),this.b)}, +Gv(a){return!a.c.k(0,this.c)||a.b!==this.b}} +A.n1.prototype={ +W(){return"ContextMenuButtonType."+this.b}} +A.fz.prototype={ +k(a,b){var s=this +if(b==null)return!1 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.fz&&b.c==s.c&&J.f(b.a,s.a)&&b.b===s.b}, +gL(a){return A.a6(this.c,this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"ContextMenuButtonItem "+this.b.j(0)+", "+A.j(this.c)}} +A.a1y.prototype={ +alr(a,b,c){var s,r +A.bln() +s=A.aJK(b,t.N1) +s.toString +r=A.bog(b) +if(r==null)r=null +else{r=r.c +r.toString}r=A.vP(new A.aA9(A.a5k(b,r),c),!1,!1) +$.yB=r +s.Lj(0,r) +$.r0=this}, +hW(a){if($.r0!==this)return +A.bln()}} +A.aA9.prototype={ +$1(a){return new A.tS(this.a.a,this.b.$1(a),null)}, +$S:18} +A.uQ.prototype={ +wE(a,b,c){return A.aAJ(c,this.w,null,this.y,this.x)}, +el(a){return!J.f(this.w,a.w)||!J.f(this.x,a.x)||!J.f(this.y,a.y)}} +A.aAK.prototype={ +$1(a){var s=a.bh(t.Uf) +if(s==null)s=B.fc +return A.aAJ(this.e,s.w,this.a,this.d,s.x)}, +$S:651} +A.am9.prototype={ +ab(a){throw A.d(A.N9("A DefaultSelectionStyle constructed with DefaultSelectionStyle.fallback cannot be incorporated into the widget tree, it is meant only to provide a fallback value returned by DefaultSelectionStyle.of() when no enclosing default selection style is present in a BuildContext."))}} +A.a24.prototype={ +ay5(){return $.bvC()}, +ab(a){var s=A.abw(this.c,"",this.ay5()) +return A.abw(s,"",A.bDy())}} +A.a2a.prototype={ +Ad(a){return new A.bb(0,a.b,0,a.d)}, +Aj(a,b){var s,r=this.b,q=r.a,p=q+b.a-a.a +r=r.b +s=r+b.b-a.b +if(p>0)q-=p +return new A.i(q,s>0?r-s:r)}, +uC(a){return!this.b.k(0,a.b)}} +A.o5.prototype={ +W(){return"DismissDirection."+this.b}} +A.Ml.prototype={ +b5(){var s=null +return new A.UI(new A.cK(s,t.re),s,s,s,B.p)}} +A.Vb.prototype={ +W(){return"_FlingGestureKind."+this.b}} +A.UI.prototype={ +bu(){var s,r,q=this +q.arK() +q.a.toString +s=A.cW(null,B.ab,null,null,q) +s.cH() +r=s.eg$ +r.b=!0 +r.a.push(q.gazb()) +s.cH() +r=s.e8$ +r.b=!0 +r.a.push(q.gazd()) +q.d=s +q.T1()}, +gwD(){var s=this.d +if(s==null)s=null +else{s=s.r +s=s!=null&&s.a!=null}if(s!==!0){s=this.f +if(s==null)s=null +else{s=s.r +s=s!=null&&s.a!=null}s=s===!0}else s=!0 +return s}, +t(){this.d.t() +var s=this.f +if(s!=null)s.t() +this.arJ()}, +gmN(){var s=this.a.x +return s===B.TG||s===B.vS||s===B.ny}, +uV(a){var s,r,q,p +if(a===0)return B.vU +if(this.gmN()){s=this.c.bh(t.I) +s.toString +r=s.w +$label0$0:{q=B.ad===r +if(q&&a<0){s=B.ny +break $label0$0}p=B.r===r +if(p&&a>0){s=B.ny +break $label0$0}if(!q)s=p +else s=!0 +if(s){s=B.vS +break $label0$0}s=null}return s}return a>0?B.vT:B.TH}, +ga6G(){var s=this.c.gC(0) +s.toString +return this.gmN()?s.a:s.b}, +awe(a){var s,r,q=this +if(q.x)return +q.y=!0 +s=q.d +r=s.r +if(r!=null&&r.a!=null){s=s.x +s===$&&A.c() +q.w=s*q.ga6G()*J.eY(q.w) +q.d.dM(0)}else{q.w=0 +s.sm(0,0)}q.aK(new A.b1_(q))}, +awf(a){var s,r,q,p=this +if(!p.y){s=p.d.r +s=s!=null&&s.a!=null}else s=!0 +if(s){s=p.d.r +s=s!=null&&s.a!=null}else s=!0 +if(s)return +s=a.c +s.toString +r=p.w +switch(p.a.x.a){case 1:case 0:p.w=r+s +break +case 4:s=r+s +if(s<0)p.w=s +break +case 5:s=r+s +if(s>0)p.w=s +break +case 2:q=p.c.bh(t.I) +q.toString +switch(q.w.a){case 0:s=p.w+s +if(s>0)p.w=s +break +case 1:s=p.w+s +if(s<0)p.w=s +break}break +case 3:q=p.c.bh(t.I) +q.toString +switch(q.w.a){case 0:s=p.w+s +if(s<0)p.w=s +break +case 1:s=p.w+s +if(s>0)p.w=s +break}break +case 6:p.w=0 +break}if(J.eY(r)!==J.eY(p.w))p.aK(new A.b10(p)) +s=p.d +q=s.r +if(!(q!=null&&q.a!=null))s.sm(0,Math.abs(p.w)/p.ga6G())}, +aze(){this.a.toString}, +T1(){var s,r,q=this,p=J.eY(q.w),o=q.d +o.toString +s=q.gmN() +r=q.a +if(s){r.toString +s=new A.i(p,0)}else{r.toString +s=new A.i(0,p)}r=t.Ni +q.e=new A.bz(t.ve.a(o),new A.br(B.h,s,r),r.h("bz"))}, +aw3(a){var s,r,q,p,o=this +if(o.w===0)return B.tz +s=a.a +r=s.a +q=s.b +if(o.gmN()){s=Math.abs(r) +if(s-Math.abs(q)<400||s<700)return B.tz +p=o.uV(r)}else{s=Math.abs(q) +if(s-Math.abs(r)<400||s<700)return B.tz +p=o.uV(q)}if(p===o.uV(o.w))return B.aiR +return B.aiS}, +awd(a){var s,r,q,p=this +if(!p.y){s=p.d.r +s=s!=null&&s.a!=null}else s=!0 +if(s){s=p.d.r +s=s!=null&&s.a!=null}else s=!0 +if(s)return +p.y=!1 +if(p.d.gcz(0)===B.af){p.Bx() +return}s=a.a +r=s.a +q=p.gmN()?r.a:r.b +switch(p.aw3(s).a){case 1:p.a.toString +B.oJ.i(0,p.uV(p.w)) +p.w=J.eY(q) +p.d.ae4(Math.abs(q)*0.0033333333333333335) +break +case 2:p.w=J.eY(q) +p.d.ae4(-Math.abs(q)*0.0033333333333333335) +break +case 0:if(p.d.gcz(0)!==B.Y){s=p.d.x +s===$&&A.c() +p.a.toString +B.oJ.i(0,p.uV(p.w)) +r=p.d +if(s>0.4)r.d5(0) +else r.ex(0)}break}}, +Hx(a){return this.azc(a)}, +azc(a){var s=0,r=A.r(t.H),q=this +var $async$Hx=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=a===B.af&&!q.y?2:3 +break +case 2:s=4 +return A.x(q.Bx(),$async$Hx) +case 4:case 3:if(q.c!=null)q.ul() +return A.p(null,r)}}) +return A.q($async$Hx,r)}, +Bx(){var s=0,r=A.r(t.H),q=this,p +var $async$Bx=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:q.a.toString +B.oJ.i(0,q.uV(q.w)) +s=2 +return A.x(q.PL(),$async$Bx) +case 2:p=b +if(q.c!=null)if(p)q.aJP() +else q.d.ex(0) +return A.p(null,r)}}) +return A.q($async$Bx,r)}, +PL(){var s=0,r=A.r(t.w),q,p=this +var $async$PL=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:p.a.toString +q=!0 +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$PL,r)}, +aJP(){var s,r=this +r.a.toString +s=r.uV(r.w) +r.a.w.$1(s)}, +ab(a){var s,r,q,p,o,n,m,l=this,k=null +l.GG(a) +s=l.a +s.toString +r=l.r +if(r!=null){s=l.gmN()?B.b1:B.b0 +q=l.z +p=q.a +return new A.abF(s,A.fF(k,q.b,p),r,k)}r=l.e +r===$&&A.c() +o=A.bgJ(new A.vw(s.c,l.as),r,k,!0) +if(s.x===B.vU)return o +s=l.gmN()?l.ga3L():k +r=l.gmN()?l.ga3M():k +q=l.gmN()?l.ga3K():k +p=l.gmN()?k:l.ga3L() +n=l.gmN()?k:l.ga3M() +m=l.gmN()?k:l.ga3K() +return A.iH(l.a.ax,o,B.ai,!1,k,k,k,k,q,s,r,k,k,k,k,k,k,k,k,k,k,k,k,m,p,n)}} +A.b1_.prototype={ +$0(){this.a.T1()}, +$S:0} +A.b10.prototype={ +$0(){this.a.T1()}, +$S:0} +A.YG.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.YH.prototype={ +bu(){this.bN() +if(this.gwD())this.xG()}, +ht(){var s=this.ku$ +if(s!=null){s.D() +s.fN() +this.ku$=null}this.rX()}} +A.a2x.prototype={ +ab(a){var s=A.cj(a,null,t.l).w,r=s.a,q=r.a,p=r.b,o=A.bDO(a),n=A.bDM(o,r),m=A.bDN(A.bDQ(new A.A(0,0,0+q,0+p),A.bDP(s)),n) +return new A.cu(new A.aS(m.gae(m),m.gaj(m),q-m.gaH(m),p-m.gaQ(m)),A.Ak(this.d,s.aYx(m)),null)}} +A.aBu.prototype={ +$1(a){var s=a.goa(a).giF().An(0,0) +if(!s)a.gx6(a) +return s}, +$S:202} +A.aBv.prototype={ +$1(a){return a.goa(a)}, +$S:654} +A.a2y.prototype={ +gcQ(a){var s=this.a +if(s==null)s=null +else{s=s.c +s.toString}return s}} +A.EE.prototype={ +b5(){return new A.UV(A.GQ(null),A.GQ(null),B.p)}, +aRU(a,b,c){return this.d.$3(a,b,c)}, +aZ1(a,b,c){return this.e.$3(a,b,c)}} +A.UV.prototype={ +bu(){var s,r=this +r.bN() +s=r.a.c +r.d=s.gcz(s) +s=r.a.c +s.cH() +s=s.eg$ +s.b=!0 +s.a.push(r.gP7()) +r.a9C()}, +a2b(a){var s,r=this,q=r.d +q===$&&A.c() +s=r.aul(a,q) +r.d=s +if(q!==s)r.a9C()}, +bH(a){var s,r,q=this +q.c7(a) +s=a.c +if(s!==q.a.c){r=q.gP7() +s.ft(r) +s=q.a.c +s.cH() +s=s.eg$ +s.b=!0 +s.a.push(r) +r=q.a.c +q.a2b(r.gcz(r))}}, +aul(a,b){switch(a.a){case 0:case 3:return a +case 1:switch(b.a){case 0:case 3:case 1:return a +case 2:return b}break +case 2:switch(b.a){case 0:case 3:case 2:return a +case 1:return b}break}}, +a9C(){var s=this,r=s.d +r===$&&A.c() +switch(r.a){case 0:case 1:s.e.sbs(0,s.a.c) +s.f.sbs(0,B.eh) +break +case 2:case 3:s.e.sbs(0,B.he) +s.f.sbs(0,new A.oy(s.a.c,new A.bW(A.b([],t.x8),t.jc),0)) +break}}, +t(){this.a.c.ft(this.gP7()) +this.bG()}, +ab(a){var s=this.a +return s.aRU(a,this.e,s.aZ1(a,this.f,s.f))}} +A.agO.prototype={ +bA(a){var s=new A.ao8(this.e,this.f,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){var s +this.a1i(a,b) +s=this.f +b.bj=s +if(!s){s=b.aE +if(s!=null)s.$0() +b.aE=null}else if(b.aE==null)b.bi()}} +A.ao8.prototype={ +aO(a,b){var s=this +if(s.bj)if(s.aE==null)s.aE=a.a.aLX(s.V) +s.lS(a,b)}} +A.wG.prototype={ +sd7(a,b){this.B1(0,this.a.D1(B.c9,B.lo,b))}, +abz(a,b,c){var s,r,q,p,o=null +if(!this.a.gafi()||!c)return A.cS(o,o,o,b,this.a.a) +s=b.bT(B.H5) +r=this.a +q=r.c +r=r.a +p=q.a +q=q.b +return A.cS(A.b([A.cS(o,o,o,o,B.d.am(r,0,p)),A.cS(o,o,o,s,B.d.am(r,p,q)),A.cS(o,o,o,o,B.d.c5(r,q))],t.Ne),o,o,b,o)}, +sAs(a){var s,r +if(!this.a5X(a))throw A.d(A.N9("invalid text selection: "+a.j(0))) +s=this.a +r=s.c +this.B1(0,s.aOI(a.a>=r.a&&a.b<=r.b?r:B.c9,a))}, +a5X(a){var s=this.a.a.length +return a.a<=s&&a.b<=s}} +A.Tb.prototype={} +A.lI.prototype={} +A.b0Z.prototype={ +jS(a,b){return 0}, +rh(a){return a>=this.b}, +iB(a,b){var s,r,q,p=this.c,o=this.d +if(p[o].a>b){s=o +o=0}else s=11 +for(r=s-1;o=n)return r.i(s,o) +else if(a<=n)q=o-1 +else p=o+1}return null}, +aNa(){var s,r=this,q=null,p=r.a.z +if(p===B.Hp)return q +s=A.b([],t.ZD) +if(p.b&&r.gK6())s.push(new A.fz(new A.aCK(r),B.nh,q)) +if(p.a&&r.gJN())s.push(new A.fz(new A.aCL(r),B.ni,q)) +if(p.c&&r.gzL())s.push(new A.fz(new A.aCM(r),B.nj,q)) +if(p.d&&r.ga_S())s.push(new A.fz(new A.aCN(r),B.nk,q)) +return s}, +ay9(){var s,r,q,p,o,n,m,l=this,k=l.a.c.a.b,j=l.gaD().aN.e.aiv(),i=l.a.c.a.a +if(j!==i||!k.gds()||k.a===k.b){s=l.gaD().aN.eo() +s=s.gb9(s) +r=l.gaD().aN.eo() +return new A.ajL(s,r.gb9(r))}s=k.a +r=k.b +q=B.d.am(i,s,r) +p=q.length===0 +o=(p?B.cs:new A.hz(q)).ga9(0) +n=l.gaD().Ak(new A.cZ(s,s+o.length)) +s=(p?B.cs:new A.hz(q)).ga_(0) +m=l.gaD().Ak(new A.cZ(r-s.length,r)) +s=n==null?null:n.d-n.b +if(s==null){s=l.gaD().aN.eo() +s=s.gb9(s)}r=m==null?null:m.d-m.b +if(r==null){r=l.gaD().aN.eo() +r=r.gb9(r)}return new A.ajL(s,r)}, +gaOh(){var s,r,q,p,o=this +if(o.gaD().hJ!=null){s=o.gaD().hJ +s.toString +return new A.SX(s,null)}r=o.ay9() +q=o.a.c.a.b +p=o.gaD().Nv(q) +return A.bLb(r.b,o.gaD(),p,r.a)}, +gaOi(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=null,e=g.aNa() +if(e==null){e=g.x.ay +s=g.gJN()?new A.aCO(g):f +r=g.gK6()?new A.aCP(g):f +q=g.gzL()?new A.aCQ(g):f +p=g.ga_S()?new A.aCR(g):f +o=g.gaUO()?new A.aCS(g):f +n=g.gakG()?new A.aCT(g):f +m=g.galk()?new A.aCU(g):f +l=g.gafE()?new A.aCV(g):f +k=t.ZD +j=A.b([],k) +i=q!=null +if(!i||e!==B.mO){h=A.ci()===B.ar +e=A.b([],k) +if(r!=null)e.push(new A.fz(r,B.nh,f)) +if(s!=null)e.push(new A.fz(s,B.ni,f)) +if(i)e.push(new A.fz(q,B.nj,f)) +s=m!=null +if(s&&h)e.push(new A.fz(m,B.nl,f)) +if(p!=null)e.push(new A.fz(p,B.nk,f)) +if(o!=null)e.push(new A.fz(o,B.vE,f)) +if(n!=null)e.push(new A.fz(n,B.vF,f)) +if(s&&!h)e.push(new A.fz(m,B.nl,f)) +B.b.I(j,e)}if(l!=null)j.push(new A.fz(l,B.vG,f)) +e=j}B.b.I(e,g.gaJY()) +return e}, +gaJY(){var s,r,q,p,o=A.b([],t.ZD),n=this.a.c.a.b +if(!n.gds()||n.a===n.b)return o +for(s=this.go,r=s.length,q=0;q0||!r.gll())return +s=r.a.c.a +if(s.k(0,r.k3))return +r.z.toString +$.dN().Is(s) +r.k3=s}, +a4C(a){var s,r,q,p,o,n,m,l,k=this +B.b.ge1(k.gkI().f) +s=k.gaD().gC(0) +if(k.a.k2===1){r=a.c +q=a.a +p=s.a +o=r-q>=p?p/2-a.gbC().a:A.U(0,r-p,q) +n=B.fz}else{r=a.gbC() +q=k.gaD().aN.eo() +m=A.wc(r,Math.max(a.d-a.b,q.gb9(q)),a.c-a.a) +r=m.d +q=m.b +p=s.b +o=r-q>=p?p/2-m.gbC().b:A.U(0,r-p,q) +n=B.cF}r=B.b.ge1(k.gkI().f).at +r.toString +q=B.b.ge1(k.gkI().f).z +q.toString +p=B.b.ge1(k.gkI().f).Q +p.toString +l=A.U(o+r,q,p) +p=B.b.ge1(k.gkI().f).at +p.toString +return new A.Bk(l,a.dz(n.a2(0,p-l)))}, +I0(){var s,r,q,p,o,n,m=this +if(!m.gll()){s=m.a +r=s.c.a +s=s.bD;(s==null?m:s).grA() +s=m.a.bD +s=(s==null?m:s).grA() +q=A.bqb(m) +$.dN().Pa(q,s) +s=q +m.z=s +m.aaj() +m.a7S() +m.z.toString +s=m.fr +s===$&&A.c() +p=m.gBj() +o=m.a.db +n=$.dN() +n.Sq(s.d,s.r,s.w,o,p) +n.Is(r) +n.Sw() +s=m.a.bD +if((s==null?m:s).grA().f.a){m.z.toString +n.aGx()}m.k3=r}else{m.z.toString +$.dN().Sw()}}, +a2W(){var s,r,q=this +if(q.gll()){s=q.z +s.toString +r=$.dN() +if(r.d===s)r.a2Q() +q.xr=q.k3=q.z=null +q.ahK()}}, +aH0(){if(this.p4)return +this.p4=!0 +A.iC(this.gaGH())}, +aGI(){var s,r,q,p,o,n=this +n.p4=!1 +s=n.gll() +if(!s)return +s=n.z +s.toString +r=$.dN() +if(r.d===s)r.a2Q() +n.k3=n.z=null +s=n.a.bD;(s==null?n:s).grA() +s=n.a.bD +s=(s==null?n:s).grA() +q=A.bqb(n) +r.Pa(q,s) +p=q +n.z=p +r.Sw() +s=n.fr +s===$&&A.c() +o=n.gBj() +r.Sq(s.d,s.r,s.w,n.a.db,o) +r.Is(n.a.c.a) +n.k3=n.a.c.a}, +aKG(){this.R8=!1 +$.b1.bf$.f.ad(0,this.gIQ())}, +MR(){var s=this +if(s.a.d.gda())s.I0() +else{s.R8=!0 +$.b1.bf$.f.an(0,s.gIQ()) +s.a.d.lF()}}, +aa3(){var s,r,q=this +if(q.Q!=null){s=q.a.d.gda() +r=q.Q +if(s){r.toString +r.a8(0,q.a.c.a)}else{r.t() +q.Q=null}}}, +aHb(a){var s,r,q,p,o +if(a==null)return!1 +s=this.c +s.toString +r=t.Lm +q=a.tP(r) +if(q==null)return!1 +for(p=s;p!=null;){o=p.tP(r) +if(o===q)return!0 +if(o==null)p=null +else{s=o.c +s.toString +p=s}}return!1}, +az6(a){var s,r,q,p=this,o=a instanceof A.Hq +if(!o&&!(a instanceof A.pZ))return +if(o&&p.at!=null)return +o=a instanceof A.pZ +if(o&&p.at==null)return +if(o&&!p.at.b.k(0,p.a.c.a)){p.at=null +p.Q6() +return}o=a.b +s=o==null?null:o.tP(t.Lm) +r=$.b1.bf$.z.i(0,p.ay) +if(s==null)q=null +else{q=s.c +q.toString}if(J.f(r,q))return +if(!p.aHb(o))return +p.a5_(a)}, +a5_(a){$.avi() +return}, +He(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.a +f.toString +s=g.c +s.toString +r=f.c.a +q=g.gaD() +p=g.a +o=p.p2 +n=p.aM +m=p.x1 +$.avi() +p=p.cL +l=$.aa() +k=t.uh +j=new A.cD(!1,l,k) +i=new A.cD(!1,l,k) +k=new A.cD(!1,l,k) +h=new A.adq(s,q,o,g,null,r,j,i,k) +r=h.gaal() +q.aa.an(0,r) +q.bp.an(0,r) +h.T8() +r=h.gayH() +q=q.hJ +h.e!==$&&A.aj() +h.e=new A.abb(s,new A.cD(B.a0M,l,t.kr),new A.Ad(),p,B.it,0,j,h.gaAX(),h.gaAZ(),r,B.it,0,i,h.gaAR(),h.gaAT(),r,k,B.ZF,f,g.CW,g.cx,g.cy,o,g,n,m,g.x,q,new A.a1y(),new A.a1y()) +return h}, +HB(a,b){var s,r,q,p,o,n=this +if(!n.a.c.a5X(a))return +n.a.c.sAs(a) +switch(b){case null:case void 0:case B.FA:case B.aF:case B.ic:case B.by:case B.l6:case B.aX:case B.aR:n.MR() +break +case B.aK:if(n.a.d.gda())n.MR() +break}q=n.a +q.toString +p=n.Q +if(p==null)n.Q=n.He() +else p.a8(0,q.c.a) +q=n.Q +q.toString +q.saeE(n.a.Q) +q=n.Q +q.vc() +q=q.e +q===$&&A.c() +q.a0e() +try{n.a.to.$2(a,b)}catch(o){s=A.b2(o) +r=A.bC(o) +q=A.cn("while calling onSelectionChanged for "+A.j(b)) +A.eR(new A.cI(s,r,"widgets",q,null,!1))}if(n.gIt()&&n.d!=null){n.IF(!1) +n.C0()}}, +Il(a){if(this.ry)return +this.ry=!0 +$.cN.dP$.push(new A.aCy(this,a))}, +UR(){var s,r=this,q=r.c +if(q==null)return +s=A.Cx(q) +s.toString +q=r.to +q===$&&A.c() +if(q!==s.ch.d){$.cN.dP$.push(new A.aCX(r)) +if(r.to>>24&255)/255,s) +s=q.gaD() +p=q.a.go +p=A.S(B.c.ai(255*r),p.gm(p)>>>16&255,p.gm(p)>>>8&255,p.gm(p)&255) +s.giK().sTY(p) +if(q.a.as){p=q.gpd().x +p===$&&A.c() +p=p>0}else p=!1 +q.r.sm(0,p)}, +gIt(){var s,r,q=this +if(q.a.d.gda()){s=q.a +r=s.c.a.b +s=r.a===r.b&&s.as&&q.k2&&!q.gaD().eB}else s=!1 +return s}, +C0(){var s,r=this +if(!r.a.as)return +if(!r.k2)return +s=r.d +if(s!=null)s.bq(0) +r.gpd().sm(0,1) +if(r.a.ah)r.gpd().TC(r.ga5T()).a.a.l4(r.ga6z()) +else r.d=A.aWu(B.hw,new A.aCC(r))}, +RO(){var s,r=this,q=r.x1 +if(q>0){$.b1.toString +$.bF();--q +r.x1=q +if(q===0)r.aK(new A.aCu())}if(r.a.ah){q=r.d +if(q!=null)q.bq(0) +r.d=A.dn(B.G,new A.aCv(r))}else{q=r.d +q=q==null?null:q.b!=null +if(q!==!0&&r.k2)r.d=A.aWu(B.hw,new A.aCw(r)) +q=r.gpd() +s=r.gpd().x +s===$&&A.c() +q.sm(0,s===0?1:0)}}, +IF(a){var s=this,r=s.gpd() +r.sm(0,s.gaD().eB?1:0) +r=s.d +if(r!=null)r.bq(0) +s.d=null +if(a)s.x1=0}, +a8J(){return this.IF(!0)}, +SE(){var s=this +if(!s.gIt())s.a8J() +else if(s.d==null)s.C0()}, +a3G(){var s,r,q,p=this +if(p.a.d.gda()&&!p.a.c.a.b.gds()){s=p.gHg() +p.a.c.ad(0,s) +r=p.a.c +q=p.a25() +q.toString +r.sAs(q) +p.a.c.an(0,s)}p.T5() +p.SE() +p.aa3() +p.aK(new A.aCq()) +p.gTf().amr()}, +awL(){var s,r,q,p=this +if(p.a.d.gda()&&p.a.d.aOc())p.I0() +else if(!p.a.d.gda()){p.a2W() +s=p.a.c +s.B1(0,s.a.Ug(B.c9))}p.SE() +p.aa3() +s=p.a.d.gda() +r=$.b1 +if(s){r.fo$.push(p) +s=p.c +s.toString +p.to=A.Cx(s).ch.d +if(!p.a.x)p.Il(!0) +q=p.a25() +if(q!=null)p.HB(q,null)}else{r.oN(p) +p.aK(new A.aCs(p))}p.ul()}, +a25(){var s,r=this.a +if(r.ao&&r.k2===1&&!this.R8)s=A.dJ(B.v,0,r.c.a.a.length,!1) +else s=!r.c.a.b.gds()?A.tF(B.v,this.a.c.a.a.length):null +return s}, +av_(a){if(this.gaD().y==null||!this.gll())return +this.aaj()}, +aaj(){var s=this.gaD().gC(0),r=this.gaD().cW(0,null),q=this.z +if(!s.k(0,q.a)||!r.k(0,q.b)){q.a=s +q.b=r +$.dN().aHE(s,r)}}, +a7T(a){var s,r,q,p=this +if(!p.gll())return +p.aLi() +s=p.a.c.a.c +r=p.gaD().Ak(s) +if(r==null){q=s.gds()?s.a:0 +r=p.gaD().nM(new A.c0(q,B.v))}p.z.akW(r) +p.aKQ() +$.cN.dP$.push(p.gaH_())}, +a7S(){return this.a7T(null)}, +aaf(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this,a=null +b.a.toString +s=A.ci() +if(s!==B.a6)return +if(B.b.ge1(b.gkI().f).k4!==B.l3)return +s=b.gaD().aN.e +s.toString +r=b.a.fy +$label0$0:{q=t.tp +if(q.b(r)){p=r==null?q.a(r):r +q=p +break $label0$0}o=r==null +if(o){q=b.c +q.toString +q=A.e8(q,B.d6) +q=q==null?a:q.geS() +if(q==null)q=B.aq +break $label0$0}q=a}n=b.a.db +m=b.gBj() +b.a.toString +l=b.c +l.toString +l=A.bep(l) +k=new A.b6f(n,m,q,l,a,b.a.gnW(),b.y2,b.gaD().gC(0),s) +if(a0)j=B.bZ +else{q=b.xr +q=q==null?a:q.U9(k) +j=q==null?B.bZ:q}if(j.a<3)return +b.xr=k +i=A.b([],t.u1) +h=s.FB(!1) +g=new A.wC(h,0,0) +for(f=0;g.xs(1,g.c);f=e){s=g.d +e=f+(s==null?g.d=B.d.am(h,g.b,g.c):s).length +s=b.gaD() +q=f1){o=p.a.c.a.b +o=o.a!==o.b||o.c===0}else o=!0 +if(o)return +o=p.a.c.a +s=o.a +o=o.b.c +r=A.aUi(s,o) +q=r.b +if(o===s.length)r.a7L(2,q) +else{r.a7L(1,q) +r.xs(1,r.b)}o=r.a +p.kE(new A.eN(B.d.am(o,0,r.b)+new A.hz(r.ga1(0)).ga_(0)+new A.hz(r.ga1(0)).ga9(0)+B.d.c5(o,r.c),A.tF(B.v,r.b+r.ga1(0).length),B.c9),B.aK)}, +a7C(a){var s=this.a.c.a,r=a.a.ahV(a.c,a.b) +this.kE(r,a.d) +if(r.k(0,s))this.a3G()}, +aH5(a){if(a.a)this.m8(new A.c0(this.a.c.a.a.length,B.v)) +else this.m8(B.fR)}, +awN(a){var s,r,q,p,o,n,m,l=this +if(a.b!==B.ib)return +s=B.b.ge1(l.gkI().f) +if(l.a.k2===1){r=l.gkI() +q=s.Q +q.toString +r.iw(q) +return}r=s.Q +r.toString +if(r===0){r=s.z +r.toString +r=r===0}else r=!1 +if(r)return +p=t._N.a(l.ay.gap()) +p.toString +o=A.aRq(p,a) +r=s.at +r.toString +q=s.z +q.toString +n=s.Q +n.toString +m=A.U(r+o,q,n) +if(m===r)return +l.gkI().iw(m)}, +axb(a){var s,r,q,p,o,n,m,l,k,j,i=this +if(i.a.k2===1)return +s=i.gaD().nM(i.a.c.a.b.gfQ()) +r=t._N.a(i.ay.gap()) +r.toString +q=A.aRq(r,new A.ik(a.gKY(a)?B.a7:B.ag,B.ib)) +p=B.b.ge1(i.gkI().f) +if(a.gKY(a)){o=i.a.c.a +if(o.b.d>=o.a.length)return +o=s.b+q +n=p.Q +n.toString +m=i.gaD().gC(0) +l=p.at +l.toString +k=o+l>=n+m.b?new A.c0(i.a.c.a.a.length,B.v):i.gaD().jz(A.dx(i.gaD().cW(0,null),new A.i(s.a,o))) +j=i.a.c.a.b.Uh(k.a)}else{if(i.a.c.a.b.d<=0)return +o=s.b+q +n=p.at +n.toString +k=o+n<=0?B.fR:i.gaD().jz(A.dx(i.gaD().cW(0,null),new A.i(s.a,o))) +j=i.a.c.a.b.Uh(k.a)}i.m8(j.gfQ()) +i.kE(i.a.c.a.mb(j),B.aK)}, +aLe(a){var s=a.b +this.m8(s.gfQ()) +this.kE(a.a.mb(s),a.c)}, +gTf(){var s,r=this,q=r.b6 +if(q===$){s=A.b([],t.ot) +r.b6!==$&&A.N() +q=r.b6=new A.Yb(r,new A.bW(s,t.wS),t.Wp)}return q}, +aBQ(a){var s=this.Q +if(s==null)s=null +else{s=s.e +s===$&&A.c() +s=s.gFE()}if(s===!0){this.re(!1) +return null}s=this.c +s.toString +return A.xK(s,a,t.xm)}, +aw1(a){switch(A.ci().a){case 0:case 2:case 1:switch(a.gdR(a).a){case 0:this.a.d.my() +break +case 1:case 2:case 3:case 5:this.a.d.my() +break +case 4:throw A.d(A.d_("Unexpected pointer down event for trackpad"))}break +case 3:case 4:case 5:this.a.d.my() +break}}, +gatb(){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=this,b1=b0.K +if(b1===$){s=t.ot +r=A.b([],s) +q=t.wS +b1=b0.ah +if(b1===$){p=A.b([],s) +b0.ah!==$&&A.N() +b1=b0.ah=new A.e1(b0.gaGs(),new A.bW(p,q),t.Tx)}o=b0.b_ +if(o===$){p=A.b([],s) +b0.b_!==$&&A.N() +o=b0.b_=new A.e1(b0.gaLd(),new A.bW(p,q),t.ZQ)}p=A.b([],s) +n=A.b([],s) +m=b0.gauu() +l=b0.gaDd() +k=A.b([],s) +j=b0.c +j.toString +j=new A.tU(b0,m,l,new A.bW(k,q),t.rZ).h7(j) +k=b0.gaDq() +i=A.b([],s) +h=b0.c +h.toString +h=new A.tU(b0,k,l,new A.bW(i,q),t.Uz).h7(h) +i=b0.gaCw() +g=b0.gaDf() +f=A.b([],s) +e=b0.c +e.toString +e=new A.tU(b0,i,g,new A.bW(f,q),t.Fb).h7(e) +m=A.xq(b0,m,l,!1,!1,!1,t._w) +f=b0.c +f.toString +f=m.h7(f) +m=A.b([],s) +d=b0.c +d.toString +d=new A.e1(b0.gaxa(),new A.bW(m,q),t.vr).h7(d) +m=A.xq(b0,k,l,!1,!0,!1,t.P9) +c=b0.c +c.toString +c=m.h7(c) +m=b0.gaEH() +b=A.xq(b0,m,l,!1,!0,!1,t.cP) +a=b0.c +a.toString +a=b.h7(a) +b=A.xq(b0,i,g,!1,!0,!1,t.OO) +a0=b0.c +a0.toString +a0=b.h7(a0) +b=b0.gTf() +a1=b0.c +a1.toString +a1=b.h7(a1) +b=b0.gTf() +a2=b0.c +a2.toString +a2=b.h7(a2) +m=A.xq(b0,m,l,!1,!0,!1,t.b5) +b=b0.c +b.toString +b=m.h7(b) +m=b0.gawr() +a3=A.xq(b0,m,l,!1,!0,!1,t.HH) +a4=b0.c +a4.toString +a4=a3.h7(a4) +l=A.xq(b0,k,l,!1,!0,!1,t.eI) +k=b0.c +k.toString +k=l.h7(k) +l=A.b([],s) +a3=b0.c +a3.toString +a3=new A.e1(b0.gaH4(),new A.bW(l,q),t.sl).h7(a3) +l=A.b([],s) +i=A.xq(b0,i,g,!1,!0,!0,t.oB) +a5=b0.c +a5.toString +a5=i.h7(a5) +g=A.xq(b0,m,g,!0,!0,!0,t.bh) +m=b0.c +m.toString +m=g.h7(m) +g=A.b([],s) +i=b0.c +i.toString +i=new A.apl(b0,new A.bW(g,q)).h7(i) +g=A.b([],s) +a6=b0.c +a6.toString +a6=new A.ahb(b0,new A.bW(g,q)).h7(a6) +g=A.b([],s) +a7=b0.c +a7.toString +a7=new A.e1(new A.aCp(b0),new A.bW(g,q),t.gv).h7(a7) +a8=b0.ac +if(a8===$){s=A.b([],s) +b0.ac!==$&&A.N() +a8=b0.ac=new A.e1(b0.gaKx(),new A.bW(s,q),t.j5)}s=b0.c +s.toString +a9=A.b3([B.aho,new A.Mn(!1,new A.bW(r,q)),B.agZ,b1,B.ahd,o,B.Hv,new A.Mk(!0,new A.bW(p,q)),B.tb,new A.e1(b0.gaBP(),new A.bW(n,q),t.P0),B.agt,j,B.ahf,h,B.agu,e,B.ago,f,B.agz,d,B.agM,c,B.agV,a,B.ahs,a0,B.ahp,a1,B.ahq,a2,B.agn,b,B.agN,a4,B.agm,k,B.ahh,a3,B.tf,new A.e1(b0.gawM(),new A.bW(l,q),t.AX),B.ahg,a5,B.ahv,m,B.ah0,i,B.agr,a6,B.agS,a7,B.ah7,a8.h7(s)],t.B,t.od) +b0.K!==$&&A.N() +b0.K=a9 +b1=a9}return b1}, +ab(a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=this,a0=null +a.GG(a1) +s=a.a +r=s.p2 +q=s.fy +$label0$0:{s=t.tp +if(s.b(q)){p=q==null?s.a(q):q +s=p +break $label0$0}o=q==null +if(o){s=A.e8(a1,B.d6) +s=s==null?a0:s.geS() +if(s==null)s=B.aq +break $label0$0}s=a0}n=a.gll() +if(a.a.d.gda()){a.a.toString +m=a.gaw0()}else m=a0 +l=a.a.y1 +if(l==null)l=B.rW +k=a.gatb() +j=a.a +i=j.c +h=j.d +g=j.cx +j=j.k2!==1?B.a7:B.d9 +f=a.gkI() +e=a.a +d=e.b2 +c=e.aM +e=e.R +b=A.Rn(a1).acn(!1,a.a.k2!==1) +return new A.agO(a.gauZ(),n,A.adg(A.pK(A.xJ(k,new A.Is(i,new A.aCF(a),new A.aCG(),new A.aCH(a),h,g,A.v6(!1,a0,new A.fS(new A.aCI(a),A.bgz(j,B.a4,f,c,!0,a.ay,d,e,b,a0,new A.aCJ(a,r,s)),a0,t.WA),a0,a0,a0,h,!1,a0,a0,a0,a0,a0,a0),a0,t.pm)),l,a0,a0,a0,a0),a0,m),a0)}, +aby(){var s,r,q,p,o,n,m,l=this,k=null,j=l.a +j.toString +s=l.y2 +if(s>=0&&s<=j.c.a.a.length){r=A.b([],t.s6) +j=l.a +q=j.c.a.a.length-l.y2 +if(j.k2!==1){r.push(B.ajW) +r.push(new A.oW(new A.Q(l.gaD().gC(0).a,0),B.bb,B.dX,k,k))}else r.push(B.ajX) +j=l.fr +j===$&&A.c() +s=A.b([A.cS(k,k,k,k,B.d.am(l.a.c.a.a,0,q))],t.VO) +B.b.I(s,r) +s.push(A.cS(k,k,k,k,B.d.c5(l.a.c.a.a,q))) +return A.cS(s,k,k,j,k)}p=!j.x&&j.d.gda() +if(l.ga8u()){o=!l.a.c.a.gafi()||!p +j=l.a.c.a +s=l.fr +s===$&&A.c() +n=l.dy +n===$&&A.c() +n=n.c +n.toString +m=l.fx +m.toString +return A.bRs(j,o,s,n,m)}j=l.a.c +s=l.c +s.toString +n=l.fr +n===$&&A.c() +return j.abz(s,n,p)}} +A.aCt.prototype={ +$0(){}, +$S:0} +A.aCW.prototype={ +$1(a){var s=this.a +if(s.c!=null)s.m8(s.a.c.a.b.gfQ())}, +$S:3} +A.aCx.prototype={ +$1(a){var s=this.a +if(s.c!=null)s.m8(s.a.c.a.b.gfQ())}, +$S:3} +A.aCK.prototype={ +$0(){this.a.K7(B.aR)}, +$S:0} +A.aCL.prototype={ +$0(){this.a.JO(B.aR)}, +$S:0} +A.aCM.prototype={ +$0(){this.a.wo(B.aR)}, +$S:0} +A.aCN.prototype={ +$0(){this.a.NS(B.aR)}, +$S:0} +A.aCO.prototype={ +$0(){return this.a.JO(B.aR)}, +$S:0} +A.aCP.prototype={ +$0(){return this.a.K7(B.aR)}, +$S:0} +A.aCQ.prototype={ +$0(){return this.a.wo(B.aR)}, +$S:0} +A.aCR.prototype={ +$0(){return this.a.NS(B.aR)}, +$S:0} +A.aCS.prototype={ +$0(){return this.a.LE(B.aR)}, +$S:0} +A.aCT.prototype={ +$0(){return this.a.Gd(B.aR)}, +$S:0} +A.aCU.prototype={ +$0(){return this.a.Gt(B.aR)}, +$S:0} +A.aCV.prototype={ +$0(){return this.a.aJN(B.aR)}, +$S:0} +A.aCD.prototype={ +$0(){var s=0,r=A.r(t.H),q=this,p,o,n,m,l +var $async$$0=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:o=q.b +n=q.a +m=n.a +l=B.d.am(m.c.a.a,o.a,o.b) +s=l.length!==0?2:3 +break +case 2:s=4 +return A.x(n.fy.Mx(q.c.a,l,m.x),$async$$0) +case 4:p=b +if(p!=null&&n.gP6())n.a6Z(B.aR,p) +else n.kv() +case 3:return A.p(null,r)}}) +return A.q($async$$0,r)}, +$S:15} +A.aCY.prototype={ +$1(a){var s,r=this +if(r.b)r.a.Q.lb() +if(r.c){s=r.a.Q +s.vc() +s=s.e +s===$&&A.c() +s.a0e()}}, +$S:3} +A.aCZ.prototype={ +$1(a){this.a.I0()}, +$S:3} +A.aCy.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k,j,i,h=this.a +h.ry=!1 +s=$.b1.bf$.z.i(0,h.w) +s=s==null?null:s.gaF() +t.CA.a(s) +if(s!=null){r=s.d1.gds() +r=!r||h.gkI().f.length===0}else r=!0 +if(r)return +r=s.aN.eo() +q=r.gb9(r) +p=h.a.av.d +r=h.Q +if((r==null?null:r.c)!=null){o=r.c.Ah(q).b +n=Math.max(o,48) +p=Math.max(o/2-h.Q.c.Ag(B.it,q).b+n/2,p)}m=h.a.av.JP(p) +l=h.a4C(s.nM(s.d1.gfQ())) +k=h.a.c.a.b +if(k.a===k.b)j=l.b +else{i=s.oR(k) +if(i.length===0)j=l.b +else if(k.c>>24&255)/255,n) +n=b4.a.go +n=A.S(B.c.ai(255*m),n.gm(n)>>>16&255,n.gm(n)>>>8&255,n.gm(n)&255) +p=b4.a +l=p.k1 +k=p.y +j=p.x +p=p.d.gda() +i=b4.a +h=i.k2 +g=i.k3 +i=i.gnW() +f=b4.Q +if(f==null)f=b3 +else{f=f.e +f===$&&A.c() +f=$.r0===f.p1}if(f===!0){b4.dy===$&&A.c() +f=b4.a +e=f.p1 +d=e +e=f +f=d}else{f=b4.a +e=f.p1 +d=e +e=f +f=d}c=this.c +b=b4.gBj() +b4.a.toString +a=A.bep(b8) +a0=b4.a +a1=a0.w +a2=a0.e +a3=a0.bv +a4=a0.bn +a5=a0.ac +a6=a0.b_ +if(a6==null)a6=B.h +a7=a0.K +a8=a0.a5 +a9=a0.b6 +a0=a0.ao +b0=b4.c +b0.toString +b0=A.cj(b0,B.cy,t.l).w +b1=b4.bn +b2=b4.a +return new A.yv(b4.CW,A.dg(b3,b3,new A.X4(new A.abE(new A.UW(q,o,n,b4.cx,b4.cy,l,b4.r,k,j,p,h,g,!1,i,f,c,e.db,b,b3,a2,!1,a,a1,b9,!0,a3,a4,a5,a6,a9,a7,a8,a0,b4,b0.b,b1,b2.id,b2.dg,A.bqW(q,c),r),b3),s,r,new A.aCE(b4),!0,b3),!1,b3,b3,!1,!1,b3,b3,b3,b3,b3,b3,b3,b3,b3,b6,b7,b3,b3,b3,b3,b5,b3,b3,b3,b3,b3,b3,b3,b3,b3),b3)}, +$S:673} +A.aCE.prototype={ +$0(){var s=this.a +s.I0() +s.aaf(!0)}, +$S:0} +A.UW.prototype={ +bA(a){var s,r=this,q=null,p=r.ax,o=r.cy,n=A.Ox(a),m=r.f.b,l=A.brJ(),k=A.brJ(),j=$.aa(),i=t.uh,h=A.aX(t.rf),g=A.aX(t.O5) +if(o.k(0,B.aq))o=new A.k2(1) +s=p===1?1:q +o=A.qd(q,n,s,r.CW,r.e,r.db,r.dx,r.fy,o,r.go) +p=new A.Bc(l,k,!0,r.RG,r.fr,!1,r.R8,new A.cD(!0,j,i),new A.cD(!0,j,i),o,!1,r.z,r.at,r.Q,r.as,p,r.ay,!1,m,r.id,r.k2,r.k3,r.p1,r.w,r.x,r.p4,r.to,B.h,h,g,0,q,q,!1,new A.bs(),A.aX(t.v)) +p.by() +l.sLc(r.cx) +l.sLd(m) +l.sa_U(r.p2) +l.sa_V(r.p3) +k.sLc(r.ry) +k.sLd(r.rx) +p.giK().sTY(r.r) +p.giK().sacQ(r.k4) +p.giK().sacP(r.ok) +p.giK().sabr(r.y) +p.a9X(q) +p.aa4(q) +p.I(0,q) +return p}, +bI(a,b){var s,r,q=this +b.sd7(0,q.e) +b.giK().sTY(q.r) +b.samk(q.w) +b.saQY(q.x) +b.giK().sabr(q.y) +b.salw(q.z) +b.saRQ(q.Q) +b.sYZ(0,q.as) +b.sda(q.at) +b.su0(q.ax) +b.saV8(q.ay) +b.sVv(!1) +b.snW(q.CW) +s=b.aM +s.sLc(q.cx) +b.seS(q.cy) +b.suj(0,q.db) +b.scV(q.dx) +r=A.Ox(a) +b.stZ(0,r) +b.sAs(q.f.b) +b.sl0(0,q.id) +b.ct=!0 +b.swx(q.fy) +b.suk(q.go) +b.saVV(q.fr) +b.saVU(!1) +b.saPj(q.k2) +b.saPi(q.k3) +b.giK().sacQ(q.k4) +b.giK().sacP(q.ok) +s.sa_U(q.p2) +s.sa_V(q.p3) +b.saQQ(q.p4) +b.S=q.R8 +b.spw(0,q.RG) +b.saX5(q.p1) +s=b.aS +s.sLc(q.ry) +r=q.to +if(r!==b.ea){b.ea=r +b.bi() +b.cf()}s.sLd(q.rx)}} +A.b6f.prototype={ +U9(a){var s,r,q=this +if(a===q)return B.e1 +if(q.a===a.a)if(q.b===a.b){if(q.c.k(0,a.c))s=!B.GX.k(0,B.GX)||!q.f.k(0,a.f)||q.r!==a.r||!q.w.k(0,a.w) +else s=!0 +r=s}else r=!0 +else r=!0 +return r?B.bZ:q.x.cK(0,a.x)}} +A.X4.prototype={ +b5(){var s=$.brD +$.brD=s+1 +return new A.apc(B.f.j(s),B.p)}, +aZZ(){return this.f.$0()}} +A.apc.prototype={ +bu(){var s=this +s.bN() +s.a.toString +$.dN().f.u(0,s.d,s)}, +bH(a){this.c7(a) +this.a.toString}, +t(){$.dN().f.P(0,this.d) +this.bG()}, +gaD(){var s=this.a.e +s=$.b1.bf$.z.i(0,s) +s=s==null?null:s.gaF() +return t.CA.a(s)}, +aU7(a){var s,r,q,p,o=this,n=o.goa(0),m=o.gaD() +m=m==null?null:m.f4 +if(m===!0)return!1 +if(n.k(0,B.M))return!1 +if(!n.wk(a))return!1 +s=n.fp(a) +r=A.aGD() +m=$.b1 +m.toString +q=s.gbC() +p=o.c +p.toString +m.E8(r,q,A.Cx(p).a) +return B.b.fk(r.a,new A.b6g(o))}, +goa(a){var s=t.aA.a(this.c.gaF()) +if(s==null||this.c==null||s.y==null)return B.M +return A.ie(s.cW(0,null),new A.A(0,0,0+s.gC(0).a,0+s.gC(0).b))}, +ab(a){return this.a.c}, +$ibpq:1} +A.b6g.prototype={ +$1(a){return a.a.k(0,this.a.gaD())}, +$S:674} +A.oW.prototype={ +Ju(a,b,c){var s=this.a,r=s!=null +if(r)a.ws(s.G3(c)) +s=this.x +a.aaY(s.a,s.b,this.b) +if(r)a.ie()}} +A.tU.prototype={ +hQ(a,b){var s,r,q,p,o,n=this.e,m=n.a.c.a.b +if(!m.gds())return null +s=n.a2y() +r=m.a +q=m.b +if(r!==q){r=s.ka(r) +if(r==null)r=n.a.c.a.a.length +q=s.kc(q-1) +if(q==null)q=0 +b.toString +return A.xK(b,new A.ox(n.a.c.a,"",new A.cZ(r,q),B.aK),t.UM)}r=a.a +p=this.r.$3(m.gqO(),r,this.f.$0()).a +q=m.c +if(r){r=s.ka(q) +if(r==null)r=n.a.c.a.a.length}else{r=s.kc(q-1) +if(r==null)r=0}o=A.dJ(B.v,r,p,!1) +b.toString +return A.xK(b,new A.ox(n.a.c.a,"",o,B.aK),t.UM)}, +hP(a){return this.hQ(a,null)}, +goB(){var s=this.e.a +return!s.x&&s.c.a.b.gds()}} +A.Ya.prototype={ +hQ(a,b){var s,r,q,p,o,n,m,l,k=this,j=k.e,i=j.a,h=i.c.a,g=h.b,f=a.b||!i.ao +i=g.a +s=g.b +r=i===s +if(!r&&!k.f&&f){b.toString +return A.xK(b,new A.nz(h,A.tF(B.v,a.a?s:i),B.aK),t.gU)}q=g.gfQ() +if(a.d){i=a.a +if(i){h=j.gaD().Ai(q).b +if(new A.c0(h,B.aL).k(0,q)){s=j.a.c.a.a +h=h!==s.length&&s.charCodeAt(q.a)!==10}else h=!1}else h=!1 +if(h)q=new A.c0(q.a,B.v) +else{if(!i){i=j.gaD().Ai(q).a +i=new A.c0(i,B.v).k(0,q)&&i!==0&&j.a.c.a.a.charCodeAt(q.a-1)!==10}else i=!1 +if(i)q=new A.c0(q.a,B.aL)}}i=k.r +if(i){h=g.c +s=g.d +p=a.a?h>s:h"))}, +gfj(){var s,r,q=this.x +if(q==null){s=A.b([],t.bp) +r=this.Q +for(;r!=null;){s.push(r) +r=r.Q}this.x=s +q=s}return q}, +gda(){if(!this.gpM()){var s=this.w +if(s==null)s=null +else{s=s.c +s=s==null?null:B.b.G(s.gfj(),this)}s=s===!0}else s=!0 +return s}, +gpM(){var s=this.w +return(s==null?null:s.c)===this}, +gnq(){return this.gkS()}, +a2R(){var s,r,q,p,o=this.ay +if(o==null)return +this.ay=null +s=this.as +r=s.length +if(r!==0)for(q=0;q")).al(0,B.b.gq8(r))}}b.Q=null +b.a2R() +B.b.P(this.as,b) +for(r=this.gfj(),q=r.length,p=0;p#"+s+q}, +$iaq:1} +A.aED.prototype={ +$1(a){return!a.glO()&&a.b&&B.b.h8(a.gfj(),A.iV())}, +$S:21} +A.aEC.prototype={ +$1(a){return a.gkS()===this.a}, +$S:21} +A.v8.prototype={ +gnq(){return this}, +glv(){return this.b&&A.fd.prototype.glv.call(this)}, +gFG(){if(!(this.b&&B.b.h8(this.gfj(),A.iV())))return B.uw +return A.fd.prototype.gFG.call(this)}, +O0(a){if(a.Q==null)this.Ic(a) +if(this.gda())a.qy(!0) +else a.v3()}, +aMQ(a,b){var s,r=this +if(b.Q==null)r.Ic(b) +s=r.w +if(s!=null)s.w.push(new A.afB(r,b)) +s=r.w +if(s!=null)s.BL()}, +qy(a){var s,r,q=this,p=q.fx +while(!0){if((p.length!==0?B.b.ga_(p):null)!=null){s=p.length!==0?B.b.ga_(p):null +s=!(s.b&&B.b.h8(s.gfj(),A.iV()))}else s=!1 +if(!s)break +p.pop()}r=p.length!==0?B.b.ga_(p):null +if(!a||r==null){if(q.b&&B.b.h8(q.gfj(),A.iV())){q.v3() +q.a6e(q)}return}r.qy(!0)}} +A.v7.prototype={ +W(){return"FocusHighlightMode."+this.b}} +A.aEB.prototype={ +W(){return"FocusHighlightStrategy."+this.b}} +A.afu.prototype={ +vx(a){return this.a.$1(a)}} +A.Nb.prototype={ +t(){var s,r=this,q=r.e +if(q!=null)$.b1.oN(q) +q=r.a +s=$.f6.b2$ +s===$&&A.c() +if(J.f(s.a,q.gaex())){$.hq.mk$.b.P(0,q.gaey()) +s=$.f6.b2$ +s===$&&A.c() +s.a=null}q.f=new A.rs(A.lq(null,null,t.Su,t.S),t.op) +r.b.t() +r.fN()}, +atI(a){var s,r,q=this +if(a===B.d8)if(q.c!==q.b)q.f=null +else{s=q.f +if(s!=null){s.lF() +q.f=null}}else{s=q.c +r=q.b +if(s!==r){q.r=r +q.f=s +q.ab9()}}}, +BL(){if(this.x)return +this.x=!0 +A.iC(this.gaMv())}, +ab9(){var s,r,q,p,o,n,m,l,k,j,i,h=this +h.x=!1 +s=h.c +for(r=h.w,q=r.length,p=h.b,o=0;o")) +if(!s.gar(0).H())p=null +else p=b?s.ga_(0):s.ga9(0)}return p==null?a:p}, +axt(a,b){return this.a46(a,!1,b)}, +aTU(a){}, +U_(a,b){}, +xT(a,b){var s,r,q,p,o,n,m,l=this,k=null,j=a.gnq() +j.toString +l.xb(j) +l.DJ$.P(0,j) +s=j.fx +r=s.length!==0?B.b.ga_(s):k +s=r==null +if(s){q=b?l.axt(a,!1):l.a46(a,!0,!1) +return l.xY(q,b?B.e2:B.e3,b)}if(s)r=j +p=A.beX(j,r) +if(b&&r===B.b.ga_(p))switch(j.fr.a){case 1:r.my() +return!1 +case 2:o=j.gkS() +if(o!=null&&o!==$.b1.bf$.f.b){r.my() +j=o.e +j.toString +A.v9(j).xT(o,!0) +j=r.gkS() +if(j==null)j=k +else{j=j.fx +j=j.length!==0?B.b.ga_(j):k}return j!==r}return l.xY(B.b.ga9(p),B.e2,b) +case 0:return l.xY(B.b.ga9(p),B.e2,b)}if(!b&&r===B.b.ga9(p))switch(j.fr.a){case 1:r.my() +return!1 +case 2:o=j.gkS() +if(o!=null&&o!==$.b1.bf$.f.b){r.my() +j=o.e +j.toString +A.v9(j).xT(o,!1) +j=r.gkS() +if(j==null)j=k +else{j=j.fx +j=j.length!==0?B.b.ga_(j):k}return j!==r}return l.xY(B.b.ga_(p),B.e3,b) +case 0:return l.xY(B.b.ga_(p),B.e3,b)}for(j=J.az(b?p:new A.cz(p,A.a5(p).h("cz<1>"))),n=k;j.H();n=m){m=j.ga1(j) +if(n===r)return l.xY(m,b?B.e2:B.e3,b)}return!1}} +A.aEG.prototype={ +$1(a){return a.b&&B.b.h8(a.gfj(),A.iV())&&!a.glO()}, +$S:21} +A.aEI.prototype={ +$1(a){var s,r,q,p,o,n,m +for(s=a.c,r=s.length,q=this.b,p=this.a,o=0;o")) +if(!o.gaA(0))q=o}if(b===B.Hs){n=J.xI(q) +q=new A.cz(n,A.a5(n).h("cz<1>"))}m=J.ZC(q,new A.aBm(new A.A(f.gcg(0).a,-1/0,f.gcg(0).c,1/0))) +if(!m.gaA(0)){p=B.b.ga9(A.bDJ(f.gcg(0).gbC(),m)) +break}p=B.b.ga9(A.bDK(f.gcg(0).gbC(),q)) +break +case 1:case 3:q=j.aIi(b,f.gcg(0),h.gFG()) +if(q.length===0){p=i +break}if(r!=null&&!r.d.gabo()){o=new A.bg(q,new A.aBn(r),A.a5(q).h("bg<1>")) +if(!o.gaA(0))q=o}if(b===B.agk){n=J.xI(q) +q=new A.cz(n,A.a5(n).h("cz<1>"))}m=J.ZC(q,new A.aBo(new A.A(-1/0,f.gcg(0).b,1/0,f.gcg(0).d))) +if(!m.gaA(0)){p=B.b.ga9(A.bDI(f.gcg(0).gbC(),m)) +break}p=B.b.ga9(A.bDL(f.gcg(0).gbC(),q)) +break +default:p=i}if(p!=null){n=j.DJ$ +l=n.i(0,h) +k=new A.J2(b,f) +if(l!=null)l.a.push(k) +else n.u(0,h,new A.ahV(A.b([k],t.wD))) +switch(g){case 0:case 3:j.a.$2$alignmentPolicy(p,B.e3) +break +case 2:case 1:j.a.$2$alignmentPolicy(p,B.e2) +break}return!0}return!1}} +A.b4Z.prototype={ +$1(a){return a.b===this.a}, +$S:678} +A.aBg.prototype={ +$2(a,b){if(this.a)if(this.b)return B.c.cK(a.gcg(0).b,b.gcg(0).b) +else return B.c.cK(b.gcg(0).d,a.gcg(0).d) +else if(this.b)return B.c.cK(a.gcg(0).a,b.gcg(0).a) +else return B.c.cK(b.gcg(0).c,a.gcg(0).c)}, +$S:47} +A.aBi.prototype={ +$2(a,b){var s=a.gcg(0).gbC(),r=b.gcg(0).gbC(),q=this.a,p=A.bew(q,s,r) +if(p===0)return A.bev(q,s,r) +return p}, +$S:47} +A.aBh.prototype={ +$2(a,b){var s=a.gcg(0).gbC(),r=b.gcg(0).gbC(),q=this.a,p=A.bev(q,s,r) +if(p===0)return A.bew(q,s,r) +return p}, +$S:47} +A.aBj.prototype={ +$2(a,b){var s,r,q,p=this.a,o=a.gcg(0),n=b.gcg(0),m=o.a,l=p.a,k=o.c +m=Math.abs(m-l)=s.c}, +$S:21} +A.aBc.prototype={ +$2(a,b){return B.c.cK(a.gcg(0).gbC().a,b.gcg(0).gbC().a)}, +$S:47} +A.aBd.prototype={ +$1(a){var s=this.a +return!a.gcg(0).k(0,s)&&a.gcg(0).gbC().b<=s.b}, +$S:21} +A.aBe.prototype={ +$1(a){var s=this.a +return!a.gcg(0).k(0,s)&&a.gcg(0).gbC().b>=s.d}, +$S:21} +A.aBf.prototype={ +$2(a,b){return B.c.cK(a.gcg(0).gbC().b,b.gcg(0).gbC().b)}, +$S:47} +A.aB9.prototype={ +$1(a){var s,r,q=this,p=q.b.a.pop().b,o=p.e +o.toString +o=A.kE(o) +s=$.b1.bf$.f.c.e +s.toString +if(o!=A.kE(s)){o=q.a +s=q.c +o.xb(s) +o.DJ$.P(0,s) +return!1}switch(a.a){case 0:case 3:r=B.e3 +break +case 1:case 2:r=B.e2 +break +default:r=null}q.a.a.$2$alignmentPolicy(p,r) +return!0}, +$S:680} +A.aBl.prototype={ +$1(a){var s=a.e +s.toString +return A.kE(s)===this.a}, +$S:21} +A.aBm.prototype={ +$1(a){return!a.gcg(0).fp(this.a).gaA(0)}, +$S:21} +A.aBn.prototype={ +$1(a){var s=a.e +s.toString +return A.kE(s)===this.a}, +$S:21} +A.aBo.prototype={ +$1(a){return!a.gcg(0).fp(this.a).gaA(0)}, +$S:21} +A.hG.prototype={ +gad5(){var s=this.d +if(s==null){s=this.c.e +s.toString +s=this.d=new A.b4X().$1(s)}s.toString +return s}} +A.b4W.prototype={ +$1(a){var s=a.gad5() +return A.FS(s,A.a5(s).c)}, +$S:681} +A.b4Y.prototype={ +$2(a,b){var s +switch(this.a.a){case 1:s=B.c.cK(a.b.a,b.b.a) +break +case 0:s=B.c.cK(b.b.c,a.b.c) +break +default:s=null}return s}, +$S:209} +A.b4X.prototype={ +$1(a){var s,r=A.b([],t.vl),q=t.I,p=a.k9(q) +for(;p!=null;){r.push(q.a(p.gba())) +s=A.bPg(p) +p=s==null?null:s.k9(q)}return r}, +$S:683} +A.qq.prototype={ +gcg(a){var s,r,q,p,o=this +if(o.b==null)for(s=o.a,r=A.a5(s).h("W<1,A>"),s=new A.W(s,new A.b4U(),r),s=new A.cR(s,s.gF(0),r.h("cR")),r=r.h("aI.E");s.H();){q=s.d +if(q==null)q=r.a(q) +p=o.b +if(p==null){o.b=q +p=q}o.b=p.jj(q)}s=o.b +s.toString +return s}} +A.b4U.prototype={ +$1(a){return a.b}, +$S:684} +A.b4V.prototype={ +$2(a,b){var s,r +switch(this.a.a){case 1:s=a.gcg(0) +s=s.gae(s) +r=b.gcg(0) +r=B.c.cK(s,r.gae(r)) +s=r +break +case 0:s=b.gcg(0) +s=s.gaH(s) +r=a.gcg(0) +r=B.c.cK(s,r.gaH(r)) +s=r +break +default:s=null}return s}, +$S:685} +A.aP0.prototype={ +auV(a){var s,r,q,p,o,n=B.b.ga9(a).a,m=t.qi,l=A.b([],m),k=A.b([],t.jE) +for(s=a.length,r=0;r") +return A.ab(new A.bg(b,new A.aP3(new A.A(-1/0,s.b,1/0,s.d)),r),!0,r.h("z.E"))}, +$S:686} +A.aP3.prototype={ +$1(a){return!a.b.fp(this.a).gaA(0)}, +$S:687} +A.Nc.prototype={ +b5(){return new A.ajd(B.p)}} +A.Vf.prototype={} +A.ajd.prototype={ +gdJ(a){var s,r,q,p=this,o=p.d +if(o===$){s=p.a.c +r=A.b([],t.bp) +q=$.aa() +p.d!==$&&A.N() +o=p.d=new A.Vf(s,!1,!0,!0,!0,null,null,r,q)}return o}, +t(){this.gdJ(0).t() +this.bG()}, +bH(a){var s=this +s.c7(a) +if(a.c!==s.a.c)s.gdJ(0).fr=s.a.c}, +ab(a){var s=null,r=this.gdJ(0) +return A.v6(!1,!1,this.a.f,s,!0,!0,r,!1,s,s,s,s,s,!0)}} +A.aar.prototype={ +hP(a){a.b0o(a.gdJ(a))}} +A.Az.prototype={} +A.a7w.prototype={ +hP(a){var s=$.b1.bf$.f.c,r=s.e +r.toString +return A.v9(r).xT(s,!0)}, +Zt(a,b){return b?B.ci:B.k0}} +A.B0.prototype={} +A.a9h.prototype={ +hP(a){var s=$.b1.bf$.f.c,r=s.e +r.toString +return A.v9(r).xT(s,!1)}, +Zt(a,b){return b?B.ci:B.k0}} +A.uT.prototype={} +A.Mk.prototype={ +hP(a){var s,r +if(!this.c){s=$.b1.bf$.f.c +r=s.e +r.toString +A.v9(r).aTq(s,a.a)}}} +A.aje.prototype={} +A.anS.prototype={ +U_(a,b){var s +this.anu(a,b) +s=this.DJ$.i(0,b) +if(s!=null){s=s.a +if(!!s.fixed$length)A.X(A.af("removeWhere")) +B.b.o7(s,new A.b4Z(a),!0)}}} +A.atM.prototype={} +A.atN.prototype={} +A.Nk.prototype={ +b5(){return new A.Nl(A.C(t.gx),B.p)}} +A.Nl.prototype={ +axg(){var s=this +s.a.toString +s.e=s.f.fk(0,new A.aF7()) +s.axJ()}, +axJ(){this.aK(new A.aF8(this))}, +ab(a){var s,r,q=this +switch(q.a.w.a){case 1:q.yf() +break +case 2:if(q.e)q.yf() +break +case 0:break}s=q.a +r=q.d +return new A.Tz(A.bMY(s.c,q,r),null,null)}, +yf(){var s,r,q,p,o,n,m,l={},k=l.a="" +for(s=this.f,s=A.cT(s,s.r,A.w(s).c),r=s.$ti.c,q=!1;s.H();){p=s.d +if(p==null)p=r.a(p) +q=!p.b_4()||q +o=l.a +p=p.e +n=p.y +p=n==null?A.w(p).h("dv.T").a(n):n +l.a=o+(p==null?k:p)}if(l.a.length!==0){k=this.c.bh(t.I) +k.toString +m=k.w +if(A.ci()===B.a6)A.bmP(new A.aF9(l,m),t.H) +else A.Hx(l.a,m,B.tZ)}return!q}} +A.aF7.prototype={ +$1(a){var s=a.f,r=s.y +return r==null?A.w(s).h("dv.T").a(r):r}, +$S:688} +A.aF8.prototype={ +$0(){++this.a.d}, +$S:0} +A.aF9.prototype={ +$0(){var s=0,r=A.r(t.H),q=this +var $async$$0=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:s=2 +return A.x(A.vb(B.cU,null,t.H),$async$$0) +case 2:A.Hx(q.a.a,q.b,B.tZ) +return A.p(null,r)}}) +return A.q($async$$0,r)}, +$S:15} +A.Vh.prototype={ +el(a){return this.r!==a.r}} +A.rk.prototype={ +b5(){return A.bFo(A.w(this).h("rk.T"))}} +A.m4.prototype={ +gaau(){var s=this.d +return s===$?this.d=this.a.f:s}, +b_4(){var s,r +this.aK(new A.aF6(this)) +s=this.e +r=s.y +return(r==null?A.w(s).h("dv.T").a(r):r)==null}, +yf(){this.e.sm(0,this.a.d.$1(this.gaau()))}, +Kh(a){var s +this.aK(new A.aF5(this,a)) +s=this.c +s.toString +s=A.bf2(s) +if(s!=null)s.axg()}, +ghY(){return this.a.x}, +l3(a,b){var s=this +s.q7(s.e,"error_text") +s.q7(s.f,"has_interacted_by_user")}, +ht(){var s=this.c +s.toString +s=A.bf2(s) +if(s!=null)s.f.P(0,this) +this.rX()}, +t(){this.e.t() +this.f.t() +this.aqb()}, +ab(a){var s,r=this,q=r.a +if(q.r)switch(q.w.a){case 1:r.yf() +break +case 2:q=r.f +s=q.y +if(s==null?A.w(q).h("dv.T").a(s):s)r.yf() +break +case 0:break}q=A.bf2(a) +if(q!=null)q.f.E(0,r) +return r.a.e.$1(r)}} +A.aF6.prototype={ +$0(){this.a.yf()}, +$S:0} +A.aF5.prototype={ +$0(){var s=this.a +s.d=this.b +s.f.a1k(0,!0)}, +$S:0} +A.awV.prototype={ +W(){return"AutovalidateMode."+this.b}} +A.b21.prototype={ +$2(a,b){if(!a.a)a.ad(0,b)}, +$S:48} +A.Jb.prototype={ +bH(a){this.c7(a) +this.vz()}, +cR(){var s,r,q,p,o=this +o.fP() +s=o.cS$ +r=o.guh() +q=o.c +q.toString +q=A.wh(q) +o.jV$=q +p=o.tn(q,r) +if(r){o.l3(s,o.hM$) +o.hM$=!1}if(p)if(s!=null)s.t()}, +t(){var s,r=this +r.jU$.al(0,new A.b21()) +s=r.cS$ +if(s!=null)s.t() +r.cS$=null +r.bG()}} +A.oe.prototype={ +gap(){var s,r=$.b1.bf$.z.i(0,this) +if(r instanceof A.mC){s=r.k3 +s.toString +if(A.w(this).c.b(s))return s}return null}} +A.cK.prototype={ +j(a){var s,r=this,q=r.a +if(q!=null)s=" "+q +else s="" +if(A.J(r)===B.agJ)return"[GlobalKey#"+A.bU(r)+s+"]" +return"["+("#"+A.bU(r))+s+"]"}} +A.zt.prototype={ +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return this.$ti.b(b)&&b.a===this.a}, +gL(a){return A.mR(this.a)}, +j(a){var s="GlobalObjectKey",r=B.d.iT(s,">")?B.d.am(s,0,-8):s +return"["+r+" "+("#"+A.bU(this.a))+"]"}} +A.m.prototype={ +fu(){var s=this.a +return s==null?"Widget":"Widget-"+s.j(0)}, +k(a,b){if(b==null)return!1 +return this.AU(0,b)}, +gL(a){return A.B.prototype.gL.call(this,0)}} +A.aY.prototype={ +cJ(a){return new A.HS(this,B.al)}} +A.aw.prototype={ +cJ(a){return A.bKx(this)}} +A.b6Y.prototype={ +W(){return"_StateLifecycle."+this.b}} +A.aF.prototype={ +gba(){var s=this.a +s.toString +return s}, +bu(){}, +bH(a){}, +aK(a){a.$0() +this.c.f8()}, +ht(){}, +dd(){}, +t(){}, +cR(){}} +A.bN.prototype={} +A.hb.prototype={ +cJ(a){return new A.vU(this,B.al,A.w(this).h("vU"))}} +A.cb.prototype={ +cJ(a){return A.bFW(this)}} +A.b6.prototype={ +bI(a,b){}, +Dl(a){}} +A.a65.prototype={ +cJ(a){return new A.a64(this,B.al)}} +A.c2.prototype={ +cJ(a){return new A.RW(this,B.al)}} +A.ih.prototype={ +cJ(a){return A.bHo(this)}} +A.J7.prototype={ +W(){return"_ElementLifecycle."+this.b}} +A.akb.prototype={ +a9A(a){a.cc(new A.b2N(this,a)) +a.qc()}, +aKK(){var s,r,q,p=this +p.a=!0 +r=p.b +q=A.ab(r,!0,A.w(r).c) +B.b.i1(q,A.biq()) +s=q +r.af(0) +try{r=s +new A.cz(r,A.a5(r).h("cz<1>")).al(0,p.gaKI())}finally{p.a=!1}}} +A.b2N.prototype={ +$1(a){this.a.a9A(a)}, +$S:16} +A.axV.prototype={ +a_P(a){var s=this +if(a.as){s.e=!0 +return}if(!s.d&&s.a!=null){s.d=!0 +s.a.$0()}s.c.push(a) +a.as=!0}, +afI(a){try{a.$0()}finally{}}, +CL(a,b){var s,r,q,p,o,n,m,l,k=this,j={},i=b==null +if(i&&k.c.length===0)return +try{k.d=!0 +if(!i){j.a=null +k.e=!1 +try{b.$0()}finally{}}i=k.c +B.b.i1(i,A.biq()) +k.e=!1 +j.b=i.length +j.c=0 +for(o=0;o=i.length){m=k.e +m.toString}else m=!0 +if(m){B.b.i1(i,A.biq()) +o=k.e=!1 +j.b=i.length +while(!0){m=j.c +if(!(m>0?i[m-1].Q:o))break +j.c=m-1}o=m}}}finally{for(i=k.c,o=i.length,l=0;l").ak(f.y[1]),h=new A.bt(J.az(h.a),h.b,f.h("bt<1,2>")),f=f.y[1];h.H();){q=h.a +if(q==null)q=f.a(q) +if(!a1.G(0,q)){q.a=null +q.yX() +p=m.f.b +if(q.r===B.eZ){q.ht() +q.cc(A.bcd())}p.b.E(0,q)}}return e}, +Nb(a,b,c){return this.aiH(a,b,c,null)}, +hA(a,b){var s,r,q,p=this +p.a=a +p.c=b +p.r=B.eZ +s=a!=null +if(s){r=a.d +r===$&&A.c();++r}else r=1 +p.d=r +if(s)p.f=a.f +q=p.gba().a +if(q instanceof A.oe)p.f.z.u(0,q,p) +p.T_() +p.TK()}, +a8(a,b){this.e=b}, +aiO(a,b){new A.aDd(b).$1(a)}, +FL(a){this.c=a}, +a9R(a){var s=a+1,r=this.d +r===$&&A.c() +if(r")),s=s.c;p.H();){r=p.d;(r==null?s.a(r):r).y2.P(0,q)}q.x=null +q.r=B.aiH}, +qc(){var s=this,r=s.e,q=r==null?null:r.a +if(q instanceof A.oe){r=s.f.z +if(J.f(r.i(0,q),s))r.P(0,q)}s.y=s.e=null +s.r=B.HU}, +gC(a){var s=this.gaF() +if(s instanceof A.Y)return s.gC(0) +return null}, +tz(a,b){var s=this.y;(s==null?this.y=A.ek(t.IS):s).E(0,a) +a.ZG(this,b) +return t.WB.a(a.gba())}, +Ke(a){return this.tz(a,null)}, +bh(a){var s=this.x,r=s==null?null:s.i(0,A.ay(a)) +if(r!=null)return a.a(this.tz(r,null)) +this.z=!0 +return null}, +Nx(a){var s=this.k9(a) +s=s==null?null:s.gba() +return a.h("0?").a(s)}, +k9(a){var s=this.x +return s==null?null:s.i(0,A.ay(a))}, +TK(){var s=this.a +this.b=s==null?null:s.b}, +T_(){var s=this.a +this.x=s==null?null:s.x}, +WJ(a){var s,r=this.a +while(!0){s=r==null +if(!(!s&&A.J(r.gba())!==A.ay(a)))break +r=r.a}s=s?null:r.gba() +return a.h("0?").a(s)}, +tP(a){var s,r,q=this.a +for(;s=q==null,!s;){if(q instanceof A.mC){r=q.k3 +r.toString +r=a.b(r)}else r=!1 +if(r)break +q=q.a}t.lE.a(q) +if(s)s=null +else{s=q.k3 +s.toString}return a.h("0?").a(s)}, +zh(a){var s=this.a +for(;s!=null;){if(s instanceof A.bX&&a.b(s.gaF()))return a.a(s.gaF()) +s=s.a}return null}, +nJ(a){var s=this.a +while(!0){if(!(s!=null&&a.$1(s)))break +s=s.a}}, +cR(){this.f8()}, +hI(a){var s=this.b +if(s!=null)s.hI(a)}, +fu(){var s=this.e +s=s==null?null:s.fu() +return s==null?"#"+A.bU(this)+"(DEFUNCT)":s}, +f8(){var s=this +if(s.r!==B.eZ)return +if(s.Q)return +s.Q=!0 +s.f.a_P(s)}, +ME(a){var s +if(this.r===B.eZ)s=!this.Q&&!a +else s=!0 +if(s)return +try{this.nu()}finally{}}, +ahq(){return this.ME(!1)}, +nu(){this.Q=!1}, +$iah:1} +A.aD9.prototype={ +$1(a){this.a.a=a}, +$S:16} +A.aD7.prototype={ +$1(a){this.a.push(a) +return!0}, +$S:20} +A.aD6.prototype={ +$1(a){var s=null +return A.pd("",a,!0,B.cC,s,!1,s,s,B.bG,s,!1,!0,!0,B.nx,s,t.U)}, +$S:689} +A.aDb.prototype={ +$1(a){var s=this.a.G(0,a) +return s?null:a}, +$S:690} +A.aDc.prototype={ +$2(a,b){var s=this.a +return s!=null?s[a]:new A.vj(b,a,t.Bc)}, +$S:691} +A.aDd.prototype={ +$1(a){var s +a.FL(this.a) +s=a.gzX() +if(s!=null)this.$1(s)}, +$S:16} +A.aD4.prototype={ +$1(a){a.a9R(this.a)}, +$S:16} +A.aD8.prototype={ +$1(a){a.yX()}, +$S:16} +A.aD5.prototype={ +$1(a){a.CB(this.a)}, +$S:16} +A.a3m.prototype={ +bA(a){var s=this.d,r=new A.QB(s,new A.bs(),A.aX(t.v)) +r.by() +r.asN(s) +return r}} +A.LR.prototype={ +gzX(){return this.ax}, +hA(a,b){this.Ou(a,b) +this.Qr()}, +Qr(){this.ahq()}, +nu(){var s,r,q,p,o,n,m=this,l=null +try{l=m.cY() +m.gba()}catch(o){s=A.b2(o) +r=A.bC(o) +n=A.a3n(A.bi4(A.cn("building "+m.j(0)),s,r,new A.azH())) +l=n}finally{m.uK()}try{m.ax=m.h6(m.ax,l,m.c)}catch(o){q=A.b2(o) +p=A.bC(o) +n=A.a3n(A.bi4(A.cn("building "+m.j(0)),q,p,new A.azI())) +l=n +m.ax=m.h6(null,l,m.c)}}, +cc(a){var s=this.ax +if(s!=null)a.$1(s)}, +lB(a){this.ax=null +this.mI(a)}} +A.azH.prototype={ +$0(){var s=A.b([],t._) +return s}, +$S:24} +A.azI.prototype={ +$0(){var s=A.b([],t._) +return s}, +$S:24} +A.HS.prototype={ +cY(){return t.Iz.a(this.gba()).ab(this)}, +a8(a,b){this.xa(0,b) +this.ME(!0)}} +A.mC.prototype={ +cY(){return this.k3.ab(this)}, +Qr(){this.k3.bu() +this.k3.cR() +this.amZ()}, +nu(){var s=this +if(s.k4){s.k3.cR() +s.k4=!1}s.an_()}, +a8(a,b){var s,r,q,p=this +p.xa(0,b) +s=p.k3 +r=s.a +r.toString +q=p.e +q.toString +s.a=t.d2.a(q) +s.bH(r) +p.ME(!0)}, +dd(){this.AS() +this.k3.dd() +this.f8()}, +ht(){this.k3.ht() +this.a0J()}, +qc(){var s=this +s.AT() +s.k3.t() +s.k3=s.k3.c=null}, +tz(a,b){return this.GK(a,b)}, +Ke(a){return this.tz(a,null)}, +cR(){this.Ot() +this.k4=!0}} +A.Qd.prototype={ +cY(){return t.yH.a(this.gba()).b}, +a8(a,b){var s=this,r=t.yH.a(s.gba()) +s.xa(0,b) +s.FM(r) +s.ME(!0)}, +FM(a){this.u1(a)}} +A.vU.prototype={ +a2f(a){var s=this.ax +if(s!=null)new A.aMT(a).$1(s)}, +u1(a){var s=this.e +s.toString +this.a2f(this.$ti.h("hb<1>").a(s))}} +A.aMT.prototype={ +$1(a){var s +if(a instanceof A.bX)this.a.vi(a.gaF()) +else if(a.gzX()!=null){s=a.gzX() +s.toString +this.$1(s)}}, +$S:16} +A.jG.prototype={ +T_(){var s=this,r=s.a,q=r==null?null:r.x +if(q==null)q=B.a4c +s.x=q.aY_(0,A.J(s.gba()),s)}, +a00(a,b){this.y2.u(0,a,b)}, +ZG(a,b){this.a00(a,null)}, +Y6(a,b){b.cR()}, +FM(a){if(t.WB.a(this.gba()).el(a))this.aoy(a)}, +u1(a){var s,r,q +for(s=this.y2,r=A.w(s),s=new A.Jh(s,s.PI(),r.h("Jh<1>")),r=r.c;s.H();){q=s.d +this.Y6(a,q==null?r.a(q):q)}}} +A.bX.prototype={ +gaF(){var s=this.ax +s.toString +return s}, +gzX(){return null}, +axn(){var s,r=this.a,q=r +while(!0){s=q==null +if(!(!s&&!(q instanceof A.bX)))break +r=s?null:q.a +q=r}return t.p5.a(q)}, +axm(){var s=this.a,r=A.b([],t.OM),q=s +while(!0){if(!(q!=null&&!(q instanceof A.bX)))break +if(q instanceof A.vU)r.push(q) +s=q.a +q=s}return r}, +hA(a,b){var s=this +s.Ou(a,b) +s.ax=t.F5.a(s.gba()).bA(s) +s.CB(b) +s.uK()}, +a8(a,b){var s=this +s.xa(0,b) +t.F5.a(s.gba()).bI(s,s.gaF()) +s.uK()}, +nu(){var s=this +t.F5.a(s.gba()).bI(s,s.gaF()) +s.uK()}, +ht(){this.a0J()}, +qc(){var s=this,r=t.F5.a(s.gba()) +s.AT() +r.Dl(s.gaF()) +s.ax.t() +s.ax=null}, +FL(a){var s,r=this,q=r.c +r.anp(a) +s=r.ch +if(s!=null)s.mr(r.gaF(),q,r.c)}, +CB(a){var s,r,q,p,o,n=this +n.c=a +s=n.ch=n.axn() +if(s!=null)s.mo(n.gaF(),a) +r=n.axm() +for(s=r.length,q=t.IL,p=0;p"))}, +mo(a,b){var s=this.gaF(),r=b.a +s.Xn(0,a,r==null?null:r.gaF())}, +mr(a,b,c){var s=this.gaF(),r=c.a +s.EE(a,r==null?null:r.gaF())}, +nB(a,b){this.gaF().P(0,a)}, +cc(a){var s,r,q,p,o=this.k4 +o===$&&A.c() +s=o.length +r=this.ok +q=0 +for(;q") +i.d=new A.bz(t.ve.a(p),new A.h_(new A.n2(new A.ib(n,1,B.z)),o,m),m.h("bz"))}}if(s)s=!(isFinite(q.a)&&isFinite(q.b)) +else s=!0 +i.w=s}, +x3(a,b){var s,r,q,p=this +p.f=b +switch(b.a.a){case 1:s=p.e +s===$&&A.c() +s.sbs(0,new A.oy(b.giM(0),new A.bW(A.b([],t.x8),t.jc),0)) +r=!1 +break +case 0:s=p.e +s===$&&A.c() +s.sbs(0,b.giM(0)) +r=!0 +break +default:r=null}s=p.f +p.b=s.D5(s.gael(),p.f.gMZ()) +p.f.f.Of(r) +p.f.r.Oe() +s=p.f +q=A.vP(p.gau8(),!1,!1) +p.r=q +s.b.Lj(0,q) +q=p.e +q===$&&A.c() +q.cH() +q=q.e8$ +q.b=!0 +q.a.push(p.gzK())}, +j(a){var s,r,q,p,o,n=this.f +n===$&&A.c() +s=n.d.b +r=n.e.b +n=A.j(n.f.a.c) +q=s.j(0) +p=r.j(0) +o=this.e +o===$&&A.c() +return"HeroFlight(for: "+n+", from: "+q+", to: "+p+" "+A.j(o.c)+")"}} +A.b2x.prototype={ +$2(a,b){var s,r,q,p,o=null,n=this.a,m=n.b +m===$&&A.c() +s=n.e +s===$&&A.c() +s=m.az(0,s.gm(0)) +s.toString +m=n.f +m===$&&A.c() +m=m.c +r=s.gae(s) +q=s.gaj(s) +p=s.gaH(s) +return A.kA(m.b-s.gaQ(s),A.zF(A.li(!1,b,n.d),!0,o),o,o,r,m.a-p,q,o)}, +$S:704} +A.b2y.prototype={ +$0(){var s,r=this.a +r.x=!1 +this.b.cx.ad(0,this) +s=r.e +s===$&&A.c() +r.a70(s.gcz(0))}, +$S:0} +A.NH.prototype={ +Dk(){var s,r,q,p=$.p2() +A.ES(this) +if(p.a.get(this).cx.a)return +p=this.b.gbm(0) +s=A.w(p).h("bg") +r=A.ab(new A.bg(p,new A.aGA(),s),!1,s.h("z.E")) +for(p=r.length,q=0;q"),a=t.k2;s.H();){a0=s.ga1(s) +a1=a0.a +a2=a0.b +a3=k.i(0,a1) +a4=j.i(0,a1) +if(a3==null)a5=null +else{a0=o.id +if(a0==null)a0=A.X(A.ad("RenderBox was not laid out: "+A.J(o).j(0)+"#"+A.bU(o))) +a3.a.toString +a2.a.toString +a5=new A.b2w(b2,q,a0,b0,b1,a2,a3,p,r,b3,a4!=null)}if(a5!=null&&a5.gds()){k.P(0,a1) +if(a4!=null){a0=a4.f +a0===$&&A.c() +a6=a0.a +if(a6===B.eo&&a5.a===B.ep){a0=a4.e +a0===$&&A.c() +a0.sbs(0,new A.oy(a5.giM(0),new A.bW(A.b([],h),g),0)) +a0=a4.b +a0===$&&A.c() +a4.b=new A.R3(a0,a0.b,a0.a,a)}else{a6=a6===B.ep&&a5.a===B.eo +a7=a4.e +if(a6){a7===$&&A.c() +a0=a5.giM(0) +a6=a4.f.giM(0).gm(0) +a7.sbs(0,new A.bz(c.a(a0),new A.br(a6,1,d),b)) +a0=a4.f +a6=a0.f +a7=a5.r +if(a6!==a7){a6.z3(!0) +a7.Oe() +a0=a4.f +a6=a4.b +a6===$&&A.c() +a4.b=a0.D5(a6.b,a5.gMZ())}else{a6=a4.b +a6===$&&A.c() +a4.b=a0.D5(a6.b,a6.a)}}else{a6=a4.b +a6===$&&A.c() +a7===$&&A.c() +a4.b=a0.D5(a6.az(0,a7.gm(0)),a5.gMZ()) +a4.c=null +a0=a5.a +a6=a4.e +if(a0===B.ep)a6.sbs(0,new A.oy(a5.giM(0),new A.bW(A.b([],h),g),0)) +else a6.sbs(0,a5.giM(0)) +a4.f.f.z3(!0) +a4.f.r.z3(!0) +a5.f.Of(a0===B.eo) +a5.r.Oe() +a0=a4.r.r.gap() +if(a0!=null)a0.HM()}}a4.f=a5}else{a0=new A.tY(i,B.he) +a6=A.b([],h) +a7=new A.bW(a6,g) +a8=new A.B3(a7,new A.bW(A.b([],f),e),0) +a8.a=B.Y +a8.b=0 +a8.cH() +a7.b=!0 +a6.push(a0.ga4X()) +a0.e=a8 +a0.x3(0,a5) +j.u(0,a1,a0)}}else if(a4!=null)a4.w=!0}for(s=k.gbm(k),s=s.gar(s);s.H();)s.ga1(s).adG()}, +azD(a){var s=a.f +s===$&&A.c() +s=this.b.P(0,s.f.a.c) +if(s!=null)s.t()}, +avY(a,b,c,d,e){var s=t.rA.a(e.gba()),r=A.e8(e,null),q=A.e8(d,null) +if(r==null||q==null)return s.e +return A.mX(b,new A.aGy(r,c,q.r,r.r,b,s),null)}, +t(){var s,r,q +for(s=this.b.gbm(0),r=A.w(s),r=r.h("@<1>").ak(r.y[1]),s=new A.bt(J.az(s.a),s.b,r.h("bt<1,2>")),r=r.y[1];s.H();){q=s.a;(q==null?r.a(q):q).t()}}} +A.aGA.prototype={ +$1(a){var s=a.f +s===$&&A.c() +if(s.y)if(s.a===B.ep){s=a.e +s===$&&A.c() +s=s.gcz(0)===B.Y}else s=!1 +else s=!1 +return s}, +$S:707} +A.aGz.prototype={ +$1(a){var s=this,r=s.b +if(r.a==null||s.c.a==null)return +s.a.a8D(r,s.c,s.d,s.e)}, +$S:3} +A.aGy.prototype={ +$2(a,b){var s=this,r=s.c,q=s.d,p=s.e +r=s.b===B.eo?new A.MC(r,q).az(0,p.gm(p)):new A.MC(q,r).az(0,p.gm(p)) +return A.Ak(s.f.e,s.a.Ui(r))}, +$S:708} +A.zC.prototype={ +ab(a){var s,r,q,p,o,n,m,l,k,j,i,h,g=null,f=a.bh(t.I) +f.toString +s=f.w +r=A.bn4(a) +f=this.d +q=f==null?r.a:f +if(q==null)q=14 +if(r.x===!0){f=A.e8(a,B.d6) +f=f==null?g:f.geS() +p=q*(f==null?B.aq:f).a}else p=q +o=r.b +n=r.c +m=r.d +l=r.e +k=this.c +j=r.gh5(0) +if(j==null)j=1 +i=this.x +if(i==null){f=r.f +f.toString +i=f}if(j!==1)i=A.S(B.c.ai(255*((i.gm(i)>>>24&255)/255*j)),i.gm(i)>>>16&255,i.gm(i)>>>8&255,i.gm(i)&255) +f=A.b([],t.uf) +if(o!=null)f.push(new A.pm("FILL",o)) +if(n!=null)f.push(new A.pm("wght",n)) +if(m!=null)f.push(new A.pm("GRAD",m)) +if(l!=null)f.push(new A.pm("opsz",l)) +h=A.bgt(g,g,B.aal,g,g,!0,g,A.cS(g,g,g,A.ep(g,g,i,g,g,g,g,g,"MaterialIcons",g,g,p,g,f,g,g,1,!1,B.U,g,g,g,g,r.w,g,g),A.cs(k.a)),B.aA,s,g,B.aq,B.aM) +if(k.d)switch(s.a){case 0:f=new A.by(new Float64Array(16)) +f.ci() +f.mD(0,-1,1,1) +h=A.adO(B.a5,h,g,f,!1) +break +case 1:break}return A.dg(g,g,new A.uZ(!0,A.fF(A.l8(h,g,g),p,p),g),!1,g,g,!1,!1,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g)}} +A.fO.prototype={ +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.fO&&b.a===this.a&&b.d===this.d&&A.eu(null,null)}, +gL(a){return A.a6(this.a,"MaterialIcons",null,this.d,A.bM(B.Zz),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"IconData(U+"+B.d.k_(B.f.hZ(this.a,16).toUpperCase(),5,"0")+")"}} +A.zD.prototype={ +el(a){return!this.w.k(0,a.w)}, +wE(a,b,c){return A.NP(c,this.w,null)}} +A.aH6.prototype={ +$1(a){return A.NP(this.c,A.bn3(a).bT(this.b),this.a)}, +$S:709} +A.fr.prototype={ +JT(a,b,c,d,e,f,g,h,i){var s=this,r=h==null?s.a:h,q=c==null?s.b:c,p=i==null?s.c:i,o=d==null?s.d:d,n=f==null?s.e:f,m=b==null?s.f:b,l=e==null?s.gh5(0):e,k=g==null?s.w:g +return new A.fr(r,q,p,o,n,m,l,k,a==null?s.x:a)}, +bT(a){return this.JT(a.x,a.f,a.b,a.d,a.gh5(0),a.e,a.w,a.a,a.c)}, +aG(a){return this}, +gh5(a){var s=this.r +if(s==null)s=null +else s=A.U(s,0,1) +return s}, +k(a,b){var s=this +if(b==null)return!1 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.fr&&b.a==s.a&&b.b==s.b&&b.c==s.c&&b.d==s.d&&b.e==s.e&&J.f(b.f,s.f)&&b.gh5(0)==s.gh5(0)&&A.eu(b.w,s.w)&&b.x==s.x}, +gL(a){var s=this,r=s.gh5(0),q=s.w +q=q==null?null:A.bM(q) +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,r,q,s.x,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.ak3.prototype={} +A.vf.prototype={ +b5(){return new A.Vr(B.p)}} +A.Vr.prototype={ +bu(){var s=this +s.bN() +$.b1.fo$.push(s) +s.z=new A.a2y(s,t.uZ)}, +t(){var s,r=this +$.b1.oN(r) +r.aJR() +s=r.at +if(s!=null)s.t() +s=r.z +s===$&&A.c() +s.a=null +r.S9(null) +r.bG()}, +cR(){var s,r=this +r.aL1() +r.a7I() +s=r.c +s.toString +if(A.bh2(s))r.aCB() +else r.a8L(!0) +r.fP()}, +bH(a){var s=this +s.c7(a) +if(s.r)s.a.toString +if(!s.a.c.k(0,a.c))s.a7I()}, +aL1(){var s=this.c +s.toString +s=A.e8(s,B.ajq) +s=s==null?null:s.Q +if(s==null){s=$.abf.tM$ +s===$&&A.c() +s=(s.a&2)!==0}this.w=s}, +a7I(){var s,r,q,p,o=this,n=o.z +n===$&&A.c() +s=o.a +r=s.c +q=o.c +q.toString +p=s.r +if(p!=null&&s.w!=null){p.toString +s=s.w +s.toString +s=new A.Q(p,s)}else s=null +o.aLo(new A.Rl(n,r,t.JE).aG(A.Kg(q,s)))}, +ayg(a){var s=this,r=s.ax +if(r==null||a){s.as=s.Q=null +s.a.toString +r=s.ax=new A.kq(s.gazO(),null,null)}r.toString +return r}, +Ht(){return this.ayg(!1)}, +azP(a,b){this.aK(new A.b2J(this,a,b))}, +S9(a){var s=this.e +$.cN.dP$.push(new A.b2K(s)) +this.e=a}, +aLo(a){var s,r,q=this,p=q.d +if(p==null)s=null +else{s=p.a +if(s==null)s=p}r=a.a +if(s===(r==null?a:r))return +if(q.r){p.toString +p.ad(0,q.Ht())}q.a.toString +q.aK(new A.b2L(q)) +q.aK(new A.b2M(q)) +q.d=a +if(q.r)a.an(0,q.Ht())}, +aCB(){var s,r=this +if(r.r)return +s=r.d +s.toString +s.an(0,r.Ht()) +s=r.at +if(s!=null)s.t() +r.at=null +r.r=!0}, +a8L(a){var s,r,q=this +if(!q.r)return +if(a)if(q.at==null){s=q.d +s=(s==null?null:s.a)!=null}else s=!1 +else s=!1 +if(s){s=q.d.a +if(s.x)A.X(A.ad(u.V)) +r=new A.Fm(s) +r.GR(s) +q.at=r}s=q.d +s.toString +s.ad(0,q.Ht()) +q.r=!1}, +aJR(){return this.a8L(!1)}, +ab(a){var s,r,q,p,o,n,m,l=this,k=null +if(l.Q!=null)l.a.toString +s=l.e +r=s==null +q=r?k:s.a +p=r?k:s.c +o=l.a +n=o.r +o=o.w +s=r?k:s.b +if(s==null)s=1 +r=l.w +r===$&&A.c() +m=new A.a9E(q,p,n,o,s,k,k,B.fi,k,k,B.a5,B.dL,k,!1,r,!1,k) +m=A.dg(k,k,m,!1,k,k,!1,!1,k,k,k,!0,"",k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k) +return m}} +A.b2J.prototype={ +$0(){var s,r=this.a +r.S9(this.b) +r.as=r.Q=r.f=null +s=r.x +r.x=s==null?0:s+1 +r.y=B.cE.nR(r.y,this.c)}, +$S:0} +A.b2K.prototype={ +$1(a){var s=this.a +if(s!=null)s.a.t() +return null}, +$S:3} +A.b2L.prototype={ +$0(){this.a.S9(null)}, +$S:0} +A.b2M.prototype={ +$0(){var s=this.a +s.x=s.f=null +s.y=!1}, +$S:0} +A.aty.prototype={} +A.a1Z.prototype={ +iy(a){var s=A.aAE(this.a,this.b,a) +s.toString +return s}} +A.MC.prototype={ +iy(a){var s=A.a35(this.a,this.b,a) +s.toString +return s}} +A.yW.prototype={ +iy(a){var s=A.hP(this.a,this.b,a) +s.toString +return s}} +A.y6.prototype={ +iy(a){return A.qL(this.a,this.b,a)}} +A.Cb.prototype={ +iy(a){var s=A.cl(this.a,this.b,a) +s.toString +return s}} +A.a5d.prototype={} +A.Fo.prototype={ +guT(){var s,r=this,q=r.d +if(q===$){s=A.cW(null,r.a.d,null,null,r) +r.d!==$&&A.N() +r.d=s +q=s}return q}, +gij(){var s,r=this,q=r.e +if(q===$){s=r.guT() +q=r.e=A.dP(r.a.c,s,null)}return q}, +bu(){var s,r=this +r.bN() +s=r.guT() +s.cH() +s=s.eg$ +s.b=!0 +s.a.push(new A.aHu(r)) +r.a3k() +r.V2()}, +bH(a){var s,r=this +r.c7(a) +if(r.a.c!==a.c){r.gij().t() +s=r.guT() +r.e=A.dP(r.a.c,s,null)}r.guT().e=r.a.d +if(r.a3k()){r.tS(new A.aHt(r)) +s=r.guT() +s.sm(0,0) +s.d5(0) +r.V2()}}, +t(){this.gij().t() +this.guT().t() +this.aqg()}, +aLr(a,b){if(a==null)return +a.sTN(a.az(0,this.gij().gm(0))) +a.si7(0,b)}, +a3k(){var s={} +s.a=!1 +this.tS(new A.aHs(s,this)) +return s.a}, +V2(){}} +A.aHu.prototype={ +$1(a){switch(a.a){case 3:this.a.a.toString +break +case 0:case 1:case 2:break}}, +$S:5} +A.aHt.prototype={ +$3(a,b,c){this.a.aLr(a,b) +return a}, +$S:219} +A.aHs.prototype={ +$3(a,b,c){var s +if(b!=null){if(a==null)a=c.$1(b) +s=a.b +if(!J.f(b,s==null?a.a:s))this.a.a=!0 +else if(a.b==null)a.si7(0,a.a)}else a=null +return a}, +$S:219} +A.Ds.prototype={ +bu(){this.anM() +var s=this.guT() +s.cH() +s=s.e8$ +s.b=!0 +s.a.push(this.gayF())}, +ayG(){this.aK(new A.awe())}} +A.awe.prototype={ +$0(){}, +$S:0} +A.Kz.prototype={ +b5(){return new A.afh(null,null,B.p)}} +A.afh.prototype={ +tS(a){this.CW=t.Om.a(a.$3(this.CW,this.a.r,new A.aYD()))}, +ab(a){var s=this.CW +s.toString +return new A.cu(J.bka(s.az(0,this.gij().gm(0)),B.X,B.tG),this.a.w,null)}} +A.aYD.prototype={ +$1(a){return new A.yW(t.A0.a(a),null)}, +$S:712} +A.KB.prototype={ +b5(){return new A.afj(null,null,B.p)}} +A.afj.prototype={ +tS(a){var s,r=this,q=null,p=t.ir +r.CW=p.a(a.$3(r.CW,r.a.w,new A.aYI())) +r.cx=p.a(a.$3(r.cx,r.a.x,new A.aYJ())) +s=r.cy +r.a.toString +r.cy=p.a(a.$3(s,q,new A.aYK())) +s=r.db +r.a.toString +r.db=p.a(a.$3(s,q,new A.aYL())) +s=r.dx +r.a.toString +r.dx=p.a(a.$3(s,q,new A.aYM())) +s=r.dy +r.a.toString +r.dy=p.a(a.$3(s,q,new A.aYN()))}, +ab(a){var s,r,q,p,o,n=this,m=null,l=n.CW +l=l==null?m:l.az(0,n.gij().gm(0)) +s=n.cx +s=s==null?m:s.az(0,n.gij().gm(0)) +r=n.cy +r=r==null?m:r.az(0,n.gij().gm(0)) +q=n.db +q=q==null?m:q.az(0,n.gij().gm(0)) +p=n.dx +p=p==null?m:p.az(0,n.gij().gm(0)) +o=n.dy +o=o==null?m:o.az(0,n.gij().gm(0)) +return A.kA(q,n.a.r,o,m,l,r,s,p)}} +A.aYI.prototype={ +$1(a){return new A.br(A.oZ(a),null,t.Y)}, +$S:31} +A.aYJ.prototype={ +$1(a){return new A.br(A.oZ(a),null,t.Y)}, +$S:31} +A.aYK.prototype={ +$1(a){return new A.br(A.oZ(a),null,t.Y)}, +$S:31} +A.aYL.prototype={ +$1(a){return new A.br(A.oZ(a),null,t.Y)}, +$S:31} +A.aYM.prototype={ +$1(a){return new A.br(A.oZ(a),null,t.Y)}, +$S:31} +A.aYN.prototype={ +$1(a){return new A.br(A.oZ(a),null,t.Y)}, +$S:31} +A.Ky.prototype={ +b5(){return new A.afg(null,null,B.p)}} +A.afg.prototype={ +tS(a){this.z=t.ir.a(a.$3(this.z,this.a.w,new A.aYC()))}, +V2(){var s=this.gij(),r=this.z +r.toString +this.Q=new A.bz(t.ve.a(s),r,A.w(r).h("bz"))}, +ab(a){var s=this.Q +s===$&&A.c() +return A.li(!1,this.a.r,s)}} +A.aYC.prototype={ +$1(a){return new A.br(A.oZ(a),null,t.Y)}, +$S:31} +A.Kw.prototype={ +b5(){return new A.aff(null,null,B.p)}} +A.aff.prototype={ +tS(a){this.CW=t.Dh.a(a.$3(this.CW,this.a.w,new A.aYB()))}, +ab(a){var s=null,r=this.CW +r.toString +r=r.az(0,this.gij().gm(0)) +return A.r2(this.a.r,s,s,B.cI,!0,r,s,s,B.aM)}} +A.aYB.prototype={ +$1(a){return new A.Cb(t.em.a(a),null)}, +$S:713} +A.KA.prototype={ +b5(){return new A.afi(null,null,B.p)}} +A.afi.prototype={ +tS(a){var s=this,r=s.CW +s.a.toString +s.CW=t.xH.a(a.$3(r,B.aP,new A.aYE())) +s.cx=t.ir.a(a.$3(s.cx,s.a.z,new A.aYF())) +r=t.YJ +s.cy=r.a(a.$3(s.cy,s.a.Q,new A.aYG())) +s.db=r.a(a.$3(s.db,s.a.at,new A.aYH()))}, +ab(a){var s,r,q,p,o=this,n=o.a,m=n.w +n=n.x +s=o.CW +s.toString +s=s.az(0,o.gij().gm(0)) +r=o.cx +r.toString +r=r.az(0,o.gij().gm(0)) +q=o.a.Q +p=o.db +p.toString +p=p.az(0,o.gij().gm(0)) +p.toString +return new A.a8H(m,n,s,r,q,p,o.a.r,null)}} +A.aYE.prototype={ +$1(a){return new A.y6(t.m_.a(a),null)}, +$S:714} +A.aYF.prototype={ +$1(a){return new A.br(A.oZ(a),null,t.Y)}, +$S:31} +A.aYG.prototype={ +$1(a){return new A.fp(t.G.a(a),null)}, +$S:103} +A.aYH.prototype={ +$1(a){return new A.fp(t.G.a(a),null)}, +$S:103} +A.Jk.prototype={ +t(){var s=this,r=s.dQ$ +if(r!=null)r.ad(0,s.gmQ()) +s.dQ$=null +s.bG()}, +dd(){this.eD() +this.ee() +this.mR()}} +A.ps.prototype={ +cJ(a){return new A.NT(A.jF(null,null,null,t.U,t.X),this,B.al,A.w(this).h("NT"))}} +A.NT.prototype={ +ZG(a,b){var s=this.y2,r=this.$ti,q=r.h("bO<1>?").a(s.i(0,a)),p=q==null +if(!p&&q.gaA(q))return +if(b==null)s.u(0,a,A.ek(r.c)) +else{p=p?A.ek(r.c):q +p.E(0,r.c.a(b)) +s.u(0,a,p)}}, +Y6(a,b){var s,r=this.$ti,q=r.h("bO<1>?").a(this.y2.i(0,b)) +if(q==null)return +if(!q.gaA(q)){s=this.e +s.toString +s=r.h("ps<1>").a(s).aiM(a,q) +r=s}else r=!0 +if(r)b.cR()}} +A.pt.prototype={ +el(a){return a.f!==this.f}, +cJ(a){var s=new A.Jl(A.jF(null,null,null,t.U,t.X),this,B.al,A.w(this).h("Jl")) +this.f.an(0,s.gR5()) +return s}} +A.Jl.prototype={ +a8(a,b){var s,r,q=this,p=q.e +p.toString +s=q.$ti.h("pt<1>").a(p).f +r=b.f +if(s!==r){p=q.gR5() +s.ad(0,p) +r.an(0,p)}q.a16(0,b)}, +cY(){var s,r=this +if(r.bD){s=r.e +s.toString +r.a0P(r.$ti.h("pt<1>").a(s)) +r.bD=!1}return r.a15()}, +aBA(){this.bD=!0 +this.f8()}, +u1(a){this.a0P(a) +this.bD=!1}, +qc(){var s=this,r=s.e +r.toString +s.$ti.h("pt<1>").a(r).f.ad(0,s.gR5()) +s.AT()}} +A.ft.prototype={} +A.aHB.prototype={ +$1(a){var s,r,q +if(a.k(0,this.a))return!1 +if(a instanceof A.jG&&a.gba() instanceof A.ft){s=t.og.a(a.gba()) +r=A.J(s) +q=this.c +if(!q.G(0,r)){q.E(0,r) +this.d.push(s)}}return!0}, +$S:20} +A.a0f.prototype={} +A.tS.prototype={ +ab(a){var s,r,q,p=this.d +for(s=this.c,r=s.length,q=0;q"))}} +A.Jm.prototype={ +gaF(){return this.$ti.h("mw<1,L>").a(A.bX.prototype.gaF.call(this))}, +cc(a){var s=this.k4 +if(s!=null)a.$1(s)}, +lB(a){this.k4=null +this.mI(a)}, +hA(a,b){var s=this +s.rW(a,b) +s.$ti.h("mw<1,L>").a(A.bX.prototype.gaF.call(s)).ZE(s.ga65())}, +a8(a,b){var s,r=this,q=r.e +q.toString +s=r.$ti +s.h("r_<1>").a(q) +r.qr(0,b) +s=s.h("mw<1,L>") +s.a(A.bX.prototype.gaF.call(r)).ZE(r.ga65()) +q=s.a(A.bX.prototype.gaF.call(r)) +q.KN$=!0 +q.aB()}, +nu(){var s=this.$ti.h("mw<1,L>").a(A.bX.prototype.gaF.call(this)) +s.KN$=!0 +s.aB() +this.OG()}, +qc(){this.$ti.h("mw<1,L>").a(A.bX.prototype.gaF.call(this)).ZE(null) +this.a1h()}, +aCq(a){this.f.CL(this,new A.b3r(this,a))}, +mo(a,b){this.$ti.h("mw<1,L>").a(A.bX.prototype.gaF.call(this)).sbt(a)}, +mr(a,b,c){}, +nB(a,b){this.$ti.h("mw<1,L>").a(A.bX.prototype.gaF.call(this)).sbt(null)}} +A.b3r.prototype={ +$0(){var s,r,q,p,o,n,m,l,k=this,j=null +try{o=k.a +n=o.e +n.toString +j=o.$ti.h("r_<1>").a(n).c.$2(o,k.b) +o.e.toString}catch(m){s=A.b2(m) +r=A.bC(m) +l=A.a3n(A.bsZ(A.cn("building "+k.a.e.j(0)),s,r,new A.b3s())) +j=l}try{o=k.a +o.k4=o.h6(o.k4,j,null)}catch(m){q=A.b2(m) +p=A.bC(m) +o=k.a +l=A.a3n(A.bsZ(A.cn("building "+o.e.j(0)),q,p,new A.b3t())) +j=l +o.k4=o.h6(null,j,o.c)}}, +$S:0} +A.b3s.prototype={ +$0(){var s=A.b([],t._) +return s}, +$S:24} +A.b3t.prototype={ +$0(){var s=A.b([],t._) +return s}, +$S:24} +A.mw.prototype={ +ZE(a){if(J.f(a,this.Ws$))return +this.Ws$=a +this.aB()}} +A.vy.prototype={ +bA(a){var s=new A.WG(null,!0,null,null,new A.bs(),A.aX(t.v)) +s.by() +return s}} +A.WG.prototype={ +c1(a){return 0}, +bZ(a){return 0}, +c_(a){return 0}, +c2(a){return 0}, +dA(a){return B.x}, +cM(){var s=this,r=t.k,q=r.a(A.L.prototype.gaI.call(s)) +if(s.KN$||!r.a(A.L.prototype.gaI.call(s)).k(0,s.adU$)){s.adU$=r.a(A.L.prototype.gaI.call(s)) +s.KN$=!1 +r=s.Ws$ +r.toString +s.Lo(r,A.w(s).h("mw.0"))}r=s.a0$ +if(r!=null){r.dc(q,!0) +s.id=q.ca(s.a0$.gC(0))}else s.id=new A.Q(A.U(1/0,q.a,q.b),A.U(1/0,q.c,q.d))}, +iO(a){var s=this.a0$ +if(s!=null)return s.nL(a) +return this.GO(a)}, +dZ(a,b){var s=this.a0$ +s=s==null?null:s.dK(a,b) +return s===!0}, +aO(a,b){var s=this.a0$ +if(s!=null)a.fb(s,b)}} +A.atS.prototype={ +bc(a){var s +this.fg(a) +s=this.a0$ +if(s!=null)s.bc(a)}, +b3(a){var s +this.fh(0) +s=this.a0$ +if(s!=null)s.b3(0)}} +A.atT.prototype={} +A.JF.prototype={} +A.b9l.prototype={ +$1(a){return this.a.a=a}, +$S:131} +A.b9m.prototype={ +$1(a){return a.b}, +$S:715} +A.b9n.prototype={ +$1(a){var s,r,q,p +for(s=J.al(a),r=this.a,q=this.b,p=0;ps.b?B.eH:B.fA}, +yP(a,b,c,d,e,f,g){var s=this,r=d==null?s.a:d,q=a==null?s.b:a,p=e==null?s.geS():e,o=c==null?s.r:c,n=g==null?s.w:g,m=f==null?s.f:f,l=b==null?s.cx:b +return new A.OR(r,q,p,s.e,m,o,n,s.x,!1,s.z,s.Q,s.as,s.at,s.ax,s.ay,s.ch,s.CW,l)}, +Ui(a){var s=null +return this.yP(s,s,a,s,s,s,s)}, +aOQ(a,b){var s=null +return this.yP(s,s,a,s,s,s,b)}, +aOZ(a,b,c,d){return this.yP(null,a,b,null,null,c,d)}, +aOT(a,b){var s=null +return this.yP(s,s,s,s,s,a,b)}, +Ul(a){var s=null +return this.yP(s,s,s,s,a,s,s)}, +acp(a,b,c,d,e){return this.yP(a,null,b,c,null,d,e)}, +ahJ(a,b,c,d){var s,r,q,p,o,n,m=this,l=null +if(!(b||d||c||a))return m +s=m.r +r=b?0:l +q=d?0:l +p=c?0:l +r=s.vt(a?0:l,r,p,q) +q=m.w +p=b?Math.max(0,q.a-s.a):l +o=d?Math.max(0,q.b-s.b):l +n=c?Math.max(0,q.c-s.c):l +return m.aOQ(r,q.vt(a?Math.max(0,q.d-s.d):l,p,n,o))}, +ahN(a,b,c,d){var s=this,r=null,q=s.w,p=b?Math.max(0,q.a-s.f.a):r,o=d?Math.max(0,q.b-s.f.b):r,n=c?Math.max(0,q.c-s.f.c):r,m=s.f,l=Math.max(0,q.d-m.d) +q=q.vt(l,p,n,o) +p=b?0:r +o=d?0:r +n=c?0:r +return s.aOT(m.vt(0,p,n,o),q)}, +aYz(a){return this.ahN(a,!1,!1,!1)}, +aYx(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=d.a +if(new A.Q(a.gaH(a)-a.gae(a),a.gaQ(a)-a.gaj(a)).k(0,c)&&new A.i(a.gae(a),a.gaj(a)).k(0,B.h))return d +s=c.a-a.gaH(a) +r=c.b-a.gaQ(a) +c=d.r +q=Math.max(0,c.a-a.gae(a)) +p=Math.max(0,c.b-a.gaj(a)) +o=Math.max(0,c.c-s) +c=Math.max(0,c.d-r) +n=d.w +m=Math.max(0,n.a-a.gae(a)) +l=Math.max(0,n.b-a.gaj(a)) +k=Math.max(0,n.c-s) +n=Math.max(0,n.d-r) +j=d.f +i=Math.max(0,j.a-a.gae(a)) +h=Math.max(0,j.b-a.gaj(a)) +g=Math.max(0,j.c-s) +j=Math.max(0,j.d-r) +f=d.cx +e=A.a5(f).h("bg<1>") +return d.aOZ(A.ab(new A.bg(f,new A.aKq(a),e),!0,e.h("z.E")),new A.aS(q,p,o,c),new A.aS(i,h,g,j),new A.aS(m,l,k,n))}, +k(a,b){var s=this +if(b==null)return!1 +if(J.ai(b)!==A.J(s))return!1 +return b instanceof A.OR&&b.a.k(0,s.a)&&b.b===s.b&&b.geS().a===s.geS().a&&b.e===s.e&&b.r.k(0,s.r)&&b.w.k(0,s.w)&&b.f.k(0,s.f)&&b.x.k(0,s.x)&&b.as===s.as&&b.at===s.at&&b.ax===s.ax&&b.Q===s.Q&&b.z===s.z&&b.ay===s.ay&&b.ch===s.ch&&b.CW.k(0,s.CW)&&A.eu(b.cx,s.cx)}, +gL(a){var s=this +return A.a6(s.a,s.b,s.geS().a,s.e,s.r,s.w,s.f,!1,s.as,s.at,s.ax,s.Q,s.z,s.ay,s.ch,s.CW,A.bM(s.cx),B.a,B.a,B.a)}, +j(a){var s=this +return"MediaQueryData("+B.b.cj(A.b(["size: "+s.a.j(0),"devicePixelRatio: "+B.c.b8(s.b,1),"textScaler: "+s.geS().j(0),"platformBrightness: "+s.e.j(0),"padding: "+s.r.j(0),"viewPadding: "+s.w.j(0),"viewInsets: "+s.f.j(0),"systemGestureInsets: "+s.x.j(0),"alwaysUse24HourFormat: false","accessibleNavigation: "+s.z,"highContrast: "+s.as,"onOffSwitchLabels: "+s.at,"disableAnimations: "+s.ax,"invertColors: "+s.Q,"boldText: "+s.ay,"navigationMode: "+s.ch.b,"gestureSettings: "+s.CW.j(0),"displayFeatures: "+A.j(s.cx)],t.T),", ")+")"}} +A.aKq.prototype={ +$1(a){return this.a.wk(a.goa(a))}, +$S:202} +A.rK.prototype={ +el(a){return!this.w.k(0,a.w)}, +aiM(a,b){return b.fk(0,new A.aKr(this,a))}} +A.aKr.prototype={ +$1(a){var s,r=this +if(a instanceof A.iz)switch(a.a){case 0:s=!r.a.w.a.k(0,r.b.w.a) +break +case 1:s=r.a.w.grs(0)!==r.b.w.grs(0) +break +case 2:s=r.a.w.b!==r.b.w.b +break +case 3:s=r.a.w.geS().a!==r.b.w.geS().a +break +case 4:s=!r.a.w.geS().k(0,r.b.w.geS()) +break +case 5:s=r.a.w.e!==r.b.w.e +break +case 6:s=!r.a.w.r.k(0,r.b.w.r) +break +case 7:s=!r.a.w.f.k(0,r.b.w.f) +break +case 9:s=!r.a.w.w.k(0,r.b.w.w) +break +case 12:s=r.a.w.Q!==r.b.w.Q +break +case 13:s=r.a.w.as!==r.b.w.as +break +case 14:s=r.a.w.at!==r.b.w.at +break +case 15:s=r.a.w.ax!==r.b.w.ax +break +case 16:s=r.a.w.ay!==r.b.w.ay +break +case 17:s=r.a.w.ch!==r.b.w.ch +break +case 18:s=!r.a.w.CW.k(0,r.b.w.CW) +break +case 19:s=r.a.w.cx!==r.b.w.cx +break +case 8:s=!r.a.w.x.k(0,r.b.w.x) +break +case 11:s=r.a.w.z!==r.b.w.z +break +case 10:s=!1 +break +default:s=null}else s=!1 +return s}, +$S:719} +A.a7s.prototype={ +W(){return"NavigationMode."+this.b}} +A.VR.prototype={ +b5(){return new A.ali(B.p)}} +A.ali.prototype={ +bu(){this.bN() +$.b1.fo$.push(this)}, +cR(){this.fP() +this.aL8() +this.C9()}, +bH(a){var s,r=this +r.c7(a) +s=r.a +s.toString +if(r.e==null||a.c!==s.c)r.C9()}, +aL8(){var s,r=this +r.a.toString +s=r.c +s.toString +s=A.e8(s,null) +r.d=s +r.e=null}, +C9(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null,c=e.a.c,b=e.d,a=c.gnv(),a0=$.cF(),a1=a0.d +if(a1==null){a1=self.window.devicePixelRatio +if(a1===0)a1=1}a1=a.b1(0,a1) +a=a0.d +if(a==null){a=self.window.devicePixelRatio +if(a===0)a=1}s=b==null +r=s?d:b.geS().a +if(r==null)r=c.b.c.e +q=r===1?B.aq:new A.k2(r) +p=s?d:b.e +if(p==null)p=c.b.c.d +o=a0.d +if(o==null){o=self.window.devicePixelRatio +if(o===0)o=1}o=A.aCk(B.fX,o) +n=a0.d +if(n==null){n=self.window.devicePixelRatio +if(n===0)n=1}n=A.aCk(B.fX,n) +m=c.ch +l=a0.d +if(l==null){l=self.window.devicePixelRatio +if(l===0)l=1}l=A.aCk(m,l) +a0=a0.d +if(a0==null){a0=self.window.devicePixelRatio +if(a0===0)a0=1}a0=A.aCk(B.fX,a0) +m=s?d:b.z +if(m==null)m=(c.b.c.a.a&1)!==0 +k=s?d:b.Q +if(k==null)k=(c.b.c.a.a&2)!==0 +j=s?d:b.ax +if(j==null)j=(c.b.c.a.a&4)!==0 +i=s?d:b.ay +if(i==null)i=(c.b.c.a.a&8)!==0 +h=s?d:b.as +if(h==null)h=(c.b.c.a.a&32)!==0 +g=s?d:b.at +c=g==null?(c.b.c.a.a&64)!==0:g +g=s&&d +b=s?d:b.ch +if(b==null)b=B.fx +f=new A.OR(a1,a,q,p,l,o,n,a0,g===!0,m,k,h,c,j,i,b,new A.a2d(d),B.ZL) +if(!f.k(0,e.e))e.aK(new A.b41(e,f))}, +UR(){this.C9()}, +ad3(){if(this.d==null)this.C9()}, +ad2(){if(this.d==null)this.C9()}, +t(){$.b1.oN(this) +this.bG()}, +ab(a){var s=this.e +s.toString +return A.Ak(this.a.e,s)}} +A.b41.prototype={ +$0(){this.a.e=this.b}, +$S:0} +A.atC.prototype={} +A.a6X.prototype={ +ab(a){var s,r,q,p,o,n,m,l,k,j=this,i=null +switch(A.ci().a){case 1:case 3:case 5:s=!1 +break +case 0:case 2:case 4:s=!0 +break +default:s=i}r=j.d&&s +q=new A.aKO(j,a) +p=r&&j.r!=null?q:i +o=r&&j.r!=null?q:i +n=r?j.r:i +if(r&&j.r!=null){m=a.bh(t.I) +m.toString +m=m.w}else m=i +l=j.c +k=A.dg(i,i,A.pK(new A.lW(B.ul,l==null?i:new A.uL(l,i,i),i),B.cH,i,i,i,i),!1,i,i,!1,!1,i,i,i,i,n,i,i,i,i,i,i,i,i,o,i,i,p,j.x,i,i,i,i,i,m,i) +return A.bCb(new A.uZ(!r,new A.alr(k,q,i),i))}} +A.aKO.prototype={ +$0(){if(this.a.d)A.vM(this.b,!1).aV2(null) +else A.acO(B.a9N)}, +$S:0} +A.ZX.prototype={ +ab(a){var s=t.Bs.a(this.c) +return A.bfR(!0,null,s.gm(s),this.e,null,this.f,null)}} +A.IS.prototype={ +mp(a){if(this.ac==null)return!1 +return this.xc(a)}, +aeB(a){}, +aeC(a,b){var s=this.ac +if(s!=null)this.dr("onAnyTapUp",s)}, +L3(a,b,c){}} +A.afs.prototype={ +acb(){var s=t.S,r=A.ek(s) +return new A.IS(B.b2,18,B.dK,A.D(s,t.SP),r,null,null,A.Dd(),A.D(s,t.Au))}, +aeZ(a){a.ac=this.a}} +A.alr.prototype={ +ab(a){return new A.lv(this.c,A.b3([B.ahj,new A.afs(this.d)],t.B,t.xR),B.b9,!1,null)}} +A.Hk.prototype={ +W(){return"RoutePopDisposition."+this.b}} +A.eA.prototype={ +w3(){}, +UY(){var s=A.bh1() +s.cu(new A.aQN(this),t.H) +return s}, +UP(){var s=this.a +if(s==null)s=null +else{s.a.toString +s=!0}if(s===!0)A.bh1().cu(new A.aQM(this),t.H)}, +aPW(a){}, +nK(){var s=0,r=A.r(t.oj),q,p=this +var $async$nK=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:q=p.gXx()?B.Fr:B.l1 +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$nK,r)}, +gwq(){return this.gXx()?B.Fr:B.l1}, +vy(a){this.aPT(a) +return!0}, +aPT(a){var s=a==null?null:a +this.d.fC(0,s)}, +UX(a){}, +US(a){}, +aPS(a){}, +ps(){}, +aNo(){}, +t(){this.a=null +var s=this.c +s.ah$=$.aa() +s.ac$=0 +this.e.fl(0)}, +grg(){var s,r=this.a +if(r==null)return!1 +s=r.xO(A.p0()) +if(s==null)return!1 +return s.a===this}, +gXx(){var s,r=this.a +if(r==null)return!1 +s=r.a4c(A.p0()) +if(s==null)return!1 +return s.a===this}, +gaeG(){var s,r,q=this.a +if(q==null)return!1 +for(q=q.e.a,s=A.a5(q),q=new J.cA(q,q.length,s.h("cA<1>")),s=s.c;q.H();){r=q.d +if(r==null)r=s.a(r) +if(r.a===this)return!1 +r=r.d.a +if(r<=10&&r>=1)return!0}return!1}, +gtV(){var s=this.a +if(s==null)s=null +else{s=s.a4c(A.bhB(this)) +s=s==null?null:s.gafm()}return s===!0}} +A.aQN.prototype={ +$1(a){var s,r=this.a.a +if(r==null)s=null +else{r.a.toString +s=!0}if(s===!0){r=r.y.gkS() +if(r!=null)r.lF()}}, +$S:22} +A.aQM.prototype={ +$1(a){var s=this.a.a +if(s!=null){s=s.y.gkS() +if(s!=null)s.lF()}}, +$S:22} +A.my.prototype={ +j(a){var s=this.a +s=s==null?"none":'"'+s+'"' +return"RouteSettings("+s+", "+A.j(this.b)+")"}} +A.Ay.prototype={} +A.zy.prototype={ +el(a){return a.f!=this.f}} +A.aQL.prototype={} +A.adS.prototype={} +A.a25.prototype={} +A.Pj.prototype={ +b5(){var s=null,r=A.b([],t.uD),q=$.aa(),p=t.p6 +return new A.oq(new A.ajO(r,q),A.C(t.Ez),new A.ajP(q),A.mc(s,p),A.mc(s,p),A.zg(!0,"Navigator",!0,!0,s,s,!1),new A.R_(0,q,t.dZ),new A.cD(!1,q,t.uh),A.C(t.S),s,A.D(t.yb,t.Q),s,!0,s,s,s,B.p)}, +aWj(a,b){return this.Q.$2(a,b)}} +A.aLJ.prototype={ +$1(a){return a==null}, +$S:720} +A.k4.prototype={ +W(){return"_RouteLifecycle."+this.b}} +A.WW.prototype={} +A.mP.prototype={ +ghY(){var s,r +if(this.c){s=t.sd.a(this.a.b) +s.ghY() +r=A.j(s.ghY()) +return"p+"+r}r=this.b +if(r!=null)return"r+"+r.gai2() +return null}, +aSB(a,b,c,d){var s,r,q,p=this,o=p.d,n=p.a +n.a=b +n.w3() +s=p.d +if(s===B.I4||s===B.I5){s=n.p1 +r=s.gap()!=null +if(r)n.a.a.toString +if(r){r=n.a.y.gkS() +if(r!=null)r.O0(s.gap().f)}q=n.apD() +p.d=B.I6 +q.b_i(new A.b62(p,b))}else{if(c instanceof A.ig){s=n.ay +s.toString +r=c.ay.x +r===$&&A.c() +s.sm(0,r)}n.ap8(c) +p.d=B.h9}if(a){n.OO(null) +n.ps()}s=o===B.ajV||o===B.I5 +r=b.w +if(s)r.ho(0,new A.W3(n,d)) +else r.ho(0,new A.Jy(n,d))}, +WS(a){var s=this,r=s.a +r.a1s(a) +r.ps() +s.f=new A.xr(new ($.avl())(a),t.xs) +if(s.w!=null)a.e.a.cu(new A.b61(s),t.P)}, +aSA(a,b){var s,r=this +r.d=B.ajR +s=r.a +if((s.d.a.a&30)!==0)return!0 +if(!s.vy(r.x)){r.d=B.h9 +return!1}r.x=null +return!0}, +Ms(a){this.x=a +this.d=B.tJ +this.a.Yo(!0)}, +Mr(a){return this.Ms(a,t.z)}, +hW(a){if(this.d.a>=10)return +this.y=!0 +this.d=B.I3}, +t(){var s,r,q,p,o,n,m,l=this,k={} +l.d=B.ajT +s=l.a +r=s.f +q=new A.b6_() +p=A.a5(r) +o=new A.bg(r,q,p.h("bg<1>")) +if(!o.gar(0).H()){l.d=B.mc +s.t() +return}k.a=o.gF(0) +n=s.a +n.f.E(0,l) +for(s=B.b.gar(r),p=new A.fG(s,q,p.h("fG<1>"));p.H();){r=s.ga1(0) +m=A.bn("listener") +q=new A.b60(k,l,r,m,n) +m.b=q +r=r.e +if(r!=null)r.an(0,q)}}, +gb_k(){var s=this.d.a +return s<=7&&s>=1}, +gafm(){var s=this.d.a +return s<=10&&s>=1}} +A.b62.prototype={ +$0(){var s=this.a +if(s.d===B.I6){s.d=B.h9 +this.b.Qt()}}, +$S:0} +A.b61.prototype={ +$1(a){var s=0,r=A.r(t.P),q=this,p,o +var $async$$1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=A.ci() +s=B.ar===p?3:4 +break +case 3:o=q.a.w +s=5 +return A.x(A.vb(B.df,null,t.H),$async$$1) +case 5:B.f1.kf(0,B.wz.N_(o)) +s=2 +break +case 4:if(B.a6===p){B.f1.kf(0,B.wz.N_(q.a.w)) +s=2 +break}s=2 +break +case 2:return A.p(null,r)}}) +return A.q($async$$1,r)}, +$S:721} +A.b6_.prototype={ +$1(a){return a.gED()}, +$S:722} +A.b60.prototype={ +$0(){var s=this,r=s.a;--r.a +s.c.ad(0,s.d.bl()) +if(r.a===0)return A.iC(new A.b5Z(s.b,s.e))}, +$S:0} +A.b5Z.prototype={ +$0(){var s=this.a +if(!this.b.f.P(0,s))return +s.d=B.mc +s.a.t()}, +$S:0} +A.b63.prototype={ +$1(a){return a.a===this.a}, +$S:71} +A.xe.prototype={} +A.Jy.prototype={ +wd(a){a.HU(this.b,this.a,B.eo,!1)}} +A.Jx.prototype={ +wd(a){var s=$.p2() +A.ES(a) +if(!s.a.get(a).cx.a)a.HU(this.a,this.b,B.ep,!1)}} +A.W2.prototype={ +wd(a){}} +A.W3.prototype={ +wd(a){var s=this.a,r=s.grg() +if(r)a.HU(this.b,s,B.eo,!1)}} +A.ajO.prototype={ +I(a,b){B.b.I(this.a,b) +if(J.l4(b))this.D()}, +i(a,b){return this.a[b]}, +gar(a){var s=this.a +return new J.cA(s,s.length,A.a5(s).h("cA<1>"))}, +j(a){return A.pw(this.a,"[","]")}, +$iaq:1} +A.oq.prototype={ +azL(){var s,r,q=this,p=q.abG(),o=A.bn("routeBlocksPop"),n=!p +if(n){s=q.xO(A.p0()) +o.shb(s!=null&&s.a.gwq()===B.ia)}else o.shb(!1) +r=new A.Ax(!n||o.bl()) +n=$.cN +switch(n.fF$.a){case 4:q.c.hI(r) +break +case 0:case 2:case 3:case 1:n.dP$.push(new A.aLG(q,r)) +break}}, +bu(){var s,r,q,p,o=this +o.bN() +for(s=o.a.x,r=0;!1;++r){q=s[r] +p=$.p2() +A.z5(q) +p.a.set(q,o)}o.as=o.a.x +s=o.c.k9(t.mS) +s=s==null?null:s.gba() +t.ZI.a(s) +o.SZ(s==null?null:s.f) +o.a.toString +B.kD.oA("selectSingleEntryHistory",t.H) +$.f6.ct$.an(0,o.ga7l()) +o.e.an(0,o.ga5a())}, +aG5(){var s=this.e,r=A.bGa(new A.bg(s,A.p0(),A.w(s).h("bg"))) +if(r!=null)r.w=$.f6.ct$.a}, +l3(a,b){var s,r,q,p,o,n,m,l,k=this +k.q7(k.at,"id") +s=k.r +k.q7(s,"history") +k.a4i() +k.d=new A.cK(null,t.ku) +r=k.e +r.I(0,s.ai3(null,k)) +k.a.toString +q=t.tl +p=r.a +o=0 +for(;!1;++o){n=B.Zx[o] +m=k.c +m.toString +l=new A.mP(n.Uw(m),null,!0,B.tH,B.dc,new A.xr(new ($.avl())(B.dc),q),B.dc) +p.push(l) +r.D() +m=s.ai3(l,k) +B.b.I(p,m) +if(B.b.gcT(m))r.D()}if(s.y==null){s=k.a +q=s.f +r.I(0,J.mU(s.aWj(k,q),new A.aLI(k),t.Ez))}k.Qt()}, +V0(a){var s,r=this +r.ap0(a) +s=r.r +if(r.cS$!=null)s.a8(0,r.e) +else s.af(0)}, +ghY(){return this.a.y}, +cR(){var s,r,q,p,o,n=this +n.aqr() +s=n.c.bh(t.mS) +n.SZ(s==null?null:s.f) +for(r=n.e.a,q=A.a5(r),r=new J.cA(r,r.length,q.h("cA<1>")),q=q.c;r.H();){p=r.d +p=(p==null?q.a(p):p).a +p.a1l() +o=p.p4 +o===$&&A.c() +o=o.r.gap() +if(o!=null)o.HM() +p=p.p1 +if(p.gap()!=null)p.gap().a4h()}}, +a4i(){var s,r,q +this.f.xI(new A.aLF(),!0) +for(s=this.e,r=s.a;!s.gaA(0);){q=r.pop() +s.D() +A.bof(q,!1)}}, +SZ(a){var s,r,q=this +if(q.Q!=a){if(a!=null)$.p2().u(0,a,q) +s=q.Q +if(s==null)s=null +else{r=$.p2() +A.ES(s) +s=r.a.get(s)}if(s===q){s=$.p2() +r=q.Q +r.toString +s.u(0,r,null)}q.Q=a +q.a9U()}}, +a9U(){var s=this,r=s.Q,q=s.a +if(r!=null)s.as=B.b.X(q.x,A.b([r],t.tc)) +else s.as=q.x}, +bH(a){var s,r,q,p,o,n,m=this +m.aqs(a) +s=a.x +if(s!==m.a.x){for(r=0;!1;++r){q=s[r] +p=$.p2() +A.z5(q) +p.a.set(q,null)}for(s=m.a.x,r=0;!1;++r){q=s[r] +p=$.p2() +A.z5(q) +p.a.set(q,m)}m.a9U()}m.a.toString +for(s=m.e.a,p=A.a5(s),s=new J.cA(s,s.length,p.h("cA<1>")),p=p.c;s.H();){o=s.d +o=(o==null?p.a(o):o).a +o.a1l() +n=o.p4 +n===$&&A.c() +n=n.r.gap() +if(n!=null)n.HM() +o=o.p1 +if(o.gap()!=null)o.gap().a4h()}}, +ht(){var s,r,q,p,o=this.as +o===$&&A.c() +s=o.length +r=0 +for(;r")),r=r.c;s.H();){q=s.d +B.b.I(p,(q==null?r.a(q):q).a.f)}return p}, +Hp(a9){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=this,a8=null +a7.ch=!0 +s=a7.e +r=s.gF(0)-1 +q=s.a +p=q[r] +o=r>0?q[r-1]:a8 +n=A.b([],t.uD) +$label0$1:for(m=a7.x,l=a7.w,k=t.x8,j=t.jc,i=t.u,h=t.fy,g=a8,f=g,e=!1,d=!1;r>=0;){switch(p.d.a){case 1:c=a7.t5(r-1,A.p0()) +b=c>=0?q[c]:a8 +b=b==null?a8:b.a +a=p.a +a.a=a7 +a.a1t() +a0=A.hX.prototype.giM.call(a,0) +a1=new A.B3(new A.bW(A.b([],k),j),new A.bW(A.b([],i),h),0) +a1.c=a0 +if(a0==null){a1.a=B.Y +a1.b=0}a.k2=a1 +a0=A.hX.prototype.gNR.call(a) +a1=new A.B3(new A.bW(A.b([],k),j),new A.bW(A.b([],i),h),0) +a1.c=a0 +a.k3=a1 +p.d=B.ajU +l.ho(0,new A.Jy(a,b)) +continue $label0$1 +case 2:if(e||f==null){b=p.a +a=b.p1 +a0=a.gap()!=null +if(a0)b.a.a.toString +if(a0){a0=b.a.y +a2=a0.ay +if(a2==null){a1=a0.Q +a2=a0.ay=a1==null?a8:a1.gnq()}if(a2!=null){a=a.gap().f +if(a.Q==null)a2.Ic(a) +if(a2.gda())a.qy(!0) +else a.v3()}}b.apB() +p.d=B.h9 +if(f==null){b.OO(a8) +b.ps()}continue $label0$1}break +case 3:case 4:case 6:b=o==null?a8:o.a +c=a7.t5(r-1,A.p0()) +a=c>=0?q[c]:a8 +a=a==null?a8:a.a +p.aSB(f==null,a7,b,a) +if(p.d===B.h9)continue $label0$1 +break +case 5:if(!d&&g!=null)p.WS(g) +d=!0 +break +case 7:if(!d&&g!=null)p.WS(g) +e=!0 +d=!0 +break +case 8:c=a7.t5(r,A.Zj()) +b=c>=0?q[c]:a8 +if(!p.aSA(a7,b==null?a8:b.a))continue $label0$1 +if(!d){if(g!=null)p.WS(g) +g=p.a}b=p.a +c=a7.t5(r,A.Zj()) +a=c>=0?q[c]:a8 +m.ho(0,new A.Jx(b,a==null?a8:a.a)) +if(p.d===B.tI)continue $label0$1 +e=!0 +break +case 11:break +case 9:b=p.a +a=p.x +if(a==null)a=a8 +b=b.d.a +if((b.a&30)!==0)A.X(A.ad("Future already completed")) +b.pc(a) +p.x=null +p.d=B.I3 +continue $label0$1 +case 10:if(!d){if(g!=null){b=p.a +b.a1s(g) +b.ps()}g=a8}c=a7.t5(r,A.Zj()) +b=c>=0?q[c]:a8 +b=b==null?a8:b.a +p.d=B.ajS +if(p.y)m.ho(0,new A.W2(p.a,b)) +continue $label0$1 +case 12:if(!e&&f!=null)break +p.d=B.tI +continue $label0$1 +case 13:p=B.b.di(q,r) +s.D() +n.push(p) +p=f +break +case 14:case 15:case 0:break}--r +a3=r>0?q[r-1]:a8 +f=p +p=o +o=a3}a7.axA() +a7.axC() +a7.a.toString +a4=a7.xO(A.p0()) +a5=a4==null?a8:a4.a.b.a +if(a5!=null&&a5!==a7.ax){A.bq3(!1,a8,A.jn(a5,0,a8)) +a7.ax=a5}for(q=n.length,a6=0;a6=0;){s=l[k] +r=s.d.a +if(!(r<=12&&r>=3)){--k +continue}q=this.ayp(k+1,A.buf()) +r=q==null +p=r?m:q.a +if(p!=s.r){if(!((r?m:q.a)==null&&J.f(s.f.a.deref(),s.r))){p=s.a +p.OO(r?m:q.a) +p.ps()}s.r=r?m:q.a}--k +o=this.t5(k,A.buf()) +n=o>=0?l[o]:m +r=n==null +p=r?m:n.a +if(p!=s.e){p=s.a +p.ap4(r?m:n.a) +p.ps() +s.e=r?m:n.a}}}, +a4I(a,b){a=this.t5(a,b) +return a>=0?this.e.a[a]:null}, +t5(a,b){var s=this.e.a +while(!0){if(!(a>=0&&!b.$1(s[a])))break;--a}return a}, +ayp(a,b){var s=this.e,r=s.a +while(!0){if(!(a?") +q=r.a(this.a.r.$1(s)) +return q==null&&!b?r.a(this.a.w.$1(s)):q}, +Si(a,b,c){return this.Ik(a,!1,b,c)}, +aXW(a){var s=this.e +s.a.push(A.brC(a,B.I4,!1,null)) +s.D() +this.Qt() +this.Pj() +return a.d.a}, +q1(a){return this.aXW(a,t.X)}, +abG(){var s=this.e,r=s.gar(0),q=new A.fG(r,A.p0(),A.w(s).h("fG")) +if(!q.H())return!1 +s=r.ga1(0).a.pF$ +if(s!=null&&s.length!==0)return!0 +if(!q.H())return!1 +return!0}, +EB(a){var s=0,r=A.r(t.w),q,p=this,o,n,m +var $async$EB=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)$async$outer:switch(s){case 0:m=p.xO(A.p0()) +if(m==null){q=!1 +s=1 +break}o=m.a +s=3 +return A.x(o.nK(),$async$EB) +case 3:n=c +if(p.c==null){q=!0 +s=1 +break}if(n===B.ia){q=!0 +s=1 +break}if(m!==p.xO(A.p0())){q=!0 +s=1 +break}switch(o.gwq().a){case 2:q=!1 +s=1 +break $async$outer +case 0:p.Mr(a) +q=!0 +s=1 +break $async$outer +case 1:o.Yo(!1) +q=!0 +s=1 +break $async$outer}case 1:return A.p(q,r)}}) +return A.q($async$EB,r)}, +afU(){return this.EB(null,t.X)}, +aV2(a){return this.EB(a,t.X)}, +Ms(a){var s,r=this,q=r.e.aUm(0,A.p0()) +if(q.c){r.a.toString +s=q.a +if(null.$2(s,a)&&q.d===B.h9)q.d=B.tJ +s.Yo(!0)}else q.Mr(a) +if(q.d===B.tJ)r.Hp(!1) +r.Pj()}, +ie(){return this.Ms(null,t.X)}, +Mr(a){return this.Ms(a,t.X)}, +adZ(a){var s,r=this,q=r.e.a,p=B.b.aTy(q,A.bhB(a),0) +q=q[p] +if(q.c&&q.d.a<8){s=r.a4I(p-1,A.Zj()) +s=s==null?null:s.a +r.x.ho(0,new A.Jx(a,s))}q.d=B.tI +if(!r.ch)r.Hp(!1)}, +saar(a){this.CW=a +this.cx.sm(0,a>0)}, +aPX(){var s,r,q,p,o,n,m=this +m.saar(m.CW+1) +if(m.CW===1){s=m.e +r=m.t5(s.gF(0)-1,A.Zj()) +q=s.a[r].a +s=q.pF$ +p=!(s!=null&&s.length!==0)&&r>0?m.a4I(r-1,A.Zj()).a:null +s=m.as +s===$&&A.c() +o=s.length +n=0 +for(;n")),r=r.c;s.H();){q=s.d +if(q==null)q=r.a(q) +if(a.$1(q))return q}return null}, +xO(a){var s,r,q,p,o +for(s=this.e.a,r=A.a5(s),s=new J.cA(s,s.length,r.h("cA<1>")),r=r.c,q=null;s.H();){p=s.d +o=p==null?r.a(p):p +if(a.$1(o))q=o}return q}, +ab(a){var s,r,q=this,p=null,o=q.gaAx(),n=A.v9(a),m=q.cS$,l=q.d +l===$&&A.c() +s=q.a.at +if(l.gap()==null){r=q.ga27() +r=J.na(r.slice(0),A.a5(r).c)}else r=B.Zy +return new A.zy(p,new A.fS(new A.aLH(q,a),A.FX(B.cW,new A.ZD(!1,A.bmG(A.v6(!0,p,A.Tk(m,new A.Gr(r,s,l)),p,p,p,q.y,!1,p,p,p,p,p,!0),n),p),o,q.gaDm(),p,p,o),p,t.w3),p)}} +A.aLG.prototype={ +$1(a){var s=this.a.c +if(s==null)return +s.hI(this.b)}, +$S:3} +A.aLI.prototype={ +$1(a){var s,r,q=a.b.a +if(q!=null){s=this.a.at +r=s.y +if(r==null)r=s.$ti.h("dv.T").a(r) +s.a1k(0,r+1) +q=new A.alV(r,q,null,B.tK)}else q=null +return A.brC(a,B.tH,!1,q)}, +$S:725} +A.aLF.prototype={ +$1(a){a.d=B.mc +a.a.t() +return!0}, +$S:71} +A.aLE.prototype={ +$0(){var s=this.a +if(s!=null)s.saaJ(!0)}, +$S:0} +A.aLH.prototype={ +$1(a){if(a.a||!this.a.abG())return!1 +this.b.hI(B.a2m) +return!0}, +$S:199} +A.WX.prototype={ +W(){return"_RouteRestorationType."+this.b}} +A.aoD.prototype={ +gafo(){return!0}, +JK(){return A.b([this.a.a],t.jl)}} +A.alV.prototype={ +JK(){var s=this,r=s.aqS(),q=A.b([s.c,s.d],t.jl),p=s.e +if(p!=null)q.push(p) +B.b.I(r,q) +return r}, +Uw(a){var s=a.Si(this.d,this.e,t.z) +s.toString +return s}, +gai2(){return this.c}} +A.aYQ.prototype={ +gafo(){return!1}, +JK(){A.bI7(this.d)}, +Uw(a){var s=a.c +s.toString +return this.d.$2(s,this.e)}, +gai2(){return this.c}} +A.ajP.prototype={ +a8(a0,a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=null,a=c.y==null +if(a)c.y=A.D(t.N,t.UX) +s=t.jl +r=A.b([],s) +q=c.y +q.toString +p=J.bG(q,null) +if(p==null)p=B.kk +o=A.D(t.ob,t.UX) +q=c.y +q.toString +n=J.bBE(J.avG(q)) +for(q=a1.a,m=A.a5(q),q=new J.cA(q,q.length,m.h("cA<1>")),m=m.c,l=b,k=a,j=!0;q.H();){i=q.d +h=i==null?m.a(i):i +if(h.d.a>7){i=h.a +i.c.sm(0,b) +continue}if(h.c){k=k||r.length!==J.bo(p) +if(r.length!==0){g=l==null?b:l.ghY() +o.u(0,g,r) +n.P(0,g)}j=h.ghY()!=null +i=h.a +f=j?h.ghY():b +i.c.sm(0,f) +if(j){r=A.b([],s) +i=c.y +i.toString +p=J.bG(i,h.ghY()) +if(p==null)p=B.kk}else{r=B.kk +p=B.kk}l=h +continue}if(j){i=h.b +i=i==null?b:i.gafo() +j=i===!0}else j=!1 +i=h.a +f=j?h.ghY():b +i.c.sm(0,f) +if(j){i=h.b +f=i.b +i=f==null?i.b=i.JK():f +if(!k){f=J.al(p) +e=f.gF(p) +d=r.length +k=e<=d||!J.f(f.i(p,d),i)}else k=!0 +B.b.E(r,i)}}k=k||r.length!==J.bo(p) +c.axk(r,l,o,n) +if(k||n.gcT(n)){c.y=o +c.D()}}, +axk(a,b,c,d){var s +if(a.length!==0){s=b==null?null:b.ghY() +c.u(0,s,a) +d.P(0,s)}}, +af(a){if(this.y==null)return +this.y=null +this.D()}, +ai3(a,b){var s,r,q,p,o=A.b([],t.uD) +if(this.y!=null)s=a!=null&&a.ghY()==null +else s=!0 +if(s)return o +s=this.y +s.toString +r=J.bG(s,a==null?null:a.ghY()) +if(r==null)return o +for(s=J.az(r),q=t.tl;s.H();){p=A.bNA(s.ga1(s)) +o.push(new A.mP(p.Uw(b),p,!1,B.tH,B.dc,new A.xr(new ($.avl())(B.dc),q),B.dc))}return o}, +JY(){return null}, +zk(a){a.toString +return J.bBq(t.f.a(a),new A.b2B(),t.ob,t.UX)}, +aeX(a){this.y=a}, +A4(){return this.y}, +gz2(a){return this.y!=null}} +A.b2B.prototype={ +$2(a,b){return new A.bK(A.eE(a),A.iN(t.j.a(b),!0,t.K),t.qE)}, +$S:726} +A.Ax.prototype={ +j(a){return"NavigationNotification canHandlePop: "+this.a}} +A.b4d.prototype={ +$2(a,b){if(!a.a)a.ad(0,b)}, +$S:48} +A.W4.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.W5.prototype={ +bH(a){this.c7(a) +this.vz()}, +cR(){var s,r,q,p,o=this +o.fP() +s=o.cS$ +r=o.guh() +q=o.c +q.toString +q=A.wh(q) +o.jV$=q +p=o.tn(q,r) +if(r){o.l3(s,o.hM$) +o.hM$=!1}if(p)if(s!=null)s.t()}, +t(){var s,r=this +r.jU$.al(0,new A.b4d()) +s=r.cS$ +if(s!=null)s.t() +r.cS$=null +r.aqq()}} +A.atw.prototype={} +A.a7E.prototype={ +j(a){var s=A.b([],t.T) +this.hu(s) +return"Notification("+B.b.cj(s,", ")+")"}, +hu(a){}} +A.fS.prototype={ +cJ(a){return new A.W6(this,B.al,this.$ti.h("W6<1>"))}} +A.W6.prototype={ +agk(a){var s,r=this.e +r.toString +s=this.$ti +s.h("fS<1>").a(r) +if(s.c.b(a))return r.d.$1(a) +return!1}, +u1(a){}} +A.m9.prototype={} +A.atH.prototype={} +A.a7Z.prototype={ +W(){return"OverflowBarAlignment."+this.b}} +A.a7Y.prototype={ +bA(a){var s=this,r=null,q=a.bh(t.I) +q.toString +q=q.w +q=new A.JN(s.e,s.f,s.r,s.w,s.x,q,0,r,r,new A.bs(),A.aX(t.v)) +q.by() +q.I(0,r) +return q}, +bI(a,b){var s,r=this +t.Eg.a(b) +b.sOb(0,r.e) +b.sil(r.f) +b.saWY(r.r) +b.saWW(r.w) +b.saWX(r.x) +s=a.bh(t.I) +s.toString +b.scV(s.w)}} +A.qp.prototype={} +A.JN.prototype={ +sOb(a,b){if(this.K===b)return +this.K=b +this.aB()}, +sil(a){if(this.a5==a)return +this.a5=a +this.aB()}, +saWY(a){if(this.M===a)return +this.M=a +this.aB()}, +saWW(a){if(this.av===a)return +this.av=a +this.aB()}, +saWX(a){if(this.ao===a)return +this.ao=a +this.aB()}, +scV(a){if(this.aM===a)return +this.aM=a +this.aB()}, +i0(a){if(!(a.b instanceof A.qp))a.b=new A.qp(null,null,B.h)}, +c_(a){var s,r,q,p,o,n,m=this,l=m.aZ$ +if(l==null)return 0 +for(s=A.w(m).h("aZ.1"),r=0;l!=null;){q=l.gc0() +p=B.a9.ib(l.fx,1/0,q) +r+=p +q=l.b +q.toString +l=s.a(q).bd$}q=m.K +o=m.dI$ +l=m.aZ$ +if(r+q*(o-1)>a){for(n=0;l!=null;){q=l.gcd() +p=B.ay.ib(l.fx,a,q) +n+=p +q=l.b +q.toString +l=s.a(q).bd$}return n+m.M*(m.dI$-1)}else{for(n=0;l!=null;){q=l.gcd() +p=B.ay.ib(l.fx,a,q) +n=Math.max(n,p) +q=l.b +q.toString +l=s.a(q).bd$}return n}}, +c2(a){var s,r,q,p,o,n,m=this,l=m.aZ$ +if(l==null)return 0 +for(s=A.w(m).h("aZ.1"),r=0;l!=null;){q=l.gc0() +p=B.a9.ib(l.fx,1/0,q) +r+=p +q=l.b +q.toString +l=s.a(q).bd$}q=m.K +o=m.dI$ +l=m.aZ$ +if(r+q*(o-1)>a){for(n=0;l!=null;){q=l.gcG() +p=B.aN.ib(l.fx,a,q) +n+=p +q=l.b +q.toString +l=s.a(q).bd$}return n+m.M*(m.dI$-1)}else{for(n=0;l!=null;){q=l.gcG() +p=B.aN.ib(l.fx,a,q) +n=Math.max(n,p) +q=l.b +q.toString +l=s.a(q).bd$}return n}}, +c1(a){var s,r,q,p,o=this,n=o.aZ$ +if(n==null)return 0 +for(s=A.w(o).h("aZ.1"),r=0;n!=null;){q=n.gc0() +p=B.a9.ib(n.fx,1/0,q) +r+=p +q=n.b +q.toString +n=s.a(q).bd$}return r+o.K*(o.dI$-1)}, +bZ(a){var s,r,q,p,o=this,n=o.aZ$ +if(n==null)return 0 +for(s=A.w(o).h("aZ.1"),r=0;n!=null;){q=n.gbY() +p=B.aa.ib(n.fx,1/0,q) +r+=p +q=n.b +q.toString +n=s.a(q).bd$}return r+o.K*(o.dI$-1)}, +iO(a){return this.Ka(a)}, +dA(a){var s,r,q,p,o,n,m,l,k,j=this,i=j.aZ$ +if(i==null)return new A.Q(A.U(0,a.a,a.b),A.U(0,a.c,a.d)) +s=a.b +r=new A.bb(0,s,0,a.d) +for(q=A.w(j).h("aZ.1"),p=0,o=0,n=0;i!=null;){m=i.gjd() +l=B.bg.ib(i.fx,r,m) +p+=l.a +m=l.b +o=Math.max(o,m) +n+=m+j.M +m=i.b +m.toString +i=q.a(m).bd$}k=p+j.K*(j.dI$-1) +if(k>s)return a.ca(new A.Q(s,n-j.M)) +else return a.ca(new A.Q(j.a5==null?k:s,o))}, +cM(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2=this,a3="RenderBox was not laid out: ",a4={},a5=a4.a=a2.aZ$ +if(a5==null){s=t.k.a(A.L.prototype.gaI.call(a2)) +a2.id=new A.Q(A.U(0,s.a,s.b),A.U(0,s.c,s.d)) +return}s=t.k +r=s.a(A.L.prototype.gaI.call(a2)) +q=new A.bb(0,r.b,0,r.d) +for(r=A.w(a2).h("aZ.1"),p=a5,o=0,n=0,m=0;p!=null;p=a5){p.dc(q,!0) +p=a4.a +l=p.id +o+=(l==null?A.X(A.ad(a3+A.J(p).j(0)+"#"+A.bU(p))):l).a +n=Math.max(n,l.b) +m=Math.max(m,l.a) +p=p.b +p.toString +a5=r.a(p).bd$ +a4.a=a5}k=a2.aM===B.ad +j=o+a2.K*(a2.dI$-1) +if(j>s.a(A.L.prototype.gaI.call(a2)).b){a5=a2.ao===B.d3?a2.aZ$:a2.f1$ +a4.a=a5 +i=new A.b5q(a4,a2) +for(r=t.pi,p=a5,h=0;p!=null;p=a5){l=p.b +l.toString +r.a(l) +switch(a2.av.a){case 2:p=s.a(A.L.prototype.gaI.call(a2)) +g=a4.a +f=g.id +if(f==null)f=A.X(A.ad(a3+A.J(g).j(0)+"#"+A.bU(g))) +f=(p.b-f.a)/2 +p=f +break +case 0:if(k){p=s.a(A.L.prototype.gaI.call(a2)) +g=a4.a +f=g.id +if(f==null)f=A.X(A.ad(a3+A.J(g).j(0)+"#"+A.bU(g))) +f=p.b-f.a +p=f}else{g=p +p=0}break +case 1:if(k){g=p +p=0}else{p=s.a(A.L.prototype.gaI.call(a2)) +g=a4.a +f=g.id +if(f==null)f=A.X(A.ad(a3+A.J(g).j(0)+"#"+A.bU(g))) +f=p.b-f.a +p=f}break +default:g=p +p=null}l.a=new A.i(p,h) +p=g.id +if(p==null)p=A.X(A.ad(a3+A.J(g).j(0)+"#"+A.bU(g))) +h+=p.b+a2.M +a5=i.$0() +a4.a=a5}a2.id=s.a(A.L.prototype.gaI.call(a2)).ca(new A.Q(s.a(A.L.prototype.gaI.call(a2)).b,h-a2.M))}else{a5=a2.aZ$ +a4.a=a5 +e=a5.gC(0).a +d=a2.a5==null?j:s.a(A.L.prototype.gaI.call(a2)).b +a2.id=s.a(A.L.prototype.gaI.call(a2)).ca(new A.Q(d,n)) +c=A.bn("x") +b=a2.K +switch(a2.a5){case null:case void 0:c.b=k?a2.gC(0).a-e:0 +break +case B.ac:c.b=k?a2.gC(0).a-e:0 +break +case B.i1:a=(a2.gC(0).a-j)/2 +c.b=k?a2.gC(0).a-a-e:a +break +case B.kv:c.b=k?j-e:a2.gC(0).a-j +break +case B.kw:b=(a2.gC(0).a-o)/(a2.dI$-1) +c.b=k?a2.gC(0).a-e:0 +break +case B.CE:b=a2.dI$>0?(a2.gC(0).a-o)/a2.dI$:0 +s=b/2 +c.b=k?a2.gC(0).a-s-e:s +break +case B.kx:b=(a2.gC(0).a-o)/(a2.dI$+1) +c.b=k?a2.gC(0).a-b-e:b +break}for(s=!k,p=t.pi,l=c.a;g=a4.a,g!=null;){f=g.b +f.toString +p.a(f) +a0=c.b +if(a0===c)A.X(A.fC(l)) +a1=g.id +f.a=new A.i(a0,(n-(a1==null?A.X(A.ad(a3+A.J(g).j(0)+"#"+A.bU(g))):a1).b)/2) +if(s)g=c.b=a0+(a1.a+b) +else g=a0 +a5=a4.a=r.a(f).bd$ +if(k&&a5!=null){f=a5.id +c.b=g-((f==null?A.X(A.ad(a3+A.J(a5).j(0)+"#"+A.bU(a5))):f).a+b)}}}}, +dZ(a,b){return this.De(a,b)}, +aO(a,b){this.yU(a,b)}} +A.b5q.prototype={ +$0(){var s=this.b,r=s.ao,q=this.a.a +s=A.w(s).h("aZ.1") +if(r===B.d3){r=q.b +r.toString +r=s.a(r).bd$ +s=r}else{r=q.b +r.toString +r=s.a(r).dY$ +s=r}return s}, +$S:727} +A.atV.prototype={ +bc(a){var s,r,q +this.fg(a) +s=this.aZ$ +for(r=t.pi;s!=null;){s.bc(a) +q=s.b +q.toString +s=r.a(q).bd$}}, +b3(a){var s,r,q +this.fh(0) +s=this.aZ$ +for(r=t.pi;s!=null;){s.b3(0) +q=s.b +q.toString +s=r.a(q).bd$}}} +A.atW.prototype={} +A.rT.prototype={ +su5(a){var s +if(this.b===a)return +this.b=a +s=this.f +if(s!=null)s.a3F()}, +sEx(a){if(this.c)return +this.c=!0 +this.f.a3F()}, +gED(){var s=this.e +return(s==null?null:s.a)!=null}, +an(a,b){var s=this.e +if(s!=null)s.an(0,b)}, +ad(a,b){var s=this.e +if(s!=null)s.ad(0,b)}, +hW(a){var s,r=this.f +r.toString +this.f=null +if(r.c==null)return +B.b.P(r.d,this) +s=$.cN +if(s.fF$===B.l2)s.dP$.push(new A.aMh(r)) +else r.a6c()}, +f8(){var s=this.r.gap() +if(s!=null)s.HM()}, +t(){var s,r=this +r.w=!0 +if(!r.gED()){s=r.e +if(s!=null){s.ah$=$.aa() +s.ac$=0}r.e=null}}, +j(a){var s=this,r=A.bU(s),q=s.b,p=s.c,o=s.w?"(DISPOSED)":"" +return"#"+r+"(opaque: "+q+"; maintainState: "+p+")"+o}, +$iaq:1} +A.aMh.prototype={ +$1(a){this.a.a6c()}, +$S:3} +A.u0.prototype={ +b5(){return new A.JA(B.p)}} +A.JA.prototype={ +aEn(a,b){var s,r,q,p=this.e +if(p==null)p=this.e=new A.A2(t.uW) +s=p.b===0?null:p.ga_(0) +r=b.a +while(!0){q=s==null +if(!(!q&&s.a>r))break +s=s.gah_()}if(q){p.Rh(p.c,b,!0) +p.c=b}else s.n7$.Rh(s.n8$,b,!1)}, +gRU(){var s,r=this,q=r.f +if(q===$){s=r.PV(!1) +r.f!==$&&A.N() +r.f=s +q=s}return q}, +PV(a){return new A.eW(this.avy(a),t.gS)}, +avy(a){var s=this +return function(){var r=a +var q=0,p=2,o,n,m,l +return function $async$PV(b,c,d){if(c===1){o=d +q=p}while(true)switch(q){case 0:l=s.e +if(l==null||l.b===0){q=1 +break}n=r?l.ga_(0):l.ga9(0) +case 3:if(!(n!=null)){q=4 +break}m=n.d +n=r?n.gah_():n.gl_(0) +q=m!=null?5:6 +break +case 5:q=7 +return b.b=m,1 +case 7:case 6:q=3 +break +case 4:case 1:return 0 +case 2:return b.c=o,3}}}}, +bu(){var s,r=this +r.bN() +r.a.c.e.sm(0,r) +s=r.c.zh(t.im) +s.toString +r.d=s}, +bH(a){var s,r=this +r.c7(a) +if(a.d!==r.a.d){s=r.c.zh(t.im) +s.toString +r.d=s}}, +t(){var s,r=this,q=r.a.c.e +if(q!=null)q.sm(0,null) +q=r.a.c +if(q.w){s=q.e +if(s!=null){s.ah$=$.aa() +s.ac$=0}q.e=null}r.e=null +r.bG()}, +ab(a){var s=this.a,r=s.e,q=this.d +q===$&&A.c() +return new A.Cg(r,new A.CY(q,this,s.c.a.$1(a),null),null)}, +HM(){this.aK(new A.b4o())}} +A.b4o.prototype={ +$0(){}, +$S:0} +A.Gr.prototype={ +b5(){return new A.Gt(A.b([],t.wi),null,null,B.p)}} +A.Gt.prototype={ +bu(){this.bN() +this.af1(0,this.a.c)}, +Rj(a,b){if(a!=null)return B.b.f7(this.d,a) +return this.d.length}, +af0(a,b,c){b.f=this +this.aK(new A.aMm(this,c,null,b))}, +Lj(a,b){return this.af0(0,b,null)}, +af1(a,b){var s,r=b.length +if(r===0)return +for(s=0;s"),s=new A.cz(s,r),s=new A.cR(s,s.gF(0),r.h("cR")),r=r.h("aI.E"),q=!0,p=0;s.H();){o=s.d +if(o==null)o=r.a(o) +if(q){++p +m.push(new A.u0(o,n,!0,o.r)) +o=o.b +q=!o}else if(o.c)m.push(new A.u0(o,n,!1,o.r))}s=t.MV +return new A.XV(m.length-p,n.a.d,A.ab(new A.cz(m,s),!1,s.h("aI.E")),null)}} +A.aMm.prototype={ +$0(){var s=this,r=s.a +B.b.hc(r.d,r.Rj(s.b,s.c),s.d)}, +$S:0} +A.aMl.prototype={ +$0(){var s=this,r=s.a +B.b.hO(r.d,r.Rj(s.b,s.c),s.d)}, +$S:0} +A.aMn.prototype={ +$0(){var s,r,q=this,p=q.a,o=p.d +B.b.af(o) +s=q.b +B.b.I(o,s) +r=q.c +r.ahF(s) +B.b.hO(o,p.Rj(q.d,q.e),r)}, +$S:0} +A.aMk.prototype={ +$0(){}, +$S:0} +A.aMj.prototype={ +$0(){}, +$S:0} +A.XV.prototype={ +cJ(a){return new A.ars(A.ek(t.U),this,B.al)}, +bA(a){var s=a.bh(t.I) +s.toString +s=new A.xm(s.w,this.e,this.f,A.aX(t.O5),0,null,null,new A.bs(),A.aX(t.v)) +s.by() +s.I(0,null) +return s}, +bI(a,b){var s=this.e +if(b.M!==s){b.M=s +if(!b.ao)b.xf()}s=a.bh(t.I) +s.toString +b.scV(s.w) +s=this.f +if(s!==b.av){b.av=s +b.bi() +b.cf()}}} +A.ars.prototype={ +gaF(){return t.im.a(A.mh.prototype.gaF.call(this))}, +mo(a,b){var s,r +this.a0V(a,b) +s=a.b +s.toString +t.i9.a(s) +r=this.e +r.toString +s.at=t.yI.a(t.f2.a(r).c[b.b]).c}, +mr(a,b,c){this.a0W(a,b,c)}} +A.CZ.prototype={ +i0(a){if(!(a.b instanceof A.hf))a.b=new A.hf(null,null,B.h)}, +ix(a,b){var s,r,q=a.b +q.toString +t.Qv.a(q) +s=this.gaii() +r=s.K +if(r==null)r=s.K=B.bC.aG(s.a5) +if(!q.gEm()){a.dc(b,!0) +q.a=B.h}else A.bpb(a,q,this.gC(0),r)}, +dZ(a,b){var s,r,q,p=this.Pr(),o=p.gar(p) +p=t.Qv +s=!1 +while(!0){if(!(!s&&o.H()))break +r=o.ga1(o) +q=r.b +q.toString +s=a.m5(new A.b5G(r),p.a(q).a,b)}return s}, +aO(a,b){var s,r,q,p,o,n +for(s=this.Ba(),s=s.gar(s),r=t.Qv,q=b.a,p=b.b;s.H();){o=s.ga1(s) +n=o.b +n.toString +n=r.a(n).a +a.fb(o,new A.i(n.a+q,n.b+p))}}} +A.b5G.prototype={ +$2(a,b){return this.a.dK(a,b)}, +$S:8} +A.K4.prototype={ +aiY(a){var s=this.at +if(s==null)s=null +else{s=s.e +s=s==null?null:s.a.gRU().al(0,a)}return s}} +A.xm.prototype={ +gaii(){return this}, +i0(a){if(!(a.b instanceof A.K4))a.b=new A.K4(null,null,B.h)}, +bc(a){var s,r,q,p,o +this.as_(a) +s=this.aZ$ +for(r=t.i9;s!=null;){q=s.b +q.toString +r.a(q) +p=q.at +if(p==null)o=null +else{p=p.e +if(p==null)o=null +else{p=p.a.gRU() +p=new A.fH(p.a(),p.$ti.h("fH<1>")) +o=p}}if(o!=null)for(;o.H();)o.b.bc(a) +s=q.bd$}}, +b3(a){var s,r,q +this.as0(0) +s=this.aZ$ +for(r=t.i9;s!=null;){q=s.b +q.toString +r.a(q) +q.aiY(A.bUc()) +s=q.bd$}}, +k5(){return this.cc(this.gZ1())}, +scV(a){var s=this +if(s.a5===a)return +s.a5=a +s.K=null +if(!s.ao)s.xf()}, +P0(a){var s=this +s.ao=!0 +s.kL(a) +s.bi() +s.ao=!1 +a.V.aB()}, +S5(a){var s=this +s.ao=!0 +s.oi(a) +s.bi() +s.ao=!1}, +aB(){if(!this.ao)this.xf()}, +guW(){var s,r,q,p,o=this +if(o.M===A.aZ.prototype.goc.call(o))return null +s=A.aZ.prototype.gaRB.call(o,0) +for(r=o.M,q=t.Qv;r>0;--r){p=s.b +p.toString +s=q.a(p).bd$}return s}, +c1(a){return A.Be(this.guW(),new A.b5K(a))}, +bZ(a){return A.Be(this.guW(),new A.b5I(a))}, +c_(a){return A.Be(this.guW(),new A.b5J(a))}, +c2(a){return A.Be(this.guW(),new A.b5H(a))}, +iO(a){var s,r,q,p,o=this.guW() +for(s=t.Qv,r=null;o!=null;){q=o.b +q.toString +s.a(q) +p=o.nL(a) +if(p!=null){p+=q.a.b +r=r!=null?Math.min(r,p):p}o=q.bd$}return r}, +dA(a){var s=a.a,r=a.b,q=A.U(1/0,s,r),p=a.c,o=a.d,n=A.U(1/0,p,o) +if(isFinite(q)&&isFinite(n))return new A.Q(A.U(1/0,s,r),A.U(1/0,p,o)) +s=this.a49() +return s.aY(B.bg,a,s.gjd())}, +Ba(){return new A.eW(this.auJ(),t.gS)}, +auJ(){var s=this +return function(){var r=0,q=1,p,o,n,m,l,k +return function $async$Ba(a,b,c){if(b===1){p=c +r=q}while(true)switch(r){case 0:k=s.guW() +o=t.i9 +case 2:if(!(k!=null)){r=3 +break}r=4 +return a.b=k,1 +case 4:n=k.b +n.toString +o.a(n) +m=n.at +if(m==null)l=null +else{m=m.e +if(m==null)l=null +else{m=m.a.gRU() +m=new A.fH(m.a(),m.$ti.h("fH<1>")) +l=m}}r=l!=null?5:6 +break +case 5:case 7:if(!l.H()){r=8 +break}r=9 +return a.b=l.b,1 +case 9:r=7 +break +case 8:case 6:k=n.bd$ +r=2 +break +case 3:return 0 +case 1:return a.c=p,3}}}}, +Pr(){return new A.eW(this.auI(),t.gS)}, +auI(){var s=this +return function(){var r=0,q=1,p,o,n,m,l,k,j,i,h +return function $async$Pr(a,b,c){if(b===1){p=c +r=q}while(true)switch(r){case 0:i=s.M===A.aZ.prototype.goc.call(s)?null:s.f1$ +h=s.dI$-s.M +o=t.i9 +case 2:if(!(i!=null)){r=3 +break}n=i.b +n.toString +o.a(n) +m=n.at +if(m==null)l=null +else{m=m.e +if(m==null)l=null +else{m=m.a +k=m.r +if(k===$){j=m.PV(!0) +m.r!==$&&A.N() +m.r=j +k=j}m=new A.fH(k.a(),k.$ti.h("fH<1>")) +l=m}}r=l!=null?4:5 +break +case 4:case 6:if(!l.H()){r=7 +break}r=8 +return a.b=l.b,1 +case 8:r=6 +break +case 7:case 5:r=9 +return a.b=i,1 +case 9:--h +i=h<=0?null:n.dY$ +r=2 +break +case 3:return 0 +case 1:return a.c=p,3}}}}, +glN(){return!1}, +cM(){var s,r,q=this,p=t.k,o=p.a(A.L.prototype.gaI.call(q)),n=A.U(1/0,o.a,o.b) +o=A.U(1/0,o.c,o.d) +if(isFinite(n)&&isFinite(o)){p=p.a(A.L.prototype.gaI.call(q)) +q.id=new A.Q(A.U(1/0,p.a,p.b),A.U(1/0,p.c,p.d)) +s=null}else{s=q.a49() +q.ix(s,p.a(A.L.prototype.gaI.call(q))) +q.id=s.gC(0)}r=A.L9(q.gC(0)) +for(p=q.Ba(),p=new A.fH(p.a(),p.$ti.h("fH<1>"));p.H();){o=p.b +if(o!==s)q.ix(o,r)}}, +a49(){var s,r,q,p=this,o=p.M===A.aZ.prototype.goc.call(p)?null:p.f1$ +for(s=t.i9;o!=null;){r=o.b +r.toString +s.a(r) +q=r.at +q=q==null?null:q.d +if(q===!0&&!r.gEm())return o +o=r.dY$}throw A.d(A.ze(A.b([A.ra("Overlay was given infinite constraints and cannot be sized by a suitable child."),A.cn("The constraints given to the overlay ("+p.gaI().j(0)+") would result in an illegal infinite size ("+p.gaI().gaMV().j(0)+"). To avoid that, the Overlay tried to size itself to one of its children, but no suitable non-positioned child that belongs to an OverlayEntry with canSizeOverlay set to true could be found."),A.MS("Try wrapping the Overlay in a SizedBox to give it a finite size or use an OverlayEntry with canSizeOverlay set to true.")],t._)))}, +aO(a,b){var s,r,q=this,p=q.aM +if(q.av!==B.y){s=q.cx +s===$&&A.c() +r=q.gC(0) +p.sbr(0,a.q2(s,b,new A.A(0,0,0+r.a,0+r.b),A.CZ.prototype.gjs.call(q),q.av,p.a))}else{p.sbr(0,null) +q.aqN(a,b)}}, +t(){this.aM.sbr(0,null) +this.ja()}, +cc(a){var s,r,q=this.aZ$ +for(s=t.i9;q!=null;){a.$1(q) +r=q.b +r.toString +s.a(r) +r.aiY(a) +q=r.bd$}}, +jx(a){var s,r,q=this.guW() +for(s=t.i9;q!=null;){a.$1(q) +r=q.b +r.toString +q=s.a(r).bd$}}, +tA(a){var s +switch(this.av.a){case 0:return null +case 1:case 2:case 3:s=this.gC(0) +return new A.A(0,0,0+s.a,0+s.b)}}} +A.b5K.prototype={ +$1(a){return a.aY(B.a9,this.a,a.gc0())}, +$S:44} +A.b5I.prototype={ +$1(a){return a.aY(B.aa,this.a,a.gbY())}, +$S:44} +A.b5J.prototype={ +$1(a){return a.aY(B.ay,this.a,a.gcd())}, +$S:44} +A.b5H.prototype={ +$1(a){return a.aY(B.aN,this.a,a.gcG())}, +$S:44} +A.aMi.prototype={ +j(a){return"OverlayPortalController"+(this.a!=null?"":" DETACHED")}} +A.PA.prototype={ +b5(){return new A.amr(B.p)}} +A.amr.prototype={ +ayh(a,b){var s,r,q=this,p=q.f,o=A.bhp("marker",new A.b4p(q,!1)) +if(p!=null)if(q.e){s=o.xX() +s=p.b===s.r&&p.c===s.f +r=s}else r=!0 +else r=!1 +q.e=!1 +if(r)return p +return q.f=new A.xh(a,o.xX().r,o.xX().f)}, +bu(){this.bN() +this.a6H(this.a.c)}, +a6H(a){var s,r=a.b,q=this.d +if(q!=null)s=r!=null&&r>q +else s=!0 +if(s)this.d=r +a.b=null +a.a=this}, +cR(){this.fP() +this.e=!0}, +bH(a){var s,r,q=this +q.c7(a) +if(!q.e)q.a.toString +s=a.c +r=q.a.c +if(s!==r){s.a=null +q.a6H(r)}}, +t(){this.a.c.a=null +this.f=null +this.bG()}, +alq(a,b){this.aK(new A.b4r(this,b)) +this.f=null}, +w0(){this.aK(new A.b4q(this)) +this.f=null}, +ab(a){var s,r,q=this,p=null,o=q.d +if(o==null)return new A.JB(p,q.a.e,p,p) +q.a.toString +s=q.ayh(o,!1) +r=q.a +return new A.JB(new A.ahH(new A.j1(r.d,p),p),r.e,s,p)}} +A.b4p.prototype={ +$0(){var s=this.a.c +s.toString +return A.bNy(s,this.b)}, +$S:728} +A.b4r.prototype={ +$0(){this.a.d=this.b}, +$S:0} +A.b4q.prototype={ +$0(){this.a.d=null}, +$S:0} +A.xh.prototype={ +a2_(a){var s,r=this +r.d=a +r.b.aEn(0,r) +s=r.c +s.bi() +s.pS() +s.cf()}, +a7v(a){var s,r=this +r.d=null +s=r.b.e +if(s!=null)s.P(0,r) +s=r.c +s.bi() +s.pS() +s.cf()}, +j(a){var s=A.bU(this) +return"_OverlayEntryLocation["+s+"] "}} +A.CY.prototype={ +el(a){return a.f!==this.f||a.r!==this.r}} +A.JB.prototype={ +cJ(a){return new A.amq(this,B.al)}, +bA(a){var s=new A.WH(null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}} +A.amq.prototype={ +gaF(){return t.SN.a(A.bX.prototype.gaF.call(this))}, +hA(a,b){var s,r=this +r.rW(a,b) +s=r.e +s.toString +t.eU.a(s) +r.ok=r.h6(r.ok,s.d,null) +r.k4=r.h6(r.k4,s.c,s.e)}, +a8(a,b){var s=this +s.qr(0,b) +s.ok=s.h6(s.ok,b.d,null) +s.k4=s.h6(s.k4,b.c,b.e)}, +lB(a){this.ok=null +this.mI(a)}, +cc(a){var s=this.ok,r=this.k4 +if(s!=null)a.$1(s) +if(r!=null)a.$1(r)}, +dd(){var s,r,q +this.AS() +s=this.k4 +if(s!=null){r=t.Kp.a(s.gaF()) +if(r!=null){q=s.c +q.toString +t.Vl.a(q) +q.c.P0(r) +q.d=r}}}, +ht(){var s,r,q=this.k4 +if(q!=null){s=t.Kp.a(q.gaF()) +if(s!=null){r=q.c +r.toString +t.Vl.a(r) +r.c.S5(s) +r.d=null}}this.a1g()}, +mo(a,b){var s=t.SN +if(b!=null){s=s.a(A.bX.prototype.gaF.call(this)) +t.Lj.a(a) +s.V=a +b.a2_(a) +b.c.P0(a)}else s.a(A.bX.prototype.gaF.call(this)).sbt(a)}, +mr(a,b,c){var s=b.c,r=c.c +if(s!==r){s.S5(a) +r.P0(a)}if(b.b!==c.b||b.a!==c.a){b.a7v(a) +c.a2_(a)}}, +nB(a,b){if(b==null){t.SN.a(A.bX.prototype.gaF.call(this)).sbt(null) +return}t.Lj.a(a) +b.a7v(a) +b.c.S5(a) +t.SN.a(A.bX.prototype.gaF.call(this)).V=null}} +A.ahH.prototype={ +bA(a){var s,r=a.zh(t.SN) +r.toString +s=new A.xl(r,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return r.V=s}, +bI(a,b){}} +A.xl.prototype={ +Ba(){var s=this.a0$ +return s==null?B.Kn:A.bGc(1,new A.b5j(s),t.x)}, +Pr(){return this.Ba()}, +gaii(){var s=this.d +return s instanceof A.xm?s:A.X(A.N9(A.j(s)+" of "+this.j(0)+" is not a _RenderTheater"))}, +k5(){this.V.q6(this) +this.a1j()}, +glN(){return!0}, +aB(){this.aE=!0 +this.xf()}, +aUp(){var s,r=t.gW.a(this.d) +if(r==null||this.y==null)return +s=t.k.a(A.L.prototype.gaI.call(r)) +this.OF(A.L9(new A.Q(A.U(1/0,s.a,s.b),A.U(1/0,s.c,s.d))),!1)}, +dc(a,b){var s,r=this,q=r.aE||!t.k.a(A.L.prototype.gaI.call(r)).k(0,a) +r.bj=!0 +r.OF(a,b) +r.aE=r.bj=!1 +if(q){s=r.d +s.toString +t.im.a(s).Lo(new A.b5k(r),t.k)}}, +kY(a){return this.dc(a,!1)}, +zN(){var s=t.k.a(A.L.prototype.gaI.call(this)) +this.id=new A.Q(A.U(1/0,s.a,s.b),A.U(1/0,s.c,s.d))}, +cM(){var s,r=this +if(r.bj){r.aE=!1 +return}s=r.a0$ +if(s==null){r.aE=!1 +return}r.ix(s,t.k.a(A.L.prototype.gaI.call(r))) +r.aE=!1}, +eK(a,b){var s,r=a.b +r.toString +s=t.q.a(r).a +b.aJ(0,s.a,s.b)}} +A.b5j.prototype={ +$1(a){return this.a}, +$S:729} +A.b5k.prototype={ +$1(a){var s=this.a +s.aE=!0 +s.xf()}, +$S:730} +A.WH.prototype={ +k5(){this.a1j() +var s=this.V +if(s!=null&&s.y!=null)this.q6(s)}, +cM(){this.uN() +var s=this.V +if(s!=null)s.aUp()}, +jx(a){var s +this.uM(a) +s=this.V +if(s!=null)a.$1(s)}} +A.ams.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.atQ.prototype={} +A.atR.prototype={} +A.YW.prototype={ +bc(a){var s,r,q +this.fg(a) +s=this.aZ$ +for(r=t.Qv;s!=null;){s.bc(a) +q=s.b +q.toString +s=r.a(q).bd$}}, +b3(a){var s,r,q +this.fh(0) +s=this.aZ$ +for(r=t.Qv;s!=null;){s.b3(0) +q=s.b +q.toString +s=r.a(q).bd$}}} +A.atZ.prototype={} +A.Nt.prototype={ +b5(){var s=t.w +return new A.Vm(A.b3([!1,!0,!0,!0],s,s),null,null,B.p)}, +zD(a){return A.ava().$1(a)}} +A.Vm.prototype={ +bu(){var s,r,q=this +q.bN() +s=q.a +r=s.f +q.d=A.brn(A.ch(s.e),r,q) +r=q.a +s=r.f +s=A.brn(A.ch(r.e),s,q) +q.e=s +r=q.d +r.toString +q.f=new A.CT(A.b([r,s],t.Eo))}, +bH(a){var s,r=this +r.c7(a) +if(!a.f.k(0,r.a.f)||A.ch(a.e)!==A.ch(r.a.e)){s=r.d +s.toString +s.sA(0,r.a.f) +s=r.d +s.toString +s.sabq(A.ch(r.a.e)) +s=r.e +s.toString +s.sA(0,r.a.f) +s=r.e +s.toString +s.sabq(A.ch(r.a.e))}}, +RT(a){var s,r,q,p,o,n,m,l,k,j,i=this +if(!i.a.zD(a))return!1 +s=a.a +r=s.e +if(A.ch(r)!==A.ch(i.a.e))return!1 +q=i.d +q.toString +p=s.c +p.toString +o=s.a +o.toString +q.e=-Math.min(p-o,q.d) +o=i.e +o.toString +s=s.b +s.toString +o.e=-Math.min(s-p,o.d) +if(a instanceof A.pN){s=a.e +if(s<0)n=q +else if(s>0)n=o +else n=null +m=n===q +q=i.c +q.hI(new A.PB(m,0)) +q=i.w +q.u(0,m,!0) +q.i(0,m).toString +n.d=0 +i.w.i(0,m).toString +q=a.f +if(q!==0){s=n.c +if(s!=null)s.bq(0) +n.c=null +l=A.U(Math.abs(q),100,1e4) +s=n.r +if(n.a===B.m7)r=0.3 +else{r=n.w +r===$&&A.c() +q=r.a +q=r.b.az(0,q.gm(q)) +r=q}s.a=r +r.toString +s.b=A.U(l*0.00006,r,0.5) +r=n.x +s=n.y +s===$&&A.c() +q=s.a +r.a=s.b.az(0,q.gm(q)) +r.b=Math.min(0.025+75e-8*l*l,1) +r=n.b +r===$&&A.c() +r.e=A.dE(0,B.c.ai(0.15+l*0.02)) +r.pL(0,0) +n.at=0.5 +n.a=B.ajb}else{q=a.d +if(q!=null){p=a.b.gaF() +p.toString +t.x.a(p) +k=p.gC(0) +j=p.e5(q.d) +switch(A.ch(r).a){case 0:n.toString +r=k.b +n.ah4(0,Math.abs(s),k.a,A.U(j.b,0,r),r) +break +case 1:n.toString +r=k.a +n.ah4(0,Math.abs(s),k.b,A.U(j.a,0,r),r) +break}}}}else{if(!(a instanceof A.pZ&&a.d!=null))s=a instanceof A.q_&&a.d!=null +else s=!0 +if(s){if(q.a===B.m8)q.v0(B.hx) +s=i.e +if(s.a===B.m8)s.v0(B.hx)}}i.r=A.J(a) +return!1}, +t(){this.d.t() +this.e.t() +this.arN()}, +ab(a){var s=this,r=null,q=s.a,p=s.d,o=s.e,n=q.e,m=s.f +return new A.fS(s.gRS(),new A.mx(A.ew(new A.mx(q.w,r),new A.ajK(p,o,n,m),r,r,B.x),r),r,t.WA)}} +A.Jg.prototype={ +W(){return"_GlowState."+this.b}} +A.Vl.prototype={ +sA(a,b){if(this.ay.k(0,b))return +this.ay=b +this.D()}, +sabq(a){if(this.ch===a)return +this.ch=a +this.D()}, +t(){var s=this,r=s.b +r===$&&A.c() +r.t() +r=s.f +r===$&&A.c() +r.t() +r=s.z +r===$&&A.c() +r.w.f2$.P(0,r) +r.a1r() +r=s.c +if(r!=null)r.bq(0) +s.fN()}, +ah4(a,b,c,d,e){var s,r,q,p=this,o=p.c +if(o!=null)o.bq(0) +p.ax=p.ax+b/200 +o=p.r +s=p.w +s===$&&A.c() +r=s.b +s=s.a +o.a=r.az(0,s.gm(s)) +o.b=Math.min(r.az(0,s.gm(s))+b/c*0.8,0.5) +q=Math.min(c,e*0.20096189432249995) +s=p.x +r=p.y +r===$&&A.c() +o=r.b +r=r.a +s.a=o.az(0,r.gm(r)) +s.b=Math.max(1-1/(0.7*Math.sqrt(p.ax*q)),A.hg(o.az(0,r.gm(r)))) +r=d/e +p.as=r +if(r!==p.at){o=p.z +o===$&&A.c() +if(!o.gaUe())o.bR(0)}else{o=p.z +o===$&&A.c() +o.dM(0) +p.Q=null}o=p.b +o===$&&A.c() +o.e=B.dH +if(p.a!==B.m8){o.pL(0,0) +p.a=B.m8}else{o=o.r +if(!(o!=null&&o.a!=null))p.D()}p.c=A.dn(B.dH,new A.b2s(p))}, +Pn(a){var s=this +if(a!==B.af)return +switch(s.a.a){case 1:s.v0(B.hx) +break +case 3:s.a=B.m7 +s.ax=0 +break +case 2:case 0:break}}, +v0(a){var s,r,q=this,p=q.a +if(p===B.HW||p===B.m7)return +p=q.c +if(p!=null)p.bq(0) +q.c=null +p=q.r +s=q.w +s===$&&A.c() +r=s.a +p.a=s.b.az(0,r.gm(r)) +p.b=0 +p=q.x +r=q.y +r===$&&A.c() +s=r.a +p.a=r.b.az(0,s.gm(s)) +p.b=0 +p=q.b +p===$&&A.c() +p.e=a +p.pL(0,0) +q.a=B.HW}, +aKd(a){var s,r=this,q=r.Q +if(q!=null){q=q.a +s=r.as +r.at=s-(s-r.at)*Math.pow(2,-(a.a-q)/$.byq().a) +r.D()}if(A.Zk(r.as,r.at,0.001)){q=r.z +q===$&&A.c() +q.dM(0) +r.Q=null}else r.Q=a}, +aO(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=j.w +i===$&&A.c() +s=i.a +if(J.f(i.b.az(0,s.gm(s)),0))return +s=b.a +r=b.b +q=s>r?r/s:1 +p=s*3/2 +o=Math.min(r,s*0.20096189432249995) +r=j.y +r===$&&A.c() +n=r.a +n=r.b.az(0,n.gm(n)) +r=j.at +m=$.G().B() +l=j.ay +k=i.a +m.sA(0,A.S(B.c.ai(255*i.b.az(0,k.gm(k))),l.gm(l)>>>16&255,l.gm(l)>>>8&255,l.gm(l)&255)) +a.bU(0) +a.aJ(0,0,j.d+j.e) +a.ff(0,1,n*q) +a.mZ(new A.A(0,0,0+s,0+o)) +a.cs(new A.i(s/2*(0.5+r),o-p),p,m) +a.bw(0)}, +j(a){return"_GlowController(color: "+this.ay.j(0)+", axis: "+this.ch.b+")"}} +A.b2s.prototype={ +$0(){return this.a.v0(B.nA)}, +$S:0} +A.ajK.prototype={ +a6N(a,b,c,d,e){var s +if(c==null)return +switch(A.ug(d,e).a){case 0:c.aO(a,b) +break +case 2:a.bU(0) +a.aJ(0,0,b.b) +a.ff(0,1,-1) +c.aO(a,b) +a.bw(0) +break +case 3:a.bU(0) +a.oO(0,1.5707963267948966) +a.ff(0,1,-1) +c.aO(a,new A.Q(b.b,b.a)) +a.bw(0) +break +case 1:a.bU(0) +s=b.a +a.aJ(0,s,0) +a.oO(0,1.5707963267948966) +c.aO(a,new A.Q(b.b,s)) +a.bw(0) +break}}, +aO(a,b){var s=this,r=s.d +s.a6N(a,b,s.b,r,B.wO) +s.a6N(a,b,s.c,r,B.jZ)}, +cF(a){return a.b!=this.b||a.c!=this.c}, +j(a){return"_GlowingOverscrollIndicatorPainter("+A.j(this.b)+", "+A.j(this.c)+")"}} +A.aqu.prototype={ +W(){return"_StretchDirection."+this.b}} +A.Sk.prototype={ +b5(){return new A.XE(null,null,B.p)}, +zD(a){return A.ava().$1(a)}} +A.XE.prototype={ +gv7(){var s,r,q,p,o,n=this,m=null,l=n.d +if(l===$){s=t.Y +r=new A.br(0,0,s) +q=new A.XD(r,B.tR,B.tQ,$.aa()) +p=A.cW(m,m,m,m,n) +p.cH() +o=p.eg$ +o.b=!0 +o.a.push(q.gPm()) +q.a!==$&&A.aj() +q.a=p +p=A.dP(B.f6,p,m) +p.a.an(0,q.gfa()) +q.c!==$&&A.aj() +q.c=p +t.ve.a(p) +q.b!==$&&A.aj() +q.b=new A.bz(p,r,s.h("bz")) +n.d!==$&&A.N() +n.d=q +l=q}return l}, +RT(a){var s,r,q,p,o,n,m,l=this +if(!l.a.zD(a))return!1 +s=a.a +if(A.ch(s.e)!==A.ch(l.a.c))return!1 +if(a instanceof A.pN){l.f=a +J.ai(l.e) +r=a.e +q=l.c +q.hI(new A.PB(r<0,0)) +l.w=!0 +r=l.r+=r +q=a.f +if(q!==0){s=l.gv7() +r=l.r +p=A.U(Math.abs(q),1,1e4) +q=s.d +o=s.b +o===$&&A.c() +n=o.a +q.a=o.b.az(0,n.gm(n)) +q.b=Math.min(0.016+1.01/p,1) +q=s.a +q===$&&A.c() +q.e=A.dE(0,B.c.ai(p*0.02)) +q.pL(0,0) +s.e=B.ak1 +s.r=r>0?B.tQ:B.I9}else if(a.d!=null){s=s.d +s.toString +m=A.U(Math.abs(r)/s,0,1) +l.gv7().aXV(0,m,l.r)}}else if(a instanceof A.pZ||a instanceof A.q_){l.r=0 +s=l.gv7() +if(s.e===B.tS)s.v0(B.nB)}l.e=a +return!1}, +axT(a){var s +switch(a.a){case 0:s=this.a.c +break +case 1:s=A.btO(this.a.c) +break +default:s=null}switch(s.a){case 0:s=B.If +break +case 2:s=B.Ie +break +case 3:s=B.aO +break +case 1:s=B.b_ +break +default:s=null}return s}, +t(){this.gv7().t() +this.asb()}, +ab(a){var s={},r=A.cj(a,B.h5,t.l).w +s.a=null +return new A.fS(this.gRS(),A.mX(this.gv7(),new A.b75(s,this,r.a),null),null,t.WA)}} +A.b75.prototype={ +$2(a,b){var s,r,q,p,o,n,m,l=this,k=l.b,j=k.gv7().b +j===$&&A.c() +s=j.a +s=j.b.az(0,s.gm(s)) +switch(A.ch(k.a.c).a){case 0:r=1+s +l.a.a=l.c.a +q=1 +break +case 1:q=1+s +l.a.a=l.c.b +r=1 +break +default:r=1 +q=1}p=k.axT(k.gv7().r) +j=k.f +if(j==null)o=null +else{j=j.a.d +j.toString +o=j}if(o==null)o=l.a.a +j=A.G6(r,q,1) +s=s===0 +n=s?null:B.fi +k=k.a +m=A.adO(p,k.f,n,j,!0) +return A.LD(m,!s&&o!==l.a.a?k.e:B.y,null)}, +$S:731} +A.JX.prototype={ +W(){return"_StretchState."+this.b}} +A.XD.prototype={ +aXV(a,b,c){var s,r,q,p=this,o=c>0?B.tQ:B.I9 +if(p.r!==o&&p.e===B.tT)return +p.r=o +p.f=b +s=p.d +r=p.b +r===$&&A.c() +q=r.a +s.a=r.b.az(0,q.gm(q)) +q=p.f +s.b=0.016*q+0.016*(1-Math.exp(-q*8.237217661997105)) +q=p.a +q===$&&A.c() +q.e=B.nB +if(p.e!==B.tS){q.pL(0,0) +p.e=B.tS}else{s=q.r +if(!(s!=null&&s.a!=null))p.D()}}, +Pn(a){var s=this +if(a!==B.af)return +switch(s.e.a){case 1:s.v0(B.nB) +break +case 3:s.e=B.tR +s.f=0 +break +case 2:case 0:break}}, +v0(a){var s,r,q=this,p=q.e +if(p===B.tT||p===B.tR)return +p=q.d +s=q.b +s===$&&A.c() +r=s.a +p.a=s.b.az(0,r.gm(r)) +p.b=0 +p=q.a +p===$&&A.c() +p.e=a +p.pL(0,0) +q.e=B.tT}, +t(){var s=this.a +s===$&&A.c() +s.t() +s=this.c +s===$&&A.c() +s.t() +this.fN()}, +j(a){return"_StretchController()"}} +A.PB.prototype={ +hu(a){this.aqu(a) +a.push("side: "+(this.a?"leading edge":"trailing edge"))}} +A.W9.prototype={ +hu(a){var s,r +this.OA(a) +s=this.lz$ +r=s===0?"local":"remote" +a.push("depth: "+s+" ("+r+")")}} +A.YL.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.Z2.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.vQ.prototype={} +A.XB.prototype={ +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.XB&&A.eu(b.a,this.a)}, +gL(a){return A.bM(this.a)}, +j(a){return"StorageEntryIdentifier("+B.b.cj(this.a,":")+")"}} +A.PD.prototype={ +a26(a){var s=A.b([],t.g8) +if(A.bop(a,s))a.nJ(new A.aMx(s)) +return s}, +ajm(a,b){var s,r=this +if(r.a==null)r.a=A.D(t.K,t.z) +s=r.a26(a) +if(s.length!==0)r.a.u(0,new A.XB(s),b)}, +aho(a){var s +if(this.a==null)return null +s=this.a26(a) +return s.length!==0?this.a.i(0,new A.XB(s)):null}} +A.aMx.prototype={ +$1(a){return A.bop(a,this.a)}, +$S:20} +A.Gv.prototype={ +ab(a){return this.c}} +A.PC.prototype={ +gu5(){return!0}, +gyA(){return!1}, +TX(a){return a instanceof A.ku}, +abI(a){return a instanceof A.ku}} +A.aKw.prototype={} +A.aNH.prototype={} +A.a23.prototype={ +RA(a){return this.aD8(a)}, +aD8(a){var s=0,r=A.r(t.H),q,p=this,o,n,m +var $async$RA=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:n=A.dS(a.b) +m=p.a +if(!m.aR(0,n)){s=1 +break}m=m.i(0,n) +m.toString +o=a.a +if(o==="Menu.selectedCallback"){m.gb0f().$0() +m.gaWB() +o=$.b1.bf$.f.c.e +o.toString +A.bBL(o,m.gaWB(),t.vz)}else if(o==="Menu.opened")m.gb0e(m).$0() +else if(o==="Menu.closed")m.gb0d(m).$0() +case 1:return A.p(q,r)}}) +return A.q($async$RA,r)}} +A.GM.prototype={ +el(a){return this.f!=a.f}} +A.wg.prototype={ +b5(){return new A.aoE(null,A.D(t.yb,t.Q),null,!0,null,B.p)}} +A.aoE.prototype={ +ghY(){return this.a.d}, +l3(a,b){}, +ab(a){return A.Tk(this.cS$,this.a.c)}} +A.Ct.prototype={ +el(a){return a.f!=this.f}} +A.R7.prototype={ +b5(){return new A.WV(B.p)}} +A.WV.prototype={ +cR(){var s,r=this +r.fP() +s=r.c +s.toString +r.r=A.wh(s) +r.Rr() +if(r.d==null){r.a.toString +r.d=!1}}, +bH(a){this.c7(a) +this.Rr()}, +ga5Y(){this.a.toString +return!1}, +Rr(){var s,r=this +if(r.ga5Y()&&!r.w){r.w=!0;++$.Bg.DI$ +s=$.f6.bD$ +s===$&&A.c() +s.gaZ4().cu(new A.b5U(r),t.P)}}, +aGq(){var s,r=this +r.e=!1 +r.f=null +s=$.f6.bD$ +s===$&&A.c() +s.ad(0,r.gSa()) +r.Rr()}, +t(){if(this.e){var s=$.f6.bD$ +s===$&&A.c() +s.ad(0,this.gSa())}this.bG()}, +ab(a){var s,r,q=this,p=q.d +p.toString +if(p&&q.ga5Y())return B.bb +p=q.r +if(p==null)p=q.f +s=q.a +r=s.d +return A.Tk(p,new A.wg(s.c,r,null))}} +A.b5U.prototype={ +$1(a){var s,r=this.a +r.w=!1 +if(r.c!=null){s=$.f6.bD$ +s===$&&A.c() +s.an(0,r.gSa()) +r.aK(new A.b5T(r,a))}$.Bg.ab4()}, +$S:732} +A.b5T.prototype={ +$0(){var s=this.a +s.f=this.b +s.e=!0 +s.d=!1}, +$S:0} +A.hw.prototype={ +gz2(a){return!0}, +t(){var s=this,r=s.c +if(r!=null)r.aKL(s) +s.fN() +s.a=!0}} +A.nn.prototype={ +V0(a){}, +q7(a,b){var s,r,q=this,p=q.cS$ +p=p==null?null:J.Kt(p.gtd(),b) +s=p===!0 +r=s?a.zk(J.bG(q.cS$.gtd(),b)):a.JY() +if(a.b==null){a.b=b +a.c=q +p=new A.aQx(q,a) +a.an(0,p) +q.jU$.u(0,a,p)}a.aeX(r) +if(!s&&a.gz2(a)&&q.cS$!=null)q.T4(a)}, +vz(){var s,r,q=this +if(q.jV$!=null){s=q.cS$ +s=s==null?null:s.e +s=s==q.ghY()||q.guh()}else s=!0 +if(s)return +r=q.cS$ +if(q.tn(q.jV$,!1))if(r!=null)r.t()}, +guh(){var s,r,q=this +if(q.hM$)return!0 +if(q.ghY()==null)return!1 +s=q.c +s.toString +r=A.wh(s) +if(r!=q.jV$){if(r==null)s=null +else{s=r.c +s=s==null?null:s.d +s=s===!0}s=s===!0}else s=!1 +return s}, +tn(a,b){var s,r,q=this +if(q.ghY()==null||a==null)return q.a8g(null,b) +if(b||q.cS$==null){s=q.ghY() +s.toString +return q.a8g(a.aNA(s,q),b)}s=q.cS$ +s.toString +r=q.ghY() +r.toString +s.aYA(r) +r=q.cS$ +r.toString +a.kL(r) +return!1}, +a8g(a,b){var s,r=this,q=r.cS$ +if(a==q)return!1 +r.cS$=a +if(!b){if(a!=null){s=r.jU$ +new A.bk(s,A.w(s).h("bk<1>")).al(0,r.gaL9())}r.V0(q)}return!0}, +T4(a){var s,r=a.gz2(a),q=this.cS$ +if(r){if(q!=null){r=a.b +r.toString +s=a.A4() +if(!J.f(J.bG(q.gtd(),r),s)||!J.Kt(q.gtd(),r)){J.kc(q.gtd(),r,s) +q.xR()}}}else if(q!=null){r=a.b +r.toString +q.aYs(0,r,t.K)}}, +aKL(a){var s=this.jU$.P(0,a) +s.toString +a.ad(0,s) +a.c=a.b=null}} +A.aQx.prototype={ +$0(){var s=this.a +if(s.cS$==null)return +s.T4(this.b)}, +$S:0} +A.b8y.prototype={ +$2(a,b){if(!a.a)a.ad(0,b)}, +$S:48} +A.au_.prototype={ +bH(a){this.c7(a) +this.vz()}, +cR(){var s,r,q,p,o=this +o.fP() +s=o.cS$ +r=o.guh() +q=o.c +q.toString +q=A.wh(q) +o.jV$=q +p=o.tn(q,r) +if(r){o.l3(s,o.hM$) +o.hM$=!1}if(p)if(s!=null)s.t()}, +t(){var s,r=this +r.jU$.al(0,new A.b8y()) +s=r.cS$ +if(s!=null)s.t() +r.cS$=null +r.bG()}} +A.dv.prototype={ +sm(a,b){var s=this.y +if(b==null?s!=null:b!==s){this.y=b +this.V3(s)}}, +aeX(a){this.y=a}} +A.mO.prototype={ +JY(){return this.cy}, +V3(a){this.D()}, +zk(a){return A.w(this).h("mO.T").a(a)}, +A4(){var s=this.y +return s==null?A.w(this).h("dv.T").a(s):s}} +A.WR.prototype={ +zk(a){return this.aqQ(a)}, +A4(){var s=this.aqR() +s.toString +return s}} +A.R_.prototype={} +A.Bj.prototype={} +A.R0.prototype={} +A.b8z.prototype={ +$2(a,b){if(!a.a)a.ad(0,b)}, +$S:48} +A.wl.prototype={ +grJ(){return this.b}} +A.aaO.prototype={ +b5(){return new A.JQ(new A.aoB($.aa()),null,A.D(t.yb,t.Q),null,!0,null,B.p,this.$ti.h("JQ<1>"))}} +A.aaN.prototype={ +W(){return"RouteInformationReportingType."+this.b}} +A.JQ.prototype={ +ghY(){return this.a.r}, +bu(){var s,r=this +r.bN() +s=r.a.c +if(s!=null)s.an(0,r.gHA()) +r.a.f.aLS(r.gQS()) +r.a.e.an(0,r.gR0())}, +l3(a,b){var s,r,q=this,p=q.f +q.q7(p,"route") +s=p.y +r=s==null +if((r?A.w(p).h("dv.T").a(s):s)!=null){p=r?A.w(p).h("dv.T").a(s):s +p.toString +q.I4(p,new A.b6a(q))}else{p=q.a.c +if(p!=null)q.I4(p.a,new A.b6b(q))}}, +aH1(){var s=this +if(s.w||s.a.c==null)return +s.w=!0 +$.cN.dP$.push(s.gaGv())}, +aGw(a){var s,r,q,p,o,n=this +if(n.c==null)return +n.w=!1 +s=n.f +r=s.y +q=r==null +if((q?A.w(s).h("dv.T").a(r):r)!=null){s=q?A.w(s).h("dv.T").a(r):r +s.toString +r=n.a.c +r.toString +q=n.e +q.toString +if(q!==B.a5I)if(q===B.rd){q=r.b.grJ() +p=s.grJ() +q=q.ghg(q)===p.ghg(p)&&q.gne()===p.gne()&&B.Tc.eN(q.gru(),p.gru()) +o=q}else o=!1 +else o=!0 +B.kD.oA("selectMultiEntryHistory",t.H) +A.bq3(o,s.c,s.grJ()) +r.b=r.a=s}n.e=B.rd}, +aGL(){this.a.e.gb_Y() +this.a.toString +return null}, +HS(){var s=this +s.f.sm(0,s.aGL()) +if(s.e==null)s.e=B.rd +s.aH1()}, +cR(){var s,r=this +r.r=!0 +r.as3() +s=r.a.c +if(s!=null&&r.r)r.I4(s.a,new A.b69(r)) +r.r=!1 +r.HS()}, +bH(a){var s,r,q,p=this +p.as4(a) +s=p.a.c +r=a.c +p.d=new A.B() +if(s!=r){s=r==null +if(!s)r.ad(0,p.gHA()) +q=p.a.c +if(q!=null)q.an(0,p.gHA()) +s=s?null:r.a +r=p.a.c +if(s!=(r==null?null:r.a))p.a5k()}s=a.f +if(p.a.f!==s){r=p.gQS() +s.aYv(r) +p.a.f.aLS(r)}p.a.toString +s=p.gR0() +a.e.ad(0,s) +p.a.e.an(0,s) +p.HS()}, +t(){var s,r=this +r.f.t() +s=r.a.c +if(s!=null)s.ad(0,r.gHA()) +r.a.f.aYv(r.gQS()) +r.a.e.ad(0,r.gR0()) +r.d=null +r.as5()}, +I4(a,b){var s,r,q=this +q.r=!1 +q.d=new A.B() +s=q.a.d +s.toString +r=q.c +r.toString +s.b0j(a,r).cu(q.aFL(q.d,b),t.H)}, +aFL(a,b){return new A.b67(this,a,b)}, +a5k(){var s=this +s.r=!0 +s.I4(s.a.c.a,new A.b64(s))}, +ayO(){var s=this +s.d=new A.B() +return s.a.e.b0m().cu(s.aAH(s.d),t.w)}, +aAH(a){return new A.b65(this,a)}, +a7N(){this.aK(new A.b68()) +this.HS() +return new A.d9(null,t.b6)}, +aAI(){this.aK(new A.b66()) +this.HS()}, +ab(a){var s=this.cS$,r=this.a,q=r.c,p=r.f,o=r.d +r=r.e +return A.Tk(s,new A.ap_(q,p,o,r,this,new A.j1(r.gb_U(),null),null))}} +A.b6a.prototype={ +$0(){return this.a.a.e.gb_w()}, +$S(){return this.a.$ti.h("an<~>(1)()")}} +A.b6b.prototype={ +$0(){return this.a.a.e.gb_v()}, +$S(){return this.a.$ti.h("an<~>(1)()")}} +A.b69.prototype={ +$0(){return this.a.a.e.gal2()}, +$S(){return this.a.$ti.h("an<~>(1)()")}} +A.b67.prototype={ +$1(a){var s=0,r=A.r(t.H),q,p=this,o,n +var $async$$1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=p.a +n=p.b +if(o.d!=n){s=1 +break}s=3 +return A.x(p.c.$0().$1(a),$async$$1) +case 3:if(o.d==n)o.a7N() +case 1:return A.p(q,r)}}) +return A.q($async$$1,r)}, +$S(){return this.a.$ti.h("an<~>(1)")}} +A.b64.prototype={ +$0(){return this.a.a.e.gal2()}, +$S(){return this.a.$ti.h("an<~>(1)()")}} +A.b65.prototype={ +$1(a){var s=this.a +if(this.b!=s.d)return new A.d9(!0,t.d9) +s.a7N() +return new A.d9(a,t.d9)}, +$S:734} +A.b68.prototype={ +$0(){}, +$S:0} +A.b66.prototype={ +$0(){}, +$S:0} +A.ap_.prototype={ +el(a){return!0}} +A.aoB.prototype={ +JY(){return null}, +V3(a){this.D()}, +zk(a){var s,r +if(a==null)return null +t.Dn.a(a) +s=J.cV(a) +r=A.eE(s.ga9(a)) +if(r==null)return null +return new A.wl(A.jn(r,0,null),s.ga_(a))}, +A4(){var s,r=this,q=r.y,p=q==null +if((p?A.w(r).h("dv.T").a(q):q)==null)q=null +else{q=(p?A.w(r).h("dv.T").a(q):q).grJ().j(0) +s=r.y +q=[q,(s==null?A.w(r).h("dv.T").a(s):s).c]}return q}} +A.Kb.prototype={ +bH(a){this.c7(a) +this.vz()}, +cR(){var s,r,q,p,o=this +o.fP() +s=o.cS$ +r=o.guh() +q=o.c +q.toString +q=A.wh(q) +o.jV$=q +p=o.tn(q,r) +if(r){o.l3(s,o.hM$) +o.hM$=!1}if(p)if(s!=null)s.t()}, +t(){var s,r=this +r.jU$.al(0,new A.b8z()) +s=r.cS$ +if(s!=null)s.t() +r.cS$=null +r.bG()}} +A.Gs.prototype={ +w3(){var s,r=this,q=A.vP(r.gau4(),!1,!1) +r.p4=q +r.gEx() +s=A.vP(r.gau6(),r.gu5(),!0) +r.RG=s +B.b.I(r.f,A.b([q,s],t.wi)) +r.apa()}, +vy(a){var s,r=this +r.ap5(a) +s=r.ay.Q +s===$&&A.c() +if(s===B.Y&&!r.at)r.a.adZ(r) +return!0}, +t(){var s,r,q +for(s=this.f,r=s.length,q=0;q"))}} +A.u_.prototype={ +bu(){var s,r,q=this +q.bN() +s=A.b([],t.Eo) +r=q.a.c.k2 +if(r!=null)s.push(r) +r=q.a.c.k3 +if(r!=null)s.push(r) +q.e=new A.CT(s)}, +bH(a){this.c7(a) +this.a9V()}, +cR(){this.fP() +this.d=null +this.a9V()}, +a9V(){var s,r,q=this.a.c,p=q.id +p=p!=null?p:q.a.a.z +s=this.f +s.fr=p +r=q.grg() +if(r)this.a.c.a.a.toString +if(r){r=q.a.y.gkS() +if(r!=null)r.O0(s)}}, +a4h(){this.aK(new A.b43(this))}, +t(){this.f.t() +this.r.t() +this.bG()}, +ga8p(){var s=this.a.c.k2 +if((s==null?null:s.gcz(0))!==B.bE){s=this.a.c.a +s=s==null?null:s.cx.a +s=s===!0}else s=!0 +return s}, +ab(a){var s,r,q=this,p=null,o=q.a.c,n=o.grg(),m=q.a.c +if(!m.gaeG()){m=m.pF$ +m=m!=null&&m.length!==0}else m=!0 +s=q.a.c +s=s.gaeG()||s.KM$>0 +r=q.a.c +return A.mX(o.c,new A.b47(q),new A.VT(n,m,s,o,new A.Gp(r.k1,new A.Gv(new A.j1(new A.b48(q),p),r.p3,p),p),p))}} +A.b43.prototype={ +$0(){this.a.d=null}, +$S:0} +A.b47.prototype={ +$2(a,b){var s=this.a.a.c.c.a +b.toString +return new A.wg(b,s,null)}, +$S:735} +A.b48.prototype={ +$1(a){var s,r=null,q=A.b3([B.tb,new A.ahX(a,new A.bW(A.b([],t.ot),t.wS))],t.B,t.od),p=this.a,o=p.a.c.grg(),n=p.e +n===$&&A.c() +s=p.d +if(s==null)s=p.d=new A.mx(new A.j1(new A.b45(p),r),p.a.c.p2) +return A.xJ(q,A.boN(A.beV(!1,new A.mx(A.mX(n,new A.b46(p),s),r),r,r,p.f,!o),p.r))}, +$S:736} +A.b46.prototype={ +$2(a,b){var s,r,q=this.a,p=q.a.c,o=p.k2 +o.toString +s=p.k3 +s.toString +r=p.a +r=r==null?null:r.cx +if(r==null)r=new A.cD(!1,$.aa(),t.uh) +return p.TT(a,o,s,A.mX(r,new A.b44(q),b))}, +$S:141} +A.b44.prototype={ +$2(a,b){var s=this.a,r=s.ga8p() +s.f.sqQ(!r) +return A.zF(b,r,null)}, +$S:1107} +A.b45.prototype={ +$1(a){var s,r=this.a.a.c,q=r.k2 +q.toString +s=r.k3 +s.toString +return r.TS(a,q,s)}, +$S:18} +A.ig.prototype={ +aK(a){var s,r=this.p1 +if(r.gap()!=null){r=r.gap() +if(r.a.c.grg()){s=!r.ga8p() +if(s)r.a.c.a.a.toString}else s=!1 +if(s){s=r.a.c.a.y.gkS() +if(s!=null)s.O0(r.f)}r.aK(a)}else a.$0()}, +TT(a,b,c,d){return d}, +w3(){var s=this +s.a1t() +s.k2=A.GQ(A.hX.prototype.giM.call(s,0)) +s.k3=A.GQ(A.hX.prototype.gNR.call(s))}, +gaXH(){var s,r=this +if(r.gXx())return!1 +s=r.pF$ +if(s!=null&&s.length!==0)return!1 +if(r.k4.length!==0||r.gwq()===B.ia)return!1 +if(r.k2.gcz(0)!==B.af)return!1 +if(r.k3.gcz(0)!==B.Y)return!1 +if(r.a.cx.a)return!1 +return!0}, +sLR(a){var s,r=this +if(r.k1===a)return +r.aK(new A.aKR(r,a)) +s=r.k2 +s.toString +s.sbs(0,r.k1?B.he:A.hX.prototype.giM.call(r,0)) +s=r.k3 +s.toString +s.sbs(0,r.k1?B.eh:A.hX.prototype.gNR.call(r)) +r.ps()}, +nK(){var s=0,r=A.r(t.oj),q,p=this,o,n,m +var $async$nK=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:p.p1.gap() +o=A.ab(p.k4,!0,t.Ev),n=o.length,m=0 +case 3:if(!(m>>24&255)!==0&&!n.k1){s=n.k2 +s.toString +r=n.gyz().a +r=A.S(0,r>>>16&255,r>>>8&255,r&255) +q=n.gyz() +p=t.IC.h("h_") +t.ve.a(s) +o=new A.ZX(n.gyA(),n.gJr(),!0,new A.bz(s,new A.h_(new A.n2(B.bt),new A.fp(r,q),p),p.h("bz")),m)}else o=A.bfR(!0,m,m,n.gyA(),m,n.gJr(),m) +o=A.zF(o,n.k2.gcz(0)===B.bE||n.k2.gcz(0)===B.Y,m) +s=n.gyA() +return s?A.dg(m,m,o,!1,m,m,!1,!1,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,B.a3Z,m,m,m):o}, +au7(a){var s=this,r=null,q=s.R8 +return q==null?s.R8=A.dg(r,r,new A.Jw(s,s.p1,A.w(s).h("Jw")),!1,r,r,!1,!1,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,B.a3Y,r,r,r):q}, +j(a){return"ModalRoute("+this.b.j(0)+", animation: "+A.j(this.ax)+")"}} +A.aKR.prototype={ +$0(){this.a.k1=this.b}, +$S:0} +A.aKP.prototype={ +$0(){}, +$S:0} +A.Q5.prototype={ +gu5(){return!1}, +gEx(){return!0}} +A.Qi.prototype={ +gyA(){return!0}, +gJr(){return this.dj}, +gyz(){return this.eB}, +gN4(a){return this.fT}, +TS(a,b,c){var s=null +return A.dg(s,s,new A.a2x(this.fV,this.ce.$3(a,b,c),s),!1,s,s,!1,!0,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,!0,s,s,s,s,s,s)}, +TT(a,b,c,d){return this.fU.$4(a,b,c,d)}} +A.CU.prototype={ +nK(){var s=0,r=A.r(t.oj),q,p=this,o +var $async$nK=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:o=p.pF$ +if(o!=null&&o.length!==0){q=B.l1 +s=1 +break}q=p.apb() +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$nK,r)}, +gwq(){var s=this.pF$ +if(s!=null&&s.length!==0)return B.l1 +return A.eA.prototype.gwq.call(this)}, +vy(a){var s,r,q=this,p=q.pF$ +if(p!=null&&p.length!==0){s=p.pop() +s.b=null +s.b_G() +r=s.c&&--q.KM$===0 +if(q.pF$.length===0||r)q.ps() +return!1}q.apC(a) +return!0}} +A.aaT.prototype={ +ab(a){var s,r,q,p=this,o=A.cj(a,B.cM,t.l).w.r,n=p.r,m=Math.max(o.a,n.a),l=p.d,k=l?o.b:0 +k=Math.max(k,n.b) +s=Math.max(o.c,n.c) +r=p.f +q=r?o.d:0 +return new A.cu(new A.aS(m,k,s,Math.max(q,n.d)),A.bo4(p.x,a,r,!0,!0,l),null)}} +A.ab_.prototype={ +ai0(){}, +ad8(a,b){if(b!=null)b.hI(new A.Hq(null,a,b,0))}, +ad9(a,b,c){b.hI(A.bgy(b,null,null,a,c))}, +Km(a,b,c){b.hI(new A.pN(null,c,0,a,b,0))}, +ad7(a,b){b.hI(new A.pZ(null,a,b,0))}, +Cw(){}, +t(){this.b=!0}, +j(a){return"#"+A.bU(this)}} +A.ve.prototype={ +Cw(){this.a.mC(0)}, +gqn(){return!1}, +goE(){return!1}, +gdt(){return 0}} +A.aGE.prototype={ +gqn(){return!1}, +goE(){return!1}, +gdt(){return 0}, +t(){this.c.$0() +this.GP()}} +A.aRw.prototype={ +atA(a,b){var s,r,q=this +if(b==null)return a +if(a===0){if(q.d!=null)if(q.r==null){s=q.e +s=b.a-s.a>5e4}else s=!1 +else s=!1 +if(s)q.r=0 +return 0}else{s=q.r +if(s==null)return a +else{s+=a +q.r=s +r=q.d +r.toString +if(Math.abs(s)>r){q.r=null +s=Math.abs(a) +if(s>24)return a +else return Math.min(r/3,s)*J.eY(a)}else return 0}}}, +a8(a,b){var s,r,q,p,o=this +o.x=b +s=b.c +s.toString +r=s===0 +if(!r)o.e=b.a +q=b.a +if(o.f)if(r)if(q!=null){r=o.e +r=q.a-r.a>2e4}else r=!0 +else r=!1 +else r=!1 +if(r)o.f=!1 +p=o.atA(s,q) +if(p===0)return +s=o.a +if(A.auW(s.w.a.c))p=-p +s.ZN(p>0?B.rf:B.rg) +r=s.at +r.toString +s.OL(r-s.r.TG(s,p))}, +Vp(a,b){var s,r,q=this,p=b.b +p.toString +s=-p +if(A.auW(q.a.w.a.c))s=-s +q.x=b +if(q.f){p=q.c +r=Math.abs(s)>Math.abs(p)*0.5 +if(J.eY(s)===J.eY(p)&&r)s+=p}q.a.mC(s)}, +bq(a){this.a.mC(0)}, +t(){this.x=null +this.b.$0()}, +j(a){return"#"+A.bU(this)}} +A.aC7.prototype={ +ad8(a,b){var s=t.uL.a(this.c.x) +if(b!=null)b.hI(new A.Hq(s,a,b,0))}, +ad9(a,b,c){b.hI(A.bgy(b,null,t.zk.a(this.c.x),a,c))}, +Km(a,b,c){b.hI(new A.pN(t.zk.a(this.c.x),c,0,a,b,0))}, +ad7(a,b){var s=this.c.x +b.hI(new A.pZ(s instanceof A.lf?s:null,a,b,0))}, +gqn(){var s=this.c +return(s==null?null:s.w)!==B.bY}, +goE(){return!0}, +gdt(){return 0}, +t(){this.c=null +this.GP()}, +j(a){return"#"+A.bU(this)+"("+A.j(this.c)+")"}} +A.a_x.prototype={ +ai0(){var s=this.a,r=this.c +r===$&&A.c() +s.mC(r.gdt())}, +Cw(){var s=this.a,r=this.c +r===$&&A.c() +s.mC(r.gdt())}, +Sm(){var s=this.c +s===$&&A.c() +s=s.x +s===$&&A.c() +if(!(Math.abs(this.a.OL(s))<1e-10)){s=this.a +s.mX(new A.ve(s))}}, +Sk(){if(!this.b)this.a.mC(0)}, +Km(a,b,c){var s=this.c +s===$&&A.c() +b.hI(new A.pN(null,c,s.gdt(),a,b,0))}, +goE(){return!0}, +gdt(){var s=this.c +s===$&&A.c() +return s.gdt()}, +t(){var s=this.c +s===$&&A.c() +s.t() +this.GP()}, +j(a){var s=A.bU(this),r=this.c +r===$&&A.c() +return"#"+s+"("+r.j(0)+")"}, +gqn(){return this.d}} +A.a2Z.prototype={ +Sm(){var s=this.a,r=this.d +r===$&&A.c() +r=r.x +r===$&&A.c() +if(s.OL(r)!==0){s=this.a +s.mX(new A.ve(s))}}, +Sk(){var s,r +if(!this.b){s=this.a +r=this.d +r===$&&A.c() +s.mC(r.gdt())}}, +Km(a,b,c){var s=this.d +s===$&&A.c() +b.hI(new A.pN(null,c,s.gdt(),a,b,0))}, +gqn(){return!0}, +goE(){return!0}, +gdt(){var s=this.d +s===$&&A.c() +return s.gdt()}, +t(){var s=this.c +s===$&&A.c() +s.fl(0) +s=this.d +s===$&&A.c() +s.t() +this.GP()}, +j(a){var s=A.bU(this),r=this.d +r===$&&A.c() +return"#"+s+"("+r.j(0)+")"}} +A.Rl.prototype={ +Fj(a,b,c,d){var s,r=this +if(b.a==null){s=$.jN.fV$ +s===$&&A.c() +s=s.a.i(0,c)!=null||s.b.i(0,c)!=null}else s=!0 +if(s){r.b.Fj(a,b,c,d) +return}s=r.a +if(s.gcQ(0)==null)return +s=s.gcQ(0) +s.toString +if(A.bJz(s)){$.cN.Ga(new A.aRs(r,a,b,c,d)) +return}r.b.Fj(a,b,c,d)}, +zv(a,b){return this.b.zv(a,b)}, +zw(a,b){return this.b.zw(a,b)}, +EJ(a){return this.b.EJ(a)}} +A.aRs.prototype={ +$1(a){var s=this +A.iC(new A.aRr(s.a,s.b,s.c,s.d,s.e))}, +$S:3} +A.aRr.prototype={ +$0(){var s=this +return s.a.Fj(s.b,s.c,s.d,s.e)}, +$S:0} +A.ab0.prototype={ +yQ(a,b,c,d,e,f,g){return new A.b8o(this,g,c,d,e,a,b,f)}, +aco(a,b,c,d){return this.yQ(null,null,a,b,c,null,d)}, +acn(a,b){var s=null +return this.yQ(s,s,a,s,s,s,b)}, +oT(a){return A.ci()}, +gtC(){return B.FU}, +ut(a){switch(this.oT(a).a){case 4:case 2:return B.oV +case 3:case 5:case 0:case 1:return B.i5}}, +gF1(){return A.cC([B.dS,B.ey],t.bd)}, +Jx(a,b,c){var s=null +switch(this.oT(a).a){case 3:case 4:case 5:return A.bIY(b,c.b,B.df,s,s,A.ava(),B.G,s,s,s,s,B.hx,s) +case 0:case 1:case 2:return b}}, +Jw(a,b,c){switch(this.oT(a).a){case 2:case 3:case 4:case 5:return b +case 0:case 1:return A.bmU(c.a,b,B.l)}}, +Nf(a){switch(this.oT(a).a){case 2:return new A.aRt() +case 4:return new A.aRu() +case 0:case 1:case 3:case 5:return new A.aRv()}}, +wM(a){switch(this.oT(a).a){case 2:return B.Jh +case 4:return B.Ji +case 0:case 1:case 3:case 5:return B.LO}}, +O7(a){return!1}, +j(a){return"ScrollBehavior"}} +A.aRt.prototype={ +$1(a){return A.bFO(a.gdR(a))}, +$S:738} +A.aRu.prototype={ +$1(a){var s=a.gdR(a),r=t.av +return new A.G1(A.bc(20,null,!1,r),s,A.bc(20,null,!1,r))}, +$S:739} +A.aRv.prototype={ +$1(a){return new A.k0(a.gdR(a),A.bc(20,null,!1,t.av))}, +$S:222} +A.b8o.prototype={ +gtC(){var s=this.f +return s==null?B.FU:s}, +gF1(){var s=this.w +return s==null?A.cC([B.dS,B.ey],t.bd):s}, +ut(a){var s=this.a.ut(a) +return s}, +Jw(a,b,c){if(this.c)return this.a.Jw(a,b,c) +return b}, +Jx(a,b,c){if(this.b)return this.a.Jx(a,b,c) +return b}, +yQ(a,b,c,d,e,f,g){var s=this,r=s.gtC(),q=s.gF1(),p=d==null?s.d:d,o=e==null?s.e:e +return s.a.yQ(r,s.r,!1,p,o,q,g)}, +aco(a,b,c,d){return this.yQ(null,null,a,b,c,null,d)}, +acn(a,b){var s=null +return this.yQ(s,s,a,s,s,s,b)}, +oT(a){var s=this.e +return s==null?this.a.oT(a):s}, +wM(a){var s=this.d +return s==null?this.a.wM(a):s}, +O7(a){var s,r=this +if(A.J(a.a)===A.J(r.a))if(a.b===r.b)if(a.c===r.c)if(A.avb(a.gtC(),r.gtC()))if(A.avb(a.gF1(),r.gF1()))if(a.d==r.d)s=a.e!=r.e +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +return s}, +Nf(a){return this.a.Nf(a)}, +j(a){return"_WrappedScrollBehavior"}} +A.Rm.prototype={ +el(a){var s=this.f,r=a.f +if(A.J(s)===A.J(r))s=s!==r&&s.O7(r) +else s=!0 +return s}} +A.Ro.prototype={ +o9(a,b,c){return this.aMp(a,b,c)}, +aMp(a,b,c){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$o9=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:n=A.b([],t.mo) +for(p=q.f,o=0;o#"+A.bU(this)+"("+B.b.cj(r,", ")+")"}} +A.aT6.prototype={ +j(a){var s=A.b([],t.T) +this.hu(s) +return"#"+A.bU(this)+"("+B.b.cj(s,", ")+")"}, +hu(a){var s,r,q +try{s=this.f.length +if(s!=null)a.push("estimated child count: "+A.j(s))}catch(q){r=A.b2(q) +a.push("estimated child count: EXCEPTION ("+J.ai(r).j(0)+")")}}} +A.WZ.prototype={} +A.aT7.prototype={ +axr(a){var s,r,q,p=null,o=this.r +if(!o.aR(0,a)){s=o.i(0,p) +s.toString +for(r=this.f,q=s;q=this.f.length)return o +s=this.f[b] +r=s.a +q=r!=null?new A.WZ(r):o +s=new A.mx(s,o) +p=A.bsG(s,b) +s=p!=null?new A.a5f(p,s,o):s +return new A.vw(new A.KP(new A.Xi(s,o),o),q)}} +A.Xi.prototype={ +b5(){return new A.Xj(null,B.p)}} +A.Xj.prototype={ +gwD(){return this.r}, +aUx(a){return new A.b6r(this,a)}, +IT(a,b){var s,r=this +if(b){s=r.d;(s==null?r.d=A.C(t.x9):s).E(0,a)}else{s=r.d +if(s!=null)s.P(0,a)}s=r.d +s=s==null?null:s.a!==0 +s=s===!0 +if(r.r!==s){r.r=s +r.ul()}}, +cR(){var s,r,q,p=this +p.fP() +s=p.c +s.toString +r=A.aba(s) +s=p.f +if(s!=r){if(s!=null){q=p.e +if(q!=null)new A.bk(q,A.w(q).h("bk<1>")).al(0,s.gq8(s))}p.f=r +if(r!=null){s=p.e +if(s!=null)new A.bk(s,A.w(s).h("bk<1>")).al(0,r.gkJ(r))}}}, +E(a,b){var s,r=this,q=r.aUx(b) +b.an(0,q) +s=r.e;(s==null?r.e=A.D(t.x9,t.Q):s).u(0,b,q) +r.f.E(0,b) +if(b.gm(b).c!==B.fJ)r.IT(b,!0)}, +P(a,b){var s=this.e +if(s==null)return +s=s.P(0,b) +s.toString +b.ad(0,s) +this.f.P(0,b) +this.IT(b,!1)}, +t(){var s,r,q=this,p=q.e +if(p!=null){for(p=A.jb(p,p.r,A.w(p).c);p.H();){s=p.d +q.f.P(0,s) +r=q.e.i(0,s) +r.toString +s.ad(0,r)}q.e=null}q.d=null +q.bG()}, +ab(a){var s=this +s.GG(a) +if(s.f==null)return s.a.c +return A.bpv(s.a.c,s)}} +A.b6r.prototype={ +$0(){var s=this.b,r=this.a +if(s.gm(s).c!==B.fJ)r.IT(s,!0) +else r.IT(s,!1)}, +$S:0} +A.au5.prototype={ +bu(){this.bN() +if(this.r)this.xG()}, +ht(){var s=this.ku$ +if(s!=null){s.D() +s.fN() +this.ku$=null}this.rX()}} +A.tp.prototype={ +pu(){var s=this,r=null,q=s.gXc()?s.gnn():r,p=s.gXc()?s.gnl():r,o=s.gaeI()?s.ghU():r,n=s.gaeK()?s.gFP():r,m=s.gkN(),l=s.gpw(s) +return new A.a3F(q,p,o,n,m,l)}, +gYw(){var s=this +return s.ghU()s.gnl()}, +gabo(){var s=this +return s.ghU()===s.gnn()||s.ghU()===s.gnl()}, +gvM(){var s=this +return s.gFP()-A.U(s.gnn()-s.ghU(),0,s.gFP())-A.U(s.ghU()-s.gnl(),0,s.gFP())}} +A.a3F.prototype={ +gnn(){var s=this.a +s.toString +return s}, +gnl(){var s=this.b +s.toString +return s}, +gXc(){return this.a!=null&&this.b!=null}, +ghU(){var s=this.c +s.toString +return s}, +gaeI(){return this.c!=null}, +gFP(){var s=this.d +s.toString +return s}, +gaeK(){return this.d!=null}, +j(a){var s=this +return"FixedScrollMetrics("+B.c.b8(Math.max(s.ghU()-s.gnn(),0),1)+"..["+B.c.b8(s.gvM(),1)+"].."+B.c.b8(Math.max(s.gnl()-s.ghU(),0),1)+")"}, +gkN(){return this.e}, +gpw(a){return this.f}} +A.aj0.prototype={} +A.lE.prototype={} +A.aem.prototype={ +agk(a){if(t.Kq.b(a))++a.lz$ +return!1}} +A.kD.prototype={ +hu(a){this.ara(a) +a.push(this.a.j(0))}} +A.Hq.prototype={ +hu(a){var s +this.B0(a) +s=this.d +if(s!=null)a.push(s.j(0))}} +A.q_.prototype={ +hu(a){var s +this.B0(a) +a.push("scrollDelta: "+A.j(this.e)) +s=this.d +if(s!=null)a.push(s.j(0))}} +A.pN.prototype={ +hu(a){var s,r=this +r.B0(a) +a.push("overscroll: "+B.c.b8(r.e,1)) +a.push("velocity: "+B.c.b8(r.f,1)) +s=r.d +if(s!=null)a.push(s.j(0))}} +A.pZ.prototype={ +hu(a){var s +this.B0(a) +s=this.d +if(s!=null)a.push(s.j(0))}} +A.ae5.prototype={ +hu(a){this.B0(a) +a.push("direction: "+this.d.j(0))}} +A.X7.prototype={ +hu(a){var s,r +this.OA(a) +s=this.lz$ +r=s===0?"local":"remote" +a.push("depth: "+s+" ("+r+")")}} +A.X6.prototype={ +el(a){return this.f!==a.f}} +A.xc.prototype={ +aUw(a,b){return this.a.$1(b)}} +A.Rr.prototype={ +b5(){return new A.Rs(new A.A2(t.z_),B.p)}} +A.Rs.prototype={ +ad(a,b){var s,r,q=this.d +q.toString +q=A.bNa(q,q.$ti.c) +s=q.$ti.c +for(;q.H();){r=q.c +if(r==null)r=s.a(r) +if(J.f(r.a,b)){q=r.n7$ +q.toString +q.a9y(A.w(r).h("mb.E").a(r)) +return}}}, +a6v(a){var s,r,q,p,o,n,m,l,k=this.d +if(k.b===0)return +p=A.ab(k,!0,t.Sx) +for(k=p.length,o=0;oMath.max(Math.abs(s.a),Math.abs(s.b))}return s.ahs(a,b,c)}, +Cv(a,b){var s=this.a +s=s==null?null:s.Cv(a,b) +return s==null?0:s}, +Jg(a,b,c,d){var s=this.a +if(s==null){s=b.c +s.toString +return s}return s.Jg(a,b,c,d)}, +JV(a,b){var s=this.a +return s==null?null:s.JV(a,b)}, +gAJ(){var s=this.a +s=s==null?null:s.gAJ() +return s==null?$.bxE():s}, +N3(a){var s=this.a +s=s==null?null:s.N3(a) +if(s==null){s=a.w.f +s===$&&A.c() +s=new A.Ta(1/s,1/(0.05*s))}return s}, +gXX(){var s=this.a +s=s==null?null:s.gXX() +return s==null?18:s}, +gLK(){var s=this.a +s=s==null?null:s.gLK() +return s==null?50:s}, +gEA(){var s=this.a +s=s==null?null:s.gEA() +return s==null?8000:s}, +TZ(a){var s=this.a +s=s==null?null:s.TZ(a) +return s==null?0:s}, +gV8(){var s=this.a +return s==null?null:s.gV8()}, +j(a){var s=this.a +if(s==null)return"ScrollPhysics" +return"ScrollPhysics -> "+s.j(0)}} +A.a9D.prototype={ +Cy(a){return new A.a9D(this.CK(a))}, +Jg(a,b,c,d){var s,r,q,p,o,n,m=d===0,l=c.a +l.toString +s=b.a +s.toString +if(l===s){r=c.b +r.toString +q=b.b +q.toString +q=r===q +r=q}else r=!1 +p=r?!1:m +r=c.c +r.toString +q=b.c +q.toString +if(r!==q){if(isFinite(l)){q=c.b +q.toString +if(isFinite(q))if(isFinite(s)){q=b.b +q.toString +q=isFinite(q)}else q=!1 +else q=!1}else q=!1 +if(q)m=!1 +p=!1}q=ro}else o=!0 +if(o)m=!1 +if(p){if(q&&s>l)return s-(l-r) +l=c.b +l.toString +if(r>l){q=b.b +q.toString +q=q0&&b<0))n=p>0&&b>0 +else n=!0 +s=a.ax +if(n){s.toString +m=this.aek((o-Math.abs(b))/s)}else{s.toString +m=this.aek(o/s)}l=J.eY(b) +if(n&&this.b===B.Fu)return l*Math.abs(b) +return l*A.bCi(o,Math.abs(b),m)}, +Cv(a,b){return 0}, +JV(a,b){var s,r,q,p,o,n,m,l=this.N3(a) +if(Math.abs(b)>=l.c||a.gYw()){s=this.gAJ() +r=a.at +r.toString +q=a.z +q.toString +p=a.Q +p.toString +switch(this.b.a){case 1:o=1400 +break +case 0:o=0 +break +default:o=null}n=new A.axG(q,p,s,l) +if(rp){n.f=new A.By(p,A.Xy(s,r-p,b),B.d2) +n.r=-1/0}else{r=n.e=A.bFs(0.135,r,b,o) +m=r.gKV() +if(b>0&&m>p){q=r.aij(p) +n.r=q +n.f=new A.By(p,A.Xy(s,p-p,Math.min(r.jS(0,q),5000)),B.d2)}else if(b<0&&mr)q=r +else q=o +r=a.z +r.toString +if(s0){r=a.at +r.toString +p=a.Q +p.toString +p=r>=p +r=p}else r=!1 +if(r)return o +if(b<0){r=a.at +r.toString +p=a.z +p.toString +p=r<=p +r=p}else r=!1 +if(r)return o +r=a.at +r.toString +r=new A.ayN(r,b,n) +p=$.bdi() +s=p*0.35*Math.pow(s/2223.8657884799995,1/(p-1)) +r.e=s +r.f=b*s/p +return r}} +A.Kv.prototype={ +Cy(a){return new A.Kv(this.CK(a))}, +rQ(a){return!0}} +A.Bx.prototype={ +W(){return"ScrollPositionAlignmentPolicy."+this.b}} +A.tq.prototype={ +asP(a,b,c,d,e){var s,r,q=this +if(d!=null)q.yg(d) +if(q.at==null){s=q.w +r=s.c +r.toString +r=A.aMy(r) +if(r==null)s=null +else{s=s.c +s.toString +s=r.aho(s)}A.bhN(s) +if(s!=null)q.at=s}}, +gnn(){var s=this.z +s.toString +return s}, +gnl(){var s=this.Q +s.toString +return s}, +gXc(){return this.z!=null&&this.Q!=null}, +ghU(){var s=this.at +s.toString +return s}, +gaeI(){return this.at!=null}, +gFP(){var s=this.ax +s.toString +return s}, +gaeK(){return this.ax!=null}, +yg(a){var s=this,r=a.z +if(r!=null&&a.Q!=null){r.toString +s.z=r +r=a.Q +r.toString +s.Q=r}r=a.at +if(r!=null)s.at=r +r=a.ax +if(r!=null)s.ax=r +s.fr=a.fr +a.fr=null +if(A.J(a)!==A.J(s))s.fr.ai0() +s.w.a04(s.fr.gqn()) +s.dy.sm(0,s.fr.goE())}, +gpw(a){var s=this.w.f +s===$&&A.c() +return s}, +al3(a){var s,r,q,p=this,o=p.at +o.toString +if(a!==o){s=p.r.Cv(p,a) +o=p.at +o.toString +r=a-s +p.at=r +if(r!==o){p.T7() +p.On() +r=p.at +r.toString +p.V1(r-o)}if(Math.abs(s)>1e-10){o=p.fr +o.toString +r=p.pu() +q=$.b1.bf$.z.i(0,p.w.Q) +q.toString +o.Km(r,q,s) +return s}}return 0}, +Ur(a){var s=this.at +s.toString +this.at=s+a +this.ch=!0}, +aeh(a){var s=this,r=s.at +r.toString +s.as=a-r +s.at=a +s.T7() +s.On() +$.cN.dP$.push(new A.aRA(s))}, +Cz(a){if(this.ax!==a){this.ax=a +this.ch=!0}return!0}, +yr(a,b){var s,r,q,p=this +if(!A.Zk(p.z,a,0.001)||!A.Zk(p.Q,b,0.001)||p.ch||p.db!==A.ch(p.gkN())){p.z=a +p.Q=b +p.db=A.ch(p.gkN()) +s=p.ay?p.pu():null +p.ch=!1 +p.CW=!0 +if(p.ay){r=p.cx +r.toString +s.toString +r=!p.aP0(r,s)}else r=!1 +if(r)return!1 +p.ay=!0}if(p.CW){p.apf() +p.w.akT(p.r.rQ(p)) +p.CW=!1}s=p.pu() +if(p.cx!=null){r=Math.max(s.ghU()-s.gnn(),0) +q=p.cx +if(r===Math.max(q.ghU()-q.gnn(),0))if(s.gvM()===p.cx.gvM()){r=Math.max(s.gnl()-s.ghU(),0) +q=p.cx +r=r===Math.max(q.gnl()-q.ghU(),0)&&s.e===p.cx.e}else r=!1 +else r=!1 +r=!r}else r=!0 +if(r){if(!p.cy){A.iC(p.gaPY()) +p.cy=!0}p.cx=p.pu()}return!0}, +aP0(a,b){var s=this,r=s.r.Jg(s.fr.goE(),b,a,s.fr.gdt()),q=s.at +q.toString +if(r!==q){s.at=r +return!1}return!0}, +Cw(){this.fr.Cw() +this.T7()}, +T7(){var s,r,q,p,o,n,m=this,l=m.w +switch(l.a.c.a){case 0:s=B.a5f +break +case 2:s=B.a5i +break +case 3:s=B.a5g +break +case 1:s=B.a5k +break +default:s=null}r=s.a +q=s.b +p=q +o=A.C(t._S) +s=m.at +s.toString +n=m.z +n.toString +if(s>n)o.E(0,p) +s=m.at +s.toString +n=m.Q +n.toString +if(sn)k=n +break +default:k=null}n=p.at +n.toString +if(k===n){s=1 +break}if(e.a===B.G.a){p.iw(k) +s=1 +break}q=p.o9(k,d,e) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Vq,r)}, +EF(a,b,c,d){var s,r=this.z +r.toString +s=this.Q +s.toString +b=A.U(b,r,s) +return this.apQ(0,b,c,d)}, +mX(a){var s,r,q=this,p=q.fr +if(p!=null){s=p.gqn() +r=q.fr.goE() +if(r&&!a.goE())q.UU() +q.fr.t()}else{r=!1 +s=!1}q.fr=a +if(s!==a.gqn())q.w.a04(q.fr.gqn()) +q.dy.sm(0,q.fr.goE()) +if(!r&&q.fr.goE())q.V_()}, +V_(){var s=this.fr +s.toString +s.ad8(this.pu(),$.b1.bf$.z.i(0,this.w.Q))}, +V1(a){var s,r,q=this.fr +q.toString +s=this.pu() +r=$.b1.bf$.z.i(0,this.w.Q) +r.toString +q.ad9(s,r,a)}, +UU(){var s,r,q,p=this,o=p.fr +o.toString +s=p.pu() +r=p.w +q=$.b1.bf$.z.i(0,r.Q) +q.toString +o.ad7(s,q) +q=p.at +q.toString +r.r.sm(0,q) +q=$.f6.bD$ +q===$&&A.c() +q.aRI() +o=r.c +o.toString +o=A.aMy(o) +if(o!=null){s=r.c +s.toString +r=p.at +r.toString +o.ajm(s,r)}}, +aPZ(){var s,r,q +this.cy=!1 +s=this.w.Q +if($.b1.bf$.z.i(0,s)!=null){r=this.pu() +q=$.b1.bf$.z.i(0,s) +q.toString +s=$.b1.bf$.z.i(0,s) +if(s!=null)s.hI(new A.Bw(r,q,0))}}, +t(){var s=this,r=s.fr +if(r!=null)r.t() +s.fr=null +r=s.dy +r.ah$=$.aa() +r.ac$=0 +s.fN()}, +hu(a){var s,r,q=this +q.apP(a) +s=q.z +s=s==null?null:B.c.b8(s,1) +r=q.Q +r=r==null?null:B.c.b8(r,1) +a.push("range: "+A.j(s)+".."+A.j(r)) +r=q.ax +a.push("viewport: "+A.j(r==null?null:B.c.b8(r,1)))}} +A.aRA.prototype={ +$1(a){this.a.as=0}, +$S:3} +A.Bw.prototype={ +abj(){return A.bgy(this.b,this.lz$,null,this.a,null)}, +hu(a){this.ar9(a) +a.push(this.a.j(0))}} +A.X5.prototype={ +hu(a){var s,r +this.OA(a) +s=this.lz$ +r=s===0?"local":"remote" +a.push("depth: "+s+" ("+r+")")}} +A.ape.prototype={} +A.Rt.prototype={ +gkN(){return this.w.a.c}, +yg(a){var s,r=this +r.ape(a) +r.fr.a=r +r.k4=a.k4 +s=a.ok +if(s!=null){r.ok=s +s.a=r +a.ok=null}}, +mX(a){var s,r=this +r.k3=0 +r.apg(a) +s=r.ok +if(s!=null)s.t() +r.ok=null +if(!r.fr.goE())r.ZN(B.l3)}, +mC(a){var s,r,q,p=this,o=p.r.JV(p,a) +if(o!=null){s=p.fr +s=s==null?null:s.gqn() +s=new A.a_x(s!==!1,p) +r=A.bky(null,0,p.w) +r.cH() +q=r.e8$ +q.b=!0 +q.a.push(s.gSl()) +r.TC(o).a.a.l4(s.gSj()) +s.c=r +p.mX(s)}else p.mX(new A.ve(p))}, +ZN(a){var s,r,q,p=this +if(p.k4===a)return +p.k4=a +s=p.pu() +r=p.w.Q +q=$.b1.bf$.z.i(0,r) +q.toString +r=$.b1.bf$.z.i(0,r) +if(r!=null)r.hI(new A.ae5(a,s,q,0))}, +o9(a,b,c){var s,r,q,p=this,o=p.at +o.toString +if(A.Zk(a,o,p.r.N3(p).a)){p.iw(a) +return A.e5(null,t.H)}o=p.at +o.toString +s=new A.a2Z(p) +r=new A.bH(new A.aM($.aK,t.D),t.h) +s.c=r +o=A.bky("DrivenScrollActivity",o,p.w) +o.cH() +q=o.e8$ +q.b=!0 +q.a.push(s.gSl()) +o.z=B.b6 +o.o_(a,b,c).a.a.l4(s.gSj()) +s.d!==$&&A.aj() +s.d=o +p.mX(s) +return r.a}, +iw(a){var s,r,q=this +q.mX(new A.ve(q)) +s=q.at +s.toString +if(s!==a){q.aeh(a) +q.V_() +r=q.at +r.toString +q.V1(r-s) +q.UU()}q.mC(0)}, +YH(a){var s,r,q,p,o=this +if(a===0){o.mC(0) +return}s=o.at +s.toString +r=o.z +r.toString +r=Math.max(s+a,r) +q=o.Q +q.toString +p=Math.min(r,q) +if(p!==s){o.mX(new A.ve(o)) +o.ZN(-a>0?B.rf:B.rg) +s=o.at +s.toString +o.dy.sm(0,!0) +o.aeh(p) +o.V_() +r=o.at +r.toString +o.V1(r-s) +o.UU() +o.mC(0)}}, +t(){var s=this.ok +if(s!=null)s.t() +this.ok=null +this.api()}} +A.axG.prototype={ +Sx(a){var s,r=this,q=r.r +q===$&&A.c() +if(a>q){if(!isFinite(q))q=0 +r.w=q +q=r.f +q===$&&A.c() +s=q}else{r.w=0 +q=r.e +q===$&&A.c() +s=q}s.a=r.a +return s}, +iB(a,b){return this.Sx(b).iB(0,b-this.w)}, +jS(a,b){return this.Sx(b).jS(0,b-this.w)}, +rh(a){return this.Sx(a).rh(a-this.w)}, +j(a){return"BouncingScrollSimulation(leadingExtent: "+A.j(this.b)+", trailingExtent: "+A.j(this.c)+")"}} +A.ayN.prototype={ +iB(a,b){var s,r=this.e +r===$&&A.c() +s=A.U(b/r,0,1) +r=this.f +r===$&&A.c() +return this.b+r*(1-Math.pow(1-s,$.bdi()))}, +jS(a,b){var s=this.e +s===$&&A.c() +return this.c*Math.pow(1-A.U(b/s,0,1),$.bdi()-1)}, +rh(a){var s=this.e +s===$&&A.c() +return a>=s}} +A.ab4.prototype={ +W(){return"ScrollViewKeyboardDismissBehavior."+this.b}} +A.ab3.prototype={ +aN5(a,b,c,d){var s=this +if(s.x)return new A.abx(c,b,s.ch,d,null) +return new A.Tt(c,0,b,null,s.Q,s.ch,d,null)}, +ab(a){var s,r,q,p,o,n,m,l,k,j,i=this,h=null,g=i.aN1(a),f=i.cx +if(f==null){s=A.e8(a,h) +if(s!=null){r=s.r +q=r.aOF(0,0) +p=r.aON(0,0) +r=i.c===B.b1 +f=r?p:q +g=A.Ak(g,s.Ui(r?q:p))}}o=A.b([f!=null?new A.abR(f,g,h):g],t.p) +r=i.c +n=A.btR(a,r,!1) +m=i.f +if(m==null)m=A.boP(a,r) +l=m?A.Q7(a):i.e +k=A.bgz(n,i.ch,l,i.at,!1,h,i.r,i.ay,h,i.as,new A.aRB(i,n,o)) +j=m&&l!=null?A.boO(k):k +if(i.ax===B.a5S)return new A.fS(new A.aRC(a),j,h,t.ZE) +else return j}} +A.aRB.prototype={ +$2(a,b){return this.a.aN5(a,b,this.b,this.c)}, +$S:743} +A.aRC.prototype={ +$1(a){var s=A.bmF(this.a) +if(a.d!=null&&s.gda())s.my() +return!1}, +$S:744} +A.a00.prototype={} +A.a6j.prototype={ +aN1(a){return new A.abQ(this.RG,null)}} +A.b6l.prototype={ +$2(a,b){if(!a.a)a.ad(0,b)}, +$S:48} +A.Rv.prototype={ +b5(){var s=null,r=t.re +return new A.Bz(new A.aoC($.aa()),new A.cK(s,r),new A.cK(s,t.hA),new A.cK(s,r),B.CM,s,A.D(t.yb,t.Q),s,!0,s,s,s,B.p)}, +b_8(a,b){return this.f.$2(a,b)}} +A.aRJ.prototype={ +$1(a){return null}, +$S:745} +A.X9.prototype={ +el(a){return this.r!==a.r}} +A.Bz.prototype={ +gacX(){var s,r=this +switch(r.a.c.a){case 0:s=r.d.at +s.toString +s=new A.i(0,-s) +break +case 2:s=r.d.at +s.toString +s=new A.i(0,s) +break +case 3:s=r.d.at +s.toString +s=new A.i(-s,0) +break +case 1:s=r.d.at +s.toString +s=new A.i(s,0) +break +default:s=null}return s}, +gBk(){var s=this.a.d +if(s==null){s=this.x +s.toString}return s}, +ghY(){return this.a.z}, +aa7(){var s,r,q,p=this,o=p.a.Q +if(o==null){o=p.c +o.toString +o=A.Rn(o)}p.w=o +s=p.c +s.toString +s=o.wM(s) +p.e=s +o=p.a +r=o.e +if(r!=null)p.e=new A.Kv(r.CK(s)) +else{o=o.Q +if(o!=null){s=p.c +s.toString +p.e=o.wM(s).Cy(p.e)}}q=p.d +if(q!=null){p.gBk().Di(0,q) +A.iC(q.geL())}o=p.gBk() +s=p.e +s.toString +r=$.aa() +r=new A.Rt(B.l3,s,p,!0,null,new A.cD(!1,r,t.uh),r) +r.asP(p,null,!0,q,s) +s=r.at +if(s==null)r.at=o.a +if(r.fr==null)r.mX(new A.ve(r)) +p.d=r +o=p.gBk() +s=p.d +s.toString +o.bc(s)}, +l3(a,b){var s,r,q,p=this.r +this.q7(p,"offset") +s=p.y +r=s==null +if((r?A.w(p).h("dv.T").a(s):s)!=null){q=this.d +q.toString +p=r?A.w(p).h("dv.T").a(s):s +p.toString +if(b)q.at=p +else q.iw(p)}}, +bu(){if(this.a.d==null)this.x=A.Rp(0) +this.bN()}, +cR(){var s=this,r=s.c +r.toString +r=A.e8(r,B.ma) +s.y=r==null?null:r.CW +r=s.c +r.toString +r=A.e8(r,B.cy) +r=r==null?null:r.b +if(r==null){r=s.c +r.toString +A.Cx(r).toString +r=$.cF().d +if(r==null){r=self.window.devicePixelRatio +if(r===0)r=1}}s.f=r +s.aa7() +s.ard()}, +aHZ(a){var s,r,q=this,p=null,o=q.a.Q,n=o==null,m=a.Q,l=m==null +if(n!==l)return!0 +if(!n&&!l&&o.O7(m))return!0 +o=q.a +s=o.e +if(s==null){o=o.Q +if(o==null)s=p +else{n=q.c +n.toString +n=o.wM(n) +s=n}}r=a.e +if(r==null)if(l)r=p +else{o=q.c +o.toString +o=m.wM(o) +r=o}do{o=s==null +n=o?p:A.J(s) +m=r==null +if(n!=(m?p:A.J(r)))return!0 +s=o?p:s.a +r=m?p:r.a}while(s!=null||r!=null) +o=q.a.d +o=o==null?p:A.J(o) +n=a.d +return o!=(n==null?p:A.J(n))}, +bH(a){var s,r,q=this +q.are(a) +s=a.d +if(q.a.d!=s){if(s==null){s=q.x +s.toString +r=q.d +r.toString +s.Di(0,r) +q.x.t() +q.x=null}else{r=q.d +r.toString +s.Di(0,r) +if(q.a.d==null)q.x=A.Rp(0)}s=q.gBk() +r=q.d +r.toString +s.bc(r)}if(q.aHZ(a))q.aa7()}, +t(){var s,r=this,q=r.a.d +if(q!=null){s=r.d +s.toString +q.Di(0,s)}else{q=r.x +if(q!=null){s=r.d +s.toString +q.Di(0,s)}q=r.x +if(q!=null)q.t()}r.d.t() +r.r.t() +r.arf()}, +akT(a){var s,r,q=this +if(a===q.ay)s=!a||A.ch(q.a.c)===q.ch +else s=!1 +if(s)return +if(!a){q.at=B.CM +q.a7Y()}else{switch(A.ch(q.a.c).a){case 1:q.at=A.b3([B.ta,new A.dU(new A.aRF(q),new A.aRG(q),t.ok)],t.B,t.xR) +break +case 0:q.at=A.b3([B.te,new A.dU(new A.aRH(q),new A.aRI(q),t.Uv)],t.B,t.xR) +break}a=!0}q.ay=a +q.ch=A.ch(q.a.c) +s=q.Q +if(s.gap()!=null){s=s.gap() +s.SH(q.at) +if(!s.a.f){r=s.c.gaF() +r.toString +t.Wx.a(r) +s.e.aMC(r)}}}, +a04(a){var s,r=this +if(r.ax===a)return +r.ax=a +s=r.as +if($.b1.bf$.z.i(0,s)!=null){s=$.b1.bf$.z.i(0,s).gaF() +s.toString +t.f1.a(s).saeT(r.ax)}}, +azj(a){var s=this.d,r=s.fr.gdt(),q=new A.aGE(this.gawm(),s) +s.mX(q) +s.k3=r +this.cx=q}, +aH7(a){var s,r,q=this.d,p=q.r,o=p.TZ(q.k3) +p=p.gV8() +s=p==null?null:0 +r=new A.aRw(q,this.gawk(),o,p,a.a,o!==0,s,a.d,a) +q.mX(new A.aC7(r,q)) +this.CW=q.ok=r}, +aH8(a){var s=this.CW +if(s!=null)s.a8(0,a)}, +aH6(a){var s=this.CW +if(s!=null)s.Vp(0,a)}, +a7Y(){if($.b1.bf$.z.i(0,this.Q)==null)return +var s=this.cx +if(s!=null)s.a.mC(0) +s=this.CW +if(s!=null)s.a.mC(0)}, +awn(){this.cx=null}, +awl(){this.CW=null}, +a82(a){var s,r=this.d,q=r.at +q.toString +s=r.z +s.toString +s=Math.max(q+a,s) +r=r.Q +r.toString +return Math.min(s,r)}, +a81(a){var s,r,q=$.f6.aS$ +q===$&&A.c() +q=q.a.gbm(0) +s=A.jc(q,A.w(q).h("z.E")) +q=this.w +q===$&&A.c() +q=q.gF1() +r=s.fk(0,q.gpt(q))&&a.gdR(a)===B.cq +q=this.a +switch((r?A.btN(A.ch(q.c)):A.ch(q.c)).a){case 0:q=a.gmE().a +break +case 1:q=a.gmE().b +break +default:q=null}return A.auW(this.a.c)?-q:q}, +aG2(a){var s,r,q,p,o=this +if(t.Mj.b(a)&&o.d!=null){s=o.e +if(s!=null){r=o.d +r.toString +r=!s.rQ(r) +s=r}else s=!1 +if(s)return +q=o.a81(a) +p=o.a82(q) +if(q!==0){s=o.d.at +s.toString +s=p!==s}else s=!1 +if(s)$.hq.Wl$.ahA(0,a,o.gaH9())}else if(t.xb.b(a))o.d.YH(0)}, +aHa(a){var s,r=this,q=r.a81(a),p=r.a82(q) +if(q!==0){s=r.d.at +s.toString +s=p!==s}else s=!1 +if(s)r.d.YH(q)}, +aAM(a){var s,r +if(a.lz$===0){s=$.b1.bf$.z.i(0,this.z) +r=s==null?null:s.gaF() +if(r!=null)r.cf()}return!1}, +ab(a){var s,r,q,p,o,n,m,l=this,k=null,j=l.d +j.toString +s=l.at +r=l.a +q=r.w +p=l.ax +o=new A.X9(l,j,A.FX(B.cW,new A.lv(A.dg(k,k,A.zF(r.b_8(a,j),p,l.as),!1,k,k,!1,!q,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k),s,B.b9,q,l.Q),k,k,k,l.gaG1(),k),k) +j=l.a +if(!j.w){s=l.d +s.toString +l.e.toString +o=new A.fS(l.gaAL(),new A.apf(s,!0,j.x,o,l.z),k,t.ji)}j=j.c +s=l.gBk() +r=l.a.as +n=new A.ab5(j,s,r) +j=l.w +j===$&&A.c() +o=j.Jx(a,j.Jw(a,o,n),n) +m=A.aba(a) +if(m!=null){j=l.d +j.toString +o=new A.Xb(l,j,o,m,k)}return o}} +A.aRF.prototype={ +$0(){var s=this.a.w +s===$&&A.c() +return A.bqQ(null,null,s.gtC())}, +$S:213} +A.aRG.prototype={ +$1(a){var s,r,q=this.a +a.ay=q.ga52() +a.ch=q.ga8_() +a.CW=q.ga80() +a.cx=q.ga7Z() +a.cy=q.ga7X() +s=q.e +a.db=s==null?null:s.gXX() +s=q.e +a.dx=s==null?null:s.gLK() +s=q.e +a.dy=s==null?null:s.gEA() +s=q.w +s===$&&A.c() +r=q.c +r.toString +a.fx=s.Nf(r) +a.at=q.a.y +r=q.w +s=q.c +s.toString +a.ax=r.ut(s) +a.b=q.y +a.c=q.w.gtC()}, +$S:214} +A.aRH.prototype={ +$0(){var s=this.a.w +s===$&&A.c() +return A.aGG(null,null,s.gtC())}, +$S:215} +A.aRI.prototype={ +$1(a){var s,r,q=this.a +a.ay=q.ga52() +a.ch=q.ga8_() +a.CW=q.ga80() +a.cx=q.ga7Z() +a.cy=q.ga7X() +s=q.e +a.db=s==null?null:s.gXX() +s=q.e +a.dx=s==null?null:s.gLK() +s=q.e +a.dy=s==null?null:s.gEA() +s=q.w +s===$&&A.c() +r=q.c +r.toString +a.fx=s.Nf(r) +a.at=q.a.y +r=q.w +s=q.c +s.toString +a.ax=r.ut(s) +a.b=q.y +a.c=q.w.gtC()}, +$S:216} +A.Xb.prototype={ +b5(){return new A.apg(B.p)}} +A.apg.prototype={ +bu(){var s,r,q,p +this.bN() +s=this.a +r=s.c +s=s.d +q=t.x9 +p=t.V +q=new A.Xa(r,new A.aCj(r,30),s,A.D(q,p),A.D(q,p),A.b([],t.D1),A.C(q),B.a60,$.aa()) +s.an(0,q.ga7R()) +this.d=q}, +bH(a){var s,r +this.c7(a) +s=this.a.d +if(a.d!==s){r=this.d +r===$&&A.c() +r.sbe(0,s)}}, +t(){var s=this.d +s===$&&A.c() +s.t() +this.bG()}, +ab(a){var s=this.a,r=s.f,q=this.d +q===$&&A.c() +return new A.Ht(r,s.e,q,null)}} +A.Xa.prototype={ +sbe(a,b){var s,r=this.id +if(b===r)return +s=this.ga7R() +r.ad(0,s) +this.id=b +b.an(0,s)}, +aGX(){if(this.fr)return +this.fr=!0 +$.cN.dP$.push(new A.b6i(this))}, +UT(){var s=this,r=s.b,q=A.FS(r,A.a5(r).c) +r=s.k1 +r.MM(r,new A.b6j(q)) +r=s.k2 +r.MM(r,new A.b6k(q)) +s.aoa()}, +X2(a){var s,r,q,p,o,n,m=this +if(m.fy==null&&m.fx==null)m.go=m.a4R(a.b) +s=A.auQ(m.dx) +r=a.b +q=a.c +p=-s.a +o=-s.b +if(a.a===B.id){r=m.fy=m.a5C(r) +a=A.bpt(new A.i(r.a+p,r.b+o),q)}else{r=m.fx=m.a5C(r) +a=A.bpu(new A.i(r.a+p,r.b+o),q)}n=m.aoi(a) +if(n===B.rk){m.dy.e=!1 +return n}if(m.go){r=m.dy +r.amc(A.wc(a.b,0,0)) +if(r.e)return B.rk}return n}, +a5C(a){var s,r,q,p=this.dx,o=p.c.gaF() +o.toString +t.x.a(o) +s=o.e5(a) +if(!this.go){r=s.b +if(r<0||s.a<0)return A.dx(o.cW(0,null),B.h) +if(r>o.gC(0).b||s.a>o.gC(0).a)return B.a3n}q=A.auQ(p) +return A.dx(o.cW(0,null),new A.i(s.a+q.a,s.b+q.b))}, +SY(a,b){var s,r,q,p=this,o=p.dx,n=A.auQ(o) +o=o.c.gaF() +o.toString +t.x.a(o) +s=o.cW(0,null) +r=p.d +if(r!==-1)q=p.fx==null||b +else q=!1 +if(q){r=J.l5(p.b[r]).a +r.toString +p.fx=A.dx(s,A.dx(J.bdL(p.b[p.d],o),r.a.X(0,new A.i(0,-r.b/2))).X(0,n))}r=p.c +if(r!==-1){r=J.l5(p.b[r]).b +r.toString +p.fy=A.dx(s,A.dx(J.bdL(p.b[p.c],o),r.a.X(0,new A.i(0,-r.b/2))).X(0,n))}}, +a9S(){return this.SY(!0,!0)}, +a6_(a){var s,r,q,p,o,n,m,l,k=this,j=k.b +if(a){s=j[k.c] +r=s.gm(s).b +q=s.gm(s).b.b}else{s=j[k.d] +r=s.gm(s).a +j=s.gm(s).a +q=j==null?null:j.b}if(q==null||r==null)return +j=k.dx +p=j.c.gaF() +p.toString +t.x.a(p) +o=A.dx(s.cW(0,p),r.a) +n=p.gC(0).a +p=p.gC(0).b +switch(j.a.c.a){case 0:m=o.b +l=m-q +if(m>=p&&l<=0)return +if(m>p){j=k.id +n=j.at +n.toString +j.iw(n+p-m) +return}if(l<0){j=k.id +p=j.at +p.toString +j.iw(p+0-l)}return +case 1:r=o.a +if(r>=n&&r<=0)return +if(r>n){j=k.id +p=j.at +p.toString +j.iw(p+r-n) +return}if(r<0){j=k.id +p=j.at +p.toString +j.iw(p+r-0)}return +case 2:m=o.b +l=m-q +if(m>=p&&l<=0)return +if(m>p){j=k.id +n=j.at +n.toString +j.iw(n+m-p) +return}if(l<0){j=k.id +p=j.at +p.toString +j.iw(p+l-0)}return +case 3:r=o.a +if(r>=n&&r<=0)return +if(r>n){j=k.id +p=j.at +p.toString +j.iw(p+n-r) +return}if(r<0){j=k.id +p=j.at +p.toString +j.iw(p+0-r)}return}}, +a4R(a){var s,r=this.dx.c.gaF() +r.toString +t.x.a(r) +s=r.e5(a) +return new A.A(0,0,0+r.gC(0).a,0+r.gC(0).b).G(0,s)}, +kq(a,b){var s,r,q=this +switch(b.a.a){case 0:s=q.dx.d.at +s.toString +q.k1.u(0,a,s) +q.Kv(a) +break +case 1:s=q.dx.d.at +s.toString +q.k2.u(0,a,s) +q.Kv(a) +break +case 5:case 6:q.Kv(a) +s=q.dx +r=s.d.at +r.toString +q.k1.u(0,a,r) +s=s.d.at +s.toString +q.k2.u(0,a,s) +break +case 2:q.k2.P(0,a) +q.k1.P(0,a) +break +case 3:case 4:s=q.dx +r=s.d.at +r.toString +q.k2.u(0,a,r) +s=s.d.at +s.toString +q.k1.u(0,a,s) +break}return q.aob(a,b)}, +Kv(a){var s,r,q,p,o,n,m=this,l=m.dx,k=l.d.at +k.toString +s=m.k1 +r=s.i(0,a) +q=m.fx +if(q!=null)p=r==null||Math.abs(k-r)>1e-10 +else p=!1 +if(p){o=A.auQ(l) +a.z_(A.bpu(new A.i(q.a+-o.a,q.b+-o.b),null)) +q=l.d.at +q.toString +s.u(0,a,q)}s=m.k2 +n=s.i(0,a) +q=m.fy +if(q!=null)k=n==null||Math.abs(k-n)>1e-10 +else k=!1 +if(k){o=A.auQ(l) +a.z_(A.bpt(new A.i(q.a+-o.a,q.b+-o.b),null)) +l=l.d.at +l.toString +s.u(0,a,l)}}, +t(){var s=this +s.k1.af(0) +s.k2.af(0) +s.fr=!1 +s.dy.e=!1 +s.aoc()}} +A.b6i.prototype={ +$1(a){var s=this.a +if(!s.fr)return +s.fr=!1 +s.IU()}, +$S:3} +A.b6j.prototype={ +$2(a,b){return!this.a.G(0,a)}, +$S:225} +A.b6k.prototype={ +$2(a,b){return!this.a.G(0,a)}, +$S:225} +A.apf.prototype={ +bA(a){var s=this.e,r=new A.aom(s,!0,this.r,null,new A.bs(),A.aX(t.v)) +r.by() +r.sbt(null) +s.an(0,r.gafO()) +return r}, +bI(a,b){b.saMi(!0) +b.sbe(0,this.e) +b.sakN(this.r)}} +A.aom.prototype={ +sbe(a,b){var s,r=this,q=r.V +if(b===q)return +s=r.gafO() +q.ad(0,s) +r.V=b +b.an(0,s) +r.cf()}, +saMi(a){return}, +sakN(a){if(a==this.bj)return +this.bj=a +this.cf()}, +iR(a){var s,r,q=this +q.lf(a) +a.a=!0 +if(q.V.ay){a.cE(B.a6h,!0) +s=q.V +r=s.at +r.toString +a.ah=r +a.e=!0 +r=s.Q +r.toString +a.b_=r +s=s.z +s.toString +a.b6=s +a.sakE(q.bj)}}, +yw(a,b,c){var s,r,q,p,o,n,m,l=this +if(c.length!==0){s=B.b.ga9(c).dy +s=!(s!=null&&s.G(0,B.FT))}else s=!0 +if(s){l.ce=null +l.a1e(a,b,c) +return}s=l.ce +if(s==null)s=l.ce=A.RE(null,l.gwX()) +s.scg(0,a.e) +s=l.ce +s.toString +r=t.QF +q=A.b([s],r) +p=A.b([],r) +for(s=c.length,o=null,n=0;n#"+A.bU(r)+"("+B.b.cj(q,", ")+")"}, +gL(a){return A.a6(this.a,this.b,null,this.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(b instanceof A.ab5)if(b.a===r.a)if(b.b===r.b)s=b.d===r.d +else s=!1 +else s=!1 +else s=!1 +return s}} +A.aRE.prototype={ +$2(a,b){if(b!=null)this.a.push(a+b.j(0))}, +$S:747} +A.aCj.prototype={ +RL(a,b){var s +switch(b.a){case 0:s=a.a +break +case 1:s=a.b +break +default:s=null}return s}, +aI3(a,b){var s +switch(b.a){case 0:s=a.a +break +case 1:s=a.b +break +default:s=null}return s}, +amc(a){var s=this,r=s.a.gacX() +s.d=a.aJ(0,r.a,r.b) +if(s.e)return +s.y6()}, +y6(){var s=0,r=A.r(t.H),q,p=this,o,n,m,l,k,j,i,h,g,f,e,d,c +var $async$y6=A.t(function(a,b){if(a===1)return A.o(b,r) +while(true)switch(s){case 0:d=p.a +c=d.c.gaF() +c.toString +t.x.a(c) +o=A.ie(c.cW(0,null),new A.A(0,0,0+c.gC(0).a,0+c.gC(0).b)) +c=p.e=!0 +n=d.gacX() +m=o.a +l=o.b +k=p.RL(new A.i(m+n.a,l+n.b),A.ch(d.a.c)) +j=k+p.aI3(new A.Q(o.c-m,o.d-l),A.ch(d.a.c)) +l=p.d +l===$&&A.c() +i=p.RL(new A.i(l.a,l.b),A.ch(d.a.c)) +l=p.d +h=p.RL(new A.i(l.c,l.d),A.ch(d.a.c)) +switch(d.a.c.a){case 0:case 3:if(h>j){m=d.d +l=m.at +l.toString +m=m.z +m.toString +m=l>m}else m=!1 +if(m){g=Math.min(h-j,20) +m=d.d +l=m.z +l.toString +m=m.at +m.toString +f=Math.max(l,m-g)}else{if(im}else m=!1 +if(m){g=Math.min(k-i,20) +m=d.d +l=m.z +l.toString +m=m.at +m.toString +f=Math.max(l,m-g)}else{if(h>j){m=d.d +l=m.at +l.toString +m=m.Q +m.toString +m=l>>24&255)/255*this.r.gm(0))),r.gm(r)>>>16&255,r.gm(r)>>>8&255,r.gm(r)&255)) +return s}, +a6P(a){var s,r,q=this +if(a){s=$.G().B() +r=q.c +s.sA(0,A.S(B.c.ai(255*((r.gm(r)>>>24&255)/255*q.r.gm(0))),r.gm(r)>>>16&255,r.gm(r)>>>8&255,r.gm(r)&255)) +s.sU(0,B.u) +s.sbM(1) +return s}s=$.G().B() +r=q.b +s.sA(0,A.S(B.c.ai(255*((r.gm(r)>>>24&255)/255*q.r.gm(0))),r.gm(r)>>>16&255,r.gm(r)>>>8&255,r.gm(r)&255)) +return s}, +aEC(){return this.a6P(!1)}, +aEz(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null +e.gSe() +switch(e.gSe().a){case 0:s=e.f +r=e.cy +r===$&&A.c() +q=new A.Q(s,r) +s+=2*e.x +r=e.db.d +r.toString +p=e.dx +p=p===B.a7||p===B.ag +o=e.Q +n=new A.Q(s,r-(p?o.gcO(0)+o.gcX(0):o.ge_())) +r=e.x +m=r+e.Q.a +o=e.cx +o===$&&A.c() +r=m-r +l=e.gBH() +k=new A.i(r,l) +j=k.X(0,new A.i(s,0)) +i=e.db.d +i.toString +p=e.dx +p=p===B.a7||p===B.ag +h=e.Q +p=p?h.gcO(0)+h.gcX(0):h.ge_() +g=new A.i(r+s,l+(i-p)) +f=o +break +case 1:s=e.f +r=e.cy +r===$&&A.c() +q=new A.Q(s,r) +r=e.x +p=e.db.d +p.toString +o=e.dx +o=o===B.a7||o===B.ag +l=e.Q +o=o?l.gcO(0)+l.gcX(0):l.ge_() +n=new A.Q(s+2*r,p-o) +o=e.f +p=e.x +m=b.a-o-p-e.Q.c +o=e.cx +o===$&&A.c() +p=m-p +r=e.gBH() +k=new A.i(p,r) +s=e.db.d +s.toString +l=e.dx +l=l===B.a7||l===B.ag +i=e.Q +g=new A.i(p,r+(s-(l?i.gcO(0)+i.gcX(0):i.ge_()))) +j=k +f=o +break +case 2:s=e.cy +s===$&&A.c() +q=new A.Q(s,e.f) +s=e.db.d +s.toString +r=e.dx +r=r===B.a7||r===B.ag +p=e.Q +r=r?p.gcO(0)+p.gcX(0):p.ge_() +p=e.f +o=e.x +p+=2*o +n=new A.Q(s-r,p) +r=e.cx +r===$&&A.c() +f=o+e.Q.b +o=e.gBH() +s=f-e.x +k=new A.i(o,s) +j=k.X(0,new A.i(0,p)) +l=e.db.d +l.toString +i=e.dx +i=i===B.a7||i===B.ag +h=e.Q +g=new A.i(o+(l-(i?h.gcO(0)+h.gcX(0):h.ge_())),s+p) +m=r +break +case 3:s=e.cy +s===$&&A.c() +q=new A.Q(s,e.f) +s=e.db.d +s.toString +r=e.dx +r=r===B.a7||r===B.ag +p=e.Q +r=r?p.gcO(0)+p.gcX(0):p.ge_() +p=e.f +o=e.x +n=new A.Q(s-r,p+2*o) +r=e.cx +r===$&&A.c() +f=b.b-p-o-e.Q.d +o=e.gBH() +p=f-e.x +k=new A.i(o,p) +s=e.db.d +s.toString +l=e.dx +l=l===B.a7||l===B.ag +i=e.Q +g=new A.i(o+(s-(l?i.gcO(0)+i.gcX(0):i.ge_())),p) +j=k +m=r +break +default:g=d +j=g +k=j +n=k +q=n +f=q +m=f}s=k.a +r=k.b +e.ch=new A.A(s,r,s+n.a,r+n.b) +e.CW=new A.A(m,f,m+q.a,f+q.b) +if(e.r.gm(0)!==0){s=e.ch +s.toString +a.b7(s,e.aEC()) +a.e7(j,g,e.a6P(!0)) +s=e.y +if(s!=null){r=e.CW +r.toString +a.dm(A.jS(r,s),e.ga6O()) +return}s=e.CW +s.toString +a.b7(s,e.ga6O()) +return}}, +aO(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.dx +if(f!=null){s=g.db +if(s!=null){r=s.b +r.toString +s=s.a +s.toString +s=r<=s}else s=!0}else s=!0 +if(s)return +s=g.db.d +s.toString +f=f===B.a7||f===B.ag +r=g.Q +f=f?r.gcO(0)+r.gcX(0):r.ge_() +if(s-f-2*g.w<=0)return +f=g.db +s=f.b +s.toString +if(s==1/0||s==-1/0)return +f=f.gvM() +s=g.dx +s=s===B.a7||s===B.ag +r=g.Q +s=s?r.gcO(0)+r.gcX(0):r.ge_() +r=g.db +q=r.b +q.toString +p=r.a +p.toString +r=r.d +r.toString +o=g.dx +o=o===B.a7||o===B.ag +n=g.Q +o=o?n.gcO(0)+n.gcX(0):n.ge_() +m=A.U((f-s)/(q-p+r-o),0,1) +o=g.db.d +o.toString +f=g.dx +f=f===B.a7||f===B.ag +s=g.Q +f=f?s.gcO(0)+s.gcX(0):s.ge_() +f=Math.min(o-f-2*g.w,g.at) +o=g.db.d +o.toString +s=g.dx +s=s===B.a7||s===B.ag +r=g.Q +s=s?r.gcO(0)+r.gcX(0):r.ge_() +l=Math.max(f,(o-s-2*g.w)*m) +s=g.db.gvM() +o=g.db.d +o.toString +f=g.as +r=g.dx +r=r===B.a7||r===B.ag +q=g.Q +r=r?q.gcO(0)+q.gcX(0):q.ge_() +k=Math.min(f,o-r-2*g.w) +f=g.dx +f=f===B.ag||f===B.cA +r=g.db +if((f?Math.max(r.gnl()-r.ghU(),0):Math.max(r.ghU()-r.gnn(),0))>0){f=g.dx +f=f===B.ag||f===B.cA +r=g.db +r=(f?Math.max(r.ghU()-r.gnn(),0):Math.max(r.gnl()-r.ghU(),0))>0 +f=r}else f=!1 +j=f?k:k*(1-A.U(1-s/o,0,0.2)/0.2) +f=g.db.d +f.toString +s=g.dx +s=s===B.a7||s===B.ag +r=g.Q +s=s?r.gcO(0)+r.gcX(0):r.ge_() +s=A.U(l,j,f-s-2*g.w) +g.cy=s +f=g.db +r=f.b +r.toString +q=f.a +q.toString +i=r-q +if(i>0){r=f.c +r.toString +h=A.U((r-q)/i,0,1)}else h=0 +r=g.dx +q=r===B.ag +p=q||r===B.cA?1-h:h +f=f.d +f.toString +r=r===B.a7||q +q=g.Q +r=r?q.gcO(0)+q.gcX(0):q.ge_() +g.cx=p*(f-r-2*g.w-s)+(g.gBH()+g.w) +return g.aEz(a,b)}, +a_F(a){var s,r,q,p,o=this,n=o.db,m=n.b +m.toString +s=n.a +s.toString +n=n.d +n.toString +r=o.dx +r=r===B.a7||r===B.ag +q=o.Q +r=r?q.gcO(0)+q.gcX(0):q.ge_() +q=o.w +p=o.cy +p===$&&A.c() +return(m-s)*a/(n-r-2*q-p)}, +zm(a){var s,r,q=this +if(q.CW==null)return null +if(!q.ay)if(q.r.gm(0)!==0){s=q.db +r=s.a +r.toString +s=s.b +s.toString +s=r===s}else s=!0 +else s=!0 +if(s)return!1 +return q.ch.G(0,a)}, +aeO(a,b,c){var s,r,q,p=this,o=p.ch +if(o==null)return!1 +if(p.ay)return!1 +s=p.db +r=s.a +r.toString +s=s.b +s.toString +if(r===s)return!1 +q=o.jj(A.jT(p.CW.gbC(),24)) +if(p.r.gm(0)===0){if(c&&b===B.cq)return q.G(0,a) +return!1}switch(b.a){case 0:case 4:return q.G(0,a) +case 1:case 2:case 3:case 5:return o.G(0,a)}}, +aTh(a,b){return this.aeO(a,b,!1)}, +aeP(a,b){var s,r,q=this +if(q.CW==null)return!1 +if(q.ay)return!1 +if(q.r.gm(0)===0)return!1 +s=q.db +r=s.a +r.toString +s=s.b +s.toString +if(r===s)return!1 +switch(b.a){case 0:case 4:s=q.CW +return s.jj(A.jT(s.gbC(),24)).G(0,a) +case 1:case 2:case 3:case 5:return q.CW.G(0,a)}}, +cF(a){var s,r=this +if(r.a.k(0,a.a))if(r.b.k(0,a.b))if(r.c.k(0,a.c))if(r.e==a.e)if(r.f===a.f)if(r.r===a.r)if(r.w===a.w)if(r.x===a.x)if(J.f(r.y,a.y))if(r.Q.k(0,a.Q))if(r.as===a.as)if(r.at===a.at)s=r.ay!==a.ay +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +return s}, +Gu(a){return!1}, +gAt(){return null}, +j(a){return"#"+A.bU(this)}, +t(){this.r.a.ad(0,this.gfa()) +this.fN()}} +A.aRN.prototype={ +$1(a){var s,r +if(a!=null){s=a.b +s.toString +r=a.a +r.toString +r=s>r +s=r}else s=!1 +return s}, +$S:748} +A.H0.prototype={ +b5(){return A.bIZ(t.jX)}, +zD(a){return this.cx.$1(a)}} +A.pS.prototype={ +gv2(){var s=this.a.d +if(s==null){s=this.c +s.toString +s=A.Q7(s)}return s}, +gwZ(){var s=this.a.e +return s===!0}, +ga8q(){if(this.gwZ())this.a.toString +return!1}, +gvG(){this.a.toString +return!0}, +bu(){var s,r,q,p,o=this,n=null +o.bN() +s=A.cW(n,o.a.ay,n,n,o) +s.cH() +r=s.eg$ +r.b=!0 +r.a.push(o.gaLu()) +o.x=s +s=o.y=A.dP(B.aQ,s,n) +r=o.a +q=r.w +if(q==null)q=6 +p=r.r +r=r.db +r=new A.Hs(B.mU,B.B,B.B,n,q,s,0,0,p,n,B.X,18,18,r,$.aa()) +s.a.an(0,r.gfa()) +o.at!==$&&A.aj() +o.at=r}, +cR(){this.fP()}, +aLv(a){if(a!==B.Y)if(this.gv2()!=null)this.gvG()}, +FK(){var s,r=this,q=r.at +q===$&&A.c() +r.a.toString +q.sA(0,B.mU) +r.a.toString +q.saZF(null) +if(r.ga8q()){r.a.toString +s=B.LW}else s=B.B +q.saiA(s) +if(r.ga8q()){r.a.toString +s=B.Sz}else s=B.B +q.saiz(s) +s=r.c.bh(t.I) +s.toString +q.scV(s.w) +s=r.a.w +q.sZn(s==null?6:s) +q.shV(r.a.r) +r.a.toString +s=r.c +s.toString +s=A.cj(s,B.cM,t.l).w +q.seP(0,s.r) +q.sNQ(r.a.db) +r.a.toString +q.sXS(0) +r.a.toString +q.scw(0,null) +r.a.toString +q.sUA(0) +r.a.toString +q.sXZ(0,18) +r.a.toString +q.safW(18) +q.saeS(!r.gvG())}, +bH(a){var s,r=this +r.c7(a) +s=r.a.e +if(s!=a.e)if(s===!0){s=r.w +if(s!=null)s.bq(0) +s=r.x +s===$&&A.c() +s.z=B.b6 +s.o_(1,B.z,null)}else{s=r.x +s===$&&A.c() +s.ex(0)}}, +aLc(a){var s,r,q,p,o,n=this,m=B.b.ge1(n.r.f),l=A.bn("primaryDeltaFromDragStart"),k=A.bn("primaryDeltaFromLastDragUpdate") +switch(m.w.a.c.a){case 0:s=a.b +l.b=n.d.b-s +k.b=n.e.b-s +break +case 1:s=a.a +l.b=s-n.d.a +k.b=s-n.e.a +break +case 2:s=a.b +l.b=s-n.d.b +k.b=s-n.e.b +break +case 3:s=a.a +l.b=n.d.a-s +k.b=n.e.a-s +break}s=n.at +s===$&&A.c() +r=l.bl() +q=n.f +q.toString +p=s.a_F(r+q) +if(l.bl()>0){r=m.at +r.toString +r=pr}else r=!1 +else r=!0 +if(r){r=m.at +r.toString +p=r+s.a_F(k.bl())}s=m.at +s.toString +if(p!==s){o=p-m.r.Cv(m,p) +s=n.c +s.toString +s=A.Rn(s) +r=n.c +r.toString +switch(s.oT(r).a){case 1:case 3:case 4:case 5:s=m.z +s.toString +r=m.Q +r.toString +o=A.U(o,s,r) +break +case 2:case 0:break}m.iw(o)}}, +HT(){var s,r=this +if(!r.gwZ()){s=r.w +if(s!=null)s.bq(0) +r.w=A.dn(r.a.ch,new A.aOW(r))}}, +uu(){var s=this.r.f +if(s.length!==0)return A.ch(B.b.ge1(s).gkN()) +return null}, +L4(){if(this.uu()==null)return +var s=this.w +if(s!=null)s.bq(0)}, +L6(a){var s,r,q,p,o,n,m=this +m.r=m.gv2() +if(m.uu()==null)return +s=m.w +if(s!=null)s.bq(0) +s=m.x +s===$&&A.c() +s.d5(0) +m.e=m.d=a +s=m.at +s===$&&A.c() +r=s.db +q=r.b +q.toString +p=r.a +p.toString +o=q-p +if(o>0){q=r.c +q.toString +n=A.U(q/o,0,1)}else n=0 +r=r.d +r.toString +q=s.dx +q=q===B.a7||q===B.ag +p=s.Q +q=q?p.gcO(0)+p.gcX(0):p.ge_() +p=s.w +s=s.cy +s===$&&A.c() +m.f=n*(r-q-2*p-s) +m.as=!0}, +aT0(a){var s,r=this +if(J.f(r.e,a))return +s=B.b.ge1(r.r.f) +if(!s.r.rQ(s))return +if(r.uu()==null)return +r.aLc(a) +r.e=a}, +L5(a,b){var s=this +s.as=!1 +if(s.uu()==null)return +s.HT() +s.r=s.f=s.e=s.d=null}, +aBx(a){var s,r,q,p,o,n=this,m=n.gv2() +n.r=m +s=B.b.ge1(m.f) +if(!s.r.rQ(s))return +m=s.w +switch(m.a.c.a){case 0:case 2:r=n.at +r===$&&A.c() +r=r.cx +r===$&&A.c() +q=a.c.b>r?B.a7:B.ag +break +case 3:case 1:r=n.at +r===$&&A.c() +r=r.cx +r===$&&A.c() +q=a.c.a>r?B.d9:B.cA +break +default:q=null}m=$.b1.bf$.z.i(0,m.Q) +m.toString +p=A.kE(m) +p.toString +o=A.aRq(p,new A.ik(q,B.ib)) +m=B.b.ge1(n.r.f) +r=B.b.ge1(n.r.f).at +r.toString +m.EF(0,r+o,B.hq,B.b2)}, +Sv(a){var s,r,q=this.gv2() +if(q==null)return!0 +s=q.f +r=s.length +if(r>1)return!1 +return r===0||A.ch(B.b.ge1(s).gkN())===a}, +aHd(a){var s,r,q=this,p=q.a +p.toString +if(!p.zD(a.abj()))return!1 +if(q.gwZ()){p=q.x +p===$&&A.c() +s=p.Q +s===$&&A.c() +if(s!==B.bD&&s!==B.af)p.d5(0)}r=a.a +p=r.e +if(q.Sv(A.ch(p))){s=q.at +s===$&&A.c() +s.ey(0,r,p)}return!1}, +aAO(a){var s,r,q,p=this +if(!p.a.zD(a))return!1 +s=a.a +r=s.b +r.toString +q=s.a +q.toString +if(r<=q){r=p.x +r===$&&A.c() +q=r.Q +q===$&&A.c() +if(q!==B.Y&&q!==B.bE)r.ex(0) +r=s.e +if(p.Sv(A.ch(r))){q=p.at +q===$&&A.c() +q.ey(0,s,r)}return!1}if(a instanceof A.q_||a instanceof A.pN){r=p.x +r===$&&A.c() +q=r.Q +q===$&&A.c() +if(q!==B.bD&&q!==B.af)r.d5(0) +r=p.w +if(r!=null)r.bq(0) +r=s.e +if(p.Sv(A.ch(r))){q=p.at +q===$&&A.c() +q.ey(0,s,r)}}else if(a instanceof A.pZ)if(p.d==null)p.HT() +return!1}, +gaxS(){var s=this,r=A.D(t.B,t.xR) +if(s.gv2()==null||!s.gvG())return r +r.u(0,B.ahl,new A.dU(new A.aOS(s),new A.aOT(s),t.fg)) +r.u(0,B.ahm,new A.dU(new A.aOU(s),new A.aOV(s),t.Bk)) +return r}, +afk(a,b,c){var s,r=this.z +if($.b1.bf$.z.i(0,r)==null)return!1 +s=A.bhY(r,a) +r=this.at +r===$&&A.c() +return r.aeO(s,b,!0)}, +WT(a){var s,r=this +if(r.afk(a.gbe(a),a.gdR(a),!0)){r.Q=!0 +s=r.x +s===$&&A.c() +s.d5(0) +s=r.w +if(s!=null)s.bq(0)}else if(r.Q){r.Q=!1 +r.HT()}}, +WU(a){this.Q=!1 +this.HT()}, +a72(a){var s=A.ch(B.b.ge1(this.r.f).gkN())===B.b0?a.gmE().a:a.gmE().b +return A.auW(B.b.ge1(this.r.f).w.a.c)?s*-1:s}, +a8W(a){var s,r=B.b.ge1(this.r.f).at +r.toString +s=B.b.ge1(this.r.f).z +s.toString +s=Math.max(r+a,s) +r=B.b.ge1(this.r.f).Q +r.toString +return Math.min(s,r)}, +aAw(a){var s,r,q,p=this +p.r=p.gv2() +s=p.a72(a) +r=p.a8W(s) +if(s!==0){q=B.b.ge1(p.r.f).at +q.toString +q=r!==q}else q=!1 +if(q)B.b.ge1(p.r.f).YH(s)}, +aHf(a){var s,r,q,p,o=this +o.r=o.gv2() +s=o.at +s===$&&A.c() +s=s.zm(a.geI()) +if(s===!0){s=o.r +if(s!=null)s=s.f.length!==0 +else s=!1}else s=!1 +if(s){r=B.b.ge1(o.r.f) +if(t.Mj.b(a)){if(!r.r.rQ(r))return +q=o.a72(a) +p=o.a8W(q) +if(q!==0){s=r.at +s.toString +s=p!==s}else s=!1 +if(s)$.hq.Wl$.ahA(0,a,o.gaAv())}else if(t.xb.b(a)){s=r.at +s.toString +r.iw(s)}}}, +t(){var s=this,r=s.x +r===$&&A.c() +r.t() +r=s.w +if(r!=null)r.bq(0) +r=s.at +r===$&&A.c() +r.r.a.ad(0,r.gfa()) +r.fN() +s.aqv()}, +ab(a){var s,r,q=this,p=null +q.FK() +s=q.gaxS() +r=q.at +r===$&&A.c() +return new A.fS(q.gaHc(),new A.fS(q.gaAN(),new A.mx(A.FX(B.cW,new A.lv(A.pK(A.ew(new A.mx(q.a.c,p),r,q.z,p,B.x),B.m,p,p,new A.aOX(q),new A.aOY(q)),s,p,!1,p),p,p,p,q.gaHe(),p),p),p,t.WA),p,t.ji)}} +A.aOW.prototype={ +$0(){var s=this.a,r=s.x +r===$&&A.c() +r.ex(0) +s.w=null}, +$S:0} +A.aOS.prototype={ +$0(){var s=this.a,r=s.a.CW,q=t.S,p=A.ek(q),o=A.bu7() +return new A.qu(s.z,r,null,B.dK,A.D(q,t.SP),p,s,null,o,A.D(q,t.Au))}, +$S:749} +A.aOT.prototype={ +$1(a){var s=this.a +a.p2=s.gaeD() +a.p3=new A.aOP(s) +a.p4=new A.aOQ(s) +a.RG=new A.aOR(s)}, +$S:750} +A.aOP.prototype={ +$1(a){return this.a.L6(a.b)}, +$S:89} +A.aOQ.prototype={ +$1(a){return this.a.aT0(a.b)}, +$S:104} +A.aOR.prototype={ +$1(a){return this.a.L5(a.b,a.c)}, +$S:127} +A.aOU.prototype={ +$0(){var s=this.a,r=t.S,q=A.ek(r) +return new A.qv(s.z,B.b2,18,B.dK,A.D(r,t.SP),q,s,null,A.Dd(),A.D(r,t.Au))}, +$S:752} +A.aOV.prototype={ +$1(a){a.ac=this.a.gaBw()}, +$S:753} +A.aOX.prototype={ +$1(a){var s +switch(a.gdR(a).a){case 1:case 4:s=this.a +if(s.gvG())s.WU(a) +break +case 2:case 3:case 5:case 0:break}}, +$S:60} +A.aOY.prototype={ +$1(a){var s +switch(a.gdR(a).a){case 1:case 4:s=this.a +if(s.gvG())s.WT(a) +break +case 2:case 3:case 5:case 0:break}}, +$S:137} +A.qu.prototype={ +mp(a){if(!this.Rc(this.cZ,a.gbe(a),a.gdR(a)))return!1 +return this.ao2(a)}, +Rc(a,b,c){var s +if($.b1.bf$.z.i(0,a)==null)return!1 +s=t.ip.a($.b1.bf$.z.i(0,a).gba()).f +s.toString +return t.sm.a(s).aeP(A.bhY(a,b),c)}} +A.qv.prototype={ +mp(a){if(!this.Rc(this.f5,a.gbe(a),a.gdR(a)))return!1 +return this.apv(a)}, +Rc(a,b,c){var s,r +if($.b1.bf$.z.i(0,a)==null)return!1 +s=t.ip.a($.b1.bf$.z.i(0,a).gba()).f +s.toString +t.sm.a(s) +r=A.bhY(a,b) +return s.aTh(r,c)&&!s.aeP(r,c)}} +A.JI.prototype={ +dd(){this.eD() +this.ee() +this.hG()}, +t(){var s=this,r=s.bV$ +if(r!=null)r.ad(0,s.ghp()) +s.bV$=null +s.bG()}} +A.Ge.prototype={ +E(a,b){this.Q.E(0,b) +this.a7V()}, +P(a,b){var s,r,q=this +if(q.Q.P(0,b))return +s=B.b.f7(q.b,b) +B.b.di(q.b,s) +r=q.c +if(s<=r)q.c=r-1 +r=q.d +if(s<=r)q.d=r-1 +b.ad(0,q.gR1()) +q.a7V()}, +a7V(){var s,r +if(!this.y){this.y=!0 +s=new A.aLg(this) +r=$.cN +if(r.fF$===B.Fs)A.iC(s) +else r.dP$.push(s)}}, +axz(){var s,r,q,p,o,n,m,l,k=this,j=k.Q,i=A.ab(j,!0,A.w(j).c) +B.b.i1(i,k.gPC()) +s=k.b +k.b=A.b([],t.D1) +r=k.d +q=k.c +j=k.gR1() +p=0 +o=0 +while(!0){n=i.length +if(!(pMath.min(n,l))k.Kv(m) +m.an(0,j) +B.b.E(k.b,m);++p}}k.c=q +k.d=r +k.Q=A.C(t.x9)}, +UT(){this.IU()}, +IU(){var s=this,r=s.aki() +if(!s.at.k(0,r)){s.at=r +s.D()}s.aKV()}, +a4o(a){var s,r=B.b.ga9(a.gyC()) +for(s=1;s=r +while(!0){if(!(r!==d.c&&s.a==null))break +r+=q?1:-1 +s=J.l5(d.b[r])}b=s.a +if(b!=null){p=d.b[r] +o=d.a.gaF() +o.toString +n=A.dx(p.cW(0,t.x.a(o)),b.a) +m=isFinite(n.a)&&isFinite(n.b)?new A.BA(n,b.b,b.c):c}else m=c +l=J.l5(d.b[d.c]) +k=d.c +while(!0){if(!(k!==d.d&&l.b==null))break +k+=q?-1:1 +l=J.l5(d.b[k])}b=l.b +if(b!=null){p=d.b[k] +o=d.a.gaF() +o.toString +j=A.dx(p.cW(0,t.x.a(o)),b.a) +i=isFinite(j.a)&&isFinite(j.b)?new A.BA(j,b.b,b.c):c}else i=c +h=A.b([],t.AO) +g=d.gaT3()?new A.A(0,0,0+d.gacc().a,0+d.gacc().b):c +for(f=d.d;f<=d.c;++f){e=J.l5(d.b[f]).d +b=new A.W(e,new A.aLh(d,f,g),A.a5(e).h("W<1,A>")).a0R(0,new A.aLi()) +B.b.I(h,A.ab(b,!0,b.$ti.h("z.E")))}return new A.wo(m,i,!s.k(0,l)?B.rl:s.c,h,!0)}, +a24(a,b){var s=b>a +while(!0){if(!(a!==b&&J.l5(this.b[a]).c!==B.rl))break +a+=s?1:-1}return a}, +q3(a,b){return}, +aKV(){var s,r=this,q=null,p=r.e,o=r.r,n=r.d +if(n===-1||r.c===-1){n=r.f +if(n!=null){n.q3(q,q) +r.f=null}n=r.w +if(n!=null){n.q3(q,q) +r.w=null}return}if(!J.f(r.b[n],r.f)){n=r.f +if(n!=null)n.q3(q,q)}if(!J.f(r.b[r.c],r.w)){n=r.w +if(n!=null)n.q3(q,q)}n=r.b +s=r.d +n=r.f=n[s] +if(s===r.c){r.w=n +n.q3(p,o) +return}n.q3(p,q) +n=r.b[r.c] +r.w=n +n.q3(q,o)}, +a4e(){var s,r,q,p=this,o=p.d,n=o===-1 +if(n&&p.c===-1)return +if(n||p.c===-1){if(n)o=p.c +n=p.b +new A.bg(n,new A.aLe(p,o),A.a5(n).h("bg<1>")).al(0,new A.aLf(p)) +return}n=p.c +s=Math.min(o,n) +r=Math.max(o,n) +for(q=0;n=p.b,q=s&&q<=r)continue +p.kq(n[q],B.mM)}}, +aSU(a){var s,r,q,p=this +for(s=p.b,r=s.length,q=0;q")).al(0,new A.aLk(k)) +k.d=k.c=r}return B.bA}else if(s===B.bz){k.d=k.c=r-1 +return B.bA}}return B.bA}, +aRY(a){var s,r,q,p=this +for(s=p.b,r=s.length,q=0;q0&&r===B.c_))break;--s +r=p.kq(p.b[s],a)}if(a.goC())p.c=s +else p.d=s +return r}, +aS_(a){var s,r,q,p=this +if(p.d===-1){a.gqY(a) +$label0$0:{}p.d=p.c=null}s=a.goC()?p.c:p.d +r=p.kq(p.b[s],a) +switch(a.gqY(a)){case B.ri:if(r===B.c_)if(s>0){--s +r=p.kq(p.b[s],a.aOr(B.l8))}break +case B.rj:if(r===B.bz){q=p.b +if(s=0&&c==null))break +b=f.b=a.kq(a1[d],a4) +switch(b.a){case 2:case 3:case 4:c=b +break +case 0:if(e===!1){++d +c=B.bA}else if(d===a.b.length-1)c=b +else{++d +e=!0}break +case 1:if(e===!0){--d +c=B.bA}else if(d===0)c=b +else{--d +e=!1}break}}if(a5)a.c=d +else a.d=d +a.a4e() +c.toString +return c}, +aNZ(a,b){return this.gaNY().$2(a,b)}} +A.aLg.prototype={ +$1(a){var s=this.a +if(!s.y)return +s.y=!1 +if(s.Q.a!==0)s.axz() +s.UT()}, +$0(){return this.$1(null)}, +$C:"$1", +$R:0, +$D(){return[null]}, +$S:203} +A.aLh.prototype={ +$1(a){var s,r=this.a,q=r.b[this.b] +r=r.a.gaF() +r.toString +s=A.ie(q.cW(0,t.x.a(r)),a) +r=this.c +r=r==null?null:r.fp(s) +return r==null?s:r}, +$S:755} +A.aLi.prototype={ +$1(a){return a.gEi(0)&&!a.gaA(0)}, +$S:756} +A.aLe.prototype={ +$1(a){return a!==this.a.b[this.b]}, +$S:227} +A.aLf.prototype={ +$1(a){return this.a.kq(a,B.mM)}, +$S:57} +A.aLj.prototype={ +$1(a){return a!==this.a.b[this.b]}, +$S:227} +A.aLk.prototype={ +$1(a){return this.a.kq(a,B.mM)}, +$S:57} +A.alG.prototype={} +A.Ht.prototype={ +b5(){return new A.apo(A.C(t.Q),null,!1,B.p)}} +A.apo.prototype={ +bu(){var s,r,q,p=this +p.bN() +s=p.a +r=s.e +if(r!=null){q=p.c +q.toString +r.a=q +s=s.c +if(s!=null)p.swu(s)}}, +bH(a){var s,r,q,p,o,n=this +n.c7(a) +s=a.e +if(s!=n.a.e){r=s==null +if(!r){s.a=null +n.d.al(0,s.gahI(s))}q=n.a.e +if(q!=null){p=n.c +p.toString +q.a=p +n.d.al(0,q.gJb(q))}s=r?null:s.at +r=n.a.e +if(!J.f(s,r==null?null:r.at))for(s=n.d,s=A.ab(s,!1,A.w(s).c),r=s.length,o=0;oq.gHP()){o=q.a5 +s=q.gHP() +r=q.a5.at +r.toString +o.Ur(s-r)}else{o=q.a5 +s=o.at +s.toString +if(s<0)o.Ur(0-s)}q.a5.Cz(q.gaI2()) +q.a5.yr(0,q.gHP())}, +BP(a){var s,r=this +switch(r.K.a){case 0:s=new A.i(0,a-r.a0$.gC(0).b+r.gC(0).b) +break +case 3:s=new A.i(a-r.a0$.gC(0).a+r.gC(0).a,0) +break +case 1:s=new A.i(-a,0) +break +case 2:s=new A.i(0,-a) +break +default:s=null}return s}, +a8o(a){var s,r,q=this +switch(q.M.a){case 0:return!1 +case 1:case 2:case 3:s=a.a +if(!(s<0)){r=a.b +s=r<0||s+q.a0$.gC(0).a>q.gC(0).a||r+q.a0$.gC(0).b>q.gC(0).b}else s=!0 +return s}}, +aO(a,b){var s,r,q,p,o,n=this +if(n.a0$!=null){s=n.a5.at +s.toString +r=n.BP(s) +s=new A.b5u(n,r) +q=n.av +if(n.a8o(r)){p=n.cx +p===$&&A.c() +o=n.gC(0) +q.sbr(0,a.q2(p,b,new A.A(0,0,0+o.a,0+o.b),s,n.M,q.a))}else{q.sbr(0,null) +s.$2(a,b)}}}, +t(){this.av.sbr(0,null) +this.ja()}, +eK(a,b){var s,r=this.a5.at +r.toString +s=this.BP(r) +b.aJ(0,s.a,s.b)}, +tA(a){var s=this,r=s.a5.at +r.toString +r=s.a8o(s.BP(r)) +if(r){r=s.gC(0) +return new A.A(0,0,0+r.a,0+r.b)}return null}, +dZ(a,b){var s,r=this +if(r.a0$!=null){s=r.a5.at +s.toString +return a.m5(new A.b5t(r,b),r.BP(s),b)}return!1}, +wK(a,b,c,d){var s,r,q,p,o,n,m,l,k,j,i=this,h=null +A.ch(i.K) +if(d==null)d=a.gpX() +if(!(a instanceof A.Y)){s=i.a5.at +s.toString +return new A.Bk(s,d)}r=A.ie(a.cW(0,i.a0$),d) +q=i.a0$.gC(0) +switch(i.K.a){case 0:s=r.d +s=new A.xk(i.gC(0).b,q.b-s,s-r.b) +break +case 3:s=r.c +s=new A.xk(i.gC(0).a,q.a-s,s-r.a) +break +case 1:s=r.a +s=new A.xk(i.gC(0).a,s,r.c-s) +break +case 2:s=r.b +s=new A.xk(i.gC(0).b,s,r.d-s) +break +default:s=h}p=s.a +o=s.b +n=s.c +m=n +l=o +k=p +j=l-(k-m)*b +return new A.Bk(j,r.dz(i.BP(j)))}, +NC(a,b,c){return this.wK(a,b,null,c)}, +iG(a,b,c,d){this.a1f(a,null,c,A.bpc(a,b,c,this.a5,d,this))}, +AC(){return this.iG(B.bt,null,B.G,null)}, +uD(a){return this.iG(B.bt,null,B.G,a)}, +wY(a,b,c){return this.iG(a,null,b,c)}, +uE(a,b){return this.iG(B.bt,a,B.G,b)}, +UO(a){var s,r,q=this,p=q.gHP(),o=q.a5.at +o.toString +s=p-o +switch(q.K.a){case 0:q.gC(0) +q.gC(0) +p=q.gC(0) +o=q.gC(0) +r=q.a5.at +r.toString +return new A.A(0,0-s,0+p.a,0+o.b+r) +case 1:q.gC(0) +p=q.a5.at +p.toString +q.gC(0) +return new A.A(0-p,0,0+q.gC(0).a+s,0+q.gC(0).b) +case 2:q.gC(0) +q.gC(0) +p=q.a5.at +p.toString +return new A.A(0,0-p,0+q.gC(0).a,0+q.gC(0).b+s) +case 3:q.gC(0) +q.gC(0) +p=q.gC(0) +o=q.a5.at +o.toString +return new A.A(0-s,0,0+p.a+o,0+q.gC(0).b)}}, +$iQu:1} +A.b5u.prototype={ +$2(a,b){var s=this.a.a0$ +s.toString +a.fb(s,b.X(0,this.b))}, +$S:9} +A.b5t.prototype={ +$2(a,b){return this.a.a0$.dK(a,b)}, +$S:8} +A.YU.prototype={ +bc(a){var s +this.fg(a) +s=this.a0$ +if(s!=null)s.bc(a)}, +b3(a){var s +this.fh(0) +s=this.a0$ +if(s!=null)s.b3(0)}} +A.au6.prototype={} +A.au7.prototype={} +A.abD.prototype={} +A.abE.prototype={ +bA(a){var s=new A.aon(new A.aSU(a),null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}} +A.aSU.prototype={ +$0(){this.a.hI(B.L8)}, +$S:0} +A.aon.prototype={ +cM(){var s=this +s.uN() +if(s.aE!=null&&!s.gC(0).k(0,s.aE))s.V.$0() +s.aE=s.gC(0)}} +A.abS.prototype={} +A.HO.prototype={ +cJ(a){return A.bpP(this,!1)}} +A.abQ.prototype={ +cJ(a){return A.bpP(this,!0)}, +bA(a){var s=new A.aag(t.dq.a(a),A.D(t.S,t.x),0,null,null,A.aX(t.v)) +s.by() +return s}} +A.HN.prototype={ +gaF(){return t.Ss.a(A.bX.prototype.gaF.call(this))}, +a8(a,b){var s,r,q=this.e +q.toString +t.F8.a(q) +this.qr(0,b) +s=b.d +r=q.d +if(s!==r)q=A.J(s)!==A.J(r)||s.f!==r.f +else q=!1 +if(q)this.nu()}, +nu(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this,a2=null,a3={} +a1.OG() +a1.p1=null +a3.a=!1 +try{i=t.S +s=A.bgL(i,t.Dv) +r=A.jF(a2,a2,a2,i,t.V) +i=a1.e +i.toString +q=t.F8.a(i) +p=new A.aTb(a3,a1,s,q,r) +for(i=a1.ok,h=i.$ti,h=h.h("@<1>").ak(h.h("k5<1,2>")).h("u2<1,2>"),h=A.ab(new A.u2(i,h),!0,h.h("z.E")),g=h.length,f=t.MR,e=a1.k4,d=0;d").ak(g.h("k5<1,2>")).h("u2<1,2>")).al(0,p) +if(!a3.a&&a1.p3){a0=i.afB() +k=a0==null?-1:a0 +j=k+1 +J.kc(s,j,i.i(0,j)) +p.$1(j)}}finally{a1.p2=null +a1.gaF()}}, +aP6(a,b){this.f.CL(this,new A.aT8(this,b,a))}, +h6(a,b,c){var s,r,q,p,o=null +if(a==null)s=o +else{s=a.gaF() +s=s==null?o:s.b}r=t.MR +r.a(s) +q=this.ano(a,b,c) +if(q==null)p=o +else{p=q.gaF() +p=p==null?o:p.b}r.a(p) +if(s!=p&&s!=null&&p!=null)p.a=s.a +return q}, +lB(a){this.ok.P(0,a.c) +this.mI(a)}, +ahG(a){var s,r=this +r.gaF() +s=a.b +s.toString +s=t.b.a(s).b +s.toString +r.f.CL(r,new A.aTc(r,s))}, +aR7(a,b,c,d,e){var s,r=this.e +r.toString +s=t.F8.a(r).d.f.length +d.toString +r=A.bKd(b,c,d,e,s) +return r}, +UW(){var s=this.ok +s.aRC() +s.afB() +s=this.e +s.toString +t.F8.a(s)}, +UQ(a){var s=a.b +s.toString +t.b.a(s).b=this.p2}, +mo(a,b){this.gaF().Oq(0,t.x.a(a),this.p1)}, +mr(a,b,c){this.gaF().EE(t.x.a(a),this.p1)}, +nB(a,b){this.gaF().P(0,t.x.a(a))}, +cc(a){var s=this.ok,r=s.$ti +r=r.h("@<1>").ak(r.y[1]).h("D0<1,2>") +r=A.j3(new A.D0(s,r),r.h("z.E"),t.U) +B.b.al(A.ab(r,!0,A.w(r).h("z.E")),a)}} +A.aTb.prototype={ +$1(a){var s,r,q,p,o=this,n=o.b +n.p2=a +q=n.ok +if(q.i(0,a)!=null&&!J.f(q.i(0,a),o.c.i(0,a))){q.u(0,a,n.h6(q.i(0,a),null,a)) +o.a.a=!0}s=n.h6(o.c.i(0,a),o.d.d.abw(n,a),a) +if(s!=null){p=o.a +p.a=p.a||!J.f(q.i(0,a),s) +q.u(0,a,s) +q=s.gaF().b +q.toString +r=t.b.a(q) +if(a===0)r.a=0 +else{q=o.e +if(q.aR(0,a))r.a=q.i(0,a)}if(!r.c)n.p1=t.aA.a(s.gaF())}else{o.a.a=!0 +q.P(0,a)}}, +$S:13} +A.aT9.prototype={ +$0(){return null}, +$S:28} +A.aTa.prototype={ +$0(){return this.a.ok.i(0,this.b)}, +$S:762} +A.aT8.prototype={ +$0(){var s,r,q,p=this,o=p.a +o.p1=p.b==null?null:t.aA.a(o.ok.i(0,p.c-1).gaF()) +s=null +try{q=o.e +q.toString +r=t.F8.a(q) +q=o.p2=p.c +s=o.h6(o.ok.i(0,q),r.d.abw(o,q),q)}finally{o.p2=null}q=p.c +o=o.ok +if(s!=null)o.u(0,q,s) +else o.P(0,q)}, +$S:0} +A.aTc.prototype={ +$0(){var s,r,q,p=this +try{r=p.a +q=r.p2=p.b +s=r.h6(r.ok.i(0,q),null,q)}finally{p.a.p2=null}p.a.ok.P(0,p.b)}, +$S:0} +A.O9.prototype={ +vi(a){var s,r,q=a.b +q.toString +t.Cl.a(q) +s=this.f +if(q.DM$!==s){q.DM$=s +r=a.gbs(a) +if(r instanceof A.L&&!s)r.aB()}}} +A.S4.prototype={} +A.lz.prototype={ +cJ(a){var s=A.w(this),r=t.U +return new A.S5(A.D(s.h("lz.0"),r),A.D(t.D2,r),this,B.al,s.h("@").ak(s.h("lz.1")).h("S5<1,2>"))}} +A.q3.prototype={ +gbQ(a){return this.hz$.gbm(0)}, +k5(){J.lQ(this.gbQ(this),this.gZ1())}, +cc(a){J.lQ(this.gbQ(this),a)}, +Ir(a,b){var s=this.hz$,r=s.i(0,b) +if(r!=null){this.oi(r) +s.P(0,b)}if(a!=null){s.u(0,b,a) +this.kL(a)}}} +A.S5.prototype={ +gaF(){return this.$ti.h("q3<1,2>").a(A.bX.prototype.gaF.call(this))}, +cc(a){this.k4.gbm(0).al(0,a)}, +lB(a){this.k4.P(0,a.c) +this.mI(a)}, +hA(a,b){this.rW(a,b) +this.a9L()}, +a8(a,b){this.qr(0,b) +this.a9L()}, +a9L(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=f.e +e.toString +s=f.$ti +s.h("lz<1,2>").a(e) +r=f.ok +q=t.U +f.ok=A.D(t.D2,q) +p=f.k4 +s=s.c +f.k4=A.D(s,q) +for(q=e.ga0m(),o=q.length,n=0;n").a(A.bX.prototype.gaF.call(this)).Ir(a,b)}, +nB(a,b){var s=this.$ti.h("q3<1,2>") +if(s.a(A.bX.prototype.gaF.call(this)).hz$.i(0,b)===a)s.a(A.bX.prototype.gaF.call(this)).Ir(null,b)}, +mr(a,b,c){var s=this.$ti.h("q3<1,2>").a(A.bX.prototype.gaF.call(this)) +if(s.hz$.i(0,b)===a)s.Ir(null,b) +s.Ir(a,c)}} +A.Xp.prototype={ +bI(a,b){return this.a1i(a,b)}} +A.abU.prototype={ +W(){return"SnapshotMode."+this.b}} +A.S6.prototype={ +sTA(a){return}} +A.abW.prototype={ +bA(a){var s=new A.JP(A.cj(a,B.cy,t.l).w.b,this.w,this.e,this.f,!0,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){t.mR.a(b) +b.saOj(0,this.e) +b.saVe(0,this.f) +b.spw(0,A.cj(a,B.cy,t.l).w.b) +b.swm(this.w) +b.saMR(!0)}} +A.JP.prototype={ +spw(a,b){var s,r=this +if(b===r.V)return +r.V=b +s=r.dj +if(s==null)return +else{s.t() +r.dj=null +r.bi()}}, +swm(a){var s,r=this,q=r.aE +if(a===q)return +s=r.gfH() +q.ad(0,s) +r.aE=a +if(A.J(q)!==A.J(r.aE)||r.aE.cF(q))r.bi() +if(r.y!=null)r.aE.an(0,s)}, +saOj(a,b){var s,r=this,q=r.bj +if(b===q)return +s=r.gHZ() +q.ad(0,s) +r.bj=b +if(r.y!=null)b.an(0,s)}, +saVe(a,b){if(b===this.ce)return +this.ce=b +this.bi()}, +saMR(a){return}, +bc(a){var s=this +s.bj.an(0,s.gHZ()) +s.aE.an(0,s.gfH()) +s.B2(a)}, +b3(a){var s,r=this +r.fT=!1 +r.bj.ad(0,r.gHZ()) +r.aE.ad(0,r.gfH()) +s=r.dj +if(s!=null)s.t() +r.eB=r.dj=null +r.uO(0)}, +t(){var s,r=this +r.bj.ad(0,r.gHZ()) +r.aE.ad(0,r.gfH()) +s=r.dj +if(s!=null)s.t() +r.eB=r.dj=null +r.ja()}, +aE3(){var s,r=this +r.fT=!1 +s=r.dj +if(s!=null)s.t() +r.eB=r.dj=null +r.bi()}, +aO(a,b){var s,r=this +if(r.gC(0).gaA(0)){s=r.dj +if(s!=null)s.t() +r.eB=r.dj=null +return}s=r.dj +if(s!=null)s.t() +r.eB=r.dj=null +r.aE.EV(a,b,r.gC(0),A.jh.prototype.gjs.call(r)) +return}} +A.abV.prototype={} +A.UD.prototype={ +ghD(a){return A.X(A.iO(this,A.jH(B.a9D,"gb_N",1,[],[],0)))}, +shD(a,b){A.X(A.iO(this,A.jH(B.a9K,"sb_z",2,[b],[],0)))}, +gfi(){return A.X(A.iO(this,A.jH(B.a9E,"gb_O",1,[],[],0)))}, +sfi(a){A.X(A.iO(this,A.jH(B.a9A,"sb_C",2,[a],[],0)))}, +gqC(){return A.X(A.iO(this,A.jH(B.a9F,"gb_P",1,[],[],0)))}, +sqC(a){A.X(A.iO(this,A.jH(B.a9z,"sb_F",2,[a],[],0)))}, +gte(){return A.X(A.iO(this,A.jH(B.a9G,"gb_Q",1,[],[],0)))}, +ste(a){A.X(A.iO(this,A.jH(B.a9B,"sb_L",2,[a],[],0)))}, +a7u(a){return A.X(A.iO(this,A.jH(B.a9H,"b_R",0,[a],[],0)))}, +an(a,b){}, +t(){}, +ad(a,b){}, +$iaq:1, +$ibu:1} +A.ac0.prototype={ +ab(a){return A.m1(B.bb,1)}} +A.S7.prototype={ +aP_(a,b,c,d){var s=this +if(!s.e)return B.im +return new A.S7(c,s.b,s.c,s.d,!0)}, +aOB(a){return this.aP_(null,null,a,null)}, +j(a){var s=this,r=s.e?"enabled":"disabled" +return"SpellCheckConfiguration("+r+", service: "+A.j(s.a)+", text style: "+A.j(s.c)+", toolbar builder: "+A.j(s.d)+")"}, +k(a,b){var s +if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +if(b instanceof A.S7)if(b.a==this.a)s=b.e===this.e +else s=!1 +else s=!1 +return s}, +gL(a){var s=this +return A.a6(s.a,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.q7.prototype={ +j(a){var s=""+"TableRow(",r=this.b +if(r!=null)s+=r.j(0)+", " +r=this.c +s=(r.length===0?s+"no children":s+A.j(r))+")" +return s.charCodeAt(0)==0?s:s}} +A.lL.prototype={} +A.Sw.prototype={ +cJ(a){return new A.aqP(B.ZH,A.ek(t.U),this,B.al)}, +bA(a){var s,r,q,p,o=this,n=null,m=o.c,l=m.length +m=l!==0?m[0].c.length:0 +s=a.bh(t.I) +s.toString +s=s.w +r=A.Kg(a,n) +q=A.b([],t.n) +p=A.jF(n,n,n,t.S,t.PA) +m=new A.H7(B.ZG,m,l,p,o.e,s,o.r,r,o.w,n,q,new A.bs(),A.aX(t.v)) +m.by() +l=A.b([],t.iG) +B.b.sF(l,m.a5*m.M) +m.K=l +m.saib(o.y) +return m}, +bI(a,b){var s,r=this,q=null +b.saNV(q) +b.saPB(r.e) +s=a.bh(t.I) +s.toString +b.scV(s.w) +b.saN_(0,r.r) +b.saib(r.y) +b.stw(A.Kg(a,q)) +b.saPD(r.w) +b.sZl(0,q)}} +A.aUR.prototype={ +$1(a){return a.b!=null}, +$S:763} +A.aUS.prototype={ +$1(a){return a.b}, +$S:764} +A.aqP.prototype={ +gaF(){return t.Jc.a(A.bX.prototype.gaF.call(this))}, +hA(a,b){var s,r,q=this,p={} +q.ok=!0 +q.rW(a,b) +p.a=-1 +s=q.e +s.toString +s=t.On.a(s).c +r=A.a5(s).h("W<1,lL>") +q.k4=A.ab(new A.W(s,new A.b7g(p,q),r),!1,r.h("aI.E")) +q.aa9() +q.ok=!1}, +mo(a,b){var s=t.Jc +s.a(A.bX.prototype.gaF.call(this)) +if(!(a.b instanceof A.q6))a.b=new A.q6(B.h) +if(!this.ok)s.a(A.bX.prototype.gaF.call(this)).a_Z(b.a,b.b,a)}, +mr(a,b,c){}, +nB(a,b){t.Jc.a(A.bX.prototype.gaF.call(this)).a_Z(b.a,b.b,null)}, +a8(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this +d.ok=!0 +s=t.pN +for(r=d.k4,q=r.length,p=0;p")) +n=A.b([],t.lD) +for(r=b.c,m=d.p1,l=t.PN,k=0;k"));r.H();)d.Nb(q.ga1(0),B.xB,m) +d.k4=n +d.aa9() +m.af(0) +d.qr(0,b) +d.ok=!1}, +aa9(){var s=t.Jc.a(A.bX.prototype.gaF.call(this)),r=this.k4,q=r.length!==0?r[0].b.length:0,p=A.a5(r).h("m0<1,Y>") +s.akZ(q,A.ab(new A.m0(r,new A.b7e(),p),!0,p.h("z.E")))}, +cc(a){var s,r,q,p +for(s=this.k4,r=A.a5(s),r=r.h("@<1>").ak(r.h("b7")),s=new A.v_(B.b.gar(s),new A.b7j(),B.j7,r.h("v_<1,2>")),q=this.p1,r=r.y[1];s.H();){p=s.d +if(p==null)p=r.a(p) +if(!q.G(0,p))a.$1(p)}}, +lB(a){this.p1.E(0,a) +this.mI(a) +return!0}} +A.b7g.prototype={ +$1(a){var s,r,q,p={} +p.a=0 +s=this.a;++s.a +r=a.c +q=A.a5(r).h("W<1,b7>") +return new A.lL(null,A.ab(new A.W(r,new A.b7f(p,s,this.b),q),!1,q.h("aI.E")))}, +$S:765} +A.b7f.prototype={ +$1(a){return this.c.zp(a,new A.K_(this.a.a++,this.b.a))}, +$S:766} +A.b7h.prototype={ +$1(a){return!0}, +$S:767} +A.b7i.prototype={ +$1(a){return!this.a.G(0,a)}, +$S:768} +A.b7e.prototype={ +$1(a){var s=a.b +return new A.W(s,new A.b7d(),A.a5(s).h("W<1,Y>"))}, +$S:769} +A.b7d.prototype={ +$1(a){var s=a.gaF() +s.toString +return t.x.a(s)}, +$S:770} +A.b7j.prototype={ +$1(a){return a.b}, +$S:771} +A.acQ.prototype={ +vi(a){var s=a.b +s.toString +t.o3.a(s)}} +A.K_.prototype={ +k(a,b){if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +return b instanceof A.K_&&this.a===b.a&&this.b===b.b}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.auf.prototype={} +A.acZ.prototype={ +bA(a){var s=new A.QT(new A.ER(new WeakMap(),t.ii),A.C(t.Cn),A.D(t.X,t.hi),B.cW,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){}} +A.QT.prototype={ +N8(a){var s +this.hx.P(0,a) +s=this.dC +s.i(0,a.bf).P(0,a) +if(s.i(0,a.bf).a===0)s.P(0,a.bf)}, +dK(a,b){var s,r,q=this +if(!q.gC(0).G(0,b))return!1 +s=q.dZ(a,b)||q.V===B.b9 +if(s){r=new A.y8(b,q) +q.es.u(0,r,a) +a.E(0,r)}return s}, +ow(a,b){var s,r,q,p,o,n,m,l,k=this +if(!t.pY.b(a))return +s=k.hx +if(s.a===0)return +A.ES(b) +r=k.es.a.get(b) +if(r==null)return +q=k.ayo(s,r.a) +p=t.Cn +o=A.aSu(q,q.gRI(),A.w(q).c,p).a2V() +n=A.C(p) +for(q=o.gar(o),p=k.dC;q.H();){m=q.ga1(q) +m=p.i(0,m.bf) +m.toString +n.I(0,m)}l=s.vA(n) +for(s=l.gar(l);s.H();){q=s.ga1(s) +q=q.hx +if(q!=null)q.$1(a)}for(s=A.cT(n,n.r,n.$ti.c),q=s.$ti.c;s.H();){p=s.d +if(p==null)q.a(p)}}, +ayo(a,b){var s,r,q,p,o=A.C(t.zE) +for(s=b.length,r=this.hx,q=0;q1)return +if(p.c){q=o.gaL().gap() +q.toString +q.gaD() +q=o.gaL().gap() +q.toString +q=q.gaD().d1.gds()}else q=!1 +if(q)switch(A.ci().a){case 2:case 4:p.ax7(r,B.aF) +break +case 0:case 1:case 3:case 5:p.xH(r,B.aF) +break}else switch(A.ci().a){case 2:switch(s){case B.cq:case B.bY:o=o.gaL().gap() +o.toString +o.gaD().j7(B.aF,r) +break +case B.cr:case B.dY:case B.ba:case B.c8:q=o.gaL().gap() +q.toString +if(q.gaD().c9){q=p.r +q.toString}else q=!1 +if(q){o=o.gaL().gap() +o.toString +o.gaD().j7(B.aF,r) +p.v5(r)}break +case null:case void 0:break}break +case 0:case 1:switch(s){case B.cq:case B.bY:o=o.gaL().gap() +o.toString +o.gaD().j7(B.aF,r) +break +case B.cr:case B.dY:case B.ba:case B.c8:q=o.gaL().gap() +q.toString +if(q.gaD().c9){o=o.gaL().gap() +o.toString +o.gaD().j7(B.aF,r) +p.v5(r)}break +case null:case void 0:break}break +case 3:case 4:case 5:o=o.gaL().gap() +o.toString +o.gaD().j7(B.aF,r) +break}}, +aWd(a){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.a +if(!f.gi_())return +if(!g.c){s=f.gaL().gap() +s.toString +if(s.gaD().eH===1){s=f.gaL().gap() +s.toString +s=s.gaD().i8.at +s.toString +r=new A.i(s-g.e,0)}else{s=f.gaL().gap() +s.toString +s=s.gaD().i8.at +s.toString +r=new A.i(0,s-g.e)}q=g.gIn()-g.d +p=g.gIm()===B.ag||g.gIm()===B.a7 +s=!p?q:0 +o=new A.i(s,p?q:0) +s=a.d +n=s.Y(0,a.r) +m=a.x +if(A.K2(m)===2){l=f.gaL().gap() +l.toString +l.gaD().Ar(B.aF,n.Y(0,r).Y(0,o),s) +switch(a.f){case B.cr:case B.dY:case B.ba:case B.c8:return g.v5(s) +case B.cq:case B.bY:case null:case void 0:return}}if(A.K2(m)===3)switch(A.ci().a){case 0:case 1:case 2:switch(a.f){case B.cq:case B.bY:return g.So(B.aF,n.Y(0,r).Y(0,o),s) +case B.cr:case B.dY:case B.ba:case B.c8:case null:case void 0:break}return +case 3:return g.a83(B.aF,n.Y(0,r).Y(0,o),s) +case 5:case 4:return g.So(B.aF,n.Y(0,r).Y(0,o),s)}switch(A.ci().a){case 2:switch(a.f){case B.cq:case B.bY:f=f.gaL().gap() +f.toString +return f.gaD().Ge(B.aF,n.Y(0,r).Y(0,o),s) +case B.cr:case B.dY:case B.ba:case B.c8:m=f.gaL().gap() +m.toString +if(m.gaD().c9){m=g.f +if(m.a===m.b){m=g.r +m.toString}else m=!1}else m=!1 +if(m){f=f.gaL().gap() +f.toString +f.gaD().j7(B.aF,s) +return g.v5(s)}break +case null:case void 0:break}return +case 0:case 1:switch(a.f){case B.cq:case B.bY:case B.cr:case B.dY:f=f.gaL().gap() +f.toString +return f.gaD().Ge(B.aF,n.Y(0,r).Y(0,o),s) +case B.ba:case B.c8:m=f.gaL().gap() +m.toString +if(m.gaD().c9){f=f.gaL().gap() +f.toString +f.gaD().j7(B.aF,s) +return g.v5(s)}break +case null:case void 0:break}return +case 4:case 3:case 5:f=f.gaL().gap() +f.toString +return f.gaD().Ge(B.aF,n.Y(0,r).Y(0,o),s)}}s=g.f +if(s.a!==s.b)s=A.ci()!==B.a6&&A.ci()!==B.ct +else s=!0 +if(s)return g.xH(a.d,B.aF) +s=f.gaL().gap() +s.toString +k=s.a.c.a.b +s=f.gaL().gap() +s.toString +m=a.d +j=s.gaD().jz(m) +s=g.f +l=s.c +i=j.a +h=ll +if(h&&k.c===l){s=f.gaL().gap() +s.toString +f=f.gaL().gap() +f.toString +s.kE(f.a.c.a.mb(A.dJ(B.v,g.f.d,i,!1)),B.aF)}else if(!h&&i!==l&&k.c!==l){s=f.gaL().gap() +s.toString +f=f.gaL().gap() +f.toString +s.kE(f.a.c.a.mb(A.dJ(B.v,g.f.c,i,!1)),B.aF)}else g.xH(m,B.aF)}, +aW9(a){var s,r=this +r.r=null +if(r.b&&A.K2(a.c)===2){s=r.a.gaL().gap() +s.toString +s.lb()}if(r.c)r.f=null +r.a5w()}, +abx(a,b){var s,r,q,p,o=this,n=o.a,m=n.gWQ()?o.gYg():null +n=n.gWQ()?o.gYf():null +s=o.gagr() +r=o.gagt() +q=o.gYs() +p=o.gagq() +o.gagu() +return new A.ST(o.gaWO(),o.gaWM(),o.gaWH(),m,n,o.gaWw(),o.gaWy(),s,o.gaWE(),r,q,p,o.gaWC(),o.gaW7(),o.gaWQ(),o.gaWa(),o.gaWc(),o.gaW8(),!1,a,b,null)}} +A.ST.prototype={ +b5(){return new A.XQ(B.p)}} +A.XQ.prototype={ +aBs(){this.a.c.$0()}, +aBr(){this.a.d.$0()}, +aK5(a){var s +this.a.e.$1(a) +s=a.d +if(A.K2(s)===2){s=this.a.ay.$1(a) +return s}if(A.K2(s)===3){s=this.a.ch.$1(a) +return s}}, +aK6(a){if(A.K2(a.d)===1){this.a.y.$1(a) +this.a.Q.$0()}else this.a.toString}, +aK4(){this.a.z.$0()}, +aK2(a){this.a.CW.$1(a)}, +aK3(a){this.a.cx.$1(a)}, +aK1(a){this.a.cy.$1(a)}, +axI(a){var s=this.a.f +if(s!=null)s.$1(a)}, +axG(a){var s=this.a.r +if(s!=null)s.$1(a)}, +aA0(a){this.a.as.$1(a)}, +azZ(a){this.a.at.$1(a)}, +azX(a){this.a.ax.$1(a)}, +ab(a){var s,r,q=this,p=A.D(t.B,t.xR) +p.u(0,B.tg,new A.dU(new A.b7K(q),new A.b7L(q),t.UN)) +q.a.toString +p.u(0,B.tc,new A.dU(new A.b7M(q),new A.b7N(q),t.jn)) +q.a.toString +switch(A.ci().a){case 0:case 1:case 2:p.u(0,B.ahn,new A.dU(new A.b7O(q),new A.b7P(q),t.hg)) +break +case 3:case 4:case 5:p.u(0,B.ah3,new A.dU(new A.b7Q(q),new A.b7R(q),t.Qm)) +break}s=q.a +if(s.f!=null||s.r!=null)p.u(0,B.agC,new A.dU(new A.b7S(q),new A.b7T(q),t.C1)) +s=q.a +r=s.dx +return new A.lv(s.dy,p,r,!0,null)}} +A.b7K.prototype={ +$0(){return A.I5(null,this.a,null)}, +$S:210} +A.b7L.prototype={ +$1(a){var s=this.a.a +a.K=s.w +a.a5=s.x}, +$S:122} +A.b7M.prototype={ +$0(){return A.aJD(null,this.a,null,null,A.cC([B.ba],t.Au))}, +$S:211} +A.b7N.prototype={ +$1(a){var s=this.a +a.p3=s.gaA_() +a.p4=s.gazY() +a.RG=s.gazW()}, +$S:212} +A.b7O.prototype={ +$0(){var s=null,r=t.S,q=A.ek(r) +return new A.q8(B.ai,B.iP,A.C(r),s,s,0,s,s,s,s,s,s,A.D(r,t.SP),q,this.a,s,A.Dd(),A.D(r,t.Au))}, +$S:777} +A.b7P.prototype={ +$1(a){var s +a.at=B.jA +s=this.a +a.KP$=s.ga5s() +a.KQ$=s.ga5r() +a.ch=s.ga98() +a.cx=s.ga95() +a.cy=s.ga96() +a.db=s.ga94() +a.CW=s.ga99() +a.dx=s.ga97()}, +$S:778} +A.b7Q.prototype={ +$0(){var s=null,r=t.S,q=A.ek(r) +return new A.q9(B.ai,B.iP,A.C(r),s,s,0,s,s,s,s,s,s,A.D(r,t.SP),q,this.a,s,A.Dd(),A.D(r,t.Au))}, +$S:779} +A.b7R.prototype={ +$1(a){var s +a.at=B.jA +s=this.a +a.KP$=s.ga5s() +a.KQ$=s.ga5r() +a.ch=s.ga98() +a.cx=s.ga95() +a.cy=s.ga96() +a.db=s.ga94() +a.CW=s.ga99() +a.dx=s.ga97()}, +$S:780} +A.b7S.prototype={ +$0(){return A.bFm(null,this.a,A.bSS(),0.85,0.4,null)}, +$S:781} +A.b7T.prototype={ +$1(a){var s=this.a,r=s.a +a.at=r.f!=null?s.gaxH():null +a.ch=r.r!=null?s.gaxF():null}, +$S:782} +A.LF.prototype={ +an(a,b){var s=this +if(s.ac$<=0)$.b1.fo$.push(s) +if(s.ay===B.mO)A.e5(null,t.H) +s.amN(0,b)}, +ad(a,b){var s=this +s.amO(0,b) +if(!s.w&&s.ac$<=0)$.b1.oN(s)}, +vx(a){switch(a.a){case 1:A.e5(null,t.H) +break +case 0:case 2:case 3:case 4:break}}, +t(){$.b1.oN(this) +this.w=!0 +this.fN()}} +A.E_.prototype={ +W(){return"ClipboardStatus."+this.b}} +A.oJ.prototype={ +WZ(a){return this.aSw(a)}, +aSw(a){var s=0,r=A.r(t.H) +var $async$WZ=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:return A.p(null,r)}}) +return A.q($async$WZ,r)}} +A.agy.prototype={} +A.YZ.prototype={ +t(){var s=this,r=s.dQ$ +if(r!=null)r.ad(0,s.gmQ()) +s.dQ$=null +s.bG()}, +dd(){this.eD() +this.ee() +this.mR()}} +A.Z_.prototype={ +t(){var s=this,r=s.dQ$ +if(r!=null)r.ad(0,s.gmQ()) +s.dQ$=null +s.bG()}, +dd(){this.eD() +this.ee() +this.mR()}} +A.SX.prototype={} +A.ads.prototype={ +Ad(a){return new A.bb(0,a.b,0,a.d)}, +Aj(a,b){var s,r,q,p=this,o=p.d +if(o==null)o=p.b.b>=b.b +s=o?p.b:p.c +r=A.bLc(s.a,b.a,a.a) +q=s.b +return new A.i(r,o?Math.max(0,q-b.b):q)}, +uC(a){return!this.b.k(0,a.b)||!this.c.k(0,a.c)||this.d!=a.d}} +A.Cg.prototype={ +b5(){return new A.aru(new A.cD(!0,$.aa(),t.uh),B.p)}} +A.aru.prototype={ +cR(){var s,r=this +r.fP() +s=r.c +s.toString +r.d=A.bh2(s) +r.a9T()}, +bH(a){this.c7(a) +this.a9T()}, +t(){var s=this.e +s.ah$=$.aa() +s.ac$=0 +this.bG()}, +a9T(){var s=this.d&&this.a.c +this.e.sm(0,s)}, +ab(a){var s=this.e +return new A.UZ(s.a,s,this.a.d,null)}} +A.UZ.prototype={ +el(a){return this.f!==a.f}} +A.ly.prototype={ +D8(a){var s,r=this +r.jk$=new A.Ce(a,null) +r.ee() +r.mR() +s=r.jk$ +s.toString +return s}, +mR(){var s,r=this.jk$ +if(r!=null){s=this.dQ$ +r.sY2(0,!s.gm(s))}}, +ee(){var s,r=this,q=r.c +q.toString +s=A.bqk(q) +q=r.dQ$ +if(s===q)return +if(q!=null)q.ad(0,r.gmQ()) +s.an(0,r.gmQ()) +r.dQ$=s}} +A.fw.prototype={ +D8(a){var s,r,q=this +if(q.bV$==null)q.ee() +if(q.f2$==null)q.f2$=A.C(t.DH) +s=new A.asy(q,a,null) +r=q.bV$ +s.sY2(0,!r.gm(r)) +q.f2$.E(0,s) +return s}, +hG(){var s,r,q,p +if(this.f2$!=null){s=this.bV$ +r=!s.gm(s) +for(s=this.f2$,s=A.cT(s,s.r,A.w(s).c),q=s.$ti.c;s.H();){p=s.d;(p==null?q.a(p):p).sY2(0,r)}}}, +ee(){var s,r=this,q=r.c +q.toString +s=A.bqk(q) +q=r.bV$ +if(s===q)return +if(q!=null)q.ad(0,r.ghp()) +s.an(0,r.ghp()) +r.bV$=s}} +A.asy.prototype={ +t(){this.w.f2$.P(0,this) +this.a1r()}} +A.Um.prototype={ +an(a,b){}, +ad(a,b){}, +$iaq:1, +gm(){return!0}} +A.adD.prototype={ +ab(a){A.aUO(new A.awp(this.c,this.d.a)) +return this.e}} +A.KE.prototype={ +b5(){return new A.TP(B.p)}, +grl(){return this.c}} +A.TP.prototype={ +bu(){this.bN() +this.a.grl().an(0,this.gQU())}, +bH(a){var s,r=this +r.c7(a) +if(r.a.grl()!==a.grl()){s=r.gQU() +a.grl().ad(0,s) +r.a.grl().an(0,s)}}, +t(){this.a.grl().ad(0,this.gQU()) +this.bG()}, +ayV(){this.aK(new A.aYO())}, +ab(a){return this.a.ab(a)}} +A.aYO.prototype={ +$0(){}, +$S:0} +A.abM.prototype={ +ab(a){var s=this,r=t.so.a(s.c),q=r.gm(r) +if(s.e===B.ad)q=new A.i(-q.a,q.b) +return A.bmL(s.r,s.f,q)}} +A.a6J.prototype={ +ab(a){var s=this,r=t.ve.a(s.c),q=s.e.$1(r.gm(r)),p=r.gcz(r) +$label0$0:{if(B.bD===p||B.bE===p){r=s.r +break $label0$0}if(B.Y===p||B.af===p){r=null +break $label0$0}r=null}return A.adO(s.f,s.w,r,q,!0)}} +A.aaY.prototype={} +A.aaI.prototype={} +A.abF.prototype={ +ab(a){var s=this,r=null,q=s.e,p=q===B.b1,o=p?new A.jt(-1,0):new A.jt(0,-1) +if(p){p=t.ve.a(s.c) +p=Math.max(A.hg(p.gm(p)),0)}else p=r +if(q===B.b0){q=t.ve.a(s.c) +q=Math.max(A.hg(q.gm(q)),0)}else q=r +return A.LD(new A.ke(o,q,p,s.w,r),B.a4,r)}} +A.a3s.prototype={ +bA(a){var s=null,r=new A.a9S(s,s,s,s,s,new A.bs(),A.aX(t.v)) +r.by() +r.sbt(s) +r.sh5(0,this.e) +r.sJi(!1) +return r}, +bI(a,b){b.sh5(0,this.e) +b.sJi(!1)}} +A.a1X.prototype={ +ab(a){var s=this.e,r=s.a +return A.Eq(this.r,s.b.az(0,r.gm(r)),B.dG)}} +A.Ot.prototype={ +grl(){return this.c}, +ab(a){return this.aN7(a,this.f)}} +A.ZU.prototype={ +grl(){return A.Ot.prototype.grl.call(this)}, +gaN6(){return this.e}, +aN7(a,b){return this.gaN6().$2(a,b)}} +A.Is.prototype={ +b5(){var s=this.$ti +return new A.It(new A.as4(A.b([],s.h("v<1>")),s.h("as4<1>")),B.p,s.h("It<1>"))}} +A.It.prototype={ +gaK8(){var s=this.e +s===$&&A.c() +return s}, +gC8(){var s=this.a.w,r=this.x +if(r==null){s=$.aa() +s=new A.Tj(new A.bu(s),new A.bu(s),B.ahz,s) +this.x=s}else s=r +return s}, +FI(){var s,r,q,p=this,o=p.d +if(o.gD9()==null)return +s=p.f +r=s==null +q=r?null:s.b!=null +if(q===!0){if(!r)s.bq(0) +p.SW(0,o.gD9())}else p.SW(0,o.FI()) +p.IV()}, +Fd(){this.SW(0,this.d.Fd()) +this.IV()}, +IV(){var s=this.gC8(),r=this.d,q=r.a,p=q.length!==0&&r.b>0 +s.sm(0,new A.Iu(p,r.gabH())) +if(A.ci()!==B.a6)return +s=$.bjr() +if(s.b===this){q=q.length!==0&&r.b>0 +r=r.gabH() +s=s.a +s===$&&A.c() +s.eO("UndoManager.setUndoState",A.b3(["canUndo",q,"canRedo",r],t.N,t.w),t.H)}}, +aKE(a){this.FI()}, +aGb(a){this.Fd()}, +SW(a,b){var s=this +if(b==null)return +if(J.f(b,s.w))return +s.w=b +s.r=!0 +try{s.a.f.$1(b)}finally{s.r=!1}}, +a7d(){var s,r,q=this +if(J.f(q.a.c.a,q.w))return +if(q.r)return +s=q.a +s=s.d.$2(q.w,s.c.a) +if(!(s==null?!0:s))return +s=q.a +r=s.e.$1(s.c.a) +if(r==null)r=q.a.c.a +if(J.f(r,q.w))return +q.w=r +q.f=q.aK9(r)}, +a53(){if(!this.a.r.gda())return +$.bjr().b=this +this.IV()}, +aSy(a){switch(a.a){case 0:this.FI() +break +case 1:this.Fd() +break}}, +bu(){var s,r=this +r.bN() +s=A.bQs(B.hw,new A.aWU(r),r.$ti.c) +r.e!==$&&A.aj() +r.e=s +r.a7d() +r.a.c.an(0,r.gS0()) +r.a53() +r.a.r.an(0,r.gQY()) +r.gC8().w.an(0,r.gaiE()) +r.gC8().x.an(0,r.gahx())}, +bH(a){var s,r,q=this +q.c7(a) +s=a.c +if(q.a.c!==s){r=q.d +B.b.af(r.a) +r.b=-1 +r=q.gS0() +s.ad(0,r) +q.a.c.an(0,r)}s=a.r +if(q.a.r!==s){r=q.gQY() +s.ad(0,r) +q.a.r.an(0,r)}q.a.toString}, +t(){var s,r=this +r.a.c.ad(0,r.gS0()) +r.a.r.ad(0,r.gQY()) +r.gC8().w.ad(0,r.gaiE()) +r.gC8().x.ad(0,r.gahx()) +s=r.x +if(s!=null)s.t() +s=r.f +if(s!=null)s.bq(0) +r.bG()}, +ab(a){var s=t.ot,r=t.wS +return A.xJ(A.b3([B.ahc,new A.e1(this.gaKD(),new A.bW(A.b([],s),r),t._n).h7(a),B.agW,new A.e1(this.gaGa(),new A.bW(A.b([],s),r),t.fN).h7(a)],t.B,t.od),this.a.x)}, +aK9(a){return this.gaK8().$1(a)}} +A.aWU.prototype={ +$1(a){var s=this.a +s.d.q1(a) +s.IV()}, +$S(){return this.a.$ti.h("~(1)")}} +A.Iu.prototype={ +j(a){return"UndoHistoryValue(canUndo: "+this.a+", canRedo: "+this.b+")"}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.Iu&&b.a===this.a&&b.b===this.b}, +gL(a){var s=this.a?519018:218159 +return A.a6(s,this.b?519018:218159,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.Tj.prototype={ +t(){var s=this.w,r=$.aa() +s.ah$=r +s.ac$=0 +s=this.x +s.ah$=r +s.ac$=0 +this.fN()}} +A.as4.prototype={ +gD9(){var s=this.a +return s.length===0?null:s[this.b]}, +gabH(){var s=this.a.length +return s!==0&&this.b#"+A.bU(this.a))+"]"}} +A.Tt.prototype={ +bA(a){var s=this,r=s.e,q=A.aXq(a,r),p=A.aX(t.O5) +r=new A.QU(s.r,r,q,s.w,250,B.mL,s.Q,p,0,null,null,new A.bs(),A.aX(t.v)) +r.by() +r.I(0,null) +q=r.aZ$ +if(q!=null)r.eu=q +return r}, +bI(a,b){var s=this,r=s.e +b.skN(r) +r=A.aXq(a,r) +b.sacL(r) +b.saMm(s.r) +b.sl0(0,s.w) +b.saNb(s.y) +b.saNc(B.mL) +b.sod(s.Q)}, +cJ(a){return new A.asm(A.ek(t.U),this,B.al)}} +A.asm.prototype={ +gaF(){return t.E1.a(A.mh.prototype.gaF.call(this))}, +hA(a,b){var s=this +s.ah=!0 +s.ao7(a,b) +s.a9H() +s.ah=!1}, +a8(a,b){var s=this +s.ah=!0 +s.ao9(0,b) +s.a9H() +s.ah=!1}, +a9H(){var s=this,r=s.e +r.toString +t.g1.a(r) +r=t.E1 +if(!s.gbQ(0).gaA(0)){r.a(A.mh.prototype.gaF.call(s)).sbC(t.IT.a(s.gbQ(0).ga9(0).gaF())) +s.b_=0}else{r.a(A.mh.prototype.gaF.call(s)).sbC(null) +s.b_=null}}, +mo(a,b){var s=this +s.a0V(a,b) +if(!s.ah&&b.b===s.b_)t.E1.a(A.mh.prototype.gaF.call(s)).sbC(t.IT.a(a))}, +mr(a,b,c){this.a0W(a,b,c)}, +nB(a,b){var s=this +s.ao8(a,b) +if(!s.ah&&t.E1.a(A.mh.prototype.gaF.call(s)).eu===a)t.E1.a(A.mh.prototype.gaF.call(s)).sbC(null)}} +A.abx.prototype={ +bA(a){var s=this.e,r=A.aXq(a,s),q=A.aX(t.O5) +s=new A.aaf(s,r,this.r,250,B.mL,this.w,q,0,null,null,new A.bs(),A.aX(t.v)) +s.by() +s.I(0,null) +return s}, +bI(a,b){var s=this.e +b.skN(s) +s=A.aXq(a,s) +b.sacL(s) +b.sl0(0,this.r) +b.sod(this.w)}} +A.auH.prototype={} +A.auI.prototype={} +A.aep.prototype={ +ab(a){var s=this.e,r=new A.asn(s,!0,A.zF(this.c,!1,null),null) +return new A.Yh(s,r,null)}} +A.aXs.prototype={ +$1(a){this.a.a=a +return!1}, +$S:20} +A.Yh.prototype={ +el(a){return this.f!==a.f}} +A.asn.prototype={ +bA(a){var s=new A.aow(this.e,!0,null,new A.bs(),A.aX(t.v)) +s.by() +s.sbt(null) +return s}, +bI(a,b){b.sNh(0,this.e) +b.saUV(!0)}} +A.aow.prototype={ +sNh(a,b){if(b===this.V)return +this.V=b +this.bi()}, +saUV(a){return}, +jx(a){this.uM(a)}, +aO(a,b){if(!this.V)return +this.lS(a,b)}} +A.IF.prototype={ +Ju(a,b,c){var s,r=this.a,q=r!=null +if(q)a.ws(r.G3(c)) +b.toString +s=b[a.gagT()] +r=s.a +a.Jc(r.a,r.b,this.b,s.d,s.c) +if(q)a.ie()}, +cc(a){return a.$1(this)}, +aiU(a){return!0}, +a_B(a,b){var s=b.a +if(a.a===s)return this +b.a=s+1 +return null}, +abW(a,b){var s=b.a +b.a=s+1 +return a-s===0?65532:null}, +cK(a,b){var s,r,q,p,o,n=this +if(n===b)return B.e1 +if(A.J(b)!==A.J(n))return B.bZ +s=n.a +r=s==null +q=b.a +if(r!==(q==null))return B.bZ +t.a7.a(b) +if(!n.e.AU(0,b.e)||n.b!==b.b)return B.bZ +if(!r){q.toString +p=s.cK(0,q) +o=p.a>0?p:B.e1 +if(o===B.bZ)return o}else o=B.e1 +return o}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.ai(b)!==A.J(r))return!1 +if(!r.a0Q(0,b))return!1 +if(b instanceof A.oW)if(b.e.AU(0,r.e))s=b.b===r.b +else s=!1 +else s=!1 +return s}, +gL(a){var s=this +return A.a6(A.ia.prototype.gL.call(s,0),s.e,s.b,s.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aXB.prototype={ +$1(a){var s,r,q,p,o=this,n=null,m=a.a,l=m==null?n:m.r +$label0$0:{if(typeof l=="number"){m=l!==B.b.ga_(o.b) +s=l}else{s=n +m=!1}if(m){m=s +break $label0$0}m=n +break $label0$0}r=m!=null +if(r)o.b.push(m) +if(a instanceof A.oW){q=B.b.ga_(o.b) +p=q===0?0:q*o.c.a/q +m=o.a.a++ +o.d.push(new A.asw(a,A.dg(n,n,new A.afA(a,p,a.e,n),!1,n,n,!1,!1,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,new A.t0(m,"PlaceholderSpanIndexSemanticsTag("+m+")"),n,n),n))}a.aiU(o) +if(r)o.b.pop() +return!0}, +$S:86} +A.asw.prototype={ +vi(a){var s=a.b +s.toString +t.tq.a(s).b=this.f}} +A.afA.prototype={ +bA(a){var s=this.e +s=new A.WN(this.f,s.b,s.c,null,new A.bs(),A.aX(t.v)) +s.by() +return s}, +bI(a,b){var s=this.e +b.sil(s.b) +b.smW(s.c) +b.siE(0,this.f)}} +A.WN.prototype={ +siE(a,b){if(b===this.K)return +this.K=b +this.aB()}, +sil(a){if(this.a5===a)return +this.a5=a +this.aB()}, +smW(a){return}, +c2(a){var s=this.a0$ +s=s==null?null:s.aY(B.aN,a/this.K,s.gcG()) +if(s==null)s=0 +return s*this.K}, +bZ(a){var s=this.a0$ +s=s==null?null:s.aY(B.aa,a/this.K,s.gbY()) +if(s==null)s=0 +return s*this.K}, +c_(a){var s=this.a0$ +s=s==null?null:s.aY(B.ay,a/this.K,s.gcd()) +if(s==null)s=0 +return s*this.K}, +c1(a){var s=this.a0$ +s=s==null?null:s.aY(B.a9,a/this.K,s.gc0()) +if(s==null)s=0 +return s*this.K}, +iO(a){var s=this.a0$,r=s==null?null:s.nL(a) +$label0$0:{if(r==null){s=this.GO(a) +break $label0$0}s=this.K*r +break $label0$0}return s}, +dA(a){var s=this.a0$,r=s==null?null:s.aY(B.bg,new A.bb(0,a.b/this.K,0,1/0),s.gjd()) +if(r==null)r=B.x +return a.ca(r.a2(0,this.K))}, +cM(){var s,r=this,q=r.a0$ +if(q==null)return +s=t.k +q.dc(new A.bb(0,s.a(A.L.prototype.gaI.call(r)).b/r.K,0,1/0),!0) +r.id=s.a(A.L.prototype.gaI.call(r)).ca(q.gC(0).a2(0,r.K))}, +eK(a,b){var s=this.K +b.ff(0,s,s)}, +aO(a,b){var s,r,q,p=this,o=p.a0$ +if(o==null){p.ch.sbr(0,null) +return}s=p.K +if(s===1){a.fb(o,b) +p.ch.sbr(0,null) +return}r=p.cx +r===$&&A.c() +q=p.ch +q.sbr(0,a.wt(r,b,A.G6(s,s,1),new A.b5s(o),t.zV.a(q.a)))}, +dZ(a,b){var s,r=this.a0$ +if(r==null)return!1 +s=this.K +return a.Cr(new A.b5r(r),b,A.G6(s,s,1))}} +A.b5s.prototype={ +$2(a,b){return a.fb(this.a,b)}, +$S:9} +A.b5r.prototype={ +$2(a,b){return this.a.dK(a,b)}, +$S:8} +A.atX.prototype={ +bc(a){var s +this.fg(a) +s=this.a0$ +if(s!=null)s.bc(a)}, +b3(a){var s +this.fh(0) +s=this.a0$ +if(s!=null)s.b3(0)}} +A.dM.prototype={ +W(){return"WidgetState."+this.b}} +A.aeB.prototype={$icf:1} +A.Yj.prototype={ +aG(a){return this.c.$1(a)}} +A.aeC.prototype={ +K2(a){return this.aG(A.C(t.EK)).K2(a)}, +$icf:1} +A.V3.prototype={ +aG(a){if(a.G(0,B.K))return B.cH +return this.a}, +gDc(){return"WidgetStateMouseCursor("+this.c+")"}} +A.aeA.prototype={$icf:1} +A.Yi.prototype={ +aG(a){return this.x.$1(a)}} +A.aeD.prototype={$icf:1} +A.asx.prototype={ +aG(a){return this.b6.$1(a)}} +A.cf.prototype={} +A.VH.prototype={ +aG(a){var s,r=this,q=r.a,p=q==null?null:q.aG(a) +q=r.b +s=q==null?null:q.aG(a) +return r.d.$3(p,s,r.c)}, +$icf:1} +A.d1.prototype={ +aG(a){return this.a.$1(a)}, +$icf:1} +A.d0.prototype={ +aG(a){return this.a}, +j(a){var s="WidgetStatePropertyAll(",r=this.a +if(typeof r=="number")return s+A.jq(r)+")" +else return s+A.j(r)+")"}, +$icf:1} +A.aeE.prototype={ +ey(a,b,c){var s=this.a +if(c?J.iD(s,b):J.up(s,b))this.D()}} +A.Tz.prototype={ +b5(){return new A.asA(B.p)}} +A.asA.prototype={ +cR(){var s,r=this +r.fP() +r.a.toString +s=r.c +s.toString +r.d=A.aKQ(s,t.X) +r.a.toString}, +bH(a){this.c7(a) +this.a.toString}, +t(){this.a.toString +this.bG()}, +ab(a){return this.a.c}} +A.LN.prototype={ +b5(){return new A.Uh(B.VO,A.b([],t.O),B.p)}, +aga(a){return this.d.$1(a)}} +A.Uh.prototype={ +bu(){var s=this,r=A.og(s.a.c) +s.d=r +s.a.toString +s.bN()}, +bH(a){var s +this.c7(a) +s=A.og(this.a.c) +this.d=s}, +t(){this.a.toString +this.bG()}, +U8(a){var s=this.d +this.a.toString +return new A.a1e(a,s,new A.b_v(this),!1,null)}, +Y9(a){var s,r=this +r.a.toString +r.aK(new A.b_w(r,a)) +s=r.a +s.toString +s.aga(r.d.bk()) +r.a.toString}, +ac_(){this.a.toString +return A.az_(B.aP,new A.cu(new A.aS(0,0,0,0),new A.a1d(this.d,this.gaW2(),B.a47,null),null),B.ce)}, +a0l(){this.a.toString +switch(1){case 0:case 1:case 4:case 5:return this.U8(B.agi)}}, +ab(a){var s,r,q,p,o,n,m,l,k,j=this,i=null,h=A.cj(a,i,t.l).w.grs(0)===B.fA +if(!h)j.a.toString +s=t.p +r=j.a +if(h){h=r.ax +h=A.fF(j.ac_(),300*h,300) +r=A.iH(i,new A.yp(j.d,50,50,i),B.ai,!1,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,new A.b_p(j),i,i,i,i,i,i) +j.a.toString +q=A.b([A.fF(j.a0l(),40,225)],s) +j.a.toString +q.push(A.fF(j.U8(B.t9),40,225)) +h=A.b([h,new A.cu(B.Uv,A.jU(A.b([r,A.m1(A.hm(q,B.ah,B.ac,B.ak),1)],s),B.ah,B.i1,B.ak,i),i)],s) +if(j.e.length!==0){j.a.toString +s=A.b([],s) +for(r=j.e,q=r.length,p=t.kK,o=0;o>>16&255,k=t.O,j=A.b([A.la(l,255,0,1),A.la(l,255,255,1)],k) +k=A.b([A.la(l,255,255,1),A.la(l,0,255,1)],k) +l=$.G() +s=l.B() +s.sdk(new A.eJ(B.aO,B.b_,B.N,j,r,r).fD(0,o)) +a.b7(o,s) +s=l.B() +s.sdk(new A.eJ(B.d7,B.cN,B.N,k,r,r).fD(0,o)) +s.sde(B.ea) +a.b7(o,s) +l=l.B() +n=A.uo(n)?B.l:B.q +l.sA(0,n) +l.sbM(1.5) +l.sU(0,B.u) +a.cs(new A.i(q*(m&255)/255,p*(1-(m>>>8&255)/255)),p*0.04,l)}, +cF(a){return!1}} +A.a9v.prototype={ +aO(a,b){var s,r=null,q=b.a,p=b.b,o=new A.A(0,0,0+q,0+p),n=this.b,m=n.a,l=m>>>8&255,k=t.O,j=A.b([A.la(255,l,0,1),A.la(255,l,255,1)],k) +k=A.b([A.la(255,l,255,1),A.la(0,l,255,1)],k) +l=$.G() +s=l.B() +s.sdk(new A.eJ(B.aO,B.b_,B.N,j,r,r).fD(0,o)) +a.b7(o,s) +s=l.B() +s.sdk(new A.eJ(B.d7,B.cN,B.N,k,r,r).fD(0,o)) +s.sde(B.ea) +a.b7(o,s) +l=l.B() +n=A.uo(n)?B.l:B.q +l.sA(0,n) +l.sbM(1.5) +l.sU(0,B.u) +a.cs(new A.i(q*(m&255)/255,p*(1-(m>>>16&255)/255)),p*0.04,l)}, +cF(a){return!1}} +A.a9u.prototype={ +aO(a,b){var s,r=null,q=b.a,p=b.b,o=new A.A(0,0,0+q,0+p),n=this.b,m=n.a,l=m&255,k=t.O,j=A.b([A.la(0,255,l,1),A.la(255,255,l,1)],k) +k=A.b([A.la(255,255,l,1),A.la(255,0,l,1)],k) +l=$.G() +s=l.B() +s.sdk(new A.eJ(B.aO,B.b_,B.N,j,r,r).fD(0,o)) +a.b7(o,s) +s=l.B() +s.sdk(new A.eJ(B.d7,B.cN,B.N,k,r,r).fD(0,o)) +s.sde(B.ea) +a.b7(o,s) +l=l.B() +n=A.uo(n)?B.l:B.q +l.sA(0,n) +l.sbM(1.5) +l.sU(0,B.u) +a.cs(new A.i(q*(m>>>16&255)/255,p*(1-(m>>>8&255)/255)),p*0.04,l)}, +cF(a){return!1}} +A.a4K.prototype={ +aO(a,b){var s,r,q,p,o,n=null,m=b.a,l=b.b,k=new A.A(0,0,0+m,0+l),j=m/2,i=l/2,h=new A.i(j,i),g=m<=l?j:i,f=A.b([B.o_.bk(),B.nZ.bk(),B.nY.bk(),B.nX.bk(),B.nW.bk(),B.o0.bk(),B.nV.bk()],t.O),e=new A.acM(B.a5,0,6.283185307179586,B.N,f,n,n) +m=$.G() +s=m.B() +r=B.a5.aG(n).Nl(k) +q=e.Rd() +e.Sd(k,n) +s.sdk(m.acI(r,f,q,B.N,0,6.283185307179586,n)) +a.cs(h,g,s) +s=m.B() +r=B.a5.aG(n).Nl(k) +q=k.giF() +p=B.Fa.Rd() +o=B.Fa.Sd(k,n) +s.sdk(A.Fd(r,0.5*q,B.xq,p,B.N,o,n,0*k.giF())) +a.cs(h,g,s) +s=m.B() +r=this.b +s.sA(0,A.S(B.c.ai(255*(1-r.d)),0,0,0)) +a.cs(h,g,s) +s=r.c*g +q=r.b*3.141592653589793/180 +p=Math.cos(q) +q=Math.sin(q) +m=m.B() +r=A.uo(r.bk())?B.l:B.q +m.sA(0,r) +m.sbM(1.5) +m.sU(0,B.u) +a.cs(new A.i(j+s*p,i-s*q),l*0.04,m)}, +cF(a){return!1}} +A.b6K.prototype={ +Mm(a){var s,r=this,q="gesturecontainer",p=a.a,o=a.b +r.ix("track",A.jx(o/5,p-30)) +s=o*0.4 +r.l2("track",new A.i(15,s)) +r.ix("thumb",A.jx(o/4,5)) +r.l2("thumb",new A.i(0,s)) +r.ix(q,A.jx(o,p)) +r.l2(q,B.h)}, +uC(a){return!1}} +A.adK.prototype={ +aO(a,b){var s,r,q,p,o,n=this,m=null,l=b.b,k=new A.A(0,0,0+b.a,0+l),j=n.b +if(j===B.t9){s=l/2 +r=$.G() +q=r.B() +q.sA(0,B.nc) +p=r.B() +p.sA(0,B.l) +A.lr(B.c.ai(l/s),new A.aWG(b,new A.Q(s,s),a,p,q),t.P)}switch(j.a){case 0:o=A.b([B.nV.bk(),B.o0.bk(),B.nW.bk(),B.nX.bk(),B.nY.bk(),B.nZ.bk(),B.o_.bk()],t.O) +l=$.G().B() +l.sdk(new A.eJ(B.aO,B.b_,B.N,o,m,m).fD(0,k)) +a.b7(k,l) +break +case 1:l=n.c.b +o=A.b([new A.dk(1,l,0,1).bk(),new A.dk(1,l,1,1).bk()],t.O) +l=$.G().B() +l.sdk(new A.eJ(B.aO,B.b_,B.N,o,m,m).fD(0,k)) +a.b7(k,l) +break +case 2:l=n.c.b +o=A.b([new A.ee(1,l,0,0.5).bk(),new A.ee(1,l,1,0.5).bk()],t.O) +l=$.G().B() +l.sdk(new A.eJ(B.aO,B.b_,B.N,o,m,m).fD(0,k)) +a.b7(k,l) +break +case 3:l=n.c.b +o=A.b([new A.dk(1,l,1,0).bk(),new A.dk(1,l,1,1).bk()],t.O) +l=$.G().B() +l.sdk(new A.eJ(B.aO,B.b_,B.N,o,m,m).fD(0,k)) +a.b7(k,l) +break +case 4:l=n.c.b +o=A.b([new A.ee(1,l,1,0).bk(),new A.ee(1,l,1,0.5).bk(),new A.ee(1,l,1,1).bk()],t.O) +l=$.G().B() +l.sdk(new A.eJ(B.aO,B.b_,B.N,o,m,m).fD(0,k)) +a.b7(k,l) +break +case 5:l=n.c +j=l.bk().a +j=A.S(j>>>24&255,0,j>>>8&255,j&255).a +j=A.S(255,j>>>16&255,j>>>8&255,j&255) +l=l.bk().a +l=A.S(l>>>24&255,255,l>>>8&255,l&255).a +o=A.b([j,A.S(255,l>>>16&255,l>>>8&255,l&255)],t.O) +l=$.G().B() +l.sdk(new A.eJ(B.aO,B.b_,B.N,o,m,m).fD(0,k)) +a.b7(k,l) +break +case 6:l=n.c +j=l.bk().a +j=A.S(j>>>24&255,j>>>16&255,0,j&255).a +j=A.S(255,j>>>16&255,j>>>8&255,j&255) +l=l.bk().a +l=A.S(l>>>24&255,l>>>16&255,255,l&255).a +o=A.b([j,A.S(255,l>>>16&255,l>>>8&255,l&255)],t.O) +l=$.G().B() +l.sdk(new A.eJ(B.aO,B.b_,B.N,o,m,m).fD(0,k)) +a.b7(k,l) +break +case 7:l=n.c +j=l.bk().a +j=A.S(j>>>24&255,j>>>16&255,j>>>8&255,0).a +j=A.S(255,j>>>16&255,j>>>8&255,j&255) +l=l.bk().a +l=A.S(l>>>24&255,l>>>16&255,l>>>8&255,255).a +o=A.b([j,A.S(255,l>>>16&255,l>>>8&255,l&255)],t.O) +l=$.G().B() +l.sdk(new A.eJ(B.aO,B.b_,B.N,o,m,m).fD(0,k)) +a.b7(k,l) +break +case 8:l=n.c +j=l.bk().a +j=A.S(0,j>>>16&255,j>>>8&255,j&255) +l=l.bk().a +o=A.b([j,A.S(255,l>>>16&255,l>>>8&255,l&255)],t.O) +l=$.G().B() +l.sdk(new A.eJ(B.aO,B.b_,B.N,o,m,m).fD(0,k)) +a.b7(k,l) +break}}, +cF(a){return!1}} +A.aWG.prototype={ +$1(a){var s=this,r=s.b +A.lr(B.c.ai(s.a.a/r.a),new A.aWF(s.c,r,a,s.d,s.e),t.P)}, +$S:73} +A.aWF.prototype={ +$1(a){var s=this,r=s.b,q=r.a,p=q*a,o=s.c,n=q*o +o=B.f.bx(a+o,2)!==0?s.d:s.e +s.a.b7(new A.A(p,n,p+q,n+r.b),o)}, +$S:73} +A.adw.prototype={ +aO(a,b){var s,r,q=$.G(),p=q.Z() +p.hq(A.jT(B.a3B,b.a*1.8)) +a.tF(p,B.q,3,!0) +p=b.b +s=p*0.4 +r=q.B() +r.sA(0,B.l) +r.sU(0,B.i) +a.cs(new A.i(0,s),p,r) +r=this.b +if(r!=null){q=q.B() +q.sA(0,r) +q.sU(0,B.i) +a.cs(new A.i(0,s),p*0.65,q)}}, +cF(a){return!1}} +A.a5h.prototype={ +aO(a,b){var s,r=b.a,q=b.b,p=q/10,o=$.G(),n=o.B() +n.sA(0,B.nc) +s=o.B() +s.sA(0,B.l) +A.lr(B.c.ai(q/p),new A.aHA(b,new A.Q(r/10,p),a,s,n),t.P) +q/=2 +o=o.B() +o.sA(0,this.b) +o.sU(0,B.i) +a.cs(new A.i(r/2,q),q,o)}, +cF(a){return!1}} +A.aHA.prototype={ +$1(a){var s=this,r=s.b +A.lr(B.c.ai(s.a.a/r.a),new A.aHz(s.c,r,a,s.d,s.e),t.P)}, +$S:73} +A.aHz.prototype={ +$1(a){var s,r,q=this,p=q.b,o=p.a,n=o*a +p=p.b +s=q.c +r=p*s +s=B.f.bx(a+s,2)!==0?q.d:q.e +q.a.b7(new A.A(n,r,n+o,r+p),s)}, +$S:73} +A.E1.prototype={ +b5(){return new A.agI(B.p)}} +A.agI.prototype={ +bu(){this.bN() +this.e=this.a.f[0]}, +aNS(a,b){var s,r +if(b===B.uQ){s=a.bk().a +return A.b([B.d.k_(B.f.hZ(s>>>16&255,16).toUpperCase(),2,"0"),B.d.k_(B.f.hZ(s>>>8&255,16).toUpperCase(),2,"0"),B.d.k_(B.f.hZ(s&255,16).toUpperCase(),2,"0"),B.d.k_(B.f.hZ(s>>>24&255,16).toUpperCase(),2,"0")],t.T)}else if(b===B.mQ){s=a.bk().a +return A.b([B.f.j(s>>>16&255),B.f.j(s>>>8&255),B.f.j(s&255),""+B.c.ai((s>>>24&255)/255*100)+"%"],t.T)}else if(b===B.mR)return A.b([""+B.c.ai(a.b)+"\xb0",""+B.c.ai(a.c*100)+"%",""+B.c.ai(a.d*100)+"%",""+B.c.ai(a.a*100)+"%"],t.T) +else{s=t.T +if(b===B.mS){r=A.nP(a) +return A.b([""+B.c.ai(r.b)+"\xb0",""+B.c.ai(r.c*100)+"%",""+B.c.ai(r.d*100)+"%",""+B.c.ai(a.a*100)+"%"],s)}else return A.b(["??","??","??","??"],s)}}, +aNT(){var s,r,q,p,o,n,m,l,k,j=this,i=null +j.a.toString +s=t.p +r=A.b([],s) +q=j.e +q===$&&A.c() +q=B.CI.i(0,q) +if(q==null)q=A.b([],t.T) +p=q.length +o=0 +for(;o>>24&255,B.c.ai(o*255),p>>>8&255,p&255))) +break +case 6:p=r.d.bk().a +r.e.$1(A.og(A.S(p>>>24&255,p>>>16&255,B.c.ai(o*255),p&255))) +break +case 7:p=r.d.bk().a +r.e.$1(A.og(A.S(p>>>24&255,p>>>16&255,p>>>8&255,B.c.ai(o*255)))) +break +case 8:s=r.d +r.e.$1(new A.dk(B.c.bX(q,0,p)/p,s.b,s.c,s.d)) +break}}, +ab(a){return new A.vy(new A.azv(this),null)}} +A.azv.prototype={ +$2(a,b){var s,r,q,p=null,o=this.a,n=o.c +switch(n.a){case 0:s=o.d.b +r=15+(b.b-30)*s/360 +new A.dk(1,s,1,1).bk() +break +case 1:s=o.d +q=s.c +r=15+(b.b-30)*q +new A.dk(1,s.b,q,1).bk() +break +case 2:s=o.d +r=15+(b.b-30)*A.nP(s).c +new A.ee(1,s.b,A.nP(s).c,0.5).bk() +break +case 3:s=o.d +q=s.d +r=15+(b.b-30)*q +new A.dk(1,s.b,1,q).bk() +break +case 4:s=o.d +r=15+(b.b-30)*A.nP(s).d +new A.ee(1,s.b,1,A.nP(s).d).bk() +break +case 5:s=o.d +r=15+(b.b-30)*(s.bk().a>>>16&255)/255 +s=s.bk().a +A.S(255,s>>>16&255,s>>>8&255,s&255) +break +case 6:s=o.d +r=15+(b.b-30)*(s.bk().a>>>8&255)/255 +s=s.bk().a +A.S(255,s>>>16&255,s>>>8&255,s&255) +break +case 7:s=o.d +r=15+(b.b-30)*(s.bk().a&255)/255 +s=s.bk().a +A.S(255,s>>>16&255,s>>>8&255,s&255) +break +case 8:s=o.d +r=15+(b.b-30)*((s.bk().a>>>24&255)/255) +q=s.bk().a +A.S(B.c.ai(255*s.a),q>>>16&255,q>>>8&255,q&255) +break +default:r=15}n=A.aJ6(A.az_(B.J2,A.ew(p,p,p,new A.adK(n,o.d,p),B.x),B.ce),"track") +return new A.yH(new A.b6K(),A.b([n,A.aJ6(A.bqx(A.ew(p,p,p,new A.adw(p,!1,p),B.x),new A.i(r,0)),"thumb"),A.aJ6(new A.vy(new A.azu(o),p),"gesturecontainer")],t.p),p)}, +$S:788} +A.azu.prototype={ +$2(a,b){var s=null,r=a.gaF(),q=this.a +return A.iH(s,s,B.ai,!1,s,s,s,s,s,s,s,s,new A.azs(q,r,b),s,new A.azt(q,r,b),s,s,s,s,s,s,s,s,s,s,s)}, +$S:789} +A.azs.prototype={ +$1(a){var s=this.b +return s!=null?this.a.a0k(s,this.c,a.a):null}, +$S:97} +A.azt.prototype={ +$1(a){var s=this.b +return s!=null?this.a.a0k(s,this.c,a.d):null}, +$S:14} +A.yp.prototype={ +ab(a){var s=null,r=A.axF(B.Qa) +return A.dD(s,A.az_(B.ug,A.ew(s,s,s,new A.a5h(this.c.bk(),s),B.x),B.ce),B.y,s,s,new A.fc(s,s,r,B.ug,s,s,B.aV),this.e,s,s,this.d)}} +A.a1d.prototype={ +az_(a,b){var s,r=this +switch(r.e.a){case 0:case 1:s=r.c +r.d.$1(new A.dk(s.a,s.b,a,b)) +break +case 3:s=r.c +r.d.$1(new A.dk(s.a,a*360,s.c,b)) +break +case 2:s=r.c +r.d.$1(new A.dk(s.a,a*360,b,s.d)) +break +case 4:case 5:s=A.nP(r.c) +r.d.$1(A.av3(new A.ee(s.a,s.b,a,b))) +break +case 7:s=A.nP(r.c) +r.d.$1(A.av3(new A.ee(s.a,a*360,s.c,b))) +break +case 6:s=A.nP(r.c) +r.d.$1(A.av3(new A.ee(s.a,a*360,b,s.d))) +break +case 10:s=r.c.bk().a +s=A.S(s>>>24&255,s>>>16&255,s>>>8&255,B.c.ai(a*255)).a +r.d.$1(A.og(A.S(s>>>24&255,s>>>16&255,B.c.ai(b*255),s&255))) +break +case 9:s=r.c.bk().a +s=A.S(s>>>24&255,s>>>16&255,s>>>8&255,B.c.ai(a*255)).a +r.d.$1(A.og(A.S(s>>>24&255,B.c.ai(b*255),s>>>8&255,s&255))) +break +case 8:s=r.c.bk().a +s=A.S(s>>>24&255,B.c.ai(a*255),s>>>8&255,s&255).a +r.d.$1(A.og(A.S(s>>>24&255,s>>>16&255,B.c.ai(b*255),s&255))) +break +default:break}}, +a58(a,b,c,d){var s,r,q,p,o,n,m,l=this,k=b.gaF(),j=k.e5(a),i=B.c.bX(j.a,0,d),h=B.c.bX(j.b,0,c) +if(l.e===B.a48){s=d/2 +r=c/2 +q=d<=c?s:r +p=i-s +o=h-r +n=Math.sqrt(Math.pow(p,2)+Math.pow(o,2)) +m=l.c +l.d.$1(new A.dk(m.a,B.c.bX(B.c.bx((Math.atan2(p,o)/3.141592653589793+1)/2*360+90,360),0,360),B.c.bX(n/q,0,1),m.d))}else l.az_(i/d,1-h/c)}, +ab(a){return new A.vy(new A.azr(this),null)}} +A.azr.prototype={ +$2(a,b){var s=this.a +return new A.lv(new A.j1(new A.azo(s),null),A.b3([B.ahr,new A.dU(new A.azp(),new A.azq(s,a,b.d,b.b),t.pL)],t.B,t.xR),null,!1,null)}, +$S:790} +A.azp.prototype={ +$0(){var s=t.S,r=A.b([],t.t),q=A.ek(s),p=A.bcL() +return new A.ql(B.ai,B.i5,A.bcK(),B.e7,A.D(s,t.GY),A.D(s,t.o),B.h,r,A.D(s,t.SP),q,null,null,p,A.D(s,t.Au))}, +$S:791} +A.azq.prototype={ +$1(a){var s=this,r=s.a,q=s.b,p=s.c,o=s.d +a.ay=new A.azm(r,q,p,o) +a.CW=new A.azn(r,q,p,o)}, +$S:792} +A.azm.prototype={ +$1(a){var s=this +return s.a.a58(a.a,s.b,s.c,s.d)}, +$S:97} +A.azn.prototype={ +$1(a){var s=this +return s.a.a58(a.d,s.b,s.c,s.d)}, +$S:14} +A.azo.prototype={ +$1(a){var s=null,r=this.a +switch(r.e.a){case 0:case 1:return A.ew(s,s,s,new A.a4H(r.c,s),B.x) +case 3:return A.ew(s,s,s,new A.a4I(r.c,s),B.x) +case 2:return A.ew(s,s,s,new A.a4J(r.c,s),B.x) +case 4:case 5:return A.ew(s,s,s,new A.a4E(A.nP(r.c),s),B.x) +case 7:return A.ew(s,s,s,new A.a4G(A.nP(r.c),s),B.x) +case 6:return A.ew(s,s,s,new A.a4F(A.nP(r.c),s),B.x) +case 10:return A.ew(s,s,s,new A.a9w(r.c.bk(),s),B.x) +case 9:return A.ew(s,s,s,new A.a9v(r.c.bk(),s),B.x) +case 8:return A.ew(s,s,s,new A.a9u(r.c.bk(),s),B.x) +case 11:return A.ew(s,s,s,new A.a4K(r.c,s),B.x) +default:return B.T2}}, +$S:793} +A.ql.prototype={ +jg(a){this.ann(a) +this.aG(B.c3)}} +A.bcA.prototype={ +$4(a,b,c,d){var s,r=null +if(a.gj6()==="http"||a.gj6()==="https")return A.bfk(a.j(0),d,c) +else if(a.gj6()==="data")return A.bPo(a,c,d) +else if(a.gj6()==="resource"){s=a.ghg(a) +return new A.vf(A.bgs(r,r,new A.Du(s,r,r)),c,d,r)}else if(a.gj6()==="http"||a.gj6()==="https")return A.bfk(a.j(0),d,c) +else return A.bfk(A.bTy(A.btB(),a.j(0)),d,c)}, +$S:794} +A.bcB.prototype={ +$2(a,b){var s,r,q,p,o,n,m,l,k,j,i,h=null +$label0$0:{s=A.am(a) +r=s.p2 +q=r.z +q.toString +p=s.y1.b +o=p==null +n=o?s.at:p +m=q.r +m.toString +m=q.aOU(n,"monospace",m*0.85) +n=r.y +l=q.e2(s.fr) +k=s.CW +j=A.bKR(k,1) +i=A.L1(2) +s=o?s.at:p +j=A.bfI(B.aaQ,8,q,B.ap,new A.fc(B.n9,h,h,i,h,h,B.aV),B.fd,l,m,B.ap,new A.fc(s,h,h,A.L1(2),h,h,B.aV),B.fd,B.acb,B.acA,r.f,B.ap,B.X,r.r,B.ap,B.X,r.w,B.ap,B.X,n,B.ap,B.X,n,B.ap,B.X,n,B.ap,B.X,new A.fc(h,h,new A.fM(new A.bL(k,5,B.J,-1),B.C,B.C,B.C),h,h,h,B.aV),q,q,B.Uf,24,B.ap,q,B.X,B.lp,q,j,B.Jq,B.UB,B.Kr,B.acr,B.eV,B.GK,B.ap,h,h,B.ap) +s=j +break $label0$0}r=A.e8(a,B.d6) +r=r==null?h:r.geS() +return s.Ul(r==null?B.aq:r)}, +$S:795} +A.TW.prototype={} +A.aqQ.prototype={} +A.Vz.prototype={} +A.aK6.prototype={ +ab(a){var s,r,q,p=this +B.b.af(p.ax) +s=p.ay +B.b.af(s) +B.b.af(p.ch) +B.b.af(p.CW) +B.b.af(p.cx) +p.dy=!1 +p.w.al(0,new A.aK9()) +s.push(new A.TW(null,A.b([],t.p))) +for(r=a.length,q=0;q"))}, +a6l(a,b){var s,r,q,p,o,n,m,l,k,j,i=this,h=null,g=t.p,f=A.b([],g) +for(s=a.length,r=t.VO,q=i.c.ah,p=i.as,o=b==null,n=0;n") +k=A.axp(A.ab(new A.W(l,A.bu4(),h),!0,h.h("aI.E")),m).agK() +m.a6T(k) +j=m.axi(k) +h=i.a +i.d=new A.aK6(i,!0,s,h.z,h.ax,h.ay,h.ch,h.CW,h.cx,!1,h.db,h.x,h.y,!1,A.b([],r),A.b([],t.c3),A.b([],t.V_),A.b([],t.an),A.b([],t.vf),A.Rp(0)).ab(j)}, +a3R(){var s,r,q=this.e +if(q.length===0)return +s=A.iN(q,!0,t.nd) +B.b.af(q) +for(q=s.length,r=0;r")).ga9(0))}r.u(0,b,c)}} +A.ay6.prototype={ +$1(a){var s=this.b,r=this.c +s.a.P(0,r) +s.a2w(0,r,a) +this.a.a=a}, +$S:799} +A.acK.prototype={ +k(a,b){var s +if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +if(b instanceof A.acK)s=B.q.k(0,B.q) +else s=!1 +return s}, +gL(a){return A.a6(B.q,14,7,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return"SvgTheme(currentColor: "+B.q.j(0)+", fontSize: 14, xHeight: 7)"}} +A.q5.prototype={ +a_E(a){return B.La}, +aCD(a){return new A.d9(null,A.w(this).h("d9")).cu(new A.aUy(this,this.a_E(a)),t.V4)}, +aUD(a){var s=this +return $.bAO().b.cU(0,new A.acI(s.a_E(a),s,s.b),new A.aUz(s,a))}} +A.aUy.prototype={ +$1(a){var s=this.a +return A.bQq(new A.aUx(s,this.b),a,"Load Bytes",A.w(s).h("q5.T?"),t.V4)}, +$S(){return A.w(this.a).h("an(q5.T?)")}} +A.aUx.prototype={ +$1(a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=null,b="PathOps library was not initialized.",a=t.N,a0=A.mc(10,t.mf),a1=new A.oG(new A.acL(new A.as(4278190080),14,7),c,A.buj(this.a.c,c,!1,!1).gar(0),"Svg loader",!1,new A.aoA(A.D(a,t.Pg),A.D(a,t.R1),A.D(a,t.YN),A.D(a,t.lf)),a0,A.C(a),B.eT) +a1.y=a1.x=a1.w=!1 +a1.aF_() +a=a1.Q +a.toString +s=new A.aQo().Nk(a,B.br) +if(a1.w)A.X(A.c1(b)) +if(a1.x)A.X(A.c1(b)) +if(a1.y)A.X(A.c1(b)) +a=t.S +a0=A.D(t.qA,a) +r=A.D(t.Nt,a) +q=A.D(t.Qr,a) +p=A.D(t.J2,a) +o=A.D(t.Rs,a) +n=A.D(t.WR,a) +m=A.b([],t.mE) +l=A.D(t.D3,a) +k=A.D(t.cu,a) +j=new A.azC(new A.aC9(a0,r,q,p,o,n,m,A.D(t.K,a),l,k)) +j.Nk(s,c) +a=j.b +a===$&&A.c() +i=j.c +i===$&&A.c() +h=a0.$ti.h("bk<1>") +h=A.ab(new A.bk(a0,h),!0,h.h("z.E")) +a0=r.$ti.h("bk<1>") +a0=A.ab(new A.bk(r,a0),!0,a0.h("z.E")) +r=q.$ti.h("bk<1>") +r=A.ab(new A.bk(q,r),!0,r.h("z.E")) +q=n.$ti.h("bk<1>") +g=p.$ti.h("bk<1>") +f=o.$ti.h("bk<1>") +e=l.$ti.h("bk<1>") +d=k.$ti.h("bk<1>") +return A.kw(A.bOZ(new A.aec(a,i,h,a0,A.ab(new A.bk(n,q),!0,q.h("z.E")),r,A.ab(new A.bk(p,g),!0,g.h("z.E")),A.ab(new A.bk(o,f),!0,f.h("z.E")),A.ab(new A.bk(l,e),!0,e.h("z.E")),A.ab(new A.bk(k,d),!0,d.h("z.E")),m),!1).buffer,0,c)}, +$S(){return A.w(this.a).h("cX(q5.T?)")}} +A.aUz.prototype={ +$0(){return this.a.aCD(this.b)}, +$S:800} +A.acI.prototype={ +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s +if(b==null)return!1 +if(b instanceof A.acI)if(b.a.k(0,this.a))s=b.b.k(0,this.b) +else s=!1 +else s=!1 +return s}} +A.Sp.prototype={ +gL(a){return A.a6(this.c,this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s +if(b==null)return!1 +if(b instanceof A.Sp)s=b.c===this.c +else s=!1 +return s}} +A.aUt.prototype={} +A.a9P.prototype={ +L0(a,b,c){return this.aS8(a,b,c)}, +aS8(a,b,c){var s=0,r=A.r(t.H),q=1,p,o=[],n=this,m,l,k,j,i,h,g +var $async$L0=A.t(function(d,e){if(d===1){p=e +s=q}while(true)switch(s){case 0:h=null +q=3 +m=n.a.i(0,a) +s=m!=null?6:7 +break +case 6:j=m.$1(b) +s=8 +return A.x(t.T8.b(j)?j:A.cO(j,t.CD),$async$L0) +case 8:h=e +case 7:o.push(5) +s=4 +break +case 3:q=2 +g=p +l=A.b2(g) +k=A.bC(g) +j=A.cn("during a framework-to-plugin message") +A.eR(new A.cI(l,k,"flutter web plugins",j,null,!1)) +o.push(5) +s=4 +break +case 2:o=[1] +case 4:q=1 +if(c!=null)c.$1(h) +s=o.pop() +break +case 5:return A.p(null,r) +case 1:return A.o(p,r)}}) +return A.q($async$L0,r)}} +A.aNQ.prototype={} +A.i5.prototype={ +a0d(a,b){var s=a.w,r=b.w,q=s.c +if(q===r.c&&q!==0)return q>0 +return(s.b&r.a)!==0&&(s.a&r.b)!==0}} +A.aA2.prototype={} +A.aA3.prototype={} +A.aOZ.prototype={} +A.cH.prototype={ +kp(a,b){var s=this.a,r=a.a.a,q=r[0],p=b.a.a,o=p[0] +s.sN(0,qo?q:o) +r=r[1] +p=p[1] +s.sO(0,r>p?r:p)}, +gu8(){var s=this.b.a,r=this.a.a +return 2*(s[0]-r[0]+s[1]-r[1])}, +j(a){return"AABB["+this.a.j(0)+" . "+this.b.j(0)+"]"}} +A.i7.prototype={ +aZd(a,b){var s,r=this.a.b,q=r[a].b,p=r[b].b +r=p.a.a +s=q.b.a +if(r[0]-s[0]>0||r[1]-s[1]>0)return!1 +r=q.a.a +s=p.b.a +if(r[0]-s[0]>0||r[1]-s[1]>0)return!1 +return!0}, +ZM(a){var s,r,q,p,o,n,m,l=this,k=l.c +k.af(0) +for(s=l.b,r=s.length,q=l.a,p=0;p=0;--r){q=this.b +p=new Float64Array(2) +p=new A.n7(r,new A.cH(new A.a(p),new A.a(new Float64Array(2)))) +q[r]=p +p.d=r===s?null:q[r+1] +p.r=-1}for(q=this.f,s=0;s<4;++s)q[s]=new A.a(new Float64Array(2))}, +aVI(a,b,c){var s,r,q,p,o,n=this.b[a],m=n.b,l=m.a,k=l.a,j=b.a.a +if(k[0]<=j[0])if(k[1]<=j[1]){s=b.b.a +r=m.b.a +s=s[0]<=r[0]&&s[1]<=r[1]}else s=!1 +else s=!1 +if(s)return!1 +this.a7x(n) +q=m.b +l.sN(0,j[0]-0.1) +l.sO(0,j[1]-0.1) +j=b.b.a +q.sN(0,j[0]+0.1) +q.sO(0,j[1]+0.1) +j=c.a +p=j[0]*2 +o=j[1]*2 +if(p<0)l.sN(0,k[0]+p) +else q.sN(0,q.a[0]+p) +if(o<0)l.sO(0,k[1]+o) +else q.sO(0,q.a[1]+o) +this.a5P(a) +return!0}, +ahf(a,b,c){var s,r,q,p,o,n,m,l=this +l.w=0 +s=l.r +l.w=1 +s[0]=l.a +for(s=t.eh;r=l.w,r>0;){q=l.r;--r +l.w=r +p=q[r] +if(p==null)continue +if(A.bkq(p.b,c))if(p.e==null){if(!b.aiD(p.a))return}else{r=l.r +q=r.length +if(q-l.w-2<=0){o=A.b(new Array(q),s) +for(n=0;n0;){d=a4.r;--e +a4.w=e +c=d[e] +if(c==null)continue +b=c.b +if(!A.bkq(b,m))continue +e=b.a.a +d=e[0] +a=b.b.a +a0=a[0] +e=e[1] +a=a[1] +if(Math.abs(q*(a6-(d+a0)*0.5)+r*(a9-(e+a)*0.5))-(p*((a0-d)*0.5)+o*((a-e)*0.5))>0)continue +if(c.e==null){g[0]=a6 +g[1]=a9 +f[0]=a8 +f[1]=b0 +h.c=n +a1=b1.aY9(h,c.a) +if(a1===0)return +if(a1>0){l=a5*a1+a6 +k=s*a1+a9 +a7[0]=Math.min(a6,l) +a7[1]=Math.min(a9,k) +j[0]=Math.max(a6,l) +j[1]=Math.max(a9,k) +n=a1}}else{e=a4.r +d=e.length +if(d-a4.w-2<=0){a2=A.b(new Array(d),i) +for(a3=0;a3=q;--n){q=k[n] +q.d=n===p?null:k[n+1] +q.r=-1}l.e=q +k=q}m=l.b[k] +k=m.d +l.e=k!=null?k.a:-1 +m.f=m.e=m.d=null +m.r=0 +m.c=null;++l.c +return m}, +QD(a){var s=this,r=s.e +a.d=r!==-1?s.b[r]:null +a.r=-1 +s.e=a.a;--s.c}, +a5P(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=d.b[a],b=d.a +if(b==null){d.a=c +c.d=null +return}s=c.b +r=d.Q +while(!0){if(!(b.e!=null))break +q=b.e +q.toString +p=b.f +p.toString +o=b.b +n=o.gu8() +r.kp(o,s) +m=r.gu8() +l=2*m +k=2*(m-n) +o=q.b +if(q.e==null){r.kp(s,o) +j=r.gu8()+k}else{r.kp(s,o) +i=o.gu8() +j=r.gu8()-i+k}o=p.b +if(p.e==null){r.kp(s,o) +h=r.gu8()+k}else{r.kp(s,o) +i=o.gu8() +h=r.gu8()-i+k}if(l1){q=s.e +q.toString +p=s.f +p.toString +s.e=a +s.d=a.d +a.d=s +o=s.d +if(o!=null)if(o.e===a)o.e=s +else o.f=s +else this.a=s +o=q.r +n=p.r +m=a.b +l=h.b +k=p.b +j=s.b +i=q.b +if(o>n){s.f=q +a.f=p +p.d=a +m.kp(l,k) +j.kp(m,i) +h=1+Math.max(h.r,p.r) +a.r=h +s.r=1+Math.max(h,q.r)}else{s.f=p +a.f=q +q.d=a +m.kp(l,i) +j.kp(m,k) +h=1+Math.max(h.r,q.r) +a.r=h +s.r=1+Math.max(h,p.r)}return s}if(r<-1){q=h.e +q.toString +p=h.f +p.toString +h.e=a +h.d=a.d +a.d=h +o=h.d +if(o!=null)if(o.e===a)o.e=h +else o.f=h +else this.a=h +o=q.r +n=p.r +m=a.b +l=s.b +k=p.b +j=h.b +i=q.b +if(o>n){h.f=q +a.e=p +p.d=a +m.kp(l,k) +j.kp(m,i) +p=1+Math.max(s.r,p.r) +a.r=p +h.r=1+Math.max(p,q.r)}else{h.f=p +a.e=q +q.d=a +m.kp(l,i) +j.kp(m,k) +q=1+Math.max(s.r,q.r) +a.r=q +h.r=1+Math.max(q,p.r)}return h}return a}} +A.n7.prototype={} +A.Gy.prototype={ +cK(a,b){var s=this.a,r=b.a +if(sd*d)return +a.d=B.ky +a.c.v(s) +a.b.cv() +a.e=1 +q=a.a +q[0].a.v(r) +q[0].d.FQ()}, +aNP(b4,b5,b6,b7,b8){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.e=0 +s=b7.c +r=b8.b +q=b6.b +p=r.b +o=s.a +n=o[0] +m=r.a +l=o[1] +k=b8.a.a +j=k[0] +k=k[1] +i=b6.a.a +h=p*n-m*l+j-i[0] +g=m*n+p*l+k-i[1] +i=q.b +k=q.a +f=i*h+k*g +e=-k*h+i*g +d=b5.b+b7.b +c=b5.d +b=b5.e +for(p=c.length,a=0,a0=-17976931348623157e292,a1=0;a1d)return +if(a2>a0){a0=a2 +a=a1}}a3=a+1 +a3=a3d*d)return +b4.e=1 +b4.d=B.eE +o=b4.b +o.sN(0,a7) +o.sO(0,e-p[1]) +o.e0(0) +b4.c.v(a4) +o=b4.a +o[0].a.v(s) +o[0].d.FQ()}else if(a9*(o-l)+b0*(n-k)<=0){if(a9*a9+b0*b0>d*d)return +b4.e=1 +b4.d=B.eE +p=b4.b +p.sN(0,a9) +p.sO(0,e-m[1]) +p.e0(0) +b4.c.v(a5) +p=b4.a +p[0].a.v(s) +p[0].d.FQ()}else{b1=(o+l)*0.5 +b2=(n+k)*0.5 +b3=b[a] +p=b3.a +if((f-b1)*p[0]+(e-b2)*p[1]>d)return +b4.e=1 +b4.d=B.eE +b4.b.v(b3) +p=b4.c +p.sN(0,b1) +p.sO(0,b2) +p=b4.a +p[0].a.v(s) +p[0].d.FQ()}}, +ae1(a0,a1,a2,a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=a1.d,e=f.length,d=a3.d,c=d.length,b=a1.e,a=this.f +a.v(A.bqz(a4,a2)) +s=a.b +for(r=this.r.a,q=this.w.a,p=0,o=-17976931348623157e292,n=0;no){o=l +p=n}}a0.b=p +a0.a=o}, +aRt(a5,a6,a7,a8,a9,b0){var s,r,q,p,o,n,m,l,k,j,i,h,g=a9.d,f=g.length,e=a9.e,d=a5[0],c=a5[1],b=a7.b,a=b0.b,a0=a6.e[a8],a1=b.b,a2=a0.a,a3=a2[0],a4=b.a +a2=a2[1] +s=a1*a3-a4*a2 +r=a4*a3+a1*a2 +a2=a.b +a1=a.a +q=a2*s+a1*r +p=-a1*s+a2*r +for(o=0,n=17976931348623157e292,m=0;ms)return +q=b0.y +b0.ae1(q,b4,b5,b2,b3) +p=q.a +if(p>s)return +o=p>r.a+0.0005 +if(o){n=q.b +b1.d=B.CF +m=b3 +l=b5 +k=b2 +j=b4}else{n=r.b +b1.d=B.eE +m=b5 +l=b3 +k=b4 +j=b2}i=l.b +r=b0.ch +b0.aRt(r,j,l,n,k,m) +q=j.d +h=n+1 +h=hk*k)return +if(b.r){n=d.dy +n.v(p) +n.aq(0,b.e) +s.v(p) +s.aq(0,q) +if(n.bO(s)>0)return}i[0]=0 +i[2]=0 +a.e=1 +a.d=B.ky +a.b.cv() +a.c.v(p) +s=a.a +s[0].d.jB(0,j) +s[0].a.v(r) +return}if(m<=0){n=d.d +n.v(q) +n.aq(0,o) +if(n.bO(n)>k*k)return +if(b.w){h=d.dy +h.v(b.f) +h.aq(0,o) +s.v(q) +s.aq(0,o) +if(h.bO(s)>0)return}i[0]=1 +i[2]=0 +a.e=1 +a.d=B.ky +a.b.cv() +a.c.v(o) +s=a.a +s[0].d.jB(0,j) +s[0].a.v(r) +return}g=n.bO(n) +f=d.fr +f.v(p) +f.au(0,m) +s.v(o) +s.au(0,l) +f.E(0,s) +f.au(0,1/g) +e=d.d +e.v(q) +e.aq(0,f) +if(e.bO(e)>k*k)return +f=d.r +n=n.a +f.sN(0,-n[1]) +f.sO(0,n[0]) +s.v(q) +s.aq(0,p) +if(f.bO(s)<0){s=f.a +f.p(-s[0],-s[1])}f.e0(0) +i[0]=0 +i[2]=1 +a.e=1 +a.d=B.eE +a.b.v(f) +a.c.v(p) +s=a.a +s[0].d.jB(0,j) +s[0].a.v(r)}} +A.aCl.prototype={ +abY(b2,b3,b4,b5,b6){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=this,b1=b0.b +b1.v(A.bqz(b4,b6)) +s=b0.c +s.v(A.dh(b1,b5.c)) +b0.d=b3.e +b0.e=b3.c +r=b3.d +b0.f=r +b0.r=b3.f +q=b3.r +p=b3.w +o=b0.CW +o.v(r) +o.aq(0,b0.e) +o.e0(0) +r=b0.x +n=o.a +r.p(n[1],-n[0]) +n=b0.cx +n.v(s) +n.aq(0,b0.e) +m=r.bO(n) +if(q){l=b0.cy +l.v(b0.e) +l.aq(0,b0.d) +l.e0(0) +k=b0.w +j=l.a +k.p(j[1],-j[0]) +i=l.bS(o)>=0 +n.v(s) +n.aq(0,b0.d) +h=k.bO(n)}else{h=0 +i=!1}if(p){l=b0.db +l.v(b0.r) +l.aq(0,b0.f) +l.e0(0) +k=b0.y +j=l.a +k.p(j[1],-j[0]) +g=o.bS(l)>0 +n.v(s) +n.aq(0,b0.f) +f=k.bO(n)}else{f=0 +g=!1}if(q&&p)if(i&&g){s=h>=0||m>=0||f>=0 +b0.ch=s +o=b0.z +l=r.a +k=b0.at +j=b0.ax +if(s){o.sN(0,l[0]) +o.sO(0,l[1]) +s=b0.w.a +k.sN(0,s[0]) +k.sO(0,s[1]) +s=b0.y.a +j.sN(0,s[0]) +j.sO(0,s[1])}else{o.sN(0,-l[0]) +o.sO(0,-l[1]) +k.sN(0,-l[0]) +k.sO(0,-l[1]) +j.sN(0,-l[0]) +j.sO(0,-l[1])}}else if(i){if(!(h>=0))s=m>=0&&f>=0 +else s=!0 +b0.ch=s +o=b0.z +l=r.a +k=b0.at +j=b0.ax +if(s){o.sN(0,l[0]) +o.sO(0,l[1]) +s=b0.w.a +k.sN(0,s[0]) +k.sO(0,s[1]) +j.sN(0,l[0]) +j.sO(0,l[1])}else{o.sN(0,-l[0]) +o.sO(0,-l[1]) +s=b0.y.a +k.sN(0,-s[0]) +k.sO(0,-s[1]) +j.sN(0,-l[0]) +j.sO(0,-l[1])}}else if(g){if(!(f>=0))s=h>=0&&m>=0 +else s=!0 +b0.ch=s +o=b0.z +l=r.a +k=b0.at +j=b0.ax +if(s){o.sN(0,l[0]) +o.sO(0,l[1]) +k.sN(0,l[0]) +k.sO(0,l[1]) +s=b0.y.a +j.sN(0,s[0]) +j.sO(0,s[1])}else{o.sN(0,-l[0]) +o.sO(0,-l[1]) +k.sN(0,-l[0]) +k.sO(0,-l[1]) +s=b0.w.a +j.sN(0,-s[0]) +j.sO(0,-s[1])}}else{s=h>=0&&m>=0&&f>=0 +b0.ch=s +o=b0.z +l=r.a +k=b0.at +j=b0.ax +if(s){o.sN(0,l[0]) +o.sO(0,l[1]) +k.sN(0,l[0]) +k.sO(0,l[1]) +j.sN(0,l[0]) +j.sO(0,l[1])}else{o.sN(0,-l[0]) +o.sO(0,-l[1]) +s=b0.y.a +k.sN(0,-s[0]) +k.sO(0,-s[1]) +s=b0.w.a +j.sN(0,-s[0]) +j.sO(0,-s[1])}}else if(q)if(i){s=h>=0||m>=0 +b0.ch=s +o=b0.z +l=r.a +k=b0.at +j=b0.ax +if(s){o.sN(0,l[0]) +o.sO(0,l[1]) +s=b0.w.a +k.sN(0,s[0]) +k.sO(0,s[1]) +j.sN(0,-l[0]) +j.sO(0,-l[1])}else{o.sN(0,-l[0]) +o.sO(0,-l[1]) +k.sN(0,l[0]) +k.sO(0,l[1]) +j.sN(0,-l[0]) +j.sO(0,-l[1])}}else{s=h>=0&&m>=0 +b0.ch=s +o=b0.z +l=r.a +k=b0.at +j=b0.ax +if(s){o.sN(0,l[0]) +o.sO(0,l[1]) +k.sN(0,l[0]) +k.sO(0,l[1]) +j.sN(0,-l[0]) +j.sO(0,-l[1])}else{o.sN(0,-l[0]) +o.sO(0,-l[1]) +k.sN(0,l[0]) +k.sO(0,l[1]) +s=b0.w.a +j.sN(0,-s[0]) +j.sO(0,-s[1])}}else if(p)if(g){s=m>=0||f>=0 +b0.ch=s +o=b0.z +l=r.a +k=b0.at +j=b0.ax +if(s){o.sN(0,l[0]) +o.sO(0,l[1]) +k.sN(0,-l[0]) +k.sO(0,-l[1]) +s=b0.y.a +j.sN(0,s[0]) +j.sO(0,s[1])}else{o.sN(0,-l[0]) +o.sO(0,-l[1]) +k.sN(0,-l[0]) +k.sO(0,-l[1]) +j.sN(0,l[0]) +j.sO(0,l[1])}}else{s=m>=0&&f>=0 +b0.ch=s +o=b0.z +l=r.a +k=b0.at +j=b0.ax +if(s){o.sN(0,l[0]) +o.sO(0,l[1]) +k.sN(0,-l[0]) +k.sO(0,-l[1]) +j.sN(0,l[0]) +j.sO(0,l[1])}else{o.sN(0,-l[0]) +o.sO(0,-l[1]) +s=b0.y.a +k.sN(0,-s[0]) +k.sO(0,-s[1]) +j.sN(0,l[0]) +j.sO(0,l[1])}}else{s=m>=0 +b0.ch=s +o=b0.z +l=r.a +k=b0.at +j=b0.ax +if(s){o.sN(0,l[0]) +o.sO(0,l[1]) +k.sN(0,-l[0]) +k.sO(0,-l[1]) +j.sN(0,-l[0]) +j.sO(0,-l[1])}else{o.sN(0,-l[0]) +o.sO(0,-l[1]) +k.sN(0,l[0]) +k.sO(0,l[1]) +j.sN(0,l[0]) +j.sO(0,l[1])}}s=b0.a +o=b5.d +s.c=o.length +for(l=s.a,k=s.b,j=b1.b,e=b5.e,d=0;db0.ay)return +a0=b0.go +b0.aO8(a0) +j=a0.a===B.jC +if(!j&&a0.c>b0.ay)return +if(!j)if(a0.c>0.98*a.c+0.001)a=a0 +j=b0.dx +a1=j[0] +a2=j[1] +if(a.a===B.jD){b2.d=B.eE +c=b0.z +a3=c.bO(k[0]) +for(a4=0,d=1;a5=s.c,da2.ay){a3.a=B.w_ +a3.b=i +a3.c=a1 +return}if(b*s[0]+a*s[1]>=0){n[1]=a +n[0]=o[0] +p.aq(0,j) +if(p.bO(r)<-0.03490658503988659)continue}else{n[1]=a +n[0]=o[0] +p.aq(0,m) +if(p.bO(r)<-0.03490658503988659)continue}if(a1>a3.c){a3.a=B.w_ +a3.b=i +a3.c=a1}}}} +A.yA.prototype={ +G1(a){var s=this.a +return(s[0]<<24|s[1]<<16|s[2]<<8|s[3])>>>0}, +jB(a,b){var s=b.a,r=this.a +r[0]=s[0] +r[1]=s[1] +r[2]=s[2] +r[3]=s[3]}, +FQ(){var s=this.a +s[0]=0 +s[1]=0 +s[2]=0 +s[3]=0}, +cK(a,b){return this.G1(0)-b.G1(0)}, +$idC:1} +A.apK.prototype={ +jB(a,b){var s=this +s.a.v(b.a) +s.b.v(b.b) +s.c.v(b.c) +s.d=b.d +s.e=b.e +s.f=b.f}} +A.aSO.prototype={} +A.b6G.prototype={ +aYf(a,b,a0,a1,a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this +c.b=a.b +for(s=c.a,r=a.c,q=a.d,p=b.a,o=a1.a,n=0;m=c.b,n1){e=a.a +d=c.a_s() +if(d<0.5*e||2*e0)s.hm(1,a) +else s.hm(-1,a) +return +default:a.cv() +return}}, +a_9(a){var s,r,q,p=this +switch(p.b){case 0:a.cv() +return +case 1:a.v(p.a[0].c) +return +case 2:s=p.e +r=p.a +s.v(r[1].c) +s.au(0,r[1].d) +q=p.d +q.v(r[0].c) +q.au(0,r[0].d) +q.E(0,s) +a.v(q) +return +case 3:a.cv() +return +default:a.cv() +return}}, +akp(a,b){var s,r,q,p=this +switch(p.b){case 0:break +case 1:s=p.a +a.v(s[0].a) +b.v(s[0].b) +break +case 2:s=p.d +r=p.a +s.v(r[0].a) +s.au(0,r[0].d) +a.v(r[1].a) +a.au(0,r[1].d) +a.E(0,s) +s.v(r[0].b) +s.au(0,r[0].d) +b.v(r[1].b) +b.au(0,r[1].d) +b.E(0,s) +break +case 3:s=p.a +a.v(s[0].a) +a.au(0,s[0].d) +r=p.f +r.v(s[1].a) +r.au(0,s[1].d) +q=p.r +q.v(s[2].a) +q.au(0,s[2].d) +a.E(0,r) +a.E(0,q) +b.v(a) +break +default:break}}, +a_s(){var s,r,q,p=this +switch(p.b){case 0:return 0 +case 1:return 0 +case 2:s=p.a +return Math.sqrt(s[0].c.n2(s[1].c)) +case 3:s=p.f +r=p.a +s.v(r[1].c) +s.aq(0,r[0].c) +q=p.r +q.v(r[2].c) +q.aq(0,r[0].c) +return s.bS(q) +default:return 0}}, +alL(){var s,r,q,p=this,o=p.a,n=o[0].c,m=o[1].c,l=p.c +l.v(m) +l.aq(0,n) +s=-n.bO(l) +if(s<=0){p.b=o[0].d=1 +return}r=m.bO(l) +if(r<=0){l=o[1] +p.b=l.d=1 +o[0].jB(0,l) +return}q=1/(r+s) +o[0].d=r*q +o[1].d=s*q +p.b=2}, +alM(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3=this,a4=a3.y,a5=a3.a +a4.v(a5[0].c) +s=a3.z +s.v(a5[1].c) +r=a3.Q +r.v(a5[2].c) +q=a3.c +q.v(s) +q.aq(0,a4) +p=a4.bO(q) +o=s.bO(q) +n=-p +m=a3.w +m.v(r) +m.aq(0,a4) +l=a4.bO(m) +k=r.bO(m) +j=-l +i=a3.x +i.v(r) +i.aq(0,s) +h=s.bO(i) +g=r.bO(i) +f=-h +e=q.bS(m) +d=e*s.bS(r) +c=e*r.bS(a4) +b=e*a4.bS(s) +if(n<=0&&j<=0){a3.b=a5[0].d=1 +return}if(o>0&&n>0&&b<=0){a=1/(o+n) +a5[0].d=o*a +a5[1].d=n*a +a3.b=2 +return}if(k>0&&j>0&&c<=0){a0=1/(k+j) +a5[0].d=k*a0 +a4=a5[2] +a4.d=j*a0 +a3.b=2 +a5[1].jB(0,a4) +return}if(o<=0&&f<=0){a4=a5[1] +a3.b=a4.d=1 +a5[0].jB(0,a4) +return}if(k<=0&&g<=0){a4=a5[2] +a3.b=a4.d=1 +a5[0].jB(0,a4) +return}if(g>0&&f>0&&d<=0){a1=1/(g+f) +a5[1].d=g*a1 +a4=a5[2] +a4.d=f*a1 +a3.b=2 +a5[0].jB(0,a4) +return}a2=1/(d+c+b) +a5[0].d=d*a2 +a5[1].d=c*a2 +a5[2].d=b*a2 +a3.b=3}} +A.aBz.prototype={ +Gg(a,b,c){var s,r,q,p,o,n,m=this +switch(b.a.a){case 0:t.iX.a(b) +m.a[0].v(b.c) +m.b=1 +m.c=b.b +break +case 2:t.uC.a(b) +s=b.d +r=s.length +m.b=r +m.c=b.b +for(q=m.a,p=0;po){o=q +s=r}}return s}} +A.aBw.prototype={ +ac4(b0,b1,b2){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=this +$.blJ=$.blJ+1 +s=b2.a +r=b2.b +q=b2.c +p=b2.d +o=a9.a +o.aYf(b1,s,q,r,p) +n=o.a +m=a9.d +o.a_9(m) +m.gd2() +for(l=a9.b,k=a9.c,j=a9.f,i=q.b,h=a9.e,g=j.a,f=s.a,e=p.b,d=r.a,c=0;c<20;){b=o.b +for(a=0;ak&&o>11920928955078125e-23){b0.c=o-k +o=a9.r +o.v(l) +o.aq(0,m) +o.e0(0) +j.v(o) +j.au(0,a7) +m.E(0,j) +j.v(o) +j.au(0,a8) +l.aq(0,j)}else{m.E(0,l) +m.au(0,0.5) +l.v(m) +b0.c=0}}}} +A.aBx.prototype={} +A.aBy.prototype={} +A.OC.prototype={ +W(){return"ManifoldType."+this.b}} +A.aK1.prototype={ +jB(a,b){var s,r,q,p,o,n,m,l=this +for(s=l.a,r=b.a,q=0;q0){o=s[a-1].a +p.sN(0,o[0]) +p.sO(0,o[1]) +m.r=!0}else{o=n.d.a +p.sN(0,o[0]) +p.sO(0,o[1]) +m.r=n.f}p=m.f +if(ai?k:i) +f.sO(0,j>h?j:h)}, +JI(a,b){a.a=0 +a.b.cv() +a.c=0}, +eG(a){var s=this,r=A.bl0() +r.aP5(s.c) +r.d.v(s.d) +r.e.v(s.e) +r.f=s.f +r.r=s.r +return r}, +aPc(a){var s,r,q=this,p=q.c +B.b.I(p,new A.W(a,new A.ayr(),A.a5(a).h("W<1,a>"))) +q.aat(p) +s=p[0] +r=new A.a(new Float64Array(2)) +r.v(s) +p.push(r) +q.d.v(p[p.length-2]) +q.f=!0 +q.e.v(p[1]) +q.f=q.r=!0}, +aP5(a){var s=this,r=s.c +B.b.I(r,new A.W(a,new A.ayq(),A.a5(a).h("W<1,a>"))) +s.aat(r) +s.d.cv() +s.e.cv() +s.r=s.f=!1}, +aat(a){var s +for(s=1;s0){e=1/f +a1.sN(0,B.c.a2(e,l)) +a1.sO(0,B.c.a2(e,k))}else{a1.sN(0,0) +a1.sO(0,0)}return f}, +zR(a3,a4,a5,a6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=a5.b,b=a4.a.a,a=b[0],a0=a5.a.a,a1=a0[0],a2=a-a1 +b=b[1] +a0=a0[1] +s=b-a0 +b=c.b +a=c.a +r=b*a2+a*s +q=-a +p=q*a2+b*s +o=a4.b.a +a2=o[0]-a1 +s=o[1]-a0 +n=b*a2+a*s-r +m=q*a2+b*s-p +b=this.d.a +q=b[1] +a=this.c.a +a0=a[1] +o=a[0] +a1=b[0] +l=new Float64Array(2) +k=new A.a(l) +k.p(q-a0,o-a1) +k.e0(0) +a1=a[0] +a=a[1] +o=l[0] +a0=l[1] +j=o*(a1-r)+a0*(a-p) +i=o*n+a0*m +if(i===0)return!1 +h=j/i +if(h<0||10){b.sN(0,-a*o+a0) +b.sO(0,-c.a*l[0]-c.b*l[1])}else{b.sN(0,a*o-a0) +b.sO(0,c.a*l[0]+c.b*l[1])}return!0}, +yI(a,b,c){var s,r,q,p,o,n,m=this,l=a.a,k=a.b,j=b.b,i=j.b,h=m.c.a,g=h[0],f=j.a +h=h[1] +s=b.a.a +r=s[0] +q=i*g-f*h+r +s=s[1] +p=f*g+i*h+s +h=m.d.a +g=h[0] +h=h[1] +o=i*g-f*h+r +n=f*g+i*h+s +l.sN(0,qo?q:o) +k.sO(0,p>n?p:n) +i=l.a +l.sN(0,i[0]-m.b) +l.sO(0,i[1]-m.b) +i=k.a +k.sN(0,i[0]+m.b) +k.sO(0,i[1]+m.b)}, +JI(a,b){var s +a.a=0 +s=a.b +s.v(this.c) +s.E(0,this.d) +s.au(0,0.5) +a.c=0}, +eG(a){var s=this,r=A.aCm() +r.b=s.b +r.r=s.r +r.w=s.w +r.e.v(s.e) +r.c.v(s.c) +r.d.v(s.d) +r.f.v(s.f) +return r}} +A.aKe.prototype={} +A.a99.prototype={ +eG(a){var s=this,r=A.nj() +r.c.v(s.c) +B.b.al(s.e,new A.aO6(r)) +B.b.al(s.d,new A.aO7(r)) +r.b=s.b +return r}, +jB(a6,a7){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=this +if(a7.length<3){a5.mF(1,1) +return}s=t.d +r=A.b([],s) +for(q=a7.length,p=0;pf))l=h===f&&ga.gd2())b=i}if(!B.b.G(d,b))d.push(b) +if(!b.k(0,B.b.ga9(d))){c=b +continue}else break}while(!0) +s=a5.d +B.b.af(s) +B.b.I(s,d) +B.b.al(s,new A.aO8(a5)) +q=new Float64Array(2) +a1=new A.a(q) +for(l=a5.e,a2=0;a3=s.length,a20)return!1}return!0}, +yI(a,b,a0){var s,r,q,p,o,n,m,l,k,j=this,i=a.a,h=a.b,g=j.d,f=g[0],e=b.b,d=e.b,c=e.a +e=b.a.a +s=e[0] +r=e[1] +e=f.a +i.sN(0,d*e[0]-c*e[1]+s) +i.sO(0,c*e[0]+d*e[1]+r) +e=i.a +h.sN(0,e[0]) +h.sO(0,e[1]) +for(q=g.length,p=h.a,o=1;ol?n:l +n=p[1] +p[1]=n>k?n:k}i.sN(0,e[0]-j.b) +i.sO(0,e[1]-j.b) +h.sN(0,p[0]+j.b) +h.sO(0,p[1]+j.b)}, +CV(a9,b0,b1,b2){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=a9.b,a7=a6.b,a8=a6.a +a6=a9.a.a +s=b0.gN(b0).Y(0,a6[0]) +r=b0.gO(b0).Y(0,a6[1]) +q=B.c.a2(a7,s)+B.c.a2(a8,r) +p=B.c.a2(-a8,s)+B.c.a2(a7,r) +for(a6=this.d,o=a6.length,n=this.e,m=p,l=q,k=-17976931348623157e292,j=0;jk){m=c +l=d +k=b}}if(k>0){a=k*k +for(a0=m,a1=l,j=0;ja4){a=a4 +a0=a3 +a1=a2}}a5=Math.sqrt(a) +b2.sN(0,a7*a1-a8*a0) +b2.sO(0,a8*a1+a7*a0) +b2.e0(0)}else{b2.sN(0,a7*l-a8*m) +b2.sO(0,a8*l+a7*m) +a5=k}return a5}, +zR(a4,a5,a6,a7){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=a6.b,a2=a1.b,a3=a1.a +a1=a5.a.a +s=a1[0] +r=a6.a.a +q=r[0] +p=s-q +a1=a1[1] +r=r[1] +o=a1-r +n=a2*p+a3*o +a1=-a3 +m=a1*p+a2*o +s=a5.b.a +p=s[0]-q +o=s[1]-r +l=a2*p+a3*o-n +k=a1*p+a2*o-m +j=a5.c +for(a1=this.d,s=a1.length,r=this.e,i=0,h=-1,g=0;g0&&b=0){a4.b=i +a0=a4.a +a1=r[h].a +a0.sN(0,a2*a1[0]-a3*a1[1]) +a0.sO(0,a3*a1[0]+a2*a1[1]) +return!0}return!1}, +aO6(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g=this.c +g.cv() +s=new Float64Array(2) +r=new A.a(s) +q=new Float64Array(2) +p=new A.a(q) +o=new Float64Array(2) +n=new A.a(o) +for(m=0,l=0;li){b0.a=B.a9P +b0.b=o +a=!0 +break}if(a2>h){d=a0 +a=!1 +break}a3=k.pz(0,j[0],j[1],d) +if(a3n){a5=a7 +a3=a8}else{a4=a7 +a2=a8}if(a6===50)break}$.bqr=Math.max($.bqr,a6);++a1 +if(a1===8||a6===50){a=!1 +break}}++c +$.bqp=$.bqp+1 +if(a)break +if(c===20){b0.a=B.GJ +b0.b=d +break}}$.bqq=Math.max($.bqq,c)}} +A.RI.prototype={ +W(){return"SeparationFunctionType."+this.b}} +A.aSn.prototype={ +aTD(a,b,c,a0,a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this +d.a=c +d.b=a1 +s=b.b +d.f=a0 +d.r=a2 +r=d.CW +a0.rL(r,a3) +q=d.cx +a2.rL(q,a3) +if(s===1){d.c=B.a6q +a3=d.w +a3.v(c.a[b.c[0]]) +p=d.x +p.v(a1.a[b.d[0]]) +o=d.y +o.v(A.dh(r,a3)) +a3=d.z +a3.v(A.dh(q,p)) +p=d.e +p.v(a3) +p.aq(0,o) +return p.e0(0)}else{a3=b.c +p=a3[0] +o=b.d +n=a1.a +m=d.ch +l=d.e +k=d.at +j=d.d +i=d.z +h=c.a +g=d.y +if(p===a3[1]){d.c=B.a6s +p=d.ax +p.v(n[o[0]]) +f=d.ay +f.v(n[o[1]]) +m.v(f) +m.aq(0,p) +m.hm(-1,l) +l.e0(0) +k.v(A.ck(q.b,l)) +j.v(p) +j.E(0,f) +j.au(0,0.5) +i.v(A.dh(q,j)) +j=d.w +j.v(h[a3[0]]) +g.v(A.dh(r,j)) +m.v(g) +m.aq(0,i) +e=m.bO(k) +if(e<0){l.dE() +e=-e}return e}else{d.c=B.a6r +f=d.Q +f.v(h[p]) +p=d.as +p.v(h[a3[1]]) +m.v(p) +m.aq(0,f) +m.hm(-1,l) +l.e0(0) +k.v(A.ck(r.b,l)) +j.v(f) +j.E(0,p) +j.au(0,0.5) +g.v(A.dh(r,j)) +j=d.x +j.v(n[o[0]]) +i.v(A.dh(q,j)) +m.v(i) +m.aq(0,g) +e=m.bO(k) +if(e<0){l.dE() +e=-e}return e}}}, +aRu(a,b){var s,r,q,p,o,n=this,m=n.f +m===$&&A.c() +s=n.CW +m.rL(s,b) +m=n.r +m===$&&A.c() +r=n.cx +m.rL(r,b) +m=n.c +m===$&&A.c() +switch(m.a){case 0:m=n.cy +q=n.e +m.v(A.tn(s.b,q)) +p=n.db +q.dE() +p.v(A.tn(r.b,q)) +q.dE() +o=n.a +o===$&&A.c() +a[0]=o.wO(m) +m=n.b +m===$&&A.c() +a[1]=m.wO(p) +p=n.w +p.v(n.a.a[a[0]]) +m=n.x +m.v(n.b.a[a[1]]) +o=n.y +o.v(A.dh(s,p)) +p=n.z +p.v(A.dh(r,m)) +p.aq(0,o) +return p.bO(q) +case 1:m=n.at +m.v(A.ck(s.b,n.e)) +q=n.y +q.v(A.dh(s,n.d)) +s=n.db +m.dE() +s.v(A.tn(r.b,m)) +m.dE() +a[0]=-1 +p=n.b +p===$&&A.c() +s=p.wO(s) +a[1]=s +p=n.x +p.v(n.b.a[s]) +s=n.z +s.v(A.dh(r,p)) +s.aq(0,q) +return s.bO(m) +case 2:m=n.at +m.v(A.ck(r.b,n.e)) +q=n.z +q.v(A.dh(r,n.d)) +r=n.cy +m.dE() +r.v(A.tn(s.b,m)) +m.dE() +a[1]=-1 +p=n.a +p===$&&A.c() +r=p.wO(r) +a[0]=r +p=n.w +p.v(n.a.a[r]) +r=n.y +r.v(A.dh(s,p)) +r.aq(0,q) +return r.bO(m) +default:a[0]=-1 +a[1]=-1 +return 0}}, +pz(a,b,c,d){var s,r,q,p,o=this,n=o.f +n===$&&A.c() +s=o.CW +n.rL(s,d) +n=o.r +n===$&&A.c() +r=o.cx +n.rL(r,d) +n=o.c +n===$&&A.c() +switch(n.a){case 0:n=o.w +q=o.a +q===$&&A.c() +n.v(q.a[b]) +q=o.x +p=o.b +p===$&&A.c() +q.v(p.a[c]) +p=o.y +p.v(A.dh(s,n)) +n=o.z +n.v(A.dh(r,q)) +n.aq(0,p) +return n.bO(o.e) +case 1:n=o.at +n.v(A.ck(s.b,o.e)) +q=o.y +q.v(A.dh(s,o.d)) +s=o.x +p=o.b +p===$&&A.c() +s.v(p.a[c]) +p=o.z +p.v(A.dh(r,s)) +p.aq(0,q) +return p.bO(n) +case 2:n=o.at +n.v(A.ck(r.b,o.e)) +q=o.z +q.v(A.dh(r,o.d)) +r=o.w +p=o.a +p===$&&A.c() +r.v(p.a[b]) +p=o.y +p.v(A.dh(s,r)) +p.aq(0,q) +return p.bO(n) +default:return 0}}} +A.aXJ.prototype={ +aTC(a5,a6,a7,a8,a9,b0){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=this +if(a6.e===0)return +switch(a6.d.a){case 0:s=a4.d +r=a4.e +q=a4.a +q.sN(0,1) +q.sO(0,0) +p=a7.b +o=a6.c.a +n=a7.a.a +s.sN(0,p.b*o[0]-p.a*o[1]+n[0]) +s.sO(0,p.a*o[0]+p.b*o[1]+n[1]) +n=a9.b +o=a6.a[0].a.a +p=a9.a.a +r.sN(0,n.b*o[0]-n.a*o[1]+p[0]) +r.sO(0,n.a*o[0]+n.b*o[1]+p[1]) +if(s.n2(r)>14210854715202004e-30){p=r.a +o=s.a +q.sN(0,p[0]-o[0]) +q.sO(0,p[1]-o[1]) +q.e0(0)}q=q.a +p=q[0] +o=s.a +m=p*a8+o[0] +n=q[1] +l=n*a8+o[1] +o=r.a +k=-p*b0+o[0] +j=-n*b0+o[1] +o=a4.b +o[0].sN(0,(m+k)*0.5) +o[0].sO(0,(l+j)*0.5) +a4.c[0]=(k-m)*q[0]+(j-l)*q[1] +break +case 1:i=a4.d +q=a4.a +q.v(A.ck(a7.b,a6.b)) +i.v(A.dh(a7,a6.c)) +for(p=a6.a,o=a4.e.a,n=i.a,q=q.a,h=a4.b,g=a4.c,f=0;f0)s.aYV() +s.z.a|=1 +return d}, +acw(a){var s=A.jD(a,1,0,!1,0,null) +s.e=1 +s.d=s.c=0 +return this.i5(s)}, +safD(a,b){if(this.a===B.a2)return +if(b.bO(b)>0)this.fw(!0) +this.r.v(b)}, +sJl(a,b){if(this.a===B.a2)return +if(b*b>0)this.fw(!0) +this.w=b}, +aba(a){var s,r,q,p=this,o=p.f.c +p.atM(a) +s=o.a +r=o.a +q=a.a +p.y=p.y+((s[0]-r[0])*q[1]-(s[1]-r[1])*q[0])}, +atM(a){var s,r,q,p=this +if(p.a!==B.R)return +if((p.b&2)!==2)p.fw(!0) +s=p.x +r=s.a +q=a.a +s.sN(0,r[0]+q[0]) +s.sO(0,r[1]+q[1])}, +aMx(a){var s=this +if(s.a!==B.R)return +if((s.b&2)!==2)s.fw(!0) +s.y+=a}, +ys(a,b){var s,r,q,p=this +if(p.a!==B.R)return +if(b==null)b=p.f.c +if((p.b&2)!==2)p.fw(!0) +p.safD(0,p.r.X(0,a.a2(0,p.ay))) +s=b.a +r=p.f.c.a +q=a.a +p.w=p.w+p.CW*((s[0]-r[0])*q[1]-(s[1]-r[1])*q[0])}, +vh(a){return this.ys(a,null)}, +ab8(a){var s=this +if(s.a!==B.R)return +if((s.b&2)!==2)s.fw(!0) +s.w=s.w+s.CW*a}, +a_j(){var s=this.ch,r=this.ax,q=this.f.a.a,p=q[0] +q=q[1] +return s+r*(p*p+q*q)}, +aYV(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this +e.CW=e.ch=e.ay=e.ax=0 +s=e.f +r=s.a +r.cv() +q=e.a +if(q===B.a2||q===B.uf){r=e.d.a +s.b.v(r) +s.c.v(r) +s.d=s.e +return}p=new A.a(new Float64Array(2)) +q=new Float64Array(2) +o=new A.a(q) +n=e.fx +for(m=e.Q,l=m.length,k=n.b.a,j=0;j0){q=1/q +e.ay=q +p.au(0,q)}else e.ay=e.ax=1 +q=e.ch +if(q>0&&(e.b&16)===0){q-=e.ax*p.bO(p) +e.ch=q +e.CW=1/q}else e.CW=e.ch=0 +q=s.c +f=new A.a(new Float64Array(2)) +f.v(q) +r.v(p) +s=s.b +s.v(A.dh(e.d,r)) +q.v(s) +o.v(q) +o.aq(0,f) +o.hm(e.w,f) +e.r.E(0,f)}, +fw(a){var s,r=this +if(a){s=r.b +if((s&2)===0){r.b=s|2 +r.dy=0}}else{r.b&=4294967293 +r.dy=0 +r.r.cv() +r.w=0 +r.x.cv() +r.y=0}}, +a1C(){var s,r,q,p,o,n=this,m=n.fy,l=m.b,k=n.f +l.a=Math.sin(k.d) +s=Math.cos(k.d) +l.b=s +r=m.a +q=k.b.a +k=k.a.a +r.sN(0,q[0]-s*k[0]+l.a*k[1]) +r.sO(0,q[1]-l.a*k[0]-l.b*k[1]) +for(l=n.Q,k=l.length,s=n.z,r=n.d,p=0;p0&&!q.x&&!p.x){s.fw(!0) +r.fw(!0)}}, +aNN(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=A.b([],t.go) +for(s=g.b,r=s.length,q=g.a,p=0;pr?s:r}, +a8(a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=this,a0=a.at,a1=a.w +a0.jB(0,a1) +s=a.a|=4 +r=(s&2)===2 +s=a.b +q=s.x +p=a.c +o=p.x +n=q||o +m=s.b +l=p.b +k=m.d +j=l.d +if(n){s=s.c +s===$&&A.c() +p=p.c +p===$&&A.c() +i=$.xE() +h=i.a +h.a.Gg(0,s,a.d) +h.b.Gg(0,p,a.e) +h.c.v(k) +h.d.v(j) +h.e=!0 +p=i.b +p.b=0 +i=i.c +$.bjv().ac4(i,p,h) +g=i.c<0.0000011920928955078125 +a1.e=0}else{a.pz(0,a1,k,j) +g=a1.e>0 +for(s=a0.a,p=a1.a,f=0;f0?1/d1:0 +d2=-1*c7 +d3=c3*d2-c4*c6 +d4=c9*d2-c5*c6 +d5=b8+a2*d3*d3+a3*d4*d4 +c2.f=d5>0?1/d5:0 +c2.r=0 +d6=c7*(a5[0]+a8*c5-b5[0]-b7*c4)+c6*(a5[1]+b4*c9-b5[1]-b0*c3) +if(d6<-1)c2.r=-g.Q*d6}if(g.at===2){d7=c0[0] +d8=c0[1] +a4=d7.a.a +a5=a4[0] +a8=c[1] +a4=a4[1] +c=c[0] +d9=a5*a8-a4*c +a4=d7.b.a +e0=a4[0]*a8-a4[1]*c +a4=d8.a.a +e1=a4[0]*a8-a4[1]*c +a4=d8.b.a +e2=a4[0]*a8-a4[1]*c +c=a2*d9 +a4=a3*e0 +e3=b8+c*d9+a4*e0 +e4=b8+a2*e1*e1+a3*e2*e2 +e5=b8+c*e1+a4*e2 +if(e3*e3<100*(e3*e4-e5*e5)){c=g.d +a4=c.a +a4[3]=e4 +a4[2]=e5 +a4[1]=e5 +a4[0]=e3 +a4=g.c +a4.v(c) +a4.Lm()}else g.at=1}}}, +a0n(){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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5=this.d +e5===$&&A.c() +s=e5.length +r=0 +for(;r0?c2:0 +b8=b7-c1 +a3.c=b7 +b9=c*b8 +c0=b*b8 +a1[0]=a7-b9*n +a1[1]=b2-c0*n +f-=l*(a8[0]*c0-a8[1]*b9) +h[0]=h[0]+b9*m +h[1]=h[1]+c0*m +d+=k*(i[0]*c0-i[1]*b9)}else{c3=i[0] +c4=i[1] +c5=c3.c +c6=c4.c +i=c3.b.a +a5=i[1] +a6=h[0] +a7=a1[0] +a8=c3.a.a +a9=a8[1] +b0=i[0] +b1=h[1] +b2=a1[1] +b3=a8[0] +b4=c4.b.a +b5=b4[1] +c1=c4.a.a +c7=c1[1] +c8=b4[0] +c9=c1[0] +d0=c3.r +d1=c4.r +d2=q.d.a +d3=d2[0] +d4=d2[2] +d5=(a4*a5+a6-a7+f*a9)*c+(d*b0+b1-b2-f*b3)*b-d0-(d3*c5+d4*c6) +d3=d2[1] +d6=(a4*b5+a6-a7+f*c7)*c+(d*c8+b1-b2-f*c9)*b-d1-(d3*c5+d2[3]*c6) +$loop$0:{a4=q.c.a +d7=(a4[0]*d5+a4[2]*d6)*-1 +d8=(a4[1]*d5+a4[3]*d6)*-1 +if(d7>=0&&d8>=0){d9=d7-c5 +e0=d8-c6 +e1=d9*c +e2=d9*b +e3=e0*c +e4=e0*b +a4=e1+e3 +a1[0]=a7-n*a4 +a7=e2+e4 +a1[1]=b2-n*a7 +h[0]=h[0]+m*a4 +h[1]=h[1]+m*a7 +f-=l*(a8[0]*e2-a8[1]*e1+(c1[0]*e4-c1[1]*e3)) +d+=k*(i[0]*e2-i[1]*e1+(b4[0]*e4-b4[1]*e3)) +c3.c=d7 +c4.c=d8 +break $loop$0}d7=-c3.e*d5 +if(d7>=0&&d3*d7+d6>=0){d9=d7-c5 +e0=0-c6 +e1=c*d9 +e2=b*d9 +e3=c*e0 +e4=b*e0 +a4=e1+e3 +a1[0]=a7-n*a4 +a7=e2+e4 +a1[1]=b2-n*a7 +h[0]=h[0]+m*a4 +h[1]=h[1]+m*a7 +f-=l*(a8[0]*e2-a8[1]*e1+(c1[0]*e4-c1[1]*e3)) +d+=k*(i[0]*e2-i[1]*e1+(b4[0]*e4-b4[1]*e3)) +c3.c=d7 +c4.c=0 +break $loop$0}d8=-c4.e*d6 +if(d8>=0&&d4*d8+d5>=0){d9=0-c5 +e0=d8-c6 +e1=c*d9 +e2=b*d9 +e3=c*e0 +e4=b*e0 +a4=e1+e3 +a1[0]=a7-n*a4 +a7=e2+e4 +a1[1]=b2-n*a7 +h[0]=h[0]+m*a4 +h[1]=h[1]+m*a7 +f-=l*(a8[0]*e2-a8[1]*e1+(c1[0]*e4-c1[1]*e3)) +d+=k*(i[0]*e2-i[1]*e1+(b4[0]*e4-b4[1]*e3)) +c3.c=0 +c4.c=d8 +break $loop$0}if(d5>=0&&d6>=0){d9=0-c5 +e0=0-c6 +e1=c*d9 +e2=b*d9 +e3=c*e0 +e4=b*e0 +a4=e1+e3 +a1[0]=a7-n*a4 +a7=e2+e4 +a1[1]=b2-n*a7 +h[0]=h[0]+m*a4 +h[1]=h[1]+m*a7 +f-=l*(a8[0]*e2-a8[1]*e1+(c1[0]*e4-c1[1]*e3)) +d+=k*(i[0]*e2-i[1]*e1+(b4[0]*e4-b4[1]*e3)) +c4.c=c3.c=0 +break $loop$0}break $loop$0}}i=this.c +i[p].b=f +i[o].b=d}}, +ams(){var s,r,q,p,o,n,m,l,k=this.d +k===$&&A.c() +s=k.length +r=0 +for(;r0?-c2/c5:0 +c7=b3*c6 +c8=b6*c6 +b[0]=b[0]-c7*d +b[1]=b[1]-c8*d +a8-=c*(b8*c8-b9*c7) +a6[0]=a6[0]+c7*a1 +a6[1]=a6[1]+c8*a1 +b0+=a2*(c0*c8-c1*c7)}b=c9.b +b[f].b=a8 +b[e].b=b0}return i>=-0.015}, +alZ(d1,d2){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=this,d0=c9.d +d0===$&&A.c() +s=d0.length +r=c9.e +q=r.b +p=c9.f +o=p.b +n=r.a.a +m=p.a.a +l=c9.w +k=l.b.a +j=l.a.a +i=0 +h=0 +for(;h0?-c2/c5:0 +c7=b3*c6 +c8=b6*c6 +d[0]=d[0]-c7*a2 +d[1]=d[1]-c8*a2 +a8-=a3*(b8*c8-b9*c7) +a6[0]=a6[0]+c7*a4 +a6[1]=a6[1]+c8*a4 +b0+=a5*(c0*c8-c1*c7)}d=c9.b +d[f].b=a8 +d[e].b=b0}return i>=-0.0075}} +A.aOg.prototype={ +rf(a4,a5,a6,a7,a8){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this,a=a6.b,a0=a7.b,a1=a5.a,a2=a1[a8],a3=a5.Q +a3===$&&A.c() +switch(a3.a){case 0:s=a1[0] +a1=a.b +a3=a5.c.a +r=a3[0] +q=a.a +a3=a3[1] +p=a6.a.a +o=a1*r-q*a3+p[0] +n=q*r+a1*a3+p[1] +p=a0.b +a3=s.a +a1=a3[0] +r=a0.a +a3=a3[1] +q=a7.a.a +m=p*a1-r*a3+q[0] +l=r*a1+p*a3+q[1] +q=b.a +a3=m-o +q.sN(0,a3) +p=l-n +q.sO(0,p) +q.e0(0) +a1=b.b +a1.sN(0,(o+m)*0.5) +a1.sO(0,(n+l)*0.5) +q=q.a +b.c=a3*q[0]+p*q[1]-a5.as-a5.at +break +case 1:a1=b.a +a3=a5.b.a +a1.sN(0,a.b*a3[0]-a.a*a3[1]) +a1.sO(0,a.a*a3[0]+a.b*a3[1]) +a3=a.b +r=a5.c.a +q=r[0] +p=a.a +r=r[1] +k=a6.a.a +j=k[0] +k=k[1] +i=a0.b +h=a2.a +g=h[0] +f=a0.a +h=h[1] +e=a7.a.a +d=i*g-f*h+e[0] +c=f*g+i*h+e[1] +a1=a1.a +b.c=(d-(a3*q-p*r+j))*a1[0]+(c-(p*q+a3*r+k))*a1[1]-a5.as-a5.at +a1=b.b +a1.sN(0,d) +a1.sO(0,c) +break +case 2:a1=b.a +a3=a5.b.a +a1.sN(0,a0.b*a3[0]-a0.a*a3[1]) +a1.sO(0,a0.a*a3[0]+a0.b*a3[1]) +a3=a0.b +r=a5.c.a +q=r[0] +p=a0.a +r=r[1] +k=a7.a.a +j=k[0] +k=k[1] +i=a.b +h=a2.a +g=h[0] +f=a.a +h=h[1] +e=a6.a.a +d=i*g-f*h+e[0] +c=f*g+i*h+e[1] +e=a1.a +b.c=(d-(a3*q-p*r+j))*e[0]+(c-(p*q+a3*r+k))*e[1]-a5.as-a5.at +k=b.b +k.sN(0,d) +k.sO(0,c) +a1.sN(0,e[0]*-1) +a1.sO(0,e[1]*-1) +break}}} +A.aed.prototype={} +A.aA7.prototype={} +A.a33.prototype={ +pz(a,b,c,d){var s,r=$.xE(),q=this.b.c +q===$&&A.c() +t.__.a(q) +s=this.c.c +s===$&&A.c() +r.abZ(b,q,c,t.iX.a(s),d)}} +A.a34.prototype={ +pz(a,b,c,d){var s,r=$.xE(),q=this.b.c +q===$&&A.c() +t.__.a(q) +s=this.c.c +s===$&&A.c() +r.fx.abY(b,q,c,t.uC.a(s),d)}} +A.a95.prototype={ +pz(a,b,c,d){var s,r=$.xE(),q=this.b.c +q===$&&A.c() +t.uC.a(q) +s=this.c.c +s===$&&A.c() +r.aNP(b,q,c,t.iX.a(s),d)}} +A.a96.prototype={ +pz(a,b,c,d){var s,r,q=$.xE(),p=this.b.c +p===$&&A.c() +s=t.uC +s.a(p) +r=this.c.c +r===$&&A.c() +q.aNQ(b,p,c,s.a(r),d)}} +A.t9.prototype={} +A.tM.prototype={} +A.EV.prototype={} +A.v2.prototype={ +ast(a,b){var s,r,q,p,o,n=this +n.y=b.b +n.d=b.c +n.e=b.d +s=n.w +r=b.r +s.a=r.a +s.b=r.b +s.c=r.c +n.x=b.f +r=b.a.eG(0) +n.c=r +q=r.goc() +s=n.f +r=s.length +if(rc?e:c +c=f.b.a +c[0]=e +e=j[1] +d=d[1] +c[1]=e>d?e:d +p[0]=r[0]-q[0] +p[1]=r[1]-q[1] +e=g.d +if(o.aVI(e,f,s))i.push(e)}}} +A.N1.prototype={} +A.a3H.prototype={} +A.lT.prototype={} +A.aHX.prototype={ +gtb(){var s=this.b,r=A.a5(s).h("W<1,t9>") +return A.ab(new A.W(s,new A.aHY(),r),!0,r.h("aI.E"))}, +gTe(){var s=this.b,r=A.a5(s).h("W<1,tM>") +return A.ab(new A.W(s,new A.aHZ(),r),!0,r.h("aI.E"))}, +alK(b0,b1,b2,b3){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,a9=b1.a +for(s=a8.b,r=s.length,q=b2.a,p=0;p$.bk4()){a0=2/Math.sqrt(d) +e[0]=e[0]*a0 +e[1]=e[1]*a0}a1=a9*j +if(a1*a1>$.bk3())j*=1.5707963267948966/Math.abs(a1) +d=g.a.a +d[0]=d[0]+a9*e[0] +d[1]=d[1]+a9*e[1] +g.b=l+a9*j +f.b=j}c=0 +while(!0){if(!(c0.0012184696791468343)){q=n.r +q=q.bO(q)>0.0001}else q=!0}else q=!0 +if(q){n.dy=0 +a7=0}else{q=n.dy+=a9 +a7=Math.min(a7,q)}}if(a7>=0.5&&a2)B.b.al(s,new A.aI_())}}, +alY(a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this +for(s=a0.b,r=s.length,q=0;q$.bk4())e.au(0,2/Math.sqrt(m)) +a=i*d +if(a*a>$.bk3())d*=1.5707963267948966/Math.abs(a) +m=h.a.a +m[0]=m[0]+n[0]*i +m[1]=m[1]+n[1]*i +f+=i*d +m[0]=m[0] +m[1]=m[1] +h.b=f +n[0]=n[0] +n[1]=n[1] +g.b=d +o=p.a +l=o.f +k=l.c.a +k[0]=m[0] +k[1]=m[1] +l.e=f +l=o.r.a +l[0]=n[0] +l[1]=n[1] +o.sJl(0,d) +o.xi()}a0.ahZ()}, +ahZ(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this +if(g.a==null)return +s=g.c +s===$&&A.c() +r=s.length +q=g.y +p=q.a +o=q.b +n=0 +for(;n0.04000000000000001)i.au(0,0.2/Math.sqrt(d)) +if(d>0.000025)g=!1 +o=a[s[f].c].a.a +o[0]=o[0]+p[0] +o[1]=o[1]+p[1]}return g}, +ox(a){var s,r,q,p,o,n,m,l,k,j=this,i=a.c +i===$&&A.c() +s=a.b +s===$&&A.c() +r=j.w +q=A.lr(r.length,new A.aA_(j,s),t.yw) +s=a.a +s===$&&A.c() +if(s.f){s=j.Q=j.Q*s.c +for(p=r.length,o=0;o0.005){q=r.a +p=1/e +r.sN(0,q[0]*p) +r.sO(0,q[1]*p)}else r.p(0,0) +d=s.bS(r) +c=a6.bS(r) +b=a5.db+a5.dy*d*d+a5.dx+a5.fr*c*c +q=b!==0?1/b:0 +a5.fx=q +p=a5.w +if(p>0){a=a5.as +a0=6.283185307179586*p +p=a5.x +a1=q*a0*a0 +a2=a7.a +a2===$&&A.c() +a3=a2.a +p=a5.z=a3*(2*q*p*a0+a3*a1) +q=p!==0?1/p:0 +a5.z=q +a5.y=(e-a)*a3*a1*q +b+=q +a5.fx=b!==0?1/b:0}else a5.y=a5.z=0 +q=a7.a +q===$&&A.c() +if(q.f){a5.Q=a5.Q*q.c +q=new Float64Array(2) +a4=new A.a(q) +a4.v(r) +a4.au(0,a5.Q) +r=m.a +m.sN(0,r[0]-a5.db*q[0]) +m.sO(0,r[1]-a5.db*q[1]) +l-=a5.dy*s.bS(a4) +s=i.a +i.sN(0,s[0]+a5.dx*q[0]) +i.sO(0,s[1]+a5.dx*q[1]) +h+=a5.fr*a6.bS(a4)}else a5.Q=0 +a6=a7.c +a6[a5.at].b=l +a6[a5.ax].b=h}, +nV(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=a.c +b===$&&A.c() +s=b[c.at] +r=s.a +q=s.b +b=b[c.ax] +p=b.a +o=b.b +n=new A.a(new Float64Array(2)) +m=new A.a(new Float64Array(2)) +b=c.ch +b.hm(q,n) +n.E(0,r) +s=c.CW +s.hm(o,m) +m.E(0,p) +l=c.ay +m.aq(0,n) +k=l.bO(m) +j=c.fx +i=c.y +h=c.z +g=c.Q +f=-j*(k+i+h*g) +c.Q=g+f +l=l.a +e=f*l[0] +d=f*l[1] +l=r.a +r.sN(0,l[0]-c.db*e) +r.sO(0,l[1]-c.db*d) +l=c.dy +b=b.a +g=b[0] +b=b[1] +h=p.a +p.sN(0,h[0]+c.dx*e) +p.sO(0,h[1]+c.dx*d) +h=c.fr +s=s.a +i=s[0] +s=s[1] +j=a.c +j[c.at].b=q-l*(g*d-b*e) +j[c.ax].b=o+h*(i*d-s*e)}, +nU(a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this +if(a1.w>0)return!0 +s=new A.av(0,1) +r=new A.av(0,1) +q=new Float64Array(2) +p=new A.a(q) +o=new Float64Array(2) +n=new A.a(o) +m=new Float64Array(2) +l=new A.a(m) +k=a2.b +k===$&&A.c() +j=k[a1.at] +i=j.a +h=j.b +k=k[a1.ax] +g=k.a +f=k.b +s.a=Math.sin(h) +s.b=Math.cos(h) +r.a=Math.sin(f) +r.b=Math.cos(f) +l.v(a1.e) +l.aq(0,a1.cx) +p.v(A.ck(s,l)) +l.v(a1.f) +l.aq(0,a1.cy) +n.v(A.ck(r,l)) +l.v(g) +l.E(0,n) +l.aq(0,i) +l.aq(0,p) +e=B.c.bX(l.e0(0)-a1.as,-0.2,0.2) +d=-a1.fx*e +c=d*m[0] +b=d*m[1] +m=i.a +i.sN(0,m[0]-a1.db*c) +i.sO(0,m[1]-a1.db*b) +m=a1.dy +k=q[0] +q=q[1] +j=g.a +g.sN(0,j[0]+a1.dx*c) +g.sO(0,j[1]+a1.dx*b) +j=a1.fr +a=o[0] +o=o[1] +a0=a2.b +a0[a1.at].b=h-m*(k*b-q*c) +a0[a1.ax].b=f+j*(a*b-o*c) +return Math.abs(e)<0.005}} +A.a2z.prototype={ +rf(a,b,c,d,e){var s=this +s.d=b +s.e=c +s.a.v(A.k_(b.d,d)) +s.b.v(A.k_(s.e.d,e)) +s.r=Math.sqrt(e.Y(0,d).gd2())}, +gF(a){return this.r}} +A.a44.prototype={ +ox(a6){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=this,a5=a4.a +a5===$&&A.c() +a4.Q=a5.c +s=a4.b +s===$&&A.c() +a4.as=s.c +s=a4.ay +s.v(a5.f.a) +a5=a4.ch +a5.v(a4.b.f.a) +r=a4.a +a4.CW=r.ay +q=a4.b +a4.cx=q.ay +a4.cy=r.CW +a4.db=q.CW +q=a6.b +q===$&&A.c() +r=a4.Q +p=q[r].b +o=a6.c +o===$&&A.c() +r=o[r] +n=r.a +m=r.b +r=a4.as +l=q[r].b +r=o[r] +k=r.a +j=r.b +i=new A.a(new Float64Array(2)) +h=new A.av(0,1) +g=new A.av(0,1) +h.a=Math.sin(p) +h.b=Math.cos(p) +g.a=Math.sin(l) +g.b=Math.cos(l) +i.v(a4.e) +i.aq(0,s) +s=a4.at +s.v(A.ck(h,i)) +i.v(a4.f) +i.aq(0,a5) +a5=a4.ax +a5.v(A.ck(g,i)) +f=a4.CW +e=a4.cx +d=a4.cy +c=a4.db +b=new A.jL(new Float64Array(4)) +r=f+e +q=s.a +o=q[1] +a=a5.a +a0=a[1] +q=q[0] +a=a[0] +a1=c*a +a2=-d*q*o-a1*a0 +b.p_(r+d*o*o+c*a0*a0,a2,a2,r+d*q*q+a1*a) +a=a4.dx +a.v(b) +a.Lm() +a=a4.dy=d+c +if(a>0)a4.dy=1/a +r=a6.a +r===$&&A.c() +q=a4.w +if(r.f){q.au(0,r.c) +a4.x=a4.x*a6.a.c +a3=new A.a(new Float64Array(2)) +a3.v(q) +i.v(a3) +i.au(0,f) +n.aq(0,i) +m-=d*(s.bS(a3)+a4.x) +i.v(a3) +i.au(0,e) +k.E(0,i) +j+=c*(a5.bS(a3)+a4.x)}else{q.cv() +a4.x=0}a5=a6.c +s=a5[a4.Q] +s.b=m +a5[a4.as].b=j}, +nV(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this,a=a0.c +a===$&&A.c() +s=a[b.Q] +r=s.a +q=s.b +a=a[b.as] +p=a.a +o=a.b +n=b.CW +m=b.cx +l=b.cy +k=b.db +a=a0.a +a===$&&A.c() +j=a.a +a=b.dy +i=b.x +h=j*b.z +a=B.c.bX(i+-a*(o-q),-h,h) +b.x=a +g=a-i +q-=l*g +o+=k*g +f=new A.a(new Float64Array(2)) +e=new A.a(new Float64Array(2)) +a=b.at +a.hm(q,e) +s=b.ax +s.hm(o,f) +f.E(0,p) +f.aq(0,r) +f.aq(0,e) +g=new A.a(new Float64Array(2)) +b.dx.Zz(f,g) +g.dE() +i=new A.a(new Float64Array(2)) +d=b.w +i.v(d) +d.E(0,g) +h=j*b.y +if(d.gd2()>h*h){d.e0(0) +d.au(0,h)}g.v(d) +g.aq(0,i) +e.v(g) +e.au(0,n) +r.aq(0,e) +a=a.bS(g) +e.v(g) +e.au(0,m) +p.E(0,e) +s=s.bS(g) +d=a0.c +c=d[b.Q] +c.b=q-l*a +d[b.as].b=o+k*s}, +nU(a){return!0}} +A.a45.prototype={} +A.a4g.prototype={ +ox(a6){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=this,a5=a4.a +a5===$&&A.c() +a4.db=a5.c +s=a4.b +s===$&&A.c() +a4.dx=s.c +s=a4.y +a4.dy=s.c +r=a4.z +a4.fr=r.c +q=a4.fx +q.v(a5.f.a) +a4.fy.v(a4.b.f.a) +a5=a4.go +a5.v(s.f.a) +a4.id.v(r.f.a) +p=a4.a +a4.k1=p.ay +o=a4.b +a4.k2=o.ay +a4.k3=s.ay +a4.k4=r.ay +a4.ok=p.CW +a4.p1=o.CW +a4.p2=s.CW +a4.p3=r.CW +r=a6.b +r===$&&A.c() +s=a4.db +n=r[s].b +o=a6.c +o===$&&A.c() +s=o[s] +m=s.a +l=s.b +s=a4.dx +k=r[s].b +s=o[s] +j=s.a +i=s.b +s=a4.dy +h=r[s].b +s=o[s] +g=s.a +f=s.b +s=a4.fr +e=r[s].b +s=o[s] +d=s.a +c=s.b +b=new A.av(0,1) +a=new A.av(0,1) +b.a=Math.sin(n) +b.b=Math.cos(n) +Math.sin(k) +Math.cos(k) +a.a=Math.sin(h) +a.b=Math.cos(h) +Math.sin(e) +Math.cos(e) +a4.x1=0 +a0=new A.a(new Float64Array(2)) +if(a4.w instanceof A.wi){a5=a4.p4 +a5.cv() +a4.ry=a4.RG=1 +a4.x1=a4.x1+(a4.ok+a4.p2)}else{a1=new A.a(new Float64Array(2)) +a2=new A.a(new Float64Array(2)) +s=a4.p4 +s.v(A.ck(a,a4.at)) +a0.v(a4.Q) +a0.aq(0,a5) +a1.v(A.ck(a,a0)) +a0.v(a4.e) +a0.aq(0,q) +a2.v(A.ck(b,a0)) +a4.ry=a1.bS(s) +q=a4.RG=a2.bS(s) +a5=a4.x1 +r=a4.k3 +p=a4.k1 +o=a4.p2 +a3=a4.ry +a4.x1=a5+(r+p+o*a3*a3+a4.ok*q*q) +a5=s}s=a4.R8 +s.cv() +r=a4.to=a4.rx=a4.cx +r=a4.x1=a4.x1+r*r*(a4.p1+a4.p3) +a4.x1=r>0?1/r:0 +r=a6.a +r===$&&A.c() +if(r.f){r=m.a +a5=a5.a +m.sN(0,r[0]+a4.k1*a4.cy*a5[0]) +m.sO(0,r[1]+a4.k1*a4.cy*a5[1]) +r=a4.ok +q=a4.cy +l+=r*q*a4.RG +r=j.a +s=s.a +j.sN(0,r[0]+a4.k2*q*s[0]) +j.sO(0,r[1]+a4.k2*a4.cy*s[1]) +r=a4.p1 +q=a4.cy +i+=r*q*a4.rx +r=g.a +g.sN(0,r[0]-a4.k3*q*a5[0]) +g.sO(0,r[1]-a4.k3*a4.cy*a5[1]) +a5=a4.p2 +r=a4.cy +f-=a5*r*a4.ry +a5=d.a +d.sN(0,a5[0]-a4.k4*r*s[0]) +d.sO(0,a5[1]-a4.k4*a4.cy*s[1]) +c-=a4.p3*a4.cy*a4.to}else a4.cy=0 +a5=a6.c +a5[a4.db].b=l +a5[a4.dx].b=i +a5[a4.dy].b=f +a5[a4.fr].b=c}, +nV(a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this,a1=a2.c +a1===$&&A.c() +s=a1[a0.db] +r=s.a +q=s.b +s=a1[a0.dx] +p=s.a +o=s.b +s=a1[a0.dy] +n=s.a +m=s.b +a1=a1[a0.fr] +l=a1.a +k=a1.b +j=new A.a(new Float64Array(2)) +i=new A.a(new Float64Array(2)) +a1=a0.p4 +j.v(r) +j.aq(0,n) +s=a1.bO(j) +h=a0.R8 +i.v(p) +i.aq(0,l) +g=h.bO(i) +f=a0.RG +e=a0.ry +d=a0.rx +c=a0.to +b=-a0.x1*(s+g+(f*q-e*m+(d*o-c*k))) +a0.cy+=b +c=r.a +a1=a1.a +r.sN(0,c[0]+a0.k1*b*a1[0]) +r.sO(0,c[1]+a0.k1*b*a1[1]) +c=a0.ok +d=a0.RG +e=p.a +h=h.a +p.sN(0,e[0]+a0.k2*b*h[0]) +p.sO(0,e[1]+a0.k2*b*h[1]) +e=a0.p1 +f=a0.rx +g=n.a +n.sN(0,g[0]-a0.k3*b*a1[0]) +n.sO(0,g[1]-a0.k3*b*a1[1]) +a1=a0.p2 +g=a0.ry +s=l.a +l.sN(0,s[0]-a0.k4*b*h[0]) +l.sO(0,s[1]-a0.k4*b*h[1]) +h=a0.p3 +s=a0.to +a=a2.c +a[a0.db].b=q+c*b*d +a[a0.dx].b=o+e*b*f +a[a0.dy].b=m-a1*b*g +a[a0.fr].b=k-h*b*s}, +nU(a9){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=this,a8=a9.b +a8===$&&A.c() +s=a8[a7.db] +r=s.a +q=s.b +s=a8[a7.dx] +p=s.a +o=s.b +s=a8[a7.dy] +n=s.a +m=s.b +a8=a8[a7.fr] +l=a8.a +k=a8.b +j=new A.av(0,1) +i=new A.av(0,1) +j.a=Math.sin(q) +j.b=Math.cos(q) +Math.sin(o) +Math.cos(o) +i.a=Math.sin(m) +i.b=Math.cos(m) +Math.sin(k) +Math.cos(k) +h=new A.a(new Float64Array(2)) +a8=new Float64Array(2) +g=new A.a(a8) +s=new Float64Array(2) +if(a7.w instanceof A.wi){g.cv() +f=0+(a7.ok+a7.p2) +e=q-m-a7.ay +d=1 +c=1}else{b=new A.a(new Float64Array(2)) +a=new A.a(new Float64Array(2)) +a0=new A.a(new Float64Array(2)) +a1=new A.a(new Float64Array(2)) +a2=a7.at +g.v(A.ck(i,a2)) +a3=a7.Q +h.v(a3) +a4=a7.go +h.aq(0,a4) +b.v(A.ck(i,h)) +h.v(a7.e) +h.aq(0,a7.fx) +a.v(A.ck(j,h)) +c=b.bS(g) +d=a.bS(g) +f=0+(a7.k3+a7.k1+a7.p2*c*c+a7.ok*d*d) +a0.v(a3) +a0.aq(0,a4) +h.v(a) +h.E(0,r) +h.aq(0,n) +a1.v(A.tn(i,h)) +a1.aq(0,a0) +e=a1.bO(a2)}new A.a(s).cv() +a5=a7.cx +f+=a5*a5*(a7.p1+a7.p3) +a2=a7.ch +a3=a7.CW +a6=f>0?-(e+a5*(o-k-a2)-a3)/f:0 +a2=r.a +r.sN(0,a2[0]+a7.k1*a6*a8[0]) +r.sO(0,a2[1]+a7.k1*a6*a8[1]) +a2=a7.ok +a3=p.a +p.sN(0,a3[0]+a7.k2*a6*s[0]) +p.sO(0,a3[1]+a7.k2*a6*s[1]) +a3=a7.p1 +a4=n.a +n.sN(0,a4[0]-a7.k3*a6*a8[0]) +n.sO(0,a4[1]-a7.k3*a6*a8[1]) +a8=a7.p2 +a4=l.a +l.sN(0,a4[0]-a7.k4*a6*s[0]) +l.sO(0,a4[1]-a7.k4*a6*s[1]) +s=a7.p3 +a4=a9.b +a4[a7.db].b=q+a2*a6*d +a4[a7.dx].b=o+a3*a6*a5 +a4[a7.dy].b=m-a8*a6*c +a4[a7.fr].b=k-s*a6*a5 +return!0}} +A.a4h.prototype={} +A.ks.prototype={ +qs(a){var s=this,r=a.d +r===$&&A.c() +s.a=r +r=a.e +r===$&&A.c() +s.b=r +s.d=a.f +s.c=!1}, +ad0(){}} +A.a5C.prototype={} +A.FL.prototype={ +W(){return"LimitState."+this.b}} +A.a6Y.prototype={ +ox(a6){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=this,a5=a4.a +a5===$&&A.c() +a4.ax=a5.c +s=a4.b +s===$&&A.c() +a4.ay=s.c +s=a4.cx +s.v(a5.f.a) +a5=a4.cy +a5.v(a4.b.f.a) +r=a4.a +a4.dy=r.ay +q=a4.b +a4.fr=q.ay +a4.fx=r.CW +a4.fy=q.CW +q=a6.b +q===$&&A.c() +r=a4.ax +p=q[r] +o=p.a +n=p.b +p=a6.c +p===$&&A.c() +r=p[r] +m=r.a +l=r.b +r=a4.ay +q=q[r] +k=q.a +j=q.b +r=p[r] +i=r.a +h=r.b +g=new A.av(0,1) +r=new Float64Array(2) +f=new A.jL(new Float64Array(4)) +q=g.a=Math.sin(n) +p=g.b=Math.cos(n) +e=Math.sin(j) +d=Math.cos(j) +c=a4.ch +s=s.a +c.sN(0,p*-s[0]-q*-s[1]) +c.sO(0,q*-s[0]+p*-s[1]) +s=a4.CW +a5=a5.a +s.sN(0,d*-a5[0]-e*-a5[1]) +s.sO(0,e*-a5[0]+d*-a5[1]) +b=a4.dy +a=a4.fr +a0=a4.fx +a1=a4.fy +a5=b+a +c=c.a +d=c[1] +s=s.a +e=s[1] +p=c[0] +q=s[0] +a2=a1*q +a3=-a0*p*d-a2*e +f.p_(a5+a0*d*d+a1*e*e,a3,a3,a5+a0*p*p+a2*q) +q=a4.go +q.v(f) +q.Lm() +q=a4.id=a0+a1 +if(q>0)a4.id=1/q +new A.a(r).v(A.ck(g,a4.w)) +a5=a4.db +q=k.a +p=o.a +a5.sN(0,q[0]+s[0]-p[0]-c[0]-r[0]) +a5.sO(0,q[1]+s[1]-p[1]-c[1]-r[1]) +a4.dx=j-n-a4.x +a5=a6.a +a5===$&&A.c() +r=a4.y +if(a5.f){q=r.a +r.sN(0,q[0]*a5.c) +r.sO(0,q[1]*a6.a.c) +a4.z=a4.z*a6.a.c +r=m.a +m.sN(0,r[0]-b*q[0]) +m.sO(0,r[1]-b*q[1]) +r=c[0] +a5=q[1] +c=c[1] +p=q[0] +l-=a0*(r*a5-c*p+a4.z) +c=i.a +i.sN(0,c[0]+a*p) +i.sO(0,c[1]+a*q[1]) +h+=a1*(s[0]*q[1]-s[1]*q[0]+a4.z)}else{r.cv() +a4.z=0}a5=a6.c +a5[a4.ax].b=l +a5[a4.ay].b=h}, +nV(a6){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=this,a5=a6.c +a5===$&&A.c() +s=a5[a4.ax] +r=s.a +q=s.b +a5=a5[a4.ay] +p=a5.a +o=a5.b +n=a4.dy +m=a4.fr +l=a4.fx +k=a4.fy +a5=a6.a +a5===$&&A.c() +j=a5.a +i=a5.b +a5=new Float64Array(2) +h=new A.a(a5) +s=a4.at +g=a4.dx +f=a4.id +e=a4.z +d=j*a4.as +g=B.c.bX(e+-f*(o-q+i*s*g),-d,d) +a4.z=g +c=g-e +q-=l*c +o+=k*c +b=new A.a(new Float64Array(2)) +s=p.a +g=a4.CW.a +f=r.a +a=a4.ch.a +a0=a4.db.a +b.sN(0,s[0]+-o*g[1]-f[0]- -q*a[1]+i*a4.at*a0[0]) +b.sO(0,s[1]+o*g[0]-f[1]-q*a[0]+i*a4.at*a0[1]) +a4.go.Zz(b,h) +h.dE() +a0=new Float64Array(2) +a1=a4.y +new A.a(a0).v(a1) +a1.E(0,h) +d=j*a4.Q +if(a1.gd2()>d*d){a1.e0(0) +a1.au(0,d)}a1=a1.a +h.sN(0,a1[0]-a0[0]) +h.sO(0,a1[1]-a0[1]) +r.sN(0,f[0]-n*a5[0]) +r.sO(0,f[1]-n*a5[1]) +f=a[0] +a0=a5[1] +a=a[1] +a1=a5[0] +p.sN(0,s[0]+m*a1) +p.sO(0,s[1]+m*a5[1]) +s=g[0] +a2=a5[1] +g=g[1] +a5=a5[0] +a3=a6.c +a3[a4.ax].b=q-l*(f*a0-a*a1) +a3[a4.ay].b=o+k*(s*a2-g*a5)}, +nU(a){return!0}} +A.a6Z.prototype={} +A.a70.prototype={ +a0b(a){var s=this.b +s===$&&A.c() +if((s.b&2)!==2)s.fw(!0) +this.w.v(a)}, +ox(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=c.b +b===$&&A.c() +c.ax=b.c +s=c.ch +s.v(b.f.a) +b=c.b +c.CW=b.ay +c.cx=b.CW +b=a.b +b===$&&A.c() +r=c.ax +b=b[r] +q=b.a +p=b.b +b=a.c +b===$&&A.c() +r=b[r] +o=r.a +n=r.b +m=new A.av(0,1) +m.a=Math.sin(p) +m.b=Math.cos(p) +l=c.b.ax +k=6.283185307179586*c.x +r=c.y +b=a.a +b===$&&A.c() +j=b.a +b=j*(l*(k*k)) +r=c.at=j*(2*l*r*k+b) +c.z=b*(r!==0?c.at=1/r:r) +i=new A.a(new Float64Array(2)) +i.v(c.f) +i.aq(0,s) +b=c.ay +b.v(A.ck(m,i)) +h=new A.jL(new Float64Array(4)) +s=c.CW +r=c.cx +g=b.a +f=g[1] +e=c.at +g=g[0] +d=-r*g*f +h.p_(s+r*f*f+e,d,d,s+r*g*g+e) +e=c.cy +e.v(h) +e.Lm() +e=c.db +e.v(q) +e.E(0,b) +e.aq(0,c.w) +e.au(0,c.z) +n*=0.98 +s=a.a +r=c.Q +if(s.f){r.au(0,s.c) +s=o.a +g=r.a +o.sN(0,s[0]+c.CW*g[0]) +o.sO(0,s[1]+c.CW*g[1]) +n+=c.cx*b.bS(r)}else r.cv() +a.c[c.ax].b=n}, +nU(a){return!0}, +nV(a){var s,r,q,p,o,n,m,l,k,j=this,i=a.c +i===$&&A.c() +i=i[j.ax] +s=i.a +r=i.b +q=new A.a(new Float64Array(2)) +i=j.ay +i.hm(r,q) +q.E(0,s) +p=new Float64Array(2) +o=new A.a(p) +n=new A.a(new Float64Array(2)) +m=j.Q +n.v(m) +n.au(0,j.at) +n.E(0,j.db) +n.E(0,q) +n.dE() +j.cy.Zz(n,o) +n.v(m) +m.E(0,o) +l=a.a +l===$&&A.c() +k=l.a*j.as +if(m.gd2()>k*k)m.au(0,k/Math.sqrt(m.gd2())) +o.v(m) +o.aq(0,n) +m=s.a +s.sN(0,m[0]+j.CW*p[0]) +s.sO(0,m[1]+j.CW*p[1]) +p=j.cx +i=i.bS(o) +a.c[j.ax].b=r+p*i}} +A.a71.prototype={} +A.Q8.prototype={ +ox(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,b3,b4,b5=this,b6=b5.a +b6===$&&A.c() +b5.dx=b6.c +s=b5.b +s===$&&A.c() +b5.dy=s.c +s=b5.fr +s.v(b6.f.a) +b6=b5.fx +b6.v(b5.b.f.a) +r=b5.a +b5.fy=r.ay +q=b5.b +b5.go=q.ay +b5.id=r.CW +b5.k1=q.CW +q=b7.b +q===$&&A.c() +r=b5.dx +p=q[r] +o=p.a +n=p.b +p=b7.c +p===$&&A.c() +r=p[r] +m=r.a +l=r.b +r=b5.dy +q=q[r] +k=q.a +j=q.b +r=p[r] +i=r.a +h=r.b +g=new A.av(0,1) +f=new A.av(0,1) +e=new A.a(new Float64Array(2)) +d=new A.a(new Float64Array(2)) +c=new A.a(new Float64Array(2)) +b=new A.a(new Float64Array(2)) +g.a=Math.sin(n) +g.b=Math.cos(n) +f.a=Math.sin(j) +f.b=Math.cos(j) +e.v(b5.w) +e.aq(0,s) +c.v(A.ck(g,e)) +e.v(b5.x) +e.aq(0,b6) +b.v(A.ck(f,e)) +e.v(k) +e.aq(0,o) +e.E(0,b) +e.aq(0,c) +a=b5.fy +a0=b5.go +a1=b5.id +a2=b5.k1 +b6=b5.k2 +b6.v(A.ck(g,b5.y)) +d.v(e) +d.E(0,c) +b5.p1=d.bS(b6) +s=b5.p2=b.bS(b6) +r=a+a0 +q=b5.p1 +s=b5.p4=r+a1*q*q+a2*s*s +if(s>0)b5.p4=1/s +s=b5.k3 +s.v(A.ck(g,b5.z)) +d.v(e) +d.E(0,c) +b5.k4=d.bS(s) +q=b5.ok=b.bS(s) +p=b5.k4 +a3=a1*p +a4=a2*q +a5=a3+a4 +a6=b5.p1 +a7=b5.p2 +a8=a3*a6+a4*a7 +a9=a1+a2 +if(a9===0)a9=1 +b0=a1*a6 +b1=a2*a7 +b2=b0+b1 +b5.p3.uA(r+a3*p+a4*q,a5,a8,a5,a9,b2,a8,b2,r+b0*a6+b1*a7) +if(b5.cx){b3=b6.bO(e) +r=b5.ay +q=b5.ax +if(Math.abs(r-q)<0.01)b5.db=B.fm +else if(b3<=q){r=b5.db +r===$&&A.c() +if(r!==B.eq){b5.db=B.eq +b5.as.sjy(0,0)}}else if(b3>=r){r=b5.db +r===$&&A.c() +if(r!==B.er){b5.db=B.er +b5.as.sjy(0,0)}}else{b5.db=B.di +b5.as.sjy(0,0)}}else{b5.db=B.di +b5.as.sjy(0,0)}if(!b5.cy)b5.at=0 +r=b7.a +r===$&&A.c() +q=b5.as +if(r.f){q.au(0,r.c) +b5.at=b5.at*b7.a.c +r=new Float64Array(2) +b4=new A.a(r) +d.v(b6) +q=q.a +d.au(0,b5.at+q[2]) +b4.v(s) +b4.au(0,q[0]) +b4.E(0,d) +s=q[0] +b6=b5.k4 +p=q[1] +q=b5.at+q[2] +a3=b5.p1 +a4=b5.ok +a6=b5.p2 +a7=m.a +m.sN(0,a7[0]-a*r[0]) +m.sO(0,a7[1]-a*r[1]) +l-=a1*(s*b6+p+q*a3) +a3=i.a +i.sN(0,a3[0]+a0*r[0]) +i.sO(0,a3[1]+a0*r[1]) +h+=a2*(s*a4+p+q*a6)}else{q.cv() +b5.at=0}b6=b7.c +b6[b5.dx].b=l +b6[b5.dy].b=h}, +nV(b1){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=this,b0=b1.c +b0===$&&A.c() +s=b0[a9.dx] +r=s.a +q=s.b +b0=b0[a9.dy] +p=b0.a +o=b0.b +n=a9.fy +m=a9.go +l=a9.id +k=a9.k1 +j=new A.a(new Float64Array(2)) +if(a9.cy){b0=a9.db +b0===$&&A.c() +b0=b0!==B.fm}else b0=!1 +if(b0){j.v(p) +j.aq(0,r) +b0=a9.k2 +s=b0.bO(j) +i=a9.p2 +h=a9.p1 +g=a9.p4 +f=a9.CW +e=a9.at +d=b1.a +d===$&&A.c() +c=d.a*a9.ch +h=B.c.bX(e+g*(f-(s+i*o-h*q)),-c,c) +a9.at=h +b=h-e +s=new Float64Array(2) +a=new A.a(s) +a.v(b0) +a.au(0,b) +b0=a9.p1 +i=a9.p2 +h=r.a +r.sN(0,h[0]-n*s[0]) +r.sO(0,h[1]-n*s[1]) +q-=l*(b*b0) +b0=p.a +p.sN(0,b0[0]+m*s[0]) +p.sO(0,b0[1]+m*s[1]) +o+=k*(b*i)}b0=new Float64Array(2) +a0=new A.a(b0) +j.v(p) +j.aq(0,r) +s=a9.k3 +a0.sN(0,s.bO(j)+a9.ok*o-a9.k4*q) +a0.sO(0,o-q) +if(a9.cx){i=a9.db +i===$&&A.c() +i=i!==B.di}else i=!1 +if(i){i=a9.k2 +h=i.bO(p.Y(0,r)) +g=a9.p2 +f=a9.p1 +d=b0[0] +b0=b0[1] +a1=new A.dX(new Float64Array(3)) +a1.kG(d,b0,h+g*o-f*q) +b0=new Float64Array(3) +a2=new A.dX(b0) +h=new Float64Array(3) +a3=new A.dX(h) +g=a9.as +a2.v(g) +f=a9.p3 +a1.dE() +A.aKo(f,a3,a1) +g.E(0,a3) +d=a9.db +d===$&&A.c() +if(d===B.eq)g.sjy(0,Math.max(g.a[2],0)) +else if(d===B.er)g.sjy(0,Math.min(g.a[2],0)) +a4=new A.a(new Float64Array(2)) +d=new Float64Array(2) +a5=new A.a(d) +a6=f.a +j.p(a6[6],a6[7]) +j.au(0,g.a[2]-b0[2]) +a4.v(a0) +a4.dE() +a4.aq(0,j) +A.OP(f,a5,a4) +f=b0[0] +b0=b0[1] +a6=new A.a(new Float64Array(2)) +a6.p(f,b0) +a5.E(0,a6) +g.sN(0,d[0]) +g.sO(0,d[1]) +a3.v(g) +a3.aq(0,a2) +b0=new Float64Array(2) +a=new A.a(b0) +j.v(i) +j.au(0,h[2]) +a.v(s) +a.au(0,h[0]) +a.E(0,j) +s=h[0] +i=a9.k4 +g=h[1] +h=h[2] +f=a9.p1 +d=a9.ok +a6=a9.p2 +a7=r.a +r.sN(0,a7[0]-n*b0[0]) +r.sO(0,a7[1]-n*b0[1]) +q-=l*(s*i+g+h*f) +f=p.a +p.sN(0,f[0]+m*b0[0]) +p.sO(0,f[1]+m*b0[1]) +o+=k*(s*d+g+h*a6)}else{b0=new Float64Array(2) +a0.dE() +A.OP(a9.p3,new A.a(b0),a0) +a0.dE() +a0=a9.as +i=a0.a +a0.sN(0,i[0]+b0[0]) +a0.sO(0,i[1]+b0[1]) +i=new Float64Array(2) +a8=new A.a(i) +a8.v(s) +a8.au(0,b0[0]) +s=b0[0] +h=a9.k4 +b0=b0[1] +g=a9.ok +f=r.a +r.sN(0,f[0]-n*i[0]) +r.sO(0,f[1]-n*i[1]) +q-=l*(s*h+b0) +h=p.a +p.sN(0,h[0]+m*i[0]) +p.sO(0,h[1]+m*i[1]) +o+=k*(s*g+b0)}b0=b1.c +b0[a9.dx].b=q +b0[a9.dy].b=o}, +nU(c7){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=this,b1=new A.av(0,1),b2=new A.av(0,1),b3=new A.a(new Float64Array(2)),b4=new A.a(new Float64Array(2)),b5=new A.a(new Float64Array(2)),b6=new Float64Array(2),b7=new A.a(b6),b8=new Float64Array(2),b9=new A.a(b8),c0=new Float64Array(2),c1=new A.a(c0),c2=new Float64Array(2),c3=new A.a(c2),c4=new Float64Array(3),c5=new A.dX(c4),c6=c7.b +c6===$&&A.c() +s=c6[b0.dx] +r=s.a +q=s.b +c6=c6[b0.dy] +p=c6.a +o=c6.b +b1.a=Math.sin(q) +b1.b=Math.cos(q) +b2.a=Math.sin(o) +b2.b=Math.cos(o) +n=b0.fy +m=b0.go +l=b0.id +k=b0.k1 +c1.v(b0.w) +c1.aq(0,b0.fr) +b3.v(A.ck(b1,c1)) +c1.v(b0.x) +c1.aq(0,b0.fx) +b4.v(A.ck(b2,c1)) +b5.v(p) +b5.E(0,b4) +b5.aq(0,r) +b5.aq(0,b3) +b7.v(A.ck(b1,b0.y)) +c1.v(b5) +c1.E(0,b3) +j=c1.bS(b7) +i=b4.bS(b7) +b9.v(A.ck(b1,b0.z)) +c1.v(b5) +c1.E(0,b3) +h=c1.bS(b9) +g=b4.bS(b9) +c3.sN(0,b9.bO(b5)) +c6=b0.Q +c6===$&&A.c() +c3.sO(0,o-q-c6) +f=Math.abs(c2[0]) +c6=c2[1] +if(b0.cx){e=b7.bO(b5) +s=b0.ay +d=b0.ax +if(Math.abs(s-d)<0.01){c=B.c.bX(e,-0.2,0.2) +f=Math.max(f,Math.abs(e)) +b=!0}else if(e<=d){c=B.c.bX(e-d+0.005,-0.2,0) +f=Math.max(f,b0.ax-e) +b=!0}else{b=e>=s +if(b){c=B.c.bX(e-s-0.005,0,0.2) +f=Math.max(f,e-b0.ay)}else c=0}}else{b=!1 +c=0}s=n+m +d=l*h +a=k*g +a0=d*h +a1=a*g +a2=d+a +if(b){a3=d*j+a*i +a4=l+k +if(a4===0)a4=1 +c0=l*j +d=k*i +a5=c0+d +a6=new A.id(new Float64Array(9)) +a6.uA(s+a0+a1,a2,a3,a2,a4,a5,a3,a5,s+c0*j+d*i) +a7=new A.dX(new Float64Array(3)) +a7.sN(0,c2[0]) +a7.sO(0,c2[1]) +a7.sjy(0,c) +a7.dE() +A.aKo(a6,c5,a7)}else{a4=l+k +if(a4===0)a4=1 +a6=new A.jL(new Float64Array(4)) +a6.p_(s+a0+a1,a2,a2,a4) +c3.dE() +A.bo_(a6,c1,c3) +c3.dE() +c5.sN(0,c0[0]) +c5.sO(0,c0[1]) +c5.sjy(0,0)}c0=c4[0] +c2=b8[0] +s=c4[2] +a8=c0*c2+s*b6[0] +a9=c0*b8[1]+s*b6[1] +c4=c4[1] +b6=r.a +r.sN(0,b6[0]-n*a8) +r.sO(0,b6[1]-n*a9) +b6=p.a +p.sN(0,b6[0]+m*a8) +p.sO(0,b6[1]+m*a9) +b6=c7.b +b6[b0.dx].b=q-l*(c0*h+c4+s*j) +b6[b0.dy].b=o+k*(c0*g+c4+s*i) +return f<=0.005&&Math.abs(c6)<=0.03490658503988659}} +A.a9l.prototype={ +rf(a,b,c,d,e){var s=this +s.d=b +s.e=c +s.a.v(A.k_(b.d,d)) +s.b.v(A.k_(s.e.d,d)) +s.r.v(A.tn(s.d.d.b,e)) +s.w=s.e.f.e-s.d.f.e}} +A.a9o.prototype={ +ox(a8){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,a7=a6.a +a7===$&&A.c() +a6.ax=a7.c +s=a6.b +s===$&&A.c() +a6.ay=s.c +s=a6.db +s.v(a7.f.a) +a7=a6.dx +a7.v(a6.b.f.a) +r=a6.a +a6.dy=r.ay +q=a6.b +a6.fr=q.ay +a6.fx=r.CW +a6.fy=q.CW +q=a8.b +q===$&&A.c() +r=a6.ax +p=q[r] +o=p.a +n=p.b +p=a8.c +p===$&&A.c() +r=p[r] +m=r.a +l=r.b +r=a6.ay +q=q[r] +k=q.a +j=q.b +r=p[r] +i=r.a +h=r.b +g=new A.av(0,1) +f=new A.av(0,1) +e=new A.a(new Float64Array(2)) +g.a=Math.sin(n) +g.b=Math.cos(n) +f.a=Math.sin(j) +f.b=Math.cos(j) +e.v(a6.e) +e.aq(0,s) +s=a6.cx +s.v(A.ck(g,e)) +e.v(a6.f) +e.aq(0,a7) +a7=a6.cy +a7.v(A.ck(f,e)) +r=a6.ch +r.v(o) +r.E(0,s) +r.aq(0,a6.w) +q=a6.CW +q.v(k) +q.E(0,a7) +q.aq(0,a6.x) +d=Math.sqrt(r.gd2()) +c=Math.sqrt(q.gd2()) +if(d>0.05)r.au(0,1/d) +else r.cv() +if(c>0.05)q.au(0,1/c) +else q.cv() +b=s.bS(r) +a=a7.bS(q) +p=a6.dy +a0=a6.fx +a1=a6.fr +a2=a6.fy +a3=a6.as +a2=a6.go=p+a0*b*b+a3*a3*(a1+a2*a*a) +if(a2>0)a6.go=1/a2 +p=a8.a +p===$&&A.c() +if(p.f){a6.at=a6.at*p.c +p=new Float64Array(2) +a4=new A.a(p) +a0=new Float64Array(2) +a5=new A.a(a0) +a4.v(r) +a4.au(0,-a6.at) +a5.v(q) +a5.au(0,-a6.as*a6.at) +q=m.a +m.sN(0,q[0]+a6.dy*p[0]) +m.sO(0,q[1]+a6.dy*p[1]) +l+=a6.fx*s.bS(a4) +s=i.a +i.sN(0,s[0]+a6.fr*a0[0]) +i.sO(0,s[1]+a6.fr*a0[1]) +h+=a6.fy*a7.bS(a5)}else a6.at=0 +a7=a8.c +a7[a6.ax].b=l +a7[a6.ay].b=h}, +nV(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this,a=a0.c +a===$&&A.c() +s=a[b.ax] +r=s.a +q=s.b +a=a[b.ay] +p=a.a +o=a.b +n=new A.a(new Float64Array(2)) +m=new A.a(new Float64Array(2)) +a=new Float64Array(2) +l=new A.a(a) +s=new Float64Array(2) +k=new A.a(s) +j=b.cx +j.hm(q,n) +n.E(0,r) +i=b.cy +i.hm(o,m) +m.E(0,p) +h=b.ch +g=h.bO(n) +f=b.as +e=b.CW +d=e.bO(m) +c=-b.go*(-g-f*d) +b.at+=c +l.v(h) +l.au(0,-c) +k.v(e) +k.au(0,-b.as*c) +e=r.a +r.sN(0,e[0]+b.dy*a[0]) +r.sO(0,e[1]+b.dy*a[1]) +a=b.fx +j=j.bS(l) +e=p.a +p.sN(0,e[0]+b.fr*s[0]) +p.sO(0,e[1]+b.fr*s[1]) +s=b.fy +i=i.bS(k) +e=a0.c +e[b.ax].b=q+a*j +e[b.ay].b=o+s*i}, +nU(a9){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=new A.av(0,1),b=new A.av(0,1),a=new A.a(new Float64Array(2)),a0=new A.a(new Float64Array(2)),a1=new A.a(new Float64Array(2)),a2=new A.a(new Float64Array(2)),a3=new A.a(new Float64Array(2)),a4=new Float64Array(2),a5=new A.a(a4),a6=new Float64Array(2),a7=new A.a(a6),a8=a9.b +a8===$&&A.c() +s=a8[d.ax] +r=s.a +q=s.b +a8=a8[d.ay] +p=a8.a +o=a8.b +c.a=Math.sin(q) +c.b=Math.cos(q) +b.a=Math.sin(o) +b.b=Math.cos(o) +a3.v(d.e) +a3.aq(0,d.db) +a.v(A.ck(c,a3)) +a3.v(d.f) +a3.aq(0,d.dx) +a0.v(A.ck(b,a3)) +a1.v(r) +a1.E(0,a) +a1.aq(0,d.w) +a2.v(p) +a2.E(0,a0) +a2.aq(0,d.x) +n=Math.sqrt(a1.gd2()) +m=Math.sqrt(a2.gd2()) +if(n>0.05)a1.au(0,1/n) +else a1.cv() +if(m>0.05)a2.au(0,1/m) +else a2.cv() +l=a.bS(a1) +k=a0.bS(a2) +a8=d.dy +s=d.fx +j=d.fr +i=d.fy +h=d.as +g=a8+s*l*l+h*h*(j+i*k*k) +if(g>0)g=1/g +f=d.Q-n-h*m +e=-g*f +a5.v(a1) +a5.au(0,-e) +a7.v(a2) +a7.au(0,-d.as*e) +a8=r.a +r.sN(0,a8[0]+d.dy*a4[0]) +r.sO(0,a8[1]+d.dy*a4[1]) +a4=d.fx +a8=a.bS(a5) +s=p.a +p.sN(0,s[0]+d.fr*a6[0]) +p.sO(0,s[1]+d.fr*a6[1]) +a6=d.fy +s=a0.bS(a7) +j=a9.b +j[d.ax].b=q+a4*a8 +j[d.ay].b=o+a6*s +return Math.abs(f)<0.005}} +A.a9p.prototype={} +A.wi.prototype={ +ox(a9){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=this,a8=a7.a +a8===$&&A.c() +a7.cx=a8.c +s=a7.b +s===$&&A.c() +a7.cy=s.c +s=a7.dy +s.v(a8.f.a) +a8=a7.fr +a8.v(a7.b.f.a) +r=a7.a +a7.fx=r.ay +q=a7.b +a7.fy=q.ay +a7.go=r.CW +a7.id=q.CW +q=a9.b +q===$&&A.c() +r=a7.cx +p=q[r].b +o=a9.c +o===$&&A.c() +r=o[r] +n=r.a +m=r.b +r=a7.cy +l=q[r].b +r=o[r] +k=r.a +j=r.b +i=new A.av(0,1) +h=new A.av(0,1) +g=new A.a(new Float64Array(2)) +i.a=Math.sin(p) +i.b=Math.cos(p) +h.a=Math.sin(l) +h.b=Math.cos(l) +g.v(a7.w) +g.aq(0,s) +s=a7.db +s.v(A.ck(i,g)) +g.v(a7.x) +g.aq(0,a8) +a8=a7.dx +a8.v(A.ck(h,g)) +f=a7.fx +e=a7.fy +d=a7.go +c=a7.id +r=d+c +b=r===0 +q=f+e +o=s.a +a=o[1] +a0=a8.a +a1=a0[1] +a2=-a +o=o[0] +a0=a0[0] +a3=a7.k1 +a4=a3.a +a3.uA(q+a*a*d+a1*a1*c,a4[3],a4[6],a2*o*d-a1*a0*c,q+o*o*d+a0*a0*c,a4[7],a2*d-a1*c,o*d+a0*c,r) +a7.k2=r +if(r>0)a7.k2=1/r +if(!a7.Q||b)a7.z=0 +if(a7.ax&&!b){a5=l-p-a7.ay +r=a7.CW +q=a7.ch +if(Math.abs(r-q)<0.06981317007977318)a7.k3=B.fm +else if(a5<=q){if(a7.k3!==B.eq)a7.y.sjy(0,0) +a7.k3=B.eq}else if(a5>=r){if(a7.k3!==B.er)a7.y.sjy(0,0) +a7.k3=B.er}else{a7.k3=B.di +a7.y.sjy(0,0)}}else a7.k3=B.di +r=a9.a +r===$&&A.c() +if(r.f){q=new Float64Array(2) +a6=new A.a(q) +o=a7.y +a=o.a +o.sN(0,a[0]*r.c) +o.sO(0,a[1]*a9.a.c) +a7.z=a7.z*a9.a.c +a6.sN(0,a[0]) +a6.sO(0,a[1]) +o=n.a +n.sN(0,o[0]-f*q[0]) +n.sO(0,o[1]-f*q[1]) +m-=d*(s.bS(a6)+a7.z+a[2]) +s=k.a +k.sN(0,s[0]+e*q[0]) +k.sO(0,s[1]+e*q[1]) +j+=c*(a8.bS(a6)+a7.z+a[2])}else{a7.y.cv() +a7.z=0}a8=a9.c +a8[a7.cx].b=m +a8[a7.cy].b=j}, +nV(a7){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=this,a6=a7.c +a6===$&&A.c() +s=a6[a5.cx] +r=s.a +q=s.b +a6=a6[a5.cy] +p=a6.a +o=a6.b +n=a5.fx +m=a5.fy +l=a5.go +k=a5.id +j=l+k===0 +if(a5.Q&&a5.k3!==B.fm&&!j){a6=a5.at +s=a5.k2 +i=a5.z +h=a7.a +h===$&&A.c() +g=h.a*a5.as +a6=B.c.bX(i+-s*(o-q-a6),-g,g) +a5.z=a6 +f=a6-i +q-=l*f +o+=k*f}a6=new Float64Array(2) +e=new A.a(a6) +if(a5.ax&&a5.k3!==B.di&&!j){s=new Float64Array(2) +d=new A.a(s) +c=new A.dX(new Float64Array(3)) +h=a5.db +h.hm(q,e) +b=a5.dx +b.hm(o,d) +d.E(0,p) +d.aq(0,r) +d.aq(0,e) +c.kG(s[0],s[1],o-q) +s=new Float64Array(3) +f=new A.dX(s) +a=a5.k1 +A.aKo(a,f,c) +f.dE() +a0=a5.k3 +if(a0===B.fm)a5.y.E(0,f) +else if(a0===B.eq){a0=a5.y +a1=a0.a +if(a1[2]+s[2]<0){a2=new A.a(new Float64Array(2)) +a3=a.a +a2.p(a3[6],a3[7]) +a2.au(0,a1[2]) +a2.aq(0,d) +A.OP(a,e,a2) +f.sN(0,a6[0]) +f.sO(0,a6[1]) +f.sjy(0,-a1[2]) +a0.sN(0,a1[0]+a6[0]) +a0.sO(0,a1[1]+a6[1]) +a0.sjy(0,0)}else a0.E(0,f)}else if(a0===B.er){a0=a5.y +a1=a0.a +if(a1[2]+s[2]>0){a2=new A.a(new Float64Array(2)) +a3=a.a +a2.p(a3[6],a3[7]) +a2.au(0,a1[2]) +a2.aq(0,d) +A.OP(a,e,a2) +f.sN(0,a6[0]) +f.sO(0,a6[1]) +f.sjy(0,-a1[2]) +a0.sN(0,a1[0]+a6[0]) +a0.sO(0,a1[1]+a6[1]) +a0.sjy(0,0)}else a0.E(0,f)}a6=new Float64Array(2) +a4=new A.a(a6) +a4.p(s[0],s[1]) +a=r.a +r.sN(0,a[0]-n*a6[0]) +r.sO(0,a[1]-n*a6[1]) +q-=l*(h.bS(a4)+s[2]) +h=p.a +p.sN(0,h[0]+m*a6[0]) +p.sO(0,h[1]+m*a6[1]) +o+=k*(b.bS(a4)+s[2])}else{c=new A.a(new Float64Array(2)) +a6=new Float64Array(2) +f=new A.a(a6) +s=a5.db +s.hm(q,e) +h=a5.dx +h.hm(o,c) +c.E(0,p) +c.aq(0,r) +c.aq(0,e) +c.dE() +A.OP(a5.k1,f,c) +b=a5.y +a=b.a +b.sN(0,a[0]+a6[0]) +b.sO(0,a[1]+a6[1]) +a=r.a +r.sN(0,a[0]-n*a6[0]) +r.sO(0,a[1]-n*a6[1]) +q-=l*s.bS(f) +s=p.a +p.sN(0,s[0]+m*a6[0]) +p.sO(0,s[1]+m*a6[1]) +o+=k*h.bS(f)}a6=a7.c +a6[a5.cx].b=q +a6[a5.cy].b=o}, +nU(b2){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,a9=new A.av(0,1),b0=new A.av(0,1),b1=b2.b +b1===$&&A.c() +s=b1[a8.cx] +r=s.a +q=s.b +b1=b1[a8.cy] +p=b1.a +o=b1.b +a9.a=Math.sin(q) +a9.b=Math.cos(q) +b0.a=Math.sin(o) +b0.b=Math.cos(o) +b1=a8.go +s=a8.id +if(a8.ax&&a8.k3!==B.di&&b1+s!==0){n=o-q-a8.ay +b1=a8.k3 +if(b1===B.fm){m=B.c.bX(n-a8.ch,-0.13962634015954636,0.13962634015954636) +l=-a8.k2*m +k=Math.abs(m)}else if(b1===B.eq){j=n-a8.ch +k=-j +j=B.c.bX(j+0.03490658503988659,-0.13962634015954636,0) +l=-a8.k2*j}else if(b1===B.er){j=n-a8.CW +i=B.c.bX(j-0.03490658503988659,0,0.13962634015954636) +l=-a8.k2*i +k=j}else{k=0 +l=0}q-=a8.go*l +o+=a8.id*l}else k=0 +a9.a=Math.sin(q) +a9.b=Math.cos(q) +b0.a=Math.sin(o) +b0.b=Math.cos(o) +b1=new Float64Array(2) +h=new A.a(b1) +s=new Float64Array(2) +g=new A.a(s) +f=new A.a(new Float64Array(2)) +e=new Float64Array(2) +d=new A.a(e) +f.v(a8.w) +f.aq(0,a8.dy) +h.v(A.ck(a9,f)) +f.v(a8.x) +f.aq(0,a8.fr) +g.v(A.ck(b0,f)) +f.v(p) +f.E(0,g) +f.aq(0,r) +f.aq(0,h) +c=Math.sqrt(f.gd2()) +b=a8.fx +a=a8.fy +a0=a8.go +a1=a8.id +a2=new A.jL(new Float64Array(4)) +a3=b+a +a4=b1[1] +a5=s[1] +b1=b1[0] +s=s[0] +a6=a1*s +a7=-a0*b1*a4-a6*a5 +a2.p_(a3+a0*a4*a4+a1*a5*a5,a7,a7,a3+a0*b1*b1+a6*s) +A.bo_(a2,d,f) +d.dE() +s=r.a +r.sN(0,s[0]-b*e[0]) +r.sO(0,s[1]-b*e[1]) +s=h.bS(d) +a6=p.a +p.sN(0,a6[0]+a*e[0]) +p.sO(0,a6[1]+a*e[1]) +e=g.bS(d) +a6=b2.b +a6[a8.cx].b=q-a0*s +a6[a8.cy].b=o+a1*e +return c<=0.005&&k<=0.03490658503988659}, +O2(a,b){var s,r=this +if(a!==r.ch||b!==r.CW){s=r.a +s===$&&A.c() +s.fw(!0) +s=r.b +s===$&&A.c() +s.fw(!0) +r.y.sjy(0,0) +r.ch=a +r.CW=b}}} +A.aaA.prototype={ +Xm(a,b,c,d){var s=this +s.d=b +s.e=c +s.a.v(A.k_(b.d,d)) +s.b.v(A.k_(s.e.d,d)) +s.r=s.e.f.e-s.d.f.e}} +A.aaF.prototype={ +ox(a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this,a2=a1.a +a2===$&&A.c() +a1.as=a2.c +s=a1.b +s===$&&A.c() +a1.at=s.c +s=a1.CW +s.v(a2.f.a) +a2=a1.cx +a2.v(a1.b.f.a) +r=a1.a +a1.cy=r.ay +q=a1.b +a1.db=q.ay +a1.dx=r.CW +a1.dy=q.CW +q=a3.b +q===$&&A.c() +r=a1.as +p=q[r] +o=p.a +n=p.b +p=a3.c +p===$&&A.c() +r=p[r] +m=r.a +l=r.b +r=a1.at +q=q[r] +k=q.a +j=q.b +r=p[r] +i=r.a +h=r.b +g=new A.av(0,1) +f=new A.av(0,1) +e=new A.a(new Float64Array(2)) +g.a=Math.sin(n) +g.b=Math.cos(n) +f.a=Math.sin(j) +f.b=Math.cos(j) +e.v(a1.w) +e.aq(0,s) +s=a1.ay +s.v(A.ck(g,e)) +e.v(a1.x) +e.aq(0,a2) +a2=a1.ch +a2.v(A.ck(f,e)) +r=a1.ax +r.v(k) +r.E(0,a2) +r.aq(0,o) +r.aq(0,s) +q=a1.z=Math.sqrt(r.gd2()) +if(q>0.005)r.au(0,1/q) +else{r.cv() +a1.Q=a1.fr=0 +return}d=s.bS(r) +c=a2.bS(r) +q=a1.cy +b=q+a1.dx*d*d+a1.db+a1.dy*c*c +a1.fr=b!==0?1/b:0 +p=a3.a +p===$&&A.c() +if(p.f){p=a1.Q=a1.Q*p.c +r=r.a +a=p*r[0] +a0=p*r[1] +r=m.a +m.sN(0,r[0]-q*a) +m.sO(0,r[1]-a1.cy*a0) +s=s.a +l-=a1.dx*(s[0]*a0-s[1]*a) +s=i.a +i.sN(0,s[0]+a1.db*a) +i.sO(0,s[1]+a1.db*a0) +a2=a2.a +h+=a1.dy*(a2[0]*a0-a2[1]*a)}else a1.Q=0 +a2=a3.c +a2[a1.as].b=l +a2[a1.at].b=h}, +nV(a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this,a1=a2.c +a1===$&&A.c() +s=a1[a0.as] +r=s.a +q=s.b +a1=a1[a0.at] +p=a1.a +o=a1.b +n=new A.a(new Float64Array(2)) +m=new A.a(new Float64Array(2)) +l=new A.a(new Float64Array(2)) +a1=a0.ay +a1.hm(q,n) +n.E(0,r) +s=a0.ch +s.hm(o,m) +m.E(0,p) +k=a0.z-a0.y +j=a0.ax +l.v(m) +l.aq(0,n) +i=j.bO(l) +if(k<0){h=a2.a +h===$&&A.c() +i+=h.b*k}h=a0.fr +g=a0.Q +h=Math.min(0,g+-h*i) +a0.Q=h +f=h-g +j=j.a +e=f*j[0] +d=f*j[1] +j=r.a +r.sN(0,j[0]-a0.cy*e) +r.sO(0,j[1]-a0.cy*d) +j=a0.dx +a1=a1.a +h=a1[0] +a1=a1[1] +c=p.a +p.sN(0,c[0]+a0.db*e) +p.sO(0,c[1]+a0.db*d) +c=a0.dy +s=s.a +b=s[0] +s=s[1] +a=a2.c +a[a0.as].b=q-j*(h*d-a1*e) +a[a0.at].b=o+c*(b*d-s*e)}, +nU(a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2=this,a3=a4.b +a3===$&&A.c() +s=a3[a2.as] +r=s.a +q=s.b +a3=a3[a2.at] +p=a3.a +o=a3.b +n=new A.av(0,1) +m=new A.av(0,1) +a3=new Float64Array(2) +l=new A.a(a3) +s=new Float64Array(2) +k=new A.a(s) +j=new Float64Array(2) +i=new A.a(j) +h=new A.a(new Float64Array(2)) +n.a=Math.sin(q) +n.b=Math.cos(q) +m.a=Math.sin(o) +m.b=Math.cos(o) +h.v(a2.w) +h.aq(0,a2.CW) +k.v(A.ck(n,h)) +h.v(a2.x) +h.aq(0,a2.cx) +i.v(A.ck(m,h)) +l.v(p) +l.E(0,i) +l.aq(0,r) +l.aq(0,k) +g=l.e0(0) +f=B.c.bX(g-a2.y,0,0.2) +e=-a2.fr*f +d=e*a3[0] +c=e*a3[1] +a3=r.a +r.sN(0,a3[0]-a2.cy*d) +r.sO(0,a3[1]-a2.cy*c) +a3=a2.dx +b=s[0] +s=s[1] +a=p.a +p.sN(0,a[0]+a2.db*d) +p.sO(0,a[1]+a2.db*c) +a=a2.dy +a0=j[0] +j=j[1] +a1=a4.b +a1[a2.as].b=q-a3*(b*c-s*d) +a1[a2.at].b=o+a*(a0*c-j*d) +return g-a2.y<0.005}} +A.bgu.prototype={} +A.aex.prototype={ +ox(c3){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=this,c2=c1.a +c2===$&&A.c() +c1.ay=c2.c +s=c1.b +s===$&&A.c() +c1.ch=s.c +s=c1.cy +s.v(c2.f.a) +c2=c1.db +c2.v(c1.b.f.a) +r=c1.a +c1.dx=r.ay +q=c1.b +c1.dy=q.ay +c1.fr=r.CW +c1.fx=q.CW +q=c3.b +q===$&&A.c() +r=c1.ay +p=q[r].b +o=c3.c +o===$&&A.c() +r=o[r] +n=r.a +m=r.b +r=c1.ch +l=q[r].b +r=o[r] +k=r.a +j=r.b +i=new A.av(0,1) +h=new A.av(0,1) +i.a=Math.sin(p) +i.b=Math.cos(p) +h.a=Math.sin(l) +h.b=Math.cos(l) +g=new A.a(new Float64Array(2)) +g.v(c1.z) +g.aq(0,s) +s=c1.CW +s.v(A.ck(i,g)) +g.v(c1.Q) +g.aq(0,c2) +c2=c1.cx +c2.v(A.ck(h,g)) +f=c1.dx +e=c1.dy +d=c1.fr +c=c1.fx +r=new Float64Array(9) +q=f+e +o=s.a +b=o[1] +a=c2.a +a0=a[1] +a1=-b +o=o[0] +a=a[0] +a2=d+c +new A.id(r).uA(q+b*b*d+a0*a0*c,r[3],r[6],a1*o*d-a0*a*c,q+o*o*d+a*a*c,r[7],a1*d-a0*c,o*d+a*c,a2) +q=c1.fy +if(c1.w>0){a3=r[1] +a4=r[3] +a5=r[4] +a6=a3*a5-a4*a3 +if(a6!==0)a6=1/a6 +r=-a6 +o=new A.id(new Float64Array(9)) +o.uA(a6*a5,r*a3,0,r*a4,a6*a3,0,0,0,0) +q.v(o) +a7=a2>0?1/a2:0 +r=c1.as +a8=6.283185307179586*c1.w +o=c1.x +a9=a7*a8*a8 +b=c3.a +b===$&&A.c() +b0=b.a +o=c1.at=b0*(2*a7*o*a8+b0*a9) +o=o!==0?1/o:0 +c1.at=o +c1.y=(l-p-r)*b0*a9*o +b1=a2+o +r=b1!==0?1/b1:0 +q.a[8]=r}else{o=r[4] +b=r[8] +a=o*b +a0=r[5] +a1=r[7] +b2=r[6] +b3=r[3] +b4=b3*b +b5=b3*a1 +b6=r[0] +a6=b6*(a-a0*a1)+r[1]*(a0*b2-b4)+r[2]*(b5-o*b2) +if(a6!==0)a6=1/a6 +r=q.a +b7=r[1] +b8=r[2] +b9=r[5] +r=new A.id(new Float64Array(9)) +r.uA(a6*(a-a1*a1),a6*(b2*a1-b4),a6*(b5-b2*o),b7,a6*(b6*b-b2*b2),a6*(b2*b3-b6*a1),b8,b9,a6*(b6*o-b3*b3)) +q.v(r) +c1.y=c1.at=0}r=c3.a +r===$&&A.c() +q=c1.ax +if(r.f){q.au(0,r.c) +r=q.a +q=r[0] +o=r[1] +b=new Float64Array(2) +c0=new A.a(b) +c0.p(q,o) +o=n.a +n.sN(0,o[0]-f*b[0]) +n.sO(0,o[1]-f*b[1]) +m-=d*(s.bS(c0)+r[2]) +s=k.a +k.sN(0,s[0]+e*b[0]) +k.sO(0,s[1]+e*b[1]) +j+=c*(c2.bS(c0)+r[2])}else q.cv() +c2=c3.c +c2[c1.ay].b=m +c2[c1.ch].b=j}, +nV(b2){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=this,b1=b2.c +b1===$&&A.c() +s=b1[b0.ay] +r=s.a +q=s.b +b1=b1[b0.ch] +p=b1.a +o=b1.b +n=b0.dx +m=b0.dy +l=b0.fr +k=b0.fx +b1=new Float64Array(2) +j=new A.a(b1) +s=new Float64Array(2) +i=new A.a(s) +h=new A.a(new Float64Array(2)) +g=b0.CW +f=b0.cx +e=o-q +if(b0.w>0){d=b0.fy.a +c=d[8] +b=b0.y +a=b0.at +a0=b0.ax +a1=a0.a +a2=a1[2] +a3=-c*(e+b+a*a2) +a0.sjy(0,a2+a3) +q-=l*a3 +o+=k*a3 +f.hm(o,j) +g.hm(q,h) +j.E(0,p) +j.aq(0,r) +j.aq(0,h) +j=d[1] +a2=b1[0] +a=d[4] +b1=b1[1] +b=d[0] +d=d[3] +c=new Float64Array(2) +a4=new A.a(c) +a4.p(j*a2+a*b1,b*a2+d*b1) +a4.dE() +a0.sN(0,a1[0]+c[0]) +a0.sO(0,a1[1]+c[1]) +c=r.a +r.sN(0,c[0]-n*s[0]) +r.sO(0,c[1]-n*s[1]) +q-=l*g.bS(i) +g=p.a +p.sN(0,g[0]+m*s[0]) +p.sO(0,g[1]+m*s[1]) +o+=k*f.bS(i)}else{g.hm(q,h) +f.hm(o,j) +j.E(0,p) +j.aq(0,r) +j.aq(0,h) +d=b1[0] +b1=b1[1] +c=new Float64Array(3) +a5=new A.dX(c) +a5.kG(d,b1,e) +a6=b0.fy.a +a7=c[0] +a8=c[1] +a9=c[2] +c[0]=a6[0]*a7+a6[3]*a8+a6[6]*a9 +c[1]=a6[1]*a7+a6[4]*a8+a6[7]*a9 +c[2]=a6[2]*a7+a6[5]*a8+a6[8]*a9 +a5.dE() +b0.ax.E(0,a5) +i.p(c[0],c[1]) +e=r.a +r.sN(0,e[0]-n*s[0]) +r.sO(0,e[1]-n*s[1]) +q-=l*(g.bS(i)+c[2]) +g=p.a +p.sN(0,g[0]+m*s[0]) +p.sO(0,g[1]+m*s[1]) +o+=k*(f.bS(i)+c[2])}b1=b2.c +b1[b0.ay].b=q +b1[b0.ch].b=o}, +nU(b2){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=this,b1=b2.b +b1===$&&A.c() +s=b1[b0.ay] +r=s.a +q=s.b +b1=b1[b0.ch] +p=b1.a +o=b1.b +n=new A.av(0,1) +m=new A.av(0,1) +n.a=Math.sin(q) +n.b=Math.cos(q) +m.a=Math.sin(o) +m.b=Math.cos(o) +l=b0.dx +k=b0.dy +j=b0.fr +i=b0.fx +h=new A.a(new Float64Array(2)) +h.v(b0.z) +h.aq(0,b0.cy) +b1=A.ck(n,h) +s=new Float64Array(2) +g=new A.a(s) +g.v(b1) +h.v(b0.Q) +h.aq(0,b0.db) +b1=A.ck(m,h) +f=new Float64Array(2) +e=new A.a(f) +e.v(b1) +b1=new Float64Array(9) +d=new A.id(b1) +c=new Float64Array(2) +b=new A.a(c) +a=new Float64Array(2) +a0=new A.a(a) +a1=l+k +a2=s[1] +a3=f[1] +a4=-a2 +s=s[0] +f=f[0] +d.uA(a1+a2*a2*j+a3*a3*i,b1[3],b1[6],a4*s*j-a3*f*i,a1+s*s*j+f*f*i,b1[7],a4*j-a3*i,s*j+f*i,j+i) +if(b0.w>0){b.v(p) +b.E(0,e) +b.aq(0,r) +b.aq(0,g) +a5=Math.sqrt(b.gd2()) +A.OP(d,a0,b) +a0.dE() +b1=r.a +r.sN(0,b1[0]-l*a[0]) +r.sO(0,b1[1]-l*a[1]) +q-=j*g.bS(a0) +b1=p.a +p.sN(0,b1[0]+k*a[0]) +p.sO(0,b1[1]+k*a[1]) +o+=i*e.bS(a0) +a6=0}else{b.v(p) +b.E(0,e) +b.aq(0,r) +b.aq(0,g) +a7=o-q-b0.as +a5=Math.sqrt(b.gd2()) +a6=Math.abs(a7) +b1=c[0] +c=c[1] +a8=new A.dX(new Float64Array(3)) +a8.kG(b1,c,a7) +b1=new Float64Array(3) +a9=new A.dX(b1) +A.aKo(d,a9,a8) +a9.dE() +a0.p(b1[0],b1[1]) +s=r.a +r.sN(0,s[0]-l*a[0]) +r.sO(0,s[1]-l*a[1]) +q-=j*(g.bS(a0)+b1[2]) +s=p.a +p.sN(0,s[0]+k*a[0]) +p.sO(0,s[1]+k*a[1]) +o+=i*(e.bS(a0)+b1[2])}b1=b2.b +b1[b0.ay].b=q +b1[b0.ch].b=o +return a5<=0.005&&a6<=0.03490658503988659}} +A.bhb.prototype={} +A.ak.prototype={ +q5(a){var s=this +s.a=s.a*0.95+a*0.05 +s.b=s.b*0.8+a*0.2 +s.c=Math.min(a,s.c) +s.d=Math.max(a,s.d)}, +j(a){var s=this +return A.j(s.b)+" ("+A.j(s.a)+") ["+A.j(s.c)+","+A.j(s.d)+"]"}} +A.ij.prototype={} +A.aTf.prototype={} +A.dK.prototype={} +A.iv.prototype={ +fm(a){var s=new A.a(new Float64Array(2)),r=new A.av(0,1),q=new Float64Array(2),p=new A.a(new Float64Array(2)),o=new A.a(new Float64Array(2)),n=new A.a(new Float64Array(2)),m=new A.bP(p,o,n),l=new A.a(new Float64Array(2)),k=new A.a(new Float64Array(2)),j=A.b([],t.DA),i=A.b([],t.Vn),h=A.b([],t.go),g=new Float64Array(2),f=new A.ki(B.a2,new A.be(s,r),new A.be(new A.a(q),new A.av(0,1)),m,l,k,this,j,i,h,new A.aKe(new A.a(g)),new A.be(new A.a(new Float64Array(2)),new A.av(0,1))) +q=(a.z?f.b=16:0)|4 +f.b=q +q|=2 +f.b=q +f.b=q|32 +s.v(a.c) +q=a.d +r.a=Math.sin(q) +r.b=Math.cos(q) +p.cv() +o.v(s) +n.v(s) +m.e=m.d=q +m.f=0 +l.v(a.e) +f.w=a.f +f.cy=a.w +k.cv() +k=a.a +f.a=k +if(k===B.R)f.ay=f.ax=1 +f.fr=a.b +this.c.push(f) +return f}, +aPP(a){var s,r,q,p,o,n,m=this +for(s=a.as;s.length!==0;){r=B.b.ga9(s) +m.Kg(r)}for(s=a.at;s.length!==0;){q=m.b +q===$&&A.c() +q.ad_(B.b.ga9(s))}B.b.af(s) +for(s=a.Q,q=s.length,p=0;p8)continue +if((b&32)!==0)a=c.y +else{a0=c.b +a1=c.c +if(a0.x||a1.x)continue +a2=a0.b +a3=a1.b +a4=a2.a +a5=a3.a +b=a2.b +a6=(b&2)===2&&a4!==B.a2 +a7=a3.b +a8=(a7&2)===2&&a5!==B.a2 +if(!a6&&!a8)continue +a9=(b&8)===8||a4!==B.R +b0=(a7&8)===8||a5!==B.R +if(!a9&&!b0)continue +b=a2.f +b1=b.f +a7=a3.f +b2=a7.f +if(b10?1/p:0 +m=o>0?1/o:0 +l=s.goc() +for(s=this.a,k=s.Q,j=r.d,i=0+n,s=s.at,q=q.c.a,h=b1.f,g=0;g>>0)+(B.c.aw(128*d)+262144)) +a1=A.boA(k,(B.c.aw(a+2048)<<19>>>0)+(B.c.aw(128*b)+262144)) +for(a2=a0;a2>>0)+(B.c.aw(128*e)+262144)) +a0=A.boA(b8.a.Q,(B.c.aw(b+2048)<<19>>>0)+(B.c.aw(128*c)+262144)) +for(a1=a;a1>>0)+(B.c.aw(128*o)+262144))}B.b.kg(s) +B.b.af(this.as) +for(m=0;mf?g:f +g=q[1] +q[1]=g>e?g:e}s=d.ok +s.b=a2 +s.a=d +d.go.ahg(s,a)}, +x_(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this;++f.a +s=f.y +r=s.length +if(r===0)return +f.b=0 +for(q=0,p=0;q0.25){k=n.e +j=m.gbe(m) +i=m.gdt() +h=c*k*(l-0.25) +g=n.d.a +p[0]=h*g[0] +p[1]=h*g[1] +i.sN(0,i.gN(i).Y(0,1.777777*p[0])) +i.sO(0,i.gO(i).Y(0,1.777777*p[1])) +n.b.ys(q,j)}}for(s=this.as,r=s.length,o=0;o0.25){i=n.a.gdt() +f=n.b.gdt() +h=c*(l-0.25) +p=n.e.a +e=h*p[0] +d=h*p[1] +i.sN(0,i.gN(i).Y(0,e)) +i.sO(0,i.gO(i).Y(0,d)) +f.sN(0,f.gN(f).X(0,e)) +f.sO(0,f.gO(f).X(0,d))}}}}, +alV(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=a.b*0.5 +for(s=this.as,r=s.length,q=0;q")),r=A.bPl() +this.a.E(0,new A.aU1(a,b,c,new A.bH(s,e.h("bH<0>")),d,e).$1(new A.N7(9,r))) +this.DY() +return s}} +A.aU1.prototype={ +$1(a){var s=this +return new A.zn(s.d,new A.a49(s.a,s.b,"compute",a.b,s.e.h("@<0>").ak(s.f).h("a49<1,2>")),t.Qw)}, +$S:819} +A.aql.prototype={} +A.Ln.prototype={ +j(a){return"Character("+this.b+")"}} +A.ayw.prototype={ +i(a,b){return this.a.i(0,b)}, +E(a,b){var s,r,q,p=this.a +p.u(0,b.b,b) +for(s=b.c,r=s.length,q=0;q")).anR(0,new A.b_i()).gF(0) +this.e!==$&&A.aj() +this.e=s}, +aZN(a){var s,r,q,p,o,n=this,m="argument",l=a.length,k=n.d,j=k.length +if(l<=j){s=n.e +s===$&&A.c() +s=l+s> expects "+A.j(l.$2(j,m))+" but received "+A.j(l.$2(a.length,m))))}l=n.e +l===$&&A.c() +r=0 +for(;r> has value "'+q+'", which is not a boolean')) +break +case 1:p=A.pR(q,null) +if(p==null)throw A.d(A.adU("Argument "+(r+1)+" for command <<"+n.a+'>> has value "'+q+'", which is not integer')) +k[r]=p +break +case 2:p=A.ow(q) +if(p==null)throw A.d(A.adU("Argument "+(r+1)+" for command <<"+n.a+'>> has value "'+q+'", which is not a floating-point value')) +k[r]=p +break +case 3:o=B.d.eC(q) +p=A.pR(o,null) +if(p==null)p=A.ow(o) +if(p==null)throw A.d(A.adU("Argument "+(r+1)+" for command <<"+n.a+'>> has value "'+q+'", which is not numeric')) +k[r]=p +break +case 4:k[r]=q +break}}return k}} +A.b_i.prototype={ +$1(a){return a===B.Ic}, +$S:821} +A.b_j.prototype={ +$2(a,b){var s=a===1?"":"s" +return""+a+" "+b+s}, +$S:822} +A.a_5.prototype={ +aZA(){var s,r=this,q=r.c +q.push(r.gaVy()) +for(s=r.a.length;r.b=this.a.length||this.iS())return!0 +throw A.d(A.hp("Whitespace is required after a quoted argument"))}} +A.oY.prototype={ +W(){return"_Type."+this.b}} +A.a2m.prototype={ +lP(a){return this.ame(a)}, +ame(a){var s=0,r=A.r(t.H),q=1,p,o=[],n=this,m,l,k +var $async$lP=A.t(function(b,c){if(b===1){p=c +s=q}while(true)switch(s){case 0:q=2 +m=n.e +if(m!=null){m=A.hp('Cannot run node "'+a+'" because another node is currently running: "'+m+'"') +throw A.d(m)}n.e=a +B.b.al(n.a,new A.aB3(n)) +m=n.Bn(new A.aB4()) +l=t.H +k=t.r +s=5 +return A.x(k.b(m)?m:A.cO(m,l),$async$lP) +case 5:s=6 +return A.x(n.v1(a),$async$lP) +case 6:m=n.Bn(new A.aB5()) +s=7 +return A.x(k.b(m)?m:A.cO(m,l),$async$lP) +case 7:o.push(4) +s=3 +break +case 2:o=[1] +case 3:q=1 +B.b.al(n.a,new A.aB6()) +n.c=n.d=n.f=n.e=null +s=o.pop() +break +case 4:return A.p(null,r) +case 1:return A.o(p,r)}}) +return A.q($async$lP,r)}, +v1(a){return this.aGQ(a)}, +aGQ(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f +var $async$v1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.f=a +p=t.D,o=t.r,n=q.r,m=n.c,l=m.a,k=t.SV,j=t.t,n=n.b +case 2:if(!(i=q.f,i!=null)){s=3 +break}h=n.i(0,i) +if(h==null)throw A.d(A.bHx('Node "'+A.j(q.f)+'" could not be found')) +q.f=null +q.c=h +i=A.b([],k) +g=A.b([],j) +i.push(h.c) +g.push(-1) +q.d=new A.a7A(h,i,g) +g=q.Bn(new A.aB0(h)) +if(o.b(g))i=g +else{i=new A.aM($.aK,p) +i.a=8 +i.c=g}s=4 +return A.x(i,$async$v1) +case 4:case 5:if(!!0){s=6 +break}i=q.d +i=i==null?null:i.H() +if(!(i===!0)){s=6 +break}i=q.d +s=7 +return A.x(B.b.ga_(i.b).a[B.b.ga_(i.c)].YN(q),$async$v1) +case 7:s=5 +break +case 6:f="@"+q.c.a +i=l.i(0,f) +i.toString +m.uB(f,A.iA(i)+1) +i=q.Bn(new A.aB1(h)) +if(!o.b(i)){g=new A.aM($.aK,p) +g.a=8 +g.c=i +i=g}s=8 +return A.x(i,$async$v1) +case 8:q.d=q.c=null +s=2 +break +case 3:return A.p(null,r)}}) +return A.q($async$v1,r)}, +Kd(a){return this.aPG(a)}, +aPG(a){var s=0,r=A.r(t.H),q=this,p +var $async$Kd=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=A.bN8(a,q.a) +p.bR(0) +s=2 +return A.x(p.d.a,$async$Kd) +case 2:return A.p(null,r)}}) +return A.q($async$Kd,r)}, +Dg(a){return this.aPE(a)}, +aPE(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h +var $async$Dg=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:i=A.b([],t.dD) +h=A.b([],t.t) +for(p=q.a,o=t.wE,n=0;n<1;++n){m=p[n].LS(a) +i.push(o.a(m))}p=i.length,n=0 +case 2:if(!(n=a.a.length)throw A.d(A.hp("Invalid option index chosen in a dialogue: "+k)) +j=a.a[k] +if(!j.r)throw A.d(A.hp("A dialogue view selected a disabled option: "+j.j(0))) +p=q.Bn(new A.aB2(j)) +s=6 +return A.x(t.r.b(p)?p:A.cO(p,t.H),$async$Dg) +case 6:q.d.adf(j.f) +return A.p(null,r)}}) +return A.q($async$Dg,r)}, +Kc(a){return this.aPF(a)}, +aPF(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$Kc=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=[a.pA(q)] +if(a instanceof A.To)for(p=0;p<1;++p)o.push(null) +o=q.a34(o) +s=2 +return A.x(t.r.b(o)?o:A.cO(o,t.H),$async$Kc) +case 2:return A.p(null,r)}}) +return A.q($async$Kc,r)}, +Nj(a){return this.b_d(a)}, +b_d(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$Nj=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=q.c +o=q.d +s=2 +return A.x(q.v1(a),$async$Nj) +case 2:q.c=p +q.d=o +return A.p(null,r)}}) +return A.q($async$Nj,r)}, +a34(a){var s=t.h2,r=A.ab(new A.ca(a,s),!0,s.h("z.E")) +s=r.length +if(s!==0)if(s===1)return r[0] +else return A.f2(r,t.H)}, +Bn(a){var s,r,q=[] +for(s=this.a,r=0;r<1;++r)q.push(a.$1(s[r])) +return this.a34(q)}} +A.aB3.prototype={ +$1(a){if(a.vP$!=null)throw A.d(A.hp("DialogueView is currently attached to another DialogueRunner")) +a.vP$=this.a}, +$S:52} +A.aB4.prototype={ +$1(a){return null}, +$S:52} +A.aB5.prototype={ +$1(a){return null}, +$S:52} +A.aB6.prototype={ +$1(a){return a.vP$=null}, +$S:52} +A.aB0.prototype={ +$1(a){return a.Yk(this.a)}, +$S:52} +A.aB1.prototype={ +$1(a){return a.Yj(this.a)}, +$S:52} +A.aB2.prototype={ +$1(a){return null}, +$S:52} +A.b3w.prototype={ +bR(a){var s,r,q,p,o,n,m,l,k=this +for(s=t.wF,r=k.c,q=t.H,p=t.L0,o=k.b,n=k.a,m=0;m<1;++m){l=o[m].zI(n) +if(p.b(l)){r[m]=s.a(l).cu(new A.b3x(k,m),q);++k.e}else continue}if(k.e===0)k.ae2(0)}, +ae2(a){var s +for(s=0;s<1;++s)continue +if(this.e===0)this.d.fl(0)}} +A.b3x.prototype={ +$1(a){var s,r=this.a +r.c[this.b]=null +s=--r.e +if(s===0)r.ae2(0) +return null}, +$S:7} +A.uS.prototype={ +zI(a){return!1}} +A.BZ.prototype={ +j(a){return"SyntaxError: "+this.a}, +$ic4:1} +A.Au.prototype={ +j(a){return"NameError: "+this.a}, +$ic4:1} +A.Cr.prototype={ +j(a){return"TypeError: "+this.a}, +$ic4:1} +A.a2l.prototype={ +j(a){return"DialogueError: "+this.a}, +$ic4:1} +A.aFf.prototype={ +gF(a){return this.a.a}, +aN8(a){var s=this.a +if(!s.aR(0,a))return null +s=s.i(0,a) +s.toString +return new A.aFg(s)}} +A.aFg.prototype={ +$3(a,b,c){var s=this.a +s.b_W(a,c) +s.b0v(b) +s.gb0p() +$label0$0:{s=A.X(A.kg("Bad return type"))}return s}, +$S:10} +A.pC.prototype={} +A.Wd.prototype={ +agL(){var s,r,q,p,o,n,m,l,k,j=this +for(s=j.c;r=j.e,q=r> is only allowed inside nodes")}}else if(B.iF.a===p.a&&B.iF.b==p.b)break +else if(B.b5.a===p.a&&B.b5.b==p.b)j.e=r+1 +else j.cp("unexpected token: "+p.j(0))}for(r=j.a,q=r.b,r=r.c;n=j.e,m=n> command cannot be used inside a node",n) +a.push(c)}else{h=m.a +if(h!==B.dr)if(h!==B.lr)if(!(B.c0.a===h&&B.c0.b==m.b))d=B.eY.a===h&&B.eY.b==m.b +else d=!0 +else d=!0 +else d=!0 +if(d){l=b.afT() +k=b.YA() +i=b.afS() +n=b.e +n=n> must be a string expression",p) +q=null}}e.bE(0,B.ca) +e.bE(0,B.b5) +return s?new A.a5Q(q):new A.aeq(q)}else if(d.k(0,B.lB)){e.bE(0,B.aT) +e.bE(0,B.lB) +e.bE(0,B.ca) +e.bE(0,B.b5) +return B.L9}else if(d.k(0,B.lD)){e.bE(0,B.aT) +e.bE(0,B.lD) +e.bE(0,B.c0) +p=e.e +o=e.pY() +if(o.gbg(0)!==B.aj)e.wA("<> command expects a numeric argument",p) +e.bE(0,B.d1) +e.bE(0,B.ca) +e.ui() +return new A.aew(t.y3.a(o))}else if(d.k(0,B.lA)){e.bE(0,B.aT) +e.bE(0,B.lA) +e.bE(0,B.c0) +n=e.fq() +if(n.a!==B.lt)e.cp("variable expected") +r=n.b +r.toString +m=e.d +m=m==null?null:m.a.aR(0,r) +if(m===!0){m=e.d +m.toString +l=m}else{l=e.a.c +if(!l.a.aR(0,r)){e.zB("variable "+r+" has not been declared") +l=null}}k=l.NJ(r);++e.e +j=e.fq() +if(!(j.k(0,B.e6)||e.gabn().aR(0,j)))e.cp("an assignment operator is expected") +m=++e.e +o=e.pY() +if(k.gbg(0)!==o.gbg(0))e.wA("variable "+r+" of type "+k.gbg(0).b+" cannot be assigned a value of type "+o.gbg(0).b,m) +if(j.k(0,B.e6))i=o +else{h=e.gabn().i(0,j) +h.toString +i=A.bTO(h,k,o,m,e.gZC())}e.bE(0,B.d1) +e.bE(0,B.ca) +e.ui() +return new A.abl(r,i,l)}else if(d.k(0,B.lx)||d.k(0,B.lz))return e.aXc() +else if(d.k(0,B.lw))return e.aXb() +else if(d.k(0,B.fU)||d.k(0,B.fT)||d.k(0,B.fV)){++e.e +e.cp("this command is only allowed after an <>")}else{e.bE(0,B.aT) +g=e.fq();++e.e +r=g.b +r.toString +if(!e.a.e.a.aR(0,r)){--e.e +e.zB("Unknown user-defined command <<"+r+">>")}f=e.YA() +e.bE(0,B.ca) +e.ui() +return new A.To(r,f)}}, +aXe(){var s,r,q,p,o=this,n=A.b([],t.Zq) +n.push(o.agI("if")) +for(s=o.c,r=!1;!0;){q=o.e+1 +p=q> is allowed") +n.push(o.aXd()) +r=!0}else if(B.fV.a===p.a&&B.fV.b==p.b){o.bE(0,B.aT) +o.bE(0,B.fV) +o.bE(0,B.ca) +o.ui() +break}else o.cp("<> expected")}return new A.a54(n)}, +agI(a){var s,r,q,p=this +p.bE(0,B.aT) +p.bE(0,a==="if"?B.ix:B.fU) +p.bE(0,B.c0) +s=p.e +r=p.pY() +if(r.gbg(0)!==B.bu){p.e=s +p.FH("expression in an <<"+a+">> command must be boolean")}p.bE(0,B.d1) +p.bE(0,B.ca) +p.bE(0,B.b5) +if(p.fq().k(0,B.aT))return new A.zE(t.LK.a(r),B.mA) +if(!p.fq().k(0,B.dt))p.cp("the body of the <<"+a+">> command must be indented") +p.bE(0,B.dt) +q=p.Ml() +p.bE(0,B.lF) +return new A.zE(t.LK.a(r),q)}, +aXd(){var s,r=this +r.bE(0,B.aT) +r.bE(0,B.fT) +r.bE(0,B.ca) +r.bE(0,B.b5) +if(r.fq().k(0,B.aT))return B.We +if(!r.fq().k(0,B.dt))r.cp("the body of the <> command must be indented") +r.bE(0,B.dt) +s=r.Ml() +r.bE(0,B.lF) +return new A.zE(B.mB,s)}, +aXc(){var s,r,q,p,o,n,m,l,k,j=this,i="a type is expected" +j.bE(0,B.aT) +j.fq().k(0,B.lx) +s=j.fq().k(0,B.lz);++j.e +j.bE(0,B.c0) +if(s)if(j.d==null)j.d=new A.ae8(A.D(t.N,t.z)) +r=j.fq() +if(r.a!==B.lt)j.cp("variable name expected") +q=r.b +q.toString +if(s&&j.d.a.aR(0,q))j.zB("redeclaration of local variable "+q) +p=j.a.c +if(p.a.aR(0,q)){o="variable "+q +j.zB(s?o+" shadows a global variable with the same name":o+" has already been declared")}++j.e +n=A.bn("expression") +if(j.fq().k(0,B.iG)){if(s)j.cp("assignment operator is expected") +j.bE(0,B.iG) +m=j.fq() +l=$.bdu().i(0,m) +if(l==null)j.cp(i) +n.shb(l) +j.bE(0,m)}else if(j.fq().k(0,B.e6)){j.bE(0,B.e6) +n.shb(j.pY()) +if(j.fq().k(0,B.iG)){j.bE(0,B.iG) +m=j.fq() +l=$.bdu().i(0,m) +if(l==null)j.cp(i) +if(l.gbg(0)!==J.bdJ(n.bl()))j.FH("the expression evaluates to "+J.bdJ(n.bl()).b+" type") +j.bE(0,m)}}else j.cp("expected `= value` or `as Type`") +j.bE(0,B.d1) +j.bE(0,B.ca) +j.ui() +if(s){p=$.bdu().gbm(0) +k=J.l5(new A.bg(p,new A.b4t(n),A.w(p).h("bg")).ga9(0)) +j.d.uB(q,k) +p=n.bl() +o=j.d +o.toString +return new A.a6l(q,p,o)}else{p.uB(q,J.l5(n.bl())) +return B.Kd}}, +aXb(){var s,r,q,p,o,n,m,l=this +l.bE(0,B.aT) +l.bE(0,B.lw) +l.bE(0,B.c0) +if(l.fq().a===B.t3){s=l.fq().b +s.toString;++l.e +r=s}else r=null +q=A.b([],t.T) +s=l.a.f +p=s.a +o=l.c +while(!0){n=l.e +m=n=b))break +q=k.e +p=qr))break +o=k.RW(o,n) +q=k.e +m=q=q.length)return!0 +else if(q[r].k(0,B.b5)){++s.e +return!0}s.cp("expected end of line")}, +MV(a,b,c){var s=this,r=s.c +if(s.e>=r.length)s.cp("unexpected end of file") +if(r[s.e].k(0,b)){++s.e +return!0}return s.cp(c==null?"unexpected token":c)}, +bE(a,b){return this.MV(0,b,null)}, +Zk(a){var s=this,r=s.e +if(s.c[r].a===a){s.e=r+1 +return!0}return s.cp("unexpected token")}, +LO(a,b){return this.Qi(a,b,A.bSA())}, +zB(a){return this.LO(a,null)}, +a1E(a,b){return this.Qi(a,b,A.bSB())}, +cp(a){return this.a1E(a,null)}, +wA(a,b){return this.Qi(a,b,A.bSC())}, +FH(a){return this.wA(a,null)}, +Qi(a,b,c){var s=b==null?this.e:b,r=A.bhq(this.b,s).EX(0)[s].b +r.toString +throw A.d(c.$1(a+"\n"+r+"\n"))}} +A.b4t.prototype={ +$1(a){return a.gbg(0)===J.bdJ(this.a.bl())}, +$S:826} +A.b4g.prototype={} +A.alb.prototype={} +A.bp.prototype={ +j(a){var s=this.b +if(s==null)s="" +else s="('"+s+"')" +return"Token."+this.a.b+s}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.bp&&b.a===this.a&&b.b==this.b}} +A.bT.prototype={ +W(){return"TokenType."+this.b}} +A.akW.prototype={ +EX(a){var s,r,q=this +q.d.push(0) +s=q.c +s.push(q.gaVk()) +for(r=q.a.length;q.f!==r;)if(!B.b.afz(s))q.n4(0,"invalid token") +if(s.length>1)q.n4(0,"incomplete node body") +s.pop() +s=q.b +if(s.length===q.e)s.push(new A.bp(B.ls,q.Bm(q.f))) +return s}, +gkP(){var s=this.f,r=this.a +return s>"')}}else s=!0}else s=!0 +return s}, +aVj(){var s,r=this,q=r.Vg() +if(q)r.c.push(r.gY1()) +if(!q){q=r.adr() +if(q){s=r.c +s.pop() +s.pop()}q=q||r.adw()||r.adu()}else q=!0 +return q}, +aVE(){var s,r=this +if(!r.iS())if(!r.Vf())if(!r.Vh())if(!r.Vi())if(!r.Vk())if(!r.Vj()){s=r.fn(125) +if(s)r.dS(B.d1,r.f-1) +if(s)r.c.pop()}else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +return s}, +aVp(){var s=this +if(!s.iS())if(!s.Vf())if(!s.Vh())if(!s.Vi())if(!s.Vk())if(!s.Vj())s.c.pop() +return!0}, +aVh(){var s,r,q=this +if(!q.iS()){s=q.aQH() +if(s){r=q.c +r.pop() +r.pop()}s=s||q.Vf()||q.Vh()||q.Vi()||q.Vk()||q.Vj()}else s=!0 +return s}, +aVn(){var s,r=this,q=r.gkP() +if(q===13||q===10)r.n4(0,'missing markup tag close token "]"') +s=r.fn(47) +if(s)r.dS(B.iw,r.f-1) +if(!s){s=r.aQN() +if(s)r.c.pop() +if(!s)r.c.push(r.gaVo())}return!0}, +fn(a){if(this.gkP()===a){++this.f +return!0}return!1}, +Ve(){var s=this,r=s.f +s.iS() +if(s.f===s.a.length)return!0 +if(s.r_())return!0 +else{s.f=r +return!1}}, +Du(){var s,r,q,p,o=this,n=o.f +o.iS() +if(o.fn(47)&&o.fn(47)){for(s=o.a,r=s.length;q=o.f,q!==r;){p=qo}, +r_(){var s,r=this,q=r.gkP(),p=q===13 +if(p||q===10){s=r.f++ +if(p&&r.gkP()===10)++r.f;++r.r +r.w=r.f +r.dS(B.b5,s) +return!0}return!1}, +aQJ(){var s,r,q,p,o=this,n=o.f +if(o.fn(35)){o.iS() +for(s=o.a,r=s.length;q=o.f,q!==r;){p=q=3&&r.r_()){r.zO(B.b5) +r.dS(B.iF,q) +return!0}r.f=q +return!1}, +aQK(){var s,r=this,q=r.f +for(s=0;r.fn(45);)++s +if(s>=3&&r.r_()){r.zO(B.b5) +r.dS(B.lE,q) +return!0}r.f=q +return!1}, +aQC(){var s=this,r=s.f +if(s.fn(61)&&s.fn(61)&&s.fn(61)){s.f-=3 +s.adt() +s.f+=3 +if(s.r_())s.zO(B.b5) +else if(s.f!==s.a.length){s.f=r +return!1}s.dS(B.Hf,r) +return!0}s.f=r +return!1}, +Dv(){var s,r,q,p,o,n=this,m=n.f +if(A.bhr(n.gkP())){s=++n.f +for(r=n.a,q=r.length;!0;){p=s=97&&p<=122))o=p>=65&&p<=90||p===95 +else o=!0 +if(!o)o=p>=48&&p<=57 +else o=!0 +if(o){++s +n.f=s}else break}n.dS(new A.bp(B.e5,B.d.am(r,m,s)),m) +return!0}return!1}, +aQL(){var s,r,q,p,o,n,m=this,l=m.f +for(s=m.a,r=s.length,q=r-1,p=l;p!==r;++p,m.f=p){o=pB.b.ga_(s)){s.push(p) +n.dS(B.dt,m)}for(r=n.b,q=n.e;pB.b.ga_(s))n.n4(0,"inconsistent indentation") +return!0}, +aQB(){var s=this,r=s.f +if(s.fn(45)&&s.fn(62)){s.dS(B.lO,r) +return!0}s.f=r +return!1}, +Vd(){var s=this,r=s.f +if(s.fn(60)&&s.fn(60)){s.dS(B.aT,r) +return!0}s.f=r +return!1}, +adr(){var s=this,r=s.f +if(s.fn(62)&&s.fn(62)){s.dS(B.ca,r) +return!0}s.f=r +return!1}, +aQD(){var s=this,r=s.f,q=s.a,p=new A.Ra(q,r,r),o=q.length +A.GW(r,0,o,null) +if(r>0&&r")).anQ(0,new A.b3v()) +r=A.aT2(s,1,s.$ti.h("z.E")) +if(!r.gaA(0)){q=r.ga9(0) +if(q.a===B.dr){s=q.b +s.toString +s=B.d.iT(s," ")}else s=!1 +if(s)p.fn(32)}}p.dS(B.t7,p.f-1) +return!0}return!1}, +Vg(){var s=this.fn(123) +if(s)this.dS(B.c0,this.f-1) +return s}, +aQH(){var s=this,r=s.f +if(s.fn(62)&&s.fn(62)){s.dS(B.d1,r) +s.dS(B.ca,r) +return!0}s.f=r +return!1}, +adu(){var s,r,q,p=this,o=p.f,n=p.a,m=n.length,l=m-1,k=o,j=k +while(!0){if(!(k!==m)){m=k +break}s=ko){p.dS(new A.bp(B.dr,B.d.am(n,o,m)),o) +return!0}return!1}, +aQE(){var s=this +if(s.gkP()===62&&s.gaVR()===62){s.dS(B.agc,s.f) +s.f+=2 +return!0}return!1}, +Vf(){var s,r,q=this,p=q.f +if(q.Dv()){s=B.b.ga_(q.b).b +s.toString +r=B.oG.i(0,s) +if(r!=null){q.YI() +q.dS(r,p)}return!0}return!1}, +Vh(){var s,r=this,q=r.f +if(r.fn(36)){if(r.Dv()){s=r.YI().b +s.toString +r.dS(new A.bp(B.lt,"$"+s),q) +return!0}--r.f +r.n4(0,"invalid variable name")}return!1}, +Vi(){var s=this,r=s.f +if(s.ads()){if(s.fn(46))s.ads() +s.dS(new A.bp(B.Hc,B.d.am(s.a,r,s.f)),r) +return!0}return!1}, +ads(){var s,r,q,p,o +for(s=this.a,r=s.length,q=!1;p=this.f,p!==r;q=!0){o=p=48&&o<=57)this.f=p+1 +else break}return q}, +Vj(){var s,r=this,q=r.f,p=r.a,o=p.length +if(q+1l+1){m.dS(new A.bp(B.t2,B.d.am(s,l,p)),l) +return!0}}m.f=l +return!1}, +n4(a,b){throw A.d(A.bKM(b+"\n"+this.Bm(this.f)+"\n"))}, +Bm(a){var s,r,q,p,o=this,n=o.axu(a),m=o.axv(a) +if(n-m<=74){s=B.d.am(o.a,m,n) +r=B.d.a2(" ",a-m)}else{q=a-m +if(q<=50){s=B.d.am(o.a,m,m+74)+"..." +r=B.d.a2(" ",q)}else{q=o.a +if(n-a<=40){s="..."+B.d.am(q,n-77,n) +r=B.d.a2(" ",a-n+80)}else{s="..."+B.d.am(q,a-36,a+35)+"..." +r=B.d.a2(" ",39)}}}q=o.f +p=o.r +return"> at line "+(q<=n?p:p-1)+" column "+(a-m+1)+":\n> "+s+"\n> "+r+"^"}, +axv(a){var s,r,q=a-1 +for(s=this.a;q>=0;){r=s.charCodeAt(q) +if(r===10||r===13)break;--q}return q+1}, +axu(a){var s,r,q,p +for(s=this.a,r=s.length,q=a;q> command with negative duration: "+A.j(r))) +return A.vb(A.dE(B.c.aw(r*1e6),0),null,t.H)}} +A.Ey.prototype={ +YN(a){var s,r,q,p,o +for(s=this.a,r=s.length,q=0;q" +return"DialogueLine("+r+q+")"}, +k(a,b){var s,r +if(b==null)return!1 +if(b instanceof A.o4){s=this.d +s.toString +r=b.d +r.toString +s=s===r&&this.a==b.a}else s=!1 +return s}} +A.Mj.prototype={ +z5(a){var s +this.a0F(0) +s=this.e +s=s==null?null:s.gm(s) +this.r=s!==!1}, +j(a){var s=this.a,r=s==null?"":s.b+": ",q=this.r?"":" #disabled" +s=this.d +s.toString +return"Option("+r+s+q+")"}} +A.aN.prototype={ +gbg(a){var s +$label0$0:{if(this instanceof A.d7){s=B.aj +break $label0$0}if(this instanceof A.fo){s=B.bu +break $label0$0}if(this instanceof A.jX){s=B.bQ +break $label0$0}s=B.V_ +break $label0$0}return s}} +A.EU.prototype={ +W(){return"ExpressionType."+this.b}} +A.d7.prototype={} +A.jX.prototype={} +A.fo.prototype={} +A.zm.prototype={} +A.a_T.prototype={ +gm(a){var s,r=this.a,q=r.gm(r) +if(typeof q=="number")return q!==0 +if(typeof q=="string"){s=B.d.eC(q) +if($.br7.G(0,s))return!0 +if($.br6.G(0,s))return!1 +throw A.d(A.hp('String value "'+q+'" cannot be interpreted as a boolean'))}return A.u9(q)}} +A.DL.prototype={ +gm(a){var s=this.a +return B.c.d0(s.gm(s))}} +A.En.prototype={ +gm(a){var s=this.a,r=s.gm(s),q=B.c.bK(r) +return r===q?q-1:q}} +A.Eo.prototype={ +gm(a){var s=this.a,r=s.gm(s) +return r-B.c.aw(r)}} +A.a2o.prototype={ +gm(a){var s=this.a,r=B.c.aw(s.gm(s)) +if(r<=0)throw A.d(A.hp("Argument to dice() must be positive: "+r)) +return this.b.w.f9(r)+1}} +A.EZ.prototype={ +gm(a){var s=this.a +return B.c.bK(s.gm(s))}} +A.ak4.prototype={ +gm(a){var s=this.a +if(s.gm(s)){s=this.b +s=s.gm(s)}else{s=this.c +s=s.gm(s)}return s}} +A.ak5.prototype={ +gm(a){var s=this.a +if(s.gm(s)){s=this.b +s=s.gm(s)}else{s=this.c +s=s.gm(s)}return s}} +A.ak6.prototype={ +gm(a){var s=this.a +if(s.gm(s)){s=this.b +s=s.gm(s)}else{s=this.c +s=s.gm(s)}return s}} +A.Fp.prototype={ +gm(a){var s=this.a,r=s.gm(s),q=B.c.d0(r) +return r===q?q+1:q}} +A.Fv.prototype={ +gm(a){var s=this.a +return B.c.aw(s.gm(s))}} +A.a7J.prototype={ +gm(a){var s,r=this.a,q=r.gm(r) +if(A.kZ(q))return q?1:0 +if(typeof q=="string"){s=A.bcN(q) +if(s==null)throw A.d(A.hp('Unable to convert string "'+q+'" into a number')) +return s}return A.iA(q)}} +A.a8Y.prototype={ +gm(a){var s,r,q,p=this.a,o=p.gm(p) +p=this.b +s=A.a5(p).h("W<1,h>") +r=A.ab(new A.W(p,new A.aNR(),s),!1,s.h("aI.E")) +s=this.c.x +s===$&&A.c() +q=s.a.$2(o,r) +if(B.d.G(q,"%")){p=B.c.j(o) +return A.ea(q,"%",p)}else return q}} +A.aNR.prototype={ +$1(a){return a.gm(a)}, +$S:828} +A.a9A.prototype={ +gm(a){return this.a.w.aV()}} +A.a9B.prototype={ +gm(a){var s,r=this.a,q=B.c.aw(r.gm(r)) +r=this.b +s=B.c.aw(r.gm(r)) +if(s0}else throw A.d(A.hp('Unknown node name "'+r+'"'))}} +A.AC.prototype={ +gm(a){return this.a}} +A.HT.prototype={ +gm(a){return this.a}} +A.DC.prototype={ +gm(a){return this.a}} +A.aev.prototype={ +gm(a){return null}} +A.amc.prototype={ +gm(a){var s=this.a,r=this.b +return s.gm(s)+r.gm(r)}} +A.aqv.prototype={ +gm(a){var s=this.a,r=this.b +return s.gm(s)+r.gm(r)}} +A.Dr.prototype={ +gm(a){var s=this.a +if(s.gm(s)){s=this.b +s=s.gm(s)}else s=!1 +return s}} +A.Ez.prototype={ +gm(a){var s,r=this.a,q=r.gm(r) +r=this.b +s=r.gm(r) +if(s===0)throw A.d(A.hp("Division by zero")) +return q/s}} +A.amg.prototype={ +gm(a){var s=this.a,r=this.b +return s.gm(s)===r.gm(r)}} +A.aqx.prototype={ +gm(a){var s=this.a,r=this.b +return s.gm(s)===r.gm(r)}} +A.afW.prototype={ +gm(a){var s=this.a,r=this.b +return s.gm(s)===r.gm(r)}} +A.Fe.prototype={ +gm(a){var s=this.a,r=this.b +return s.gm(s)>=r.gm(r)}} +A.Ff.prototype={ +gm(a){var s=this.a,r=this.b +return s.gm(s)>r.gm(r)}} +A.FJ.prototype={ +gm(a){var s=this.a,r=this.b +return s.gm(s)<=r.gm(r)}} +A.FK.prototype={ +gm(a){var s=this.a,r=this.b +return s.gm(s)r)a.f+=s +if(a.c>r)a.r+=s}, +$S:238} +A.a5o.prototype={} +A.G2.prototype={ +gF(a){return this.r-this.f}, +bF(a){var s,r=this +r.f=B.c.bK(r.b) +r.r=B.c.bK(r.c) +s=r.d +if(s!=null)s.al(0,new A.aKc(r))}} +A.aKc.prototype={ +$2(a,b){var s=this.a.e +s.toString +s.u(0,a,b.gm(b))}, +$S:830} +A.Pl.prototype={ +gar(a){var s=new A.a7A(this,A.b([],t.SV),A.b([],t.t)) +s.adf(this.c) +return s}, +j(a){return"Node("+this.a+")"}} +A.a7A.prototype={ +ga1(a){return B.b.ga_(this.b).a[B.b.ga_(this.c)]}, +H(){var s,r +for(s=this.c,r=this.b;s.length!==0;)if(B.b.ga_(s)+1=0;--s){q=a[s] +if(q instanceof A.ny&&q.d===B.rv)r=q}if(r!=null)r.c.push(this.gES()) +for(s=b.length-1,p=t.rM,o=t.KJ,n=this.gES(),m=this.e,l=null;s>=0;--s){q=b[s] +if(q instanceof A.ny&&q.d===B.rv){if(l!=null)m.push(l) +l=new A.We(A.b([],o),q) +q.c.push(n)}else if(p.b(q)){if(l==null)l=new A.We(A.b([],o),r) +l.a.push(q)}}if(l!=null)m.push(l)}, +lw(a,b,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e="StrokeContent#draw",d="StrokeContent#buildPath",c="StrokeContent#drawPath" +A.fP(e) +s=new Float64Array(3) +r=new A.dX(s) +r.kG(0,0,0) +r.Jo(b) +q=new Float64Array(3) +p=new A.dX(q) +p.kG(37394.729378,39575.2343807,0) +p.Jo(b) +if(s[0]===q[0]||s[1]===q[1]){A.dV(e) +return}s=f.r +q=B.f.bX(B.c.ai(a0/255*f.x.gm(0)/100*255),0,255) +o=s.gA(s).a +s.sA(0,A.S(q,o>>>16&255,o>>>8&255,o&255)) +s.sbM(f.w.gm(0)*A.bfM(b)) +if(s.gbM()<=0){A.dV(e) +return}n=f.as +if(n!=null){m=n.gm(0) +if(m===0)s.snk(null) +else if(m!==f.at)s.snk(f.d.Nr(m)) +f.at=m}for(q=f.e,o=f.a,l=b.a,k=0;k=0;--h)o.pp(0,i[h].dw(),B.h,l) +A.dV(d) +A.fP(c) +g=f.ax +if(g!=null)g.V9(a,o) +a.a3(f.IZ(o,b),s) +A.dV(c)}}A.dV(e)}, +atO(a4,a5,a6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2=this,a3="StrokeContent#applyTrimPath" +A.fP(a3) +s=a5.b +if(s==null){A.dV(a3) +return}r=a2.a +r.bF(0) +for(q=a5.a,p=q.length-1,o=a6.a;p>=0;--p)r.pp(0,q[p].dw(),B.h,o) +n=s.e.gm(0)/100 +m=s.f.gm(0)/100 +l=s.r.gm(0) +if(n<0.01&&m>0.99){a4.a3(r,a2.r) +A.dV(a3) +return}r=r.tu() +k=B.b.nd(A.ab(r,!0,A.w(r).h("z.E")),0,new A.ax9()) +j=k*(l/360) +i=k*n+j +h=Math.min(k*m+j,i+k-1) +for(p=q.length-1,r=a2.b,l=a2.r,g=h>k,f=h-k,e=i>k,d=i-k,c=0;p>=0;--p){b=q[p].dw().az(0,o) +r.bF(0) +r.mU(0,b,B.h) +b=r.tu() +a=A.ab(b,!0,A.w(b).h("z.E")) +a0=a.length!==0?J.bo(B.b.ga9(a)):0 +if(g&&fh))if(b<=h&&ib?1:(h-c)/a0,0) +a4.a3(a2.IZ(r,a6),l)}}c+=a0}A.dV(a3)}, +j4(a,b,c){var s,r,q,p,o,n,m,l="StrokeContent#getBounds" +A.fP(l) +s=this.a +s.bF(0) +for(r=this.e,q=b.a,p=0;p=0;--r)A.bLX(a,s[r])}} +A.uM.prototype={ +a1I(a,b,c,d,e,f){var s,r,q,p,o +if(e!=null){s=A.Cp(e) +s.aaN(b) +s.an(0,this.gwj()) +this.x=s}r=A.b([],t.oJ) +for(s=this.f,q=s.length-1,p=t.m3;q>=0;--q){o=s[q] +if(p.b(o))r.push(o)}for(q=r.length-1;q>=0;--q)r[q].aLL(s)}, +ET(){this.r.r=!0}, +la(a,b){var s,r,q,p=A.b([],t.kQ) +B.b.I(p,a) +for(s=this.f,r=s.length-1;r>=0;--r){q=s[r] +q.la(p,B.b.cI(s,0,r)) +p.push(q)}}, +dw(){var s,r,q,p,o,n=this,m=n.b +m.ci() +s=n.x +if(s!=null)s.qf().vs(m) +s=n.c +s.bF(0) +if(n.e)return s +for(r=n.f,q=r.length-1,p=t.rM,m=m.a;q>=0;--q){o=r[q] +if(p.b(o))s.pp(0,o.dw(),B.h,m)}return s}, +lw(a,b,c){var s,r,q,p,o,n,m=this +if(m.e)return +s=m.b +b.vs(s) +r=m.x +if(r!=null){s.bL(0,r.qf()) +r=m.x +q=B.c.ai(((r==null?null:r.z)==null?100:r.z.gm(0))/100*c/255*255)}else q=c +for(r=m.f,p=r.length-1,o=t.R7;p>=0;--p){n=r[p] +if(o.b(n))n.lw(a,s,q)}}, +j4(a,b,c){var s,r,q,p,o,n=this.b +b.vs(n) +s=this.x +if(s!=null)n.bL(0,s.qf()) +for(s=this.f,r=s.length-1,q=t.R7,p=B.M;r>=0;--r){o=s[r] +if(q.b(o))p=p.jj(o.j4(0,n,c))}return p}, +$idT:1, +$ii8:1, +$imq:1} +A.MG.prototype={ +w6(){this.w=!1 +this.c.r=!0}, +la(a,b){var s,r,q,p +for(s=this.r.a,r=this.gpO(),q=0;q>>16&255,o>>>8&255,o&255)) +s.skX(!0) +n=j.y +if(n!=null){m=n.gm(0) +if(m===0)s.snk(null) +else if(m!==j.z)s.snk(r.Nr(m)) +j.z=m}r=j.a +r.bF(0) +for(p=j.e,l=0;l>>16&255,m>>>8&255,m&255)) +i.skX(!0) +a.bU(0) +a.az(0,b.a) +l=k.CW +if(l!=null)l.V9(a,s) +a.a3(s,i) +a.bw(0) +A.dV(j)}, +j4(a,b,c){var s,r,q,p=this.e +p.bF(0) +for(s=this.r,r=b.a,q=0;qk)o=k +m=d.e +j=m.gm(m) +m=j.a +l=m+q +i=j.b +h=i-p +g=h+o +s.a4(0,l,g) +i+=p +s.q(0,l,i-o) +f=o>0 +if(f){e=2*o +s.vj(0,new A.A(l-e,i-e,l,i),0,1.5707963267948966,!1)}m-=q +s.q(0,m+o,i) +if(f){e=2*o +s.vj(0,new A.A(m,i-e,m+e,i),1.5707963267948966,1.5707963267948966,!1)}s.q(0,m,g) +if(f){i=2*o +s.vj(0,new A.A(m,h,m+i,h+i),3.141592653589793,1.5707963267948966,!1)}s.q(0,l-o,h) +if(f){m=2*o +s.vj(0,new A.A(l-m,h,l,h+m),4.71238898038469,1.5707963267948966,!1)}s.T(0) +d.w.d9(s) +d.y=!0 +return s}, +$idT:1, +$imq:1} +A.QW.prototype={ +aLL(a){var s,r,q,p=this +if(p.x!=null)return +s=B.b.Ep(a,p)-1 +r=A.b([],t.kQ) +for(;s>=0;){r.push(a[s]) +B.b.di(a,s);--s}q=t.Ba +p.x=A.bD6(p.c,p.d,"Repeater",A.ab(new A.cz(r,q),!0,q.h("aI.E")),null,p.e.e)}, +la(a,b){this.x.la(a,b)}, +dw(){var s,r,q,p,o,n,m=this,l=m.x.dw(),k=m.b +k.bF(0) +s=m.f.gm(0) +r=m.r.gm(0) +for(q=B.c.aw(s)-1,p=m.a,o=m.w,n=p.a;q>=0;--q){o.a_r(q+r).vs(p) +k.pp(0,l,B.h,n)}return k}, +lw(a,b,c){var s,r,q,p,o=this,n=o.f.gm(0),m=o.r.gm(0),l=o.w,k=l.Q.gm(0)/100,j=l.as.gm(0)/100 +for(s=B.c.aw(n)-1,r=o.a;s>=0;--s){b.vs(r) +r.bL(0,l.a_r(s+m)) +q=A.ap(k,j,s/n) +q.toString +p=o.x +p.toString +p.lw(a,r,B.c.ai(c*q))}}, +j4(a,b,c){return this.x.j4(0,b,c)}, +aCe(){this.c.r=!0}, +$idT:1, +$ii8:1, +$ibfe:1, +$imq:1} +A.Bp.prototype={ +aEg(){this.a.r=!0}, +la(a,b){}, +aVG(b8){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.a +if(b7.length<=2)return b8 +s=this.c.gm(0) +if(s===0)return b8 +r=this.ayt(b8) +q=b8.b +r.b=new A.i(q.a,q.b) +p=r.a +for(q=!b8.c,o=0,n=0;m=b7.length,n=0;s=o){p=f[s] +o=s-1 +n=f.length +m=f[o-n*A.OU(o,n)] +n=s===0 +l=n&&r?a.b:m.c +k=n&&r?l:m.b +j=p.a +if(!a.c)i=n||s===f.length-1 +else i=!1 +if(l.a===k.a&&l.b===k.b)n=l.a===j.a&&l.b===j.b&&!i +else n=!1 +q=n?q+2:q+1}h=this.d +if(h==null||h.a.length!==q){g=A.b([],t.hN) +for(s=0;s>>24&255,q.gm(r)>>>16&255,q.gm(r)>>>8&255,q.gm(r)&255)) +p.a0z(a,b,c)}} +A.ny.prototype={ +aKB(){var s,r +for(s=this.c,r=0;rs.wJ())a=s.wJ() +if(a===s.d)return +s.d=a +if(r.XB(a))s.D()}, +D(){var s,r,q +for(s=this.a,r=s.length,q=0;q=q.grR())return q +for(s=r.length-2;s>=1;--s){q=r[s] +if(this.b===q)continue +if(a>=q.grR()&&a>>16&255,o.gm(o)>>>8&255,o.gm(o)&255) +p=k.f +p===$&&A.c() +m=p.gm(0) +l=k.r +if(l==null){l=$.G().B() +l.sA(0,n) +l.snk(new A.pF(B.a0,m*0.57735+0.5)) +k.r=l}a.a3(b.dz(new A.i(j*r,q*r)),l)}} +A.Nw.prototype={ +a1K(a){var s,r,q,p +for(s=a.length,r=0,q=0;q1){p=r.qh(q) +return p.a.X(0,p.b.a2(0,(b-1)*q))}else return r.qh(b*q).a}}} +A.mr.prototype={ +qi(a,b){return this.NI(a,b,b,b)}, +NI(a,b,c,d){var s,r,q=a.b +if(q==null||a.c==null)throw A.d(A.c1("Missing values for keyframe.")) +q.toString +s=a.c +s.toString +r=q.a +q=q.b +return new A.i(r+c*(s.a-r),q+d*(s.b-q))}} +A.HB.prototype={ +qi(a,b){var s,r,q,p,o=a.b +o.toString +s=a.c +if(s==null)s=o +r=this.x +r.aTR(o,s,b) +q=this.z +if(q!=null)for(p=q.length-1;p>=0;--p)r=q[p].aVG(r) +o=this.y +A.bHf(r,o) +return o}} +A.ac7.prototype={ +eW(a){var s,r,q=this,p=q.y +p.eW(a) +s=q.z +s.eW(a) +q.x=new A.i(p.gm(0),s.gm(0)) +for(p=q.a,r=0;r1 +p=r.e +o=r.f +n=r.y +m=r.z +l=r.as +k=r.at +j=r.ax +i=r.ay +h=r.CW +r=r.db +return new A.OA(s,p,o,q!==!1,!0,!1,l,k,j,i,n,m,!0,h,r,null)}, +$S:837} +A.aJU.prototype={ +eW(a){var s,r,q=this,p=q.a.aZ8(a,B.wI),o=q.as +if(p!==o){q.r=!1 +q.as=p +s=q.c +s===$&&A.c() +s.eW(p) +if(!q.r)s=B.wH.a!==-1&&o!=null +else s=!1 +if(s){s=q.Q +r=s.i(0,o) +s.u(0,p,r==null?o:r)}return q.r}else return!1}, +sUL(a){}, +ak0(a){var s,r=this.a.c.w.i(0,a) +if(r!=null){s=r.f +return s}else return null}, +adi(a,b,a0,a1,a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this +if(b.gaA(0))return +if(a1==null)a1=B.um +s=b.a +r=b.c-s +q=b.b +p=b.d-q +o=c.d +n=A.bi9(a1,o,new A.Q(r,p)) +m=n.a +l=n.b +k=l.a +j=(r-k)/2 +r=l.b +i=(p-r)/2 +s+=j+a0.a*j +q+=i+a0.b*i +h=a0.Li(m,new A.A(0,0,0+o.a,0+o.b)) +p=c.b +p.ci() +if(a2!=null){g=c.as +if(g==null)g=0 +f=c.Q.i(0,g) +if(f==null){g=c.as +f=g==null?0:g}g=a2.a +e=a2.b +d=g.b0_(c,f,a,new A.i(s,q),new A.A(s,q,s+k,q+r),a2.c,e,h,m)}else d=!1 +if(!d){a.bU(0) +a.aJ(0,s,q) +p.ff(0,k/(h.c-h.a),r/(h.d-h.b)) +s=c.c +s===$&&A.c() +s.lw(a,p,255) +a.bw(0)}}, +aQt(a,b,c,d){return this.adi(a,b,c,d,null)}} +A.aJV.prototype={} +A.G0.prototype={ +j(a){var s=this +return"LottieImageAsset(width: "+s.a+", height: "+s.b+", id: "+s.c+", fileName: "+s.d+", dirName: "+s.e+")"}} +A.xP.prototype={ +ls(){return new A.qW(A.b([],t.u),A.bZ(this.a,t.G))}} +A.dw.prototype={ +ls(){return new A.cQ(A.b([],t.u),A.bZ(this.a,t.V))}} +A.ZP.prototype={ +ls(){var s=this.a,r=new A.Nw(A.b([],t.u),A.bZ(s,t.cU)) +r.a1K(s) +return r}} +A.mW.prototype={ +ls(){return new A.pv(A.b([],t.u),A.bZ(this.a,t.S))}} +A.aw9.prototype={ +gjn(){var s=this.a +return s.length===1&&s[0].gjn()}, +ls(){var s=this.a +if(B.b.ga9(s).gjn())return new A.mr(A.b([],t.u),A.bZ(s,t.o)) +return new A.a8B(A.b([],t.u),A.bZ(s,t.o))}, +gafy(){return this.a}} +A.ur.prototype={ +ls(){return new A.mr(A.b([],t.u),A.bZ(this.a,t.o))}} +A.awb.prototype={ +ls(){return new A.mr(A.b([],t.u),A.bZ(this.a,t.o))}} +A.ZQ.prototype={ +ls(){var s=t.hN +s=A.b(A.b([],s).slice(0),s) +return new A.HB(new A.oD(s,B.h,!1),$.G().Z(),A.b([],t.u),A.bZ(this.a,t.hd))}} +A.ZR.prototype={ +gafy(){throw A.d(A.af("Cannot call getKeyframes on AnimatableSplitDimensionPathValue."))}, +gjn(){return this.a.gjn()&&this.b.gjn()}, +ls(){var s,r=t.V,q=t.u,p=A.b([],q),o=A.bZ(this.a.a,r),n=A.b([],q) +r=A.bZ(this.b.a,r) +s=A.b([],t.G5) +s=new A.ac7(new A.cQ(p,o),new A.cQ(n,r),A.b([],q),A.bZ(s,t.o)) +s.eW(0) +return s}} +A.awc.prototype={ +ls(){return new A.SP(A.b([],t.u),A.bZ(this.a,t.HU))}} +A.ZS.prototype={} +A.xQ.prototype={ +lG(a,b){return null}, +$ieZ:1} +A.a_B.prototype={ +gjn(){var s=this.a,r=s.length +if(r!==0)s=r===1&&B.b.ga9(s).gjn() +else s=!0 +return s}, +j(a){var s=this.a +s=s.length!==0?""+"values="+A.j(s):"" +return s.charCodeAt(0)==0?s:s}} +A.axt.prototype={} +A.a0x.prototype={ +lG(a,b){var s=this,r=$.G().Z(),q=A.b([],t.NQ),p=A.b([],t.u),o=new A.mr(p,A.bZ(s.c.a,t.o)),n=s.b.ls() +q=new A.MG(r,s.a,a,o,n,s,new A.Ea(q)) +b.cr(o) +b.cr(n) +o=q.gpO() +p.push(o) +n.a.push(o) +return q}, +$ieZ:1} +A.aCd.prototype={} +A.n9.prototype={ +aUs(a,b,c){var s,r,q,p,o,n,m,l,k,j=this +if(a.k(0,b)){j.PT(a) +return}else if(c<=0){j.PT(a) +return}else if(c>=1){j.PT(b) +return}s=a.b +r=s.length +q=b.b +p=q.length +if(r!==p)throw A.d(A.c1("Cannot interpolate between gradients. Lengths vary ("+r+" vs "+p+")")) +for(p=j.a,o=a.a,n=b.a,m=j.b,l=0;l=0)return o.b[m] +s=-(m+1) +if(s===0)return o.b[0] +else{r=o.b +q=r.length-1 +if(s===q)return r[q]}q=s-1 +p=n[q] +return A.aFy((a-p)/(n[s]-p),r[q],r[s])}, +k(a,b){if(b==null)return!1 +if(this===b)return!0 +if(!(b instanceof A.n9))return!1 +return B.KI.eN(this.a,b.a)&&B.KJ.eN(this.b,b.b)}, +gL(a){return 31*A.bM(this.a)+A.bM(this.b)}, +PT(a){var s,r,q,p,o,n +for(s=a.b,r=s.length,q=this.a,p=a.a,o=this.b,n=0;nq)for(--o;o>=q;--o)B.b.di(p,p.length-1) +n=a.b +m=a0.b +l=A.ap(n.a,m.a,a1) +l.toString +m=A.ap(n.b,m.b,a1) +m.toString +this.b=new A.i(l,m) +for(o=p.length-1;o>=0;--o){k=s[o] +j=r[o] +i=k.a +h=k.b +g=k.c +f=j.a +e=j.b +d=j.c +l=p[o] +c=A.ap(i.a,f.a,a1) +c.toString +b=A.ap(i.b,f.b,a1) +b.toString +l.a=new A.i(c,b) +b=A.ap(h.a,e.a,a1) +b.toString +c=A.ap(h.b,e.b,a1) +c.toString +l.b=new A.i(b,c) +c=A.ap(g.a,d.a,a1) +c.toString +b=A.ap(g.b,d.b,a1) +b.toString +l.c=new A.i(c,b)}}, +j(a){return"ShapeData{numCurves="+this.a.length+"closed="+this.c+"}"}} +A.abo.prototype={ +lG(a,b){var s=new A.MX($.G().Z(),b,this.c,this.f,A.b([],t.KJ),a) +s.ass(a,b,this) +return s}, +j(a){return"ShapeFill{color=, fillEnabled="+this.a+"}"}, +$ieZ:1} +A.BI.prototype={ +lG(a,b){return A.bek(a,b,this)}, +j(a){return"ShapeGroup{name: '"+A.j(this.a)+"' Shapes: "+A.j(this.b)+"}"}, +$ieZ:1} +A.abq.prototype={ +lG(a,b){var s=$.G().Z(),r=A.b([],t.NQ),q=A.bJY(this.c.a) +r=new A.RP(s,this,a,q,new A.Ea(r)) +b.cr(q) +q.a.push(r.ga8m()) +return r}, +j(a){return"ShapePath{name="+A.j(this.a)+", index="+this.b+"}"}, +$ieZ:1} +A.FN.prototype={ +W(){return"LineCapType."+this.b}} +A.FO.prototype={ +W(){return"LineJoinType."+this.b}} +A.abr.prototype={ +lG(a,b){return A.bKF(a,b,this)}, +$ieZ:1} +A.abt.prototype={ +W(){return"ShapeTrimPathType."+this.b}} +A.abs.prototype={ +lG(a,b){var s=this,r=t.u,q=A.b([],r),p=t.V,o=A.b([],r),n=new A.cQ(o,A.bZ(s.c.a,p)),m=A.b([],r),l=new A.cQ(m,A.bZ(s.d.a,p)) +r=A.b([],r) +p=new A.cQ(r,A.bZ(s.e.a,p)) +q=new A.ny(s.f,q,s.b,n,l,p) +b.cr(n) +b.cr(l) +b.cr(p) +p=q.gaKA() +o.push(p) +m.push(p) +r.push(p) +return q}, +j(a){return"Trim Path: {start: "+this.c.j(0)+", end: "+this.d.j(0)+", offset: "+this.e.j(0)+"}"}, +$ieZ:1} +A.yE.prototype={ +j(a){return"v="+this.c.j(0)+" cp1"+this.a.j(0)+" cp2="+this.b.j(0)}} +A.FD.prototype={ +W(){return"Justification."+this.b}} +A.r6.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d.a,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r!==b)s=b instanceof A.r6&&A.J(r)===A.J(b)&&r.a===b.a&&r.b==b.b&&r.c===b.c&&r.d===b.d&&r.e===b.e&&r.f===b.f&&r.r===b.r&&r.w.k(0,b.w)&&r.x.k(0,b.x)&&r.y===b.y&&r.z===b.z&&J.f(r.Q,b.Q)&&J.f(r.as,b.as) +else s=!0 +return s}} +A.F0.prototype={} +A.Nf.prototype={ +gL(a){return A.bFe(this.b,this.f,this.e)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(r!==b)s=b instanceof A.Nf&&A.J(r)===A.J(b)&&r.a===b.a&&r.b===b.b&&r.c===b.c&&r.d===b.d&&r.e===b.e&&r.f===b.f +else s=!0 +return s}} +A.jv.prototype={ +xj(a,b){var s,r,q,p,o=this,n=o.y,m=o.e +if(n.cy===B.oP)m.sde(B.dz) +else m.sde(B.da) +m=o.gXs() +o.ch.an(0,m) +n=n.w +if(n.length!==0){s=A.b([],t.PE) +r=new A.aKd(s,A.b([],t.qh),n) +r.asD(n) +o.z=r +for(n=s.length,q=0;q=0;--q)s.bL(0,p.ax[q].ch.qf()) +else{r=p.at +if(r!=null)s.bL(0,r.ch.qf())}}s.bL(0,p.ch.qf()) +return B.M}, +lw(a,b,c){var s,r,q,p,o,n,m,l=this,k="Layer#parentMatrix",j="Layer#drawLayer",i="Layer#computeBounds",h="Layer#saveLayer",g="Layer#drawMatte",f="Layer#restoreLayer",e=l.r +A.fP(e) +if(!l.CW||l.y.dx){A.dV(e) +return}l.a2s() +A.fP(k) +s=l.a +s.ci() +b.vs(s) +for(r=l.ax.length-1;r>=0;--r)s.bL(0,l.ax[r].ch.qf()) +A.dV(k) +q=l.ch +p=q.z +o=p==null?null:p.gm(0) +if(o==null)o=100 +n=B.c.aw(c/255*o/100*255) +if(l.as==null&&!l.Xd()){s.bL(0,q.qf()) +A.fP(j) +l.vE(a,s,n) +A.dV(j) +l.a7n(A.dV(e)) +return}A.fP(i) +m=l.aCb(l.j4(0,s,!1),b) +s.bL(0,q.qf()) +m=l.aCa(m,s) +A.dV(i) +if(!m.gaA(0)){A.fP(h) +q=l.b +p=q.gA(q).a +q.sA(0,A.S(255,p>>>16&255,p>>>8&255,p&255)) +a.hl(m,q) +A.dV(h) +l.a2P(a,m) +A.fP(j) +l.vE(a,s,n) +A.dV(j) +if(l.Xd())l.atN(a,m,s) +if(l.as!=null){A.fP(g) +A.fP(h) +a.hl(m,l.e) +A.dV(h) +l.a2P(a,m) +l.as.lw(a,b,n) +A.fP(f) +a.bw(0) +A.dV(f) +A.dV(g)}A.fP(f) +a.bw(0) +A.dV(f)}l.a7n(A.dV(e))}, +a7n(a){this.x.a.a.aYn(this.y.c,a)}, +a2P(a,b){var s="Layer#clearLayer" +A.fP(s) +a.b7(b.ei(1),this.f) +A.dV(s)}, +aCa(a,b){var s,r,q,p,o,n,m,l +if(!this.Xd())return a +s=this.z.c.length +for(r=b.a,q=B.M,p=0;p>>16&255,n>>>8&255,n&255)) +a.b7(b,q)}break +case 0:if(l.d){a.hl(b,q) +a.b7(b,q) +i=k.gm(0).az(0,r) +n=B.c.ai(j.gm(0)*2.55) +m=q.gA(q).a +q.sA(0,A.S(n,m>>>16&255,m>>>8&255,m&255)) +a.a3(i,p) +a.bw(0)}else{i=k.gm(0).az(0,r) +n=B.c.ai(j.gm(0)*2.55) +m=q.gA(q).a +q.sA(0,A.S(n,m>>>16&255,m>>>8&255,m&255)) +a.a3(i,q)}break +case 1:if(o===0){q.sA(0,B.q) +a.b7(b,q)}if(l.d){a.hl(b,p) +a.b7(b,q) +n=B.c.ai(j.gm(0)*2.55) +m=p.gA(p).a +p.sA(0,A.S(n,m>>>16&255,m>>>8&255,m&255)) +a.a3(k.gm(0).az(0,r),p) +a.bw(0)}else a.a3(k.gm(0).az(0,r),p) +break +case 2:if(l.d){a.hl(b,s) +a.b7(b,q) +n=B.c.ai(j.gm(0)*2.55) +m=p.gA(p).a +p.sA(0,A.S(n,m>>>16&255,m>>>8&255,m&255)) +a.a3(k.gm(0).az(0,r),p) +a.bw(0)}else{a.hl(b,s) +i=k.gm(0).az(0,r) +n=B.c.ai(j.gm(0)*2.55) +m=q.gA(q).a +q.sA(0,A.S(n,m>>>16&255,m>>>8&255,m&255)) +a.a3(i,q) +a.bw(0)}break}}A.fP(f) +a.bw(0) +A.dV(f)}, +atQ(){var s,r,q=this.z +if(q==null||q.a.length===0)return!1 +for(q=q.c,s=q.length,r=0;r=0;--q){o=c[q] +n=A.bC7(k,o,a,d) +if(n==null)continue +r.u(0,n.y.d,n) +if(p!=null){p.as=n +p=null}else{B.b.hc(s,0,n) +switch(o.cy.a){case 1:case 2:p=n +break +case 3:case 4:case 0:case 5:break}}}for(s=A.jb(r,r.r,r.$ti.c);s.H();){m=r.i(0,s.d) +if(m==null)continue +l=r.i(0,m.y.f) +if(l!=null)m.at=l}}, +vE(a,b,c){var s,r,q,p,o,n="CompositionLayer#draw" +A.fP(n) +s=this.y +r=A.ie(b,new A.A(0,0,s.ax,s.ay)) +a.bU(0) +for(s=this.dx,q=s.length-1,p=!(r.a>=r.c),o=r.b>=r.d;q>=0;--q){if(!(!p||o))a.mZ(r) +s[q].lw(a,b,c)}a.bw(0) +A.dV(n)}, +j4(a,b,c){var s,r,q,p=this.x9(0,b,c) +for(s=this.dx,r=s.length-1,q=this.w;r>=0;--r)p=p.jj(s[r].j4(0,q,!0)) +return p}, +eW(a){var s,r,q,p,o,n,m=this +m.amE(a) +s=m.db +if(s!=null){r=m.x.a.c +q=r.c +r=r.b +p=m.y.b.c +o=p.b +a=(s.gm(0)*p.d-o)/(q-r+0.01)}if(m.db==null){s=m.y +r=s.b.c +a-=s.at/(r.c-r.b)}s=m.y +r=s.as +if(r!==0&&s.c!=="__container")a/=r +for(s=m.dx,n=s.length-1;n>=0;--n)s[n].eW(a)}} +A.a59.prototype={ +vE(a,b,c){var s,r,q=this.a_5() +if(q==null)return +s=this.db +s.sor(B.fi) +r=s.gA(s).a +s.sA(0,A.S(c,r>>>16&255,r>>>8&255,r&255)) +a.bU(0) +a.az(0,b.a) +a.i6(q,new A.A(0,0,q.gbW(q),q.gb9(q)),new A.A(0,0,q.gbW(q),q.gb9(q)),s) +a.bw(0)}, +j4(a,b,c){var s=this.x9(0,b,c),r=this.a_5() +if(r!=null)return A.ie(this.w,new A.A(0,0,r.gbW(r),r.gb9(r))) +return s}, +a_5(){return this.x.ak0(this.y.r)}} +A.pA.prototype={ +W(){return"LayerType."+this.b}} +A.rJ.prototype={ +W(){return"MatteType."+this.b}} +A.FH.prototype={ +j(a){return this.aiw("")}, +aiw(a){var s,r,q=this,p=""+a+q.c+"\n",o=q.b.c.f,n=o.i(0,q.f) +if(n!=null){p=p+"\t\tParents: "+n.c +n=o.i(0,n.f) +for(;n!=null;){p=p+"->"+n.c +n=o.i(0,n.f)}p=p+a+"\n"}o=q.w.length +if(o!==0)p=p+a+"\tMasks: "+o+"\n" +o=q.y +if(o!==0&&q.z!==0)p=p+a+"\tBackground: "+(""+o+"x"+q.z+" "+q.Q.j(0)) +o=q.a +s=o.length +if(s!==0){p=p+a+"\tShapes:\n" +for(r=0;r>>24&255 +if(l===0)return +s=o.db +s.sA(0,m) +m=o.ch.z +r=m==null?null:m.gm(0) +if(r==null)r=100 +q=B.c.ai(c/255*(l/255*r/100)*255) +m=s.gA(s).a +s.sA(0,A.S(q,m>>>16&255,m>>>8&255,m&255)) +if(q>0){p=A.bc(8,0,!1,t.V) +m=n.y +p[4]=m +p[2]=m +n=n.z +p[7]=n +p[5]=n +A.bH6(b,p) +n=o.dx +n.bF(0) +n.a4(0,p[0],p[1]) +n.q(0,p[2],p[3]) +n.q(0,p[4],p[5]) +n.q(0,p[6],p[7]) +n.q(0,p[0],p[1]) +n.T(0) +a.a3(n,s)}}, +j4(a,b,c){var s +this.x9(0,b,c) +s=this.y +return A.ie(this.w,new A.A(0,0,s.y,s.z))}} +A.adi.prototype={ +j4(a,b,c){var s +this.x9(0,b,c) +s=this.id.c.a +return new A.A(0,0,0+s.c,0+s.d)}, +vE(a,b,c){var s,r,q,p,o,n,m,l=this,k=l.go.gm(0),j=l.id.c.y.i(0,k.b) +if(j==null)return +a.bU(0) +a.az(0,b.a) +s=l.k1 +r=s!=null?s.gm(0):k.w +s=l.dy +s.sA(0,A.S(s.gA(s).a>>>24&255,r.gm(r)>>>16&255,r.gm(r)>>>8&255,r.gm(r)&255)) +q=l.k3 +p=q!=null?q.gm(0):k.x +q=l.fr +q.sA(0,A.S(q.gA(q).a>>>24&255,p.gm(p)>>>16&255,p.gm(p)>>>8&255,p.gm(p)&255)) +o=l.ch.z +n=o==null?null:o.gm(0) +m=B.c.cN((n==null?100:n)*255/100*c,255) +o=s.gA(s).a +s.sA(0,A.S(m,o>>>16&255,o>>>8&255,o&255)) +o=q.gA(q).a +q.sA(0,A.S(m,o>>>16&255,o>>>8&255,o&255)) +s=l.ok +if(s!=null)q.sbM(s.gm(0)) +else q.sbM(k.y) +s=l.x.a.c.x.a +if(s!==0)l.awA(k,b,j,a) +else l.awz(k,j,a) +a.bw(0)}, +awA(a,b,c,d){var s,r,q,p,o,n,m,l=this,k=a.c,j=k/100,i=A.bfM(b),h=l.a4O(a.a),g=h.length,f=a.e/10,e=l.p2 +if(e!=null)f+=e.gm(0) +for(e=a.as,s=-1,r=0;r0,p=b0.a,o=b0.c,n=a4.id.c.x,m=0,l=0,k=0,j=0,i=0,h=!1,g=0,f=0;r.xs(1,r.c);){e=r.d +if(e==null)e=r.d=B.d.am(s,r.b,r.c) +if(a6){d=n.i(0,31*(31*B.d.gL(e)+B.d.gL(p))+B.d.gL(o)) +if(d==null)continue +c=d.d*b1+b2}else{a7.sd7(0,A.cS(a5,a5,a5,b3,e)) +a7.pP() +c=a7.b.c+b2}b=e===" " +if(b){g=c +h=!0}else if(h){i=c +j=f +h=!1}else i+=c +l+=c +if(q&&l>=a9){if(b)continue;++m +a=a4.a3Z(m) +if(j===k){a0=a8.nO(0,k,f) +b=new A.hz(" ") +a1=A.bl2(A.bl1(a0,b),b) +b=a1.gF(0) +a2=a0.gF(0) +a.a=a1 +a.b=l-c-(b-a2)*g +i=c +j=f +k=j +l=i}else{a0=a8.nO(0,k,j-1) +b=new A.hz(" ") +a1=A.bl2(A.bl1(a0,b),b) +b=a0.gF(0) +a2=a1.gF(0) +a.a=a1 +a.b=l-i-(b-a2)*g-g +k=j +l=i}}++f}if(l>0){++m +a3=a4.a3Z(m) +a3.a=a8.a_y(0,k) +a3.b=l}return B.b.cI(a4.fy,0,m)}, +a3Z(a){var s,r +for(s=this.fy,r=s.length;r>>24&255)===0)return +if(b.gU(b)===B.u&&b.gbM()===0)return +c.a3(a,b)}, +Hh(a,b,c,d){var s,r,q=null +if((c.gA(c).a>>>24&255)===0)return +if(c.gU(c)===B.u&&c.gbM()===0)return +b=b.aOv(c) +s=A.qd(q,q,q,q,A.cS(q,q,q,b,a),B.aA,B.r,q,B.aq,B.aM) +s.pP() +r=b.r +r.toString +s.aO(d,new A.i(0,-r))}, +ay1(a){var s,r,q,p,o,n=this.fx +if(n.aR(0,a)){n=n.i(0,a) +n.toString +return n}s=a.a +r=s.length +q=A.b([],t.ex) +for(p=this.x,o=0;o0)i[m]=this.axY(h,o[f<0?-(f+1):f],s,r) +else i[m]=this.axZ(h,r[g],p,o)}return new A.n9(k,i)}, +axY(a,b,c,d){var s,r,q,p,o,n +if(d.length<2||a===c[0])return d[0] +for(s=c.length,r=s-1,q=1;q=p){s=d[q] +r=J.f9(s) +return A.S(B.c.ai(255*b),r.gm(s)>>>16&255,r.gm(s)>>>8&255,r.gm(s)&255)}s=q-1 +r=c[s] +o=d[q] +n=d[s] +r=A.aFy((a-r)/(p-r),A.S(255,n.gm(n)>>>16&255,n.gm(n)>>>8&255,n.gm(n)&255),A.S(255,o.gm(o)>>>16&255,o.gm(o)>>>8&255,o.gm(o)&255)) +return A.S(B.c.ai(255*b),r.gm(r)>>>16&255,r.gm(r)>>>8&255,r.gm(r)&255)}throw A.d(A.c1("Unreachable code."))}, +axZ(a,b,c,d){var s,r,q,p,o +if(d.length<2||a<=c[0])return A.S(B.c.ai(255*d[0]),b.gm(b)>>>16&255,b.gm(b)>>>8&255,b.gm(b)&255) +for(s=c.length,r=s-1,q=1;q>>16&255,b.gm(b)>>>8&255,b.gm(b)&255)}throw A.d(A.c1("Unreachable code."))}} +A.aIO.prototype={ +$0(){var s,r,q,p,o +try{r=this.a +q=r.a +r=r.b +r=A.boB(q.a,q.b,r.a,r.b) +return r}catch(p){s=A.b2(p) +A.Zm().$1("DEBUG: Path interpolator error "+A.j(s)) +if(B.d.G(A.j(s),"The Path cannot loop back on itself.")){r=this.a +q=r.a +o=Math.min(q.a,1) +r=r.b +return A.boB(o,q.b,Math.max(r.a,0),r.b)}else return B.z}}, +$S:840} +A.a04.prototype={ +rw(a){var s,r=this,q=r.c +if(qq.gF(r)){s.c=q.gF(r)-s.b +return!1}s.c=Math.max(b,s.c) +return!0}, +FU(a){var s=this.c +if(a>s||s-a<1)A.X(A.c1("size="+s+" offset="+a+" byteCount=1")) +return J.bG(this.a,this.b+a)}, +fz(a,b){var s=this,r=s.b+=b,q=s.a,p=J.al(q) +if(r>=p.gF(q)){s.b=p.gF(q)-1 +throw A.d(A.c1("source is exhausted"))}r=s.c-=b +s.c=Math.max(0,r)}, +akJ(a,b){var s=this.aHj(b) +if(s===-1)return-1 +this.fz(0,J.bo(b[s])) +return s}, +aHj(a){var s,r +for(s=this.a,r=0;rm||m-o<1)A.X(A.c1("size="+m+" offset="+o+" byteCount=1")) +m=J.bG(l.a,l.b+o) +if(m!==s[o].charCodeAt(0)&&m!==r[o].charCodeAt(0))return 0}if(l.ug(0,p+1)&&this.Lr(l.FU(p)))return 0 +l.fz(0,p) +return this.w=q}, +aXy(){var s,r,q,p,o,n,m,l,k,j,i=this +for(s=i.r,r=0,q=!1,p=!0,o=0,n=0;!0;n=m){m=n+1 +if(!s.ug(0,m))break +l=s.c +if(n>l||l-n<1)A.X(A.c1("size="+l+" offset="+n+" byteCount=1")) +l=J.bG(s.a,s.b+n) +if(l===45){if(o===0){q=!0 +o=1 +continue}else if(o===5){o=6 +continue}return 0}else if(l===43){if(o===5){o=6 +continue}return 0}else if(l===101||l===69){if(o===2||o===4){o=5 +continue}return 0}else if(l===46){if(o===2){o=3 +continue}return 0}else{if(l<48||l>57){if(!i.Lr(l))break +return 0}if(o===1||o===0){r=-(l-48) +o=2}else if(o===2){if(r===0)return 0 +k=r*10-(l-48) +if(r<=-900719925474099)l=r===-900719925474099&&k15)return-1 +if(o===15)return p.a48(p.z,a) +s=p.r.akJ(0,a.b) +if(s!==-1){p.w=0 +p.c[p.a-1]=a.a[s] +return s}r=p.c[p.a-1] +q=p.ag4() +s=p.a48(q,a) +if(s===-1){p.w=15 +p.z=q +p.c[p.a-1]=r}return s}, +em(){var s=this,r=s.w +if(r===0)r=s.bz() +if(r===14)s.a0j() +else if(r===13)s.Gy($.Kp()) +else if(r===12)s.Gy($.Kq()) +else if(r!==15)throw A.d(A.j9("Expected a name but was "+s.d6().j(0)+" at path "+s.dw())) +s.w=0 +s.c[s.a-1]="null"}, +a48(a,b){var s,r,q +for(s=b.a,r=s.length,q=0;qp||p-q<1)A.X(A.c1("size="+p+" offset="+q+" byteCount=1")) +if(J.bG(s.a,s.b+q)===92){if(r==null)r=new A.d8("") +p=s.rw(q) +r.a+=p +s.fc() +p=A.cs(this.ahl()) +r.a+=p +continue}if(r==null){o=s.rw(q) +s.fc() +return o}else{p=s.rw(q) +r.a+=p +s.fc() +s=r.a +return s.charCodeAt(0)==0?s:s}}}, +Y4(){var s=this.r,r=s.zo($.bj9(),0) +return r!==-1?s.rw(r):s.rw(s.c)}, +Gy(a){var s,r,q,p,o +for(s=this.r,r=s.a,q=J.al(r);!0;){p=s.zo(a,0) +if(p===-1)throw A.d(this.cp("Unterminated string")) +o=s.c +if(p>o||o-p<1)A.X(A.c1("size="+o+" offset="+p+" byteCount=1")) +o=p+1 +if(q.i(r,s.b+p)===92){s.fz(0,o) +this.ahl()}else{s.fz(0,o) +return}}}, +a0j(){var s=this.r,r=s.zo($.bj9(),0) +s.fz(0,r!==-1?r:s.c)}, +ev(){var s,r,q,p,o,n=this,m="Expected an int but was ",l=n.w +if(l===0)l=n.bz() +s=null +if(l===16){q=n.x +q===$&&A.c() +s=q +if(q!==s)throw A.d(A.j9(m+n.gaF2()+" at path "+n.dw())) +n.w=0 +q=n.d +p=n.a-1 +q[p]=q[p]+1 +return s}if(l===17){q=n.y +q===$&&A.c() +n.z=n.r.rw(q)}else{q=l===9 +if(q||l===8){q=q?n.t8($.Kp()):n.t8($.Kq()) +n.z=q +try{s=A.et(q,null,null) +n.w=0 +q=n.d +p=n.a-1 +q[p]=q[p]+1 +p=s +return p}catch(o){if(!t.bE.b(A.b2(o)))throw o}}else if(l!==11)throw A.d(A.j9(m+n.d6().j(0)+" at path "+n.dw()))}n.w=11 +r=null +try{q=n.z +q.toString +r=A.nM(q)}catch(o){if(t.bE.b(A.b2(o)))throw A.d(A.j9(m+A.j(n.z)+" at path "+n.dw())) +else throw o}s=J.bkp(r) +if(!J.f(s,r))throw A.d(A.j9(m+A.j(n.z)+" at path "+n.dw())) +n.z=null +n.w=0 +q=n.d +p=n.a-1 +q[p]=q[p]+1 +return s}, +co(){var s,r,q=this,p="Expected a value but was ",o=q.r,n=0 +do{s=q.w +if(s===0)s=q.bz() +if(s===3){q.F5(1);++n}else if(s===1){q.F5(3);++n}else if(s===4){--n +if(n<0)throw A.d(A.j9(p+q.d6().j(0)+" at path "+q.dw()));--q.a}else if(s===2){--n +if(n<0)throw A.d(A.j9(p+q.d6().j(0)+" at path "+q.dw()));--q.a}else if(s===14||s===10)q.a0j() +else if(s===9||s===13)q.Gy($.Kp()) +else if(s===8||s===12)q.Gy($.Kq()) +else if(s===17){r=q.y +r===$&&A.c() +o.fz(0,r)}else if(s===18)throw A.d(A.j9(p+q.d6().j(0)+" at path "+q.dw())) +q.w=0}while(n!==0) +o=q.d +r=q.a-1 +o[r]=o[r]+1 +q.c[r]="null"}, +xV(a){var s,r,q,p,o,n,m,l,k=this,j=u.t +$label0$0:for(s=k.r,r=0;q=r+1,s.ug(0,q);){p=s.c +if(r>p||p-r<1)A.X(A.c1("size="+p+" offset="+r+" byteCount=1")) +p=s.a +o=J.al(p) +n=o.i(p,s.b+r) +if(n===10||n===32||n===13||n===9){r=q +continue $label0$0}s.fz(0,q-1) +if(n===47){if(!s.ug(0,2))return n +k.cp(j) +m=s.c +if(1>m||m-1<1)A.X(A.c1("size="+m+" offset=1 byteCount=1")) +switch(o.i(p,s.b+1)){case 42:s.fc() +s.fc() +p=$.bwk() +l=s.aTx(p,0) +o=l===-1 +s.fz(0,!o?l+p.length:s.c) +if(o)throw A.d(k.cp("Unterminated comment")) +r=0 +continue $label0$0 +case 47:s.fc() +s.fc() +l=s.zo($.bj8(),0) +s.fz(0,l!==-1?l+1:s.c) +r=0 +continue $label0$0 +default:return n}}else if(n===35){k.cp(j) +l=s.zo($.bj8(),0) +s.fz(0,l!==-1?l+1:s.c)}else return n +r=0}if(a)throw A.d(A.ad("End of input")) +else return-1}, +j(a){return"JsonReader("+this.r.j(0)+")"}, +ahl(){var s,r,q,p,o=this,n=o.r +if(!n.ug(0,1))throw A.d(o.cp("Unterminated escape sequence")) +s=n.fc() +switch(s){case 117:if(!n.ug(0,4))throw A.d(A.c1("Unterminated escape sequence at path "+o.dw())) +for(r=0,q=0;q<4;++q){p=n.c +if(q>p||p-q<1)A.X(A.c1("size="+p+" offset="+q+" byteCount=1")) +p=J.bG(n.a,n.b+q) +r=r<<4>>>0 +if(p>=48&&p<=57)r+=p-48 +else if(p>=97&&p<=102)r+=p-97+10 +else if(p>=65&&p<=70)r+=p-65+10 +else throw A.d(o.cp("\\u"+n.rw(4)))}n.fz(0,4) +return r +case 116:return 9 +case 98:return 8 +case 110:return 10 +case 114:return 13 +case 102:return 12 +case 10:case 39:case 34:case 92:case 47:return s +default:n=o.cp("Invalid escape sequence: \\"+s) +throw A.d(n)}}} +A.aNs.prototype={ +aYn(a,b){return}} +A.a_c.prototype={ +gni(){return this.d}, +afF(a,b){return $.bAN().cU(0,this,new A.aws(this,b))}, +iz(a){return this.afF(0,null)}, +k(a,b){var s +if(b==null)return!1 +if(J.ai(b)!==A.J(this))return!1 +if(b instanceof A.a_c)s=b.gni()===this.gni() +else s=!1 +return s}, +gL(a){return A.a6(this.gni(),this.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a){return A.J(this).j(0)+"(bundle: "+A.j(this.e)+', name: "'+this.gni()+'")'}} +A.aws.prototype={ +$0(){var s=0,r=A.r(t.zI),q,p=this,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2 +var $async$$0=A.t(function(a3,a4){if(a3===1)return A.o(a4,r) +while(true)switch(s){case 0:e=p.b +d=p.a +c=d.e +b=e!=null?A.blx(e):$.l3() +a0=A +a1=J +a2=J +s=4 +return A.x(b.d_(0,d.gni()),$async$$0) +case 4:s=3 +return A.x(a0.aJT(a1.xF(a2.nU(a4)),d.b),$async$$0) +case 3:a=a4 +o=a.c.w.gbm(0),n=A.w(o),n=n.h("@<1>").ak(n.y[1]),o=new A.bt(J.az(o.a),o.b,n.h("bt<1,2>")),n=n.y[1],m=d.d,l=t._m,k=t.Ri,d=d.f +case 5:if(!o.H()){s=6 +break}j=o.a +if(j==null)j=n.a(j) +s=j.f==null?7:8 +break +case 7:i=j.d +h=A.bSV(i) +if(h==null){g=$.bAR() +f=A.b([$.avw().ad6(m),j.e,i,null,null,null,null,null,null,null,null,null,null,null,null,null],l) +A.bi7("join",f) +h=new A.Du(g.XE(new A.ca(f,k)),c,d)}a0=j +s=9 +return A.x(A.bu5(a,j,h),$async$$0) +case 9:a0.f=a4 +case 8:s=5 +break +case 6:s=10 +return A.x(A.bc6(a),$async$$0) +case 10:q=a +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$$0,r)}, +$S:842} +A.bcD.prototype={ +$2(a,b){this.a.ad(0,this.b.bl()) +this.c.fC(0,a.a)}, +$S:150} +A.bcE.prototype={ +$2(a,b){var s=this +s.a.ad(0,s.b.bl()) +s.c.qM("Failed to load image "+s.d.c+": "+A.j(a)) +s.e.fl(0)}, +$S:843} +A.aJW.prototype={} +A.aJM.prototype={ +cU(a,b,c){var s,r,q,p=this,o={},n=p.a,m=n.i(0,b) +if(m!=null)return m +s=p.b +r=s.i(0,b) +o.a=r +if(r!=null)s.P(0,b) +else{q=s.a +if(q===1000)s.P(0,new A.bk(s,A.w(s).h("bk<1>")).ga9(0)) +m=c.$0() +n.u(0,b,m) +m.cu(new A.aJN(o,p,b),t.H).ts(new A.aJO(p,b))}n=o.a +if(n!=null){p.a6a(0,b,n) +o=o.a +o.toString +return new A.d9(o,t.Yw)}m.toString +return m}, +a6a(a,b,c){this.b.u(0,b,c)}} +A.aJN.prototype={ +$1(a){var s=this.b,r=this.c +s.a.P(0,r) +s.a6a(0,r,a) +this.a.a=a}, +$S:844} +A.aJO.prototype={ +$1(a){this.a.a.P(0,this.b)}, +$S:258} +A.H_.prototype={ +bA(a){var s=this,r=s.d,q=A.cj(a,B.cy,t.l).w +if(r!=null){r=A.bfF(r,s.w) +r.eW(s.r) +r.sUL(s.e) +r.w=!1 +r.z=!1 +r.x=s.at}else r=null +q=new A.QJ(r,s.x,s.y,s.z,s.Q,s.as,q.b,new A.bs(),A.aX(t.v)) +q.by() +return q}, +bI(a,b){var s,r,q,p=this,o=p.d,n=b.K +if(o==null){s=n!=null +if(s)b.K=null +r=s}else{if(n!=null){q=n.a +s=q!==o}else s=!0 +if(s)n=b.K=A.bfF(o,p.w) +r=B.cE.nR(s,n.eW(p.r))}if(r)b.bi() +if(s)b.aB() +b.sbW(0,p.x) +b.sb9(0,p.y) +b.sil(p.Q) +b.stR(p.z) +b.saYE(p.as) +b.spw(0,A.cj(a,B.cy,t.l).w.b)}} +A.QJ.prototype={ +sbW(a,b){return}, +sb9(a,b){return}, +stR(a){return}, +sil(a){if(a.k(0,this.ao))return +this.ao=a +this.bi()}, +saYE(a){return}, +spw(a,b){if(b===this.aS)return +this.aS=b +this.bi()}, +Ib(a){var s=this.a5 +a=A.jx(this.M,s).tG(a) +s=this.K +if(s==null)return new A.Q(A.U(0,a.a,a.b),A.U(0,a.c,a.d)) +return a.yK(s.d)}, +c1(a){return 0}, +bZ(a){return this.Ib(A.l7(a,1/0)).a}, +c_(a){return 0}, +c2(a){return this.Ib(A.l7(1/0,a)).b}, +mn(a){return!0}, +dA(a){return this.Ib(a)}, +cM(){this.id=this.Ib(t.k.a(A.L.prototype.gaI.call(this)))}, +aO(a,b){var s,r,q,p,o,n=this,m=n.K +if(m==null)return +s=a.gcP(a) +r=n.gC(0) +q=b.a +p=b.b +o=n.av +m.adi(s,new A.A(q,p,q+r.a,p+r.b),n.ao,o,null)}, +t(){this.ja()}} +A.FT.prototype={ +eN(a,b){var s,r +if(a===b)return!0 +s=a.length +if(s!==b.length)return!1 +for(r=0;r=1)return 1 +s=l.a +s===$&&A.c() +r=s.length-1 +for(q=0;r-q>1;){p=B.c.ai((q+r)/2) +if(b=this.grR()&&a=r.length-1)return null +return r[s+1]}, +aXw(a){var s=this.d,r=this.a +if(s>=r.length-a)return null +return r[s+a]}, +aUZ(a){var s +if(this.gl_(0)==null)return!1 +s=this.gl_(0).a +return a.b.test(s)}, +YB(a,b){var s,r,q,p,o,n,m,l,k,j,i,h=this +h.w=b +h.x=a +s=A.b([],t.c) +for(r=h.a,q=h.c,p=null,o=0;n=h.d,n2)throw A.d(A.kg("BlockParser.parseLines is not advancing"))}else o=0}return s}, +agK(){return this.YB(!1,null)}, +aXk(a){return this.YB(!1,a)}} +A.fa.prototype={ +tr(a){return!0}, +qP(a){var s=this.giY(this),r=a.a[a.d].a +return s.b.test(r)}, +aTS(a){var s,r,q,p +for(s=a.c,r=s.length,q=0;q") +p=q.length +if(p>1){if(n")).cj(0,"\n") +p=t.c +r=t.N +return new A.cq("pre",A.b([new A.cq("code",A.b([new A.e9(s)],p),A.D(r,r))],p),A.D(r,r))}, +aHT(a){var s,r,q,p +for(s=1;!0;){r=a.aXw(s) +if(r==null)return!0 +if(r.c){++s +continue}q=$.avz() +p=r.a +return!q.b.test(p)}}} +A.azd.prototype={ +$1(a){var s=a.b +return B.d.a2(" ",s==null?0:s)+a.a}, +$S:75} +A.MK.prototype={ +giY(a){return $.nS()}, +l1(a,b){b.f=!0;++b.d +return null}} +A.a3v.prototype={ +giY(a){return $.avv()}, +l1(a,b){var s,r,q,p,o,n,m,l=$.avv().iU(A.bc7(b.a[b.d].a)) +l.toString +s=A.brk(l) +l=this.aXa(b,s.b,s.a) +r=new A.W(l,new A.aE2(),A.a5(l).h("W<1,h>")).cj(0,"\n") +if(r.length!==0)r+="\n" +l=t.c +q=A.b([new A.e9(r)],l) +p=t.N +o=A.D(p,p) +n=s.c +if(B.b.ga9(n.split(" ")).length!==0){m=A.Df(B.b.ga9(n.split(" ")),$.Zu(),A.bdf(),null) +o.u(0,"class","language-"+m)}return new A.cq("pre",A.b([new A.cq("code",q,o)],l),A.D(p,p))}, +aXa(a,b,c){var s,r,q,p,o,n=A.b([],t.Rv),m=++a.d +for(s=a.a,r="^\\s{0,"+c+"}",q=null;m"))}, +$S:848} +A.aEZ.prototype={ +$1(a){return!$.bvW().G(0,a.giY(a))}, +$S:94} +A.aEY.prototype={ +$1(a){var s=a.giY(a) +return s.b.test(this.a)}, +$S:94} +A.a4N.prototype={ +giY(a){return $.bjW()}, +l1(a,b){var s,r,q,p,o,n,m=b.a,l=$.bjW().iU(m[b.d].a).b,k=l[0] +k.toString +s=l[1] +r=l[2] +q=s.length +p=B.d.f7(k,s)+q +l=r==null +if(l)o=B.d.c5(m[b.d].a,p) +else{n=B.d.Ep(k,r) +o=B.d.am(m[b.d].a,p,n)}o=B.d.eC(o) +if(l){m=A.bw("^#+$",!0,!1,!1) +m=m.b.test(o)}else m=!1 +if(m)o=null;++b.d +m=A.b([],t.c) +if(o!=null)m.push(new A.wS(o)) +l=t.N +return new A.cq("h"+q,m,A.D(l,l))}} +A.a4T.prototype={ +giY(a){return $.avx()}, +l1(a,b){var s;++b.d +s=t.N +return new A.cq("hr",null,A.D(s,s))}} +A.a4X.prototype={ +giY(a){return $.avy()}, +tr(a){return $.avy().iU(a.a[a.d].a).zC("condition_7")==null}, +u7(a){var s,r,q,p=A.b([],t.Rv),o=a.a,n=$.avy().iU(o[a.d].a).b,m=n.length-1,l=0 +while(!0){if(!(l")).cj(0,"\n")) +if(b.z!=null||b.w!=null){r="\n"+r +if(b.w instanceof A.A5)r+="\n"}return new A.e9(r)}} +A.aGH.prototype={ +$1(a){return a.a}, +$S:75} +A.Oo.prototype={ +giY(a){return $.bAB()}, +tr(a){return!1}, +l1(a,b){var s=b.a,r=A.b([s[b.d]],t.Rv);++b.d +for(;!A.be2(b);){r.push(s[b.d]);++b.d}if(!this.aEX(r,b))b.d-=r.length +return null}, +aEX(a,b){var s,r,q=new A.aJm(new A.W(a,new A.aJn(),A.a5(a).h("W<1,h>")).cj(0,"\n")) +q.aXf() +if(!q.c)return!1 +b.d-=q.r +s=q.d +s.toString +r=A.bug(s) +b.b.a.cU(0,r,new A.aJo(r,q)) +return!0}} +A.aJn.prototype={ +$1(a){return a.a}, +$S:75} +A.aJo.prototype={ +$0(){var s=this.b,r=s.e +r.toString +return new A.FQ(r,s.f)}, +$S:849} +A.FU.prototype={} +A.ad6.prototype={ +W(){return"TaskListItemState."+this.b}} +A.A5.prototype={ +qP(a){var s=this.giY(this),r=a.a,q=r[a.d].a +if(s.b.test(q)){s=$.avx() +r=r[a.d].a +s=!s.b.test(r)}else s=!1 +return s}, +tr(a){var s,r=this.giY(this).iU(a.a[a.d].a) +r.toString +if(!(a.w instanceof A.A5)){s=r.b[1] +s=s!=null&&s!=="1"}else s=!1 +if(s)return!1 +r=r.b[2] +r=r==null?null:r.length!==0 +return r===!0}, +l1(c8,c9){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=this,c0=null,c1="class",c2="task-list-item",c3={},c4=c9.a,c5=b9.giY(b9).iU(c4[c9.d].a).b[1]!=null,c6=b9 instanceof A.Tm||b9 instanceof A.Px,c7=A.b([],t.Y6) +c3.a=A.b([],t.Rv) +c3.b=null +s=new A.aJt(c3,c7) +r=new A.aJu(c3,c6) +q=A.bn("possibleMatch") +p=new A.aJw(q,c9) +for(o=q.a,n=c0,m=n,l=m,k=l;j=c9.d,j1)break +g=A.bpW(i.a,l) +i=c3.a +h=g.a +j=j?h:r.$1(h) +h=$.nS() +i.push(new A.ja(j,g.b,h.b.test(j)))}else if(p.$1($.avx()))break +else if(p.$1($.avA())){j=q.b +if(j===q)A.X(A.fC(o)) +j.toString +i=c4[c9.d].a +f=new A.adn(i) +e=f.LM() +d=f.b +c=j.i(0,1) +if(c==null)c="" +j=c.length +if(j!==0){if(m==null)m=A.et(c,c0,c0) +f.b+=j}h=++f.b +b=B.d.am(i,d,h) +a=i.length +if(h!==a){a0=i.charCodeAt(h)===9 +a1=++f.b +if(a1!==a){a2=f.LM() +a3=f.b===a}else{a3=!0 +a2=0}}else{a1=c0 +a3=!0 +a2=0 +a0=!1}if(k!=null&&B.d.c5(k,k.length-1)!==B.d.c5(b,b.length-1))break +s.$0() +e+=j+2 +if(a3){l=e +n=1}else{l=a2>=4?e:e+a2 +n=c0}c3.b=null +a4=a1!=null&&!a3?r.$1(B.d.am(i,a1,c0)):"" +if(a4.length===0&&a0)a4=B.d.a2(" ",2)+a4 +j=c3.a +i=a0?2:c0 +h=$.nS() +j.push(new A.ja(a4,i,h.b.test(a4))) +k=b}else if(A.be2(c9))break +else{j=c3.a +if(j.length!==0&&B.b.ga_(j).c){c9.f=!0 +break}c3.a.push(c4[c9.d])}++c9.d}s.$0() +a5=A.b([],t.CE) +B.b.al(c7,b9.gaGh()) +a6=b9.aGk(c7) +for(c4=c7.length,o=t.c,j=t.N,i=c9.b,a7=!1,a8=!1,a9=0;a9")).cj(0,"\n"));++b.d +p=t.N +return new A.cq("h"+r,A.b([new A.wS(q)],t.c),A.D(p,p))}} +A.aSv.prototype={ +$1(a){return a.a}, +$S:75} +A.acS.prototype={ +tr(a){return!0}, +giY(a){return $.bdB()}, +qP(a){return a.aUZ($.bAP())}, +l1(a,b){var s,r,q,p,o,n,m,l=this.aEJ(b.gl_(0).a),k=l.length,j=this.a6W(b,l,"th"),i=j.b +i.toString +if(J.bo(i)!==k){--b.d +return null}i=t.c +s=t.N +r=new A.cq("thead",A.b([j],i),A.D(s,s));++b.d +q=A.b([],t.CE) +p=b.a +while(!0){if(!(b.dk;)m.eQ(n)}n.toString +m=J.al(n) +for(;m.gF(n)>k;)m.eQ(n) +q.push(o)}if(q.length===0)return new A.cq("table",A.b([r],i),A.D(s,s)) +else return new A.cq("table",A.b([r,new A.cq("tbody",q,A.D(s,s))],i),A.D(s,s))}, +aEJ(a){var s,r,q,p,o,n,m,l=A.b([],t._m) +for(s=a.length,r=!1,q=!1,p=null,o=0;o=r){j.push(B.d.rF(p.charCodeAt(0)==0?p:p)) +break}o=k.charCodeAt(s) +if(o===92){if(s===q){k=p+A.cs(o) +j.push(B.d.rF(k.charCodeAt(0)==0?k:k)) +break}n=k.charCodeAt(s+1) +p=n===124?p+A.cs(n):p+A.cs(o)+A.cs(n) +s+=2}else{++s +if(o===124){j.push(B.d.rF(p.charCodeAt(0)==0?p:p)) +s=this.aaA(k,s) +if(s>=r)break +p=""}else p+=A.cs(o)}}++a.d +k=A.b([],t.CE) +for(r=j.length,q=t.c,p=t.N,m=0;m?@\\[\\\\\\]^_`{|}~])",!0,!0,!1),92),new A.a1U(A.bw($.Zu().a,!1,!0,!1),38),A.bGC(g,"\\[",91),A.bFR(g)],r)) +B.b.I(l,$.bwi()) +i=new A.aHC(m,h,l,k,j).EX(0) +s.di(a,o) +s.hO(a,o,i) +o+=i.length-1}else if(n instanceof A.cq&&n.b!=null){m=n.b +m.toString +h.a6T(m)}}}, +axi(a){var s,r,q,p,o,n,m,l,k,j=A.b([],t.CE),i=t.c,h=A.b([],i) +for(s=a.length,r=this.b,q=0;q0}else{n=0 +m=!1}if(m){j.push(p) +l=p.b +if(l!=null)this.atJ(l,A.lM(B.kj,o,B.a1,!1),n)}}else h.push(p)}if(j.length!==0){s=t.N +r=A.D(s,t.S) +for(m=this.c,k=0;k0 +m=n?"-"+o:"" +l=A.b([new A.e9("\u21a9")],i) +if(n){n=A.b([new A.e9(o)],i) +k=A.D(s,s) +k.u(0,"class","footnote-ref") +l.push(new A.cq("sup",n,k))}n=A.D(s,s) +n.u(0,"href",r+m) +n.u(0,"class","footnote-backref") +B.b.I(h,A.b([new A.e9(" "),new A.cq("a",l,n)],i))}r=J.al(a) +if(r.gaA(a))r.I(a,h) +else{j=r.ga_(a) +if(j instanceof A.cq){i=j.b +if(i!=null)J.Zy(i,h)}else{i=A.b([j],i) +B.b.I(i,h) +r.sa_(a,new A.cq("p",i,A.D(s,s)))}}}} +A.aBC.prototype={ +$2(a,b){var s,r,q=a.c.i(0,"id"),p=q==null?null:q.toLowerCase() +if(p==null)p="" +q=b.c.i(0,"id") +s=q==null?null:q.toLowerCase() +if(s==null)s="" +q=this.a +r=q.i(0,p) +if(r==null)r=0 +q=q.i(0,s) +return r-(q==null?0:q)}, +$S:853} +A.FQ.prototype={} +A.aDU.prototype={} +A.aHC.prototype={ +EX(a){var s,r,q,p,o=this +for(s=o.a,r=s.length,q=o.c;p=o.d,p!==r;){if(s.charCodeAt(p)===93){o.Aa(0) +o.aCz() +continue}if(B.b.fk(q,new A.aHL(o)))continue;++o.d}o.Aa(0) +o.a79(-1) +s=o.r +o.a33(s) +return s}, +aCz(){var s,r,q,p,o,n,m,l,k=this,j=k.f,i=B.b.XI(j,new A.aHD()) +if(i===-1){k.r.push(new A.e9("]")) +k.e=++k.d +return}s=t.hw.a(j[i]) +if(!s.d){B.b.di(j,i) +k.r.push(new A.e9("]")) +k.e=++k.d +return}r=s.r +if(r instanceof A.A0&&B.b.fk(k.c,new A.aHE())){q=k.r +p=B.b.XI(q,new A.aHF(s)) +o=r.aNK(0,k,s,null,new A.aHG(k,i,p)) +if(o!=null){B.b.di(j,i) +if(s.b===91)for(j=B.b.cI(j,0,i),n=j.length,m=0;ma5&&j>l){i=s[j] +if(!(i instanceof A.Eu)){++q +continue}p=i.w +h=B.b.XI(p,new A.aHJ(i,n)) +if(h===-1){++q +continue}g=p[h] +f=g.b +e=i.a +d=B.b.f7(r,e) +c=n.a +o.a=B.b.f7(r,c) +b=i.d.U6(0,a2,i,n,new A.aHK(o,a2,d),g.a) +p=o.a +b.toString +B.b.j1(r,d+1,p,b) +o.a=d+2 +a=j+1 +if(!!s.fixed$length)A.X(A.af("removeRange")) +A.dl(a,q,s.length,null,null) +s.splice(a,q-a) +if(i.a.a.length===f){B.b.di(r,d) +B.b.di(s,j) +q=a-1;--o.a}else{a0=new A.e9(B.d.c5(e.a,f)) +r[d]=a0 +i.a=a0 +q=a}p=n.a +m=o.a +if(p.a.length===f){B.b.di(r,m) +B.b.di(s,q)}else{a1=new A.e9(B.d.c5(c.a,f)) +r[m]=a1 +n.a=a1}}else{m.u(p,B.f.bx(n.a.a.length,3),k) +if(!n.f)B.b.di(s,q) +else ++q}}B.b.hX(s,a3,p)}, +a33(a){var s,r,q,p,o,n +for(s=J.al(a),r=0;r=s&&this.b.a.a.length>=s}, +$S:859} +A.aHK.prototype={ +$0(){return B.b.cI(this.b.r,this.c+1,this.a.a)}, +$S:245} +A.a_l.prototype={ +N6(a){var s,r=a.d,q=a.a,p=this.a.u_(0,q,r) +if(p==null)return!1 +s=p.b +if(s[1]!=null&&a.d>0)if(!B.a6L.G(0,A.cs(q.charCodeAt(a.d-1))))return!1 +if(s[2]!=null&&q.length>p.gi7(0))if(B.a6I.G(0,A.cs(q.charCodeAt(p.gi7(0)))))return!1 +a.Aa(0) +this.ms(a,p) +return!0}, +ms(a,b){var s,r,q,p,o,n=b.b[2]!=null +if(n)s=b.i(0,0).length +else{r=b.i(0,0) +r.toString +s=this.ay_(r)}r=b.i(0,0) +r.toString +q=B.d.am(r,0,s) +if(n)p="mailto:"+q +else p=q[0]==="w"?"http://"+q:q +r=A.b([new A.e9(q)],t.c) +o=t.N +o=A.D(o,o) +o.u(0,"href",A.lM(B.dR,p,B.a1,!1)) +a.r.push(new A.cq("a",r,o)) +a.D0(s) +return!0}, +ay_(a){var s,r,q,p,o,n +if(B.d.iT(a,")")){s=A.bw("(\\(.*)?(\\)+)$",!0,!1,!1).iU(a).b +if(s[1]==null)r=s[2].length +else{for(s=a.length,q=0,p=0;p0&&a.a.charCodeAt(r-1)===96)return!1 +s=this.a.u_(0,a.a,r) +if(s==null)return!1 +a.Aa(0) +this.ms(a,s) +a.D0(s.i(0,0).length) +return!0}, +ms(a,b){var s=b.b[1].length,r=b.i(0,0).length,q=a.d+s,p=B.d.am(a.a,q,q+(r-s*2)) +if(this.aHX(p))p=B.d.am(p,1,p.length-1) +p=A.ea(p,"\n"," ") +r=t.N +a.r.push(new A.cq("code",A.b([new A.e9(p)],t.c),A.D(r,r))) +return!0}, +aHX(a){var s,r +if(B.d.eC(a).length===0)return!1 +s=B.d.c4(a," ")||B.d.c4(a,"\n") +r=B.d.iT(a," ")||B.d.iT(a,"\n") +if(!s||!r)return!1 +return!0}} +A.a1U.prototype={ +N6(a){var s,r=a.d +if(r>0&&a.a.charCodeAt(r-1)===96)return!1 +s=this.a.u_(0,a.a,r) +if(s==null)return!1 +if(s.b[1]!=null){r=s.i(0,0) +r.toString +r=B.CN.i(0,r)==null}else r=!1 +if(r)return!1 +a.Aa(0) +this.ms(a,s) +a.D0(s.i(0,0).length) +return!0}, +ms(a,b){var s=A.btE(b) +a.r.push(new A.e9(s)) +return!0}} +A.a28.prototype={ +ms(a,b){var s=this,r=b.b[0].length,q=a.d,p=q+r,o=a.a,n=new A.e9(B.d.am(o,q,p)) +if(!s.c){a.f.push(new A.RT(n,o.charCodeAt(q),r,!0,!1,s,p)) +a.r.push(n) +return!0}o=s.e +if(o==null)o=B.ZJ +a.f.push(A.bDA(a,q,p,s.d,n,s,o)) +a.r.push(n) +return!0}, +U6(a,b,c,d,e,f){var s=t.N +return A.b([new A.cq(f,e.$0(),A.D(s,s))],t.c)}} +A.pc.prototype={} +A.RT.prototype={$iMa:1, +gCP(){return this.b}, +gF(a){return this.c}, +gTW(){return this.e}, +gTV(){return this.f}, +stV(a){return this.d=a}} +A.Eu.prototype={ +gF(a){return this.a.a.length}, +j(a){var s=this +return""}, +$iMa:1, +gCP(){return this.b}, +gTW(){return this.f}, +gTV(){return this.r}, +stV(){}} +A.aAQ.prototype={ +$2(a,b){return B.f.cK(a.b,b.b)}, +$S:860} +A.a39.prototype={ +ms(a,b){var s,r,q=b.b[1] +q.toString +s=A.b([new A.e9(q)],t.c) +r=t.N +r=A.D(r,r) +r.u(0,"href",A.lM(B.dR,"mailto:"+q,B.a1,!1)) +a.r.push(new A.cq("a",s,r)) +return!0}} +A.MJ.prototype={} +A.a3o.prototype={ +ms(a,b){var s,r,q=b.i(0,0) +q.toString +s=b.b[1] +s.toString +B.d.G('&"<>',s) +r=q[1] +a.r.push(new A.e9(r)) +return!0}} +A.aF0.prototype={ +$1(a){return a.toLowerCase()===this.a}, +$S:25} +A.aF1.prototype={ +$0(){return""}, +$S:59} +A.a5c.prototype={ +Uv(a,b,c){var s,r=t.N +r=A.D(r,r) +s=c.$0() +r.u(0,"src",A.biD(A.bc7(a))) +r.u(0,"alt",J.mU(s,new A.aHq(),t.ob).mq(0)) +if(b!=null&&b.length!==0)r.u(0,"title",B.wQ.dB(A.Df(b,$.Zu(),A.bdf(),null))) +return new A.cq("img",null,r)}} +A.aHq.prototype={ +$1(a){if(a instanceof A.cq&&a.a==="img")return a.c.i(0,"alt") +return a.gww()}, +$S:233} +A.a5p.prototype={} +A.h9.prototype={ +N6(a){var s,r=a.d,q=this.b +if(q!=null)q=a.a.charCodeAt(r)!==q +else q=!1 +if(q)return!1 +s=this.a.u_(0,a.a,r) +if(s==null)return!1 +a.Aa(0) +if(this.ms(a,s))a.D0(s.i(0,0).length) +return!0}} +A.a6d.prototype={ +ms(a,b){var s=t.N +a.r.push(new A.cq("br",null,A.D(s,s))) +return!0}} +A.aJl.prototype={} +A.A0.prototype={ +U6(a,b,c,d,e,f){var s,r,q,p,o=this,n=new A.aJl(b,c,e),m=b.a,l=b.d,k=B.d.am(m,c.w,l);++l +s=m.length +if(l>=s)return o.IP(n,k) +r=m.charCodeAt(l) +if(r===40){b.d=l +q=o.aEV(b) +if(q!=null)return A.b([o.Uv(q.a,q.b,e)],t.c) +b.d=l +b.d=l+-1 +return o.IP(n,k)}if(r===91){b.d=l;++l +if(l"),n=new A.cz(n,s),n=new A.cR(n,n.gF(0),s.h("cR")),s=s.h("aI.E"),r=null;n.H();m=r){q=n.d +r=new A.xf(q==null?s.a(q):q,m,o,null)}if(r!=null)for(n=o.y2,n=A.cT(n,n.r,A.w(n).c),s=n.$ti.c;n.H();){q=n.d +if(q==null)q=s.a(q) +p=r.c +if(!J.f(q.bv,p)){q.bv=p +q.f8()}r=r.d +q.saTF(r) +if(!(r instanceof A.xf))break}return m}} +A.xf.prototype={ +cJ(a){return new A.xg(this,B.al)}, +ab(a){return A.X(A.ad("handled internally"))}} +A.xg.prototype={ +gba(){return t.Fn.a(A.b7.prototype.gba.call(this))}, +saTF(a){var s,r,q=this.y2 +if(a instanceof A.xf)if(q instanceof A.xf){s=a.c +r=q.c +s=A.J(s)===A.J(r)&&J.f(s.a,r.a)}else s=!1 +else s=!1 +if(s)return +if(!J.f(q,a)){this.y2=a +this.cc(new A.b4e())}}, +hA(a,b){var s=this,r=t.Fn +r.a(A.b7.prototype.gba.call(s)).e.y2.E(0,s) +s.bv=r.a(A.b7.prototype.gba.call(s)).c +s.y2=r.a(A.b7.prototype.gba.call(s)).d +s.GI(a,b)}, +qc(){t.Fn.a(A.b7.prototype.gba.call(this)).e.y2.P(0,this) +this.AT()}, +cY(){var s=this.bv +s.toString +return s}} +A.b4e.prototype={ +$1(a){return a.f8()}, +$S:16} +A.abC.prototype={} +A.b6H.prototype={ +$1(a){if(a instanceof A.xg)this.a.r9$=a +return!1}, +$S:20} +A.b8x.prototype={ +$1(a){if(a instanceof A.xg)this.a.r9$=a +return!1}, +$S:20} +A.tu.prototype={ +ab(a){return this.abB(a,this.c)}, +cJ(a){return A.bK5(this)}, +$itv:1} +A.RX.prototype={ +cY(){var s=this +if(s.r9$!=null)return t.k7.a(A.b7.prototype.gba.call(s)).abB(s,s.r9$.y2) +return s.aps()}, +gba(){return t.k7.a(A.b7.prototype.gba.call(this))}} +A.apN.prototype={ +hA(a,b){if(t.Ej.b(a))this.r9$=a +this.GI(a,b)}, +dd(){this.AS() +this.nJ(new A.b6H(this))}} +A.atG.prototype={ +hA(a,b){if(t.Ej.b(a))this.r9$=a +this.GI(a,b)}, +dd(){this.AS() +this.nJ(new A.b8x(this))}} +A.azG.prototype={ +$2(a,b){var s=this.a +return J.Dn(s.$1(a),s.$1(b))}, +$S(){return this.b.h("k(0,0)")}} +A.kx.prototype={ +asH(a,b){this.a=A.ac6(new A.aMb(a,b),null,b.h("bfB<0>")) +this.b=0}, +gF(a){var s=this.b +s===$&&A.c() +return s}, +gar(a){var s,r=this.a +r===$&&A.c() +s=r.$ti.h("@<1>").ak(A.w(this).h("kx.E")) +return new A.v_(r.gar(0),new A.aMc(this),B.j7,s.h("@<1>").ak(s.y[1]).h("v_<1,2>"))}, +ai6(a){var s,r=this +if(!r.c){s=A.ab(r,!1,A.w(r).h("z.E")) +r.d=new A.cz(s,A.a5(s).h("cz<1>"))}return r.d}, +E(a,b){var s,r=this,q=A.cC([b],A.w(r).h("kx.E")),p=r.a +p===$&&A.c() +s=p.ho(0,q) +if(!s){p=r.a.zz(q) +p.toString +s=J.iD(p,b)}if(s){p=r.b +p===$&&A.c() +r.b=p+1 +r.c=!1}return s}, +P(a,b){var s,r,q,p,o=this,n=o.a +n===$&&A.c() +s=A.w(o).h("kx.E") +r=n.zz(A.cC([b],s)) +if(r==null||!r.G(0,b)){n=o.a +q=new A.bg(n,new A.aMe(o,b),n.$ti.h("bg<1>")) +if(!q.gaA(0))r=q.ga9(0)}if(r==null)return!1 +p=r.P(0,b) +if(p){n=o.b +n===$&&A.c() +o.b=n-1 +o.a.P(0,A.C(s)) +o.c=!1}return p}, +af(a){var s +this.c=!1 +s=this.a +s===$&&A.c() +s.auP(0) +this.b=0}} +A.aMb.prototype={ +$2(a,b){if(a.gaA(a)){if(b.gaA(b))return 0 +return-1}if(b.gaA(b))return 1 +return this.a.$2(a.ga9(a),b.ga9(b))}, +$S(){return this.b.h("k(bO<0>,bO<0>)")}} +A.aMc.prototype={ +$1(a){return a}, +$S(){return A.w(this.a).h("bO(bO)")}} +A.aMe.prototype={ +$1(a){return a.fk(0,new A.aMd(this.a,this.b))}, +$S(){return A.w(this.a).h("F(bO)")}} +A.aMd.prototype={ +$1(a){return a===this.b}, +$S(){return A.w(this.a).h("F(kx.E)")}} +A.x0.prototype={} +A.jQ.prototype={ +zV(a,b){var s,r=this.f +if(r.aR(0,A.ay(b)))return +s=b.h("ca<0>") +r.u(0,A.ay(b),new A.x0(A.ab(new A.ca(this,s),!0,s.h("z.E")),b.h("@<0>").ak(A.w(this).h("jQ.T")).h("x0<1,2>")))}, +nw(a,b){var s,r=this.f.i(0,A.ay(b)) +if(r==null){this.zV(0,b) +s=this.nw(0,b) +return s}return b.h("H<0>").a(r.a)}, +E(a,b){if(this.aol(0,b)){this.f.al(0,new A.aOC(this,b)) +return!0}return!1}, +P(a,b){this.f.gbm(0).al(0,new A.aOE(this,b)) +return this.aon(0,b)}, +af(a){this.f.gbm(0).al(0,new A.aOD(this)) +this.aom(0)}} +A.aOC.prototype={ +$2(a,b){var s=this.b +if(b.$ti.c.b(s))B.b.E(b.a,s)}, +$S(){return A.w(this.a).h("~(jm,x0)")}} +A.aOE.prototype={ +$1(a){return B.b.P(a.a,this.b)}, +$S(){return A.w(this.a).h("~(x0)")}} +A.aOD.prototype={ +$1(a){return B.b.af(a.a)}, +$S(){return A.w(this.a).h("~(x0)")}} +A.KU.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.uI(0),$async$n) +case 2:q.ch=!1 +p=$.G().B() +p.sA(0,A.vc(B.en)) +o=q.RG +n=o/2 +p.sdk(A.Fd(B.h,o,A.b([A.vc(B.en),B.q],t.O),null,B.N,null,new A.i(n,n),0)) +q.x2!==$&&A.aj() +q.x2=p +return A.p(null,r)}}) +return A.q($async$n,r)}, +io(){var s,r,q,p=this,o=null,n=A.fb(0,0,0,!1,o,o,B.a2,o) +n.b=p +n.a=p.to?B.R:B.uf +n.c=p.rx +s=p.gaC().k3.go.fm(n) +s.sJl(0,p.ry) +r=A.a0w() +r.b=p.RG +q=A.jD(r,1,0,!1,0,o) +q.c=q.d=0.5 +s.i5(q) +return s}, +b4(a){var s=this.x2 +s===$&&A.c() +a.cs(B.h,this.RG,s)}, +CE(a,b){var s +if(this.to&&a instanceof A.yd){s=a.at +s===$&&A.c() +s.ab8(3*s.ax*100)}}} +A.bbX.prototype={ +$1(a){var s,r,q,p,o,n=a.y2 +if(n===$){s=a.RG.a +r=s[0] +s=s[1] +q=a.rx.a +p=q[0] +n=a.y2=A.wc(new A.i(r,s),q[1],p)}s=this.a +o=s.xr +if(o===$){r=s.rx.a +o=s.xr=A.jT(new A.i(r[0],r[1]),s.RG)}return n.wk(o)}, +$S:862} +A.afG.prototype={} +A.yd.prototype={ +gxv(){var s,r=this.bv +if(r===$){s=B.a8g.a2(0,10) +this.bv!==$&&A.N() +r=this.bv=new A.A(0,0,0+s.a,0+s.b)}return r}, +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.uI(0),$async$n) +case 2:p=$.G() +o=p.lu() +n=p.lt(o,q.gxv()) +m=p.Z() +l=p.B() +p=q.S$ +l.sA(0,p.gA(p)) +for(p=q.ac,k=A.a5(p).h("W<1,i>"),j=k.h("aI.E"),i=0;h=q.gxv(),i<(h.c-h.a)/4;++i){l.sA(0,A.beb(l.gA(l),0.1)) +m.bF(0) +m.Cq(A.ab(new A.W(p,new A.ayl(q,i),k),!0,j),!0) +n.a3(m,l)}g=o.jT() +p=q.gxv() +p=B.c.aw(p.c-p.a) +k=q.gxv() +s=3 +return A.x(g.rB(p,B.c.aw(k.d-k.b)),$async$n) +case 3:k=c +q.x2!==$&&A.aj() +q.x2=k +return A.p(null,r)}}) +return A.q($async$n,r)}, +io(){var s,r,q,p,o,n,m,l=this,k=null,j=new A.a(new Float64Array(2)) +j.p(20,30) +s=new A.a(new Float64Array(2)) +s.p(15,0) +r=j.X(0,s.a2(0,l.ry)) +q=A.fb(0,0,0,!1,k,k,B.a2,k) +q.a=B.R +q.c=r +p=l.gaC().k3.go.fm(q) +p.fr=l +p.cy=3 +o=A.nj() +o.jB(0,l.ac) +n=A.jD(o,1,0,!1,0,k) +n.e=0.2 +n.d=2 +p.i5(n) +s=t.o9 +m=A.aQz(s,s) +m.d=p +m.w=!0 +m.y=m.x=0 +m.b.cv() +s=A.lr(4,new A.ayk(l,m),t.l_) +l.RG!==$&&A.aj() +l.RG=s +l.gaC().k3.I(0,s) +return p}, +a8(a,b){var s,r=this.x1.ax,q=this.at +q===$&&A.c() +s=r.at.f +s.a7(q.d.a.fv(0)) +s.D() +r.dx=null}, +b4(a){var s,r,q,p,o,n=this,m=n.x2 +m===$&&A.c() +s=n.gxv() +r=n.bn +if(r===$){r=n.y2 +if(r===$){q=new A.i(-6,-10).b1(0,2) +n.y2!==$&&A.N() +n.y2=q +r=q}p=r.a +o=r.b +n.bn!==$&&A.N() +r=n.bn=new A.A(p,o,p+6,o+10)}a.i6(m,s,r,n.S$)}, +h3(){var s,r,q,p=this.RG +p===$&&A.c() +s=0 +for(;s<4;++s){r=p[s] +q=r.e +if(q!=null)q.o6(0,r)}}} +A.ayl.prototype={ +$1(a){var s=a.a,r=this.b +s=new A.i(s[0],s[1]).a2(0,10).Y(0,new A.i(r*J.eY(s[0]),r*J.eY(s[1]))) +r=this.a.gxv() +return s.X(0,new A.i(r.c,r.d).b1(0,2))}, +$S:72} +A.ayk.prototype={ +$1(a){var s,r,q,p,o,n,m,l=null,k=a<=1,j=this.a,i=j.gaC().hK +i===$&&A.c() +i=i[j.ry] +s=new A.a(new Float64Array(2)) +s.p(0.5,1.25) +r=B.fB.aW() +q=new A.a(new Float64Array(2)) +q.p(1,0) +p=new A.a(new Float64Array(2)) +p.p(0,-1) +o=$.G().B() +n=j.S$ +o.sA(0,n.gA(n)) +o.sbM(0.2) +o.sU(0,B.u) +n=A.ar() +m=B.t.aW() +j=new A.Cl(j,s,i,this.b,k,k,(a&1)===0,r,q,p,l,l,!0,n,$,m,l,l,2,l,B.e,new A.e([],t.s),new A.e([],t.g)) +j.iI(l,l,l,l,o,2,!0) +return j}, +$S:863} +A.a4a.prototype={ +W(){return"GameColors."+this.b}} +A.F6.prototype={ +ab(a){var s=null,r=A.am(a).p2,q=this.c,p=t.p +return A.me(B.ab,!0,s,A.l8(A.IH(B.ap,A.b([new A.G9(A.b([A.dI("Player "+(q.kT.ry+1)+" wins!",s,s,s,r.a,s,s),B.eQ,A.dI("Time: "+q.gaik(),s,s,s,r.y,s,s),B.eQ,A.n8(B.aeX,q.gZb(q),s)],p),s)],p),B.iN),s,s),B.y,B.B,0,s,s,s,s,s,B.dT)}} +A.zX.prototype={ +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.uI(0) +s=q.rx?2:3 +break +case 2:s=4 +return A.x(q.aP9(),$async$n) +case 4:q.x2=c +case 3:return A.p(null,r)}}) +return A.q($async$n,r)}, +io(){var s,r,q,p,o,n=this,m=null,l=n.S$,k=n.rx?A.vc(B.en):A.vc(B.en),j=k.a +A.S(B.c.ai(127.5),j>>>16&255,j>>>8&255,j&255) +l.sA(0,k) +k=n.S$ +k.sU(0,B.i) +l=n.to +j=l.b1(0,2).a +s=j[0] +j=j[1] +l=l.a +r=Math.max(l[0],l[1]) +q=n.S$ +k.sdk(A.Fd(new A.i(s,j),r,A.b([q.gA(q),B.q],t.O),m,B.N,m,m,0)) +p=n.gaC().k3.go.fm(A.fb(0,0,0,!1,m,n.ry,B.a2,n)) +o=A.nj() +o.mF(l[0]/2,l[1]/2) +p.i5(A.jD(o,1,0,!0,0,m)) +return p}, +gy5(){var s,r,q=this,p=q.xr +if(p===$){s=q.to.a2(0,10).a +r=s[0] +s=s[1] +q.xr!==$&&A.N() +p=q.xr=new A.A(0,0,0+r,0+s)}return p}, +aP9(){var s,r,q,p,o,n=this,m=$.G(),l=m.lu(),k=m.lt(l,n.gy5()) +m=n.gy5() +s=(m.c-m.a)/2 +r=B.fB.aW() +for(q=0;m=q*s,p=n.gy5(),mthis.a.RG}, +$S:864} +A.akH.prototype={} +A.a5V.prototype={ +gLy(){var s=this.ok +if(s===$){s!==$&&A.N() +s=this.ok=this.k4.rx}return s}, +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:j=A.cO(q.en(0),t.H) +s=2 +return A.x(j,$async$n) +case 2:j=q.k4 +p=j.S$ +o=A.a4s(p.gA(p),35,null) +n=A.dW(o,B.r) +m=A.dW(o.aOM(55,B.b3),B.r) +p=new A.a(new Float64Array(2)) +p.p(0,-20) +l=t.Z0 +q.J(A.dm(B.j,null,null,null,p,null,null,null,"Lap",n,l)) +p=new A.a(new Float64Array(2)) +p.p(0,10) +k=A.dm(B.j,null,null,null,p,null,null,null,null,m,l) +q.J(k) +l=new A.aIR(q,k) +p=new A.a(new Float64Array(2)) +p.p(0,70) +p=A.dm(B.j,null,null,null,p,null,null,null,null,n,t.Fr) +q.p1!==$&&A.aj() +q.p1=p +q.J(p) +p=$.G().B() +j=j.S$ +p.sA(0,j.gA(j)) +p.sU(0,B.u) +p.sbM(2) +q.p3!==$&&A.aj() +q.p3=p +q.gLy().an(0,l) +l.$0() +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s +if(this.gaC().fE)return +s=this.p1 +s===$&&A.c() +s.sd7(0,this.gaC().gaik())}, +b4(a){var s=this.p3 +s===$&&A.c() +a.dm(this.p2,s)}} +A.aIR.prototype={ +$0(){var s,r=this.a +if(r.gLy().a<=3){s=r.gLy().a<10?"0":"" +this.b.sd7(0,s+A.j(r.gLy().a))}else this.b.sd7(0,"DONE")}, +$S:0} +A.akI.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.G8.prototype={ +ab(a){var s,r=null,q=A.am(a).p2,p=q.z,o=t.p,n=A.b([A.dI("PadRacing",r,r,r,q.a,r,r),A.dI("First to 3 laps win",r,r,r,q.y,r,r),B.eQ,A.n8(B.af2,new A.aKx(this),r),A.dI("Arrow keys",r,r,r,p,r,r),B.eQ,A.n8(B.aeW,new A.aKy(this),r),A.dI("WASD",r,r,r,p,r,r)],o),m=A.cS(r,r,r,p,"Made by ") +p=p==null?r:p.aOH(A.vc(B.en),B.lk) +s=A.I5(r,r,r) +s.b_=new A.aKz() +return A.me(B.ab,!0,r,A.l8(A.IH(B.ap,A.b([A.hm(A.b([new A.G9(n,r),new A.G9(A.b([A.bgt(r,r,B.cI,r,r,!0,r,A.cS(A.b([m,A.cS(r,s,r,p,"Lukas Klingsbo (spydon)")],t.VO),r,r,r,r),B.aA,r,r,B.aq,B.aM)],o),r)],o),B.ah,B.ac,B.ak)],o),B.iN),r,r),B.y,B.B,0,r,r,r,r,r,B.dT)}} +A.aKx.prototype={ +$0(){this.a.c.agX(1)}, +$S:0} +A.aKy.prototype={ +$0(){this.a.c.agX(2)}, +$S:0} +A.aKz.prototype={ +$0(){A.bcC(A.jn("https://github.com/spydon",0,null))}, +$S:0} +A.G9.prototype={ +ab(a){var s=null,r=A.vc(B.en) +return A.aym(A.dD(s,A.hm(this.c,B.ah,B.ac,B.ak),B.y,s,s,s,s,B.dJ,s,s),B.q,10,B.Uc,r)}} +A.hu.prototype={ +mV(a){return B.q}, +n(a6){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5 +var $async$n=A.t(function(a7,a8){if(a7===1)return A.o(a8,r) +while(true)switch(s){case 0:q.nX(0) +q.k4.eb() +q.gbQ(0).zV(0,t.O1) +p=$.bjg() +o=p.a +n=o[0] +m=new A.a(new Float64Array(2)) +m.p(n/2,0) +n=o[0] +l=o[1] +k=new A.a(new Float64Array(2)) +k.p(n/2,l) +n=o[1] +j=new A.a(new Float64Array(2)) +j.p(0,n/2) +n=o[0] +o=o[1] +i=new A.a(new Float64Array(2)) +i.p(n,o/2) +o=new A.a(new Float64Array(2)) +o.v(p) +n=new A.a(new Float64Array(2)) +n.ag(5) +n=o.X(0,n).a +o=n[0] +l=new A.a(new Float64Array(2)) +l.p(o,5) +l=A.mK(m,l) +o=n[1] +h=new A.a(new Float64Array(2)) +h.p(5,o) +h=A.mK(j,h) +o=new A.a(new Float64Array(2)) +o.p(52.5,240) +g=new A.a(new Float64Array(2)) +g.p(5,380) +g=A.mK(o,g) +o=new A.a(new Float64Array(2)) +o.p(200,50) +f=new A.a(new Float64Array(2)) +f.p(300,5) +f=A.mK(o,f) +o=new A.a(new Float64Array(2)) +o.p(72.5,300) +e=new A.a(new Float64Array(2)) +e.p(5,400) +e=A.mK(o,e) +o=new A.a(new Float64Array(2)) +o.p(180,100) +d=new A.a(new Float64Array(2)) +d.p(220,5) +d=A.mK(o,d) +o=new A.a(new Float64Array(2)) +o.p(350,105) +c=new A.a(new Float64Array(2)) +c.p(5,115) +c=A.mK(o,c) +o=new A.a(new Float64Array(2)) +o.p(310,160) +b=new A.a(new Float64Array(2)) +b.p(240,5) +b=A.mK(o,b) +o=new A.a(new Float64Array(2)) +o.p(211.5,400) +a=new A.a(new Float64Array(2)) +a.p(283,5) +a=A.mK(o,a) +o=new A.a(new Float64Array(2)) +o.p(351,312.5) +a0=new A.a(new Float64Array(2)) +a0.p(5,180) +a0=A.mK(o,a0) +o=new A.a(new Float64Array(2)) +o.p(430,302.5) +a1=new A.a(new Float64Array(2)) +a1.p(5,290) +a1=A.mK(o,a1) +o=new A.a(new Float64Array(2)) +o.p(292.5,450) +a2=new A.a(new Float64Array(2)) +a2.p(280,5) +a2=A.mK(o,a2) +o=n[1] +a3=new A.a(new Float64Array(2)) +a3.p(o,5) +a3=A.mK(k,a3) +n=n[1] +o=new A.a(new Float64Array(2)) +o.p(5,n) +a4=A.b([l,h,g,f,e,d,c,b,a,a0,a1,a2,a3,A.mK(i,o)],t.zB) +o=new A.a(new Float64Array(2)) +o.p(200,245) +a5=A.bkE(o,!1,80,1) +o=q.k3 +n=new A.a(new Float64Array(2)) +n.p(25,50) +l=new A.a(new Float64Array(2)) +l.p(50,5) +l=A.bfy(1,n,l,!1) +n=new A.a(new Float64Array(2)) +n.p(25,70) +h=new A.a(new Float64Array(2)) +h.p(50,5) +h=A.bfy(2,n,h,!1) +n=new A.a(new Float64Array(2)) +n.p(52.5,25) +g=new A.a(new Float64Array(2)) +g.p(5,50) +g=A.b([l,h,A.bfy(3,n,g,!0),a5],t.W) +B.b.I(g,a4) +B.b.I(g,A.bRV(p,a4,a5)) +o.I(0,g) +q.agw() +return A.p(null,r)}}) +return A.q($async$n,r)}, +agw(){var s,r,q,p,o,n,m=this,l=null +m.gnr().E(0,"menu") +s=m.fx$.a +r=s[0] +q=$.bjg() +p=q.a +o=Math.min(r/p[0],s[1]/p[1]) +p=A.aU(l,l,l,l,l,m.k3) +s=p.ax +r=s.at +n=r.f +n.a7(q.b1(0,2).fv(0)) +n.D() +s.dx=null +s.ax=B.j +s.jr() +q=new A.a(new Float64Array(2)) +q.ag(o-0.2) +r=r.e +r.a7(q) +r.D() +s.dx=null +m.hJ=p +m.J(p)}, +agX(a){var s,r=null,q=this.hJ +q===$&&A.c() +q=q.ax +s=new A.a(new Float64Array(2)) +s.ag(8) +q.J(A.ap8(s,A.dr(!1,0,B.z,1,!1,r,r,r,0),r,new A.aMq(this,a))) +s=new A.a(new Float64Array(2)) +s.ag(20) +q.J(A.P_(s,A.dr(!1,0,B.z,1,!1,r,r,r,0)))}, +ama(b2,b3){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=this,b1=null +b0.fE=!1 +b0.gnr().P(0,"menu") +s=b0.hJ +s===$&&A.c() +s.eb() +s=b0.fx$.a +r=new A.aMr(b0,s[0]>s[1]) +q=r.$1$longMultiplier(1/b3) +p=new A.aMt(q) +s=t.O1 +o=J.el(b3,s) +for(n=q.a,m=0;m3){s=this.a +s.fE=!0 +s.kT=q +s.gnr().E(0,"game_over") +q=new A.a(new Float64Array(2)) +q.ag(1.5) +p.I(0,A.b([A.Rh(q,A.dr(!0,0,B.z,0.2,!1,3,r,r,0),r,r),A.wk(6.283185307179586,A.dr(!1,0,B.z,0.5,!1,r,r,r,0),r,r)],t.W))}else{q=new A.a(new Float64Array(2)) +q.ag(1.5) +p.J(A.Rh(q,A.dr(!0,0,B.z,0.2,!1,r,r,r,0),r,r))}}, +$S:0} +A.aMp.prototype={ +$2(a,b){var s,r=this.b +if(b.aR(0,r)){s=this.a.hK +s===$&&A.c() +s=s[a] +r=b.i(0,r) +r.toString +s.E(0,r)}}, +$S:867} +A.amu.prototype={} +A.Gu.prototype={ +ab(a){var s,r,q,p,o,n,m,l=null,k=A.a4s(B.l,35,l),j=A.a4s(l,30,B.az) +j=A.aVU(A.a4s(B.CU,28,l),A.a4s(B.CU,18,l),l,k,l,l,l,l,l,j,l,l,l,l,l) +s=A.Cd(l,new A.EJ(A.bmt(l,l,B.q,l,l,l,l,l,l,l,l,B.a7X,l,l,l,l,l,l,l)),A.bG_(B.HB,new A.mI(B.j1,new A.bL(B.jo,1,B.J,-1)),B.HB,B.jo),j,l) +j=A.b([],t.sN) +k=new Float64Array(2) +k=A.zl(l,l,new A.a(k)) +r=A.aU(l,l,l,l,l,l) +q=r.ax +p=new A.a(new Float64Array(2)) +p.ag(1) +o=q.at.e +o.a7(p) +o.D() +q.dx=null +q=r +p=$.aC() +o=$.aL() +n=A.b([],t.u) +m=A.aP(A.aQ(),t.y) +j=new A.hu(j,k,q,p,o,B.m,n,m,A.C(t.S),A.C(t.F),0,l,B.e,new A.e([],t.s),new A.e([],t.g)) +j.aT(r,l,k,t.E) +return A.bfL(!0,A.aO(j,B.a__,new A.aMu(),l,A.b3(["menu",new A.aMv(),"game_over",new A.aMw()],t.N,t.kF),t._1),l,l,l,B.ki,s,"PadRacing")}} +A.aMu.prototype={ +$1(a){var s=null +return A.l8(A.dI("Loading...",s,s,s,A.am(a).p2.a,s,s),s,s)}, +$S:120} +A.aMv.prototype={ +$2(a,b){return new A.G8(b,null)}, +$S:869} +A.aMw.prototype={ +$2(a,b){return new A.F6(b,null)}, +$S:870} +A.Cl.prototype={ +ga7B(){var s,r,q,p=this.ry +if(p===$){s=this.rx.a +r=s[0] +s=s[1] +q=A.GS(-r,-s,r,s,B.a5c) +p!==$&&A.N() +this.ry=q +p=q}return p}, +ga6g(){var s,r=this.x1 +if(r===$){s=this.ah?600:300 +r!==$&&A.N() +r=this.x1=s}return r}, +ga6h(){var s,r=this.x2 +if(r===$){s=this.ah?7.5:8.5 +r!==$&&A.N() +r=this.x2=s}return r}, +n(a){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.uI(0),$async$n) +case 2:p=q.gaC().k3 +o=A.b([],t.yv) +n=B.t.aW() +p.J(new A.adN(q,o,$,n,null,1,null,B.e,new A.e([],t.s),new A.e([],t.g))) +return A.p(null,r)}}) +return A.q($async$n,r)}, +io(){var s,r,q,p=this,o=p.b_?-3:3,n=p.ah?3.5:-4.25,m=new A.a(new Float64Array(2)) +m.p(o,n) +s=A.fb(0,0,0,!1,null,null,B.a2,null) +s.a=B.R +o=p.RG.at +o===$&&A.c() +s.c=o.d.a.X(0,m) +r=p.gaC().k3.go.fm(s) +r.fr=p +q=A.nj() +q.mF(0.5,1.25) +r.acw(q).y=p +o=p.bv +o.e=r +o.a.v(m) +n=p.gaC().k3 +o=A.aQy(o) +p.bn!==$&&A.aj() +p.bn=o +n.go.iQ(o) +o.O2(0,0) +return r}, +a8(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=d.at +c===$&&A.c() +if((c.b&2)===2||d.to.a!==0){c=d.to +s=c.G(0,B.bo) +if(s){r=-0.6 +q=-15}else{r=0 +q=0}if(c.G(0,B.bp)){q+=15 +r+=0.6 +s=!0}p=d.ac&&s +o=d.bn +if(p){n=4*b +o===$&&A.c() +p=o.a +p===$&&A.c() +m=o.b +m===$&&A.c() +l=m.f.e-p.f.e-o.ay +k=l+B.c.bX(r-l,-n,n) +o.O2(k,k)}else{o===$&&A.c() +o.O2(0,0)}d.at.aMx(q) +j=A.ck(d.at.d.b,d.M) +j.au(0,j.bO(d.at.r)) +j.au(0,-d.at.ax) +j.JB(-d.ga6h(),d.ga6h()) +j.au(0,1) +d.at.vh(j) +p=d.at +p.ab8(0.1*p.a_j()*-d.at.w) +i=d.ga4k() +h=Math.sqrt(i.gd2()) +i.e0(0) +p=d.at +i.au(0,-2*h) +p.aba(i) +if(!d.gaC().fE){g=c.G(0,B.bv)?250:0 +if(c.G(0,B.bJ))g+=-40 +c=d.at +p=new A.a(new Float64Array(2)) +p.p(0,1) +i=A.ck(c.d.b,p) +f=d.ga4k().bO(i) +if(gf?d.ga6g():0 +if(Math.abs(e)>0){c=d.at +i.au(0,e) +c.aba(i)}}}}, +b4(a){var s=this +a.dm(s.ga7B(),s.a5) +a.dm(s.ga7B(),s.S$)}, +ga4k(){var s,r=this.at +r===$&&A.c() +s=A.ck(r.d.b,this.av) +s.au(0,s.bO(this.at.r)) +return s}} +A.adN.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=q.S$ +o=q.ax.S$ +o=o.gA(o).a +p.sA(0,A.S(B.c.ai(229.5),o>>>16&255,o>>>8&255,o&255)) +p.sbM(1) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s=this.ax,r=s.at +r===$&&A.c() +if(r.r.gd2()>100){r=this.ay +if(r.length>30)B.b.di(r,0) +s=s.at.d.a.a +r.push(new A.i(s[0],s[1]))}else{s=this.ay +if(s.length!==0)B.b.di(s,0)}}, +b4(a){a.tE(B.EZ,this.ay,this.S$)}, +$ib5:1} +A.arE.prototype={} +A.Cy.prototype={ +gCf(){var s,r,q=this,p=q.xr +if(p===$){s=q.rx.a2(0,10).a +r=s[0] +s=s[1] +q.xr!==$&&A.N() +p=q.xr=new A.A(0,0,0+r,0+s)}return p}, +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j,i +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x(q.uI(0),$async$n) +case 2:q.S$.sA(0,A.bec("#14F596")) +p=$.G() +o=p.lu() +n=p.lt(o,q.gCf()) +p=q.gCf() +m=new Float64Array(2) +l=new A.a(m) +l.p(p.c-p.a,p.d-p.b) +p=l.b1(0,2).a +k=new A.i(p[0],p[1]) +p=m[0] +n.b7(A.wc(k,m[1],p),B.fB.aW()) +q.S$.sU(0,B.u) +q.S$.sbM(1) +for(j=0;j<30;++j){p=m[0] +n.b7(A.wc(k,m[1],p),q.S$) +p=q.S$ +p.sA(0,A.beb(p.gA(p),0.07)) +m[0]=m[0]-1 +m[1]=m[1]-1}i=o.jT() +p=q.gCf() +p=B.c.aw(p.c-p.a) +m=q.gCf() +s=3 +return A.x(i.rB(p,B.c.aw(m.d-m.b)),$async$n) +case 3:m=c +q.to!==$&&A.aj() +q.to=m +return A.p(null,r)}}) +return A.q($async$n,r)}, +b4(a){var s,r,q,p,o,n,m,l=this,k=l.to +k===$&&A.c() +s=l.gCf() +r=l.y1 +if(r===$){r=l.x2 +if(r===$){q=l.rx.a +p=new A.i(-q[0],-q[1]).b1(0,2) +l.x2!==$&&A.N() +l.x2=p +r=p}q=l.rx.a +o=q[0] +q=q[1] +n=r.a +m=r.b +l.y1!==$&&A.N() +r=l.y1=new A.A(n,m,n+o,m+q)}a.i6(k,s,r,l.S$)}, +io(){var s,r,q,p,o=this,n=null,m=A.fb(0,0,0,!1,n,n,B.a2,n) +m.a=B.a2 +m.c=o.RG +s=o.gaC().k3.go.fm(m) +s.fr=o +s.cy=3 +r=A.nj() +q=o.rx.a +r.mF(q[0]/2,q[1]/2) +p=A.jD(r,1,0,!1,0,n) +p.d=0.5 +s.i5(p) +return s}} +A.a1x.prototype={ +ad6(a){var s,r,q=A.bg9(a,this.a) +q.ahM() +s=q.d +r=s.length +if(r===0){s=q.b +return s==null?".":s}if(r===1){s=q.b +return s==null?".":s}B.b.eQ(s) +q.e.pop() +q.ahM() +return q.j(0)}, +aUh(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var s=A.b([b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q],t._m) +A.bi7("join",s) +return this.XE(new A.ca(s,t.Ri))}, +XE(a){var s,r,q,p,o,n,m,l,k +for(s=a.gar(0),r=new A.fG(s,new A.aAb(),a.$ti.h("fG")),q=this.a,p=!1,o=!1,n="";r.H();){m=s.ga1(0) +if(q.zs(m)&&o){l=A.bg9(m,q) +k=n.charCodeAt(0)==0?n:n +n=B.d.am(k,0,q.A2(k,!0)) +l.b=n +if(q.LP(n))l.e[0]=q.gGf() +n=""+l.j(0)}else if(q.A1(m)>0){o=!q.zs(m) +n=""+m}else{if(!(m.length!==0&&q.Uc(m[0])))if(p)n+=q.gGf() +n+=m}p=q.LP(m)}return n.charCodeAt(0)==0?n:n}} +A.aAb.prototype={ +$1(a){return a!==""}, +$S:25} +A.b9B.prototype={ +$1(a){return a==null?"null":'"'+a+'"'}, +$S:197} +A.aHU.prototype={ +akg(a){var s=this.A1(a) +if(s>0)return B.d.am(a,0,s) +return this.zs(a)?a[0]:null}} +A.aMU.prototype={ +ahM(){var s,r,q=this +while(!0){s=q.d +if(!(s.length!==0&&J.f(B.b.ga_(s),"")))break +B.b.eQ(q.d) +q.e.pop()}s=q.e +r=s.length +if(r!==0)s[r-1]=""}, +j(a){var s,r=this,q=r.b +q=q!=null?""+q:"" +for(s=0;s=0;--s)if(a[s]===b){++r +if(r===c)return s +q=s}return q}, +aJD(){var s,r,q=this.d +q=new A.hk(q,A.a5(q).h("hk<1,h?>")) +s=q.XJ(q,new A.aMV(),new A.aMW()) +if(s==null)return A.b(["",""],t.T) +if(s==="..")return A.b(["..",""],t.T) +r=this.aCn(s,".",1) +if(r<=0)return A.b([s,""],t.T) +return A.b([B.d.am(s,0,r),B.d.c5(s,r)],t.T)}} +A.aMV.prototype={ +$1(a){return a!==""}, +$S:247} +A.aMW.prototype={ +$0(){return null}, +$S:28} +A.aUl.prototype={ +j(a){return this.gfX(this)}} +A.aOi.prototype={ +Uc(a){return B.d.G(a,"/")}, +Ls(a){return a===47}, +LP(a){var s=a.length +return s!==0&&a.charCodeAt(s-1)!==47}, +A2(a,b){if(a.length!==0&&a.charCodeAt(0)===47)return 1 +return 0}, +A1(a){return this.A2(a,!1)}, +zs(a){return!1}, +gfX(){return"posix"}, +gGf(){return"/"}} +A.aX6.prototype={ +Uc(a){return B.d.G(a,"/")}, +Ls(a){return a===47}, +LP(a){var s=a.length +if(s===0)return!1 +if(a.charCodeAt(s-1)!==47)return!0 +return B.d.iT(a,"://")&&this.A1(a)===s}, +A2(a,b){var s,r,q,p=a.length +if(p===0)return 0 +if(a.charCodeAt(0)===47)return 1 +for(s=0;s0){s=B.d.jX(a,"\\",s+1) +if(s>0)return s}return r}if(r<3)return 0 +if(!A.btZ(a.charCodeAt(0)))return 0 +if(a.charCodeAt(1)!==58)return 0 +r=a.charCodeAt(2) +if(!(r===47||r===92))return 0 +return 3}, +A1(a){return this.A2(a,!1)}, +zs(a){return this.A1(a)===1}, +gfX(){return"windows"}, +gGf(){return"\\"}} +A.dY.prototype={ +X(a,b){return new A.dY(this.a+b.a,this.b+b.b)}, +Y(a,b){return new A.dY(this.a-b.a,this.b-b.b)}, +a2(a,b){return new A.dY(this.a*b,this.b*b)}, +j(a){return"PathOffset{"+A.j(this.a)+","+A.j(this.b)+"}"}, +k(a,b){if(b==null)return!1 +return b instanceof A.dY&&b.a===this.a&&b.b===this.b}, +gL(a){return((391^B.c.gL(this.a))*23^B.c.gL(this.b))>>>0}} +A.aUJ.prototype={ +BZ(){var s,r,q,p,o,n=this +for(s=n.a,r=n.d;!0;){q=n.c +if(q>=r)return-1 +p=s.charCodeAt(q) +if(p<=32)o=p===32||p===10||p===9||p===13||p===12 +else o=!1 +if(!o)return p +n.c=q+1}}, +a8s(){if(this.BZ()===44){++this.c +this.BZ()}}, +aD2(a,b){var s +if(!(a>=48&&a<=57||a===43||a===45||a===46)||this.b===B.rL)return b +s=this.b +if(s===B.rQ)return B.GE +if(s===B.rR)return B.GF +return s}, +pg(){var s=this,r=s.c +if(r>=s.d)return-1 +s.c=r+1 +return s.a.charCodeAt(r)}, +jG(){var s,r,q,p,o,n,m,l,k,j,i=this,h="Numeric overflow" +i.BZ() +s=i.pg() +if(s===43){s=i.pg() +r=1}else if(s===45){s=i.pg() +r=-1}else r=1 +if((s<48||s>57)&&s!==46)throw A.d(A.ad("First character of a number must be one of [0-9+-.].")) +q=0 +while(!0){if(!(48<=s&&s<=57))break +q=q*10+(s-48) +s=i.pg()}if(!(-17976931348623157e292<=q&&q<=17976931348623157e292))throw A.d(A.ad(h)) +if(s===46){s=i.pg() +if(s<48||s>57)throw A.d(A.ad("There must be at least one digit following the .")) +p=0 +o=1 +while(!0){if(!(48<=s&&s<=57))break +o*=0.1 +p+=(s-48)*o +s=i.pg()}}else p=0 +n=(q+p)*r +m=i.c +if(m57)throw A.d(A.ad("Missing exponent")) +j=0 +while(!0){if(!(s>=48&&s<=57))break +j=j*10+(s-48) +s=i.pg()}if(k)j=-j +if(!(-37<=j&&j<=38))throw A.d(A.ad("Invalid exponent "+j)) +if(j!==0)n*=Math.pow(10,j)}if(!(-17976931348623157e292<=n&&n<=17976931348623157e292))throw A.d(A.ad(h)) +if(s!==-1){--i.c +i.a8s()}return n}, +a6S(){var s,r=this,q=r.c +if(q>=r.d)throw A.d(A.ad("Expected more data")) +r.c=q+1 +s=r.a.charCodeAt(q) +r.a8s() +if(s===48)return!1 +else if(s===49)return!0 +else throw A.d(A.ad("Invalid flag value"))}, +agM(){return new A.eW(this.aXo(),t.PF)}, +aXo(){var s=this +return function(){var r=0,q=1,p,o +return function $async$agM(a,b,c){if(b===1){p=c +r=q}while(true)switch(r){case 0:o=s.d +case 2:if(!(s.c1){b0*=Math.sqrt(m) +b1*=Math.sqrt(m)}q.ci() +q.ff(0,1/b0,1/b1) +q.mw(a9) +l=a8.xP(q,b2) +k=a8.xP(q,b3.b) +j=k.Y(0,l) +a9=j.a +o=j.b +i=Math.sqrt(Math.max(1/(a9*a9+o*o)-0.25,0)) +if(!isFinite(i))i=0 +j=j.a2(0,b3.e===b3.f?-i:i) +a9=l.X(0,k).a2(0,0.5) +o=a9.a+-j.b +a9=a9.b+j.a +h=new A.dY(o,a9) +l=l.Y(0,h) +g=Math.atan2(l.b,l.a) +k=k.Y(0,h) +f=Math.atan2(k.b,k.a)-g +if(f<0&&b3.e)f+=6.283185307179586 +else if(f>0&&!b3.e)f-=6.283185307179586 +q.ci() +q.mw(s) +q.ff(0,b0,b1) +e=B.c.d0(Math.abs(f/1.5717963267948964)) +for(n=b4.a,d=0;d"))}} +A.a6E.prototype={ +ga1(a){var s=this.e +s===$&&A.c() +return s}, +H(){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.cB(s,p) +p=n.d +if(o<0)n.d=p+1 +else{s=q.cm(new A.Ef(s,p)) +n.e=s.gm(s) +s=n.d +if(s===o)n.d=s+1 +else n.d=o +return!0}}return!1}} +A.oa.prototype={ +cm(a){var s,r=a.a,q=a.b,p=this.a.cB(r,q) +if(p<0)return new A.cr(this.b,r,q) +s=B.d.am(r,q,p) +return new A.dA(s,r,p,t.Xb)}, +cB(a,b){return this.a.cB(a,b)}, +j(a){var s=this.rU(0) +return s+"["+this.b+"]"}} +A.OE.prototype={ +cm(a){var s,r=this.a.cm(a) +if(r instanceof A.cr)return r +s=this.b.$1(r.gm(r)) +return new A.dA(s,r.a,r.b,this.$ti.h("dA<2>"))}, +cB(a,b){var s=this.a.cB(a,b) +return s}} +A.T9.prototype={ +cm(a){var s,r,q,p=this.a.cm(a) +if(p instanceof A.cr)return p +s=p.gm(p) +r=p.b +q=this.$ti +return new A.dA(new A.tG(s,a.a,a.b,r,q.h("tG<1>")),p.a,r,q.h("dA>"))}, +cB(a,b){return this.a.cB(a,b)}} +A.RV.prototype={ +nG(a){return this.a===a}} +A.yx.prototype={ +nG(a){return this.a}} +A.a6q.prototype={ +asA(a){var s,r,q,p,o,n,m,l +for(s=a.length,r=this.a,q=this.c,p=0;p>>0}}}, +nG(a){var s=this.a +if(s<=a)if(a<=this.b){s=a-s +s=(this.c[B.f.dU(s,5)]&B.xJ[s&31])>>>0!==0}else s=!1 +else s=!1 +return s}, +$ihJ:1} +A.a7D.prototype={ +nG(a){return!this.a.nG(a)}} +A.bcO.prototype={ +$2(a,b){var s=a.a,r=b.a +return s!==r?s-r:a.b-b.b}, +$S:872} +A.bcP.prototype={ +$2(a,b){return a+(b.b-b.a+1)}, +$S:873} +A.b9w.prototype={ +$1(a){return new A.hd(a.charCodeAt(0),a.charCodeAt(0))}, +$S:874} +A.b9s.prototype={ +$3(a,b,c){return new A.hd(a.charCodeAt(0),c.charCodeAt(0))}, +$S:875} +A.b9q.prototype={ +$2(a,b){var s +if(a==null)s=b +else s=b instanceof A.yx?new A.yx(!b.a):new A.a7D(b) +return s}, +$S:876} +A.hJ.prototype={} +A.hd.prototype={ +nG(a){return this.a<=a&&a<=this.b}, +$ihJ:1} +A.aez.prototype={ +nG(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}}, +$ihJ:1} +A.yf.prototype={ +cm(a){var s,r,q,p,o=this.a,n=o[0].cm(a) +if(!(n instanceof A.cr))return n +for(s=o.length,r=this.b,q=n,p=1;p=0)return q}return q}} +A.h6.prototype={ +gbQ(a){return A.b([this.a],t.Vz)}, +nD(a,b,c){var s=this +s.uL(0,b,c) +if(s.a.k(0,b))s.a=A.w(s).h("ba").a(c)}} +A.BF.prototype={ +cm(a){var s,r,q,p=this.a.cm(a) +if(p instanceof A.cr)return p +s=this.b.cm(p) +if(s instanceof A.cr)return s +r=p.gm(p) +q=s.gm(s) +return new A.dA(new A.bI(r,q),s.a,s.b,this.$ti.h("dA<+(1,2)>"))}, +cB(a,b){b=this.a.cB(a,b) +if(b<0)return-1 +b=this.b.cB(a,b) +if(b<0)return-1 +return b}, +gbQ(a){return A.b([this.a,this.b],t.Vz)}, +nD(a,b,c){var s=this +s.uL(0,b,c) +if(s.a.k(0,b))s.a=s.$ti.h("ba<1>").a(c) +if(s.b.k(0,b))s.b=s.$ti.h("ba<2>").a(c)}} +A.aP4.prototype={ +$1(a){return this.a.$2(a.a,a.b)}, +$S(){return this.d.h("@<0>").ak(this.b).ak(this.c).h("1(+(2,3))")}} +A.BG.prototype={ +cm(a){var s,r,q,p,o=this,n=o.a.cm(a) +if(n instanceof A.cr)return n +s=o.b.cm(n) +if(s instanceof A.cr)return s +r=o.c.cm(s) +if(r instanceof A.cr)return r +q=n.gm(n) +s=s.gm(s) +p=r.gm(r) +return new A.dA(new A.xk(q,s,p),r.a,r.b,o.$ti.h("dA<+(1,2,3)>"))}, +cB(a,b){b=this.a.cB(a,b) +if(b<0)return-1 +b=this.b.cB(a,b) +if(b<0)return-1 +b=this.c.cB(a,b) +if(b<0)return-1 +return b}, +gbQ(a){return A.b([this.a,this.b,this.c],t.Vz)}, +nD(a,b,c){var s=this +s.uL(0,b,c) +if(s.a.k(0,b))s.a=s.$ti.h("ba<1>").a(c) +if(s.b.k(0,b))s.b=s.$ti.h("ba<2>").a(c) +if(s.c.k(0,b))s.c=s.$ti.h("ba<3>").a(c)}} +A.aP5.prototype={ +$1(a){return this.a.$3(a.a,a.b,a.c)}, +$S(){var s=this +return s.e.h("@<0>").ak(s.b).ak(s.c).ak(s.d).h("1(+(2,3,4))")}} +A.RK.prototype={ +cm(a){var s,r,q,p,o,n=this,m=n.a.cm(a) +if(m instanceof A.cr)return m +s=n.b.cm(m) +if(s instanceof A.cr)return s +r=n.c.cm(s) +if(r instanceof A.cr)return r +q=n.d.cm(r) +if(q instanceof A.cr)return q +p=m.gm(m) +s=s.gm(s) +r=r.gm(r) +o=q.gm(q) +return new A.dA(new A.ao0([p,s,r,o]),q.a,q.b,n.$ti.h("dA<+(1,2,3,4)>"))}, +cB(a,b){var s=this +b=s.a.cB(a,b) +if(b<0)return-1 +b=s.b.cB(a,b) +if(b<0)return-1 +b=s.c.cB(a,b) +if(b<0)return-1 +b=s.d.cB(a,b) +if(b<0)return-1 +return b}, +gbQ(a){var s=this +return A.b([s.a,s.b,s.c,s.d],t.Vz)}, +nD(a,b,c){var s=this +s.uL(0,b,c) +if(s.a.k(0,b))s.a=s.$ti.h("ba<1>").a(c) +if(s.b.k(0,b))s.b=s.$ti.h("ba<2>").a(c) +if(s.c.k(0,b))s.c=s.$ti.h("ba<3>").a(c) +if(s.d.k(0,b))s.d=s.$ti.h("ba<4>").a(c)}} +A.aP7.prototype={ +$1(a){var s=a.a +return this.a.$4(s[0],s[1],s[2],s[3])}, +$S(){var s=this +return s.f.h("@<0>").ak(s.b).ak(s.c).ak(s.d).ak(s.e).h("1(+(2,3,4,5))")}} +A.RL.prototype={ +cm(a){var s,r,q,p,o,n,m=this,l=m.a.cm(a) +if(l instanceof A.cr)return l +s=m.b.cm(l) +if(s instanceof A.cr)return s +r=m.c.cm(s) +if(r instanceof A.cr)return r +q=m.d.cm(r) +if(q instanceof A.cr)return q +p=m.e.cm(q) +if(p instanceof A.cr)return p +o=l.gm(l) +s=s.gm(s) +r=r.gm(r) +q=q.gm(q) +n=p.gm(p) +return new A.dA(new A.ao1([o,s,r,q,n]),p.a,p.b,m.$ti.h("dA<+(1,2,3,4,5)>"))}, +cB(a,b){var s=this +b=s.a.cB(a,b) +if(b<0)return-1 +b=s.b.cB(a,b) +if(b<0)return-1 +b=s.c.cB(a,b) +if(b<0)return-1 +b=s.d.cB(a,b) +if(b<0)return-1 +b=s.e.cB(a,b) +if(b<0)return-1 +return b}, +gbQ(a){var s=this +return A.b([s.a,s.b,s.c,s.d,s.e],t.Vz)}, +nD(a,b,c){var s=this +s.uL(0,b,c) +if(s.a.k(0,b))s.a=s.$ti.h("ba<1>").a(c) +if(s.b.k(0,b))s.b=s.$ti.h("ba<2>").a(c) +if(s.c.k(0,b))s.c=s.$ti.h("ba<3>").a(c) +if(s.d.k(0,b))s.d=s.$ti.h("ba<4>").a(c) +if(s.e.k(0,b))s.e=s.$ti.h("ba<5>").a(c)}} +A.aP8.prototype={ +$1(a){var s=a.a +return this.a.$5(s[0],s[1],s[2],s[3],s[4])}, +$S(){var s=this +return s.r.h("@<0>").ak(s.b).ak(s.c).ak(s.d).ak(s.e).ak(s.f).h("1(+(2,3,4,5,6))")}} +A.RM.prototype={ +cm(a){var s,r,q,p,o,n,m,l,k,j=this,i=j.a.cm(a) +if(i instanceof A.cr)return i +s=j.b.cm(i) +if(s instanceof A.cr)return s +r=j.c.cm(s) +if(r instanceof A.cr)return r +q=j.d.cm(r) +if(q instanceof A.cr)return q +p=j.e.cm(q) +if(p instanceof A.cr)return p +o=j.f.cm(p) +if(o instanceof A.cr)return o +n=j.r.cm(o) +if(n instanceof A.cr)return n +m=j.w.cm(n) +if(m instanceof A.cr)return m +l=i.gm(i) +s=s.gm(s) +r=r.gm(r) +q=q.gm(q) +p=p.gm(p) +o=o.gm(o) +n=n.gm(n) +k=m.gm(m) +return new A.dA(new A.ao2([l,s,r,q,p,o,n,k]),m.a,m.b,j.$ti.h("dA<+(1,2,3,4,5,6,7,8)>"))}, +cB(a,b){var s=this +b=s.a.cB(a,b) +if(b<0)return-1 +b=s.b.cB(a,b) +if(b<0)return-1 +b=s.c.cB(a,b) +if(b<0)return-1 +b=s.d.cB(a,b) +if(b<0)return-1 +b=s.e.cB(a,b) +if(b<0)return-1 +b=s.f.cB(a,b) +if(b<0)return-1 +b=s.r.cB(a,b) +if(b<0)return-1 +b=s.w.cB(a,b) +if(b<0)return-1 +return b}, +gbQ(a){var s=this +return A.b([s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w],t.Vz)}, +nD(a,b,c){var s=this +s.uL(0,b,c) +if(s.a.k(0,b))s.a=s.$ti.h("ba<1>").a(c) +if(s.b.k(0,b))s.b=s.$ti.h("ba<2>").a(c) +if(s.c.k(0,b))s.c=s.$ti.h("ba<3>").a(c) +if(s.d.k(0,b))s.d=s.$ti.h("ba<4>").a(c) +if(s.e.k(0,b))s.e=s.$ti.h("ba<5>").a(c) +if(s.f.k(0,b))s.f=s.$ti.h("ba<6>").a(c) +if(s.r.k(0,b))s.r=s.$ti.h("ba<7>").a(c) +if(s.w.k(0,b))s.w=s.$ti.h("ba<8>").a(c)}} +A.aP9.prototype={ +$1(a){var s=a.a +return this.a.$8(s[0],s[1],s[2],s[3],s[4],s[5],s[6],s[7])}, +$S(){var s=this +return s.y.h("@<0>").ak(s.b).ak(s.c).ak(s.d).ak(s.e).ak(s.f).ak(s.r).ak(s.w).ak(s.x).h("1(+(2,3,4,5,6,7,8,9))")}} +A.A4.prototype={ +nD(a,b,c){var s,r,q,p +this.uL(0,b,c) +for(s=this.a,r=s.length,q=this.$ti.h("ba"),p=0;p"))}, +cB(a,b){var s=this.a.cB(a,b) +return s<0?b:s}} +A.S2.prototype={ +cm(a){var s,r,q,p=this,o=p.b.cm(a) +if(o instanceof A.cr)return o +s=p.a.cm(o) +if(s instanceof A.cr)return s +r=p.c.cm(s) +if(r instanceof A.cr)return r +q=s.gm(s) +return new A.dA(q,r.a,r.b,p.$ti.h("dA<1>"))}, +cB(a,b){b=this.b.cB(a,b) +if(b<0)return-1 +b=this.a.cB(a,b) +if(b<0)return-1 +return this.c.cB(a,b)}, +gbQ(a){return A.b([this.b,this.a,this.c],t.Vz)}, +nD(a,b,c){var s=this +s.a0E(0,b,c) +if(s.b.k(0,b))s.b=c +if(s.c.k(0,b))s.c=c}} +A.z1.prototype={ +cm(a){return new A.dA(this.a,a.a,a.b,this.$ti.h("dA<1>"))}, +cB(a,b){return b}, +j(a){return this.rU(0)+"["+A.j(this.a)+"]"}} +A.a7v.prototype={ +cm(a){var s,r=a.a,q=a.b,p=r.length +if(q=l||!r.nG(n.charCodeAt(q)))return new A.cr(o.b,n,q);++q;++p}s=o.d +while(!0){if(!(q=p||!r.nG(a.charCodeAt(b)))return-1;++b;++q}s=this.d +while(!0){if(!(b")) +for(s=o.b,r=a;m.length=s)return p +q=o.a.cm(r) +if(q instanceof A.cr)return p +m.push(q.gm(q))}else return new A.dA(m,r.a,r.b,n.h("dA>"))}}, +cB(a,b){var s,r,q,p,o=this +for(s=o.b,r=b,q=0;q=s)return-1 +p=o.a.cB(a,r) +if(p<0)return-1;++q}else return r}} +A.On.prototype={ +gbQ(a){return A.b([this.a,this.e],t.Vz)}, +nD(a,b,c){this.a0E(0,b,c) +if(this.e.k(0,b))this.e=c}} +A.Q6.prototype={ +cm(a){var s,r,q,p=this,o=p.$ti,n=A.b([],o.h("v<1>")) +for(s=p.b,r=a;n.length>"))}, +cB(a,b){var s,r,q,p,o=this +for(s=o.b,r=b,q=0;q"))}, +abB(a,b){b.toString +return new A.hE(this,b,null,A.w(this).h("hE<1?>"))}} +A.Vu.prototype={} +A.hE.prototype={ +el(a){return!1}, +cJ(a){return new A.CQ(A.jF(null,null,null,t.U,t.X),this,B.al,this.$ti.h("CQ<1>"))}} +A.CQ.prototype={ +gBg(){var s,r=this,q=r.bp +if(q===$){s=r.$ti.h("hE<1>").a(A.b7.prototype.gba.call(r)).f.e.b5() +s.a=r +r.bp!==$&&A.N() +r.bp=s +q=s}return q}, +k9(a){var s={} +s.a=null +this.nJ(new A.b2O(s,a)) +return s.a}, +hA(a,b){this.GI(a,b)}, +gba(){return this.$ti.h("hE<1>").a(A.b7.prototype.gba.call(this))}, +ZG(a,b){var s=this.y2,r=s.i(0,a) +if(r!=null&&!this.$ti.h("bMJ<1>").b(r))return +s.u(0,a,B.mF)}, +Y6(a,b){var s,r,q,p,o,n=this.y2.i(0,b),m=!1 +if(n!=null)if(this.$ti.h("bMJ<1>").b(n)){if(b.Q)return +for(r=n.c,q=r.length,p=0;p") +r.a(A.b7.prototype.gba.call(s)) +s.gBg().TR(s.aa) +s.aa=!1 +if(s.bD){s.bD=!1 +s.u1(r.a(A.b7.prototype.gba.call(s)))}return s.a15()}, +qc(){this.gBg().t() +this.AT()}, +aUW(){if(!this.R)return +this.f8() +this.bD=!0}, +tz(a,b){return this.GK(a,b)}, +Ke(a){return this.tz(a,null)}, +$ia5j:1} +A.b2O.prototype={ +$1(a){this.a.a=a.k9(this.b) +return!1}, +$S:20} +A.ahL.prototype={} +A.kU.prototype={ +ajb(a){return!1}, +t(){}, +TR(a){}} +A.IY.prototype={ +b5(){return new A.Ur(this.$ti.h("Ur<1>"))}} +A.Ur.prototype={ +gm(a){var s,r,q,p,o,n,m=this,l=null,k=m.c +if(k&&m.f!=null){k=A.ay(m.$ti.c).j(0) +q=m.f +q=q==null?l:q.j(0) +throw A.d(A.ad("Tried to read a provider that threw during the creation of its value.\nThe exception occurred during the creation of type "+k+".\n\n"+A.j(q)))}if(!k){m.c=!0 +k=m.a +k.toString +q=m.$ti.h("kU.D") +q.a(k.$ti.h("hE<1>").a(A.b7.prototype.gba.call(k)).f.e) +try{k=m.a +k.toString +k=q.a(k.$ti.h("hE<1>").a(A.b7.prototype.gba.call(k)).f.e) +p=m.a +p.toString +m.d=k.a.$1(p)}catch(o){s=A.b2(o) +r=A.bC(o) +m.f=new A.cI(s,r,"provider",l,l,!1) +throw o}finally{}k=m.a +k.toString +q.a(k.$ti.h("hE<1>").a(A.b7.prototype.gba.call(k)).f.e)}k=m.a +k.R=!1 +if(m.b==null){q=m.$ti +k=q.h("kU.D").a(A.w(k).h("hE<1>").a(A.b7.prototype.gba.call(k)).f.e) +p=m.a +p.toString +n=m.d +q=n==null?q.c.a(n):n +q=k.e.$2(p,q) +k=q +m.b=k}m.a.R=!0 +k=m.d +return k==null?m.$ti.c.a(k):k}, +t(){var s,r,q,p,o=this +o.a1v() +s=o.b +if(s!=null)s.$0() +if(o.c){s=o.a +s.toString +r=o.$ti +s=r.h("kU.D").a(s.$ti.h("hE<1>").a(A.b7.prototype.gba.call(s)).f.e) +q=o.a +q.toString +p=o.d +r=p==null?r.c.a(p):p +s.f.$2(q,r)}}, +TR(a){var s,r=this +if(a)if(r.c){s=r.a +s.toString +r.$ti.h("kU.D").a(s.$ti.h("hE<1>").a(A.b7.prototype.gba.call(s)).f.e)}s=r.a +s.toString +r.e=r.$ti.h("kU.D").a(s.$ti.h("hE<1>").a(A.b7.prototype.gba.call(s)).f.e) +return r.aq4(a)}} +A.K9.prototype={ +b5(){return new A.Yg(this.$ti.h("Yg<1>"))}} +A.Yg.prototype={ +gm(a){var s,r=this,q=r.a +q.R=!1 +s=r.$ti.h("kU.D") +s.a(A.w(q).h("hE<1>").a(A.b7.prototype.gba.call(q)).f.e) +r.b=null +q=r.a +q.R=!0 +return s.a(A.w(q).h("hE<1>").a(A.b7.prototype.gba.call(q)).f.e).a}, +ajb(a){var s,r=this.a +r.toString +s=this.$ti.h("kU.D") +s.a(r.$ti.h("hE<1>").a(A.b7.prototype.gba.call(r)).f.e) +r=this.a +r.toString +r=s.a(r.$ti.h("hE<1>").a(A.b7.prototype.gba.call(r)).f.e) +return a.a!==r.a}, +t(){this.a1v()}} +A.a7a.prototype={} +A.Qc.prototype={} +A.a9n.prototype={ +j(a){return"A provider for "+this.a.j(0)+" unexpectedly returned null."}, +$ic4:1} +A.a9m.prototype={ +j(a){return"Provider<"+this.a.j(0)+"> not found for "+this.b.j(0)}, +$ic4:1} +A.DE.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.J(A.hl(null,B.H,null,null)) +p=q.gaC() +o=new A.a(new Float64Array(2)) +o.p(8,16) +s=2 +return A.x(A.kK("rogue_shooter/bullet.png",A.kJ(4,null,!0,0.2,o),p.cy$),$async$n) +case 2:q.siM(0,c) +p=new A.a(new Float64Array(2)) +p.p(0,-1) +A.ae9(p,q.at.c,null) +p.au(0,500) +q.ao!==$&&A.aj() +q.ao=p +return A.p(null,r)}}) +return A.q($async$n,r)}, +ic(a,b){this.lc(a,b) +if(b instanceof A.EK){b.aie() +this.eb()}}, +a8(a,b){var s,r,q=this +q.xh(0,b) +s=q.aM +r=q.ao +r===$&&A.c() +s.v(r) +s.au(0,b) +r=q.at.d +r.a7(r.X(0,s)) +r.D() +s=r.a +if(s[1]<0||s[0]>q.gaC().k4.at.gaU().a[0]||s[0]+q.ax.a[0]<0)q.eb()}} +A.ag8.prototype={ +bo(){var s=this.h2$ +return s==null?this.c6():s}} +A.ag9.prototype={} +A.EK.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=q.gaC() +o=new A.a(new Float64Array(2)) +o.ag(16) +s=2 +return A.x(A.kK("rogue_shooter/enemy.png",A.kJ(4,null,!0,0.2,o),p.cy$),$async$n) +case 2:q.siM(0,c) +q.J(A.hl(null,B.mP,null,null)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s,r,q=this +q.xh(0,b) +s=q.at.d +r=s.a +s.dT(0,r[1]+150*b) +s.D() +if(r[1]>=q.gaC().k4.at.gaU().a[1])q.eb()}, +aie(){var s,r,q,p,o,n,m=this,l=null +m.eb() +s=m.gaC() +r=m.at.d +q=new A.a(new Float64Array(2)) +q.ag(50) +p=B.t.aW() +o=A.ar() +n=$.aa() +n=new A.aJ(n,new Float64Array(2)) +n.a7(q) +n.D() +p=new A.a3r(l,l,!0,!0,!1,$,p,l,o,n,B.j,0,0,l,B.e,new A.e([],t.s),new A.e([],t.g)) +p.b0(B.j,l,l,l,0,r,l,l,q) +p.mK(B.j,l,l,l,l,l,0,l,!0,r,l,!0,l,q) +s.J(p);++m.gaC().cZ}} +A.aiE.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.aiF.prototype={} +A.MM.prototype={ +ER(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=null,e=g.gaC(),d=J.el(5,t.F) +for(s=t.s,r=t.g,q=g.k3,p=g.k2,o=A.w(g).h("dR.T"),n=0;n<5;++n){m=g.h2$ +if(m==null){l=g.bo() +l.toString +m=g.h2$=o.a(l)}m=m.k4.at.gaU().a[0] +k=p.aV() +j=new Float64Array(2) +j[0]=q+(m-q)*k +j[1]=0 +k=$.bj4() +m=$.G().B() +m.sA(0,B.l) +i=A.ar() +h=$.aa() +h=new A.aJ(h,new Float64Array(2)) +h.a7(k) +h.D() +m=new A.EK(f,f,f,f,f,f,!1,!0,!1,$,m,f,i,h,B.j,0,0,f,B.e,new A.e([],s),new A.e([],r)) +m.b0(B.j,f,f,f,0,new A.a(j),f,f,k) +h.an(0,m.gSC()) +m.C_() +d[n]=m}e.I(0,d)}} +A.aiG.prototype={ +bo(){var s=this.h2$ +return s==null?this.c6():s}} +A.a3r.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=q.gaC() +o=new A.a(new Float64Array(2)) +o.ag(32) +s=2 +return A.x(A.kK("rogue_shooter/explosion.png",A.kJ(6,null,!1,0.1,o),p.cy$),$async$n) +case 2:q.siM(0,c) +return A.p(null,r)}}) +return A.q($async$n,r)}} +A.aiP.prototype={ +bo(){var s=this.h2$ +return s==null?this.c6():s}} +A.PZ.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=q.at.d +o.a7(q.gaC().k4.at.gaU().b1(0,2)) +o.D() +q.J(A.hl(null,B.H,null,null)) +o=A.aWs(!1,null,q.gavv(),0.05,!1,!0) +q.ao=o +q.J(o) +o=q.gaC() +p=new A.a(new Float64Array(2)) +p.p(32,39) +s=2 +return A.x(A.kK("rogue_shooter/player.png",A.kJ(4,null,!0,0.2,p),o.cy$),$async$n) +case 2:q.siM(0,c) +return A.p(null,r)}}) +return A.q($async$n,r)}, +avw(){var s=this.aM +this.gaC().I(0,new A.W(s,new A.aNN(this),A.a5(s).h("W<1,y>")))}, +ic(a,b){this.lc(a,b) +if(b instanceof A.EK)b.aie()}} +A.aNN.prototype={ +$1(a){var s,r,q,p=null,o=this.a,n=o.ax.a[1],m=new A.a(new Float64Array(2)) +m.p(0,-n/2) +m=o.at.d.X(0,m) +o=new Float64Array(2) +n=new A.a(new Float64Array(2)) +n.p(10,20) +s=B.t.aW() +r=A.ar() +q=$.aa() +q=new A.aJ(q,new Float64Array(2)) +q.a7(n) +q.D() +o=new A.DE(new A.a(o),p,p,p,p,p,p,!1,!0,!1,$,s,p,r,q,B.j,0,0,p,B.e,new A.e([],t.s),new A.e([],t.g)) +o.b0(B.j,a,p,p,0,m,p,p,n) +o.mK(B.j,a,p,p,p,p,0,p,!0,m,p,!1,p,n) +return o}, +$S:877} +A.amL.prototype={ +bo(){var s=this.h2$ +return s==null?this.c6():s}} +A.amM.prototype={} +A.acp.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=A +s=2 +return A.x(q.gaC().cy$.d_(0,"rogue_shooter/stars.png"),$async$n) +case 2:p=o.aTL(4,c,4) +q.ax!==$&&A.aj() +q.ax=p +q.J(A.aWs(!0,null,new A.aU_(q),q.gaC().k4.at.gaU().a[1]/12/10,!1,!0)) +q.avD() +return A.p(null,r)}}) +return A.q($async$n,r)}, +a3t(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null,c=e.gaC().k4.at.gaU().a[0]/6 +for(s=t.s,r=t.g,q=e.ay,p=t.n,o=A.w(e).h("dR.T"),n=0;n<6;++n){m=q.aV() +l=q.aV() +k=e.ax +k===$&&A.c() +j=A.aTC(k.QE(0,q.f9(3),4),!0,0.1) +j.sb_5(A.b([Math.max(20,100*q.aV()),0.1,0.1,0.1],p)) +k=e.h2$ +if(k==null){i=e.bo() +i.toString +k=e.h2$=o.a(i)}h=new Float64Array(2) +h[0]=c*n+m*c +h[1]=a+l*20 +m=new Float64Array(2) +l=new A.a(m) +m[0]=20 +m[1]=20 +m=$.G().B() +m.sA(0,B.l) +g=A.ar() +f=$.aa() +f=new A.aJ(f,new Float64Array(2)) +f.a7(l) +f.D() +m=new A.acq(d,new A.ip(j),!1,!0,!1,$,m,d,g,f,B.o,0,0,d,B.e,new A.e([],s),new A.e([],r)) +m.b0(d,d,d,d,0,new A.a(h),d,d,l) +f.an(0,m.gSC()) +m.C_() +k.J(m)}}, +avD(){var s,r=this.gaC().k4.at.gaU().a[1]/12 +for(s=0;s<12;++s)this.a3t(s*r)}} +A.aU_.prototype={ +$0(){return this.a.a3t(0)}, +$S:0} +A.aqi.prototype={ +bo(){var s=this.h2$ +return s==null?this.c6():s}} +A.acq.prototype={ +a8(a,b){var s,r,q=this +q.xh(0,b) +s=q.at.d +r=s.a +s.dT(0,r[1]+b*10) +s.D() +if(r[1]>=q.gaC().k4.at.gaU().a[1])q.eb()}} +A.aqj.prototype={ +bo(){var s=this.h2$ +return s==null?this.c6():s}} +A.wj.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:k=A.b([0.5,0.3,0,-0.5,-0.3],t.n) +j=new A.a(new Float64Array(2)) +j.p(50,75) +p=B.t.aW() +o=A.ar() +n=$.aa() +n=new A.aJ(n,new Float64Array(2)) +n.a7(j) +n.D() +m=t.s +l=t.g +k=new A.PZ(k,null,null,null,null,null,null,!1,!0,!1,$,p,null,o,n,B.j,0,0,null,B.e,new A.e([],m),new A.e([],l)) +k.b0(B.j,null,null,null,0,null,null,null,j) +k.mK(B.j,null,null,null,null,null,0,null,!0,null,null,!1,null,j) +q.R!==$&&A.aj() +q.R=k +q.J(k) +k=q.k4.at.gaU() +j=new A.a(new Float64Array(2)) +j.p(0,50) +p=t.Fr +j=A.a40(B.bL,k.Y(0,j),p) +k=q.k4.at.gaU() +o=new A.a(new Float64Array(2)) +o.p(0,25) +o=A.dm(B.bL,null,null,null,k.Y(0,o),1,null,null,null,null,p) +q.aa!==$&&A.aj() +q.aa=o +p=A.dm(B.bL,null,null,null,q.k4.at.gaU(),1,null,null,null,null,p) +q.S!==$&&A.aj() +q.S=p +k=t.W +q.I(0,A.b([j,o,p],k)) +j=$.bj4().a[0] +j=new A.MM(B.O,j/2,null,!1,null,0,null,B.e,new A.e([],m),new A.e([],l)) +j.OW(!0,null,null,0.05,!1,!0) +q.J(j) +q.J(new A.acp(B.O,null,0,null,B.e,new A.e([],m),new A.e([],l))) +q.I(0,A.b([q.bp,q.aN],k)) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s,r,q=this +q.aqU(0,b) +s=q.aa +s===$&&A.c() +s.sd7(0,"Score: "+q.cZ) +s=q.S +s===$&&A.c() +r=q.gbQ(0).b +r===$&&A.c() +s.sd7(0,"Components: "+r) +q.bp.sd7(0,"Update time: "+q.adQ$+" ms") +q.aN.sd7(0,"Render time: "+q.adR$+" ms")}, +Yn(a){var s=this.R +s===$&&A.c() +s=s.ao +s===$&&A.c() +s=s.at +s===$&&A.c() +s.d=0 +s.e=!0}, +Ym(a){var s=this.R +s===$&&A.c() +s=s.ao +s===$&&A.c() +s=s.at +s===$&&A.c() +s.e=!1}, +EO(){var s=this.R +s===$&&A.c() +s=s.ao +s===$&&A.c() +s=s.at +s===$&&A.c() +s.e=!1}, +M5(a){var s=this.R +s===$&&A.c() +s=s.at.d +s.a7(s.X(0,a.gme().gl8())) +s.D()}} +A.aoP.prototype={} +A.WS.prototype={ +a8(a,b){this.fO(0,b) +this.dq$.fZ()}} +A.WT.prototype={ +a8(a,b){var s=this.adS$ +s.bF(0) +s.bR(0) +this.aqT(0,b) +if(s.b==null)s.b=$.GN.$0() +this.adQ$=s.gn3()}, +b4(a){var s=this.adS$ +s.bF(0) +s.bR(0) +this.lR(a) +if(s.b==null)s.b=$.GN.$0() +this.adR$=s.gn3()}} +A.Hg.prototype={ +ab(a){var s,r,q,p,o,n,m,l,k=null,j=new A.a(new Float64Array(2)) +j.p(0,0) +s=t.Fr +j=A.dm(k,k,k,k,j,1,k,k,"Update time: 0ms",k,s) +r=new A.a(new Float64Array(2)) +r.p(0,25) +s=A.dm(k,k,k,k,r,1,k,k,"Render time: 0ms",k,s) +$.fJ() +r=A.kN(k,t.rR) +q=A.bm(k,k,-2147483647) +p=A.aU(k,k,k,k,k,k) +o=$.aC() +n=$.aL() +m=A.b([],t.u) +l=A.aP(A.aQ(),t.y) +j=new A.wj(j,s,0,0,new A.ce(),r,q,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,k,B.e,new A.e([],t.s),new A.e([],t.g)) +j.aT(k,k,k,t.i) +return A.aO(j,k,new A.aQB(),k,k,t.es)}} +A.aQB.prototype={ +$1(a){return B.uN}, +$S:120} +A.HG.prototype={} +A.aKA.prototype={ +P(a,b){return this.aYt(0,b)}, +aYt(a,b){var s=0,r=A.r(t.w),q,p +var $async$P=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:s=3 +return A.x(B.oQ.lm("remove",A.b3(["key",b],t.N,t.z),!1,t.w),$async$P) +case 3:p=d +p.toString +q=p +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$P,r)}, +uz(a,b,c){return this.alf(a,b,c)}, +alf(a,b,c){var s=0,r=A.r(t.w),q,p +var $async$uz=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:s=3 +return A.x(B.oQ.lm("set"+a,A.b3(["key",b,"value",c],t.N,t.z),!1,t.w),$async$uz) +case 3:p=e +p.toString +q=p +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$uz,r)}, +uq(a){var s=0,r=A.r(t.nf),q,p,o,n +var $async$uq=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:p=t.N +o=t.K +s=3 +return A.x(B.oQ.afe("getAll",p,o),$async$uq) +case 3:n=c +q=n==null?A.D(p,o):n +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$uq,r)}} +A.aSE.prototype={} +A.aOk.prototype={} +A.aG1.prototype={} +A.aSC.prototype={ +uq(a){var s=0,r=A.r(t.nf),q,p=this +var $async$uq=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q=p.No(new A.aG1(new A.aOk("flutter.",null))) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$uq,r)}, +No(a){return this.ajJ(a)}, +ajJ(a){var s=0,r=A.r(t.nf),q,p=this,o,n,m,l,k,j +var $async$No=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:k=a.a +j=A.D(t.N,t.K) +for(o=p.ay7(k.a,k.b),n=J.az(o.a),o=new A.fG(n,o.b,o.$ti.h("fG<1>"));o.H();){m=n.ga1(n) +l=self.window.localStorage.getItem(m) +l.toString +j.u(0,m,p.avT(l))}q=j +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$No,r)}, +P(a,b){return this.aYu(0,b)}, +aYu(a,b){var s=0,r=A.r(t.w),q +var $async$P=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:self.window.localStorage.removeItem(b) +q=!0 +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$P,r)}, +uz(a,b,c){return this.alg(a,b,c)}, +alg(a,b,c){var s=0,r=A.r(t.w),q +var $async$uz=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:self.window.localStorage.setItem(b,B.db.vH(c)) +q=!0 +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$uz,r)}, +ay7(a,b){var s=A.bGt(self.window.localStorage) +return new A.bg(s,new A.aSD(a,b),A.a5(s).h("bg<1>"))}, +avT(a){var s=B.db.hH(0,a) +if(t.j.b(s))return J.nT(s,t.N) +s.toString +return s}} +A.aSD.prototype={ +$1(a){var s=B.d.c4(a,this.a) +return s}, +$S:25} +A.ac5.prototype={} +A.axH.prototype={} +A.a_e.prototype={ +t(){var s,r,q,p=this +if(p.d)return +p.d=!0 +$.c7.bb().a8v(p.a) +for(s=p.b,r=s.length,q=0;q0)for(q=i.c,p=$.c7.a,o=0;o").b(j)?j:A.cO(j,c),$async$B3) +case 12:j=f +q=j +n=[1] +s=4 +break +s=10 +break +case 11:q=l +n=[1] +s=4 +break +case 10:n.push(5) +s=4 +break +case 3:n=[2] +case 4:p=2 +k=new A.axi(m,h) +k.$0() +s=n.pop() +break +case 5:case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$B3,r)}, +j(a){return"Lock["+A.mR(this)+"]"}} +A.axi.prototype={ +$0(){var s=this.a,r=this.b +if(s.a===r.a)s.a=null +r.fl(0)}, +$S:0} +A.yg.prototype={} +A.pE.prototype={ +W(){return"MapOrientation."+this.b}} +A.aK5.prototype={ +$1(a){return A.bGX(a)}, +$S:879} +A.pV.prototype={ +W(){return"RenderOrder."+this.b}} +A.aPI.prototype={ +$1(a){return A.bJa(a)}, +$S:880} +A.wA.prototype={ +W(){return"StaggerAxis."+this.b}} +A.aTQ.prototype={ +$1(a){return A.bKr(a)}, +$S:881} +A.wB.prototype={ +W(){return"StaggerIndex."+this.b}} +A.aTR.prototype={ +$1(a){return A.bKt(a)}, +$S:882} +A.tL.prototype={ +W(){return"VAlign."+this.b}} +A.aXa.prototype={ +$1(a){return A.bLY(a)}, +$S:883} +A.po.prototype={ +W(){return"HAlign."+this.b}} +A.aGj.prototype={ +$1(a){return A.bFK(a)}, +$S:884} +A.vd.prototype={ +W(){return"GridOrientation."+this.b}} +A.aGf.prototype={ +$1(a){return A.bFG(a)}, +$S:885} +A.om.prototype={ +W(){return"LayerType."+this.b}} +A.aIV.prototype={ +$1(a){return A.bGu(a)===this.a}, +$S:886} +A.v1.prototype={ +W(){return"FileEncoding."+this.b}} +A.aE4.prototype={ +$1(a){return A.bEU(a)}, +$S:887} +A.uV.prototype={ +W(){return"DrawOrder."+this.b}} +A.aCb.prototype={ +$1(a){return A.bEh(a)}, +$S:888} +A.qY.prototype={ +W(){return"Compression."+this.b}} +A.azU.prototype={ +$1(a){return A.bD0(a)}, +$S:889} +A.mu.prototype={ +W(){return"PropertyType."+this.b}} +A.aOw.prototype={ +$1(a){return A.bIN(a)}, +$S:890} +A.Ch.prototype={ +W(){return"TileMapType."+this.b}} +A.aW2.prototype={ +$1(a){var s +switch(a.a){case 0:s="map" +break +default:s=null}return s}, +$S:891} +A.Cj.prototype={ +W(){return"TilesetType."+this.b}} +A.aWm.prototype={ +$1(a){var s +switch(a.a){case 0:s="tileset" +break +default:s=null}return s}, +$S:892} +A.ml.prototype={ +W(){return"ObjectAlignment."+this.b}} +A.aEh.prototype={} +A.rl.prototype={} +A.zs.prototype={} +A.aG2.prototype={ +$1(a){var s=J.bG(this.a,this.b*this.c+a) +return new A.zs(s&268435455,new A.aEh((s&2147483648)>>>0===2147483648,(s&1073741824)===1073741824,(s&536870912)===536870912))}, +$S:893} +A.t2.prototype={} +A.fD.prototype={} +A.aOx.prototype={ +$1(a){var s=this.a.hk("value") +if(s!=null)return s +else return A.bMm(a.a)}, +$S:894} +A.a1R.prototype={ +i(a,b){return this.a.i(0,b)}, +gar(a){var s=this.a +s=s.gbm(s) +return s.gar(s)}} +A.a7N.prototype={} +A.a1f.prototype={} +A.acA.prototype={} +A.a3x.prototype={} +A.a5t.prototype={} +A.a3O.prototype={} +A.a_U.prototype={} +A.aOt.prototype={ +$1(a){var s=a.uv("properties") +s=s==null?null:s.mB("property",A.bWb(),t.EW) +return s==null?A.b([],t.nc):s}, +$S:895} +A.aOu.prototype={ +$1(a){return a.a}, +$S:896} +A.aOv.prototype={ +$2(a,b){return b}, +$S:897} +A.fx.prototype={ +k(a,b){var s +if(b==null)return!1 +if(this!==b)s=b instanceof A.fx&&A.J(this)===A.J(b)&&this.a==b.a +else s=!0 +return s}, +gL(a){return J.a1(this.a)}} +A.Lr.prototype={} +A.EH.prototype={} +A.MV.prototype={} +A.fQ.prototype={} +A.aJ0.prototype={ +$1(a){return A.bGv(a.a.b.Zw())}, +$S:898} +A.aJ1.prototype={ +$1(a){return a.uv("data")}, +$S:899} +A.aJ2.prototype={ +$1(a){var s=A.bnE(a,this.a,this.b) +if(s==null)A.X(A.os("chunk",null,"Chunk must have data")) +a.ii("x") +a.ii("y") +A.bmT(s,a.ii("width"),a.ii("height")) +return new A.yg()}, +$S:900} +A.aJ_.prototype={ +$1(a){var s=a.ajS(A.cC(["layer","objectgroup","imagelayer","group"],t.N)),r=A.a5(s).h("W<1,fQ>") +return A.ab(new A.W(s,A.buO(),r),!0,r.h("aI.E"))}, +$S:901} +A.aIY.prototype={ +$1(a){var s,r=a.a.ly$.a +if(r.length!==1)return null +s=B.b.ga9(r) +if(s instanceof A.Cz)return s.a +return null}, +$S:902} +A.aIZ.prototype={ +$1(a){return A.et(B.d.eC(a),null,null)}, +$S:49} +A.qf.prototype={} +A.Gn.prototype={} +A.Fl.prototype={} +A.zv.prototype={} +A.SF.prototype={} +A.Il.prototype={} +A.aWj.prototype={ +$1(a){return a.FV("ellipse").length!==0}, +$S:248} +A.aWk.prototype={ +$1(a){return a.FV("point").length!==0}, +$S:248} +A.aWl.prototype={ +$1(a){var s,r,q=a.uv(this.a) +if(q==null)s=null +else{r=t.Rj +s=A.ab(new A.W(A.b(q.oV(0,"points").split(" "),t.T),A.bWa(),r),!0,r.h("aI.E"))}return s==null?A.b([],t.Id):s}, +$S:904} +A.a8w.prototype={$ic4:1} +A.dB.prototype={ +a_D(a,b){var s=this.a.a_3(0,a) +return s==null?b:s}, +hk(a){return this.a_D(a,null)}, +FV(a){var s=t.Yd,r=s.h("e7") +return A.ab(new A.e7(new A.bg(new A.ca(this.a.ly$.a,s),new A.aYs(a),s.h("bg")),A.buR(),r),!0,r.h("z.E"))}, +ajS(a){var s=t.Yd,r=s.h("e7") +return A.ab(new A.e7(new A.bg(new A.ca(this.a.ly$.a,s),new A.aYr(a),s.h("bg")),A.buR(),r),!0,r.h("z.E"))}} +A.aYs.prototype={ +$1(a){return a.b.gEv()===this.a}, +$S:139} +A.aYr.prototype={ +$1(a){return this.a.G(0,a.b.gEv())}, +$S:139} +A.cJ.prototype={ +mB(a,b,c){var s=this.FV(a),r=A.a5(s).h("@<1>").ak(c).h("W<1,2>") +return A.ab(new A.W(s,b,r),!0,r.h("aI.E"))}, +uv(a){var s=this.FV(a),r=s.length +if(r===0)return null +if(r>1)throw A.d(A.os(a,null,"Multiple children found when one was expected")) +return s[0]}, +akk(a,b){var s=this.uv(a) +if(s==null)return null +return b.$1(s)}, +nP(a,b){return this.akk(a,b,t.z)}, +l7(a,b,c){var s=this.a_D(b,c) +if(s==null)throw A.d(A.os(b,null,"Missing required string field")) +return s}, +oV(a,b){return this.l7(0,b,null)}, +a_d(a,b){var s,r=this.hk(a) +if(r==null||r==="")return b +s=A.ow(r) +if(s==null)throw A.d(A.os(a,r,"Double field has unparsable double")) +return s}, +FZ(a){return this.a_d(a,null)}, +lI(a,b){var s=this.a_d(a,b) +if(s==null)throw A.d(A.os(a,null,"Missing required double field")) +return s}, +a_n(a,b){var s,r=this.hk(a) +if(r==null||r==="")return b +s=A.pR(r,null) +if(s==null)throw A.d(A.os(a,r,"Int field has unparsable int")) +return s}, +l5(a){return this.a_n(a,null)}, +lJ(a,b){var s=this.a_n(a,b) +if(s==null)throw A.d(A.os(a,null,"Missing required int field")) +return s}, +ii(a){return this.lJ(a,null)}, +ajN(a,b){var s=this.hk(a) +if(s==null||s==="")return b +if(s==="1"||s==="true")return!0 +if(s==="0"||s==="false")return!1 +throw A.d(A.os(a,s,"Bool field has unparsable bool"))}, +kF(a,b){var s=this.ajN(a,b) +return s}, +a_b(a,b){var s,r=null,q=this.hk(a),p=q==null +if((p?r:q.length)===7){q.toString +s=A.pR(B.d.nE(q,"#","0xff"),r)}else if((p?r:q.length)===9){q.toString +s=A.pR(B.d.nE(q,"#","0x"),r)}else s=r +if(s!=null)return new A.n(s>>>0) +else return b}, +Nu(a){return this.a_b(a,null)}, +a_a(a,b){var s=this.a_b(a,b) +if(s==null)throw A.d(A.os(a,null,"Missing required color field")) +return s}, +wL(a,b,c,d,e){var s,r=this.hk(c) +if(r==null||r==="")return d +s=new A.bg(a,new A.aMX(b,r,e),A.a5(a).h("bg<1>")) +if(!s.gar(0).H())throw A.d(A.os(c,r,"Missing required enum field")) +return s.ga9(0)}, +rK(a,b,c,d,e){var s=this.wL(a,b,c,d,e) +if(s==null)throw A.d(A.os(c,null,"Missing required enum field")) +return s}} +A.aMX.prototype={ +$1(a){return J.f(this.a.$1(a),this.b)}, +$S(){return this.c.h("F(0)")}} +A.SE.prototype={} +A.adz.prototype={ +MY(a){var s,r +if(a===0)return new A.mG(-1,null,B.xD) +s=this.Fz(a) +r=s.a +if(r==null)r=0 +return A.bnh(s.z,new A.aWi(a,r))}, +Fz(a){var s,r,q=this.x,p=q.length +if(p===1)return B.b.ga9(q) +for(s=0;sa){if(s===0)throw A.d(A.c3("Tileset not found",null)) +return q[s-1]}}return B.b.ga_(q)}} +A.aWe.prototype={ +$1(a){return a.b.gEv()==="tileset"}, +$S:139} +A.aWf.prototype={ +$1(a){return a.a_3(0,"source")}, +$S:906} +A.aWg.prototype={ +$1(a){return a!=null}, +$S:247} +A.aWh.prototype={ +$1(a){return this.ajz(a)}, +ajz(a){var s=0,r=A.r(t.Fv),q,p=this +var $async$$1=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:a.toString +q=p.a.$1(a) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$$1,r)}, +$S:907} +A.aWi.prototype={ +$1(a){return a.a===this.a-this.b}, +$S:908} +A.aWc.prototype={ +$1(a){var s,r=a.hk("source") +if(r==null||this.a==null)return A.aWn(a,null) +s=J.ZC(this.a,new A.aWb(r)) +return A.aWn(a,!s.gaA(0)?s.ga9(0):null)}, +$S:909} +A.aWb.prototype={ +$1(a){return a.b===this.a}, +$S:910} +A.NA.prototype={} +A.I6.prototype={} +A.mG.prototype={} +A.aW0.prototype={ +$1(a){return a.length===0?null:A.et(a,null,null)}, +$S:911} +A.aW1.prototype={ +$1(a){var s=a.uv("animation") +s=s==null?null:s.mB("frame",A.bW8(),t.OP) +return s==null?A.b([],t.EN):s}, +$S:912} +A.T1.prototype={} +A.nw.prototype={ +CX(a){var s,r,q,p,o,n,m=this,l=a.e +if(l!=null){s=l.c +s.toString +r=l.d +r.toString +return A.bp4(0,0,s,r,t.Jy)}s=a.a +r=m.x +r.toString +q=B.f.eY(s,r) +p=B.f.bx(s,r) +r=m.r +s=m.d +s.toString +o=m.f +n=m.e +n.toString +return A.bp4(r+p*(s+o),r+q*(n+o),s,n,t.Jy)}} +A.aWo.prototype={ +$1(a){return a.mB("tile",A.bWg(),t.uY)}, +$S:913} +A.aWp.prototype={ +$1(a){var s=a.uv("wangsets") +s=s==null?null:s.mB("wangset",A.bWj(),t.ol) +return s==null?A.b([],t.MA):s}, +$S:914} +A.qj.prototype={} +A.tO.prototype={} +A.aXu.prototype={ +$1(a){var s=a.oV(0,"type"),r=a.mB("wangcolor",A.bWi(),t.Zg),q=t.DV,p=t.qd +return s==="corner"?A.b([r,A.b([],q)],p):A.b([A.b([],q),r],p)}, +$S:915} +A.IE.prototype={} +A.aXv.prototype={ +$1(a){var s=t.OL +return A.ab(new A.W(A.b(a.oV(0,"wangid").split(","),t.T),A.bRU(),s),!0,s.h("aI.E"))}, +$S:916} +A.LI.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=q.gaC().R +o===$&&A.c() +p=new A.a(new Float64Array(2)) +p.p(166,2) +q.ok=A.iS(o,p,$.biZ()) +q.tf() +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s,r,q,p,o=this +o.le(0,b) +if((o.a&8)!==0)return +s=o.at.d +r=s.a +q=r[0] +p=A.y.prototype.gbs.call(o,0) +p.toString +s.eX(0,q-B.c.d0(0.0002*t.iK.a(p).gaC().dh)*50*b) +s.D() +if(!(r[0]+o.ax.a[0]>0))o.eb()}, +fI(a){var s,r=this +r.ld(a) +s=r.at.d +s.dT(0,r.eA(r.ay).a[1]/2-41+A.a9z($.Zv(),30,71)-r.Tm(r.eA(B.o)).a[1]) +s.D()}} +A.agA.prototype={ +gbs(a){var s=A.y.prototype.gbs.call(this,0) +s.toString +return t.iK.a(s)}, +aX(){this.a1m()}} +A.agB.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.LJ.prototype={ +aaQ(){var s=this,r=null,q=s.gaC().k4.at.gaU().a[0],p=$.biZ(),o=p.a[0],n=s.eA(s.ay).a[1],m=$.Zv(),l=A.a9z(m,30,71),k=s.eA(s.ay).a[1],j=new A.a(new Float64Array(2)) +j.p(q+o+10,n/2-41+l-k) +q=A.a9z(m,100,400) +o=B.t.aW() +n=A.ar() +m=p +l=$.aa() +l=new A.aJ(l,new Float64Array(2)) +l.a7(m) +l.D() +q=new A.LI(q,r,!1,r,$,o,r,n,l,B.o,0,0,r,B.e,new A.e([],t.s),new A.e([],t.g)) +q.b0(r,r,r,r,0,j,r,r,p) +q.lg(r,r,r,r,r,0,r,j,r,r,p,r) +s.J(q)}, +a8(a,b){var s,r,q=this +q.le(0,b) +s=q.gbQ(0).b +s===$&&A.c() +if(s>0){r=t.vh.a(q.gbQ(0).ga_(0)) +if(s<20&&q.gaC().k4.at.gaU().a[0]/2-r.at.d.a[0]>r.M)q.aaQ()}else q.aaQ()}} +A.agz.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.a4S.prototype={ +gabV(){var s,r,q,p,o=null,n=this.ok +if(n===$){s=A.ar() +r=new A.a(new Float64Array(2)) +q=$.aa() +q=new A.aJ(q,new Float64Array(2)) +q.a7(r) +q.D() +p=new A.LJ(o,s,q,B.o,0,0,o,B.e,new A.e([],t.s),new A.e([],t.g)) +p.b0(o,o,o,o,0,o,o,o,o) +this.ok!==$&&A.N() +this.ok=p +n=p}return n}, +gag7(){var s,r=this.p1 +if(r===$){s=A.mc(null,t.iS) +this.p1!==$&&A.N() +r=this.p1=new A.a7O(s,null,0,null,B.e,new A.e([],t.s),new A.e([],t.g))}return r}, +n(a){var s=0,r=A.r(t.H),q=this +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:q.J(q.gabV()) +q.J(q.gag7()) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s,r,q,p,o,n +this.le(0,b) +s=this.gaC().dh*b +for(r=this.k4,q=A.bht(r,r.$ti.c),p=q.$ti.c;q.H();){o=q.e +o=(o==null?p.a(o):o).at.d +o.eX(0,o.a[0]-s) +o.D()}n=r.ga9(0) +q=n.at.d +if(q.a[0]<=-n.ax.a[0]){q.eX(0,r.ga_(0).at.d.a[0]+r.ga_(0).ax.a[0]) +q.D() +r.P(0,n) +r.ho(0,n)}}, +fI(a){var s,r,q=this +q.ld(a) +s=q.axQ() +q.k4.I(0,s) +q.I(0,s) +r=q.at.d +r.dT(0,a.a[1]/2+21) +r.D()}, +bF(a){var s=this.gabV() +s.gbQ(0).al(0,s.gq8(s)) +s=this.gag7() +s.gbQ(0).al(0,s.gq8(s)) +s.at.af(0) +A.bG6(this.k4,new A.aGF())}, +axQ(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null,c=e.gaC().k4.at.gaU().a[0],b=$.bj7(),a=b.a +c=B.c.d0(c/a[0]) +s=e.k4 +r=s.gF(0) +q=A.bni(s) +q=q==null?d:q.at.d.a[0] +if(q==null)q=0 +p=A.bni(s) +p=p==null?d:p.ax.a[0] +o=q+(p==null?0:p) +n=Math.max(1+c-r,0) +m=J.vs(n,t.rE) +for(c=A.w(e).h("a2.T"),l=0;l>>0)&1)===0){k=e.p2 +if(k===$){r=e.M$ +if(r==null){j=e.bo() +j.toString +r=e.M$=c.a(j)}r=r.R +r===$&&A.c() +q=new Float64Array(2) +q[0]=2 +q[1]=104 +p=$.G().B() +p.sA(0,B.l) +i=new A.he(p,r,B.M) +r=new Float64Array(2) +r[0]=0 +r[1]=0 +p=r[0] +r=r[1] +h=p+a[0] +g=r+a[1] +i.c=new A.A(p,r,h,g) +f=new Float64Array(2) +f[0]=h-p +f[1]=g-r +r=q[0] +q=q[1] +i.c=new A.A(r,q,r+f[0],q+f[1]) +e.p2!==$&&A.N() +e.p2=i +k=i}r=k}else{k=e.p3 +if(k===$){r=e.M$ +if(r==null){j=e.bo() +j.toString +c.a(j) +e.M$=j +q=j +r=q}else q=r +r=r.R +r===$&&A.c() +q=q.R +q===$&&A.c() +q=q.gbW(q) +p=new Float64Array(2) +p[0]=q/2 +p[1]=104 +q=$.G().B() +q.sA(0,B.l) +i=new A.he(q,r,B.M) +r=new Float64Array(2) +r[0]=0 +r[1]=0 +q=r[0] +r=r[1] +h=q+a[0] +g=r+a[1] +i.c=new A.A(q,r,h,g) +f=new Float64Array(2) +f[0]=h-q +f[1]=g-r +r=p[0] +p=p[1] +i.c=new A.A(r,p,r+f[0],p+f[1]) +e.p3!==$&&A.N() +e.p3=i +k=i}r=k}r=A.hy(d,d,d,d,d,0,d,d,d,d,b,r) +q=r.at.d +q.eX(0,o+a[0]*l) +q.D() +m[l]=r}return m}} +A.aGF.prototype={ +$2(a,b){var s=a*$.bj7().a[0],r=b.at.d +r.eX(0,s) +r.D() +return s}, +$S:917} +A.ajQ.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.a4d.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k,j +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:j=new A.a(new Float64Array(2)) +j.p(382,25) +p=B.t.aW() +o=A.ar() +n=j +m=$.aa() +l=new A.aJ(m,new Float64Array(2)) +l.a7(n) +l.D() +n=t.s +k=t.g +p=new A.a4f(null,!1,null,$,p,null,o,l,B.j,0,0,null,B.e,new A.e([],n),new A.e([],k)) +p.b0(B.j,null,null,null,0,null,null,null,j) +p.lg(B.j,null,null,null,null,0,null,null,null,null,j,null) +q.J(p) +j=new A.a(new Float64Array(2)) +j.p(72,64) +p=B.t.aW() +o=A.ar() +l=j +m=new A.aJ(m,new Float64Array(2)) +m.a7(l) +m.D() +p=new A.a4e(null,!1,null,$,p,null,o,m,B.j,0,0,null,B.e,new A.e([],n),new A.e([],k)) +p.b0(B.j,null,null,null,0,null,null,null,j) +p.lg(B.j,null,null,null,null,0,null,null,null,null,j,null) +q.J(p) +return A.p(null,r)}}) +return A.q($async$n,r)}, +k6(a){if(this.at)this.Oo(a)}} +A.a4f.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=q.gaC().R +o===$&&A.c() +p=new A.a(new Float64Array(2)) +p.p(955,26) +q.ok=A.iS(o,p,q.ax) +q.tf() +return A.p(null,r)}}) +return A.q($async$n,r)}, +fI(a){var s,r +this.ld(a) +s=a.a +r=this.at.d +r.eX(0,s[0]/2) +r.D() +r.dT(0,s[1]*0.25) +r.D()}} +A.a4e.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:o=q.gaC().R +o===$&&A.c() +p=new A.a(new Float64Array(2)) +p.ag(2) +q.ok=A.iS(o,p,q.ax) +q.tf() +return A.p(null,r)}}) +return A.q($async$n,r)}, +fI(a){var s,r +this.ld(a) +s=a.a +r=this.at.d +r.eX(0,s[0]/2) +r.D() +r.dT(0,s[1]*0.75) +r.D()}} +A.ajC.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.ajD.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.Go.prototype={ +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:m=q.aS +l=q.gaC().R +l===$&&A.c() +q.ok=m.am9(l) +q.tf() +l=q.ax.a +p=q.at.d +p.eX(0,q.gaC().k4.at.gaU().a[0]+l[0]*q.b2) +p.D() +p.dT(0,m.c) +p.D() +p=q.gaC().dh +o=B.c.Zg(l[0]*p*m.f*0.6) +n=B.c.Zg(o*1.5) +q.aM=A.a9z($.Zv(),o,n) +q.I(0,m.z.$0()) +return A.p(null,r)}}) +return A.q($async$n,r)}, +a8(a,b){var s,r,q=this +q.le(0,b) +s=q.at.d +r=s.a +s.eX(0,r[0]-q.gaC().dh*b) +s.D() +if(!(r[0]+q.ax.a[0]>0))q.eb()}} +A.amj.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.a7O.prototype={ +a8(a,b){var s,r,q,p=this +if(p.gbQ(0).nw(0,t.qb).length!==0){s=t.p4.a(p.gbQ(0).ga_(0)) +if(s!=null)if(!s.ao){r=s.at.d.a[0]+s.ax.a[0] +if(r>0){q=s.aM +q===$&&A.c() +q=r+q>>0>2;)q.eQ(0)}, +aQz(a){var s,r,q,p +for(s=this.at,s=A.bht(s,s.$ti.c),r=s.$ti.c,q=0;s.H();){p=s.e +q+=(p==null?r.a(p):p)===a?1:0}return q>=2}, +ayA(a){if(this.gaC().dh>a.e)return B.c.bK(A.a9z($.Zv(),1,3)) +else return 1}} +A.ami.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.Pr.prototype={ +W(){return"ObstacleType."+this.b}} +A.aM_.prototype={ +am9(a){var s +switch(this.a.a){case 0:s=new A.a(new Float64Array(2)) +s.p(446,2) +s=A.iS(a,s,this.b) +break +case 1:s=new A.a(new Float64Array(2)) +s.p(652,2) +s=A.iS(a,s,this.b) +break +default:s=null}return s}} +A.aM1.prototype={ +$0(){var s,r,q,p=new A.a(new Float64Array(2)) +p.p(5,7) +s=new A.a(new Float64Array(2)) +s.p(10,54) +s=A.fg(B.H,p,s) +p=new A.a(new Float64Array(2)) +p.p(5,7) +r=new A.a(new Float64Array(2)) +r.p(12,68) +r=A.fg(B.H,p,r) +p=new A.a(new Float64Array(2)) +p.p(15,4) +q=new A.a(new Float64Array(2)) +q.p(14,28) +return A.b([s,r,A.fg(B.H,p,q)],t.sv)}, +$S:250} +A.aM0.prototype={ +$0(){var s,r,q,p=new A.a(new Float64Array(2)) +p.p(0,26) +s=new A.a(new Float64Array(2)) +s.p(14,40) +s=A.fg(B.H,p,s) +p=new A.a(new Float64Array(2)) +p.p(16,0) +r=new A.a(new Float64Array(2)) +r.p(14,98) +r=A.fg(B.H,p,r) +p=new A.a(new Float64Array(2)) +p.p(28,22) +q=new A.a(new Float64Array(2)) +q.p(20,40) +return A.b([s,r,A.fg(B.H,p,q)],t.sv)}, +$S:250} +A.t1.prototype={ +W(){return"PlayerState."+this.b}} +A.a8V.prototype={ +gG7(){return this.gaC().k4.at.gaU().a[1]/2-this.ax.a[1]/2}, +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m,l,k +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:k=new A.a(new Float64Array(2)) +k.p(0.7,0.6) +p=q.ax +o=p.a +n=o[1] +m=new A.a(new Float64Array(2)) +m.p(0,n/3) +q.J(A.bp5(k,p,m)) +k=new A.a(new Float64Array(2)) +k.p(0.45,0.35) +o=o[0] +n=new A.a(new Float64Array(2)) +n.p(o/2,0) +q.J(A.bp5(k,p,n)) +k=new A.a(new Float64Array(2)) +k.p(88,90) +p=new A.a(new Float64Array(2)) +p.p(1514,4) +o=new A.a(new Float64Array(2)) +o.p(1602,4) +n=t.d +k=q.a4n(A.b([p,o],n),k,0.2) +p=new A.a(new Float64Array(2)) +p.p(88,90) +o=new A.a(new Float64Array(2)) +o.p(76,6) +p=q.QF(A.b([o],n),p) +o=new A.a(new Float64Array(2)) +o.p(88,90) +m=new A.a(new Float64Array(2)) +m.p(1339,6) +o=q.QF(A.b([m],n),o) +m=new A.a(new Float64Array(2)) +m.p(88,90) +l=new A.a(new Float64Array(2)) +l.p(1782,6) +q.saMq(A.b3([B.EX,k,B.EY,p,B.kM,o,B.EW,q.QF(A.b([l],n),m)],t.w2,t.EF)) +q.sa1(0,B.EY) +return A.p(null,r)}}) +return A.q($async$n,r)}, +aUi(a){if(this.k4===B.kM)return +this.sa1(0,B.kM) +this.R=-15-a/500}, +bF(a){var s=this,r=s.at.d +r.dT(0,s.gG7()) +r.D() +s.R=0 +s.sa1(0,B.EX)}, +a8(a,b){var s,r,q=this +q.apq(0,b) +s=q.at.d +if(q.k4===B.kM){r=s.a +s.dT(0,r[1]+q.R) +s.D();++q.R +if(r[1]>q.gG7())q.bF(0)}else{s.dT(0,q.gG7()) +s.D()}if(q.gaC().f3===B.nS&&s.a[0]<50){s.eX(0,s.a[0]+0.03333333333333333*b*5000) +s.D()}}, +fI(a){var s +this.ld(a) +s=this.at.d +s.dT(0,this.gG7()) +s.D()}, +ic(a,b){var s +this.lc(a,b) +s=this.gaC() +s.gNn().at=!0 +s.f3=B.nT +s.gMp().sa1(0,B.EW) +s.dh=0}, +a4n(a,b,c){var s=A.a5(a).h("W<1,he>") +return A.aTC(A.ab(new A.W(a,new A.aNP(this,b),s),!0,s.h("aI.E")),!0,c)}, +QF(a,b){return this.a4n(a,b,1/0)}} +A.aNP.prototype={ +$1(a){var s=this.a.gaC().R +s===$&&A.c() +return A.iS(s,a,this.b)}, +$S:919} +A.amP.prototype={ +bo(){var s=this.M$ +return s==null?this.c6():s}} +A.amQ.prototype={} +A.Nq.prototype={ +W(){return"GameState."+this.b}} +A.hA.prototype={ +mV(a){return B.l}, +gMp(){var s,r=this.S +if(r===$){s=A.bI5() +this.S!==$&&A.N() +this.S=s +r=s}return r}, +gaeQ(){var s,r,q,p,o,n=null,m=this.aa +if(m===$){s=A.mc(n,t.rE) +r=A.ar() +q=new A.a(new Float64Array(2)) +p=$.aa() +p=new A.aJ(p,new Float64Array(2)) +p.a7(q) +p.D() +o=new A.a4S(s,n,r,p,B.o,0,0,n,B.e,new A.e([],t.s),new A.e([],t.g)) +o.b0(n,n,n,n,0,n,n,n,n) +this.aa!==$&&A.N() +this.aa=o +m=o}return m}, +gNn(){var s=this.bp +if(s===$){s!==$&&A.N() +s=this.bp=new A.a4d(0,null,B.e,new A.e([],t.s),new A.e([],t.g))}return s}, +sNP(a){var s +this.cZ=a +s=this.aN +s===$&&A.c() +s.sd7(0,B.d.k_(B.f.j(a),5,"0")+" HI "+B.d.k_(B.f.j(this.cL),5,"0"))}, +n(a){var s=0,r=A.r(t.H),q=this,p,o,n,m +var $async$n=A.t(function(b,c){if(b===1)return A.o(c,r) +while(true)switch(s){case 0:s=2 +return A.x($.aC().d_(0,"trex.png"),$async$n) +case 2:m=c +q.R!==$&&A.aj() +q.R=m +q.J(q.gaeQ()) +q.J(q.gMp()) +q.J(q.gNn()) +p=A.b([],t.H4) +for(o=0;o<13;++o){n="0123456789HI "[o] +p.push(new A.Nu(n,954+20*o,0,20,-1,-1,-1,-1,-1))}n=new A.aTJ(m,23,23,A.D(t.S,t.RF)) +n.asT(23,null,p,23,m) +m=$.G().B() +p=new A.a(new Float64Array(2)) +p.p(20,20) +m=A.dm(null,null,null,null,p,null,null,null,null,new A.acg(n,2,m),t.Fr) +q.aN!==$&&A.aj() +q.aN=m +q.J(m) +q.sNP(0) +return A.p(null,r)}}) +return A.q($async$n,r)}, +jZ(a,b){if(b.G(0,B.hQ)||b.G(0,B.kn))this.ag8() +return B.ci}, +cb(a){this.ag8()}, +ag8(){var s=this,r=s.f3 +if(r===B.nT||r===B.nS){s.f3=B.wK +s.gMp().bF(0) +s.gaeQ().bF(0) +s.dh=600 +s.gNn().at=!1 +s.c9=0 +r=s.cZ +if(r>s.cL)s.cL=r +s.sNP(0) +s.d4=0 +return}s.gMp().aUi(s.dh)}, +a8(a,b){var s,r=this +r.ari(0,b) +s=r.f3 +if(s===B.nT)return +if(s===B.wK){r.c9+=b +s=r.d4+b*r.dh +r.d4=s +r.sNP(B.c.cN(s,50)) +s=r.dh +if(s<2500)r.dh=s+10*b}}} +A.aqM.prototype={} +A.aqN.prototype={ +aX(){var s,r +this.a0N() +s=this.cC() +if(s.cl(B.w,t.F)==null){r=A.d5() +s.gc8().u(0,B.w,r) +s.J(r)}}} +A.XI.prototype={ +a8(a,b){this.fO(0,b) +this.dq$.fZ()}} +A.I4.prototype={ +ab(a){var s=null,r=A.kN(s,t.rR),q=A.bm(s,s,-2147483647),p=A.aU(s,s,s,s,s,s),o=$.aC(),n=$.aL(),m=A.b([],t.u),l=A.aP(A.aQ(),t.y) +r=new A.hA(B.nS,r,q,p,o,n,B.m,m,l,A.C(t.S),A.C(t.F),0,s,B.e,new A.e([],t.s),new A.e([],t.g)) +r.aT(s,s,s,t.i) +return A.bfL(!0,A.dD(s,A.LD(A.aO(r,s,new A.aUQ(),s,s,t.aq),B.a4,s),B.y,B.q,s,s,s,B.UI,s,s),s,s,s,B.ki,s,"T-Rex")}} +A.aUQ.prototype={ +$1(a){return B.uN}, +$S:120} +A.tJ.prototype={ +gF(a){return this.b}, +i(a,b){if(b>=this.b)throw A.d(A.NS(b,this,null,null,null)) +return this.a[b]}, +u(a,b,c){if(b>=this.b)throw A.d(A.NS(b,this,null,null,null)) +this.a[b]=c}, +sF(a,b){var s,r,q,p=this,o=p.b +if(bo){if(o===0)q=new Uint8Array(b) +else q=p.C7(b) +B.L.dL(q,0,p.b,p.a) +p.a=q}}p.b=b}, +SU(a,b){var s=this,r=s.b +if(r===s.a.length)s.a9w(r) +s.a[s.b++]=b}, +E(a,b){var s=this,r=s.b +if(r===s.a.length)s.a9w(r) +s.a[s.b++]=b}, +yi(a,b,c,d){A.en(c,"start") +this.a9v(b,c,d)}, +I(a,b){return this.yi(0,b,0,null)}, +hO(a,b,c){var s,r,q,p,o,n,m,l=this,k=null +A.bgm(b,l,"index",l.b+1) +A.en(0,"start") +if(b===l.b){l.a9v(c,0,k) +return}s=t.j.b(c)?J.bo(c):k +if(s!=null){l.a9x(b,c,0,s) +return}r=l.b +for(q=J.az(c),p=0;q.H();){o=q.ga1(q) +n=l.a +if(r===n.length){n=l.C7(k) +B.L.dL(n,0,r,l.a) +l.a=n}m=r+1 +n[r]=o +r=m}A.bh5(l.a,b,l.b) +A.bh5(l.a,l.b,r) +A.bh5(l.a,b,r) +l.b=r +return}, +a9v(a,b,c){var s,r,q +if(t.j.b(a))c=J.bo(a) +if(c!=null){this.a9x(this.b,a,b,c) +return}for(s=J.az(a),r=0;s.H();){q=s.ga1(s) +if(r>=b)this.SU(0,q);++r}if(rs.gF(b)||d>s.gF(b))throw A.d(A.ad("Too few elements"))}r=d-c +q=o.b+r +o.aKC(q) +s=o.a +p=a+r +B.L.c3(s,p,o.b+r,s,a) +B.L.c3(o.a,a,p,b,c) +o.b=q}, +hc(a,b,c){var s,r,q=this,p=q.b +if(b>p)throw A.d(A.du(b,0,p,null,null)) +s=q.a +if(ps)throw A.d(A.du(c,0,s,null,null)) +s=this.a +if(A.w(this).h("tJ").b(d))B.L.c3(s,b,c,d.a,e) +else B.L.c3(s,b,c,d,e)}, +dL(a,b,c,d){return this.c3(0,b,c,d,0)}} +A.akm.prototype={} +A.Ti.prototype={} +A.aIS.prototype={ +W(){return"LaunchMode."+this.b}} +A.aXy.prototype={} +A.aKB.prototype={ +abF(a){var s=t.w +return B.D2.lm("canLaunch",A.b3(["url",a],t.N,t.K),!1,s).cu(new A.aKC(),s)}, +Eq(a,b,c,d,e,f,g,h){var s=t.w +return B.D2.lm("launch",A.b3(["url",a,"useSafariVC",f,"useWebView",g,"enableJavaScript",!0,"enableDomStorage",!0,"universalLinksOnly",e,"headers",d],t.N,t.K),!1,s).cu(new A.aKD(),s)}} +A.aKC.prototype={ +$1(a){return a===!0}, +$S:251} +A.aKD.prototype={ +$1(a){return a===!0}, +$S:251} +A.B_.prototype={ +W(){return"PreferredLaunchMode."+this.b}} +A.a5e.prototype={} +A.a5Z.prototype={} +A.aX4.prototype={ +Eq(a,b,c,d,e,f,g,h){throw A.d(A.d_("launch() has not been implemented."))}, +Er(a,b){var s,r,q=B.d.c4(a,"http:")||B.d.c4(a,"https:"),p=b.a +if(p!==B.F3)if(p!==B.F4){s=q&&p===B.r0 +r=s}else r=!0 +else r=!0 +return this.Eq(a,!0,!0,b.b.c,p===B.F5,r,r,b.d)}} +A.aX5.prototype={ +aWU(a,b){var s,r=A.aX2(a),q=r==null?null:r.gj6() +if(B.a6u.G(0,q))return null +s=this.b&&B.FW.G(0,q)?"_top":"" +return this.a.open(a,s,"noopener,noreferrer")}, +abF(a){var s=$.byc(),r=A.aX2(a) +return A.e5(s.G(0,r==null?null:r.gj6()),t.w)}, +Eq(a,b,c,d,e,f,g,h){return this.aUn(a,!0,!0,d,e,f,g,h)}, +aUn(a,b,c,d,e,f,g,h){var s=0,r=A.r(t.w),q,p=this +var $async$Eq=A.t(function(i,j){if(i===1)return A.o(j,r) +while(true)switch(s){case 0:q=p.Er(a,new A.a5Z(B.r0,B.Wm,h)) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Eq,r)}, +Er(a,b){return this.aUo(a,b)}, +aUo(a,b){var s=0,r=A.r(t.w),q,p=this +var $async$Er=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:q=p.aWU(a,b.d)!=null +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$Er,r)}} +A.aOF.prototype={ +ajF(){var s=this.axP() +if(J.bo(s)!==16)throw A.d(A.c1("The length of the Uint8list returned by the custom RNG must be 16.")) +else return s}} +A.aKn.prototype={ +axP(){var s,r,q,p=new Uint8Array(16) +for(s=this.a,r=0;r<16;r+=4){q=s.f9(B.c.aw(Math.pow(2,32))) +p[r]=q +p[r+1]=B.f.dU(q,8) +p[r+2]=B.f.dU(q,16) +p[r+3]=B.f.dU(q,24)}return p}} +A.aX8.prototype={ +aiQ(){var s,r,q +if(null==null)s=null +else s=null +if(s==null)s=$.bye().ajF() +r=J.al(s) +r.u(s,6,r.i(s,6)&15|64) +r.u(s,8,r.i(s,8)&63|128) +if(r.gF(s)-0<16){q=r.gF(s) +A.X(A.w6("buffer too small: need 16: length="+q))}q=$.byd() +return q[r.i(s,0)]+q[r.i(s,1)]+q[r.i(s,2)]+q[r.i(s,3)]+"-"+q[r.i(s,4)]+q[r.i(s,5)]+"-"+q[r.i(s,6)]+q[r.i(s,7)]+"-"+q[r.i(s,8)]+q[r.i(s,9)]+"-"+q[r.i(s,10)]+q[r.i(s,11)]+q[r.i(s,12)]+q[r.i(s,13)]+q[r.i(s,14)]+q[r.i(s,15)]}} +A.ot.prototype={} +A.bc3.prototype={ +$0(){var s,r=this,q={},p=r.a,o=A.a6(p.c,p.a,p.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a),n=$.G(),m=n.lu(),l=A.bmE(o,B.Lu,m,n.lt(m,null),r.b,r.c,r.d,r.e) +n=r.f +s=B.f5.aPt(0,n,l) +q.a=s +if(s.a)return new A.d9(l.Zu(),t.AH) +return A.f2(l.at,t.H).cu(new A.bc4(q,n,l,p),t.YA)}, +$S:921} +A.bc4.prototype={ +$1(a){var s=this.c,r=this.a +r.a=B.f5.acT(0,this.b,s,r.a) +return s.Zu()}, +$S:922} +A.b4w.prototype={} +A.amB.prototype={} +A.b0L.prototype={} +A.aEt.prototype={ +Zu(){var s,r,q,p,o,n,m=this +m.cx=!0 +try{q=m.f.jT() +p=m.CW +return new A.ot(q,p)}finally{for(q=m.ax,p=q.gbm(0),o=A.w(p),o=o.h("@<1>").ak(o.y[1]),p=new A.bt(J.az(p.a),p.b,o.h("bt<1,2>")),o=o.y[1];p.H();){n=p.a +s=n==null?o.a(n):n +s.t()}q.af(0) +for(q=m.ay,p=q.gbm(0),o=A.w(p),o=o.h("@<1>").ak(o.y[1]),p=new A.bt(J.az(p.a),p.b,o.h("bt<1,2>")),o=o.y[1];p.H();){n=p.a +r=n==null?o.a(n):n +n=r.b +if(n!=null)n.t()}q.af(0)}}, +Yd(a,b,c){return this.aWe(a,b,c)}, +aWe(a,b,c){var s=0,r=A.r(t.H),q=this,p,o,n +var $async$Yd=A.t(function(d,e){if(d===1)return A.o(e,r) +while(true)switch(s){case 0:o=q.y[a] +n=q.x[b] +if(c!=null)n.sdk(q.ay.i(0,c).b) +p=q.dy +if(p!=null){p=q.ay.i(0,p.a).a +p.a3(o,n)}else{p=n +q.r.a3(o,p)}return A.p(null,r)}}) +return A.q($async$Yd,r)}, +agl(a,b,c,d,e,f,g,h,i){var s=$.G().B() +s.sA(0,new A.n(b)) +if(a!==0)s.sde(B.a_9[a]) +if(e!=null)s.sdk(this.z[e]) +if(d===1){s.sU(0,B.u) +if(f!=null&&f!==0)s.suH(B.a_j[f]) +if(g!=null&&g!==0)s.sAM(B.Yk[g]) +if(h!=null&&h!==4)s.sOi(h) +if(i!=null&&i!==0)s.sbM(i)}this.x.push(s)}, +aWn(a,b,c,d,e,f,g,h){var s,r,q=A.b([],t.O) +for(s=J.al(e),r=0;r>>0)) +this.z.push(A.zu(new A.i(a,b),new A.i(c,d),q,f,B.xu[g],null))}, +aWv(a,b,c,d,e,f,g,h,i,j){var s,r,q,p,o,n=new A.i(a,b) +if(d==null)s=null +else{e.toString +s=new A.i(d,e)}r=A.b([],t.O) +for(q=J.al(f),p=0;p>>0)) +o=!J.f(s,n)&&s!=null +q=B.xu[i] +this.z.push(A.Fd(n,c,r,g,q,h,o?s:null,0))}, +Ye(a,b,c,d){return this.aWf(a,b,c,d)}, +aWf(a,b,c,d){var s=0,r=A.r(t.H),q=this,p,o,n,m,l +var $async$Ye=A.t(function(e,f){if(e===1)return A.o(f,r) +while(true)switch(s){case 0:n={} +m=q.Q[a] +l=q.cy +if(l==null)l=0 +p=q.db +n.a=0 +o=new A.aEu(n,q,d,m,l,p) +if(b!=null)o.$1(b) +if(c!=null)o.$1(c) +q.cy=l+n.a +return A.p(null,r)}}) +return A.q($async$Ye,r)}, +aWl(a,b,c){var s,r,q=new A.aM($.aK,t.D),p=new A.bH(q,t.h) +this.at.push(q) +q=$.jN.fV$ +q===$&&A.c() +s=q.cU(0,A.a6(this.a,a,b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a),new A.aEw(c)) +if(s==null){p.n_("Failed to load image") +return}r=A.bn("listener") +r.b=new A.kq(new A.aEx(this,s,r,a,p),null,new A.aEy(p,s,r,null)) +s.an(0,r.bl())}} +A.aEu.prototype={ +$1(a){var s,r,q,p,o=this,n=null,m=o.b,l=m.x[a],k=o.c +if(k!=null)l.sdk(m.ay.i(0,k).b) +k=A.bg7(n,n,n,n,n,n,n,n,n,n,m.d,n) +s=$.G().D7(k) +k=o.d +s.ws(A.bgZ(n,n,k.f,k.w,k.r,n,k.b,n,n,k.c,n,n,k.e,l,n,n,n,m.c,n,n,n)) +s.yk(k.a) +r=s.cY() +r.kY(B.Dn) +o.a.a=r.grp() +if(m.dx!=null){q=m.r +q.bU(0) +p=m.dx +p.toString +q.az(0,p)}q=m.r +q.qZ(r,new A.i(o.e-r.grp()*k.d,o.f-r.gyo(r))) +r.t() +if(m.dx!=null)q.bw(0)}, +$S:13} +A.aEw.prototype={ +$0(){return A.bHR(A.Fn(this.a).cu(new A.aEv(),t.OX))}, +$S:923} +A.aEv.prototype={ +$1(a){return this.aju(a)}, +aju(a){var s=0,r=A.r(t.OX),q,p=2,o,n=[],m,l,k,j +var $async$$1=A.t(function(b,c){if(b===1){o=c +s=p}while(true)switch(s){case 0:p=3 +s=6 +return A.x(A.bfl(a),$async$$1) +case 6:m=c +s=7 +return A.x(m.Xo(),$async$$1) +case 7:l=c +s=8 +return A.x(l.lK(),$async$$1) +case 8:k=c +j=J.avF(k) +m.a=null +l.t() +q=new A.j8(j,1,null) +n=[1] +s=4 +break +n.push(5) +s=4 +break +case 3:n=[2] +case 4:p=2 +a.a=null +s=n.pop() +break +case 5:case 1:return A.p(q,r) +case 2:return A.o(o,r)}}) +return A.q($async$$1,r)}, +$S:924} +A.aEx.prototype={ +$2(a,b){var s=this +s.b.ad(0,s.c.bl()) +s.a.ax.u(0,s.d,a.a) +s.e.fl(0)}, +$S:150} +A.aEy.prototype={ +$2(a,b){var s=this.a +if((s.a.a&30)===0)s.fl(0) +this.b.ad(0,this.c.bl()) +A.eR(new A.cI(a,b,"image resource service",A.cn("Failed to load image"),null,!0))}, +$S:925} +A.arc.prototype={} +A.ar8.prototype={ +gkV(a){return this.e}} +A.aeb.prototype={ +j(a){return"VectorGraphicsDecodeException: Failed to decode vector graphic from "+this.a.j(0)+".\n\nAdditional error: "+A.j(this.b)}, +$ic4:1} +A.DH.prototype={} +A.aXc.prototype={ +XO(a,b){return this.aUI(a,b)}, +aUI(a,b){var s=0,r=A.r(t.YA),q,p,o +var $async$XO=A.t(function(c,d){if(c===1)return A.o(d,r) +while(true)switch(s){case 0:o={} +o.a=B.r +p=$.bF().c.f +o.b=p.length===0?B.a_l:B.b.ga9(p) +q=a.aUD(b).cu(new A.aXd(o,a,!0,null),t.YA) +s=1 +break +case 1:return A.p(q,r)}}) +return A.q($async$XO,r)}} +A.aXd.prototype={ +$1(a){var s,r,q=this +try{s=q.a +s=A.bSf(a,q.c,q.b,s.b,q.d,s.a) +return s}catch(r){A.Zm().$1("Failed to decode "+q.b.j(0)) +throw r}}, +$S:926} +A.a1V.prototype={} +A.aXf.prototype={ +acT(d7,d8,d9,e0){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,d1,d2,d3,d4,d5=null,d6="The provided data was not a vector_graphics binary asset." +if(e0==null){s=new A.b4T(d8) +if(J.avH(d8)<5)throw A.d(A.ad(d6)) +if(s.NH(0)!==8924514)throw A.d(A.ad(d6)) +if(s.oW(0)!==1)throw A.d(A.ad("The provided data does not match the currently supported version."))}else{r=e0.b +r.toString +s=r}$label0$1:for(r=s.a,q=J.bS(r),p=d9.as,o=d9.ay,n=d9.r,m=d9.ax,l=d9.Q,k=t.J9,j=d9.y,i=d9.x,h=!1;s.b0){c1=J.iZ(q.gdl(r),q.gfY(r)+s.b,b) +s.b+=b +c2=new A.k8(!1).lh(c1,0,d5,!0)}else c2=d5 +b=q.ez(r,s.b,B.n) +s.b+=2 +c1=J.iZ(q.gdl(r),q.gfY(r)+s.b,b) +s.b+=b +c3=new A.k8(!1).lh(c1,0,d5,!0) +c4=A.b([],k) +if((b9&1)!==0)c4.push(B.lk) +if((b9&2)!==0)c4.push(B.aa3) +if((b9&4)!==0)c4.push(B.GW) +l.push(new A.ar8(c3,c2,d,f,B.oj[b8],A.bL0(c4),B.Yz[c0],new A.n(c))) +continue $label0$1 +case 44:f=q.ez(r,s.b,B.n) +e=s.b+=2 +d=q.ez(r,e,B.n) +e=s.b+=2 +c5=d===65535?d5:d +d=q.ez(r,e,B.n) +e=s.b+=2 +c6=d===65535?d5:d +d=q.ez(r,e,B.n) +s.b+=2 +d9.Ye(f,c5,c6,d===65535?d5:d) +continue $label0$1 +case 46:f=q.ez(r,s.b,B.n) +e=s.b+=2 +s.b=e+1 +c7=q.j5(r,e) +d=q.ec(r,s.b,B.n) +s.b+=4 +c1=J.iZ(q.gdl(r),q.gfY(r)+s.b,d) +s.b+=d +d9.aWl(f,c7,c1) +h=!0 +continue $label0$1 +case 47:f=q.ez(r,s.b,B.n) +e=s.b+=2 +d=q.fe(r,e,B.n) +e=s.b+=4 +c=q.fe(r,e,B.n) +e=s.b+=4 +b=q.fe(r,e,B.n) +e=s.b+=4 +a=q.fe(r,e,B.n) +s.b+=4 +c8=s.G4() +e=m.i(0,f) +e.toString +b2=c8!=null +if(b2){n.bU(0) +n.az(0,c8)}n.i6(e,new A.A(0,0,e.gbW(e),e.gb9(e)),new A.A(d,c,d+b,c+a),$.G().B()) +if(b2)n.bw(0) +continue $label0$1 +case 49:f=q.ez(r,s.b,B.n) +e=s.b+=2 +d=q.fe(r,e,B.n) +e=s.b+=4 +c=q.fe(r,e,B.n) +e=s.b+=4 +b=q.fe(r,e,B.n) +e=s.b+=4 +a=q.fe(r,e,B.n) +s.b+=4 +c9=s.G4() +c9.toString +d9.dy=new A.b4w(f,b,a,c9) +e=$.G() +d0=e.lu() +d1=e.lt(d0,d5) +d1.mZ(new A.A(d,c,d+b,c+a)) +e=new A.amB() +e.c=d0 +e.a=d1 +o.u(0,f,e) +continue $label0$1 +case 50:q.ez(r,s.b,B.n) +e=s.b+=2 +f=q.fe(r,e,B.n) +e=s.b+=4 +d=q.fe(r,e,B.n) +e=s.b+=4 +c=q.fe(r,e,B.n) +e=s.b+=4 +b=q.fe(r,e,B.n) +e=s.b+=4 +s.b=e+1 +e=q.j5(r,e) +c9=s.G4() +b2=isNaN(f)?d5:f +b3=isNaN(d)?d5:d +d2=isNaN(c)?d5:c +d3=isNaN(b)?d5:b +p.push(new A.arc(b2,b3,d2,d3,e!==0,c9)) +continue $label0$1 +case 51:f=q.ez(r,s.b,B.n) +s.b+=2 +d4=p[f] +if(d4.e)d9.db=d9.cy=0 +e=d4.a +if(e!=null)d9.cy=e +e=d4.b +if(e!=null)d9.db=e +e=d4.c +if(e!=null){b2=d9.cy +d9.cy=(b2==null?0:b2)+e}e=d4.d +if(e!=null)d9.db+=e +d9.dx=d4.f +continue $label0$1 +default:throw A.d(A.ad("Unknown type tag "+g))}}return B.Ta}, +aPt(a,b,c){return this.acT(0,b,c,null)}, +aje(a,b,c,d){a.jb(B.d4) +a.qu() +a.a.push(30) +a.qD(b) +a.qD(c) +a.qD(d==null?65535:d)}, +avR(a){var s,r=J.al(a),q=r.gF(a),p=new Float32Array(q),o=new DataView(new ArrayBuffer(8)) +for(s=0;sa.a){s=a.b +throw A.d(A.ad(B.d.aZw(s[0])+B.d.c5(s,1)+" must be encoded together (current phase is "+this.as.b+")."))}this.as=a}, +aLI(a){var s,r=this.a +if(a!=null){s=a.length +r.push(s) +this.tp(8) +B.b.I(this.a,A.jM(a.buffer,a.byteOffset,8*s))}else r.push(0)}, +qD(a){var s,r +this.c.setUint16(0,a,!0) +s=this.a +r=this.d +r===$&&A.c() +B.b.I(s,A.fj(r,0,A.fI(2,"count",t.S),A.b8(r).h("O.E")))}, +aFR(a){var s,r +this.c.setUint32(0,a,!0) +s=this.a +r=this.d +r===$&&A.c() +B.b.I(s,A.fj(r,0,A.fI(4,"count",t.S),A.b8(r).h("O.E")))}, +a7f(a){this.tp(4) +B.b.I(this.a,A.jM(a.buffer,a.byteOffset,4*a.length))}, +o4(a){var s,r +this.c.setFloat32(0,a,!0) +s=this.a +r=this.d +r===$&&A.c() +B.b.I(s,A.fj(r,0,A.fI(4,"count",t.S),A.b8(r).h("O.E")))}, +a7e(a){this.tp(4) +B.b.I(this.a,A.jM(a.buffer,a.byteOffset,4*a.length))}, +tp(a){var s,r=this.a,q=B.f.bx(r.length,a) +if(q!==0){s=$.Dj() +B.b.I(r,A.fj(s,0,A.fI(a-q,"count",t.S),A.b8(s).h("O.E")))}}} +A.b4T.prototype={ +oW(a){return J.bdN(this.a,this.b++)}, +ako(a){var s=J.bkh(this.a,this.b,B.n) +this.b+=2 +return s}, +NH(a){var s=J.bdM(this.a,this.b,B.n) +this.b+=4 +return s}, +rM(a){var s=this.a,r=J.bS(s),q=J.iZ(r.gdl(s),r.gfY(s)+this.b,a) +this.b+=a +return q}, +a_G(a){var s,r,q,p=this +p.tp(2) +s=p.a +r=J.bS(s) +q=J.bk9(r.gdl(s),r.gfY(s)+p.b,a) +p.b=p.b+2*a +return q}, +a_l(a){var s,r,q,p=this +p.tp(4) +s=p.a +r=J.bS(s) +q=J.bdF(r.gdl(s),r.gfY(s)+p.b,a) +p.b=p.b+4*a +return q}, +G_(a){var s,r,q,p=this +p.tp(4) +s=p.a +r=J.bS(s) +q=J.avD(r.gdl(s),r.gfY(s)+p.b,a) +p.b=p.b+4*a +return q}, +tp(a){var s=this.b,r=B.f.bx(s,a) +if(r!==0)this.b=s+(a-r)}, +G4(){var s,r,q,p=this,o=p.oW(0) +if(o>0){p.tp(8) +s=p.a +r=J.bS(s) +q=J.bk8(r.gdl(s),r.gfY(s)+p.b,o) +p.b=p.b+8*o +return q}return null}} +A.aC9.prototype={ +ayl(a,b){return b.cU(0,a,new A.aCa(b))}, +o1(a,b){return this.ayl(a,b,t.z)}, +ab_(a){var s=null +this.r.push(new A.m_(s,B.TK,s,this.o1(a,this.a),s,s))}, +aM6(a,b,c,d,e){var s,r,q,p=this +if(b.a.length===0)return +s=p.o1(b,p.b) +r=p.o1(c,p.a) +q=e!=null?p.w.i(0,e):null +p.r.push(new A.m_(d,B.TJ,s,r,q,null))}} +A.aCa.prototype={ +$0(){return this.a.a}, +$S:106} +A.de.prototype={ +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.de&&b.a===this.a&&b.b===this.b}, +a2(a,b){return new A.de(this.a*b,this.b*b)}, +X(a,b){return new A.de(this.a+b.a,this.b+b.b)}, +j(a){return"Point("+A.j(this.a)+", "+A.j(this.b)+")"}} +A.lw.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.lw&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d}, +j(a){var s=this +return"Rect.fromLTRB("+A.j(s.a)+", "+A.j(s.b)+", "+A.j(s.c)+", "+A.j(s.d)+")"}} +A.a56.prototype={} +A.a2X.prototype={} +A.nV.prototype={ +aky(a){var s,r,q,p,o=this +if(a!=null)s=o.a===1&&o.d===1 +else s=!0 +if(s)return a +s=o.a +r=o.c +q=o.b +p=o.d +return(Math.sqrt(s*s+r*r)+Math.sqrt(q*q+p*p))/2*a}, +aZ7(a){var s,r,q,p,o,n,m,l=this +if(a===0)return l +s=Math.cos(a) +r=Math.sin(a) +q=l.a +p=l.c +o=l.b +n=l.d +m=-r +return A.qF(q*s+p*r,o*s+n*r,q*m+p*s,o*m+n*s,l.e,l.f,l.r)}, +gadB(){var s=this,r=s.a +return r>0&&s.b===0&&s.c===0&&s.d>0&&s.r===r}, +a_O(a,b){var s=this +if(a===1&&b===1)return s +return A.qF(s.a*a,s.b*a,s.c*b,s.d*b,s.e,s.f,s.r*a)}, +FF(a,b){var s=this,r=s.a,q=s.b,p=s.c,o=s.d +return A.qF(r,q,p,o,r*a+p*b+s.e,q*a+o*b+s.f,s.r)}, +iV(a){var s=this,r=s.a,q=a.a,p=s.c,o=a.b,n=s.b,m=s.d,l=a.c,k=a.d,j=a.e,i=a.f +return A.qF(r*q+p*o,n*q+m*o,r*l+p*k,n*l+m*k,r*j+p*i+s.e,n*j+m*i+s.f,s.r*a.r)}, +rE(a,b){var s=this,r=b.a,q=b.b +return new A.de(s.a*r+s.c*q+s.e,s.b*r+s.d*q+s.f)}, +wy(){var s=this +return new Float64Array(A.eG(A.b([s.a,s.b,0,0,s.c,s.d,0,0,0,0,s.r,0,s.e,s.f,0,1],t.n)))}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.nV&&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}, +j(a){var s=this +return"[ "+A.j(s.a)+", "+A.j(s.c)+", "+A.j(s.e)+" ]\n[ "+A.j(s.b)+", "+A.j(s.d)+", "+A.j(s.f)+" ]\n[ 0.0, 0.0, 1.0 ] // _m4_10 = "+A.j(s.r)+"\n"}} +A.a8z.prototype={ +W(){return"PathFillType."+this.b}} +A.GC.prototype={ +W(){return"PathCommandType."+this.b}} +A.vX.prototype={} +A.iM.prototype={ +cn(a){var s=a.rE(0,new A.de(this.b,this.c)) +return new A.iM(s.a,s.b,B.c7)}, +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.iM&&b.b===this.b&&b.c===this.c}, +j(a){return"LineToCommand("+A.j(this.b)+", "+A.j(this.c)+")"}} +A.mg.prototype={ +cn(a){var s=a.rE(0,new A.de(this.b,this.c)) +return new A.mg(s.a,s.b,B.dV)}, +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.mg&&b.b===this.b&&b.c===this.c}, +j(a){return"MoveToCommand("+A.j(this.b)+", "+A.j(this.c)+")"}} +A.i6.prototype={ +ac8(a){var s=this +return new A.aAf().$5(a,new A.de(s.b,s.c),new A.de(s.d,s.e),new A.de(s.f,s.r),0)}, +cn(a){var s=this,r=a.rE(0,new A.de(s.b,s.c)),q=a.rE(0,new A.de(s.d,s.e)),p=a.rE(0,new A.de(s.f,s.r)) +return new A.i6(r.a,r.b,q.a,q.b,p.a,p.b,B.bW)}, +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.i6&&b.b===s.b&&b.c===s.c&&b.d===s.d&&b.e===s.e&&b.f===s.f&&b.r===s.r}, +j(a){var s=this +return"CubicToCommand("+A.j(s.b)+", "+A.j(s.c)+", "+A.j(s.d)+", "+A.j(s.e)+", "+A.j(s.f)+", "+A.j(s.r)+")"}} +A.aAf.prototype={ +$5(a,b,c,d,e){var s +if(A.a90(b,A.AQ(a,d,0.3333333333333333))>1.5||A.a90(c,A.AQ(a,d,0.6666666666666666))>1.5){s=A.blq(a,b,c,d,0.5) +e=this.$5(s[0],s[1],s[2],s[3],e) +e=this.$5(s[3],s[4],s[5],s[6],e)}else e+=A.a90(a,d) +return e}, +$S:927} +A.LH.prototype={ +cn(a){return this}, +gL(a){return A.eT(this.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.LH}, +j(a){return"CloseCommand()"}} +A.mp.prototype={ +hq(a){var s,r,q,p,o,n,m,l=a.a,k=(a.c-l)*0.5,j=a.b,i=(a.d-j)*0.5 +l+=k +j+=i +s=0.551915024494*k +r=0.551915024494*i +q=j-i +p=this.a +p.push(new A.mg(l,q,B.dV)) +o=l+s +n=l+k +m=j-r +p.push(new A.i6(o,q,n,m,n,j,B.bW)) +r=j+r +i=j+i +p.push(new A.i6(n,r,o,i,l,i,B.bW)) +s=l-s +k=l-k +p.push(new A.i6(s,i,k,r,k,j,B.bW)) +p.push(new A.i6(k,m,s,q,l,q,B.bW)) +p.push(B.jc) +return this}, +m3(a){var s,r=a.a,q=a.b,p=this.a +p.push(new A.mg(r,q,B.dV)) +s=a.c +p.push(new A.iM(s,q,B.c7)) +q=a.d +p.push(new A.iM(s,q,B.c7)) +p.push(new A.iM(r,q,B.c7)) +p.push(B.jc) +return this}, +aM8(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(b===0&&c===0)return this.m3(a) +s=new A.de(b,c).a2(0,0.551915024494) +r=a.a +q=r+b +p=a.b +o=this.a +o.push(new A.mg(q,p,B.dV)) +n=r+(a.c-r) +m=n-b +o.push(new A.iM(m,p,B.c7)) +l=s.a +k=m+l +j=p+c +i=s.b +h=j-i +o.push(new A.i6(k,p,n,h,n,j,B.bW)) +g=p+(a.d-p) +f=g-c +o.push(new A.iM(n,f,B.c7)) +i=f+i +o.push(new A.i6(n,i,k,g,m,g,B.bW)) +o.push(new A.iM(q,g,B.c7)) +l=q-l +o.push(new A.i6(l,g,r,i,r,f,B.bW)) +o.push(new A.iM(r,j,B.c7)) +o.push(new A.i6(r,h,l,p,q,p,B.bW)) +o.push(B.jc) +return this}, +aiu(a){var s,r=this.a,q=this.b +q===$&&A.c() +s=A.a8y(r,q) +if(a)B.b.af(r) +return s}, +wz(){return this.aiu(!0)}} +A.jf.prototype={ +b_l(a){if(a===this.b)return this +return A.a8y(this.a,a)}, +cn(a){var s,r,q,p=A.b([],t.H9) +for(s=this.a,r=s.length,q=0;q"+A.j(r)+","):"Path(" +s=this.b +r=(s!==B.cG?r+("\n fillType: "+s.j(0)+","):r)+"\n)" +return r.charCodeAt(0)==0?r:r}} +A.b_g.prototype={ +gl_(a){var s=this,r=s.b,q=s.a +if(r>=q.length)r=s.b=0 +s.b=r+1 +return q[r]}} +A.b4v.prototype={ +gF(a){var s=this.b +s===$&&A.c() +return s}, +a3v(a){var s,r,q,p,o,n,m,l,k=this,j=A.a90(k.c,a) +if(!(j<=0)){s=k.b +s===$&&A.c() +s=s<=0}else s=!0 +if(s)return +s=k.f +r=a.a +q=a.b +p=k.a +while(!0){o=k.b +o===$&&A.c() +if(!(j>=o))break +n=o/j +o=k.c +m=1-n +k.c=new A.de(m*o.a+n*r,m*o.b+n*q) +k.b=p.gl_(0) +o=k.e +o===$&&A.c() +m=k.c +l=m.a +m=m.b +if(o)s.push(new A.iM(l,m,B.c7)) +else s.push(new A.mg(l,m,B.dV)) +j=A.a90(k.c,a) +k.e=!k.e}if(j>0){k.b=o-j +p=k.e +p===$&&A.c() +if(p)s.push(new A.iM(r,q,B.c7))}k.c=a}, +avN(a){var s,r,q,p,o,n=this,m=null,l=a.ac8(n.c),k=n.a,j=n.f +while(!0){s=n.b +s===$&&A.c() +if(!(l>=s))break +r=A.blq(n.c,new A.de(a.b,a.c),new A.de(a.d,a.e),new A.de(a.f,a.r),s/l) +s=n.c=r[3] +q=n.e +q===$&&A.c() +if(q){s=A.a5(r) +q=new A.aT(r,1,m,s.h("aT<1>")) +q.cq(r,1,m,s.c) +p=q.bE(0,3).eT(0) +q=p[0] +s=p[1] +o=p[2] +j.push(new A.i6(q.a,q.b,s.a,s.b,o.a,o.b,B.bW))}else j.push(new A.mg(s.a,s.b,B.dV)) +s=A.a5(r) +q=new A.aT(r,4,m,s.h("aT<1>")) +q.cq(r,4,m,s.c) +p=q.bE(0,3).eT(0) +q=p[0] +s=p[1] +o=p[2] +a=new A.i6(q.a,q.b,s.a,s.b,o.a,o.b,B.bW) +n.b=k.gl_(0) +l=a.ac8(n.c) +n.e=!n.e}n.b=s-l +n.c=new A.de(a.f,a.r) +k=n.e +k===$&&A.c() +if(k)j.push(a)}, +aPl(a){var s,r,q,p,o,n,m,l,k=this +k.b=k.a.gl_(0) +k.e=!0 +for(s=a.a,r=s.length,q=t.ZC,p=t.JO,o=t.wd,n=k.f,m=0;m"+p+", offsets: "+o+", tileMode: "+n+", "+m+"unitMode: "+A.j(s.e)+")"}} +A.Nz.prototype={ +W(){return"GradientUnitMode."+this.b}} +A.w5.prototype={ +TD(a,b){var s,r,q=this,p=q.f +if(p==null)p=B.br +s=q.e +switch((s==null?B.nU:s).a){case 0:s=a.a +r=a.b +p=b.FF(s,r).a_O(a.c-s,a.d-r).iV(p) +break +case 1:p=b.iV(p) +break +case 2:break}s=q.d +if(s==null)s=B.t1 +return new A.w5(q.r,q.w,q.x,q.a,q.b,q.c,s,B.wN,p)}, +TH(a){var s,r,q,p,o=this,n=o.b +if(n==null)n=a.b +s=o.c +if(s==null)s=a.c +r=o.f +if(r==null)r=a.f +q=o.e +if(q==null)q=a.e +p=o.d +if(p==null)p=a.d +return new A.w5(o.r,o.w,o.x,o.a,n,s,p,q,r)}, +gL(a){var s,r=this,q=r.b +q=A.bM(q==null?A.b([],t.Ai):q) +s=r.c +return A.a6(r.a,r.r,r.w,q,A.bM(s==null?A.b([],t.n):s),r.d,r.f,r.x,r.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.w5&&b.a===s.a&&b.r.k(0,s.r)&&b.w===s.w&&J.f(b.x,s.x)&&A.mQ(b.b,s.b)&&A.mQ(b.c,s.c)&&J.f(b.f,s.f)&&b.d==s.d&&b.e==s.e}, +j(a){var s=this,r=s.r.j(0),q=A.j(s.b),p=A.j(s.c),o=A.j(s.d),n=s.f +n=n==null?"":"transform: Float64List.fromList("+A.j(n.wy())+") ," +return"RadialGradient(id: '"+s.a+"', center: "+r+", radius: "+A.j(s.w)+", colors: "+q+", offsets: "+p+", tileMode: "+o+", "+n+"focalPoint: "+A.j(s.x)+", unitMode: "+A.j(s.e)+")"}} +A.pO.prototype={ +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.pO&&b.a===this.a&&J.f(b.b,this.b)&&J.f(b.c,this.c)}, +j(a){var s="Paint(blendMode: "+this.a.j(0),r=this.b +if(r!=null)s+=", stroke: "+r.j(0) +r=this.c +s=(r!=null?s+(", fill: "+r.j(0)):s)+")" +return s.charCodeAt(0)==0?s:s}} +A.Sm.prototype={ +gL(a){var s=this +return A.a6(B.a44,s.a,s.b,s.c,s.d,s.e,s.f,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(b instanceof A.Sm){s=b.a +s=r.a.a===s.a&&J.f(b.b,r.b)&&b.c==r.c&&b.d==r.d&&b.e==r.e&&b.f==r.f}else s=!1 +return s}, +j(a){var s=this,r="Stroke(color: "+s.a.j(0),q=s.b +if(q!=null)r+=", shader: "+q.j(0) +q=s.c +if(q!=null)r+=", cap: "+q.j(0) +q=s.d +if(q!=null)r+=", join: "+q.j(0) +q=s.e +if(q!=null)r+=", miterLimit: "+A.j(q) +q=s.f +r=(q!=null?r+(", width: "+A.j(q)):r)+")" +return r.charCodeAt(0)==0?r:r}} +A.z8.prototype={ +gL(a){return A.a6(B.a43,this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s +if(b==null)return!1 +if(b instanceof A.z8){s=b.a +s=this.a.a===s.a&&J.f(b.b,this.b)}else s=!1 +return s}, +j(a){var s="Fill(color: "+this.a.j(0),r=this.b +s=(r!=null?s+(", shader: "+r.j(0)):s)+")" +return s.charCodeAt(0)==0?s:s}} +A.i2.prototype={ +W(){return"BlendMode."+this.b}} +A.a8n.prototype={ +W(){return"PaintingStyle."+this.b}} +A.Sn.prototype={ +W(){return"StrokeCap."+this.b}} +A.So.prototype={ +W(){return"StrokeJoin."+this.b}} +A.T0.prototype={ +W(){return"TileMode."+this.b}} +A.SS.prototype={ +gL(a){var s=this +return A.a6(s.a,s.c,s.b,s.d,s.e,s.f,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s=this +if(b==null)return!1 +return b instanceof A.SS&&b.a==s.a&&b.c==s.c&&b.b==s.b&&b.d==s.d&&b.e===s.e&&J.f(b.f,s.f)}, +j(a){var s=this,r=""+("TextPosition(reset: "+s.e),q=s.a +if(q!=null)r+=", x: "+A.j(q) +q=s.c +if(q!=null)r+=", y: "+A.j(q) +q=s.b +if(q!=null)r+=", dx: "+A.j(q) +q=s.d +if(q!=null)r+=", dy: "+A.j(q) +q=s.f +r=(q!=null?r+(", transform: "+q.j(0)):r)+")" +return r.charCodeAt(0)==0?r:r}} +A.SK.prototype={ +gL(a){var s=this +return A.a6(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){var s,r=this +if(b==null)return!1 +if(b instanceof A.SK)if(b.a===r.a)if(b.b===r.b)if(b.c===r.c)if(b.d==r.d)if(b.e===r.e){s=b.f +if(r.f.a===s.a)if(b.r===r.r)s=r.w.a===b.w.a +else s=!1 +else s=!1}else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +j(a){var s=this +return"TextConfig('"+s.a+"', "+A.j(s.b)+", '"+A.j(s.d)+"', "+s.e.j(0)+", "+A.j(s.c)+", "+s.f.j(0)+", "+s.r.j(0)+", "+s.w.j(0)+",)"}, +gkV(a){return this.e}} +A.oc.prototype={ +W(){return"FontWeight."+this.b}} +A.C5.prototype={ +W(){return"TextDecorationStyle."+this.b}} +A.C4.prototype={ +k(a,b){if(b==null)return!1 +return b instanceof A.C4&&b.a===this.a}, +gL(a){return B.f.gL(this.a)}, +j(a){var s,r=this.a +if(r===0)return"TextDecoration.none" +s=A.b([],t.T) +if((r&1)!==0)s.push("underline") +if((r&2)!==0)s.push("overline") +if((r&4)!==0)s.push("lineThrough") +if(s.length===1)return"TextDecoration."+s[0] +return"TextDecoration.combine(["+B.b.cj(s,", ")+"])"}} +A.ef.prototype={ +hr(a,b){return this}, +m6(a){return this.hr(a,!1)}} +A.aiD.prototype={ +dW(a,b,c){return b.aiV(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}} +A.adR.prototype={ +tv(a){var s=this.a +if(s.k(0,B.br))return a +return a.iV(s)}} +A.j_.prototype={} +A.aeo.prototype={ +dW(a,b,c){return b.Nk(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}} +A.GA.prototype={ +Cl(a,b,c,d,e,f,g){var s,r=b!=null?new A.LB(c,b,a,a.b.r):a +if(d!=null){s=a.b +r=new A.OI(d,r,s.z,e,s.r)}if(f!=null)r=new A.PN(f,r,g,a.b.r) +B.b.E(this.d,r)}, +Tr(a,b,c,d){return this.Cl(a,null,b,null,c,null,d)}, +hr(a,b){var s=A.AL(this.b.yt(a),null,this.a) +B.b.I(s.d,this.d) +return s}, +m6(a){return this.hr(a,!1)}, +aPa(){var s,r,q=null,p=this.b,o=p.f,n=o==null,m=n?q:o.c +p=p.z +s=p==null +if(s)r=m!=null&&m!==1&&m!==0 +else r=!0 +if(r){o=n?q:o.aZq(B.a5w,this.a) +if(o==null){o=A.E0(0,0,0,m==null?1:m) +o=new A.z8(o,q)}return new A.pO(s?B.j0:p,q,o)}return q}, +dW(a,b,c){return b.aiZ(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}} +A.ado.prototype={ +dW(a,b,c){return b.aja(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}, +hr(a,b){var s=A.bqh(this.b.yt(a),this.r) +B.b.I(s.d,this.d) +return s}, +m6(a){return this.hr(a,!1)}} +A.aaV.prototype={ +dW(a,b,c){return b.aj8(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}} +A.LB.prototype={ +dW(a,b,c){return b.aiS(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}, +hr(a,b){var s=this +return new A.LB(s.b,s.c,s.d.hr(a,b),s.a)}, +m6(a){return this.hr(a,!1)}} +A.OI.prototype={ +dW(a,b,c){return b.aiX(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}, +hr(a,b){var s=this +return new A.OI(s.b,s.c.hr(a,b),s.d,s.e,s.a)}, +m6(a){return this.hr(a,!1)}} +A.GD.prototype={ +Ua(a,b){var s,r=this.b,q=r.e,p=q==null?null:q.aix(a,b) +q=r.f +s=q==null?null:q.Zr(a,b,B.ei) +if(s==null&&p==null)return null +r=r.z +return new A.pO(r==null?B.j0:r,p,s)}, +hr(a,b){var s=this.b +s=b?a.Cx(s,this.a):s.yt(a) +return A.boC(this.d,s)}, +m6(a){return this.hr(a,!1)}, +dW(a,b,c){return b.aj_(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}} +A.Es.prototype={ +hr(a,b){var s=this,r=s.b +r=b?a.Cx(r,s.a):r.yt(a) +return A.bly(r,s.d,s.e)}, +m6(a){return this.hr(a,!1)}, +dW(a,b,c){return b.aiT(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}} +A.adl.prototype={ +Ua(a,b){var s,r=this.b,q=r.f,p=q==null?null:q.Zr(a,b,B.ei) +q=r.e +s=q==null?null:q.aix(a,b) +if(p==null&&s==null)return null +r=r.z +return new A.pO(r==null?B.j0:r,s,p)}, +hr(a,b){var s=this.b,r=b?a.Cx(s,this.a):s.yt(a) +return A.bqe(this.d,r)}, +m6(a){return this.hr(a,!1)}, +dW(a,b,c){return b.aj9(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}} +A.a5a.prototype={ +hr(a,b){var s=this,r=s.b +r=b?a.Cx(r,s.a):r.yt(a) +return A.bn6(s.d,s.e,r)}, +m6(a){return this.hr(a,!1)}, +dW(a,b,c){return b.aiW(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}} +A.PN.prototype={ +dW(a,b,c){return b.aj0(this,c)}, +dO(a,b,c){var s=t.z +return this.dW(0,b,c,s,s)}, +hr(a,b){var s=this +return new A.PN(s.b,s.c.hr(a,b),s.d,s.a)}, +m6(a){return this.hr(a,!1)}} +A.XH.prototype={} +A.oG.prototype={ +a3J(){var s,r,q=this,p=q.ax +for(s=q.c;s.H();){r=s.d +r.toString +if(r instanceof A.hZ&&!r.r)++q.ax +else if(r instanceof A.jo)--q.ax +q.as=B.eT +q.at=null +if(q.ax")),r=n.r;s.H();){q=s.b +if(q instanceof A.hZ){if(n.amj(q))continue +p=B.a1o.i(0,q.e) +if(p==null){if(!q.r)n.a3J()}else p.$2(n,!1)}else if(q instanceof A.jo)n.aQX(0,q) +else{if(!r.gaA(0))o=r.ga_(0).a==="text"||r.ga_(0).a==="tspan" +else o=!1 +if(o)if(q instanceof A.nB)n.a2d(q.e) +else if(q instanceof A.wX)n.a2d(q.gm(0))}}if(n.Q==null)throw A.d(A.ad("Invalid SVG data")) +n.f.d=!0}, +f_(a,b){var s=this.as.a.i(0,a) +return s==null?b:s}, +i4(a){return this.f_(a,null)}, +JA(a){var s="url(#"+A.j(this.as.b)+")" +if(s!=="url(#)"){this.f.aLZ(s,a) +return!0}return!1}, +yj(a,b){this.r.ho(0,new A.XH(a.e,b)) +this.JA(b)}, +aMa(a){var s,r,q,p,o=this,n=B.CH.i(0,a.e) +if(n==null)return!1 +s=o.r.ga_(0).b +r=n.$1(o) +r.toString +q=A.boC(r,o.as) +o.JA(q) +r=o.f +p=r.gus() +s.Cl(q,o.as.y,r.gwH(),o.i4("mask"),p,r.G2(o),p) +return!0}, +amj(a){if(a.e==="defs")if(!a.r){this.yj(a,A.AL(this.as,null,null)) +return!0}return this.aMa(a)}, +aQX(a,b){var s=this.r,r=b.e +while(!0){if(r===s.ga_(0).a)s.ga_(0).toString +if(!!1)break +s.eQ(0)}if(r===s.ga_(0).a)s.eQ(0) +this.ay=b +if(r==="text")this.ch=!1}, +aXg(a){var s +if(a==null||a==="")return null +s=A.h2(a,this.a,!0) +if(s!=null)return s +a=B.d.eC(a.toLowerCase()) +s=$.bKK.i(0,a) +if(s!=null)return s +throw A.d(A.ad("Could not parse font-size: "+a))}, +aXq(a){if(a==null)return null +switch(a){case"none":return B.GV +case"underline":return B.aa2 +case"overline":return B.aa4 +case"line-through":return B.aa5}throw A.d(A.af('Attribute value for text-decoration="'+a+'" is not supported'))}, +aXr(a){if(a==null)return null +switch(a){case"solid":return B.GT +case"dashed":return B.a9Z +case"dotted":return B.a9X +case"double":return B.a9W +case"wavy":return B.aa0}throw A.d(A.af('Attribute value for text-decoration-style="'+a+'" is not supported'))}, +aXp(a){switch(a){case"end":return 1 +case"middle":return 0.5 +case"start":return 0 +case"inherit":default:return null}}, +a6V(a){var s +if(a==="100%"||a==="")return 1/0 +s=A.h2(a,this.a,!0) +return s==null?1/0:s}, +a6Y(){var s,r,q,p,o,n,m,l=this,k=l.i4("viewBox") +if(k==null)k="" +s=l.i4("width") +if(s==null)s="" +r=l.i4("height") +if(r==null)r="" +q=k==="" +if(q&&s===""&&r==="")throw A.d(A.ad("SVG did not specify dimensions\n\nThe SVG library looks for a `viewBox` or `width` and `height` attribute to determine the viewport boundary of the SVG. Note that these attributes, as with all SVG attributes, are case sensitive.\nDuring processing, the following attributes were found:\n "+l.as.a.j(0))) +if(q)return new A.asl(l.a6V(s),l.a6V(r),B.br) +p=B.d.x0(k,A.bw("[ ,]+",!0,!1,!1)) +if(p.length<4)throw A.d(A.ad("viewBox element must be 4 elements long")) +q=A.iW(p[2],!1) +q.toString +o=A.iW(p[3],!1) +o.toString +n=A.iW(p[0],!1) +n.toString +m=A.iW(p[1],!1) +m.toString +return new A.asl(q,o,B.br.FF(-n,-m))}, +agN(){switch(this.i4("spreadMethod")){case"pad":return B.t1 +case"repeat":return B.af8 +case"reflect":return B.af9}return null}, +agJ(){switch(this.i4("gradientUnits")){case"userSpaceOnUse":return B.VB +case"objectBoundingBox":return B.nU}return null}, +aEN(a,b){switch(a){case"butt":return B.a8R +case"round":return B.a8S +case"square":return B.a8T +default:return null}}, +aEW(a,b){switch(a){case"miter":return B.a8V +case"bevel":return B.a8X +case"round":return B.a8W +default:return null}}, +aEP(a){var s,r,q,p,o,n,m +if(a==null||a==="")return null +else if(a==="none")return B.on +s=J.bdP(a,A.bw("[ ,]+",!0,!1,!1)) +r=A.b([],t.n) +for(q=s.length,p=this.a,o=!1,n=0;n>>0)}}if(B.d.c4(a.toLowerCase(),"rgba")){p=t.a4 +n=A.ab(new A.W(A.b(B.d.am(a,J.bdO(a,"(")+1,B.d.f7(a,")")).split(","),t.T),new A.aUA(),p),!0,p.h("aI.E")) +p=A.iW(B.b.eQ(n),!1) +p.toString +m=A.a5(n).h("W<1,k>") +l=A.ab(new A.W(n,new A.aUB(),m),!0,m.h("aI.E")) +return A.E0(l[0],l[1],l[2],p)}if(B.d.c4(a.toLowerCase(),"hsl")){p=t.OL +k=A.ab(new A.W(A.b(B.d.am(a,J.bdO(a,"(")+1,B.d.f7(a,")")).split(","),t.T),new A.aUC(),p),!0,p.h("aI.E")) +j=B.c.bx(k[0]/360,1) +p=k[1] +i=k[2]/100 +h=k.length>3?k[3]:255 +l=A.b([0,0,0],t.n) +if(j<0.16666666666666666){l[0]=1 +l[1]=j*6}else if(j<0.3333333333333333){l[0]=2-j*6 +l[1]=1}else if(j<0.5){l[1]=1 +l[2]=j*6-2}else if(j<0.6666666666666666){l[1]=4-j*6 +l[2]=1}else{m=j*6 +if(j<0.8333333333333334){l[0]=m-4 +l[2]=1}else{l[0]=1 +l[2]=6-m}}m=t.bK +l=A.ab(new A.W(l,new A.aUD(p/100),m),!0,m.h("aI.E")) +p=A.a5(l).h("W<1,T>") +l=i<0.5?A.ab(new A.W(l,new A.aUE(i),p),!0,p.h("aI.E")):A.ab(new A.W(l,new A.aUF(i),p),!0,p.h("aI.E")) +p=A.a5(l).h("W<1,T>") +l=A.ab(new A.W(l,new A.aUG(),p),!0,p.h("aI.E")) +return A.blc(h,J.avJ(l[0]),J.avJ(l[1]),J.avJ(l[2]))}if(B.d.c4(a.toLowerCase(),"rgb")){p=t.OL +l=A.ab(new A.W(A.b(B.d.am(a,J.bdO(a,"(")+1,B.d.f7(a,")")).split(","),t.T),new A.aUH(),p),!0,p.h("aI.E")) +g=l.length>3?l[3]:255 +return A.blc(g,l[0],l[1],l[2])}f=B.a1M.i(0,a) +if(f!=null)return f +return e}, +avt(a){var s,r,q,p,o,n,m,l,k,j=t.N,i=A.D(j,j) +for(j=J.az(a);j.H();){s=j.ga1(j) +r=B.d.eC(s.b) +s=s.a +q=B.d.f7(s,":") +p=q>0 +if((p?B.d.c5(s,q+1):s)==="style")for(s=r.split(";"),p=s.length,o=0;o>>24 +if((r==null?255:r)!==255){r=o.a +q=(r>>>24)/255 +o=A.E0(r>>>16&255,r>>>8&255,r&255,1)}r=l==="none"?B.je:new A.qX(!1,o) +return new A.I2(n.f,r,q,m,m)}} +A.aUA.prototype={ +$1(a){return B.d.eC(a)}, +$S:45} +A.aUB.prototype={ +$1(a){return A.et(a,null,null)}, +$S:49} +A.aUC.prototype={ +$1(a){var s +a=B.d.eC(a) +if(B.d.iT(a,"%"))a=B.d.am(a,0,a.length-1) +if(B.d.G(a,".")){s=A.iW(a,!1) +s.toString +return B.c.ai(s*2.55)}return A.et(a,null,null)}, +$S:49} +A.aUD.prototype={ +$1(a){return a+(1-this.a)*(0.5-a)}, +$S:1} +A.aUE.prototype={ +$1(a){return this.a*2*a}, +$S:1} +A.aUF.prototype={ +$1(a){return this.a*2*(1-a)+2*a-1}, +$S:1} +A.aUG.prototype={ +$1(a){return a*255}, +$S:1} +A.aUH.prototype={ +$1(a){var s +a=B.d.eC(a) +if(B.d.iT(a,"%")){s=A.iW(B.d.am(a,0,a.length-1),!1) +s.toString +return B.c.ai(s*2.55)}return A.et(a,null,null)}, +$S:49} +A.aoA.prototype={ +ajY(a){return this.a.i(0,a)}, +ajT(a){var s,r,q,p={},o=this.c.i(0,a) +if(o==null)return A.b([],t.hc) +s=A.b([],t.Sd) +p.a=null +r=new A.b5S(p,s) +for(q=J.az(o);q.H();)r.$1(q.ga1(q)) +q=t.OW +return A.ab(new A.W(s,new A.b5R(),q),!1,q.h("aI.E"))}, +G2(a){var s,r +if(a.i4("fill")!=null){s=a.i4("fill") +s.toString +if(B.d.c4(s,"url")&&a.z.G(0,s))return s}if(a.i4("stroke")!=null){r=a.i4("stroke") +r.toString +if(B.d.c4(r,"url")&&a.z.G(0,r))return r}return null}, +aLY(a,b){J.iD(this.e.cU(0,a,new A.b5P()),b)}, +aaT(a,b){var s,r,q=this.b,p=a.a +if(q.aR(0,p))return +q.u(0,p,a) +if(b!=null){b="url("+b+")" +s=q.i(0,b) +if(s!=null)q.u(0,p,a.TH(s)) +else this.aLY(b,a)}else{p=this.e.P(0,p) +p=J.az(p==null?A.b([],t.AB):p) +for(;p.H();){r=p.ga1(p) +q.u(0,r.a,r.TH(a))}}}, +aLV(a,b){this.c.cU(0,a,new A.b5O(b))}, +aLZ(a,b){this.a.cU(0,a,new A.b5Q(b))}} +A.b5S.prototype={ +$1(a){var s,r,q,p,o,n,m=this +if(a instanceof A.GD){s=a.d +r=A.b([],t.H9) +q=new A.mp(r,$) +B.b.I(r,s.a) +q.b=s.b +s=a.b.x +if(s==null)s=B.cG +q.b=s +r=m.a +p=r.a +o=p==null +if(!o){n=p.b +n===$&&A.c() +n=s!==n +s=n}else s=!1 +if(s){r.a=q +m.b.push(q)}else if(o){r.a=q +m.b.push(q)}else{s=q.aiu(!1) +B.b.I(p.a,s.a)}}else if(a instanceof A.Es){s=a.d +m.$1(a.e.$1(s))}else if(a instanceof A.GA)B.b.al(a.d,m)}, +$S:930} +A.b5R.prototype={ +$1(a){return a.wz()}, +$S:931} +A.b5P.prototype={ +$0(){return A.b([],t.AB)}, +$S:932} +A.b5O.prototype={ +$0(){return this.a}, +$S:933} +A.b5Q.prototype={ +$0(){return this.a}, +$S:934} +A.asl.prototype={} +A.I1.prototype={ +gaT7(){var s=this.a +return s.ghw(s).mz(0,new A.aUu())}, +Cx(a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this,a1=null,a2=t.N +a2=A.A1(A.OG(a3.gaT7(),a2,a2),a2,a2) +a2.I(0,a0.a) +s=a2.i(0,"id") +r=a2.i(0,"href") +q=a4==null?a0.r:a4 +p=a0.d.P9(a3.d) +o=a0.e +if(o==null)o=a1 +else{n=a3.e +m=o.a +l=o.b +k=n==null +l=l.P9(k?a1:n.b) +j=o.c +if(j==null)j=k?a1:n.c +i=o.d +if(i==null)i=k?a1:n.d +h=o.e +if(h==null)h=k?a1:n.e +g=o.f +if(g==null)g=k?a1:n.f +f=o.r +if(f==null)f=k?a1:n.r +e=o.w +if(e==null)e=k?a1:n.w +d=o.x +if(d==null)d=k?a1:n.x +c=o.y +if(c==null)c=k?a1:n.y +o=o.z +if(o==null)o=k?a1:n.z +o=new A.Sq(m,l,j,i,h,g,f,e,d,c,o)}if(o==null)o=a3.e +n=a0.f +if(n==null)n=a1 +else{m=a3.f +l=n.a +k=n.b +j=m==null +k=k.P9(j?a1:m.b) +i=n.d +if(i==null)i=j?a1:m.d +h=n.e +if(h==null)h=j?a1:m.e +n=n.c +if(n==null)n=j?a1:m.c +h=new A.I2(l,k,n,i,h) +n=h}if(n==null)n=a3.f +m=a0.w +if(m==null)m=a3.w +l=a0.x +if(l==null)l=a3.x +k=a0.y +if(k==null)k=a3.y +j=a0.z +if(j==null)j=a3.z +i=a0.Q +if(i==null)i=a3.Q +h=a0.as +if(h==null)h=a3.as +g=a0.at +if(g==null)g=a3.at +f=a0.ax +if(f==null)f=a3.ax +e=a0.ay +if(e==null)e=a3.ay +d=a0.ch +if(d==null)d=a3.ch +c=a0.db +if(c==null)c=a3.db +b=a0.cx +if(b==null)b=a3.cx +a=a0.CW +if(a==null)a=a3.CW +return A.bq_(j,k,l,p,a0.dy,a0.fr,n,m,i,g,h,b,r,s,a2,o,c,f,d,e,q,a,a0.cy,a0.dx)}, +yt(a){return this.Cx(a,null)}, +gkV(a){return this.as}} +A.aUu.prototype={ +$1(a){return B.a6J.G(0,a.a)}, +$S:935} +A.Mw.prototype={ +yD(a){if(this.b)return this.a*a +return this.a}, +gL(a){return A.a6(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.Mw&&b.b===this.b&&b.a===this.a}} +A.Sq.prototype={ +aix(a,b){var s,r,q=this,p=null,o=q.b +if(!o.a)s=o.b==null&&q.y==null&&q.c==null||q.r===0 +else s=!0 +if(s)return p +if(q.y===!0)return new A.Sm(B.ei,p,q.e,q.d,q.f,q.r) +s=q.c +if(s!=null){s=t.Mm.a(q.a.b.i(0,s)) +r=s==null?p:s.TD(a,b) +if(r==null)return p}else r=p +o=o.b +o.toString +s=q.z +if(s==null)s=1 +o=o.a +s=A.E0(o>>>16&255,o>>>8&255,o&255,s) +o=b.aky(q.r) +return new A.Sm(s,r,q.e,q.d,q.f,o)}} +A.I2.prototype={ +Zr(a,b,c){var s,r,q,p=this,o=null,n=p.b +if(n.a)return o +n=n.b +if(n==null)s=o +else{r=p.c +if(r==null)r=1 +n=n.a +r=A.E0(n>>>16&255,n>>>8&255,n&255,r) +s=r}if(s==null)if(c==null)s=o +else{n=p.c +if(n==null)n=1 +r=c.a +n=A.E0(r>>>16&255,r>>>8&255,r&255,n) +s=n}if(s==null)return o +if(p.e===!0)return new A.z8(s,o) +n=p.d +if(n!=null){n=t.Mm.a(p.a.b.i(0,n)) +q=n==null?o:n.TD(a,b) +if(q==null)return o}else q=o +return new A.z8(s,q)}, +aZq(a,b){return this.Zr(a,b,null)}, +j(a){var s=this +return"SvgFillAttributes(definitions: "+s.a.j(0)+", color: "+s.b.j(0)+", shaderId: "+A.j(s.d)+", hasPattern: "+A.j(s.e)+", oapctiy: "+A.j(s.c)+")"}} +A.qX.prototype={ +P9(a){var s,r=this +if(a==null||r.a)return r +if(a.a&&r.b==null)return B.je +s=r.b +return new A.qX(!1,s==null?a.b:s)}, +j(a){var s +if(this.a)s='"none"' +else{s=this.b +s=s==null?null:s.j(0) +if(s==null)s="null"}return s}} +A.aQo.prototype={ +aiS(a,b){var s,r=a.tv(b),q=A.b([],t.hc) +for(s=J.az(a.b.$1(a.c));s.H();)q.push(s.ga1(s).cn(r)) +if(q.length===0)return a.d.dO(0,this,b) +return new A.aat(q,a.d.dO(0,this,b))}, +aiX(a,b){var s,r=a.e.$1(a.b) +if(r==null)return a.c.dO(0,this,b) +s=a.c.dO(0,this,b) +return new A.aau(r.dO(0,this,a.tv(b)),s,a.d)}, +aiZ(b4,b5){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=null,b1=b4.tv(b5),b2=b4.aPa(),b3=t.wP +if(b2==null){b3=A.b([],b3) +for(s=b4.d,r=s.length,q=b4.b,p=0;p=r[0]&&s[1]>=r[1]}else s=!1 +else s=!1 +return s}} +A.jL.prototype={ +p_(a,b,c,d){var s=this.a +s[3]=d +s[2]=c +s[1]=b +s[0]=a}, +v(a){var s=a.a,r=this.a +r[3]=s[3] +r[2]=s[2] +r[1]=s[1] +r[0]=s[0]}, +j(a){return"[0] "+this.kb(0).j(0)+"\n[1] "+this.kb(1).j(0)+"\n"}, +i(a,b){return this.a[b]}, +k(a,b){var s,r,q +if(b==null)return!1 +if(b instanceof A.jL){s=this.a +r=s[0] +q=b.a +s=r===q[0]&&s[1]===q[1]&&s[2]===q[2]&&s[3]===q[3]}else s=!1 +return s}, +gL(a){return A.bM(this.a)}, +kb(a){var s=new Float64Array(2),r=this.a +s[0]=r[a] +s[1]=r[2+a] +return new A.a(s)}, +a2(a,b){var s=new Float64Array(4),r=new A.jL(s) +r.v(this) +s[0]=s[0]*b +s[1]=s[1]*b +s[2]=s[2]*b +s[3]=s[3]*b +return r}, +X(a,b){var s,r=new Float64Array(4),q=new A.jL(r) +q.v(this) +s=b.a +r[0]=r[0]+s[0] +r[1]=r[1]+s[1] +r[2]=r[2]+s[2] +r[3]=r[3]+s[3] +return q}, +Y(a,b){var s,r=new Float64Array(4),q=new A.jL(r) +q.v(this) +s=b.a +r[0]=r[0]-s[0] +r[1]=r[1]-s[1] +r[2]=r[2]-s[2] +r[3]=r[3]-s[3] +return q}, +cv(){var s=this.a +s[0]=0 +s[1]=0 +s[2]=0 +s[3]=0}, +Lm(){var s,r=this.a,q=r[0],p=r[3],o=r[1],n=r[2],m=q*p-o*n +if(m===0)return 0 +s=1/m +r[0]=p*s +r[1]=-o*s +r[2]=-n*s +r[3]=q*s +return m}, +Zz(a,b){var s,r,q,p,o,n,m +if(b==null){b=new A.a(new Float64Array(2)) +b.v(a)}else b.v(a) +s=b.a +r=this.a +q=r[0] +p=s[0] +o=r[2] +n=s[1] +m=r[1] +r=r[3] +s[0]=q*p+o*n +s[1]=m*p+r*n +return b}} +A.id.prototype={ +uA(a,b,c,d,e,f,g,h,i){var s=this.a +s[8]=i +s[7]=h +s[6]=g +s[5]=f +s[4]=e +s[3]=d +s[2]=c +s[1]=b +s[0]=a}, +v(a){var s=a.a,r=this.a +r[8]=s[8] +r[7]=s[7] +r[6]=s[6] +r[5]=s[5] +r[4]=s[4] +r[3]=s[3] +r[2]=s[2] +r[1]=s[1] +r[0]=s[0]}, +j(a){return"[0] "+this.kb(0).j(0)+"\n[1] "+this.kb(1).j(0)+"\n[2] "+this.kb(2).j(0)+"\n"}, +i(a,b){return this.a[b]}, +k(a,b){var s,r,q +if(b==null)return!1 +if(b instanceof A.id){s=this.a +r=s[0] +q=b.a +s=r===q[0]&&s[1]===q[1]&&s[2]===q[2]&&s[3]===q[3]&&s[4]===q[4]&&s[5]===q[5]&&s[6]===q[6]&&s[7]===q[7]&&s[8]===q[8]}else s=!1 +return s}, +gL(a){return A.bM(this.a)}, +kb(a){var s=new Float64Array(3),r=this.a +s[0]=r[a] +s[1]=r[3+a] +s[2]=r[6+a] +return new A.dX(s)}, +a2(a,b){var s=new Float64Array(9),r=new A.id(s) +r.v(this) +s[0]=s[0]*b +s[1]=s[1]*b +s[2]=s[2]*b +s[3]=s[3]*b +s[4]=s[4]*b +s[5]=s[5]*b +s[6]=s[6]*b +s[7]=s[7]*b +s[8]=s[8]*b +return r}, +X(a,b){var s,r=new Float64Array(9),q=new A.id(r) +q.v(this) +s=b.a +r[0]=r[0]+s[0] +r[1]=r[1]+s[1] +r[2]=r[2]+s[2] +r[3]=r[3]+s[3] +r[4]=r[4]+s[4] +r[5]=r[5]+s[5] +r[6]=r[6]+s[6] +r[7]=r[7]+s[7] +r[8]=r[8]+s[8] +return q}, +Y(a,b){var s,r=new Float64Array(9),q=new A.id(r) +q.v(this) +s=b.a +r[0]=r[0]-s[0] +r[1]=r[1]-s[1] +r[2]=r[2]-s[2] +r[3]=r[3]-s[3] +r[4]=r[4]-s[4] +r[5]=r[5]-s[5] +r[6]=r[6]-s[6] +r[7]=r[7]-s[7] +r[8]=r[8]-s[8] +return q}} +A.by.prototype={ +Gr(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var s=this.a +s[15]=p +s[14]=o +s[13]=n +s[12]=m +s[11]=l +s[10]=k +s[9]=j +s[8]=i +s[7]=h +s[6]=g +s[5]=f +s[4]=e +s[3]=d +s[2]=c +s[1]=b +s[0]=a}, +v(a){var s=a.a,r=this.a +r[15]=s[15] +r[14]=s[14] +r[13]=s[13] +r[12]=s[12] +r[11]=s[11] +r[10]=s[10] +r[9]=s[9] +r[8]=s[8] +r[7]=s[7] +r[6]=s[6] +r[5]=s[5] +r[4]=s[4] +r[3]=s[3] +r[2]=s[2] +r[1]=s[1] +r[0]=s[0]}, +j(a){var s=this +return"[0] "+s.kb(0).j(0)+"\n[1] "+s.kb(1).j(0)+"\n[2] "+s.kb(2).j(0)+"\n[3] "+s.kb(3).j(0)+"\n"}, +i(a,b){return this.a[b]}, +k(a,b){var s,r,q +if(b==null)return!1 +if(b instanceof A.by){s=this.a +r=s[0] +q=b.a +s=r===q[0]&&s[1]===q[1]&&s[2]===q[2]&&s[3]===q[3]&&s[4]===q[4]&&s[5]===q[5]&&s[6]===q[6]&&s[7]===q[7]&&s[8]===q[8]&&s[9]===q[9]&&s[10]===q[10]&&s[11]===q[11]&&s[12]===q[12]&&s[13]===q[13]&&s[14]===q[14]&&s[15]===q[15]}else s=!1 +return s}, +gL(a){return A.bM(this.a)}, +O3(a,b){var s=b.a,r=this.a +r[a]=s[0] +r[4+a]=s[1] +r[8+a]=s[2] +r[12+a]=s[3]}, +kb(a){var s=new Float64Array(4),r=this.a +s[0]=r[a] +s[1]=r[4+a] +s[2]=r[8+a] +s[3]=r[12+a] +return new A.oN(s)}, +vs(a){var s=a.a,r=this.a +s[0]=r[0] +s[1]=r[1] +s[2]=r[2] +s[3]=r[3] +s[4]=r[4] +s[5]=r[5] +s[6]=r[6] +s[7]=r[7] +s[8]=r[8] +s[9]=r[9] +s[10]=r[10] +s[11]=r[11] +s[12]=r[12] +s[13]=r[13] +s[14]=r[14] +s[15]=r[15] +return a}, +a2(a,b){var s=new A.by(new Float64Array(16)) +s.v(this) +s.mD(0,b,null,null) +return s}, +X(a,b){var s,r=new Float64Array(16),q=new A.by(r) +q.v(this) +s=b.a +r[0]=r[0]+s[0] +r[1]=r[1]+s[1] +r[2]=r[2]+s[2] +r[3]=r[3]+s[3] +r[4]=r[4]+s[4] +r[5]=r[5]+s[5] +r[6]=r[6]+s[6] +r[7]=r[7]+s[7] +r[8]=r[8]+s[8] +r[9]=r[9]+s[9] +r[10]=r[10]+s[10] +r[11]=r[11]+s[11] +r[12]=r[12]+s[12] +r[13]=r[13]+s[13] +r[14]=r[14]+s[14] +r[15]=r[15]+s[15] +return q}, +Y(a,b){var s,r=new Float64Array(16),q=new A.by(r) +q.v(this) +s=b.a +r[0]=r[0]-s[0] +r[1]=r[1]-s[1] +r[2]=r[2]-s[2] +r[3]=r[3]-s[3] +r[4]=r[4]-s[4] +r[5]=r[5]-s[5] +r[6]=r[6]-s[6] +r[7]=r[7]-s[7] +r[8]=r[8]-s[8] +r[9]=r[9]-s[9] +r[10]=r[10]-s[10] +r[11]=r[11]-s[11] +r[12]=r[12]-s[12] +r[13]=r[13]-s[13] +r[14]=r[14]-s[14] +r[15]=r[15]-s[15] +return q}, +aJ(a,b,a0){var s=this.a,r=s[0],q=s[4],p=s[8],o=s[12],n=s[1],m=s[5],l=s[9],k=s[13],j=s[2],i=s[6],h=s[10],g=s[14],f=s[3],e=s[7],d=s[11],c=s[15] +s[12]=r*b+q*a0+p*0+o +s[13]=n*b+m*a0+l*0+k +s[14]=j*b+i*a0+h*0+g +s[15]=f*b+e*a0+d*0+c}, +mw(a){var s=Math.cos(a),r=Math.sin(a),q=this.a,p=q[0],o=q[4],n=q[1],m=q[5],l=q[2],k=q[6],j=q[3],i=q[7],h=-r +q[0]=p*s+o*r +q[1]=n*s+m*r +q[2]=l*s+k*r +q[3]=j*s+i*r +q[4]=p*h+o*s +q[5]=n*h+m*s +q[6]=l*h+k*s +q[7]=j*h+i*s}, +mD(a,b,c,d){var s=c==null?b:c,r=d==null?b:d,q=this.a +q[0]=q[0]*b +q[1]=q[1]*b +q[2]=q[2]*b +q[3]=q[3]*b +q[4]=q[4]*s +q[5]=q[5]*s +q[6]=q[6]*s +q[7]=q[7]*s +q[8]=q[8]*r +q[9]=q[9]*r +q[10]=q[10]*r +q[11]=q[11]*r +q[12]=q[12] +q[13]=q[13] +q[14]=q[14] +q[15]=q[15]}, +au(a,b){return this.mD(0,b,null,null)}, +ff(a,b,c){return this.mD(0,b,c,null)}, +cv(){var s=this.a +s[0]=0 +s[1]=0 +s[2]=0 +s[3]=0 +s[4]=0 +s[5]=0 +s[6]=0 +s[7]=0 +s[8]=0 +s[9]=0 +s[10]=0 +s[11]=0 +s[12]=0 +s[13]=0 +s[14]=0 +s[15]=0}, +ci(){var s=this.a +s[0]=1 +s[1]=0 +s[2]=0 +s[3]=0 +s[4]=0 +s[5]=1 +s[6]=0 +s[7]=0 +s[8]=0 +s[9]=0 +s[10]=1 +s[11]=0 +s[12]=0 +s[13]=0 +s[14]=0 +s[15]=1}, +jR(b5){var s,r,q,p,o=b5.a,n=o[0],m=o[1],l=o[2],k=o[3],j=o[4],i=o[5],h=o[6],g=o[7],f=o[8],e=o[9],d=o[10],c=o[11],b=o[12],a=o[13],a0=o[14],a1=o[15],a2=n*i-m*j,a3=n*h-l*j,a4=n*g-k*j,a5=m*h-l*i,a6=m*g-k*i,a7=l*g-k*h,a8=f*a-e*b,a9=f*a0-d*b,b0=f*a1-c*b,b1=e*a0-d*a,b2=e*a1-c*a,b3=d*a1-c*a0,b4=a2*b3-a3*b2+a4*b1+a5*b0-a6*a9+a7*a8 +if(b4===0){this.v(b5) +return 0}s=1/b4 +r=this.a +r[0]=(i*b3-h*b2+g*b1)*s +r[1]=(-m*b3+l*b2-k*b1)*s +r[2]=(a*a7-a0*a6+a1*a5)*s +r[3]=(-e*a7+d*a6-c*a5)*s +q=-j +r[4]=(q*b3+h*b0-g*a9)*s +r[5]=(n*b3-l*b0+k*a9)*s +p=-b +r[6]=(p*a7+a0*a4-a1*a3)*s +r[7]=(f*a7-d*a4+c*a3)*s +r[8]=(j*b2-i*b0+g*a8)*s +r[9]=(-n*b2+m*b0-k*a8)*s +r[10]=(b*a6-a*a4+a1*a2)*s +r[11]=(-f*a6+e*a4-c*a2)*s +r[12]=(q*b1+i*a9-h*a8)*s +r[13]=(n*b1-m*a9+l*a8)*s +r[14]=(p*a5+a*a3-a0*a2)*s +r[15]=(f*a5-e*a3+d*a2)*s +return b4}, +bL(b5,b6){var s=this.a,r=s[0],q=s[4],p=s[8],o=s[12],n=s[1],m=s[5],l=s[9],k=s[13],j=s[2],i=s[6],h=s[10],g=s[14],f=s[3],e=s[7],d=s[11],c=s[15],b=b6.a,a=b[0],a0=b[4],a1=b[8],a2=b[12],a3=b[1],a4=b[5],a5=b[9],a6=b[13],a7=b[2],a8=b[6],a9=b[10],b0=b[14],b1=b[3],b2=b[7],b3=b[11],b4=b[15] +s[0]=r*a+q*a3+p*a7+o*b1 +s[4]=r*a0+q*a4+p*a8+o*b2 +s[8]=r*a1+q*a5+p*a9+o*b3 +s[12]=r*a2+q*a6+p*b0+o*b4 +s[1]=n*a+m*a3+l*a7+k*b1 +s[5]=n*a0+m*a4+l*a8+k*b2 +s[9]=n*a1+m*a5+l*a9+k*b3 +s[13]=n*a2+m*a6+l*b0+k*b4 +s[2]=j*a+i*a3+h*a7+g*b1 +s[6]=j*a0+i*a4+h*a8+g*b2 +s[10]=j*a1+i*a5+h*a9+g*b3 +s[14]=j*a2+i*a6+h*b0+g*b4 +s[3]=f*a+e*a3+d*a7+c*b1 +s[7]=f*a0+e*a4+d*a8+c*b2 +s[11]=f*a1+e*a5+d*a9+c*b3 +s[15]=f*a2+e*a6+d*b0+c*b4}, +iV(a){var s=new A.by(new Float64Array(16)) +s.v(this) +s.bL(0,a) +return s}, +aZG(a){var s=a.a,r=this.a,q=r[0],p=s[0],o=r[4],n=s[1],m=r[8],l=s[2],k=r[12],j=r[1],i=r[5],h=r[9],g=r[13],f=r[2],e=r[6],d=r[10] +r=r[14] +s[0]=q*p+o*n+m*l+k +s[1]=j*p+i*n+h*l+g +s[2]=f*p+e*n+d*l+r +return a}, +az(a2,a3){var s=a3.a,r=this.a,q=r[0],p=s[0],o=r[4],n=s[1],m=r[8],l=s[2],k=r[12],j=s[3],i=r[1],h=r[5],g=r[9],f=r[13],e=r[2],d=r[6],c=r[10],b=r[14],a=r[3],a0=r[7],a1=r[11] +r=r[15] +s[0]=q*p+o*n+m*l+k*j +s[1]=i*p+h*n+g*l+f*j +s[2]=e*p+d*n+c*l+b*j +s[3]=a*p+a0*n+a1*l+r*j +return a3}, +Mn(a){var s=a.a,r=this.a,q=r[0],p=s[0],o=r[4],n=s[1],m=r[8],l=s[2],k=r[12],j=r[1],i=r[5],h=r[9],g=r[13],f=r[2],e=r[6],d=r[10],c=r[14],b=1/(r[3]*p+r[7]*n+r[11]*l+r[15]) +s[0]=(q*p+o*n+m*l+k)*b +s[1]=(j*p+i*n+h*l+g)*b +s[2]=(f*p+e*n+d*l+c)*b +return a}, +afs(){var s=this.a +return s[0]===0&&s[1]===0&&s[2]===0&&s[3]===0&&s[4]===0&&s[5]===0&&s[6]===0&&s[7]===0&&s[8]===0&&s[9]===0&&s[10]===0&&s[11]===0&&s[12]===0&&s[13]===0&&s[14]===0&&s[15]===0}} +A.a.prototype={ +p(a,b){var s=this.a +s[0]=a +s[1]=b}, +cv(){var s=this.a +s[0]=0 +s[1]=0}, +v(a){var s=a.a,r=this.a +r[1]=s[1] +r[0]=s[0]}, +ag(a){var s=this.a +s[0]=a +s[1]=a}, +j(a){var s=this.a +return"["+A.j(s[0])+","+A.j(s[1])+"]"}, +k(a,b){var s,r,q +if(b==null)return!1 +if(b instanceof A.a){s=this.a +r=s[0] +q=b.a +s=r===q[0]&&s[1]===q[1]}else s=!1 +return s}, +gL(a){return A.bM(this.a)}, +fv(a){var s=new A.a(new Float64Array(2)) +s.v(this) +s.dE() +return s}, +Y(a,b){var s=new A.a(new Float64Array(2)) +s.v(this) +s.aq(0,b) +return s}, +X(a,b){var s=new A.a(new Float64Array(2)) +s.v(this) +s.E(0,b) +return s}, +b1(a,b){var s=new A.a(new Float64Array(2)) +s.v(this) +s.au(0,1/b) +return s}, +a2(a,b){var s=new A.a(new Float64Array(2)) +s.v(this) +s.au(0,b) +return s}, +i(a,b){return this.a[b]}, +sF(a,b){var s,r +if(b===0)this.cv() +else{s=Math.sqrt(this.gd2()) +if(s===0)return +s=b/s +r=this.a +r[0]=r[0]*s +r[1]=r[1]*s}}, +gF(a){return Math.sqrt(this.gd2())}, +gd2(){var s=this.a,r=s[0] +s=s[1] +return r*r+s*s}, +e0(a){var s,r,q=Math.sqrt(this.gd2()) +if(q===0)return 0 +s=1/q +r=this.a +r[0]=r[0]*s +r[1]=r[1]*s +return q}, +LQ(){var s=new A.a(new Float64Array(2)) +s.v(this) +s.e0(0) +return s}, +n2(a){var s=this.a,r=a.a,q=s[0]-r[0],p=s[1]-r[1] +return q*q+p*p}, +Jj(a){var s=a.a,r=this.a +if(r[0]===s[0]&&r[1]===s[1])return 0 +return Math.acos(B.c.bX(this.bO(a)/(Math.sqrt(this.gd2())*Math.sqrt(a.gd2())),-1,1))}, +Jk(a){var s=a.a,r=this.a +if(r[0]===s[0]&&r[1]===s[1])return 0 +return Math.atan2(this.bS(a),this.bO(a))}, +bO(a){var s=a.a,r=this.a +return r[0]*s[0]+r[1]*s[1]}, +bS(a){var s=a.a,r=this.a +return r[0]*s[1]-r[1]*s[0]}, +hm(a,b){var s=this.a +b.p(-a*s[1],a*s[0]) +return b}, +ahy(a){this.aq(0,a.G8(2*a.bO(this)))}, +E(a,b){var s=b.a,r=this.a +r[0]=r[0]+s[0] +r[1]=r[1]+s[1]}, +vf(a,b){var s=a.a,r=this.a +r[0]=r[0]+s[0]*b +r[1]=r[1]+s[1]*b}, +aq(a,b){var s=b.a,r=this.a +r[0]=r[0]-s[0] +r[1]=r[1]-s[1]}, +bL(a,b){var s=b.a,r=this.a +r[0]=r[0]*s[0] +r[1]=r[1]*s[1]}, +Ko(a){var s=a.a,r=this.a +r[0]=r[0]/s[0] +r[1]=r[1]/s[1]}, +au(a,b){var s=this.a +s[1]=s[1]*b +s[0]=s[0]*b}, +G8(a){var s=new A.a(new Float64Array(2)) +s.v(this) +s.au(0,a) +return s}, +dE(){var s=this.a +s[1]=-s[1] +s[0]=-s[0]}, +aLJ(a){var s=this.a +s[1]=Math.abs(s[1]) +s[0]=Math.abs(s[0])}, +bX(a,b,c){var s=b.a,r=c.a,q=this.a +q[0]=B.c.bX(q[0],s[0],r[0]) +q[1]=B.c.bX(q[1],s[1],r[1])}, +JB(a,b){var s=this.a +s[0]=B.c.bX(s[0],a,b) +s[1]=B.c.bX(s[1],a,b)}, +sN(a,b){this.a[0]=b}, +sO(a,b){this.a[1]=b}} +A.dX.prototype={ +kG(a,b,c){var s=this.a +s[0]=a +s[1]=b +s[2]=c}, +cv(){var s=this.a +s[2]=0 +s[1]=0 +s[0]=0}, +v(a){var s=a.a,r=this.a +r[0]=s[0] +r[1]=s[1] +r[2]=s[2]}, +j(a){var s=this.a +return"["+A.j(s[0])+","+A.j(s[1])+","+A.j(s[2])+"]"}, +k(a,b){var s,r,q +if(b==null)return!1 +if(b instanceof A.dX){s=this.a +r=s[0] +q=b.a +s=r===q[0]&&s[1]===q[1]&&s[2]===q[2]}else s=!1 +return s}, +gL(a){return A.bM(this.a)}, +Y(a,b){var s=new A.dX(new Float64Array(3)) +s.v(this) +s.aq(0,b) +return s}, +X(a,b){var s=new A.dX(new Float64Array(3)) +s.v(this) +s.E(0,b) +return s}, +a2(a,b){var s=new A.dX(new Float64Array(3)) +s.v(this) +s.au(0,b) +return s}, +i(a,b){return this.a[b]}, +gF(a){var s=this.a,r=s[0],q=s[1] +s=s[2] +return Math.sqrt(r*r+q*q+s*s)}, +gd2(){var s=this.a,r=s[0],q=s[1] +s=s[2] +return r*r+q*q+s*s}, +bO(a){var s=a.a,r=this.a +return r[0]*s[0]+r[1]*s[1]+r[2]*s[2]}, +Jo(a){var s=a.a,r=this.a,q=r[0],p=r[1],o=r[2] +r[0]=s[0]*q+s[4]*p+s[8]*o+s[12] +r[1]=s[1]*q+s[5]*p+s[9]*o+s[13] +r[2]=s[2]*q+s[6]*p+s[10]*o+s[14]}, +E(a,b){var s=b.a,r=this.a +r[0]=r[0]+s[0] +r[1]=r[1]+s[1] +r[2]=r[2]+s[2]}, +aq(a,b){var s=b.a,r=this.a +r[0]=r[0]-s[0] +r[1]=r[1]-s[1] +r[2]=r[2]-s[2]}, +au(a,b){var s=this.a +s[2]=s[2]*b +s[1]=s[1]*b +s[0]=s[0]*b}, +G8(a){var s=new A.dX(new Float64Array(3)) +s.v(this) +s.au(0,a) +return s}, +dE(){var s=this.a +s[2]=-s[2] +s[1]=-s[1] +s[0]=-s[0]}, +sN(a,b){this.a[0]=b}, +sO(a,b){this.a[1]=b}, +sjy(a,b){this.a[2]=b}} +A.oN.prototype={ +p_(a,b,c,d){var s=this.a +s[3]=d +s[2]=c +s[1]=b +s[0]=a}, +v(a){var s=a.a,r=this.a +r[3]=s[3] +r[2]=s[2] +r[1]=s[1] +r[0]=s[0]}, +j(a){var s=this.a +return A.j(s[0])+","+A.j(s[1])+","+A.j(s[2])+","+A.j(s[3])}, +k(a,b){var s,r,q +if(b==null)return!1 +if(b instanceof A.oN){s=this.a +r=s[0] +q=b.a +s=r===q[0]&&s[1]===q[1]&&s[2]===q[2]&&s[3]===q[3]}else s=!1 +return s}, +gL(a){return A.bM(this.a)}, +Y(a,b){var s,r=new Float64Array(4),q=new A.oN(r) +q.v(this) +s=b.a +r[0]=r[0]-s[0] +r[1]=r[1]-s[1] +r[2]=r[2]-s[2] +r[3]=r[3]-s[3] +return q}, +X(a,b){var s,r=new Float64Array(4),q=new A.oN(r) +q.v(this) +s=b.a +r[0]=r[0]+s[0] +r[1]=r[1]+s[1] +r[2]=r[2]+s[2] +r[3]=r[3]+s[3] +return q}, +a2(a,b){var s=new Float64Array(4),r=new A.oN(s) +r.v(this) +s[0]=s[0]*b +s[1]=s[1]*b +s[2]=s[2]*b +s[3]=s[3]*b +return r}, +i(a,b){return this.a[b]}, +gF(a){var s=this.a,r=s[0],q=s[1],p=s[2] +s=s[3] +return Math.sqrt(r*r+q*q+p*p+s*s)}} +A.beQ.prototype={} +A.x5.prototype={ +hf(a,b,c,d){return A.V7(this.a,this.b,a,!1,A.w(this).c)}, +tY(a,b,c){return this.hf(a,null,b,c)}} +A.aiw.prototype={} +A.aiM.prototype={ +bq(a){var s=this,r=A.e5(null,t.H) +if(s.b==null)return r +s.SG() +s.d=s.b=null +return r}, +zG(a){var s,r=this +if(r.b==null)throw A.d(A.ad("Subscription has been canceled.")) +r.SG() +s=A.bte(new A.b1x(a),t.lZ) +s=s==null?null:t.L.a(A.cd(s)) +r.d=s +r.SF()}, +nt(a,b){if(this.b==null)return;++this.a +this.SG()}, +kC(a){return this.nt(0,null)}, +j2(a){var s=this +if(s.b==null||s.a<=0)return;--s.a +s.SF()}, +SF(){var s=this,r=s.d +if(r!=null&&s.a<=0)s.b.addEventListener(s.c,r,!1)}, +SG(){var s=this.d +if(s!=null)this.b.removeEventListener(this.c,s,!1)}} +A.b1v.prototype={ +$1(a){return this.a.$1(a)}, +$S:41} +A.b1x.prototype={ +$1(a){return this.a.$1(a)}, +$S:41} +A.Gh.prototype={} +A.a0.prototype={ +eq(a,b){var s=B.d.c4(A.fy(A.ay(b).a,null),$.avs())||A.ay(b)===$.bdk()?null:A.avc(b) +return new A.a0(this.a,this.b,s,b.h("a0<0>"))}, +gL(a){return this.a}, +k(a,b){if(b==null)return!1 +return b instanceof A.a0&&b.a===this.a}, +b_7(a){var s,r=this.c +if(r!=null){s=this.b +return J.Zz(s.gdl(s),this.a+a*r,r)}else throw A.d(A.af("viewSingle is not supported for unsized types!"))}} +A.a32.prototype={ +afK(a,b){var s=this.a,r=A.bVU(s,a) +if(B.d.c4(A.fy(A.ay(b).a,null),$.avs()))if(r instanceof A.va)return A.em(r.a,s,b) +else throw A.d(A.c3("Tried to look up "+a+" as a function, but it seems it is NOT a function!",null)) +else return A.em(r.a,s,b)}, +zz(a){return this.afK(a,t.MZ)}} +A.AF.prototype={ +Um(a,b){return new A.AF(b,a,this.$ti)}, +ek(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,g0,g1,g2,g3,g4,g5,g6,g7,g8,g9,h0,h1,h2,h3,h4,h5,h6,h7,h8,h9,i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,j0,j1,j2,j3,j4,j5,j6,j7,j8,j9,k0,k1,k2,k3,k4,k5,k6,k7){return J.nT(new A.fe(this.a,this.b,t.vK).ek(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,g0,g1,g2,g3,g4,g5,g6,g7,g8,g9,h0,h1,h2,h3,h4,h5,h6,h7,h8,h9,i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,j0,j1,j2,j3,j4,j5,j6,j7,j8,j9,k0,k1,k2,k3,k4,k5,k6,k7),this.$ti.c)}, +fZ(){var s=null +return this.ek(s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +jv(a){var s=null +return this.ek(a,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fm(a,b){var s=null +return this.ek(a,b,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fn(a,b,c){var s=null +return this.ek(a,b,c,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fo(a,b,c,d){var s=null +return this.ek(a,b,c,d,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fp(a,b,c,d,e){var s=null +return this.ek(a,b,c,d,e,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fq(a,b,c,d,e,f){var s=null +return this.ek(a,b,c,d,e,f,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fs(a,b,c,d,e,f,g,h){var s=null +return this.ek(a,b,c,d,e,f,g,h,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fr(a,b,c,d,e,f,g){var s=null +return this.ek(a,b,c,d,e,f,g,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}} +A.AG.prototype={ +Um(a,b){return new A.AG(b,a,this.$ti)}, +ek(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,g0,g1,g2,g3,g4,g5,g6,g7,g8,g9,h0,h1,h2,h3,h4,h5,h6,h7,h8,h9,i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,j0,j1,j2,j3,j4,j5,j6,j7,j8,j9,k0,k1,k2,k3,k4,k5,k6,k7){return J.nT(new A.fe(this.a,this.b,t.fs).ek(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,g0,g1,g2,g3,g4,g5,g6,g7,g8,g9,h0,h1,h2,h3,h4,h5,h6,h7,h8,h9,i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,j0,j1,j2,j3,j4,j5,j6,j7,j8,j9,k0,k1,k2,k3,k4,k5,k6,k7),this.$ti.h("a0<1>"))}, +fZ(){var s=null +return this.ek(s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +jv(a){var s=null +return this.ek(a,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fm(a,b){var s=null +return this.ek(a,b,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fn(a,b,c){var s=null +return this.ek(a,b,c,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fo(a,b,c,d){var s=null +return this.ek(a,b,c,d,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fp(a,b,c,d,e){var s=null +return this.ek(a,b,c,d,e,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fq(a,b,c,d,e,f){var s=null +return this.ek(a,b,c,d,e,f,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fs(a,b,c,d,e,f,g,h){var s=null +return this.ek(a,b,c,d,e,f,g,h,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fr(a,b,c,d,e,f,g){var s=null +return this.ek(a,b,c,d,e,f,g,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}} +A.fe.prototype={ +Um(a,b){return new A.fe(b,a,A.w(this).h("fe"))}, +ek(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,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,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,g0,g1,g2,g3,g4,g5,g6,g7,g8,g9,h0,h1,h2,h3,h4,h5,h6,h7,h8,h9,i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,j0,j1,j2,j3,j4,j5,j6,j7,j8,j9,k0,k1,k2,k3,k4,k5,k6,k7,k8,k9,l0,l1){var s,r,q=this,p=q.b +if(p==null||q.a==null)throw A.d(A.ad("Call copyWith first!")) +p.toString +s=q.a +s.toString +r=A.b([],t.jl) +if(a!=null){r.push(a) +if(b!=null){r.push(b) +if(c!=null){r.push(c) +if(d!=null){r.push(d) +if(e!=null){r.push(e) +if(f!=null){r.push(f) +if(g!=null){r.push(g) +if(h!=null){r.push(h) +if(i!=null){r.push(i) +if(j!=null){r.push(j) +if(k!=null){r.push(k) +if(l!=null){r.push(l) +if(m!=null){r.push(m) +if(n!=null){r.push(n) +if(o!=null){r.push(o) +if(a0!=null){r.push(a0) +if(a1!=null){r.push(a1) +if(a2!=null){r.push(a2) +if(a3!=null){r.push(a3) +if(a4!=null){r.push(a4) +if(a5!=null){r.push(a5) +if(a6!=null){r.push(a6) +if(a7!=null){r.push(a7) +if(a8!=null){r.push(a8) +if(a9!=null){r.push(a9) +if(b0!=null){r.push(b0) +if(b1!=null){r.push(b1) +if(b2!=null){r.push(b2) +if(b3!=null){r.push(b3) +if(b4!=null){r.push(b4) +if(b5!=null){r.push(b5) +if(b6!=null){r.push(b6) +if(b7!=null){r.push(b7) +if(b8!=null){r.push(b8) +if(b9!=null){r.push(b9) +if(c0!=null){r.push(c0) +if(c1!=null){r.push(c1) +if(c2!=null){r.push(c2) +if(c3!=null){r.push(c3) +if(c4!=null){r.push(c4) +if(c5!=null){r.push(c5) +if(c6!=null){r.push(c6) +if(c7!=null){r.push(c7) +if(c8!=null){r.push(c8) +if(c9!=null){r.push(c9) +if(d0!=null){r.push(d0) +if(d1!=null){r.push(d1) +if(d2!=null){r.push(d2) +if(d3!=null){r.push(d3) +if(d4!=null){r.push(d4) +if(d5!=null){r.push(d5) +if(d6!=null){r.push(d6) +if(d7!=null){r.push(d7) +if(d8!=null){r.push(d8) +if(d9!=null){r.push(d9) +if(e0!=null){r.push(e0) +if(e1!=null){r.push(e1) +if(e2!=null){r.push(e2) +if(e3!=null){r.push(e3) +if(e4!=null){r.push(e4) +if(e5!=null){r.push(e5) +if(e6!=null){r.push(e6) +if(e7!=null){r.push(e7) +if(e8!=null){r.push(e8) +if(e9!=null){r.push(e9) +if(f0!=null){r.push(f0) +if(f1!=null){r.push(f1) +if(f2!=null){r.push(f2) +if(f3!=null){r.push(f3) +if(f4!=null){r.push(f4) +if(f5!=null){r.push(f5) +if(f6!=null){r.push(f6) +if(f7!=null){r.push(f7) +if(f8!=null){r.push(f8) +if(f9!=null){r.push(f9) +if(g0!=null){r.push(g0) +if(g1!=null){r.push(g1) +if(g2!=null){r.push(g2) +if(g3!=null){r.push(g3) +if(g4!=null){r.push(g4) +if(g5!=null){r.push(g5) +if(g6!=null){r.push(g6) +if(g7!=null){r.push(g7) +if(g8!=null){r.push(g8) +if(g9!=null){r.push(g9) +if(h0!=null){r.push(h0) +if(h1!=null){r.push(h1) +if(h2!=null){r.push(h2) +if(h3!=null){r.push(h3) +if(h4!=null){r.push(h4) +if(h5!=null){r.push(h5) +if(h6!=null){r.push(h6) +if(h7!=null){r.push(h7) +if(h8!=null){r.push(h8) +if(h9!=null){r.push(h9) +if(i0!=null){r.push(i0) +if(i1!=null){r.push(i1) +if(i2!=null){r.push(i2) +if(i3!=null){r.push(i3) +if(i4!=null){r.push(i4) +if(i5!=null){r.push(i5) +if(i6!=null){r.push(i6) +if(i7!=null){r.push(i7) +if(i8!=null){r.push(i8) +if(i9!=null){r.push(i9) +if(j0!=null){r.push(j0) +if(j1!=null){r.push(j1) +if(j2!=null){r.push(j2) +if(j3!=null){r.push(j3) +if(j4!=null){r.push(j4) +if(j5!=null){r.push(j5) +if(j6!=null){r.push(j6) +if(j7!=null){r.push(j7) +if(j8!=null){r.push(j8) +if(j9!=null){r.push(j9) +if(k0!=null){r.push(k0) +if(k1!=null){r.push(k1) +if(k2!=null){r.push(k2) +if(k3!=null){r.push(k3) +if(k4!=null){r.push(k4) +if(k5!=null){r.push(k5) +if(k6!=null){r.push(k6) +if(k7!=null){r.push(k7) +if(k8!=null){r.push(k8) +if(k9!=null){r.push(k9) +if(l0!=null){r.push(l0) +if(l1!=null)r.push(l1)}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}return A.bSE(p,r,s,A.w(q).h("fe.T"))}, +fZ(){var s=null +return this.ek(s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +jv(a){var s=null +return this.ek(a,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fm(a,b){var s=null +return this.ek(a,b,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fn(a,b,c){var s=null +return this.ek(a,b,c,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fo(a,b,c,d){var s=null +return this.ek(a,b,c,d,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fp(a,b,c,d,e){var s=null +return this.ek(a,b,c,d,e,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fq(a,b,c,d,e,f){var s=null +return this.ek(a,b,c,d,e,f,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fs(a,b,c,d,e,f,g,h){var s=null +return this.ek(a,b,c,d,e,f,g,h,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}, +Fr(a,b,c,d,e,f,g){var s=null +return this.ek(a,b,c,d,e,f,g,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s)}} +A.b1l.prototype={} +A.a3b.prototype={ +ayb(){var s=J.bB9(this.a) +if(s!=null)return J.nU(s) +else throw A.d(A.ad("Unexpected memory error!"))}} +A.G3.prototype={ +j(a){return new A.V8(this.a).j(0)}, +$ic4:1} +A.aKs.prototype={ +gdl(a){return this.a.ayb()}, +Tz(a,b){return A.em(this.a.c.$1(a),this,b)}, +DW(a){this.a.d.$1(a.a)}, +ga8O(){return this.c}} +A.aKt.prototype={ +$1(a){return new A.bK(a.a,a,t.Yn)}, +$S:938} +A.aKu.prototype={ +$1(a){return new A.bK(a.b,a,t.WK)}, +$S:939} +A.aKv.prototype={ +W(){return"MemoryRegisterMode."+this.b}} +A.aKS.prototype={} +A.it.prototype={ +gL(a){return B.d.gL(this.j(0))}, +j(a){return"[address="+this.a+"\tname="+this.b+"]"}} +A.Fb.prototype={ +k(a,b){if(b==null)return!1 +if(b instanceof A.Fb)return this.b===b.b&&this.a===b.a +else return!1}} +A.va.prototype={ +gL(a){return B.d.gL(this.b+this.c+this.a)}, +k(a,b){if(b==null)return!1 +if(b instanceof A.va)return this.c===b.c&&this.b===b.b&&this.a===b.a +else return!1}, +j(a){var s=this +return"[tableIndex="+s.a+"\tname="+s.b+"\targumentCount="+s.c+"\tfunction="+A.j(s.d)+"]"}} +A.aLX.prototype={ +ga8O(){return A.X(A.iO(this,A.jH(B.a9I,"gb_H",1,[],[],0)))}, +Tz(a){throw A.d(A.af("Can not use the null memory to allocate space!"))}, +gdl(a){return A.X(A.af("The null memory has no buffer!"))}, +DW(a){throw A.d(A.af("Can not use the null memory to free pointers!"))}} +A.hO.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}, +gL(a){return A.a6(this.c,this.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.hO}} +A.aeM.prototype={ +aPw(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.a3x(B.d.c5(a,2),16) +else return this.a3x(B.d.c5(a,1),10)}else return B.a13.i(0,a)}, +a3x(a,b){var s=A.pR(a,b) +if(s==null||s<0||1114111")),r=r.c;s.H();){q=s.d +if(q==null)q=r.a(q) +if(p.$1(q))return q}return null}, +gyx(a){return this.pE$}} +A.aXX.prototype={ +gbQ(a){return B.xE}} +A.IK.prototype={ +gbQ(a){return this.ly$}} +A.wW.prototype={} +A.aYq.prototype={ +gbs(a){return null}, +vl(a){return this.IK()}, +yW(a){return this.IK()}, +IK(){return A.X(A.af(this.j(0)+" does not have a parent"))}} +A.tQ.prototype={ +gbs(a){return this.ir$}, +vl(a){A.IL(this) +this.ir$=a}, +yW(a){var s=this +if(s.gbs(s)!==a)A.X(A.bhe("Node already has a non-matching parent",s,a)) +s.ir$=null}} +A.aYv.prototype={ +gm(a){return null}} +A.aeV.prototype={} +A.aeW.prototype={ +Zw(){var s,r=new A.d8(""),q=new A.aYx(r,B.mI) +this.eJ(0,q) +s=r.a +return s.charCodeAt(0)==0?s:s}, +j(a){return this.Zw()}} +A.lF.prototype={ +gkz(a){return B.HJ}, +iP(){return A.aXV(this.a.iP(),this.b,this.c)}, +eJ(a,b){var s,r,q +this.a.eJ(0,b) +s=b.a +s.a+="=" +r=this.c +q=r.c +q=q+b.b.adD(this.b,r)+q +s.a+=q +return null}, +gm(a){return this.b}} +A.asB.prototype={} +A.asC.prototype={} +A.II.prototype={ +gkz(a){return B.m_}, +iP(){return new A.II(this.a,null)}, +eJ(a,b){var s=b.a,r=s.a+="" +return null}} +A.TA.prototype={ +gkz(a){return B.m2}, +iP(){return new A.TA(this.a,null)}, +eJ(a,b){var s=b.a,r=s.a+="" +return null}} +A.aeK.prototype={ +gm(a){return this.a}} +A.asD.prototype={} +A.aeL.prototype={ +gm(a){var s +if(this.pE$.a.length===0)return"" +s=this.Zw() +return B.d.am(s,6,s.length-2)}, +gkz(a){return B.ts}, +iP(){var s=this.pE$.a +return A.bqZ(new A.W(s,new A.aXY(),A.a5(s).h("W<1,lF>")))}, +eJ(a,b){var s=b.a +s.a+="" +return null}} +A.aXY.prototype={ +$1(a){return A.aXV(a.a.iP(),a.b,a.c)}, +$S:252} +A.asE.prototype={} +A.asF.prototype={} +A.TC.prototype={ +gkz(a){return B.tt}, +iP(){return new A.TC(this.a,this.b,this.c,null)}, +eJ(a,b){var s,r=b.a,q=r.a+="" +return null}} +A.asG.prototype={} +A.aeN.prototype={ +gMU(a){var s,r,q +for(s=this.ly$.a,r=A.a5(s),s=new J.cA(s,s.length,r.h("cA<1>")),r=r.c;s.H();){q=s.d +if(q==null)q=r.a(q) +if(q instanceof A.lG)return q}throw A.d(A.ad("Empty XML document"))}, +gkz(a){return B.ail}, +iP(){var s=this.ly$.a +return A.br_(new A.W(s,new A.aY0(),A.a5(s).h("W<1,er>")))}, +eJ(a,b){return b.b_a(this)}} +A.aY0.prototype={ +$1(a){return a.iP()}, +$S:253} +A.asH.prototype={} +A.lG.prototype={ +gkz(a){return B.iO}, +iP(){var s=this,r=s.pE$.a,q=s.ly$.a +return A.bMi(s.b.iP(),new A.W(r,new A.aY1(),A.a5(r).h("W<1,lF>")),new A.W(q,new A.aY2(),A.a5(q).h("W<1,er>")),s.a)}, +eJ(a,b){return b.b_b(this)}} +A.aY1.prototype={ +$1(a){return A.aXV(a.a.iP(),a.b,a.c)}, +$S:252} +A.aY2.prototype={ +$1(a){return a.iP()}, +$S:253} +A.asI.prototype={} +A.asJ.prototype={} +A.asK.prototype={} +A.asL.prototype={} +A.er.prototype={} +A.asW.prototype={} +A.asX.prototype={} +A.asY.prototype={} +A.asZ.prototype={} +A.at_.prototype={} +A.at0.prototype={} +A.TI.prototype={ +gkz(a){return B.m0}, +iP(){return new A.TI(this.c,this.a,null)}, +eJ(a,b){var s,r=b.a,q=r.a+="" +return null}} +A.Cz.prototype={ +gkz(a){return B.m1}, +iP(){return new A.Cz(this.a,null)}, +eJ(a,b){var s=b.a,r=A.Df(this.a,$.bjP(),A.btF(),null) +s.a+=r +return null}} +A.aeJ.prototype={ +i(a,b){var s,r,q,p=this.c +if(!p.aR(0,b)){p.u(0,b,this.a.$1(b)) +for(s=this.b,r=A.w(p).h("bk<1>");p.a>s;){q=new A.bk(p,r).gar(0) +if(!q.H())A.X(A.cy()) +p.P(0,q.ga1(0))}}p=p.i(0,b) +p.toString +return p}} +A.IJ.prototype={ +cm(a){var s,r=a.a,q=a.b,p=r.length,o=q")) +for(s=J.az(a);s.H();){r=s.ga1(s) +if(J.bBd(r)===B.tu)B.b.I(p,this.Qn(r)) +else{q=this.c +q===$&&A.c() +if(!q.G(0,r.gkz(r)))A.X(A.bMj("Got "+r.gkz(r).j(0)+", but expected one of "+q.cj(0,", "),r,q)) +if(r.gbs(r)!=null)A.X(A.bhe(u.x,r,r.gbs(r))) +p.push(r)}}return p}} +A.aYo.prototype={ +$1(a){var s=this.a,r=s.c +r===$&&A.c() +A.aYp(a,r) +return s.$ti.c.a(a.iP())}, +$S(){return this.a.$ti.h("1(er)")}} +A.aeZ.prototype={ +IK(){return A.X(A.iO(this,A.jH(B.GH,"b_J",0,[],[],0)))}, +iP(){return new A.aeZ(this.b,this.c,this.d,null)}, +gEv(){return this.c}, +gF7(){return this.d}} +A.af_.prototype={ +IK(){return A.X(A.iO(this,A.jH(B.GH,"b_M",0,[],[],0)))}, +gF7(){return this.b}, +iP(){return new A.af_(this.b,null)}, +gEv(){return this.b}} +A.aYw.prototype={} +A.aYx.prototype={ +b_a(a){this.ajg(a.ly$)}, +b_b(a){var s,r,q,p,o=this,n=o.a +n.a+="<" +s=a.b +s.eJ(0,o) +o.ajd(a) +r=a.ly$ +q=r.a.length===0&&a.a +p=n.a +if(q)n.a=p+"/>" +else{n.a=p+">" +o.ajg(r) +n.a+=""}}, +ajd(a){var s=a.pE$ +if(s.a.length!==0){this.a.a+=" " +this.ajh(s," ")}}, +ajh(a,b){var s,r,q,p,o=this,n=J.az(a) +if(n.H())if(b==null||b.length===0){s=n.$ti.c +do{r=n.d;(r==null?s.a(r):r).eJ(0,o)}while(n.H())}else{s=n.d;(s==null?n.$ti.c.a(s):s).eJ(0,o) +for(s=o.a,r=A.j(b),q=n.$ti.c;n.H();){s.a+=r +p=n.d;(p==null?q.a(p):p).eJ(0,o)}}}, +ajg(a){return this.ajh(a,null)}} +A.at4.prototype={} +A.aXU.prototype={ +aMr(a,b,c,d){var s,r,q=this +if(q.a||q.b){if(q.b&&q.r.length===0)$label0$0:{if(a instanceof A.mL){s=q.f +if(!new A.ca(s,t.Yb).gaA(0))throw A.d(A.IM("Expected at most one XML declaration",b,c)) +else if(s.length!==0)throw A.d(A.IM("Unexpected XML declaration",b,c)) +s.push(a) +break $label0$0}if(a instanceof A.mM){s=q.f +if(!new A.ca(s,t.p0).gaA(0))throw A.d(A.IM("Expected at most one doctype declaration",b,c)) +else if(!new A.ca(s,t.jd).gaA(0))throw A.d(A.IM("Unexpected doctype declaration",b,c)) +s.push(a) +break $label0$0}if(a instanceof A.hZ){s=q.f +if(!new A.ca(s,t.jd).gaA(0))throw A.d(A.IM("Unexpected root element",b,c)) +s.push(a)}}$label1$1:{if(a instanceof A.hZ){if(!a.r)q.r.push(a) +break $label1$1}if(a instanceof A.jo){if(q.a){s=q.r +if(s.length===0)throw A.d(A.br4(a.e,b,c)) +else{r=a.e +if(B.b.ga_(s).e!==r)throw A.d(A.br2(B.b.ga_(s).e,r,b,c))}}s=q.r +if(s.length!==0)s.pop()}}}}} +A.aYl.prototype={} +A.aYm.prototype={} +A.aeU.prototype={} +A.aeO.prototype={ +dB(a){var s,r=new A.d8(""),q=new A.Eg(r.gb_n(r),t.VQ) +B.b.al(a,new A.asP(q,this.a).gNi()) +q.T(0) +s=r.a +return s.charCodeAt(0)==0?s:s}, +kh(a){return new A.asP(a,this.a)}} +A.asP.prototype={ +E(a,b){return J.lQ(b,this.gNi())}, +T(a){return this.a.T(0)}, +ZS(a){var s=this.a +s.E(0,"")}, +ZT(a){var s=this.a +s.E(0,"")}, +ZU(a){var s=this.a +s.E(0,"")}, +ZV(a){var s,r,q=this.a +q.E(0,"")}, +ZX(a){var s=this.a +s.E(0,"")}, +ZY(a){var s,r=this.a +r.E(0,"")}, +ZZ(a){var s=this.a +s.E(0,"<") +s.E(0,a.e) +this.aaO(a.f) +if(a.r)s.E(0,"/>") +else s.E(0,">")}, +a__(a){this.a.E(0,A.Df(a.gm(0),$.bjP(),A.btF(),null))}, +aaO(a){var s,r,q,p,o,n +for(s=J.az(a),r=this.a,q=this.b;s.H();){p=s.ga1(s) +r.E(0," ") +r.E(0,p.a) +r.E(0,"=") +o=p.b +p=p.c +n=p.c +r.E(0,n+q.adD(o,p)+n)}}} +A.auK.prototype={} +A.b8p.prototype={ +E(a,b){return J.lQ(b,this.gNi())}, +ZS(a){return this.tt(0,new A.II(a.e,null),a)}, +ZT(a){return this.tt(0,new A.TA(a.e,null),a)}, +ZU(a){return this.tt(0,A.bqZ(this.Ue(a.e)),a)}, +ZV(a){return this.tt(0,new A.TC(a.e,a.f,a.r,null),a)}, +ZX(a){var s,r,q,p,o=this.b +if(o==null)throw A.d(A.br4(a.e,a.r6$,a.r5$)) +s=o.b.gF7() +r=a.e +q=a.r6$ +p=a.r5$ +if(s!==r)A.X(A.br2(s,r,q,p)) +o.a=o.ly$.a.length!==0 +s=A.bMk(o) +this.b=s +if(s==null)this.tt(0,o,a.op$)}, +ZY(a){return this.tt(0,new A.TI(a.e,a.f,null),a)}, +ZZ(a){var s,r=this,q=A.br0(a.e,r.Ue(a.f),B.xE,!0) +if(a.r)r.tt(0,q,a) +else{s=r.b +if(s!=null)s.ly$.E(0,q) +r.b=q}}, +a__(a){return this.tt(0,new A.Cz(a.gm(0),null),a)}, +T(a){var s=this.b +if(s!=null)throw A.d(A.br3(s.b.gF7(),null,null)) +this.a.T(0)}, +tt(a,b,c){var s,r,q=this.b +if(q==null){s=c==null?null:c.op$ +q=t.ov +r=b +for(;s!=null;s=s.op$)r=A.br0(s.e,this.Ue(s.f),A.b([r],q),s.r) +this.a.E(0,A.b([b],q))}else q.ly$.E(0,b)}, +Ue(a){return J.mU(a,new A.b8q(),t.Qx)}} +A.b8q.prototype={ +$1(a){return A.aXV(A.br1(a.a),a.b,a.c)}, +$S:945} +A.auL.prototype={} +A.eO.prototype={ +j(a){return new A.aeO(B.mI).dB(A.b([this],t.Ec))}} +A.asQ.prototype={} +A.asR.prototype={} +A.asS.prototype={} +A.nB.prototype={ +eJ(a,b){return b.ZS(this)}, +gL(a){return A.a6(B.m_,this.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.nB&&b.e===this.e}} +A.oP.prototype={ +eJ(a,b){return b.ZT(this)}, +gL(a){return A.a6(B.m2,this.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.oP&&b.e===this.e}} +A.mL.prototype={ +eJ(a,b){return b.ZU(this)}, +gL(a){return A.a6(B.ts,B.kf.f6(0,this.e),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.mL&&B.kf.eN(b.e,this.e)}} +A.mM.prototype={ +eJ(a,b){return b.ZV(this)}, +gL(a){return A.a6(B.tt,this.e,this.f,this.r,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.mM&&this.e===b.e&&J.f(this.f,b.f)&&this.r==b.r}} +A.jo.prototype={ +eJ(a,b){return b.ZX(this)}, +gL(a){return A.a6(B.iO,this.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.jo&&b.e===this.e}, +gfX(a){return this.e}} +A.asM.prototype={} +A.oQ.prototype={ +eJ(a,b){return b.ZY(this)}, +gL(a){return A.a6(B.m0,this.f,this.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.oQ&&b.e===this.e&&b.f===this.f}} +A.hZ.prototype={ +eJ(a,b){return b.ZZ(this)}, +gL(a){return A.a6(B.iO,this.e,this.r,B.kf.f6(0,this.f),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.hZ&&b.e===this.e&&b.r===this.r&&B.kf.eN(b.f,this.f)}, +gfX(a){return this.e}} +A.at2.prototype={} +A.wX.prototype={ +gm(a){var s,r=this,q=r.r +if(q===$){s=r.f.hH(0,r.e) +r.r!==$&&A.N() +r.r=s +q=s}return q}, +eJ(a,b){return b.a__(this)}, +gL(a){return A.a6(B.m1,this.gm(0),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.wX&&b.gm(0)===this.gm(0)}, +$iTJ:1} +A.aeP.prototype={ +gar(a){var s=this,r=A.b([],t.Ec),q=A.b([],t.po) +return new A.aY3($.bAg().i(0,s.b),new A.aXU(s.c,s.d,!1,!1,!1,r,q),new A.cr("",s.a,0))}} +A.aY3.prototype={ +ga1(a){var s=this.d +s.toString +return s}, +H(){var s,r,q,p,o=this,n=o.c +if(n!=null){s=o.a.cm(n) +if(s instanceof A.dA){o.c=s +r=s.e +o.d=r +o.b.aMr(r,n.a,n.b,s.b) +return!0}else{r=n.b +q=n.a +if(r"),A.df("/>")],t.sb),A.bSG(),q),q,q,p,q,q),new A.aYk(),q,q,p,q,q,t.a1)}, +aMP(a){return A.bgg(new A.bq(this.gaME(),B.F,t.vq),0,9007199254740991,t.wG)}, +aMF(){var s=this,r=t.WV,q=t.N,p=t._0 +return A.B8(A.p1(new A.bq(s.gAG(),B.F,r),new A.bq(s.goI(),B.F,r),new A.bq(s.gaMG(),B.F,t.VJ),q,q,p),new A.aY8(s),q,q,p,t.wG)}, +aMH(){var s=this.gAH(),r=t.WV,q=t.N,p=t._0 +return new A.mn(B.a5j,A.aP6(A.bd1(new A.bq(s,B.F,r),A.df("="),new A.bq(s,B.F,r),new A.bq(this.gvm(),B.F,t.VJ),q,q,q,p),new A.aY4(),q,q,q,p,p),t.Tq)}, +aMI(){var s=t.VJ +return A.uE(A.b([new A.bq(this.gaMJ(),B.F,s),new A.bq(this.gaMN(),B.F,s),new A.bq(this.gaML(),B.F,s)],t.m5),null,t._0)}, +aMK(){var s=t.N +return A.B8(A.p1(A.df('"'),new A.IJ('"',0),A.df('"'),s,s,s),new A.aY5(),s,s,s,t._0)}, +aMO(){var s=t.N +return A.B8(A.p1(A.df("'"),new A.IJ("'",0),A.df("'"),s,s,s),new A.aY7(),s,s,s,t._0)}, +aMM(){return A.vF(new A.bq(this.goI(),B.F,t.WV),new A.aY6(),!1,t.N,t._0)}, +aQW(a){var s=t.WV,r=t.N +return A.aP6(A.bd1(A.df(""),r,r,r,r),new A.aYh(),r,r,r,r,t.Gn)}, +aNW(){var s=t.N +return A.B8(A.p1(A.df("" expected',new A.lp(A.df("-->"),0,9007199254740991,new A.mZ("input expected"),t.Po),t.Ii),A.df("-->"),s,s,s),new A.aYb(),s,s,s,t.mL)}, +aNi(){var s=t.N +return A.B8(A.p1(A.df("" expected',new A.lp(A.df("]]>"),0,9007199254740991,new A.mZ("input expected"),t.Po),t.Ii),A.df("]]>"),s,s,s),new A.aY9(),s,s,s,t.nT)}, +aPs(){var s=t.N,r=t.d0 +return A.aP6(A.bd1(A.df(""),s,r,s,s),new A.aYc(),s,r,s,s,t.UR)}, +aXT(){var s=t.WV,r=t.N +return A.aP6(A.bd1(A.df("" expected',new A.lp(A.df("?>"),0,9007199254740991,new A.mZ("input expected"),t.Po),t.Ii),r,r),new A.aYi(),r,r,r),t.mA),A.df("?>"),r,r,r,r),new A.aYj(),r,r,r,r,t.Mw)}, +aQa(){var s=this,r=A.df(""),t.n8),new A.aYg(),n,n,n,t.dd,n,t.ob,n,n,t.RN)}, +aQi(){var s=t.r0 +return A.uE(A.b([new A.bq(this.gaQl(),B.F,s),new A.bq(this.gaQj(),B.F,s)],t.Gv),null,t.aD)}, +aQm(){var s=t.N,r=t._0 +return A.B8(A.p1(A.df("SYSTEM"),new A.bq(this.gAG(),B.F,t.WV),new A.bq(this.gvm(),B.F,t.VJ),s,s,r),new A.aYe(),s,s,r,t.aD)}, +aQk(){var s=this.gAG(),r=t.WV,q=this.gvm(),p=t.VJ,o=t.N,n=t._0 +return A.bp3(A.buF(A.df("PUBLIC"),new A.bq(s,B.F,r),new A.bq(q,B.F,p),new A.bq(s,B.F,r),new A.bq(q,B.F,p),o,o,n,o,n),new A.aYd(),o,o,n,o,n,t.aD)}, +aQo(){var s,r=this,q=A.df("["),p=t.lk +p=A.uE(A.b([new A.bq(r.gaQd(),B.F,p),new A.bq(r.gaQb(),B.F,p),new A.bq(r.gaQf(),B.F,p),new A.bq(r.gaQp(),B.F,p),new A.bq(r.gah1(),B.F,t.hC),new A.bq(r.gac1(),B.F,t.ZV),new A.bq(r.gaQr(),B.F,p),new A.mZ("input expected")],t.Vz),null,t.z) +s=t.N +return A.B8(A.p1(q,new A.oa('"]" expected',new A.lp(A.df("]"),0,9007199254740991,p,t.mT),t.vo),A.df("]"),s,s,s),new A.aYf(),s,s,s,s)}, +aQe(){var s=A.df(""),0,9007199254740991,r,t.xj),A.df(">"),q,t.UX,q)}, +aQc(){var s=A.df(""),0,9007199254740991,r,t.xj),A.df(">"),q,t.UX,q)}, +aQg(){var s=A.df(""),0,9007199254740991,r,t.xj),A.df(">"),q,t.UX,q)}, +aQq(){var s=A.df(""),0,9007199254740991,r,t.xj),A.df(">"),q,t.UX,q)}, +aQs(){var s=t.N +return A.p1(A.df("%"),new A.bq(this.goI(),B.F,t.WV),A.df(";"),s,s,s)}, +am7(){var s="whitespace expected" +return A.bpf(new A.BM(B.uI,s),1,9007199254740991,s)}, +am8(){var s="whitespace expected" +return A.bpf(new A.BM(B.uI,s),0,9007199254740991,s)}, +aVO(){var s=t.WV,r=t.N +return new A.oa("name expected",A.buE(new A.bq(this.gaVM(),B.F,s),A.bgg(new A.bq(this.gaVK(),B.F,s),0,9007199254740991,r),r,t.yp),t.TJ)}, +aVN(){return A.buv(":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",null)}, +aVL(){return A.buv(":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-.0-9\xb7\u0300-\u036f\u203f-\u2040",null)}} +A.aYa.prototype={ +$1(a){var s=null +return new A.wX(a,this.a.a,s,s,s,s)}, +$S:961} +A.aYk.prototype={ +$5(a,b,c,d,e){var s=null +return new A.hZ(b,c,e==="/>",s,s,s,s)}, +$S:962} +A.aY8.prototype={ +$3(a,b,c){return new A.hD(b,this.a.a.hH(0,c.a),c.b,null)}, +$S:963} +A.aY4.prototype={ +$4(a,b,c,d){return d}, +$S:964} +A.aY5.prototype={ +$3(a,b,c){return new A.bI(b,B.tr)}, +$S:259} +A.aY7.prototype={ +$3(a,b,c){return new A.bI(b,B.aik)}, +$S:259} +A.aY6.prototype={ +$1(a){return new A.bI(a,B.tr)}, +$S:966} +A.aYh.prototype={ +$4(a,b,c,d){var s=null +return new A.jo(b,s,s,s,s)}, +$S:967} +A.aYb.prototype={ +$3(a,b,c){var s=null +return new A.oP(b,s,s,s,s)}, +$S:968} +A.aY9.prototype={ +$3(a,b,c){var s=null +return new A.nB(b,s,s,s,s)}, +$S:969} +A.aYc.prototype={ +$4(a,b,c,d){var s=null +return new A.mL(b,s,s,s,s)}, +$S:970} +A.aYi.prototype={ +$2(a,b){return b}, +$S:260} +A.aYj.prototype={ +$4(a,b,c,d){var s=null +return new A.oQ(b,c,s,s,s,s)}, +$S:972} +A.aYg.prototype={ +$8(a,b,c,d,e,f,g,h){var s=null +return new A.mM(c,d,f,s,s,s,s)}, +$S:973} +A.aYe.prototype={ +$3(a,b,c){return new A.hO(null,null,c.a,c.b)}, +$S:974} +A.aYd.prototype={ +$5(a,b,c,d,e){return new A.hO(c.a,c.b,e.a,e.b)}, +$S:975} +A.aYf.prototype={ +$3(a,b,c){return b}, +$S:976} +A.bc8.prototype={ +$1(a){return A.bUR(new A.bq(new A.aeQ(a).gaR9(),B.F,t.Lc),t.xo)}, +$S:977} +A.Eg.prototype={ +E(a,b){return this.a.$1(b)}, +T(a){}} +A.hD.prototype={ +gL(a){return A.a6(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a,b){if(b==null)return!1 +return b instanceof A.hD&&b.a===this.a&&b.b===this.b&&b.c===this.c}, +gfX(a){return this.a}} +A.asN.prototype={} +A.asO.prototype={} +A.TE.prototype={ +gXP(a){var s=this,r=B.d.f7(s.gfX(s),":") +return r>0?B.d.c5(s.gfX(s),r+1):s.gfX(s)}} +A.TD.prototype={ +b_9(a){return a.eJ(0,this)}, +ZS(a){}, +ZT(a){}, +ZU(a){}, +ZV(a){}, +ZX(a){}, +ZY(a){}, +ZZ(a){}, +a__(a){}} +A.bcI.prototype={ +$0(){return A.bTN()}, +$S:0} +A.bcH.prototype={ +$0(){var s,r=$.bAS(),q=$.biU(),p=new A.aXw(A.D(t.N,t.Oq)),o=$.bdo() +o.u(0,p,q) +$.bC4=p +q=$.bjl() +p=new A.aSC() +o.u(0,p,q) +A.boF(p,q,!0) +$.bK3=p +q=self +q=q.window +p=$.bjt() +s=new A.aX5(q) +o.u(0,s,p) +q=q.navigator +s.b=J.xG(q.userAgent,"Safari")&&!J.xG(q.userAgent,"Chrome") +A.boF(s,p,!0) +$.bLV=s +$.bAF() +$.bdp().Z2("__url_launcher::link",A.bTB(),!1) +$.buw=r.gaS7()}, +$S:0};(function aliases(){var s=A.ap2.prototype +s.aqV=s.af +s.ar0=s.bU +s.aqZ=s.bw +s.ar3=s.aJ +s.ar1=s.ff +s.ar_=s.oO +s.ar2=s.az +s.aqY=s.mZ +s.aqX=s.vp +s.aqW=s.m9 +s=A.Ee.prototype +s.an2=s.q_ +s=A.UJ.prototype +s.a1w=s.cJ +s=A.Fc.prototype +s.anG=s.PX +s=A.fT.prototype +s.aou=s.MT +s.a0Z=s.cY +s.GN=s.ym +s.a12=s.a8 +s.a11=s.q9 +s.a1_=s.oh +s.a10=s.F3 +s=A.hT.prototype +s.aos=s.nz +s.rV=s.a8 +s.aot=s.q9 +s.AX=s.oh +s=A.a9i.prototype +s.qq=s.fd +s.AY=s.t +s=A.M9.prototype +s.Or=s.zq +s.an8=s.ZJ +s.an6=s.mf +s.an7=s.Vn +s=A.a2p.prototype +s.a0G=s.T +s=A.r9.prototype +s.anq=s.t +s=J.Fx.prototype +s.anP=s.j +s.anO=s.a6 +s=J.rE.prototype +s.ao1=s.j +s=A.jI.prototype +s.anT=s.af5 +s.anU=s.af6 +s.anW=s.af8 +s.anV=s.af7 +s=A.x_.prototype +s.apX=s.xp +s=A.i_.prototype +s.apY=s.pb +s.apZ=s.xo +s=A.tX.prototype +s.aqc=s.xy +s.aqd=s.a4m +s.aqf=s.a8a +s.aqe=s.o5 +s=A.O.prototype +s.a0U=s.c3 +s=A.cv.prototype +s.an5=s.aRV +s=A.JY.prototype +s.arh=s.T +s=A.z.prototype +s.a0R=s.mz +s.anR=s.aZc +s.anQ=s.alG +s.anS=s.j +s=A.B.prototype +s.AU=s.k +s.du=s.j +s=A.n.prototype +s.amU=s.k +s.amV=s.j +s=A.a6T.prototype +s.ao4=s.qW +s.ao5=s.px +s=A.Et.prototype +s.an9=s.u +s.ana=s.E +s.anb=s.I +s.anc=s.hc +s.and=s.hO +s.ane=s.P +s.anf=s.di +s.ang=s.eQ +s.anh=s.hX +s.ani=s.j1 +s=A.lh.prototype +s.a0L=s.n +s=A.iE.prototype +s.amD=s.a8 +s=A.U7.prototype +s.aq1=s.aX +s=A.U8.prototype +s.aq2=s.aX +s=A.Up.prototype +s.aq3=s.oH +s=A.Va.prototype +s.aq9=s.aX +s=A.Z1.prototype +s.asa=s.aX +s=A.VV.prototype +s.aqm=s.aX +s=A.Wl.prototype +s.aqw=s.a8 +s=A.Wm.prototype +s.aqx=s.a8 +s=A.Wn.prototype +s.aqy=s.a8 +s=A.Wo.prototype +s.aqz=s.a8 +s=A.Wp.prototype +s.aqA=s.a8 +s=A.V4.prototype +s.aq8=s.aX +s=A.V5.prototype +s.aq7=s.aX +s=A.XX.prototype +s.arm=s.a8 +s=A.XY.prototype +s.arn=s.a8 +s=A.VW.prototype +s.aqn=s.aX +s=A.VX.prototype +s.aqo=s.n +s=A.VE.prototype +s.aqi=s.a8 +s=A.VU.prototype +s.aql=s.oH +s=A.U2.prototype +s.aq_=s.aX +s=A.Z3.prototype +s.asc=s.aX +s=A.lD.prototype +s.apM=s.kd +s.apN=s.ro +s.apO=s.Zy +s=A.N_.prototype +s.anr=s.jr +s=A.cP.prototype +s.lc=s.ic +s.AQ=s.kA +s.amQ=s.u2 +s=A.qV.prototype +s.amR=s.E +s.amS=s.P +s.amT=s.fZ +s=A.c6.prototype +s.apn=s.ic +s.apm=s.kA +s=A.y.prototype +s.c6=s.bo +s.ld=s.fI +s.en=s.n +s.cD=s.aX +s.p7=s.h3 +s.le=s.a8 +s.Op=s.oQ +s.GH=s.b4 +s.Oo=s.k6 +s.amW=s.mm +s.amX=s.uf +s=A.Dq.prototype +s.Ok=s.n +s.amB=s.aX +s.amC=s.iX +s=A.TN.prototype +s.apT=s.aX +s=A.TO.prototype +s.apU=s.aX +s=A.U3.prototype +s.aq0=s.aX +s=A.VF.prototype +s.aqj=s.aX +s=A.Xz.prototype +s.arg=s.aX +s=A.m7.prototype +s.a0S=s.jZ +s=A.tt.prototype +s.xg=s.b4 +s=A.au.prototype +s.aov=s.sC +s.a13=s.uf +s.OB=s.k6 +s=A.hx.prototype +s.xh=s.a8 +s=A.jW.prototype +s.apq=s.a8 +s=A.fv.prototype +s.a1m=s.aX +s.apr=s.b4 +s=A.BT.prototype +s.a1n=s.aX +s=A.qb.prototype +s.a1p=s.n +s.apw=s.aX +s.apx=s.b4 +s.apy=s.a8 +s=A.mF.prototype +s.apz=s.sd7 +s=A.p8.prototype +s.amY=s.aX +s=A.rr.prototype +s.GM=s.lM +s.Oy=s.mG +s.anI=s.iW +s=A.f1.prototype +s.a0I=s.bF +s=A.ex.prototype +s.Os=s.wh +s.AR=s.pV +s.anm=s.u3 +s=A.b_.prototype +s.nZ=s.cb +s.apt=s.iX +s=A.ae.prototype +s.Ov=s.oH +s.lR=s.b4 +s.fO=s.a8 +s.ans=s.oQ +s.a0M=s.fI +s=A.aD.prototype +s.anA=s.iz +s.anB=s.oH +s.anz=s.WI +s.anC=s.fI +s.nX=s.n +s.a0N=s.aX +s.anD=s.h3 +s.Ow=s.aXv +s.Ox=s.aYY +s=A.oh.prototype +s.anH=s.jZ +s=A.fB.prototype +s.Oz=s.jZ +s=A.hL.prototype +s.amP=s.n +s=A.da.prototype +s.apu=s.cb +s=A.jd.prototype +s.ao6=s.kB +s=A.a6_.prototype +s.ao_=s.ahO +s=A.TK.prototype +s.apS=s.a8 +s=A.ff.prototype +s.p8=s.a8 +s.qp=s.jD +s=A.SH.prototype +s.a1o=s.oq +s=A.YP.prototype +s.arS=s.t +s=A.DA.prototype +s.uI=s.n +s.amJ=s.Z7 +s=A.aB.prototype +s.anv=s.a8 +s=A.a3J.prototype +s.ant=s.h3 +s=A.dZ.prototype +s.Ol=s.N1 +s=A.PJ.prototype +s.aor=s.az +s=A.KF.prototype +s.Om=s.t +s=A.YC.prototype +s.arF=s.t +s=A.YD.prototype +s.arG=s.t +s=A.YE.prototype +s.arH=s.t +s=A.YF.prototype +s.arI=s.t +s=A.YT.prototype +s.arU=s.bc +s.arV=s.b3 +s=A.a_M.prototype +s.amG=s.kW +s.amH=s.w2 +s.amI=s.ZD +s=A.bu.prototype +s.amN=s.an +s.amO=s.ad +s.fN=s.t +s.On=s.D +s=A.cD.prototype +s.B1=s.sm +s=A.b0.prototype +s.anj=s.fu +s=A.n3.prototype +s.ank=s.fu +s=A.F9.prototype +s.anF=s.E8 +s.anE=s.aQ_ +s=A.lt.prototype +s.ao2=s.mp +s=A.EA.prototype +s.ann=s.jg +s=A.u4.prototype +s.a1A=s.ki +s=A.ed.prototype +s.a0O=s.J4 +s.xc=s.mp +s.GL=s.t +s=A.Pt.prototype +s.AV=s.jg +s.a0X=s.zl +s.a0Y=s.aG +s.nY=s.t +s.aok=s.rS +s=A.GL.prototype +s.aow=s.jg +s.a14=s.kn +s.aox=s.j0 +s=A.jk.prototype +s.apv=s.mp +s=A.XJ.prototype +s.arj=s.jW +s.ark=s.j0 +s=A.TU.prototype +s.apV=s.jg +s.apW=s.t +s=A.Yy.prototype +s.arB=s.t +s=A.YA.prototype +s.arC=s.t +s=A.YB.prototype +s.arE=s.bu +s.arD=s.t +s=A.YJ.prototype +s.arL=s.t +s=A.YN.prototype +s.arQ=s.bu +s.arP=s.ht +s=A.Yx.prototype +s.arA=s.t +s=A.YM.prototype +s.arO=s.t +s=A.YO.prototype +s.arR=s.t +s=A.pu.prototype +s.qo=s.t +s=A.Z5.prototype +s.asg=s.t +s=A.Z6.prototype +s.ash=s.t +s=A.X0.prototype +s.ar4=s.t +s=A.X1.prototype +s.ar5=s.t +s=A.X2.prototype +s.ar7=s.bH +s.ar6=s.cR +s.ar8=s.t +s=A.YK.prototype +s.arM=s.t +s=A.YV.prototype +s.arY=s.bc +s.arZ=s.b3 +s=A.YX.prototype +s.as1=s.bc +s.as2=s.b3 +s=A.Z0.prototype +s.as9=s.t +s=A.Z4.prototype +s.ase=s.bH +s.asd=s.cR +s.asf=s.t +s=A.Y_.prototype +s.aro=s.t +s=A.L2.prototype +s.amL=s.Oj +s.amK=s.E +s=A.dH.prototype +s.OM=s.hd +s.ON=s.he +s=A.ht.prototype +s.xd=s.hd +s.xe=s.he +s=A.km.prototype +s.a0C=s.hd +s.a0D=s.he +s=A.uB.prototype +s.a0A=s.t +s=A.f0.prototype +s.a0H=s.E +s=A.agk.prototype +s.a1u=s.t +s=A.zI.prototype +s.anK=s.an +s.anL=s.ad +s.anJ=s.HR +s=A.ia.prototype +s.a0Q=s.k +s=A.kF.prototype +s.apl=s.k +s=A.Sa.prototype +s.app=s.iB +s=A.Ha.prototype +s.aoX=s.WX +s.aoZ=s.Xa +s.aoY=s.X_ +s.aoW=s.Va +s=A.bb.prototype +s.amM=s.k +s=A.j0.prototype +s.AP=s.j +s=A.Y.prototype +s.GO=s.iO +s.xf=s.aB +s.aoD=s.zN +s.p9=s.dK +s.a1c=s.eK +s=A.Wy.prototype +s.aqB=s.bc +s.aqC=s.b3 +s=A.WA.prototype +s.aqD=s.bc +s.aqE=s.b3 +s=A.WB.prototype +s.aqF=s.bc +s.aqG=s.b3 +s=A.WC.prototype +s.aqH=s.t +s=A.ic.prototype +s.anX=s.Bo +s.a0T=s.t +s.ao0=s.Nd +s.anY=s.bc +s.anZ=s.b3 +s=A.j5.prototype +s.uJ=s.ia +s.an0=s.bc +s.an1=s.b3 +s=A.or.prototype +s.aoj=s.ia +s=A.eg.prototype +s.AW=s.b3 +s=A.L.prototype +s.ja=s.t +s.a1d=s.kL +s.fg=s.bc +s.fh=s.b3 +s.aoG=s.aB +s.OF=s.dc +s.aoH=s.bi +s.aoE=s.eK +s.aoI=s.Gb +s.lf=s.iR +s.OE=s.vo +s.uM=s.jx +s.a1e=s.yw +s.aoF=s.ow +s.aoJ=s.fu +s.a1f=s.iG +s=A.bx.prototype +s.a1j=s.k5 +s=A.aZ.prototype +s.Oq=s.Xn +s.an4=s.P +s.an3=s.EE +s.a0B=s.k5 +s.GJ=s.cc +s=A.we.prototype +s.OD=s.B4 +s=A.kV.prototype +s.aqh=s.Jf +s=A.WJ.prototype +s.aqI=s.bc +s.aqJ=s.b3 +s=A.XP.prototype +s.arl=s.b3 +s=A.jh.prototype +s.OK=s.c1 +s.OI=s.bZ +s.OJ=s.c_ +s.OH=s.c2 +s.aoM=s.dA +s.uN=s.cM +s.B_=s.dZ +s.aoL=s.eK +s.lS=s.aO +s=A.QP.prototype +s.aoN=s.dK +s=A.WL.prototype +s.B2=s.bc +s.uO=s.b3 +s=A.WM.prototype +s.aqK=s.iO +s=A.Bd.prototype +s.aoR=s.c1 +s.aoP=s.bZ +s.aoQ=s.c_ +s.aoO=s.c2 +s.aoT=s.aO +s.aoS=s.dZ +s=A.WO.prototype +s.a1x=s.bc +s.a1y=s.b3 +s=A.ww.prototype +s.apo=s.j +s=A.WQ.prototype +s.aqL=s.bc +s.aqM=s.b3 +s=A.QS.prototype +s.aoU=s.cM +s=A.Bf.prototype +s.aoV=s.YL +s=A.nG.prototype +s.aqO=s.bc +s.aqP=s.b3 +s=A.mJ.prototype +s.apQ=s.EF +s.apP=s.hu +s=A.iQ.prototype +s.apc=s.WR +s=A.Ce.prototype +s.a1r=s.t +s=A.a_a.prototype +s.a0y=s.rn +s=A.Hz.prototype +s.apj=s.DZ +s.apk=s.tU +s=A.rL.prototype +s.ao3=s.lm +s=A.cm.prototype +s.a0x=s.jM +s.amz=s.ri +s.amy=s.Tp +s.amA=s.MJ +s=A.uv.prototype +s.GG=s.ab +s=A.fY.prototype +s.apR=s.vx +s=A.WU.prototype +s.a1z=s.hA +s=A.Yn.prototype +s.arp=s.kW +s.arq=s.ZD +s=A.Yo.prototype +s.arr=s.kW +s.ars=s.w2 +s=A.Yp.prototype +s.art=s.kW +s.aru=s.w2 +s=A.Yq.prototype +s.arw=s.kW +s.arv=s.DZ +s=A.Yr.prototype +s.arx=s.kW +s=A.Ys.prototype +s.ary=s.kW +s.arz=s.w2 +s=A.YG.prototype +s.arJ=s.t +s=A.YH.prototype +s.arK=s.bu +s=A.UX.prototype +s.aq5=s.bu +s=A.UY.prototype +s.aq6=s.t +s=A.a3S.prototype +s.xb=s.aTU +s.anu=s.U_ +s=A.m4.prototype +s.anw=s.Kh +s.any=s.l3 +s.anx=s.t +s=A.Jb.prototype +s.aqa=s.bH +s.aqb=s.t +s=A.aF.prototype +s.bN=s.bu +s.c7=s.bH +s.rX=s.ht +s.eD=s.dd +s.bG=s.t +s.fP=s.cR +s=A.b6.prototype +s.a1i=s.bI +s=A.b7.prototype +s.ano=s.h6 +s.Ou=s.hA +s.xa=s.a8 +s.anp=s.FL +s.a0K=s.zp +s.mI=s.lB +s.AS=s.dd +s.a0J=s.ht +s.AT=s.qc +s.GK=s.tz +s.Ot=s.cR +s.uK=s.nu +s=A.LR.prototype +s.GI=s.hA +s.amZ=s.Qr +s.an_=s.nu +s=A.HS.prototype +s.aps=s.cY +s=A.Qd.prototype +s.a15=s.cY +s.a16=s.a8 +s.aoy=s.FM +s=A.jG.prototype +s.anN=s.FM +s.a0P=s.u1 +s=A.bX.prototype +s.rW=s.hA +s.qr=s.a8 +s.OG=s.nu +s.a1g=s.ht +s.a1h=s.qc +s.aoK=s.FL +s=A.mh.prototype +s.a0V=s.mo +s.a0W=s.mr +s.ao8=s.nB +s.ao7=s.hA +s.ao9=s.a8 +s=A.Fo.prototype +s.anM=s.bu +s=A.Jk.prototype +s.aqg=s.t +s=A.eA.prototype +s.apa=s.w3 +s.ap7=s.UY +s.ap2=s.UP +s.ap8=s.aPW +s.apb=s.nK +s.ap5=s.vy +s.ap6=s.UX +s.ap3=s.US +s.ap4=s.aPS +s.ap1=s.ps +s.a1l=s.aNo +s.ap9=s.t +s=A.aoD.prototype +s.aqS=s.JK +s=A.W4.prototype +s.aqp=s.dd +s.aqq=s.t +s=A.W5.prototype +s.aqs=s.bH +s.aqr=s.cR +s.aqt=s.t +s=A.a7E.prototype +s.OA=s.hu +s=A.CZ.prototype +s.aqN=s.aO +s=A.YW.prototype +s.as_=s.bc +s.as0=s.b3 +s=A.W9.prototype +s.aqu=s.hu +s=A.YL.prototype +s.arN=s.t +s=A.Z2.prototype +s.asb=s.t +s=A.hw.prototype +s.b_y=s.t +s=A.nn.prototype +s.ap0=s.V0 +s=A.dv.prototype +s.a1k=s.sm +s=A.mO.prototype +s.aqQ=s.zk +s.aqR=s.A4 +s=A.Kb.prototype +s.as4=s.bH +s.as3=s.cR +s.as5=s.t +s=A.Gs.prototype +s.aoq=s.w3 +s.aoo=s.vy +s.aop=s.t +s=A.hX.prototype +s.a1t=s.w3 +s.apD=s.UY +s.apB=s.UP +s.apC=s.vy +s.a1s=s.UX +s.OO=s.US +s=A.CU.prototype +s.aqk=s.nK +s=A.ab_.prototype +s.GP=s.t +s=A.kD.prototype +s.B0=s.hu +s=A.X7.prototype +s.ara=s.hu +s=A.Hp.prototype +s.apd=s.Jg +s=A.tq.prototype +s.ape=s.yg +s.OL=s.al3 +s.apf=s.Cw +s.apg=s.mX +s.api=s.t +s.aph=s.hu +s=A.X5.prototype +s.ar9=s.hu +s=A.Xc.prototype +s.arb=s.t +s=A.Xd.prototype +s.are=s.bH +s.ard=s.cR +s.arf=s.t +s=A.pS.prototype +s.a1b=s.bu +s.aoz=s.cR +s.aoC=s.L4 +s.a1a=s.L6 +s.a19=s.L5 +s.aoA=s.WT +s.aoB=s.WU +s.a18=s.t +s=A.JI.prototype +s.aqv=s.t +s=A.Ge.prototype +s.aoa=s.UT +s.aog=s.aSU +s.aoh=s.aSV +s.aod=s.aRY +s.aof=s.aS9 +s.aoe=s.aS_ +s.aoi=s.X2 +s.aoc=s.t +s.aob=s.kq +s=A.YY.prototype +s.as6=s.t +s=A.YU.prototype +s.arW=s.bc +s.arX=s.b3 +s=A.SU.prototype +s.a1q=s.zH +s.apA=s.zJ +s=A.YZ.prototype +s.as7=s.t +s=A.Z_.prototype +s.as8=s.t +s=A.a_E.prototype +s.amF=s.aRp +s=A.uS.prototype +s.anl=s.zI +s=A.o4.prototype +s.a0F=s.z5 +s=A.Dz.prototype +s.a0z=s.lw +s=A.YQ.prototype +s.arT=s.t +s=A.jv.prototype +s.x9=s.j4 +s.amE=s.eW +s=A.kx.prototype +s.aol=s.E +s.aon=s.P +s.aom=s.af +s=A.jQ.prototype +s.OC=s.E +s.AZ=s.P +s.a17=s.af +s=A.ba.prototype +s.uL=s.nD +s.rU=s.j +s=A.h6.prototype +s.a0E=s.nD +s=A.kU.prototype +s.a1v=s.t +s.aq4=s.TR +s=A.WS.prototype +s.aqT=s.a8 +s=A.WT.prototype +s.aqU=s.a8 +s=A.XI.prototype +s.ari=s.a8 +s=A.a.prototype +s.mJ=s.p +s.apJ=s.cv +s.a7=s.v +s.apK=s.ag +s.apI=s.e0 +s.rY=s.E +s.apE=s.vf +s.apL=s.aq +s.apH=s.bL +s.OP=s.au +s.apF=s.bX +s.apG=s.JB +s.eX=s.sN +s.dT=s.sO})();(function installTearOffs(){var s=hunkHelpers._static_2,r=hunkHelpers._static_1,q=hunkHelpers.installStaticTearOff,p=hunkHelpers._instance_0u,o=hunkHelpers._instance_1u,n=hunkHelpers._instance_1i,m=hunkHelpers._instance_2u,l=hunkHelpers._static_0,k=hunkHelpers.installInstanceTearOff,j=hunkHelpers._instance_0i +s(A,"bP2","bRu",260) +r(A,"bP0","bCa",2) +q(A,"bsu",1,function(){return{params:null}},["$2$params","$1"],["bsq",function(a){return A.bsq(a,null)}],979,0) +r(A,"bP1","bPW",29) +r(A,"auP","bOY",36) +p(A.Ku.prototype,"gSN","aKe",0) +o(A.n0.prototype,"gadm","tD",416) +o(A.a5_.prototype,"gadc","ade",13) +o(A.a0M.prototype,"gaLT","aLU",632) +var i +o(i=A.Ll.prototype,"gaEh","aEi",13) +o(i,"gaEj","aEk",13) +o(i=A.oF.prototype,"gavk","avl",2) +o(i,"gavi","avj",2) +n(i=A.a3t.prototype,"gkJ","E",292) +p(i,"gamg","x4",15) +n(A.aqF.prototype,"gF","aUr",331) +o(A.a5T.prototype,"gaDX","aDY",164) +n(A.P3.prototype,"gYp","Yq",11) +n(A.RY.prototype,"gYp","Yq",11) +o(A.a4Q.prototype,"gaDT","aDU",2) +p(i=A.a3h.prototype,"geL","t",0) +o(i,"gaU0","aU1",442) +o(i,"ga8b","aHv",159) +o(i,"ga9Y","aKY",7) +o(A.aei.prototype,"gaBF","aBG",13) +m(i=A.a0T.prototype,"gaWs","aWt",471) +p(i,"gaEb","aEc",0) +o(A.Ie.prototype,"gaFx","aFy",695) +o(A.ac1.prototype,"gaV4","XW",696) +p(A.aaR.prototype,"geL","t",0) +o(i=A.a1o.prototype,"gaz2","az3",2) +o(i,"gaz4","az5",2) +o(i,"gaz0","az1",2) +o(i=A.M9.prototype,"gDX","aeo",2) +o(i,"gL_","aRX",2) +o(i,"gEC","aV3",2) +o(A.a48.prototype,"gaEl","aEm",2) +o(A.a2w.prototype,"gaDJ","aDK",2) +o(A.Na.prototype,"gaQ3","ada",267) +p(i=A.r9.prototype,"geL","t",0) +o(i,"gaw9","awa",322) +p(A.EL.prototype,"geL","t",0) +s(J,"bPA","bGd",261) +n(i=J.v.prototype,"gq8","P",27) +n(i,"gaLR","I",11) +n(J.px.prototype,"gaR0","iT",25) +n(A.oS.prototype,"gpt","G",27) +l(A,"bPO","bIz",106) +n(A.i4.prototype,"gpt","G",27) +n(A.h8.prototype,"gpt","G",27) +r(A,"bRb","bMr",46) +r(A,"bRc","bMs",46) +r(A,"bRd","bMt",46) +l(A,"bth","bQn",0) +r(A,"bRe","bPX",36) +s(A,"bRg","bPZ",107) +l(A,"bRf","bPY",0) +q(A,"bRh",4,null,["$4"],["b9v"],981,0) +p(i=A.CF.prototype,"gHY","t9",0) +p(i,"gI_","ta",0) +n(i=A.x_.prototype,"gkJ","E",11) +k(i,"gaM_",0,1,function(){return[null]},["$2","$1"],["J8","J7"],145,0,0) +k(A.CJ.prototype,"gaO_",0,1,function(){return[null]},["$2","$1"],["lq","n_"],145,0,0) +m(A.aM.prototype,"gPD","jc",107) +n(A.JV.prototype,"gkJ","E",11) +p(i=A.x2.prototype,"gHY","t9",0) +p(i,"gI_","ta",0) +p(i=A.i_.prototype,"gHY","t9",0) +p(i,"gI_","ta",0) +p(A.UM.prototype,"ga6C","aDZ",0) +p(i=A.Jc.prototype,"gHY","t9",0) +p(i,"gI_","ta",0) +o(i,"gaz8","az9",11) +m(i,"gazz","azA",359) +p(i,"gazf","azg",0) +s(A,"big","bOQ",118) +r(A,"bih","bOR",119) +s(A,"bRA","bOX",261) +k(i=A.qo.prototype,"gRI",0,0,null,["$1$0","$0"],["BM","RJ"],116,0,0) +n(i,"gpt","G",27) +k(i=A.lJ.prototype,"gRI",0,0,null,["$1$0","$0"],["BM","RJ"],116,0,0) +n(i,"gpt","G",27) +n(A.Iw.prototype,"gpt","G",27) +k(i=A.HR.prototype,"gaDp",0,0,null,["$1$0","$0"],["a6t","xU"],116,0,0) +n(i,"gpt","G",27) +r(A,"bbW","bOU",131) +j(A.VG.prototype,"gU4","T",0) +n(i=A.agj.prototype,"gkJ","E",11) +j(i,"gU4","T",0) +k(A.aky.prototype,"gatl",0,3,null,["$3"],["atm"],370,0,0) +r(A,"btw","bT8",119) +q(A,"bRU",1,function(){return{onError:null,radix:null}},["$3$onError$radix","$1","$2$onError"],["et",function(a){return A.et(a,null,null)},function(a,b){return A.et(a,b,null)}],982,0) +s(A,"btv","bT7",118) +s(A,"btt","bCY",983) +r(A,"bRS","bLU",45) +l(A,"bRT","bO5",984) +s(A,"btu","bQB",985) +n(A.z.prototype,"gpt","G",27) +n(i=A.d8.prototype,"gb_n","wF",11) +k(i,"gb_r",0,0,null,["$1","$0"],["ajn","b_s"],377,0,0) +q(A,"bTS",2,null,["$1$2","$2"],["bud",function(a,b){return A.bud(a,b,t.Jy)}],986,1) +q(A,"Zq",3,null,["$3"],["aSV"],987,0) +q(A,"Zr",3,null,["$3"],["ap"],988,0) +q(A,"dq",3,null,["$3"],["Z"],989,0) +o(A.XC.prototype,"gafa","hP",29) +p(A.tT.prototype,"ga3U","awu",0) +q(A,"bRi",0,null,["$2$cacheId$prefix","$0","$1$prefix"],["be_",function(){return A.be_(null,"assets/")},function(a){return A.be_(null,a)}],990,0) +j(A.xX.prototype,"gajV","Ae",439) +o(A.a42.prototype,"gaFC","a74",452) +m(i=A.M8.prototype,"gaR5","eN",118) +n(i,"gaT5","f6",119) +o(i,"gaUf","aUg",27) +o(A.LO.prototype,"gaNm","aNn",485) +o(A.Ja.prototype,"gaDt","aDu",503) +k(i=A.Me.prototype,"gb_0",0,0,function(){return[1]},["$1","$0"],["aiP","b_1"],510,0,0) +o(i,"gaZV","ZH",513) +j(i,"gaZ5","aZ6",0) +p(i,"gaZx","aZy",0) +j(i,"gZb","bF",0) +p(A.us.prototype,"gags","Yu",0) +p(i=A.ux.prototype,"gaRw","aRx",0) +p(i,"gaRy","aRz",0) +l(A,"bRN","bD3",991) +l(A,"bSt","bDR",992) +l(A,"bSU","bFr",993) +l(A,"bSW","bFv",994) +l(A,"bTV","bHk",995) +l(A,"bTW","bHl",996) +l(A,"bUI","bIL",997) +l(A,"bUJ","bIQ",998) +l(A,"bUS","bJg",999) +l(A,"bUT","bJh",1000) +l(A,"bWu","bMe",1001) +n(A.w9.prototype,"gwi","kB",50) +r(A,"bV5","bi0",40) +p(A.Lk.prototype,"gauC","H3",15) +p(i=A.Mi.prototype,"gaDB","aDC",0) +p(i,"gayw","ayx",0) +o(i,"gaDz","aDA",13) +o(A.vu.prototype,"gaZS","aZT",13) +p(A.vv.prototype,"gamd","GB",15) +p(A.v3.prototype,"ghT","h4",0) +p(A.wt.prototype,"ghT","h4",0) +p(A.uD.prototype,"gYl","EO",6) +l(A,"bSL","bEX",1002) +n(A.wa.prototype,"gwi","kB",50) +p(i=A.wb.prototype,"ghT","h4",0) +n(i,"gwi","kB",50) +p(A.E3.prototype,"gaYR","Fh",0) +l(A,"bV8","bKh",1003) +l(A,"bWl","bLD",1004) +p(A.CH.prototype,"gaGy","aGz",0) +p(A.uW.prototype,"ghT","h4",0) +p(A.vO.prototype,"ghT","h4",0) +p(A.wm.prototype,"ghT","h4",0) +p(A.wu.prototype,"ghT","h4",0) +n(A.vH.prototype,"gwi","kB",50) +n(A.vI.prototype,"gwi","kB",50) +n(A.vr.prototype,"gwi","kB",50) +p(i=A.vN.prototype,"ghT","h4",0) +p(i,"gLZ","wf",0) +s(A,"bUd","bQ6",1005) +r(A,"bUe","bUb",53) +p(A.rU.prototype,"ghT","h4",0) +p(i=A.w_.prototype,"ghT","h4",0) +p(i,"gLZ","wf",0) +p(i=A.wL.prototype,"ghT","h4",0) +p(i,"gLZ","wf",0) +r(A,"bS8","bS7",53) +p(A.uP.prototype,"ghT","h4",0) +r(A,"bUB","bUA",53) +r(A,"bVF","bVC",53) +r(A,"bVG","bVD",53) +r(A,"bVH","bVE",53) +m(i=A.NG.prototype,"gaVb","aVc",327) +m(i,"gaW3","aW4",328) +p(A.to.prototype,"gaLq","T9",0) +p(A.uG.prototype,"gaFF","a77",0) +k(i=A.y.prototype,"gaYJ",0,1,null,["$1"],["k6"],207,0,1) +n(i,"gq8","P",42) +q(A,"btq",0,null,["$2$comparator$strictMode","$0"],["ble",function(){return A.ble(null,null)}],1007,0) +l(A,"aQ","bN7",1008) +p(A.Dq.prototype,"gaLn","jN",0) +p(A.NN.prototype,"gaL7","T0",0) +p(A.E5.prototype,"ga37","Bc",0) +o(i=A.au.prototype,"gaXI","YJ",206) +o(i,"gaLK","eA",206) +p(i,"gaRE","aRF",0) +p(i,"gaRG","aRH",0) +p(i,"gaE_","i3",0) +p(A.hx.prototype,"gSC","aJE",0) +p(A.jW.prototype,"gaJF","aJG",0) +p(A.fv.prototype,"gSD","aJH",0) +p(A.BT.prototype,"gayM","ayN",0) +p(A.Im.prototype,"gzK","ER",0) +o(i=A.P5.prototype,"gE0","X4",13) +o(i,"gE1","X5",13) +m(i,"gvZ","X7",96) +m(i,"gw_","X9",198) +m(i,"gWV","WW",96) +o(A.Q1.prototype,"gaAr","aAs",137) +o(i=A.Gf.prototype,"gE0","X4",13) +o(i,"gE1","X5",13) +m(i,"gvZ","X7",96) +m(i,"gw_","X9",198) +m(i,"gWV","WW",96) +o(A.NE.prototype,"ga5t","aBJ",363) +k(A.aD.prototype,"gaYo",0,0,null,["$1$isInternalRefresh","$0"],["Fe","zU"],271,0,0) +o(A.a4c.prototype,"gaxN","axO",3) +o(A.Np.prototype,"gajC","ajD",54) +p(i=A.F7.prototype,"gRP","aDQ",0) +m(i,"gazQ","azR",124) +o(A.Pz.prototype,"gatr","a1U",25) +k(i=A.wN.prototype,"gaUM",0,1,function(){return{output:null}},["$2$output","$1"],["ro","wb"],382,0,0) +p(i,"gaCS","aCT",0) +p(i=A.da.prototype,"ghT","h4",0) +p(i,"gags","Yu",0) +o(i,"gw_","X8",51) +o(i,"gvZ","X6",19) +p(i=A.pf.prototype,"gLZ","wf",0) +p(i,"gaW5","aW6",0) +o(i,"gaS0","aS1",19) +p(i=A.pP.prototype,"gYl","EO",0) +o(i,"gaSo","aSp",97) +o(i,"gaSs","aSt",35) +o(i,"gaSu","aSv",14) +o(i,"gaSq","aSr",32) +o(i=A.pX.prototype,"gaSI","aSJ",391) +o(i,"gaSK","aSL",392) +o(i,"gaSG","aSH",393) +n(A.jd.prototype,"gwi","kB",50) +o(A.Sf.prototype,"gakm","lL",191) +q(A,"buM",0,null,["$2$style$textDirection","$0","$1$style"],["bgY",function(){return A.bgY(null,B.r)},function(a){return A.bgY(a,B.r)}],1009,0) +p(i=A.VD.prototype,"gaDw","aDx",0) +p(i,"gaF1","a7_",0) +p(A.IV.prototype,"ga68","aCC",0) +m(A.a9L.prototype,"gaG7","aG8",417) +r(A,"bUQ","bOS",1010) +r(A,"bW4","bOT",74) +k(i=A.Dt.prototype,"gai4",1,0,function(){return{from:null}},["$1$from","$0"],["ai5","ex"],429,0,0) +o(i,"gawb","awc",430) +o(i,"gP8","atF",3) +o(A.oy.prototype,"gyb","ID",5) +o(A.M1.prototype,"ga9P","a9Q",5) +o(i=A.Co.prototype,"gyb","ID",5) +p(i,"gTc","aLw",0) +o(i=A.E9.prototype,"ga6k","aD4",5) +p(i,"ga6j","aD3",0) +p(A.xS.prototype,"gfa","D",0) +o(A.ut.prototype,"gag6","EH",5) +o(i=A.Ut.prototype,"gaBn","aBo",19) +o(i,"gaBt","aBu",51) +p(i,"gaBl","aBm",0) +o(A.Uu.prototype,"gaWh","aWi",7) +o(i=A.Uv.prototype,"gaDL","aDM",79) +o(i,"gaDN","aDO",60) +p(A.Ux.prototype,"gRv","a6b",0) +o(i=A.J0.prototype,"gazm","azn",35) +o(i,"gazo","azp",14) +o(i,"gazk","azl",32) +p(i,"gazh","azi",0) +o(i,"gaGO","aGP",80) +p(A.Uw.prototype,"gaeD","L4",0) +q(A,"bW1",4,null,["$4"],["bDg"],1011,0) +o(i=A.UA.prototype,"gaDV","aDW",32) +p(i,"gaAd","a5g",0) +p(i,"gaAD","a5i",0) +o(i,"gIE","aJQ",5) +o(i=A.Uy.prototype,"gaE6","aE7",19) +o(i,"gaE8","aE9",51) +p(i,"gaE4","aE5",0) +o(i=A.T7.prototype,"gaKn","aKo",19) +k(i,"ga9m",0,0,function(){return[null]},["$1","$0"],["a9n","aKm"],135,0,0) +k(i,"ga9o",0,0,null,["$1","$0"],["a9p","aKp"],180,0,0) +o(i,"gaKk","aKl",7) +q(A,"bRa",1,null,["$2$forceReport","$1"],["bmD",function(a){return A.bmD(a,!1)}],1012,0) +n(i=A.bu.prototype,"gJb","an",46) +n(i,"gahI","ad",46) +p(i,"geL","t",0) +p(i,"gfa","D",0) +r(A,"bVI","bKq",1013) +o(i=A.F9.prototype,"gaAm","aAn",450) +o(i,"gaw5","aw6",451) +o(i,"gaNf","aNg",13) +p(i,"gaxB","Qu",0) +o(i,"gaAq","a5h",17) +p(i,"gaAJ","aAK",0) +q(A,"bSS",3,null,["$3"],["bFn"],1014,0) +o(A.od.prototype,"gml","jW",17) +r(A,"bu7","bGN",40) +r(A,"bcK","bEf",222) +r(A,"bcL","bEg",40) +q(A,"bTU",0,function(){return{allowedButtonsFilter:null,debugOwner:null,supportedDevices:null}},["$3$allowedButtonsFilter$debugOwner$supportedDevices","$0"],["bor",function(){return A.bor(null,null,null)}],1015,0) +o(A.EA.prototype,"gml","jW",17) +r(A,"bTX","bHp",40) +q(A,"biC",0,function(){return{allowedButtonsFilter:null,debugOwner:null,supportedDevices:null}},["$3$allowedButtonsFilter$debugOwner$supportedDevices","$0"],["bn7",function(){return A.bn7(null,null,null)}],1016,0) +o(i=A.P1.prototype,"ga6p","aDi",17) +o(i,"gaGj","BU",13) +q(A,"bue",0,function(){return{allowedButtonsFilter:null,debugOwner:null,supportedDevices:null}},["$3$allowedButtonsFilter$debugOwner$supportedDevices","$0"],["bmj",function(){return A.bmj(null,null,null)}],1017,0) +r(A,"bTZ","bEe",40) +q(A,"av8",0,function(){return{allowedButtonsFilter:null,debugOwner:null,longTapDelay:B.G,supportedDevices:null}},["$4$allowedButtonsFilter$debugOwner$longTapDelay$supportedDevices","$0"],["bob",function(){return A.bob(null,null,B.G,null)}],1018,0) +p(A.Uq.prototype,"ga6D","aEa",0) +o(i=A.le.prototype,"gHW","aDj",17) +o(i,"gaGd","BT",458) +p(i,"gaDk","v_",0) +o(A.K0.prototype,"gml","jW",17) +r(A,"Dd","bFw",40) +o(A.GL.prototype,"gml","jW",17) +q(A,"bUZ",0,function(){return{allowedButtonsFilter:null,debugOwner:null,dragStartBehavior:B.jA,supportedDevices:null,trackpadScrollCausesScale:!1,trackpadScrollToScaleFactor:B.Df}},["$6$allowedButtonsFilter$debugOwner$dragStartBehavior$supportedDevices$trackpadScrollCausesScale$trackpadScrollToScaleFactor","$0"],["bpn",function(){return A.bpn(null,null,B.jA,null,!1,B.Df)}],1019,0) +o(A.pY.prototype,"gml","jW",17) +q(A,"bVZ",0,function(){return{allowedButtonsFilter:null,debugOwner:null,supportedDevices:null}},["$3$allowedButtonsFilter$debugOwner$supportedDevices","$0"],["bq5",function(){return A.bq5(null,null,null)}],1020,0) +o(i=A.XJ.prototype,"gml","jW",17) +p(i,"gavd","avf",0) +o(A.KW.prototype,"gml","jW",17) +m(i=A.VM.prototype,"gaC7","aC8",468) +m(i,"gaCX","aCY",141) +o(i=A.WF.prototype,"gc0","c1",1) +o(i,"gcd","c_",1) +o(i,"gbY","bZ",1) +o(i,"gcG","c2",1) +p(A.U4.prototype,"gvY","X3",0) +o(i=A.WE.prototype,"gc0","c1",1) +o(i,"gcd","c_",1) +o(i,"gbY","bZ",1) +o(i,"gcG","c2",1) +p(A.Lp.prototype,"gaBC","aBD",0) +q(A,"bSr",4,null,["$4"],["bOk"],1021,0) +o(i=A.J6.prototype,"gawD","awE",7) +p(i,"gaAg","aAh",0) +p(A.J3.prototype,"gaBk","R2",0) +p(i=A.V9.prototype,"gax8","ax9",0) +m(i,"gau_","au0",141) +o(i=A.Ww.prototype,"gc0","c1",1) +o(i,"gcd","c_",1) +p(i=A.Vy.prototype,"gaAF","aAG",0) +o(i,"gatW","atX",18) +p(A.NV.prototype,"gaC_","aC0",0) +o(A.vk.prototype,"gayD","ayE",5) +o(A.NX.prototype,"gaC2","aC3",5) +o(A.NY.prototype,"gaC4","aC5",5) +o(i=A.NW.prototype,"gake","akf",507) +o(i,"gaPo","aPp",508) +o(i=A.Vw.prototype,"gaLO","aLP",509) +k(i,"galC",0,0,null,["$1","$0"],["a0g","alD"],135,0,0) +p(i,"gvY","X3",0) +o(i,"gaeu","aS4",172) +o(i,"gaS5","aS6",7) +o(i,"gvZ","X6",19) +o(i,"gw_","X8",51) +o(i,"gaSQ","aSR",19) +o(i,"gaSS","aST",51) +p(i,"gE0","aeA",0) +p(i,"gE1","aSY",0) +p(i,"gaSM","aSN",0) +p(i,"gaSO","aSP",0) +o(i,"gaSj","aSk",79) +o(i,"gaSl","aSm",60) +p(A.Vp.prototype,"gRf","Rg",0) +o(i=A.Wz.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i,"gauE","auF",168) +m(i,"gaEx","aEy",9) +p(A.VC.prototype,"gRf","Rg",0) +o(i=A.WI.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +p(A.XO.prototype,"gQ5","a3D",0) +p(i=A.Ka.prototype,"gzF","aVX",0) +o(i,"gzE","aVW",5) +o(i=A.Yu.prototype,"gBN","RQ",36) +p(i,"geL","t",0) +o(i=A.Yv.prototype,"gBN","RQ",36) +p(i,"geL","t",0) +o(A.Rf.prototype,"gaB7","aB8",5) +o(i=A.Vd.prototype,"gaAB","aAC",5) +p(i,"gaE1","aE2",0) +p(A.Hm.prototype,"gaBh","aBi",0) +q(A,"buD",3,null,["$3"],["bPP"],1022,0) +s(A,"bV3","bJI",143) +o(i=A.apn.prototype,"gYg","zH",39) +o(i,"gYf","EN",39) +o(i,"gYs","zJ",89) +o(i,"gagq","Yr",104) +o(i,"gagr","Yt",157) +p(i=A.Xf.prototype,"ga6y","aDD",0) +m(i,"gaHk","aHl",155) +p(i,"gaHm","aHn",0) +o(i=A.Xo.prototype,"gayW","ayX",54) +o(i,"gSA","SB",54) +o(i,"gSy","Sz",54) +o(i,"gat9","ata",535) +o(i,"gaI9","aIa",7) +o(i,"gaIb","aIc",7) +p(i=A.JO.prototype,"gawV","Qf",0) +o(i,"gSA","SB",35) +o(i,"gaI7","aI8",14) +o(i,"gSy","Sz",32) +o(i,"gaId","aIe",19) +o(i,"gaIf","aIg",51) +o(i,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +p(i,"gaTu","aeU",0) +p(i,"gaPz","acU",0) +o(A.Xq.prototype,"gRM","aDv",5) +s(A,"buL","bL3",143) +o(i=A.ara.prototype,"gYg","zH",39) +o(i,"gYf","EN",39) +p(i,"gagt","Yv",0) +o(i,"gYs","zJ",89) +p(i=A.XM.prototype,"ga93","aJZ",0) +m(i,"gaK_","aK0",155) +p(i,"gaAV","aAW",0) +p(i,"ga5m","aBg",0) +s(A,"bW0","bL6",143) +p(A.K1.prototype,"gQX","az7",0) +s(A,"bW2","bLh",1024) +o(i=A.T8.prototype,"gaKi","aKj",19) +k(i,"ga9k",0,0,function(){return[null]},["$1","$0"],["a9l","aKh"],135,0,0) +k(i,"ga5o",0,0,null,["$1","$0"],["a5p","aBp"],180,0,0) +o(i,"gazG","azH",7) +o(i,"gazM","azN",7) +p(A.T6.prototype,"geL","t",0) +o(i=A.wM.prototype,"gaKs","aKt",5) +o(i,"gaKq","aKr",80) +o(i,"ga59","azJ",17) +p(i,"gaBq","a5q",0) +p(i,"gazU","azV",0) +p(i,"gaAz","aAA",0) +o(i,"ga5e","aA1",79) +o(i,"ga5f","aA2",60) +o(i,"gaue","auf",18) +k(i=A.PG.prototype,"gaTM",0,1,null,["$4$allowUpscaling$cacheHeight$cacheWidth","$1"],["af3","aTN"],552,0,0) +k(i,"gaTP",0,1,null,["$2$getTargetSize","$1"],["af4","aTQ"],553,0,0) +q(A,"bbP",3,null,["$3"],["boo"],1025,0) +q(A,"bin",3,null,["$3"],["hP"],1026,0) +n(i=A.zI.prototype,"gJb","an",174) +o(i,"gal_","a05",564) +o(i,"gaYS","aYT",565) +o(i=A.a79.prototype,"gayY","ayZ",568) +o(i,"gayJ","ayK",3) +n(i,"gJb","an",174) +m(A.IG.prototype,"gaI4","aI5",573) +q(A,"Ko",3,null,["$3"],["cl"],1027,0) +n(i=A.a47.prototype,"gN","iB",1) +n(i,"gKs","jS",1) +o(A.Qw.prototype,"ga2c","atE",5) +r(A,"bRl","bMH",177) +o(i=A.Ha.prototype,"gaBH","aBI",3) +o(i,"gaAi","aAj",3) +p(A.TV.prototype,"geL","t",0) +o(i=A.Y.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i,"gjd","av3",580) +p(i,"gLG","aB",0) +m(A.f5.prototype,"gacW","yU",9) +o(i=A.Qy.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i=A.Qz.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +p(i=A.Bc.prototype,"gfH","bi",0) +p(i,"gIu","aI0",0) +o(i,"gaB5","aB6",26) +o(i,"gaB3","aB4",582) +o(i,"gaA7","aA8",7) +o(i,"gaA3","aA4",7) +o(i,"gaA9","aAa",7) +o(i,"gaA5","aA6",7) +o(i,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i,"gawJ","awK",19) +p(i,"gawH","awI",0) +p(i,"gawF","awG",0) +m(i,"gaEv","a6L",9) +o(i=A.QB.prototype,"gbY","bZ",1) +o(i,"gcG","c2",1) +o(i=A.QD.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i=A.QF.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +r(A,"buh","bJ8",12) +r(A,"bui","bJ9",12) +p(A.t_.prototype,"gaah","aai",0) +o(i=A.L.prototype,"gZ1","q6",12) +o(i,"gaQy","oi",12) +p(i,"gfH","bi",0) +k(i,"gjs",0,2,null,["$2"],["aO"],9,0,1) +p(i,"gafO","cf",0) +k(i,"ga6f",0,1,null,["$2$isMergeUp","$1"],["HO","aCU"],590,0,0) +k(i,"gwX",0,0,null,["$4$curve$descendant$duration$rect","$0","$1$rect","$3$curve$duration$rect","$2$descendant$rect"],["iG","AC","uD","wY","uE"],165,0,0) +o(i=A.aZ.prototype,"gaNw","aNx","aZ.0?(B?)") +o(i,"gabN","aNv","aZ.0?(B?)") +p(A.we.prototype,"gtg","aH3",0) +o(i=A.QN.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i,"gauG","auH",168) +o(i=A.jh.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +k(i,"gjs",0,2,null,["$2"],["aO"],9,0,1) +o(i=A.Qx.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i=A.QI.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i=A.QH.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +p(A.Qv.prototype,"gIS","T2",0) +p(A.JM.prototype,"gHN","xQ",0) +m(A.QC.prototype,"gaEu","a6K",595) +o(i=A.QL.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +p(i=A.tj.prototype,"gaFk","aFl",0) +p(i,"gaFm","aFn",0) +p(i,"gaFo","aFp",0) +p(i,"gaFi","aFj",0) +p(i=A.QR.prototype,"gaFr","aFs",0) +p(i,"gaFe","aFf",0) +p(i,"gaFc","aFd",0) +p(i,"gaF4","aF5",0) +p(i,"gaF6","aF7",0) +p(i,"gaFg","aFh",0) +p(i,"gaF8","aF9",0) +p(i,"gaFa","aFb",0) +o(i=A.QQ.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +m(i,"gaEs","aEt",9) +p(A.abc.prototype,"ga88","a89",0) +o(i=A.Bd.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +k(i,"gjs",0,2,null,["$2"],["aO"],9,0,1) +o(i=A.QM.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i=A.QO.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i=A.QA.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +k(A.fh.prototype,"gaTf",0,1,null,["$3$crossAxisPosition$mainAxisPosition"],["aeM"],596,0,0) +o(i=A.H6.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +m(i,"gagD","Mh",9) +m(A.QG.prototype,"gagD","Mh",9) +o(i=A.H7.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i=A.H9.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +m(i,"gaLz","aaw",9) +k(i,"gwX",0,0,null,["$4$curve$descendant$duration$rect","$0","$1$rect","$3$curve$duration$rect","$2$descendant$rect"],["iG","AC","uD","wY","uE"],165,0,0) +o(i=A.QV.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +s(A,"bRn","bJt",1028) +q(A,"bRo",0,null,["$2$priority$scheduler"],["bSi"],1029,0) +o(i=A.iQ.prototype,"gax3","ax4",186) +p(i,"gaGS","aGT",0) +o(i,"gayR","ayS",3) +p(i,"gazr","azs",0) +p(i,"gawp","awq",0) +o(A.Ce.prototype,"gIL","aKb",3) +p(i=A.abe.prototype,"gaw7","aw8",0) +p(i,"gaB2","a5l",0) +o(i,"gaB0","aB1",605) +o(i=A.eo.prototype,"ga7r","aG9",187) +o(i,"gaKR","a9K",187) +p(A.RF.prototype,"geL","t",0) +o(A.oz.prototype,"gaMb","Tv",613) +r(A,"bRm","bJQ",1030) +p(i=A.Hz.prototype,"gats","att",619) +o(i,"gazS","R_",620) +o(i,"gaAk","Hy",90) +q(A,"bT3",0,null,["$6$character$deviceType$logicalKey$physicalKey$synthesized$timeStamp","$4$logicalKey$physicalKey$synthesized$timeStamp"],["bnw",function(a,b,c,d){return A.bnw(null,B.hD,a,b,c,d)}],1031,0) +q(A,"bT4",0,null,["$5$deviceType$logicalKey$physicalKey$synthesized$timeStamp","$4$logicalKey$physicalKey$synthesized$timeStamp"],["bny",function(a,b,c,d){return A.bny(B.hD,a,b,c,d)}],1032,0) +o(i=A.a5S.prototype,"gaSa","aSb",164) +o(i,"gaSE","X1",626) +o(i,"gavo","avp",627) +o(i=A.R1.prototype,"gaD9","RB",193) +p(i,"geL","t",0) +o(i=A.fV.prototype,"gawB","awC",194) +o(i,"ga7p","a7q",194) +o(A.adh.prototype,"gaCN","HJ",90) +o(A.adY.prototype,"gaBy","R4",90) +o(A.TM.prototype,"ga4W","ayC",642) +o(i=A.Vg.prototype,"ga55","azI",172) +o(i,"gatf","atg",79) +o(i,"gath","ati",60) +o(i,"gatd","ate",7) +o(i=A.Ym.prototype,"gavZ","aw_",199) +o(i,"gaDR","aDS",645) +o(i,"gaEd","aEe",646) +o(A.TS.prototype,"gatn","ato",647) +p(A.Oa.prototype,"geL","t",0) +p(i=A.Tx.prototype,"gaSf","aSg",0) +o(i,"gaAb","aAc",90) +o(i,"gayP","ayQ",90) +p(i,"gayT","ayU",0) +p(i=A.Yt.prototype,"gaSi","WX",0) +p(i,"gaT_","Xa",0) +p(i,"gaSx","X_",0) +o(i,"gaRW","WR",159) +o(i=A.UI.prototype,"ga3L","awe",35) +o(i,"ga3M","awf",14) +p(i,"gazd","aze",0) +o(i,"ga3K","awd",32) +o(i,"gazb","Hx",652) +o(A.UV.prototype,"gP7","a2b",5) +p(i=A.uX.prototype,"ga6x","aDy",0) +p(i,"gaDP","a6A",0) +p(i,"gaGH","aGI",0) +p(i,"gIQ","aKG",0) +o(i,"gQW","az6",655) +p(i,"gaDE","aDF",0) +p(i,"ga6z","RO",0) +p(i,"gHg","a3G",0) +p(i,"gQd","awL",0) +o(i,"gauZ","av_",656) +k(i,"gaH_",0,0,function(){return[null]},["$1","$0"],["a7T","a7S"],203,0,0) +o(i,"gaXB","aXC",26) +k(i,"gaDd",0,3,null,["$3"],["aDe"],204,0,0) +k(i,"gaDf",0,3,null,["$3"],["aDg"],204,0,0) +p(i,"gauu","a2y",87) +p(i,"gaDq","aDr",87) +p(i,"gaCw","aCx",87) +p(i,"gaEH","aEI",87) +p(i,"gawr","aws",87) +o(i,"gaKx","aKy",660) +o(i,"gaGs","a7C",661) +o(i,"gaH4","aH5",662) +o(i,"gawM","awN",663) +o(i,"gaxa","axb",664) +o(i,"gaLd","aLe",665) +o(i,"gaBP","aBQ",666) +o(i,"gaw0","aw1",80) +r(A,"iV","bFb",21) +p(A.fd.prototype,"geL","t",0) +p(i=A.Nb.prototype,"geL","t",0) +o(i,"gatH","atI",159) +p(i,"gaMv","ab9",0) +o(i=A.ajN.prototype,"gaey","X0",17) +o(i,"gaex","aSc",676) +p(A.J8.prototype,"gQZ","azF",0) +q(A,"bSR",1,null,["$5$alignment$alignmentPolicy$curve$duration","$1","$2$alignmentPolicy"],["beY",function(a){var h=null +return A.beY(a,h,h,h,h)},function(a,b){return A.beY(a,null,b,null,null)}],1033,0) +r(A,"bcd","bN_",16) +s(A,"biq","bEz",1034) +r(A,"btQ","bEy",16) +o(i=A.akb.prototype,"gaKI","a9A",16) +p(i,"gaKJ","aKK",0) +o(A.b7.prototype,"gaPn","Db",16) +o(i=A.GY.prototype,"gaAo","aAp",80) +o(i,"gaAt","aAu",701) +o(i,"gaLk","aLl",702) +o(i=A.tY.prototype,"gau8","au9",18) +o(i,"ga4X","a4Y",5) +p(i,"gzK","ER",0) +o(i=A.NH.prototype,"gazC","azD",705) +k(i,"gavX",0,5,null,["$5"],["avY"],706,0,0) +q(A,"btV",3,null,["$3"],["ru"],1035,0) +m(A.Vr.prototype,"gazO","azP",150) +p(A.Ds.prototype,"gayF","ayG",0) +p(A.Jl.prototype,"gR5","aBA",0) +o(A.Jm.prototype,"ga65","aCq",11) +o(i=A.WG.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +q(A,"bTM",3,null,["$3"],["bL7"],1036,0) +s(A,"bU_","bHJ",1037) +r(A,"p0","bNB",71) +r(A,"buf","bNC",71) +r(A,"Zj","bND",71) +o(A.Jy.prototype,"gEG","wd",112) +o(A.Jx.prototype,"gEG","wd",112) +o(A.W2.prototype,"gEG","wd",112) +o(A.W3.prototype,"gEG","wd",112) +p(i=A.oq.prototype,"ga5a","azL",0) +p(i,"ga7l","aG5",0) +o(i,"gaDm","aDn",80) +o(i,"gaAx","aAy",17) +o(i=A.JN.prototype,"gcd","c_",1) +o(i,"gcG","c2",1) +o(i,"gc0","c1",1) +o(i,"gbY","bZ",1) +r(A,"bUc","bNz",12) +k(A.CZ.prototype,"gjs",0,2,null,["$2"],["aO"],9,0,1) +o(i=A.xm.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(A.Vm.prototype,"gRS","RT",62) +p(i=A.Vl.prototype,"geL","t",0) +o(i,"gPm","Pn",5) +o(i,"gaKc","aKd",3) +o(A.XE.prototype,"gRS","RT",62) +o(i=A.XD.prototype,"gPm","Pn",5) +p(i,"geL","t",0) +o(A.a23.prototype,"gaD7","RA",193) +p(A.WV.prototype,"gSa","aGq",0) +p(A.hw.prototype,"geL","t",0) +o(A.nn.prototype,"gaL9","T4",733) +o(i=A.JQ.prototype,"gaGv","aGw",3) +p(i,"gHA","a5k",0) +p(i,"gQS","ayO",246) +p(i,"gR0","aAI",0) +o(A.hX.prototype,"ga5n","aBj",5) +o(i=A.ig.prototype,"gau4","au5",18) +o(i,"gau6","au7",18) +p(i=A.a_x.prototype,"gSl","Sm",0) +p(i,"gSj","Sk",0) +p(i=A.a2Z.prototype,"gSl","Sm",0) +p(i,"gSj","Sk",0) +p(A.Ro.prototype,"geL","t",0) +s(A,"c4G","bsG",1038) +n(i=A.Xj.prototype,"gkJ","E",57) +n(i,"gq8","P",57) +r(A,"ava","bSj",62) +p(i=A.tq.prototype,"gaPY","aPZ",0) +p(i,"geL","t",0) +p(A.Rt.prototype,"geL","t",0) +o(i=A.Bz.prototype,"ga52","azj",97) +o(i,"ga8_","aH7",35) +o(i,"ga80","aH8",14) +o(i,"ga7Z","aH6",32) +p(i,"ga7X","a7Y",0) +p(i,"gawm","awn",0) +p(i,"gawk","awl",0) +o(i,"gaG1","aG2",114) +o(i,"gaH9","aHa",17) +o(i,"gaAL","aAM",115) +p(i=A.Xa.prototype,"ga7R","aGX",0) +p(i,"geL","t",0) +p(A.Hs.prototype,"geL","t",0) +o(i=A.pS.prototype,"gaLu","aLv",5) +p(i,"gaeD","L4",0) +o(i,"gaBw","aBx",19) +o(i,"gaHc","aHd",115) +o(i,"gaAN","aAO",62) +o(i,"gaAv","aAw",17) +o(i,"gaHe","aHf",114) +n(i=A.Ge.prototype,"gkJ","E",57) +n(i,"gq8","P",57) +m(i,"gPC","auX",754) +p(i,"gR1","aAQ",0) +p(i,"geL","t",0) +m(A.Xn.prototype,"gaAe","aAf",124) +p(A.RS.prototype,"geL","t",0) +p(A.Xm.prototype,"ga8n","aHR",0) +p(i=A.WP.prototype,"gHF","aBM",0) +o(i,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +k(i,"gwX",0,0,null,["$4$curve$descendant$duration$rect","$0","$1$rect","$3$curve$duration$rect","$2$descendant$rect"],["iG","AC","uD","wY","uE"],165,0,0) +o(A.HN.prototype,"gaYw","ahG",761) +p(A.JP.prototype,"gHZ","aE3",0) +p(A.UD.prototype,"geL","t",0) +p(i=A.adq.prototype,"gaal","T8",0) +o(i,"gaAR","aAS",35) +o(i,"gaAT","aAU",14) +o(i,"gaAX","aAY",35) +o(i,"gaAZ","aB_",14) +o(i,"gayH","ayI",32) +o(i=A.abb.prototype,"gaBc","aBd",35) +o(i,"gaBe","aBf",14) +o(i,"gaBa","aBb",32) +o(i,"gazv","azw",35) +o(i,"gazx","azy",14) +o(i,"gazt","azu",32) +o(i,"gauc","aud",18) +p(A.Xk.prototype,"gIN","SO",0) +p(A.Xh.prototype,"gR7","R9",0) +p(i=A.SU.prototype,"gaWO","aWP",0) +p(i,"gaWM","aWN",0) +o(i,"gaWH","cb",98) +o(i,"gYg","zH",39) +o(i,"gYf","EN",39) +p(i,"gagt","Yv",0) +o(i,"gagr","Yt",157) +p(i,"gaWE","aWF",0) +o(i,"gYs","zJ",89) +o(i,"gagq","Yr",104) +o(i,"gaWC","aWD",127) +p(i,"gaWw","aWx",0) +o(i,"gaWy","aWz",19) +o(i,"gaW7","wg",98) +o(i,"gaWQ","aWR",98) +o(i,"gaWa","aWb",229) +o(i,"gaWc","aWd",230) +o(i,"gaW8","aW9",231) +p(i=A.XQ.prototype,"ga5s","aBs",0) +p(i,"ga5r","aBr",0) +o(i,"ga98","aK5",98) +o(i,"ga99","aK6",157) +p(i,"ga97","aK4",0) +o(i,"ga95","aK2",229) +o(i,"ga96","aK3",230) +o(i,"ga94","aK1",231) +o(i,"gaxH","axI",39) +o(i,"gaxF","axG",39) +o(i,"gaA_","aA0",89) +o(i,"gazY","azZ",104) +o(i,"gazW","azX",127) +p(A.LF.prototype,"geL","t",0) +p(A.ly.prototype,"gmQ","mR",0) +p(A.fw.prototype,"ghp","hG",0) +r(A,"bWr","bJs",264) +r(A,"bWq","bJi",264) +p(A.TP.prototype,"gQU","ayV",0) +p(i=A.It.prototype,"gaiE","FI",0) +p(i,"gahx","Fd",0) +o(i,"gaKD","aKE",783) +o(i,"gaGa","aGb",784) +p(i,"gS0","a7d",0) +p(i,"gQY","a53",0) +p(A.Tj.prototype,"geL","t",0) +o(i=A.WN.prototype,"gcG","c2",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gc0","c1",1) +o(A.Uh.prototype,"gaW2","Y9",232) +k(A.a9P.prototype,"gaS7",0,3,null,["$3"],["L0"],801,0,0) +r(A,"btH","bEr",1040) +o(A.hM.prototype,"gaPO","ad_",802) +r(A,"bTl","bi1",1041) +p(i=A.a_5.prototype,"gaVy","aVz",6) +p(i,"gag_","aVB",6) +p(i,"gafY","aVx",6) +r(A,"bSB","bKN",1042) +r(A,"bSA","bHy",1043) +r(A,"bSC","bLM",1044) +s(A,"bTK","bQe",55) +s(A,"bTE","bQ8",55) +s(A,"bTF","bQ9",55) +s(A,"bTI","bQc",55) +s(A,"bTJ","bQd",55) +s(A,"bTG","bQa",55) +s(A,"bTH","bQb",55) +k(A.Wd.prototype,"gZC",0,1,function(){return[null]},["$2","$1"],["wA","FH"],825,0,0) +p(i=A.akW.prototype,"gaVk","aVl",6) +p(i,"gafX","aVu",6) +p(i,"gaVv","aVw",6) +p(i,"gaVq","aVr",6) +p(i,"gaVs","aVt",6) +p(i,"gafZ","aVA",6) +p(i,"gaVC","aVD",6) +p(i,"gY0","aVf",6) +p(i,"gaVi","aVj",6) +p(i,"gY1","aVE",6) +p(i,"gaVo","aVp",6) +p(i,"gaVg","aVh",6) +p(i,"gaVm","aVn",6) +q(A,"bRq",3,null,["$3"],["bCe"],10,0) +r(A,"bRv","bCu",1046) +q(A,"bRw",3,null,["$3"],["bCv"],10,0) +r(A,"bSb","bDr",1047) +q(A,"bSc",3,null,["$3"],["bDs"],10,0) +r(A,"bSd","bDt",1048) +q(A,"bSe",3,null,["$3"],["bDu"],10,0) +q(A,"bSs",3,null,["$3"],["bDH"],10,0) +r(A,"bSP","bF1",1049) +q(A,"bSQ",3,null,["$3"],["bF2"],10,0) +q(A,"bT9",3,null,["$3"],["bTQ"],10,0) +r(A,"bTa","bFS",1050) +q(A,"bTb",3,null,["$3"],["bFT"],10,0) +r(A,"bTi","bG2",1051) +q(A,"bTj",3,null,["$3"],["bG3"],10,0) +q(A,"bU5",3,null,["$3"],["bHM"],10,0) +q(A,"bUE",3,null,["$3"],["bI8"],10,0) +q(A,"bUL",3,null,["$3"],["bIU"],10,0) +q(A,"bUM",3,null,["$3"],["bIV"],10,0) +r(A,"bUU","bJj",1052) +q(A,"bUV",3,null,["$3"],["bJk"],10,0) +q(A,"bUW",3,null,["$3"],["bJl"],10,0) +q(A,"bVP",3,null,["$3"],["bKC"],10,0) +q(A,"buW",3,null,["$3"],["bM4"],10,0) +q(A,"bWt",3,null,["$3"],["bM5"],10,0) +q(A,"bR5",4,null,["$4"],["bBP"],1053,0) +q(A,"bR6",4,null,["$4"],["bBV"],1054,0) +q(A,"bSu",4,null,["$4"],["bDT"],1055,0) +q(A,"bSz",4,null,["$4"],["bEO"],1056,0) +q(A,"bT1",4,null,["$4"],["bFD"],1057,0) +q(A,"bT2",4,null,["$4"],["bFF"],1058,0) +q(A,"bTz",4,null,["$4"],["bGy"],1059,0) +q(A,"bTA",4,null,["$4"],["bGA"],1060,0) +q(A,"bTT",4,null,["$4"],["bHj"],1061,0) +q(A,"bTY",4,null,["$4"],["bHv"],1062,0) +q(A,"bU3",4,null,["$4"],["bHL"],1063,0) +q(A,"bUa",4,null,["$4"],["bHU"],1064,0) +q(A,"bVQ",4,null,["$4"],["bKI"],1065,0) +q(A,"bWv",4,null,["$4"],["bMo"],1066,0) +p(A.Dz.prototype,"gES","aWT",0) +p(A.uM.prototype,"gwj","ET",0) +p(A.MG.prototype,"gpO","w6",0) +p(A.MX.prototype,"gwj","ET",0) +p(A.Ny.prototype,"gpO","w6",0) +p(A.Q2.prototype,"gpO","w6",0) +p(A.Qp.prototype,"gpO","w6",0) +p(A.QW.prototype,"gaCd","aCe",0) +p(A.Bp.prototype,"gaEf","aEg",0) +p(A.RP.prototype,"ga8m","aHQ",0) +p(A.ny.prototype,"gaKA","aKB",0) +p(A.a30.prototype,"gwj","ET",0) +q(A,"bRE",1,null,["$3$filePicker$imageProviderFactory","$1"],["a6s",function(a){return A.a6s(a,null,null)}],1067,0) +o(A.hR.prototype,"gaMc","qM",26) +p(A.jv.prototype,"gXs","aTV",0) +n(A.Nx.prototype,"gagG","l1",839) +o(i=A.QJ.prototype,"gc0","c1",1) +o(i,"gbY","bZ",1) +o(i,"gcd","c_",1) +o(i,"gcG","c2",1) +o(A.A5.prototype,"gaGh","aGi",850) +q(A,"bu4",1,function(){return{tabRemaining:null}},["$2$tabRemaining","$1"],["bnK",function(a){return A.bnK(a,null)}],1068,0) +r(A,"bdf","btE",76) +k(A.jQ.prototype,"gkJ",1,1,null,["$1"],["E"],27,0,1) +j(A.hu.prototype,"gZb","bF",0) +r(A,"bU8","bU9",1069) +s(A,"bRx","bCw",1070) +s(A,"bTC","bGL",1071) +p(A.CQ.prototype,"gafN","aUW",0) +p(A.MM.prototype,"gzK","ER",0) +p(A.PZ.prototype,"gavv","avw",0) +p(A.wj.prototype,"gYl","EO",0) +r(A,"bW8","bFq",1072) +r(A,"bWa","bI9",1073) +r(A,"bWb","bIP",1074) +r(A,"buP","bql",1075) +r(A,"bW5","bCF",1076) +r(A,"bW6","bEx",1077) +r(A,"bW7","bES",1078) +r(A,"buO","bGw",1079) +r(A,"bWe","bLi",1080) +r(A,"buQ","bLz",1081) +r(A,"buR","bMl",1082) +r(A,"bWc","bKU",1083) +r(A,"bW9","bFI",1084) +r(A,"bWd","bKV",1085) +r(A,"bWg","bLt",1086) +r(A,"bWf","bLs",1087) +q(A,"bWh",1,null,["$2$tsx","$1"],["bqn",function(a){return A.bqn(a,null)}],1088,0) +r(A,"bWi","bM8",1089) +r(A,"bWj","bMa",1090) +r(A,"bWk","bMc",1091) +s(A,"bUl","bMR",30) +s(A,"buq","bMM",30) +s(A,"bus","bMT",30) +s(A,"bur","bMS",30) +s(A,"bUj","bMP",30) +s(A,"bUm","bMU",30) +s(A,"bUk","bMQ",30) +s(A,"bUi","bMO",30) +s(A,"bUg","bML",30) +s(A,"bUh","bMN",30) +r(A,"bUn","bNk",88) +r(A,"bUq","bNn",88) +r(A,"bUt","bNq",88) +r(A,"bUr","bNo",268) +r(A,"bUs","bNp",268) +r(A,"bUo","bNl",88) +r(A,"bUp","bNm",88) +o(i=A.aoA.prototype,"gus","ajY",928) +o(i,"gwH","ajT",929) +o(A.mV.prototype,"gaTm","aTn",58) +n(A.a.prototype,"gkJ","E",58) +k(A.a32.prototype,"gaUQ",0,1,null,["$1$1","$1"],["afK","zz"],937,1,0) +k(A.AF.prototype,"gZh",0,0,function(){return[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},["$127","$0","$1","$2","$3","$4","$5","$6","$8","$7"],["ek","fZ","jv","Fm","Fn","Fo","Fp","Fq","Fs","Fr"],"a0<1>([@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@])",0,0) +k(A.AG.prototype,"gZh",0,0,function(){return[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},["$127","$0","$1","$2","$3","$4","$5","$6","$8","$7"],["ek","fZ","jv","Fm","Fn","Fo","Fp","Fq","Fs","Fr"],"a0>([@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@])",0,0) +k(A.fe.prototype,"gZh",0,0,function(){return[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},["$127","$0","$1","$2","$3","$4","$5","$6","$8","$7"],["ek","fZ","jv","Fm","Fn","Fo","Fp","Fq","Fs","Fr"],"fe.T([@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@])",0,0) +r(A,"btF","bQr",76) +r(A,"bSm","bQm",76) +r(A,"bSl","bOV",76) +p(i=A.aeQ.prototype,"gaR9","aRa",946) +p(i,"gaNq","aNr",947) +p(i,"gamh","ami",948) +j(i,"gyx","aMP",949) +p(i,"gaME","aMF",950) +p(i,"gaMG","aMH",81) +p(i,"gvm","aMI",81) +p(i,"gaMJ","aMK",81) +p(i,"gaMN","aMO",81) +p(i,"gaML","aMM",81) +j(i,"gaQV","aQW",952) +p(i,"gac1","aNW",953) +p(i,"gaNh","aNi",954) +p(i,"gaPr","aPs",955) +p(i,"gah1","aXT",956) +p(i,"gaQ9","aQa",957) +p(i,"gaQh","aQi",163) +p(i,"gaQl","aQm",163) +p(i,"gaQj","aQk",163) +p(i,"gaQn","aQo",56) +p(i,"gaQd","aQe",84) +p(i,"gaQb","aQc",84) +p(i,"gaQf","aQg",84) +p(i,"gaQp","aQq",84) +p(i,"gaQr","aQs",84) +p(i,"gAG","am7",56) +p(i,"gAH","am8",56) +p(i,"goI","aVO",56) +p(i,"gaVM","aVN",56) +p(i,"gaVK","aVL",56) +o(A.TD.prototype,"gNi","b_9",978) +r(A,"bTB","bGE",1095) +r(A,"bU2","bU1",53) +q(A,"Zm",1,null,["$2$wrapWidth","$1"],["btD",function(a){return A.btD(a,null)}],1096,0) +l(A,"bUH","bso",0) +s(A,"qB","bl5",65) +s(A,"xy","bCA",65) +r(A,"auY","bRC",1097) +r(A,"bSw","bSv",1098) +r(A,"es","bSO",1099) +r(A,"Zh","bTk",1100) +r(A,"Zl","bU7",128) +r(A,"bUD","bUC",128) +r(A,"bV_","bUY",128) +r(A,"buI","bV4",1102) +s(A,"bie","bSg",1103) +q(A,"bif",1,null,["$1$1","$1"],["btW",function(a){return A.btW(a,t.z)}],1104,0) +r(A,"bto","bQv",78) +s(A,"bSG","bV1",136) +s(A,"btK","bV2",136) +s(A,"bSF","bV0",136) +s(A,"bUu","bQ_",66) +s(A,"bUx","bQ2",66) +s(A,"bUy","bQ3",66) +s(A,"bUz","bQ4",66) +s(A,"bUw","bQ1",66) +s(A,"bUv","bQ0",66) +r(A,"bub","bQw",737)})();(function inheritance(){var s=hunkHelpers.mixin,r=hunkHelpers.mixinHard,q=hunkHelpers.inheritMany,p=hunkHelpers.inherit +q(null,[A.B,A.K6]) +q(A.B,[A.Ku,A.awi,A.uI,A.b1r,A.ap2,A.aAa,A.n0,A.a0c,A.a6w,A.a0D,A.a2v,A.a5_,A.op,A.z,A.MI,A.abJ,A.Ba,A.Tn,A.zi,A.aSZ,A.a55,A.yh,A.a0J,A.a0B,A.a03,A.jJ,A.aOl,A.aMA,A.a62,A.aIT,A.aIU,A.aFa,A.a1q,A.ayG,A.aOI,A.IC,A.a0M,A.aLD,A.hY,A.a1A,A.Hb,A.Bh,A.DU,A.Lx,A.ayE,A.a0E,A.ayK,A.yi,A.qU,A.aBs,A.aad,A.Ll,A.abA,A.a0K,A.a0R,A.Lw,A.DV,A.Ly,A.a0O,A.Lv,A.ayI,A.dF,A.a0S,A.LE,A.az2,A.az3,A.aDP,A.aDQ,A.MO,A.aEm,A.aBr,A.aRo,A.a51,A.aGT,A.a50,A.NM,A.a2G,A.Mr,A.ai1,A.ai6,A.a2D,A.aDj,A.aaW,A.Br,A.ap1,A.aQX,A.aEK,A.as5,A.a3t,A.F1,A.zj,A.Nj,A.KM,A.ll,A.a1B,A.IZ,A.a43,A.fT,A.eC,A.acD,A.UJ,A.aUw,A.aUv,A.HZ,A.I_,A.kj,A.aOz,A.azW,A.agP,A.aAe,A.wE,A.aNn,A.aqF,A.amA,A.aUn,A.acE,A.acV,A.JE,A.GE,A.vZ,A.tf,A.aSX,A.aNo,A.vR,A.aPa,A.eK,A.b4s,A.aai,A.acG,A.xs,A.a4Z,A.aQp,A.I0,A.aUo,A.z0,A.aLV,A.aSA,A.EM,A.ph,A.a3e,A.abm,A.oB,A.BH,A.xj,A.aOm,A.NK,A.RZ,A.NL,A.Kx,A.rv,A.a5T,A.pk,A.aIs,A.aA8,A.aKT,A.axQ,A.rR,A.MW,A.a3g,A.a3f,A.a4Q,A.aNE,A.aXj,A.a8Q,A.awo,A.aei,A.aNI,A.aNK,A.aQV,A.aNT,A.a0T,A.aO1,A.al_,A.aZ3,A.b8h,A.qr,A.IU,A.JH,A.b2q,A.aNU,A.bgj,A.aOK,A.a4p,A.a4o,A.aM2,A.avN,A.a9i,A.tl,A.ZE,A.MN,A.abj,A.abi,A.BD,A.aDA,A.aDB,A.aS8,A.aS4,A.ahG,A.O,A.ng,A.aI4,A.aI6,A.aTU,A.aTY,A.aXR,A.a9J,A.aUs,A.a0e,A.AK,A.aME,A.HY,A.ayh,A.aGN,A.aVo,A.aVn,A.b24,A.b25,A.b23,A.Ie,A.aJd,A.ac1,A.aaR,A.aVO,A.pi,A.pQ,A.MP,A.MR,A.MQ,A.C7,A.aV9,A.Id,A.eV,A.tK,A.axM,A.a1o,A.aDl,A.aDm,A.SJ,A.aDg,A.a_k,A.Ib,A.EG,A.aHO,A.aVr,A.aVa,A.aGX,A.aD2,A.aCn,A.a6t,A.cL,A.aE0,A.a2p,A.a2w,A.a2E,A.aAu,A.aFe,A.Na,A.aG7,A.r9,A.aek,A.IB,A.bfr,J.Fx,J.cA,A.a0h,A.bE,A.aSm,A.cR,A.bt,A.fG,A.v_,A.acT,A.acU,A.abK,A.abL,A.a3a,A.a3U,A.nA,A.Fq,A.N0,A.ae0,A.fX,A.oV,A.OF,A.Eb,A.x9,A.mz,A.FC,A.aWP,A.a7I,A.MT,A.XA,A.b5M,A.aJp,A.FR,A.rC,A.Jt,A.IQ,A.HU,A.b76,A.b__,A.b2P,A.no,A.ajB,A.Y0,A.b78,A.Ov,A.XZ,A.TR,A.fH,A.a_d,A.cY,A.i_,A.x_,A.adB,A.CJ,A.nF,A.aM,A.afv,A.acw,A.JV,A.aqJ,A.afw,A.ahK,A.b0V,A.JG,A.UM,A.aqt,A.at6,A.at5,A.Jh,A.k1,A.b3z,A.xb,A.Jp,A.mb,A.al9,A.ase,A.UO,A.aia,A.Jq,A.asf,A.aq7,A.aq6,A.qs,A.nr,A.a14,A.cv,A.Lj,A.afM,A.afK,A.a0r,A.apJ,A.aGM,A.b3k,A.akw,A.b_h,A.b77,A.asj,A.k8,A.xr,A.lY,A.bv,A.a7X,A.Sh,A.V8,A.j7,A.bK,A.bR,A.aqB,A.ce,A.Ra,A.d8,A.Yc,A.aWX,A.nH,A.ER,A.wq,A.N7,A.aAd,A.beP,A.aiL,A.c_,A.EW,A.a7H,A.b3d,A.b4S,A.Wv,A.Y7,A.asa,A.h0,A.a3c,A.b_0,A.XC,A.tT,A.ayt,A.a7Q,A.A,A.bl,A.nm,A.GT,A.lo,A.n,A.pF,A.bfm,A.oC,A.pr,A.a57,A.rm,A.rH,A.BC,A.Cw,A.ov,A.t4,A.fi,A.eB,A.aSk,A.m3,A.Nh,A.pm,A.pn,A.tD,A.SN,A.hW,A.c0,A.cZ,A.vT,A.ayb,A.a4n,A.awt,A.axT,A.aGu,A.aNL,A.lS,A.ay3,A.awW,A.aE3,A.aw4,A.ayy,A.ax2,A.ax4,A.ax0,A.Qr,A.ax_,A.aHQ,A.aMg,A.aYz,A.aw5,A.af1,A.aYy,A.aGW,A.a5i,A.a3k,A.Tq,A.acv,A.U9,A.KN,A.a_h,A.a_i,A.xX,A.aOh,A.aTg,A.hI,A.aNG,A.a6T,A.aDJ,A.aG6,A.aeI,A.wC,A.p5,A.KQ,A.a21,A.O2,A.A3,A.xp,A.Js,A.OD,A.M8,A.a4O,A.Wi,A.UE,A.yN,A.aB7,A.aGt,A.aAF,A.aAA,A.nl,A.R,A.eM,A.DM,A.ahQ,A.aqk,A.a2f,A.aq,A.h7,A.atc,A.y,A.aOZ,A.a5q,A.zo,A.ae3,A.a6_,A.aD,A.PJ,A.PP,A.ob,A.kr,A.iJ,A.fn,A.awx,A.IT,A.aHr,A.Vq,A.G7,A.e,A.fN,A.uJ,A.Qb,A.NG,A.a9r,A.Qe,A.B5,A.qV,A.agG,A.cP,A.bu,A.ds,A.c6,A.i3,A.xa,A.E5,A.a4m,A.NF,A.dR,A.a2,A.ag,A.aGq,A.aGr,A.m7,A.a7F,A.a8t,A.tt,A.I8,A.fA,A.rr,A.aOH,A.ej,A.jB,A.ex,A.NJ,A.b_,A.N2,A.My,A.P0,A.P6,A.OY,A.a7c,A.Gf,A.aDH,A.kO,A.q1,A.mv,A.a4c,A.aoi,A.aFJ,A.aGp,A.oh,A.fB,A.a,A.Pz,A.aJc,A.FP,A.t8,A.w8,A.hr,A.da,A.pf,A.pP,A.pX,A.jd,A.kC,A.aDO,A.EP,A.a_D,A.x6,A.aHb,A.b_B,A.ajh,A.zZ,A.aLP,A.lu,A.aMN,A.ni,A.rX,A.a8p,A.ff,A.aAG,A.he,A.wz,A.ac8,A.ji,A.mA,A.ip,A.a_I,A.acb,A.Sf,A.Nu,A.aJi,A.aTJ,A.Ud,A.jY,A.y3,A.adm,A.aBB,A.aVN,A.iT,A.pj,A.wK,A.fY,A.j4,A.aA3,A.a3J,A.aJX,A.acH,A.zb,A.rP,A.a9L,A.iP,A.aal,A.aSM,A.adx,A.Ij,A.ady,A.T2,A.aSP,A.afr,A.KI,A.KG,A.KF,A.xS,A.ut,A.bi,A.Ip,A.ako,A.aVS,A.ak3,A.ls,A.a20,A.Us,A.ahD,A.uB,A.aho,A.XS,A.Pk,A.ahr,A.ahp,A.T7,A.iG,A.aj6,A.a_M,A.b4f,A.b0,A.n3,A.ha,A.bhD,A.ne,A.GF,A.b8_,A.aXS,A.Qm,A.oE,A.d9,A.ey,A.F8,A.Jf,A.aFC,A.b5N,A.F9,A.r8,A.o7,A.n6,A.lf,A.an3,A.hF,A.af4,A.agX,A.ah6,A.ah1,A.ah_,A.ah0,A.agZ,A.ah2,A.aha,A.ah8,A.ah9,A.ah7,A.ah4,A.ah5,A.ah3,A.agY,A.zk,A.a2d,A.m5,A.K5,A.rt,A.FZ,A.Oz,A.FY,A.u7,A.bhu,A.aOb,A.a66,A.P2,A.Uq,A.u4,A.aNY,A.aO0,A.hS,A.CV,A.Ri,A.Rj,A.Hn,A.akX,A.oH,A.oI,A.aqT,A.aqW,A.aqV,A.aqX,A.aqU,A.XJ,A.agK,A.aFF,A.lC,A.wT,A.Wg,A.k0,A.af6,A.ab0,A.aft,A.tV,A.afE,A.alc,A.ag_,A.ag0,A.ag1,A.agc,A.agh,A.akR,A.alv,A.agi,A.agn,A.ags,A.agv,A.agJ,A.ahx,A.ahz,A.WW,A.ahR,A.ai_,A.ail,A.aSQ,A.nD,A.b42,A.aip,A.cf,A.aiB,A.tW,A.aDR,A.aiO,A.aiT,A.b0K,A.aj3,A.aEj,A.aDX,A.aDW,A.aEi,A.ak2,A.pu,A.Fw,A.dH,A.a3Q,A.ahB,A.b5e,A.Fs,A.akh,A.akZ,A.a22,A.a6H,A.all,A.alj,A.alk,A.akT,A.alW,A.alX,A.alY,A.amo,A.a6G,A.rV,A.amv,A.Ka,A.ant,A.anu,A.anD,A.aR3,A.aaX,A.aA1,A.aL0,A.af7,A.Rd,A.aph,A.api,A.akS,A.apj,A.apk,A.SU,A.akn,A.apU,A.aT3,A.aT4,A.aT5,A.ax8,A.b12,A.aq_,A.aqI,A.aqO,A.ar7,A.are,A.arp,A.art,A.Jj,A.aiQ,A.aso,A.arv,A.arz,A.T8,A.arB,A.as1,A.iI,A.xO,A.ad8,A.PG,A.L2,A.afZ,A.a3C,A.ayU,A.dk,A.ee,A.afR,A.aZ7,A.f0,A.aGb,A.aH7,A.agk,A.amE,A.zG,A.ak8,A.p3,A.a7u,A.j8,A.kq,A.ak7,A.ak9,A.Fm,A.ZG,A.ry,A.aqD,A.GG,A.mE,A.b7F,A.arb,A.Jo,A.C9,A.k2,A.arn,A.aTu,A.b_O,A.b4n,A.b82,A.Ta,A.Ha,A.amI,A.eg,A.b1e,A.aZ5,A.bs,A.f5,A.aAB,A.Ca,A.aXi,A.b3u,A.a__,A.akK,A.a61,A.FI,A.alz,A.atD,A.bx,A.h5,A.aZ,A.we,A.b6s,A.aps,A.oA,A.aa4,A.au1,A.jh,A.Qv,A.il,A.abc,A.aRP,A.wo,A.app,A.apV,A.aPV,A.py,A.aQ0,A.Sx,A.acP,A.Tr,A.Bk,A.WY,A.Jd,A.aNr,A.iQ,A.Ce,A.Cf,A.T_,A.abe,A.aS7,A.DQ,A.a0n,A.Em,A.eH,A.apq,A.apt,A.tR,A.oX,A.u5,A.oz,A.apu,A.aS5,A.a_a,A.CE,A.uu,A.KO,A.axk,A.Hz,A.axP,A.ym,A.aEU,A.akA,A.aGn,A.Oc,A.a5S,A.aID,A.akC,A.pJ,A.AP,A.OV,A.aUj,A.aI5,A.aI7,A.aTV,A.aTZ,A.aKU,A.OX,A.uy,A.rL,A.aDI,A.a9f,A.GO,A.aAI,A.anG,A.anH,A.aOM,A.fm,A.fV,A.wD,A.S8,A.aAL,A.awp,A.ar9,A.wI,A.alL,A.b7p,A.C8,A.aVs,A.GX,A.eN,A.aVT,A.aVq,A.BB,A.aVt,A.adh,A.SO,A.atI,A.adY,A.aWV,A.af5,A.JC,A.kh,A.a7E,A.uv,A.Tx,A.fz,A.a1y,A.a2y,A.Tb,A.lI,A.b6f,A.ajL,A.afB,A.aEA,A.aja,A.aj8,A.ajN,A.J9,A.aje,A.J2,A.ahV,A.aB8,A.atN,A.atM,A.akb,A.axV,A.Pn,A.b4h,A.aQC,A.vj,A.zr,A.aS6,A.b2w,A.tY,A.Ay,A.fO,A.a0f,A.mw,A.JF,A.a26,A.pD,A.adk,A.Ad,A.OR,A.my,A.aQL,A.adS,A.xe,A.aoD,A.rT,A.CZ,A.aMi,A.XB,A.PD,A.aKw,A.aNH,A.nn,A.wl,A.a6m,A.ab_,A.aRw,A.b8o,A.aT6,A.tp,A.aj0,A.lE,A.aem,A.Hp,A.ab9,A.ab5,A.aCj,A.apL,A.atd,A.apF,A.apI,A.lz,A.q3,A.UD,A.S7,A.q7,A.lL,A.auf,A.adq,A.abb,A.oJ,A.SX,A.ly,A.fw,A.Um,A.Iu,A.as4,A.VH,A.d1,A.d0,A.TW,A.aqQ,A.Vz,A.aK6,A.Ae,A.ay4,A.acK,A.DH,A.acI,A.aUt,A.i5,A.aA2,A.cH,A.i7,A.aCh,A.n7,A.Gy,A.a36,A.a10,A.aCi,A.aV3,A.b56,A.azf,A.aCl,A.yA,A.apK,A.aSO,A.b6G,A.aBz,A.aBw,A.aBx,A.aBy,A.aK1,A.a6x,A.dz,A.dG,A.aSx,A.aKe,A.ir,A.is,A.aWq,A.aSn,A.aXJ,A.ec,A.av,A.bP,A.ct,A.be,A.ki,A.axA,A.hM,A.lX,A.aA4,A.aA6,A.aA5,A.aOg,A.aed,A.aA7,A.t9,A.tM,A.EV,A.v2,A.N1,A.a3H,A.lT,A.aHX,A.ks,A.a5C,A.ak,A.ij,A.aTf,A.dK,A.iv,A.ix,A.iy,A.GB,A.aWW,A.io,A.ii,A.b_G,A.awu,A.aG9,A.a4r,A.aGa,A.Nv,A.a_C,A.a_E,A.ax7,A.DW,A.a_u,A.a_v,A.a7S,A.a3_,A.a5l,A.a5w,A.a5y,A.aql,A.Ln,A.ayw,A.azE,A.agC,A.a_5,A.a2m,A.b3w,A.uS,A.BZ,A.Au,A.Cr,A.a2l,A.aFf,A.pC,A.Wd,A.b4g,A.alb,A.bp,A.akW,A.KY,A.hN,A.zE,A.aN,A.zm,A.aJf,A.a5o,A.G2,A.a7A,A.ae8,A.IO,A.Dz,A.We,A.Ea,A.uM,A.MG,A.MX,A.Ny,A.Q2,A.Qp,A.QW,A.Bp,A.RP,A.ny,A.ju,A.aiC,A.apP,A.akF,A.a30,A.aKd,A.hs,A.aWI,A.azT,A.hR,A.a3X,A.No,A.aJU,A.aJV,A.G0,A.a_B,A.aw9,A.ZR,A.ZS,A.xQ,A.axt,A.a0x,A.aCd,A.n9,A.a4u,A.a4w,A.a6D,A.a6S,A.Q3,A.a9a,A.a9M,A.aap,A.aaK,A.oD,A.abo,A.BI,A.abq,A.abr,A.abs,A.yE,A.r6,A.F0,A.Nf,A.jv,A.FH,A.aro,A.a6B,A.aCe,A.Nx,A.a04,A.iK,A.aIj,A.a5L,A.a5O,A.aNs,A.aJW,A.aJM,A.FT,A.cq,A.e9,A.wS,A.axo,A.fa,A.b1F,A.FU,A.aBA,A.FQ,A.aDU,A.aHC,A.h9,A.pc,A.RT,A.Eu,A.aJl,A.Fr,A.ja,A.adn,A.aAH,A.abC,A.x0,A.a1x,A.aUl,A.aMU,A.dY,A.aUJ,A.a8C,A.aUI,A.Ef,A.a8v,A.ba,A.tG,A.a6E,A.hJ,A.a6q,A.hd,A.aez,A.ahL,A.kU,A.a9n,A.a9m,A.HG,A.aOk,A.aG1,A.ac5,A.axH,A.a_e,A.S0,A.aSY,A.Cn,A.EO,A.awg,A.awf,A.abH,A.a9Y,A.aTo,A.axI,A.axh,A.yg,A.aEh,A.rl,A.zs,A.t2,A.fD,A.fx,A.Lr,A.EH,A.MV,A.fQ,A.SF,A.Il,A.a8w,A.cJ,A.SE,A.adz,A.NA,A.I6,A.mG,A.T1,A.nw,A.qj,A.tO,A.IE,A.aM_,A.aXy,A.a5e,A.a5Z,A.aOF,A.aX8,A.ot,A.b4w,A.amB,A.b0L,A.aXg,A.arc,A.ar8,A.aeb,A.aXc,A.a1V,A.aXf,A.aXe,A.b4T,A.aC9,A.de,A.lw,A.a56,A.a2X,A.nV,A.vX,A.mp,A.jf,A.b_g,A.b4v,A.PM,A.aHm,A.as,A.of,A.pO,A.Sm,A.z8,A.SS,A.SK,A.C4,A.ef,A.XH,A.oG,A.aoA,A.asl,A.I1,A.Mw,A.Sq,A.I2,A.qX,A.aet,A.acL,A.a3j,A.aec,A.m_,A.Ah,A.Cv,A.mV,A.jL,A.id,A.by,A.dX,A.oN,A.beQ,A.aiM,A.Gh,A.a32,A.fe,A.aKS,A.G3,A.aKs,A.it,A.aLX,A.hO,A.wV,A.aeR,A.aeS,A.aXZ,A.aXW,A.aeT,A.aXX,A.IK,A.wW,A.aYq,A.tQ,A.aYv,A.aeV,A.aeW,A.asW,A.aeJ,A.asT,A.aYw,A.at4,A.aXU,A.aYl,A.aYm,A.aeU,A.auK,A.auL,A.asQ,A.aY3,A.aeQ,A.Eg,A.asN,A.TE,A.TD]) +q(A.uI,[A.a11,A.awn,A.awj,A.awk,A.awl,A.ayD,A.b8K,A.b90,A.b9_,A.aGS,A.aGQ,A.a12,A.aT1,A.bcX,A.aHe,A.aLn,A.b92,A.ayH,A.b8N,A.ayM,A.aza,A.azb,A.az5,A.az6,A.az4,A.az8,A.az9,A.az7,A.aBI,A.aBL,A.b9A,A.bd0,A.bd_,A.aEL,A.aEM,A.aEN,A.aEO,A.aEP,A.aEQ,A.aET,A.aER,A.bca,A.bcb,A.bcc,A.bc9,A.b4u,A.aLW,A.aGK,A.aGL,A.aGI,A.aGJ,A.bcr,A.aEl,A.aEn,A.aEk,A.bcf,A.bcg,A.b9b,A.b9c,A.b9d,A.b9e,A.b9f,A.b9g,A.b9h,A.b9i,A.aIo,A.aIp,A.aIq,A.aIr,A.aIy,A.aIC,A.bcS,A.aLa,A.aSS,A.aST,A.aDY,A.aDn,A.aDo,A.aDx,A.aDw,A.aDs,A.aDt,A.aDu,A.aDr,A.aDv,A.aDp,A.aDz,A.aZf,A.aZe,A.aZd,A.aZg,A.aXl,A.aXm,A.aXn,A.aXo,A.aQW,A.aZ4,A.b4C,A.b4E,A.b4F,A.b4G,A.b4H,A.b4I,A.b4J,A.aOO,A.aAY,A.avQ,A.avR,A.aHw,A.aHx,A.b8O,A.aRL,A.aRM,A.aDC,A.aAS,A.aKM,A.aV2,A.aVe,A.aVf,A.aVg,A.aVh,A.aVj,A.ayi,A.aDh,A.aDi,A.aAM,A.aAN,A.aAO,A.aAP,A.aH2,A.aH3,A.aH0,A.aw8,A.aEb,A.aEc,A.aGY,A.aCo,A.bbQ,A.aAs,A.aXk,A.ayn,A.a5r,A.ad7,A.aIh,A.aIg,A.bcn,A.bcp,A.b79,A.aYU,A.aYT,A.b8C,A.b7a,A.b7c,A.b7b,A.aFm,A.aFh,A.b2e,A.b2l,A.b2n,A.aUf,A.aUe,A.aUc,A.aUa,A.b5Y,A.b2u,A.b07,A.b3y,A.aK3,A.aTq,A.aTt,A.b3h,A.b83,A.b8a,A.b8V,A.b8W,A.b1u,A.b1w,A.aE5,A.aE6,A.aE7,A.bcz,A.bcT,A.bcU,A.bc1,A.aIn,A.bbN,A.aGx,A.aGv,A.aU6,A.awP,A.awM,A.awF,A.awE,A.awL,A.awK,A.awG,A.awH,A.awI,A.awJ,A.awD,A.aDK,A.aXM,A.aXN,A.aXO,A.aXP,A.aXQ,A.aAz,A.aAx,A.aAy,A.b0X,A.axE,A.azA,A.aJs,A.aJr,A.aLZ,A.aAU,A.aAo,A.aAp,A.aAq,A.b22,A.b4z,A.b0F,A.b0E,A.b0x,A.b0o,A.b0n,A.b0i,A.b9F,A.b9G,A.b9H,A.b9I,A.b9J,A.bav,A.baw,A.bax,A.baz,A.baA,A.baB,A.baC,A.baD,A.baE,A.baF,A.baG,A.bay,A.bb1,A.bb2,A.bb3,A.bb4,A.bb5,A.bb6,A.bb7,A.bb8,A.bb9,A.bba,A.bbb,A.aTG,A.aTH,A.aP_,A.aJe,A.aQA,A.aXz,A.aXA,A.bap,A.baq,A.bar,A.bas,A.bat,A.bau,A.aSB,A.b9K,A.b9L,A.b9M,A.b9N,A.b9O,A.b9P,A.b9Q,A.b9R,A.ayc,A.b_I,A.b_H,A.b_J,A.b9S,A.b9T,A.b9U,A.b9V,A.b9W,A.b9X,A.b9Y,A.b9Z,A.ba_,A.ba0,A.ba1,A.ayQ,A.ayR,A.ba2,A.ba3,A.ba4,A.ba6,A.ba7,A.ba8,A.ba9,A.baa,A.bab,A.bac,A.bad,A.ba5,A.b1o,A.b1q,A.b_A,A.b1n,A.b1p,A.aGs,A.aTj,A.aTk,A.bae,A.baf,A.bag,A.bah,A.bai,A.baj,A.bak,A.bal,A.bam,A.ban,A.aSr,A.bao,A.aSz,A.baH,A.baI,A.baJ,A.baK,A.aBP,A.baL,A.baM,A.baN,A.baU,A.baV,A.baW,A.baX,A.baY,A.baZ,A.bb_,A.bb0,A.baO,A.baP,A.baQ,A.baR,A.baS,A.baT,A.aIF,A.aIG,A.aIH,A.aII,A.aIJ,A.aIK,A.aIL,A.aIM,A.aLA,A.b4a,A.b49,A.b4b,A.aLB,A.b4c,A.bbc,A.aw3,A.bbd,A.bbe,A.bbf,A.bbg,A.bbh,A.bbi,A.bbj,A.aNh,A.aN9,A.aNc,A.aNg,A.aNk,A.aNj,A.aN8,A.aNi,A.aNf,A.aNe,A.aNm,A.bbk,A.bbl,A.bbm,A.bbn,A.bbo,A.bbp,A.bbq,A.bbr,A.b8E,A.bbs,A.bbt,A.bbu,A.bbv,A.bbw,A.bbx,A.bby,A.bbz,A.bbA,A.bbB,A.bbC,A.bbD,A.bbE,A.bbF,A.bbH,A.bbG,A.bbI,A.aw6,A.b2H,A.b2I,A.ayd,A.aXr,A.azg,A.ayC,A.b_a,A.b_d,A.b_f,A.b4K,A.b4N,A.b4P,A.b50,A.b53,A.b55,A.aTS,A.ayO,A.ayP,A.ayT,A.ayS,A.azR,A.azQ,A.azP,A.azM,A.azL,A.azJ,A.azK,A.aPf,A.aGV,A.aG0,A.aOf,A.aOd,A.aTx,A.aTw,A.aV7,A.aV4,A.aV5,A.aSq,A.aSp,A.aSo,A.aD3,A.b8T,A.b6y,A.b6z,A.b6A,A.aBS,A.aBT,A.aBR,A.aBX,A.aBU,A.aL4,A.aL5,A.aL3,A.aL2,A.aL7,A.aL6,A.aLs,A.aLq,A.aLt,A.aLp,A.aLr,A.aNX,A.aOa,A.aO9,A.azi,A.azj,A.azk,A.azl,A.aNx,A.aEd,A.aFx,A.aFK,A.aFL,A.aFM,A.aFN,A.aFO,A.bbJ,A.bbK,A.aGo,A.ayz,A.ayA,A.aO3,A.aO4,A.bcw,A.aJ3,A.aJ4,A.aMH,A.aMM,A.aMR,A.aMS,A.aMQ,A.azS,A.aTv,A.aTD,A.aTA,A.aTE,A.aTM,A.aGi,A.aGh,A.aTy,A.aZp,A.aZq,A.aTK,A.axz,A.axw,A.axx,A.axy,A.aUK,A.aUL,A.aQe,A.aQa,A.aQb,A.aQg,A.aW4,A.aW6,A.aW7,A.aW9,A.b_R,A.b_Q,A.b_P,A.b_V,A.b_W,A.b_X,A.b05,A.b59,A.b5a,A.b58,A.b5b,A.b5c,A.aAn,A.aLR,A.b06,A.aEq,A.aEr,A.aEs,A.bc2,A.aTP,A.aUN,A.b2p,A.aNV,A.aNW,A.aOc,A.aL9,A.aRa,A.aRe,A.aw0,A.aw1,A.aw2,A.b3K,A.aKh,A.aZT,A.aZU,A.aZV,A.aZu,A.aZv,A.aZw,A.aZH,A.aZM,A.aZN,A.aZO,A.aZP,A.aZQ,A.aZR,A.aZS,A.aZx,A.aZy,A.aZz,A.aZK,A.aZs,A.aZL,A.aZr,A.aZA,A.aZB,A.aZC,A.aZD,A.aZE,A.aZF,A.aZG,A.aZI,A.aZJ,A.b_6,A.b_7,A.b_5,A.b_3,A.b_2,A.b_4,A.aAX,A.b1a,A.b17,A.b18,A.b15,A.b13,A.b14,A.b16,A.b1g,A.b1i,A.b1k,A.b1h,A.b1j,A.b1A,A.b2F,A.b2C,A.b2E,A.b2D,A.b1G,A.b1H,A.b1J,A.b1I,A.b1K,A.b1L,A.b1N,A.b1M,A.b4i,A.b4j,A.b4l,A.b4m,A.b4k,A.b2V,A.b2S,A.b5g,A.b34,A.b31,A.b3_,A.b36,A.b37,A.b38,A.b35,A.b32,A.b33,A.b30,A.aJy,A.b5p,A.aJx,A.aVM,A.b40,A.b3M,A.b3N,A.b3O,A.b3P,A.aKl,A.b8t,A.b8u,A.b8v,A.b8w,A.aMz,A.aR0,A.b3U,A.b3R,A.b3T,A.b3S,A.b3Q,A.b6Q,A.b5y,A.b5w,A.b5v,A.b6J,A.b6S,A.b6X,A.b7m,A.b7o,A.b7n,A.b7D,A.b7E,A.b9o,A.aVl,A.aVm,A.b5A,A.b5B,A.b5C,A.b5E,A.b5F,A.aYP,A.aVX,A.aWr,A.aWD,A.aLL,A.aLM,A.b_E,A.b_D,A.b_F,A.ayV,A.ayW,A.ayX,A.aZX,A.aHk,A.aHf,A.awq,A.aHo,A.aHp,A.aHN,A.aHM,A.b6C,A.b6D,A.b6E,A.aVR,A.aVQ,A.aVP,A.aFd,A.aQl,A.aQh,A.axK,A.aPj,A.aPp,A.aPo,A.aPk,A.aKX,A.aKW,A.aPF,A.aPG,A.aPB,A.aPC,A.aPD,A.aPg,A.aPN,A.aPO,A.aPJ,A.aPW,A.aPY,A.aQ_,A.aPZ,A.aPU,A.aPT,A.aQ4,A.aQ2,A.aQ3,A.aQ1,A.aQ9,A.aQ8,A.aRj,A.aRi,A.aW_,A.aSb,A.aS9,A.b6x,A.b6w,A.b6u,A.b6v,A.b8L,A.aSe,A.aSd,A.aRX,A.aS0,A.aRZ,A.aS1,A.aS_,A.aS2,A.aS3,A.ay9,A.aND,A.aww,A.aYS,A.aSt,A.b0H,A.aEV,A.aEX,A.aEW,A.aJC,A.axj,A.aKE,A.aDL,A.aQv,A.aQw,A.aQu,A.aE8,A.aVc,A.aVH,A.aVG,A.aVI,A.b4A,A.b96,A.avW,A.avZ,A.avX,A.avY,A.aw_,A.b20,A.b1Y,A.b1W,A.b1X,A.b2_,A.b8i,A.b8j,A.b28,A.aYX,A.aZ1,A.b81,A.b80,A.ayZ,A.b8m,A.b8n,A.b8l,A.aA9,A.aAK,A.aBu,A.aBv,A.aCW,A.aCx,A.aCY,A.aCZ,A.aCy,A.aCX,A.aCC,A.aCw,A.aCp,A.aCH,A.aCG,A.aCI,A.b6g,A.aED,A.aEC,A.b93,A.aEG,A.aEI,A.aEH,A.b4Z,A.aBa,A.aBb,A.aBd,A.aBe,A.aB9,A.aBl,A.aBm,A.aBn,A.aBo,A.b4W,A.b4X,A.b4U,A.aP3,A.aF7,A.b2N,A.aD9,A.aD7,A.aD6,A.aDb,A.aDd,A.aD4,A.aD8,A.aD5,A.aMT,A.aL1,A.aFQ,A.aFT,A.aFV,A.aFX,A.aFZ,A.aFS,A.b0N,A.b0O,A.b0P,A.b0S,A.b0T,A.b0U,A.aGC,A.aGA,A.aGz,A.aH6,A.b2K,A.aHu,A.aHt,A.aHs,A.aYD,A.aYI,A.aYJ,A.aYK,A.aYL,A.aYM,A.aYN,A.aYC,A.aYB,A.aYE,A.aYF,A.aYG,A.aYH,A.aHB,A.b9l,A.b9m,A.b9n,A.b3D,A.b3E,A.aJJ,A.aJL,A.aJI,A.aK_,A.aKq,A.aKr,A.aQN,A.aQM,A.aLJ,A.b61,A.b6_,A.b63,A.aLG,A.aLI,A.aLF,A.aLH,A.aMh,A.b5K,A.b5I,A.b5J,A.b5H,A.b5j,A.b5k,A.aMx,A.b5U,A.b67,A.b65,A.aWN,A.aWK,A.b48,A.b45,A.aRs,A.aRt,A.aRu,A.aRv,A.aRy,A.aRz,A.aRA,A.aRC,A.aRJ,A.aRG,A.aRI,A.b6i,A.aRN,A.aOT,A.aOP,A.aOQ,A.aOR,A.aOV,A.aOX,A.aOY,A.aLg,A.aLh,A.aLi,A.aLe,A.aLf,A.aLj,A.aLk,A.aTb,A.aUR,A.aUS,A.b7g,A.b7f,A.b7h,A.b7i,A.b7e,A.b7d,A.b7j,A.aRU,A.aRS,A.aRT,A.aRV,A.aRR,A.aRQ,A.b6q,A.b7L,A.b7N,A.b7P,A.b7R,A.b7T,A.aWU,A.b9z,A.aXs,A.aXB,A.b_v,A.aWG,A.aWF,A.aHA,A.aHz,A.b_l,A.azs,A.azt,A.azq,A.azm,A.azn,A.azo,A.bcA,A.aKa,A.aKb,A.aK8,A.ay6,A.aUy,A.aUx,A.ayr,A.ayq,A.aO6,A.aO7,A.aO8,A.aHY,A.aHZ,A.aI_,A.azZ,A.aA_,A.aA0,A.aXK,A.aN5,A.aMZ,A.aN_,A.aN0,A.aN1,A.aN2,A.aN3,A.aN4,A.bcj,A.ax6,A.axN,A.axO,A.ay2,A.b99,A.aU1,A.azF,A.b_i,A.aB3,A.aB4,A.aB5,A.aB6,A.aB0,A.aB1,A.aB2,A.b3x,A.aFg,A.b4t,A.b3v,A.aNR,A.aJg,A.aJh,A.a_F,A.aJP,A.aJQ,A.aJR,A.aJS,A.b3G,A.aVL,A.aIk,A.aJN,A.aJO,A.aDa,A.axq,A.axs,A.azd,A.aE2,A.aEZ,A.aEY,A.aGH,A.aJn,A.aJu,A.aJv,A.aJw,A.aSv,A.aHL,A.aHD,A.aHE,A.aHF,A.aHI,A.aHJ,A.aF0,A.aHq,A.a6h,A.b4e,A.b6H,A.b8x,A.aMc,A.aMe,A.aMd,A.aOE,A.aOD,A.bbX,A.ayl,A.ayk,A.aIQ,A.aMr,A.aMu,A.aAb,A.b9B,A.aMV,A.b9w,A.b9s,A.aP4,A.aP5,A.aP7,A.aP8,A.aP9,A.bd7,A.b2O,A.aNN,A.aQB,A.aSD,A.awA,A.aK5,A.aPI,A.aTQ,A.aTR,A.aXa,A.aGj,A.aGf,A.aIV,A.aE4,A.aCb,A.azU,A.aOw,A.aW2,A.aWm,A.aG2,A.aOx,A.aOt,A.aOu,A.aJ0,A.aJ1,A.aJ2,A.aJ_,A.aIY,A.aIZ,A.aWj,A.aWk,A.aWl,A.aYs,A.aYr,A.aMX,A.aWe,A.aWf,A.aWg,A.aWh,A.aWi,A.aWc,A.aWb,A.aW0,A.aW1,A.aWo,A.aWp,A.aXu,A.aXv,A.aNP,A.aUQ,A.aKC,A.aKD,A.bc4,A.aEu,A.aEv,A.aXd,A.aAf,A.aUA,A.aUB,A.aUC,A.aUD,A.aUE,A.aUF,A.aUG,A.aUH,A.b5S,A.b5R,A.aUu,A.azD,A.b1v,A.b1x,A.aKt,A.aKu,A.b8B,A.aYt,A.aYu,A.aXY,A.aY0,A.aY1,A.aY2,A.bbZ,A.bc_,A.aYo,A.b8q,A.aYa,A.aYk,A.aY8,A.aY4,A.aY5,A.aY7,A.aY6,A.aYh,A.aYb,A.aY9,A.aYc,A.aYj,A.aYg,A.aYe,A.aYd,A.aYf,A.bc8]) +q(A.a11,[A.awm,A.aT_,A.aT0,A.aFb,A.aFc,A.aLm,A.aLo,A.aM5,A.aM6,A.ayg,A.ayL,A.aES,A.aDZ,A.aNu,A.aGP,A.aUq,A.aUr,A.aGe,A.aGc,A.aGd,A.axR,A.axS,A.bct,A.bcu,A.aEo,A.b8G,A.aIz,A.aIA,A.aIB,A.aIu,A.aIv,A.aIw,A.aDy,A.bcy,A.aNJ,A.b4D,A.b2r,A.aOL,A.aON,A.avO,A.aAZ,A.aQK,A.avP,A.aRK,A.aDF,A.aDE,A.aDD,A.aKN,A.aVi,A.aVk,A.aGO,A.aQU,A.aH1,A.aEa,A.aVb,A.b97,A.aDk,A.ayp,A.bcM,A.aOq,A.aYV,A.aYW,A.b7Y,A.b7X,A.aFl,A.aFk,A.aFj,A.b2a,A.b2h,A.b2g,A.b2d,A.b2c,A.b2b,A.b2k,A.b2j,A.b2i,A.b2m,A.aUg,A.aUd,A.aUb,A.aU9,A.b74,A.b73,A.aZk,A.aZj,A.b4x,A.b8I,A.b8J,A.b9u,A.b5X,A.b5W,A.b8e,A.b8d,A.ayu,A.ayv,A.aIm,A.bbO,A.axU,A.aGw,A.aU7,A.awR,A.awS,A.awQ,A.awN,A.avU,A.b0W,A.aHR,A.b4R,A.b4Q,A.axD,A.azx,A.azz,A.azy,A.azw,A.b4y,A.aAW,A.aSL,A.b72,A.b71,A.b7_,A.b70,A.b08,A.b0y,A.b0l,A.b0d,A.b0p,A.b0c,A.b0w,A.b0m,A.b0e,A.b0z,A.b0k,A.b0A,A.b0j,A.b0B,A.b0C,A.b0D,A.b0q,A.b0h,A.b0r,A.b0g,A.b0t,A.b0b,A.b0s,A.b0f,A.b0u,A.b0a,A.b0v,A.b09,A.aFA,A.aye,A.aZb,A.aZ8,A.aZa,A.aZ9,A.ay_,A.ay0,A.ay1,A.axZ,A.aI9,A.aIa,A.b_M,A.b_L,A.b_N,A.b_K,A.b6Z,A.aFo,A.b3n,A.b3o,A.b3p,A.b7l,A.aIb,A.aIc,A.aId,A.aLC,A.aJ8,A.aJ9,A.aJa,A.aJb,A.aWt,A.bd6,A.aOA,A.aOB,A.b_b,A.b_c,A.b_e,A.b4L,A.b4M,A.b4O,A.b51,A.b52,A.b54,A.b6h,A.aTm,A.aTl,A.aV6,A.aBV,A.aBW,A.aFv,A.aFq,A.aFu,A.aFs,A.ayB,A.aPd,A.aPc,A.aPb,A.bcx,A.aN7,A.aTF,A.b3a,A.b_y,A.aZm,A.aZl,A.aZo,A.aZn,A.aJY,A.aEf,A.b_S,A.b_T,A.b00,A.b0_,A.b_Z,A.aAj,A.aAi,A.aAk,A.aAl,A.b_Y,A.b04,A.b02,A.b03,A.b01,A.aWy,A.aWA,A.aWv,A.b9x,A.b8F,A.aEp,A.axl,A.ays,A.aFE,A.aFD,A.aFH,A.aFI,A.aF4,A.aF2,A.aF3,A.aJG,A.aJF,A.aJE,A.aC0,A.aC5,A.aC6,A.aC1,A.aC2,A.aC3,A.aC4,A.aL8,A.aBZ,A.b7k,A.aLy,A.aLu,A.aLw,A.aLx,A.aLv,A.aO_,A.aOo,A.aRc,A.aRd,A.aR8,A.aR9,A.aUW,A.aUX,A.aUY,A.aUZ,A.aV_,A.axf,A.axg,A.axd,A.axe,A.axb,A.axc,A.axa,A.aFG,A.aKg,A.aZW,A.aZt,A.b19,A.b1B,A.b1z,A.b1C,A.b95,A.b94,A.b2R,A.b2U,A.b2W,A.b2Q,A.b2T,A.b2v,A.b39,A.b7I,A.b7H,A.b7J,A.aKj,A.aKk,A.aR1,A.aR2,A.aQY,A.aQZ,A.aR_,A.b1O,A.aR5,A.aR4,A.b4_,A.b3Z,A.b3Y,A.b3W,A.b3X,A.b3V,A.b6n,A.b6m,A.b6o,A.b6O,A.b6P,A.b6M,A.b6N,A.b6L,A.b5x,A.b6T,A.b7q,A.b7s,A.b7r,A.b7t,A.b7v,A.b7w,A.b7x,A.b7y,A.b7z,A.b7A,A.b7u,A.b7V,A.b7U,A.aVY,A.aWz,A.aWB,A.aWw,A.aWx,A.aWE,A.aH9,A.aH8,A.b3B,A.aHh,A.aHi,A.aLb,A.b7G,A.aPh,A.aQj,A.aQk,A.b1f,A.aZ6,A.b3c,A.aPl,A.aIW,A.aIX,A.aL_,A.aKZ,A.aKY,A.aMD,A.aMC,A.aMB,A.aPE,A.aPH,A.aPK,A.aPX,A.aRl,A.aRm,A.aRn,A.ay8,A.aSs,A.aDM,A.aDN,A.aOJ,A.aQs,A.aQt,A.aQr,A.aVJ,A.aVK,A.aYA,A.b1Z,A.b1U,A.b1V,A.b1T,A.b8k,A.b27,A.b26,A.aZ0,A.aYZ,A.aZ_,A.aYY,A.aXD,A.aQD,A.aQE,A.b1_,A.b10,A.aCt,A.aCK,A.aCL,A.aCM,A.aCN,A.aCO,A.aCP,A.aCQ,A.aCR,A.aCS,A.aCT,A.aCU,A.aCV,A.aCD,A.aCu,A.aCv,A.aCq,A.aCs,A.aD_,A.aD0,A.aD1,A.aCz,A.aCA,A.aCB,A.aCE,A.b1P,A.b1Q,A.b1R,A.b1S,A.aF8,A.aF9,A.aF6,A.aF5,A.axW,A.azH,A.azI,A.aFP,A.aFR,A.aFU,A.aFW,A.aFY,A.aG_,A.b0R,A.b0Q,A.b2A,A.b2z,A.b2y,A.b2J,A.b2L,A.b2M,A.awe,A.b3r,A.b3s,A.b3t,A.b3C,A.b41,A.aKO,A.b62,A.b60,A.b5Z,A.aLE,A.b5q,A.b4o,A.aMm,A.aMl,A.aMn,A.aMk,A.aMj,A.b4p,A.b4r,A.b4q,A.b2s,A.b5T,A.aQx,A.b6a,A.b6b,A.b69,A.b64,A.b68,A.b66,A.aWL,A.aWM,A.b43,A.aKR,A.aKP,A.aRr,A.b6r,A.aRx,A.aRF,A.aRH,A.aOW,A.aOS,A.aOU,A.aSH,A.aSU,A.aT9,A.aTa,A.aT8,A.aTc,A.b6p,A.b7K,A.b7M,A.b7O,A.b7Q,A.b7S,A.aYO,A.b9y,A.b_u,A.b_w,A.b_p,A.b_o,A.b_q,A.b_r,A.b_n,A.b_t,A.b_s,A.b_m,A.b_k,A.azp,A.b3J,A.aUz,A.b3F,A.ax3,A.aIO,A.aws,A.aF_,A.aJo,A.aJt,A.aHG,A.aHH,A.aHK,A.aF1,A.aIR,A.aKx,A.aKy,A.aKz,A.aMq,A.aMt,A.aMs,A.aMW,A.aJA,A.aU_,A.axi,A.aM1,A.aM0,A.bc3,A.aEw,A.aCa,A.b5P,A.b5O,A.b5Q,A.bcI,A.bcH]) +q(A.b1r,[A.Lc,A.rS,A.At,A.DJ,A.O1,A.a1c,A.AO,A.yI,A.KL,A.Ue,A.a63,A.nk,A.Bn,A.avS,A.zq,A.RH,A.ML,A.vA,A.F2,A.Ui,A.aiW,A.I9,A.Tg,A.d4,A.fZ,A.a9_,A.a0V,A.aee,A.PK,A.Ob,A.zS,A.HV,A.HW,A.a8m,A.e0,A.DX,A.axu,A.z9,A.nW,A.KK,A.aAw,A.aej,A.Ts,A.t3,A.hc,A.GJ,A.a3W,A.w0,A.qa,A.I7,A.wF,A.adj,A.qc,A.SG,A.a0_,A.axL,A.Ci,A.a02,A.xW,A.aNO,A.w1,A.Qs,A.HK,A.El,A.abz,A.uR,A.R4,A.LS,A.HD,A.HE,A.HF,A.Lf,A.aHV,A.CW,A.LM,A.a0p,A.a6b,A.Jn,A.nZ,A.ok,A.Lg,A.rD,A.N4,A.mY,A.IR,A.ZY,A.arI,A.a1M,A.CK,A.Mf,A.pe,A.fk,A.a4l,A.CN,A.UQ,A.aie,A.EB,A.a7d,A.Ns,A.JR,A.UR,A.aVZ,A.IX,A.aH4,A.Li,A.axY,A.aZZ,A.b_8,A.b_9,A.aCc,A.aj4,A.b2G,A.x7,A.N6,A.iU,A.Os,A.A7,A.oU,A.vG,A.lK,A.b6R,A.abN,A.JU,A.aSJ,A.q4,A.abT,A.K3,A.Ag,A.aRp,A.H4,A.a_n,A.aef,A.Dy,A.a_X,A.a01,A.a_Z,A.vi,A.SR,A.aVV,A.Sb,A.H2,A.CR,A.a3N,A.a6v,A.vE,A.yD,A.NI,A.a1Y,A.wp,A.RC,A.Ic,A.Hu,A.RD,A.SV,A.a4D,A.acm,A.acR,A.ay5,A.Rq,A.aXL,A.aeH,A.Bt,A.aAC,A.a_9,A.FG,A.a5R,A.Ss,A.zV,A.mf,A.acN,A.a6M,A.aTd,A.aTe,A.kP,A.aV8,A.N5,A.np,A.adX,A.LT,A.n1,A.o5,A.Vb,A.pz,A.adZ,A.v7,A.aEB,A.Cq,A.adT,A.awV,A.b6Y,A.J7,A.Fh,A.a7V,A.iz,A.a7s,A.Hk,A.k4,A.WX,A.a7Z,A.Jg,A.aqu,A.JX,A.aaN,A.ab1,A.Bx,A.ab4,A.ab2,A.Hr,A.Oy,A.abU,A.E_,A.dM,A.a8o,A.adL,A.lV,A.a6A,A.MB,A.OC,A.HC,A.C_,A.RI,A.L_,A.FL,A.oY,A.bT,A.EU,A.a4z,A.G4,A.Al,A.FN,A.FO,A.abt,A.FD,A.pA,A.rJ,A.nx,A.ad6,A.a4a,A.fW,A.qJ,A.o9,A.pE,A.pV,A.wA,A.wB,A.tL,A.po,A.vd,A.om,A.v1,A.uV,A.qY,A.mu,A.Ch,A.Cj,A.ml,A.Pr,A.t1,A.Nq,A.aIS,A.B_,A.qm,A.a8z,A.GC,A.vh,A.Nz,A.i2,A.a8n,A.Sn,A.So,A.T0,A.oc,A.C5,A.o8,A.aKv,A.fl,A.mN]) +p(A.ayj,A.ap2) +q(A.a0D,[A.Lt,A.DT,A.a0L,A.a0Q,A.DS]) +q(A.a12,[A.aGR,A.bbY,A.bbT,A.aNt,A.bcs,A.bch,A.aIx,A.aIt,A.aDq,A.aTW,A.aTi,A.b8P,A.bcY,A.aGZ,A.aAt,A.ayo,A.azY,A.aOp,A.aIf,A.bco,A.b8D,A.b9D,A.aFn,A.aFi,A.b2f,A.b2o,A.b8H,A.b5V,A.b2t,A.aJq,A.aK2,A.aK4,A.aTp,A.aTs,A.aTr,A.b3g,A.b3l,A.b3i,A.aLT,A.b88,A.aWZ,A.aX0,A.aX1,A.b87,A.b86,A.b8U,A.aKF,A.aKG,A.aKH,A.aKI,A.aQO,A.aQP,A.aU3,A.aU4,A.aU5,A.awB,A.awC,A.aU8,A.axB,A.axC,A.b_z,A.aNb,A.aNl,A.aNd,A.aNa,A.bc0,A.aUM,A.azN,A.azO,A.aI0,A.aOe,A.aBp,A.aBq,A.aFw,A.aFt,A.aFr,A.aMP,A.aMO,A.aGg,A.aTz,A.ax1,A.aLQ,A.aTI,A.aTN,A.aXF,A.aXG,A.aXI,A.aXH,A.aQf,A.aW8,A.aAh,A.b5d,A.b57,A.aNZ,A.aRb,A.aRf,A.aKf,A.b3L,A.b5m,A.b5l,A.b1b,A.b1c,A.b1d,A.b5i,A.b5h,A.b5f,A.b5o,A.b8r,A.b8s,A.aR6,A.b6d,A.b5z,A.b6U,A.b6V,A.b7B,A.b7C,A.b8A,A.b7W,A.b5D,A.aVW,A.aLN,A.b_C,A.aHa,A.aHj,A.aHg,A.awr,A.aM8,A.aLc,A.aLd,A.aQi,A.aPi,A.aPq,A.aPn,A.aPm,A.aPv,A.aPt,A.aPu,A.aPs,A.aKV,A.aNz,A.aNy,A.aNA,A.aNB,A.aPz,A.aPM,A.aPL,A.aPP,A.aPQ,A.aQ7,A.aPr,A.aPx,A.aPw,A.aPR,A.aPS,A.aPy,A.aQ5,A.aQ6,A.aRk,A.b6t,A.aSf,A.aSg,A.aRY,A.aya,A.b0I,A.aTX,A.b29,A.aCr,A.aCF,A.aCJ,A.aBg,A.aBi,A.aBh,A.aBj,A.aBk,A.aBc,A.aBf,A.b4Y,A.b4V,A.aP1,A.aP2,A.b21,A.aDc,A.aGB,A.b2x,A.aGy,A.b2B,A.b4d,A.b5G,A.b75,A.b8y,A.b8z,A.b47,A.b46,A.b44,A.aRB,A.b6l,A.b6j,A.b6k,A.aRE,A.aSI,A.aSR,A.b5u,A.b5t,A.aXp,A.b5s,A.b5r,A.azv,A.azu,A.azr,A.bcB,A.aK9,A.aK7,A.aMY,A.aN6,A.ax5,A.b_j,A.aKc,A.ax9,A.b3I,A.b3H,A.bcD,A.bcE,A.b8Y,A.aBC,A.aAQ,A.azG,A.aMb,A.aOC,A.aMp,A.aMv,A.aMw,A.bcO,A.bcP,A.b9q,A.aOv,A.aGF,A.aEx,A.aEy,A.aYi]) +q(A.z,[A.Pa,A.a0P,A.x3,A.UL,A.acF,A.oS,A.at,A.e7,A.bg,A.m0,A.C0,A.Sy,A.tw,A.BN,A.rj,A.ca,A.rx,A.CS,A.af8,A.aqw,A.eW,A.A2,A.Mv,A.Rb,A.a_2,A.hz,A.kx,A.Qq,A.bW,A.rs,A.atw,A.Pl,A.OJ,A.a1R,A.TB,A.aeP]) +q(A.a0J,[A.Uf,A.Ug]) +p(A.Lu,A.a03) +q(A.jJ,[A.Ee,A.a8K]) +q(A.Ee,[A.aaD,A.a_p,A.a0X,A.a1_,A.a0Z,A.a7U,A.Tf,A.a58]) +p(A.a7R,A.Tf) +q(A.aOI,[A.aLl,A.aM4]) +q(A.IC,[A.Ao,A.AE]) +q(A.Bh,[A.hU,A.Bi]) +q(A.aBs,[A.H3,A.oF]) +q(A.abA,[A.a0I,A.a0G,A.a0H,A.a0F]) +q(A.dF,[A.a0d,A.jE,A.m8,A.tH,A.a5J,A.ae_,A.ahu,A.aaS,A.aiK,A.O8,A.xV,A.n_,A.a7z,A.ae1,A.Cs,A.nq,A.a1s,A.aj7]) +p(A.a3d,A.aBr) +q(A.jE,[A.a3V,A.Ng,A.Ni]) +q(A.fT,[A.hT,A.a8F]) +q(A.hT,[A.PQ,A.amG,A.amF,A.PR,A.PT,A.PU,A.PV,A.PW,A.PX]) +q(A.aDj,[A.qI,A.ai0]) +p(A.PS,A.amG) +p(A.a8D,A.amF) +p(A.aBD,A.ai0) +p(A.XG,A.acV) +p(A.a8G,A.a8F) +q(A.eK,[A.Mz,A.PF,A.a8h,A.a8l,A.a8j,A.a8i,A.a8k]) +q(A.Mz,[A.a82,A.a81,A.a80,A.a84,A.a87,A.a89,A.a8g,A.a8c,A.a8e,A.a8d,A.a85,A.a88,A.a83,A.a8b,A.a8f,A.a86,A.PE,A.a8a]) +q(A.EM,[A.a4y,A.a4v,A.Fc]) +p(A.a4t,A.Fc) +q(A.ph,[A.TX,A.VP]) +q(A.a3e,[A.OW,A.OQ]) +p(A.a4W,A.NK) +q(A.axQ,[A.P3,A.RY]) +p(A.a3h,A.aNE) +p(A.aZc,A.awo) +p(A.atJ,A.aZ3) +p(A.b4B,A.atJ) +q(A.a9i,[A.ayx,A.a2k,A.aHl,A.aHv,A.aJk,A.aNM,A.aRD,A.aFB,A.axX,A.aVd]) +q(A.tl,[A.Hj,A.a3T,A.Oj,A.A9,A.ad0]) +q(A.aS4,[A.aAR,A.aKL]) +p(A.M9,A.ahG) +q(A.M9,[A.aSj,A.a4q,A.Rc]) +q(A.O,[A.qw,A.Iv,A.agu,A.CG,A.a3z,A.tJ]) +p(A.akl,A.qw) +p(A.adW,A.akl) +p(A.GH,A.aME) +q(A.HY,[A.a0o,A.aaE]) +q(A.aVo,[A.aJ5,A.aDV,A.aX9]) +q(A.aVn,[A.b_x,A.vz,A.y1]) +p(A.akL,A.b_x) +p(A.akM,A.akL) +p(A.akN,A.akM) +p(A.nd,A.akN) +p(A.MH,A.nd) +q(A.aDl,[A.aLS,A.aDG,A.aBO,A.aG8,A.aLO,A.aOn,A.aRO,A.aSl]) +q(A.aDm,[A.aLU,A.P7,A.aVE,A.aLY,A.aAD,A.aNw,A.aDe,A.aX3]) +p(A.aLz,A.P7) +q(A.a4q,[A.aH_,A.aw7,A.aE9]) +q(A.aVr,[A.aVy,A.aVF,A.aVA,A.aVD,A.aVz,A.aVC,A.aVp,A.aVv,A.aVB,A.aVx,A.aVw,A.aVu]) +q(A.a2p,[A.aAr,A.a48]) +q(A.r9,[A.aiJ,A.EL]) +q(J.Fx,[J.O4,J.O5,J.l,J.zN,J.zO,J.vt,J.px]) +q(J.l,[J.rE,J.v,A.Av,A.Pe,A.aR,A.ZF,A.KX,A.o2,A.e3,A.ahd,A.kk,A.a1S,A.a2C,A.ai2,A.Mt,A.ai4,A.a2H,A.bh,A.aiR,A.kp,A.a4R,A.ajT,A.a6n,A.a6O,A.alm,A.aln,A.kv,A.alo,A.am2,A.kz,A.amU,A.ap0,A.kH,A.aq2,A.kI,A.aqr,A.jj,A.arq,A.adA,A.kS,A.arC,A.adJ,A.ae4,A.ath,A.att,A.atE,A.au8,A.auc,A.ma,A.akP,A.mk,A.ame,A.a8Z,A.aqy,A.mH,A.arJ,A.a_f,A.afx]) +q(J.rE,[J.a8O,J.qi,J.ln,A.b1l]) +p(J.aI8,J.v) +q(J.vt,[J.FB,J.O6]) +q(A.oS,[A.ye,A.Yz,A.qR,A.qQ]) +p(A.V_,A.ye) +p(A.Ub,A.Yz) +p(A.hk,A.Ub) +q(A.bE,[A.qP,A.jI,A.tX,A.aku]) +q(A.Iv,[A.l9,A.oL,A.auF,A.auE,A.auD,A.auB,A.auC]) +q(A.at,[A.aI,A.j6,A.bk,A.CO,A.VL,A.u2,A.D0,A.Xt]) +q(A.aI,[A.aT,A.W,A.cz,A.Or,A.akv,A.Vk]) +p(A.yZ,A.e7) +p(A.MF,A.C0) +p(A.EI,A.tw) +p(A.ME,A.rj) +p(A.yY,A.rx) +q(A.oV,[A.anT,A.anU,A.anV]) +q(A.anT,[A.bI,A.JK,A.Wq,A.JL,A.anW,A.anX]) +q(A.anU,[A.xk,A.anY,A.Wr,A.Ws,A.anZ,A.ao_,A.Wt]) +q(A.anV,[A.ao0,A.Wu,A.ao1,A.ao2]) +p(A.Y8,A.OF) +p(A.Cu,A.Y8) +p(A.yy,A.Cu) +q(A.Eb,[A.bV,A.cc]) +q(A.mz,[A.LU,A.JS,A.Y9]) +q(A.LU,[A.i4,A.h8]) +p(A.vn,A.a5r) +p(A.Po,A.tH) +q(A.ad7,[A.acr,A.DD]) +q(A.jI,[A.O7,A.zR,A.VJ]) +q(A.Pe,[A.Pb,A.Gi]) +q(A.Gi,[A.VZ,A.W0]) +p(A.W_,A.VZ) +p(A.vL,A.W_) +p(A.W1,A.W0) +p(A.mi,A.W1) +q(A.vL,[A.Aw,A.a7o]) +q(A.mi,[A.a7p,A.Pd,A.a7q,A.Gj,A.Gk,A.Pf,A.rQ]) +p(A.Y1,A.aiK) +q(A.cY,[A.JW,A.Sj,A.CM,A.nE,A.V6,A.JJ,A.x5]) +p(A.lH,A.JW) +p(A.f8,A.lH) +q(A.i_,[A.x2,A.Jc]) +p(A.CF,A.x2) +q(A.x_,[A.qt,A.jp]) +q(A.CJ,[A.bH,A.D2]) +q(A.JV,[A.wZ,A.JZ]) +q(A.ahK,[A.qn,A.J1]) +q(A.nE,[A.u8,A.tZ]) +p(A.aoR,A.at5) +q(A.tX,[A.x8,A.UC]) +q(A.JS,[A.qo,A.lJ]) +q(A.UO,[A.UN,A.UP]) +p(A.Iw,A.Y9) +q(A.aq7,[A.kW,A.k5]) +q(A.aq6,[A.Xu,A.Xv]) +p(A.S9,A.Xu) +q(A.qs,[A.u3,A.Xx,A.D_]) +p(A.Xw,A.Xv) +p(A.HR,A.Xw) +q(A.nr,[A.JY,A.as8,A.afL,A.ajV,A.xo]) +p(A.VG,A.JY) +q(A.a14,[A.z_,A.awZ,A.aIi]) +q(A.z_,[A.a_6,A.a5W,A.ae6]) +q(A.cv,[A.as7,A.as6,A.a_A,A.a_z,A.Vi,A.a4Y,A.a5N,A.a5M,A.ae7,A.Tp,A.a4L,A.aeO]) +q(A.as7,[A.a_8,A.a5Y]) +q(A.as6,[A.a_7,A.a5X]) +q(A.Lj,[A.b1s,A.b6F,A.aZ2,A.U5,A.agj,A.akJ,A.b8f,A.b8c]) +p(A.aZh,A.afM) +q(A.aZ2,[A.aYR,A.b8b]) +p(A.a5K,A.O8) +q(A.a0r,[A.b3f,A.aky]) +q(A.b3k,[A.akx,A.akz]) +p(A.atz,A.akx) +p(A.b3j,A.atz) +p(A.atA,A.akz) +p(A.b3m,A.atA) +p(A.b3q,A.akJ) +p(A.aJj,A.acw) +p(A.auG,A.asj) +p(A.Yf,A.auG) +q(A.n_,[A.GV,A.NR]) +p(A.ahy,A.Yc) +q(A.aR,[A.c5,A.a3y,A.kG,A.Xr,A.kR,A.jl,A.XT,A.aeg,A.a_j,A.uw]) +q(A.c5,[A.e4,A.p7]) +q(A.e4,[A.bD,A.bB]) +q(A.bD,[A.ZO,A.a_4,A.a3Z,A.Ho,A.ab8]) +p(A.a1C,A.o2) +p(A.Eh,A.ahd) +q(A.kk,[A.a1D,A.a1E]) +p(A.ai3,A.ai2) +p(A.Ms,A.ai3) +p(A.ai5,A.ai4) +p(A.a2F,A.ai5) +p(A.ko,A.KX) +p(A.aiS,A.aiR) +p(A.a3w,A.aiS) +p(A.ajU,A.ajT) +p(A.zA,A.ajU) +p(A.a6U,A.alm) +p(A.a6V,A.aln) +p(A.alp,A.alo) +p(A.a6W,A.alp) +p(A.am3,A.am2) +p(A.Pm,A.am3) +p(A.amV,A.amU) +p(A.a8X,A.amV) +p(A.aaQ,A.ap0) +p(A.Xs,A.Xr) +p(A.ac_,A.Xs) +p(A.aq3,A.aq2) +p(A.ac4,A.aq3) +p(A.acu,A.aqr) +p(A.arr,A.arq) +p(A.adu,A.arr) +p(A.XU,A.XT) +p(A.adv,A.XU) +p(A.arD,A.arC) +p(A.adI,A.arD) +p(A.ati,A.ath) +p(A.ahc,A.ati) +p(A.UK,A.Mt) +p(A.atu,A.att) +p(A.ajF,A.atu) +p(A.atF,A.atE) +p(A.VY,A.atF) +p(A.au9,A.au8) +p(A.aq4,A.au9) +p(A.aud,A.auc) +p(A.aqE,A.aud) +p(A.V0,A.V6) +q(A.Wv,[A.hv,A.P9]) +p(A.akQ,A.akP) +p(A.a67,A.akQ) +p(A.amf,A.ame) +p(A.a7K,A.amf) +p(A.aqz,A.aqy) +p(A.acz,A.aqz) +p(A.arK,A.arJ) +p(A.adQ,A.arK) +p(A.K7,A.auF) +p(A.asg,A.auE) +p(A.asd,A.auD) +p(A.asb,A.auB) +p(A.asc,A.auC) +q(A.a7Q,[A.i,A.Q]) +p(A.a_g,A.afx) +p(A.a7P,A.uw) +p(A.a_3,A.j7) +q(A.ayy,[A.aNq,A.Od]) +p(A.aMo,A.ax2) +p(A.aJZ,A.ax0) +p(A.aQQ,A.aJZ) +p(A.aGk,A.ax4) +p(A.avL,A.ax_) +p(A.aHP,A.aHQ) +p(A.aMf,A.aMg) +p(A.CA,A.aE3) +p(A.a42,A.aOh) +p(A.Dv,A.aTg) +q(A.aNG,[A.awU,A.aSE,A.aX4]) +q(A.awU,[A.afy,A.aXw]) +p(A.afz,A.afy) +p(A.awT,A.afz) +p(A.bha,A.aG6) +q(A.xp,[A.Ix,A.HA]) +p(A.jR,A.Wi) +p(A.Uc,A.jR) +p(A.Et,A.UE) +p(A.apw,A.a4L) +p(A.b6B,A.aGt) +p(A.apx,A.b6B) +p(A.a0i,A.aAF) +q(A.nl,[A.Wh,A.Op]) +p(A.a2g,A.ahQ) +q(A.a2g,[A.m,A.b7,A.ia,A.abh,A.aSh]) +q(A.m,[A.aY,A.aw,A.bN,A.b6,A.am7,A.R8,A.ama]) +q(A.aY,[A.ZI,A.kl,A.a2e,A.ahP,A.akk,A.Fu,A.a6g,A.a9g,A.GP,A.B2,A.a2b,A.adp,A.Ja,A.amH,A.ab7,A.Mb,A.aby,A.ahv,A.a2c,A.DB,A.F5,A.a4b,A.aca,A.nX,A.a7y,A.Fy,A.acf,A.ack,A.Fz,A.a1F,A.a1H,A.a1I,A.a1L,A.M0,A.ZK,A.a0g,A.Lp,A.a29,A.Ev,A.a2j,A.ZL,A.a2Y,A.aim,A.a3P,A.a53,A.NW,A.a6i,A.a6u,A.Xl,A.atb,A.afU,A.ab6,A.adr,A.arf,A.ari,A.adt,A.wJ,A.arA,A.am8,A.a5g,A.a9d,A.vw,A.j1,A.a1w,A.am9,A.a24,A.a2x,A.a3p,A.Fa,A.zC,A.tS,A.Qk,A.al8,A.a6X,A.alr,A.Gv,A.aaT,A.ab3,A.abB,A.ac0,A.amb,A.f7,A.adD,A.aeh,A.aep,A.a1e,A.yp,A.a1d,A.Gl,A.xf,A.tu,A.F6,A.G8,A.G9,A.Gu,A.Hg,A.I4]) +q(A.aw,[A.Md,A.Qa,A.y4,A.yq,A.FV,A.AD,A.M4,A.Mc,A.Si,A.M5,A.uz,A.yC,A.ys,A.yt,A.zW,A.V,A.zL,A.E7,A.zM,A.LX,A.LY,A.yF,A.M_,A.J_,A.H0,A.Uz,A.uN,A.OL,A.Ql,A.Lh,A.Lo,A.J5,A.J4,A.CL,A.ED,A.MU,A.Xe,A.NU,A.Vx,A.U0,A.KE,A.Vo,A.zK,A.SQ,A.OK,A.a5d,A.xt,A.xu,A.JD,A.Re,A.Vc,A.Bs,A.wn,A.S3,A.BQ,A.SL,A.rk,A.XR,A.Tc,A.qE,A.zh,A.KC,A.Tw,A.F4,A.KP,A.Ml,A.EE,A.EF,A.X4,A.zf,A.Nc,A.Nk,A.lv,A.zx,A.vf,A.Ow,A.VR,A.Pj,A.u0,A.Gr,A.PA,A.Nt,A.Sk,A.wg,A.R7,A.aaO,A.Jw,A.Xi,A.Rr,A.Rv,A.Xb,A.Ht,A.RQ,A.BK,A.RR,A.xn,A.Xg,A.ST,A.Cg,A.Is,A.Tz,A.LN,A.E1,A.OH,A.OA,A.G_]) +p(A.aF,A.aqk) +q(A.aF,[A.ahO,A.anv,A.a_V,A.LO,A.Oq,A.a7L,A.a1O,A.Me,A.aqs,A.ahw,A.afV,A.agW,A.agM,A.agN,A.akG,A.F7,A.YP,A.IV,A.agg,A.YC,A.YD,A.Uv,A.YE,A.J0,A.JI,A.YF,A.Uy,A.VM,A.atL,A.Yy,A.YA,A.J6,A.US,A.UU,A.YI,A.YJ,A.apm,A.Vy,A.YN,A.Yx,A.YM,A.YO,A.XO,A.atB,A.Jk,A.Z5,A.Z6,A.Wa,A.X0,A.YK,A.X1,A.Xf,A.Z0,A.Xq,A.Z4,A.Jb,A.auj,A.Y_,A.TM,A.Vg,A.ate,A.auJ,A.Vj,A.TS,A.YG,A.UV,A.UX,A.apc,A.J8,A.ajd,A.Nl,A.GY,A.Ji,A.aty,A.al1,A.atC,A.W4,A.JA,A.ams,A.amr,A.YL,A.Z2,A.au_,A.WV,A.Kb,A.u_,A.au5,A.Rs,A.Xc,A.apg,A.au4,A.apC,A.Xn,A.Xm,A.Z_,A.YZ,A.XQ,A.aru,A.TP,A.Y2,A.asA,A.Uh,A.agI,A.ala,A.YQ,A.al4]) +q(A.bN,[A.cb,A.hb,A.fS]) +q(A.cb,[A.UG,A.ft,A.Wc,A.X_,A.ap4,A.TL,A.as3,A.pt,A.Vh,A.ps,A.VK,A.zy,A.CY,A.GM,A.Ct,A.ap_,A.VT,A.Rm,A.X6,A.X9,A.Hv,A.apH,A.UZ,A.D4,A.Wf,A.Yh,A.hE]) +q(A.aq,[A.a1P,A.M3,A.dZ,A.CT,A.aqK]) +q(A.a1P,[A.aji,A.ajj,A.ajk,A.ajq,A.ajr,A.ajs,A.a4j,A.a4k,A.ajt,A.aju,A.ajv,A.ajw,A.ajx,A.ajl,A.ajm,A.ajn,A.ajo,A.ajp,A.a8W,A.amx,A.agf,A.Se,A.ahl,A.ahe,A.al0,A.ain,A.akg,A.apz,A.ard,A.ajK,A.a4H,A.a4I,A.a4J,A.a4E,A.a4G,A.a4F,A.a9w,A.a9v,A.a9u,A.a4K,A.adK,A.adw,A.a5h]) +q(A.M3,[A.apa,A.wr,A.ahC,A.ai9]) +p(A.CD,A.atc) +q(A.y,[A.au,A.a1m,A.a7,A.TZ,A.a5F,A.a5E,A.a5D,A.a9q,A.a6e,A.ahT,A.aen,A.afC,A.a6y,A.abu,A.a2J,A.NE,A.adM,A.Sc,A.Im,A.L7,A.Nd,A.y9,A.ael,A.lD,A.a4_,A.akE,A.ac2,A.f1,A.aic,A.a78,A.P5,A.Q1,A.arE,A.aqi,A.a4d,A.ami]) +q(A.au,[A.aq8,A.mF,A.U7,A.a08,A.aqe,A.aqf,A.U3,A.a_K,A.a2W,A.a_0,A.apA,A.a4B,A.amO,A.a_s,A.Wb,A.alO,A.VV,A.aga,A.a60,A.anz,A.ago,A.a1h,A.a1i,A.a1j,A.aco,A.a8T,A.TN,A.aoY,A.VW,A.Oe,A.ajS,A.ar2,A.Ru,A.U2,A.aqH,A.a1Q,A.apb,A.uG,A.NN,A.akq,A.a5A,A.a7x,A.a8x,A.aq9,A.ade,A.ZM,A.al5,A.HQ,A.XW,A.akI,A.agz,A.ajQ]) +p(A.hx,A.aq8) +q(A.hx,[A.V2,A.afd,A.atf,A.ag8,A.aiE,A.aiP,A.amL,A.aqj]) +p(A.lh,A.V2) +p(A.aj1,A.a1m) +p(A.ae,A.aj1) +q(A.ae,[A.afq,A.xU,A.xZ,A.qH,A.ux,A.bd,A.BL,A.vu,A.vv,A.Ac,A.aj2,A.apE,A.agl,A.ya,A.agm,A.Up,A.aiX,A.ajf,A.aqn,A.at8,A.ag4,A.qT,A.agD,A.alI,A.Aq,A.anA,A.Wl,A.Wm,A.Wn,A.ti,A.Wp,A.agx,A.E3,A.yr,A.yu,A.r1,A.zw,A.Oi,A.Aa,A.Ab,A.tc,A.aq0,A.XX,A.agH,A.aiq,A.yX,A.Am,A.aml,A.Bb,A.Bo,A.ap5,A.BE,A.apQ,A.BJ,A.zH,A.xL,A.aib,A.yV,A.zp,A.rq,A.zz,A.VE,A.zQ,A.akB,A.akD,A.alu,A.aly,A.VU,A.alK,A.AI,A.apd,A.C2,A.xN,A.xM,A.xT,A.y_,A.p9,A.Bq,A.BP,A.zc,A.akp,A.zY,A.am_,A.AM,A.amz,A.Bm,A.C6,A.xY,A.y0,A.BR,A.tA,A.tB,A.BU,A.jK,A.mD,A.amt,A.amC,A.aqp,A.za,A.arw,A.ary,A.aht,A.aoP,A.aqM]) +p(A.us,A.afq) +q(A.a7,[A.afN,A.afP,A.aB,A.a_1,A.aiZ,A.aua,A.alT,A.alH,A.agF,A.anN,A.aug,A.auh,A.aq1,A.aiu,A.alD,A.ao6,A.aoU,A.atv,A.ajR,A.akU,A.Z3]) +p(A.afO,A.afN) +p(A.a_H,A.afO) +p(A.afQ,A.afP) +p(A.a_J,A.afQ) +q(A.bd,[A.xR,A.y2,A.yb,A.yw,A.yz,A.yQ,A.yU,A.qZ,A.r5,A.rn,A.rp,A.rM,A.rN,A.td,A.te,A.tk,A.tm,A.tP,A.anK,A.Bl,A.BS,A.C1,A.wU,A.amu]) +q(A.aB,[A.afb,A.afS,A.ai7,A.agQ,A.aqa,A.ahY,A.ajy,A.ajG,A.als,A.alw,A.aoK,A.aoS,A.ast,A.aoI,A.aqb]) +p(A.afc,A.afb) +p(A.ZT,A.afc) +p(A.U_,A.TZ) +p(A.DA,A.U_) +q(A.DA,[A.a0q,A.a4A,A.a_N,A.a3u,A.afF,A.a8P,A.a2I,A.a0z,A.uA,A.a0y,A.a1z,A.a8M,A.ID,A.L8,A.afG,A.yd,A.akH,A.Cl,A.Cy]) +p(A.afT,A.afS) +p(A.a_O,A.afT) +p(A.ai8,A.ai7) +p(A.Mu,A.ai8) +p(A.a0b,A.Mu) +q(A.mF,[A.ar3,A.qb,A.Nm]) +p(A.ad5,A.ar3) +p(A.iE,A.afF) +q(A.iE,[A.ar0,A.aii,A.ar1,A.asv]) +p(A.ad3,A.ar0) +p(A.agR,A.agQ) +p(A.a1v,A.agR) +p(A.a2S,A.aii) +p(A.aqc,A.aqa) +p(A.acd,A.aqc) +p(A.ahZ,A.ahY) +p(A.a2A,A.ahZ) +p(A.ajz,A.ajy) +p(A.a46,A.ajz) +p(A.a4i,A.ajG) +p(A.a7_,A.als) +p(A.alx,A.alw) +p(A.a72,A.alx) +p(A.aoL,A.aoK) +p(A.aaC,A.aoL) +p(A.aoT,A.aoS) +p(A.aaG,A.aoT) +p(A.asu,A.ast) +p(A.aey,A.asu) +p(A.w9,A.anK) +q(A.aOZ,[A.aLK,A.aE_]) +p(A.aoJ,A.aoI) +p(A.aaB,A.aoJ) +p(A.aqd,A.aqb) +p(A.ace,A.aqd) +p(A.ad2,A.ar1) +p(A.Tv,A.asv) +p(A.aij,A.L8) +p(A.a2T,A.aij) +p(A.U8,A.U7) +p(A.Lk,A.U8) +p(A.fv,A.aqe) +q(A.fv,[A.ahS,A.aoN,A.amR,A.ag5,A.asp,A.al2,A.al3,A.RA,A.aks,A.abd,A.agA,A.ajD,A.ajC,A.amj]) +p(A.Mh,A.ahS) +p(A.BT,A.aqf) +q(A.BT,[A.Xz,A.agd]) +p(A.Sd,A.Xz) +p(A.Ex,A.Sd) +p(A.ahU,A.ahT) +p(A.Mi,A.ahU) +q(A.qb,[A.a2n,A.a7m,A.au0]) +p(A.Le,A.U3) +q(A.Le,[A.a6Q,A.ad9,A.A_,A.ajW]) +p(A.v3,A.aj2) +p(A.wt,A.apE) +p(A.uD,A.agl) +p(A.a_r,A.afC) +p(A.eL,A.apA) +q(A.eL,[A.hL,A.jg]) +q(A.hL,[A.a3q,A.afH,A.agw,A.V4,A.V5,A.atK,A.atm]) +p(A.yc,A.agm) +p(A.a8U,A.amO) +p(A.agT,A.Up) +p(A.agU,A.agT) +p(A.agV,A.agU) +p(A.LW,A.agV) +p(A.aiY,A.aiX) +p(A.rg,A.aiY) +p(A.Va,A.aiZ) +p(A.aj_,A.Va) +p(A.a3E,A.aj_) +p(A.ajg,A.ajf) +p(A.pl,A.ajg) +q(A.lh,[A.alB,A.agE,A.aid,A.aik]) +p(A.alC,A.alB) +p(A.a74,A.alC) +p(A.aoO,A.aoN) +p(A.R5,A.aoO) +p(A.aqo,A.aqn) +p(A.tC,A.aqo) +p(A.Z1,A.aua) +p(A.aub,A.Z1) +p(A.aqm,A.aub) +p(A.rW,A.Wb) +q(A.rW,[A.a7i,A.a7h]) +p(A.at9,A.at8) +p(A.CC,A.at9) +p(A.y7,A.ag4) +p(A.afI,A.afH) +p(A.a_w,A.afI) +p(A.alU,A.alT) +p(A.a7n,A.alU) +p(A.alP,A.alO) +p(A.a7e,A.alP) +p(A.yn,A.agD) +p(A.afe,A.afd) +p(A.ZV,A.afe) +p(A.P8,A.alI) +p(A.a7b,A.alH) +p(A.alM,A.VV) +p(A.alN,A.alM) +p(A.a7f,A.alN) +q(A.a7f,[A.a17,A.a18,A.a15,A.a19]) +p(A.Ls,A.agw) +p(A.abX,A.Ls) +p(A.a1a,A.agF) +p(A.a16,A.agE) +p(A.anB,A.anA) +p(A.anC,A.anB) +p(A.tg,A.anC) +p(A.amS,A.amR) +p(A.PY,A.amS) +p(A.agb,A.aga) +p(A.a05,A.agb) +p(A.ag6,A.ag5) +p(A.ag7,A.ag6) +p(A.La,A.ag7) +p(A.asq,A.asp) +p(A.asr,A.asq) +p(A.Tu,A.asr) +q(A.a6_,[A.aOj,A.aCg]) +q(A.aOj,[A.aU2,A.awY]) +p(A.a9t,A.anz) +p(A.B6,A.Wl) +p(A.anL,A.Wm) +p(A.anM,A.anL) +p(A.wa,A.anM) +p(A.B7,A.Wn) +p(A.Wo,A.anN) +p(A.anO,A.Wo) +p(A.a9I,A.anO) +p(A.anP,A.Wp) +p(A.anQ,A.anP) +p(A.anR,A.anQ) +p(A.wb,A.anR) +q(A.jg,[A.lx,A.anr]) +q(A.lx,[A.ao3,A.amy,A.aqg,A.aqR,A.ao4]) +p(A.yk,A.agx) +p(A.aiH,A.V4) +p(A.uY,A.aiH) +p(A.aiI,A.V5) +p(A.pg,A.aiI) +p(A.a8u,A.amy) +p(A.a6p,A.al2) +p(A.a6o,A.al3) +p(A.ar_,A.aug) +p(A.aqZ,A.auh) +p(A.aqh,A.aqg) +p(A.acl,A.aqh) +p(A.tz,A.aq0) +p(A.ac3,A.aq1) +p(A.XY,A.XX) +p(A.oK,A.XY) +p(A.atg,A.atf) +p(A.CH,A.atg) +p(A.yo,A.agH) +p(A.uW,A.aiq) +p(A.vO,A.aml) +p(A.anE,A.atK) +p(A.wm,A.ap5) +p(A.wu,A.apQ) +p(A.TO,A.TN) +p(A.Dq,A.TO) +q(A.Dq,[A.adF,A.a2_,A.a2r]) +p(A.adE,A.adF) +p(A.aaL,A.aoY) +p(A.yS,A.aib) +p(A.yT,A.aid) +p(A.a2V,A.aik) +p(A.ajH,A.atv) +p(A.alR,A.VW) +p(A.VX,A.alR) +p(A.a7k,A.VX) +p(A.alQ,A.NE) +p(A.a7g,A.alQ) +p(A.a4U,A.ajR) +p(A.a4V,A.ajS) +p(A.zP,A.VE) +p(A.akt,A.aks) +p(A.a5H,A.akt) +p(A.zT,A.akB) +p(A.zU,A.akD) +p(A.vH,A.alu) +p(A.vI,A.aly) +p(A.alJ,A.VU) +p(A.Ar,A.alJ) +p(A.As,A.alK) +p(A.acW,A.aqR) +p(A.Bv,A.apd) +p(A.ad4,A.ar2) +q(A.aD,[A.AA,A.am1]) +p(A.vr,A.akp) +p(A.aFp,A.aCg) +p(A.am0,A.am_) +p(A.vN,A.am0) +p(A.ho,A.PJ) +q(A.ho,[A.RU,A.VI,A.ib,A.SZ,A.hn,A.SY,A.rh,A.ahA,A.ag3,A.ag2,A.a8A]) +p(A.AN,A.amz) +p(A.a7j,A.Ru) +p(A.alS,A.Sc) +p(A.a7l,A.alS) +p(A.age,A.agd) +p(A.a07,A.age) +p(A.akV,A.akU) +p(A.rF,A.akV) +q(A.rF,[A.aas,A.a68,A.a69,A.a6a]) +p(A.a06,A.U2) +p(A.acJ,A.aqH) +q(A.acJ,[A.amT,A.afD,A.afJ]) +p(A.a8S,A.amT) +p(A.a_q,A.afD) +p(A.a_y,A.afJ) +p(A.aue,A.Z3) +p(A.aqG,A.aue) +p(A.rU,A.amt) +p(A.amD,A.amC) +p(A.w_,A.amD) +p(A.aqq,A.aqp) +p(A.BW,A.aqq) +p(A.ahN,A.atm) +p(A.AB,A.am1) +p(A.arx,A.arw) +p(A.wL,A.arx) +q(A.Im,[A.aan,A.aiG]) +p(A.Ck,A.ary) +p(A.uP,A.aht) +p(A.amN,A.a1Q) +p(A.a8R,A.amN) +p(A.XF,A.IT) +q(A.lD,[A.a0A,A.N_,A.a3G,A.a6N]) +p(A.a3D,A.N_) +q(A.fN,[A.B4,A.Sr]) +p(A.BV,A.qV) +p(A.a9s,A.BV) +p(A.uK,A.agG) +q(A.bu,[A.LL,A.jz,A.wN,A.adG,A.cD,A.T6,A.VA,A.abV,A.ap3,A.TV,A.wf,A.a73,A.mJ,A.RF,A.R1,A.Oa,A.hw,A.Vl,A.XD,A.Ro,A.Hs,A.S6]) +p(A.ans,A.anr) +p(A.a97,A.ans) +p(A.ao5,A.ao4) +p(A.B9,A.ao5) +p(A.X3,A.apb) +p(A.to,A.X3) +p(A.jQ,A.kx) +p(A.E4,A.jQ) +p(A.ajX,A.ajW) +p(A.a52,A.ajX) +p(A.akr,A.akq) +p(A.VF,A.akr) +p(A.a5G,A.VF) +p(A.a5U,A.akE) +p(A.X8,A.au0) +p(A.jW,A.aq9) +q(A.f1,[A.p8,A.alE,A.amm,A.aoV,A.ap6,A.abk,A.apR]) +q(A.p8,[A.a1b,A.a9Q]) +q(A.fA,[A.a31,A.ahJ,A.ake,A.anF,A.aoz,A.RJ,A.aq5,A.apv]) +q(A.a31,[A.M2,A.pB,A.PO,A.R2,A.He,A.HJ,A.IP,A.a7B]) +p(A.a27,A.ahJ) +p(A.m6,A.ake) +p(A.a9y,A.anF) +p(A.b1D,A.aOH) +p(A.aao,A.aoz) +p(A.wy,A.aq5) +p(A.OZ,A.alE) +q(A.OZ,[A.a75,A.a76,A.a77]) +p(A.a7T,A.amm) +p(A.amn,A.a7T) +p(A.R9,A.aoV) +p(A.aoW,A.R9) +p(A.Rg,A.ap6) +p(A.ap7,A.Rg) +p(A.S_,A.apR) +p(A.apS,A.S_) +p(A.a2K,A.aic) +q(A.aDH,[A.on,A.aBQ,A.aBY,A.aC_,A.a2N,A.aUT]) +q(A.on,[A.a2u,A.a9b]) +q(A.a9b,[A.a2M,A.a2P,A.a91,A.acX,A.ad_]) +p(A.a2Q,A.a2u) +q(A.q1,[A.qS,A.a94,A.H1,A.aaM]) +q(A.b6,[A.a65,A.c2,A.UB,A.Xp,A.ih,A.r_,A.JB,A.abS,A.Sw,A.Wk]) +q(A.a65,[A.aa2,A.apT,A.ask,A.a9E,A.a3m,A.H_]) +p(A.L,A.aoi) +q(A.L,[A.Y,A.aov,A.fh]) +q(A.Y,[A.ajE,A.WO,A.YT,A.WL,A.atP,A.atU,A.YV,A.YX,A.atY,A.Wy,A.WA,A.aob,A.QB,A.aoe,A.QF,A.WJ,A.aol,A.aor,A.H7,A.nG,A.aox,A.atS,A.atV,A.YW,A.YU,A.atX,A.QJ]) +p(A.Np,A.ajE) +p(A.am4,A.a) +p(A.aJ,A.am4) +q(A.hr,[A.a98,A.a0v,A.a0s]) +q(A.a_D,[A.a9c,A.aif]) +q(A.a9c,[A.aqS,A.aqY,A.a93,A.an8,A.aig,A.aih,A.aRg,A.aRh]) +p(A.aUU,A.aqS) +p(A.aV1,A.aqY) +p(A.Q0,A.an8) +p(A.aC8,A.aig) +p(A.a2R,A.aih) +p(A.a2O,A.aif) +p(A.abn,A.zZ) +q(A.aMN,[A.a8r,A.a8q]) +q(A.rX,[A.dy,A.PI]) +q(A.ff,[A.a1N,A.a0u,A.a1l,A.a1n,A.a1r,A.a5b,A.ac9,A.aci,A.as0]) +q(A.a1N,[A.TK,A.alF,A.amw,A.aoX,A.ap9]) +p(A.Dp,A.TK) +p(A.Gd,A.alF) +p(A.Gx,A.amw) +p(A.aaH,A.aoX) +p(A.aaZ,A.ap9) +p(A.Io,A.as0) +p(A.aWH,A.aAG) +q(A.jY,[A.a_P,A.vl,A.Qn,A.Qf]) +p(A.Fg,A.a_P) +q(A.vl,[A.a4C,A.ach,A.If]) +p(A.vm,A.adm) +q(A.vm,[A.a_S,A.NC,A.a5B,A.ou]) +q(A.aVN,[A.ajM,A.amJ]) +p(A.SH,A.y3) +q(A.SH,[A.a4M,A.AJ]) +q(A.iT,[A.acg,A.tE]) +q(A.pj,[A.a_t,A.qK,A.a2B,A.NZ]) +p(A.VD,A.YP) +q(A.fY,[A.a_L,A.afu]) +p(A.iw,A.aA3) +p(A.a6r,A.al5) +p(A.vK,A.A) +q(A.iP,[A.NB,A.N3,A.Pp,A.ae2,A.a3K]) +q(A.a3K,[A.a4P,A.a5z,A.a7W,A.acn]) +p(A.T3,A.XW) +q(A.dZ,[A.afn,A.af9,A.afa,A.anw,A.aoG,A.ahs,A.arF,A.Uj,A.Yw]) +p(A.afo,A.afn) +p(A.afp,A.afo) +p(A.Dt,A.afp) +q(A.aSP,[A.b3b,A.b5L,A.a47,A.Sa,A.b0Z,A.axG,A.ayN]) +p(A.ZZ,A.afr) +p(A.anx,A.anw) +p(A.any,A.anx) +p(A.B3,A.any) +p(A.aoH,A.aoG) +p(A.oy,A.aoH) +p(A.M1,A.ahs) +p(A.arG,A.arF) +p(A.arH,A.arG) +p(A.Co,A.arH) +p(A.Uk,A.Uj) +p(A.Ul,A.Uk) +p(A.E9,A.Ul) +q(A.E9,[A.KH,A.TQ]) +p(A.bz,A.Yw) +q(A.bi,[A.h_,A.br,A.n2,A.Th]) +q(A.br,[A.R3,A.fp,A.abG,A.Qo,A.vp,A.acs,A.OO,A.VB,A.ws,A.Cc,A.a1Z,A.MC,A.yW,A.y6,A.Cb]) +p(A.Ut,A.YC) +p(A.atj,A.YD) +p(A.Uu,A.atj) +p(A.agq,A.adG) +q(A.n,[A.ahg,A.lb,A.aeB]) +p(A.ev,A.ahg) +q(A.aVS,[A.aAg,A.aAm,A.aAT,A.aKm]) +p(A.atk,A.aAg) +p(A.ahf,A.atk) +p(A.fr,A.ak3) +p(A.ahi,A.fr) +p(A.a1G,A.ahi) +q(A.ls,[A.ahj,A.ale,A.asz]) +p(A.Ux,A.YE) +p(A.km,A.ahD) +q(A.km,[A.oT,A.fc,A.kF]) +q(A.uB,[A.ahh,A.U1,A.apB]) +q(A.H0,[A.Ei,A.Ju]) +p(A.pS,A.JI) +q(A.pS,[A.Uw,A.alf]) +p(A.ahk,A.aAm) +p(A.a1K,A.ahk) +q(A.c2,[A.ahn,A.akj,A.aki,A.Jv,A.agt,A.akf,A.ark,A.Gc,A.afk,A.Pu,A.a_o,A.uO,A.uH,A.a0Y,A.DY,A.a8H,A.a8I,A.In,A.yv,A.E8,A.a3A,A.a41,A.Hh,A.cu,A.ke,A.o3,A.iR,A.lW,A.a6c,A.Gp,A.a5v,A.a5u,A.abR,A.a6k,A.mx,A.Fk,A.ZD,A.Hw,A.OT,A.a_Q,A.uZ,A.a5f,A.uL,A.a1W,A.agO,A.ajJ,A.al7,A.ahH,A.apf,A.JT,A.abE,A.abW,A.acZ,A.acY,A.a3s,A.asn,A.afA]) +p(A.Bd,A.WO) +q(A.Bd,[A.ao9,A.WF,A.WE,A.a9R,A.QM,A.QA]) +p(A.UA,A.YF) +q(A.ahe,[A.akO,A.aoM]) +q(A.b7,[A.bX,A.am6,A.LR,A.WU,A.am5]) +q(A.bX,[A.ahm,A.mh,A.RW,A.a64,A.aak,A.Jm,A.amq,A.HN,A.S5,A.aqP]) +p(A.atO,A.YT) +p(A.CX,A.atO) +p(A.Ej,A.aho) +q(A.ft,[A.Vt,A.NO,A.A6,A.Vv,A.uQ,A.zD,A.Er]) +p(A.ahq,A.Pk) +p(A.Ek,A.ahq) +p(A.b0J,A.Ej) +q(A.iG,[A.lc,A.yM,A.a2i]) +p(A.x4,A.lc) +q(A.x4,[A.EN,A.a3l,A.a3i]) +p(A.cI,A.aj6) +p(A.zd,A.aj7) +q(A.yM,[A.aj5,A.a2h,A.apr]) +q(A.ha,[A.rG,A.oe]) +q(A.rG,[A.qh,A.dp]) +p(A.Om,A.ne) +q(A.b8_,[A.ajA,A.x1,A.Vn]) +p(A.N8,A.cI) +p(A.cg,A.an3) +p(A.auo,A.af4) +p(A.aup,A.auo) +p(A.arP,A.aup) +q(A.cg,[A.amW,A.anh,A.an6,A.an1,A.an4,A.an_,A.an9,A.anp,A.jP,A.and,A.anf,A.anb,A.amY]) +p(A.amX,A.amW) +p(A.AR,A.amX) +q(A.arP,[A.auk,A.auw,A.aur,A.aun,A.auq,A.aum,A.aus,A.auA,A.auy,A.auz,A.aux,A.auu,A.auv,A.aut,A.aul]) +p(A.arL,A.auk) +p(A.ani,A.anh) +p(A.AW,A.ani) +p(A.arW,A.auw) +p(A.an7,A.an6) +p(A.t6,A.an7) +p(A.arR,A.aur) +p(A.an2,A.an1) +p(A.w2,A.an2) +p(A.arO,A.aun) +p(A.an5,A.an4) +p(A.w3,A.an5) +p(A.arQ,A.auq) +p(A.an0,A.an_) +p(A.t5,A.an0) +p(A.arN,A.aum) +p(A.ana,A.an9) +p(A.AT,A.ana) +p(A.arS,A.aus) +p(A.anq,A.anp) +p(A.AZ,A.anq) +p(A.as_,A.auA) +q(A.jP,[A.anl,A.ann,A.anj]) +p(A.anm,A.anl) +p(A.AX,A.anm) +p(A.arY,A.auy) +p(A.ano,A.ann) +p(A.AY,A.ano) +p(A.arZ,A.auz) +p(A.ank,A.anj) +p(A.a92,A.ank) +p(A.arX,A.aux) +p(A.ane,A.and) +p(A.t7,A.ane) +p(A.arU,A.auu) +p(A.ang,A.anf) +p(A.AV,A.ang) +p(A.arV,A.auv) +p(A.anc,A.anb) +p(A.AU,A.anc) +p(A.arT,A.aut) +p(A.amZ,A.amY) +p(A.AS,A.amZ) +p(A.arM,A.aul) +q(A.ey,[A.ajI,A.CI]) +p(A.ed,A.ajI) +q(A.ed,[A.Pt,A.P1,A.le,A.rO]) +q(A.Pt,[A.od,A.GL,A.EA,A.pY,A.TU]) +q(A.K5,[A.VQ,A.Jz]) +q(A.GL,[A.lt,A.a_G]) +q(A.EA,[A.oO,A.oi,A.jO]) +p(A.aka,A.P2) +p(A.rw,A.P1) +p(A.K0,A.u4) +q(A.a_G,[A.jk,A.IS]) +p(A.Sz,A.aqT) +p(A.SC,A.aqW) +p(A.SB,A.aqV) +p(A.SD,A.aqX) +p(A.SA,A.aqU) +p(A.KW,A.TU) +q(A.KW,[A.q8,A.q9]) +p(A.zB,A.k0) +p(A.G1,A.zB) +p(A.ZH,A.af6) +p(A.aKi,A.ab0) +p(A.KJ,A.aft) +p(A.G5,A.Qo) +p(A.KT,A.afE) +p(A.OM,A.alc) +p(A.L3,A.ag_) +p(A.L4,A.ag0) +p(A.L5,A.ag1) +p(A.anI,A.atL) +p(A.Ld,A.agc) +p(A.cB,A.agh) +p(A.U4,A.Yy) +p(A.f4,A.alv) +q(A.f4,[A.aeC,A.ahI,A.nt]) +q(A.aeC,[A.alt,A.aiv,A.V3]) +p(A.a0a,A.agi) +p(A.DK,A.agn) +p(A.aZY,A.DK) +p(A.YB,A.YA) +p(A.agr,A.YB) +p(A.agp,A.T6) +p(A.DP,A.ags) +p(A.b_1,A.DP) +p(A.Lq,A.agv) +p(A.E2,A.agJ) +q(A.lb,[A.fR,A.pG]) +p(A.M6,A.ahx) +p(A.M7,A.ahz) +p(A.atl,A.aAT) +p(A.ahM,A.atl) +p(A.eA,A.WW) +p(A.Gs,A.eA) +p(A.hX,A.Gs) +p(A.CU,A.hX) +p(A.ig,A.CU) +q(A.ig,[A.Q5,A.PC]) +q(A.Q5,[A.Qi,A.UT]) +p(A.Mg,A.Qi) +p(A.Ew,A.ahR) +p(A.b0Y,A.Ew) +p(A.Mm,A.ai_) +p(A.EC,A.ail) +p(A.b11,A.EC) +q(A.aSQ,[A.aio,A.b7Z,A.a2a,A.ads]) +p(A.WM,A.WL) +p(A.aac,A.WM) +q(A.aac,[A.aoh,A.WD,A.arl,A.QP,A.Qz,A.Qx,A.aa6,A.QI,A.QH,A.aa8,A.ao7,A.a9T,A.JM,A.a9Z,A.aaj,A.QC,A.aa1,A.aae,A.QE,A.QL,A.Qt,A.QR,A.a9U,A.aa7,A.aa_,A.aa3,A.aa5,A.aa0,A.ao8,A.aog,A.atQ,A.WH,A.aom,A.aon,A.JP,A.aow]) +p(A.lg,A.aim) +p(A.J3,A.YI) +p(A.MA,A.aip) +q(A.Lh,[A.a38,A.ak1,A.C3]) +q(A.cf,[A.atn,A.atq,A.ato,A.atp,A.ajY,A.ak_,A.atx,A.akd,A.XL,A.ar5,A.aui]) +p(A.V1,A.atn) +p(A.aiz,A.atq) +p(A.aix,A.ato) +p(A.aiy,A.atp) +q(A.cB,[A.aiA,A.ak0,A.aiU,A.aiV,A.amp,A.ar6]) +p(A.EJ,A.aiB) +p(A.V9,A.YJ) +p(A.ET,A.aiO) +p(A.b1y,A.ET) +p(A.MY,A.aiT) +q(A.a9R,[A.Ww,A.Qw,A.QO]) +p(A.EY,A.aj3) +p(A.b1E,A.EY) +p(A.aTT,A.aEj) +p(A.atr,A.aTT) +p(A.ats,A.atr) +p(A.b1m,A.ats) +p(A.b6e,A.aEi) +p(A.ajZ,A.atx) +p(A.Fj,A.ak2) +q(A.pu,[A.NV,A.vq]) +q(A.vq,[A.vk,A.NX,A.NY]) +q(A.Fw,[A.b2X,A.b2Y]) +p(A.Vw,A.YN) +p(A.a5m,A.NW) +q(A.dH,[A.oj,A.ht,A.nC,A.a_Y]) +p(A.mI,A.oj) +p(A.afY,A.Yx) +q(A.KE,[A.apy,A.ZX,A.abM,A.a6J,A.abF,A.a1X,A.Ot]) +p(A.Vp,A.YM) +p(A.Wz,A.atP) +p(A.S4,A.Xp) +q(A.S4,[A.ahE,A.akY]) +p(A.VC,A.YO) +p(A.Ft,A.akh) +p(A.b2Z,A.Ft) +p(A.WI,A.atU) +p(A.FW,A.akZ) +p(A.b3A,A.FW) +p(A.alg,A.atB) +q(A.a5d,[A.VN,A.KD,A.Kz,A.KB,A.Ky,A.Kw,A.KA]) +p(A.Fo,A.Jk) +q(A.Fo,[A.Ds,A.afg]) +q(A.Ds,[A.ald,A.afm,A.afh,A.afj,A.aff,A.afi]) +p(A.Ga,A.all) +p(A.a6P,A.Ga) +p(A.OS,A.alj) +p(A.a6R,A.alk) +p(A.Pg,A.alW) +p(A.Ph,A.alX) +p(A.Pi,A.alY) +p(A.Py,A.amo) +p(A.VO,A.PC) +p(A.ku,A.VO) +p(A.at7,A.Z5) +p(A.ata,A.Z6) +q(A.rV,[A.af2,A.a1J]) +p(A.a8_,A.amv) +q(A.abV,[A.Yu,A.Yv]) +p(A.Q4,A.ant) +p(A.Q9,A.anu) +p(A.Qg,A.anD) +p(A.Rf,A.X0) +q(A.aA1,[A.bb,A.wv]) +p(A.TY,A.bb) +q(A.aL0,[A.b6c,A.b6K]) +p(A.Vd,A.YK) +p(A.X2,A.X1) +p(A.Hm,A.X2) +p(A.cm,A.af7) +q(A.cm,[A.a2t,A.fq,A.e1,A.aeu,A.Mn,A.Uo,A.aar,A.a7w,A.a9h,A.Mk]) +q(A.a2t,[A.ahW,A.ahX]) +p(A.Rw,A.aph) +p(A.Rx,A.api) +p(A.Ry,A.apj) +p(A.Rz,A.apk) +q(A.cD,[A.wG,A.agy,A.Tj,A.aeE]) +p(A.arm,A.wG) +q(A.SU,[A.apn,A.ara]) +p(A.Xo,A.Z0) +p(A.JO,A.YV) +p(A.c9,A.akn) +q(A.c9,[A.oR,A.uq,A.uC,A.ld,A.tb,A.Az,A.B0,A.uT,A.ik,A.Mo,A.a2q,A.ts,A.pa,A.vW,A.wd,A.ox,A.wR,A.nz,A.wO]) +p(A.aou,A.YX) +p(A.HL,A.apU) +p(A.b6I,A.HL) +p(A.aoZ,A.aT5) +p(A.aQJ,A.aoZ) +p(A.aQI,A.aT4) +q(A.aT3,[A.aQH,A.aQG,A.aPe,A.aCf]) +p(A.HP,A.aq_) +p(A.b6W,A.HP) +p(A.St,A.aqI) +p(A.Sv,A.aqO) +p(A.ar4,A.aui) +p(A.SI,A.ar7) +p(A.XM,A.Z4) +p(A.SM,A.rk) +p(A.m4,A.Jb) +p(A.K1,A.m4) +p(A.alh,A.aKm) +p(A.a6I,A.alh) +p(A.SW,A.are) +p(A.arj,A.auj) +q(A.ih,[A.arg,A.yH,A.Sg,A.a3L,A.aeG,A.Hf,A.UW,A.a7Y,A.XV,A.Tt,A.abx]) +q(A.mh,[A.arh,A.akc,A.ars,A.auH]) +p(A.aot,A.atY) +p(A.hB,A.arp) +p(A.nv,A.art) +p(A.a6F,A.Ek) +p(A.tN,A.aso) +p(A.T4,A.arv) +p(A.T5,A.arz) +p(A.aiN,A.Gc) +q(A.QP,[A.QK,A.aab,A.tj,A.Wx,A.QT,A.H8]) +p(A.aod,A.QK) +p(A.wM,A.Y_) +p(A.Td,A.arB) +p(A.Iq,A.as1) +q(A.iI,[A.Gm,A.a_b,A.pI,A.Rl]) +q(A.xO,[A.fL,A.jt,A.alq]) +q(A.L2,[A.dO,A.y5,A.VS]) +p(A.bL,A.afZ) +q(A.a_Y,[A.fM,A.jw]) +p(A.cx,A.oC) +q(A.ht,[A.hK,A.ez,A.k3,A.kM,A.k6,A.k7]) +q(A.f0,[A.aS,A.kn,A.xd]) +q(A.aGb,[A.eJ,A.a9x,A.acM]) +q(A.agk,[A.U6,A.Jr]) +p(A.zI,A.ak8) +q(A.zI,[A.af3,A.b1t,A.Ps,A.a79]) +p(A.Du,A.a_b) +p(A.pq,A.ak7) +p(A.aHn,A.ak9) +q(A.ia,[A.a8N,A.lA]) +p(A.HX,A.aqD) +q(A.mE,[A.IG,A.ash,A.DN,A.FM,A.PH,A.Mp]) +p(A.I,A.arn) +p(A.By,A.Sa) +p(A.t_,A.amI) +p(A.ahF,A.t_) +p(A.Bf,A.aov) +p(A.aoF,A.Bf) +q(A.rt,[A.qO,A.HM]) +q(A.m5,[A.y8,A.abP]) +q(A.eg,[A.j0,A.XP,A.ww,A.wx]) +q(A.j0,[A.Un,A.q6]) +p(A.LV,A.Un) +q(A.LV,[A.nh,A.lk,A.hf,A.qk,A.qp,A.jZ]) +p(A.aoa,A.Wy) +p(A.Qy,A.aoa) +p(A.WB,A.WA) +p(A.aoc,A.WB) +p(A.Bc,A.aoc) +q(A.wf,[A.XN,A.Ua,A.IW]) +p(A.aof,A.aoe) +p(A.WC,A.aof) +p(A.QD,A.WC) +p(A.ic,A.akK) +q(A.ic,[A.a8L,A.j5]) +q(A.j5,[A.or,A.yl,A.LC,A.DZ,A.KR,A.Ol,A.Ne]) +q(A.or,[A.NQ,A.qg,A.Pv]) +p(A.alA,A.atD) +p(A.vS,A.ayU) +q(A.b6s,[A.agS,A.kV]) +q(A.kV,[A.aoQ,A.Vs,A.D1]) +p(A.t0,A.oA) +p(A.nu,A.XP) +p(A.aoj,A.WJ) +p(A.aok,A.aoj) +p(A.QN,A.aok) +p(A.au2,A.au1) +p(A.au3,A.au2) +p(A.u1,A.au3) +p(A.a9S,A.ao7) +q(A.JM,[A.a9X,A.a9W,A.a9V,A.WK]) +q(A.WK,[A.aa9,A.aaa]) +p(A.QQ,A.aol) +q(A.aRP,[A.LA,A.RB]) +p(A.BA,A.app) +p(A.abO,A.apV) +q(A.ww,[A.apW,A.apX]) +p(A.tx,A.apW) +p(A.apZ,A.wx) +p(A.ty,A.apZ) +q(A.fh,[A.WQ,A.aoo]) +p(A.aop,A.WQ) +p(A.aoq,A.aop) +p(A.H5,A.aoq) +p(A.aag,A.H5) +p(A.apY,A.apX) +p(A.q2,A.apY) +p(A.QS,A.aoo) +p(A.aah,A.QS) +p(A.aos,A.aor) +p(A.H6,A.aos) +p(A.QG,A.H6) +p(A.a3M,A.Sx) +p(A.H9,A.nG) +q(A.H9,[A.QU,A.aaf]) +p(A.aoy,A.aox) +p(A.QV,A.aoy) +p(A.abg,A.apq) +p(A.eo,A.apt) +p(A.Hy,A.apu) +p(A.AH,A.Hy) +q(A.aS5,[A.awh,A.aWC,A.aJH,A.aV0,A.aEE]) +p(A.ay7,A.a_a) +p(A.aNC,A.ay7) +q(A.axk,[A.b0G,A.a9P]) +p(A.kt,A.akA) +q(A.kt,[A.iL,A.ol,A.FF]) +p(A.aIE,A.akC) +q(A.aIE,[A.u,A.K]) +p(A.aqL,A.OX) +p(A.mm,A.rL) +p(A.Qj,A.anG) +p(A.th,A.anH) +q(A.th,[A.w7,A.GZ]) +p(A.a9F,A.Qj) +p(A.kQ,A.cZ) +p(A.wH,A.ar9) +q(A.wH,[A.adc,A.adb,A.add,A.Ia]) +p(A.MZ,A.wI) +p(A.amK,A.atI) +p(A.avT,A.af5) +q(A.fq,[A.a9k,A.YR,A.YS,A.tU,A.Ya,A.Yb,A.apl,A.ahb,A.Rk]) +p(A.W7,A.YR) +p(A.W8,A.YS) +p(A.afl,A.ate) +p(A.Ym,A.auJ) +q(A.a7E,[A.FE,A.Ax,A.m9,A.W9,A.X5]) +q(A.LR,[A.Qd,A.HS,A.mC]) +q(A.Qd,[A.jG,A.vU,A.atH]) +q(A.jG,[A.as2,A.NT,A.Jl,A.CQ]) +p(A.n4,A.as3) +p(A.iF,A.ke) +q(A.hb,[A.Ok,A.ta,A.EX,A.O9,A.acQ,A.asw]) +q(A.RW,[A.amk,A.au6]) +p(A.Wj,A.Sg) +q(A.a3L,[A.aaP,A.LP]) +p(A.EQ,A.EX) +p(A.R6,A.WU) +p(A.Yn,A.a_M) +p(A.Yo,A.Yn) +p(A.Yp,A.Yo) +p(A.Yq,A.Yp) +p(A.Yr,A.Yq) +p(A.Ys,A.Yr) +p(A.Yt,A.Ys) +p(A.aeF,A.Yt) +p(A.YH,A.YG) +p(A.UI,A.YH) +p(A.air,A.UX) +p(A.UY,A.air) +p(A.ais,A.UY) +p(A.ait,A.ais) +p(A.uX,A.ait) +p(A.IF,A.a8N) +p(A.oW,A.IF) +p(A.LF,A.agy) +p(A.ass,A.LF) +p(A.ajb,A.aja) +p(A.fd,A.ajb) +q(A.fd,[A.v8,A.Vf]) +p(A.aj9,A.aj8) +p(A.Nb,A.aj9) +p(A.F_,A.zf) +p(A.ajc,A.J8) +p(A.Ve,A.pt) +p(A.a3S,A.aje) +p(A.hG,A.atN) +p(A.qq,A.atM) +p(A.anS,A.a3S) +p(A.aP0,A.anS) +q(A.oe,[A.cK,A.zt,A.UF]) +q(A.zr,[A.dU,A.afs]) +p(A.b0M,A.aS6) +p(A.NH,A.Ay) +p(A.Vr,A.aty) +p(A.vy,A.r_) +p(A.atT,A.atS) +p(A.WG,A.atT) +p(A.OB,A.kF) +q(A.ps,[A.rK,A.apD]) +p(A.ali,A.atC) +p(A.a25,A.adS) +p(A.mP,A.aQL) +q(A.xe,[A.Jy,A.Jx,A.W2,A.W3]) +p(A.ajO,A.atw) +p(A.W5,A.W4) +p(A.oq,A.W5) +q(A.aoD,[A.alV,A.aYQ]) +q(A.hw,[A.ajP,A.dv]) +p(A.W6,A.atH) +p(A.atW,A.atV) +p(A.JN,A.atW) +p(A.Gt,A.ams) +p(A.K4,A.hf) +p(A.atZ,A.YW) +p(A.xm,A.atZ) +q(A.mb,[A.xh,A.xc]) +p(A.atR,A.atQ) +p(A.xl,A.atR) +p(A.Vm,A.YL) +p(A.XE,A.Z2) +p(A.PB,A.W9) +q(A.dp,[A.vQ,A.WZ]) +p(A.a23,A.aNH) +p(A.aoE,A.au_) +q(A.dv,[A.mO,A.aoB,A.aoC]) +q(A.mO,[A.WR,A.R0]) +q(A.WR,[A.R_,A.Bj]) +p(A.JQ,A.Kb) +q(A.ab_,[A.ve,A.aGE,A.aC7,A.a_x,A.a2Z]) +p(A.aT7,A.aT6) +p(A.Xj,A.au5) +p(A.a3F,A.aj0) +q(A.m9,[A.X7,A.abD]) +p(A.kD,A.X7) +q(A.kD,[A.Hq,A.q_,A.pN,A.pZ,A.ae5]) +q(A.Hp,[A.a9D,A.L6,A.Lz,A.Kv]) +p(A.ape,A.mJ) +p(A.tq,A.ape) +p(A.Bw,A.X5) +p(A.Rt,A.tq) +p(A.a00,A.ab3) +p(A.a6j,A.a00) +p(A.Xd,A.Xc) +p(A.Bz,A.Xd) +p(A.alG,A.ab9) +p(A.Ge,A.alG) +p(A.Xa,A.Ge) +p(A.qu,A.lt) +p(A.qv,A.jk) +p(A.YY,A.au4) +p(A.apo,A.YY) +p(A.apM,A.apL) +p(A.b9,A.apM) +p(A.wY,A.atd) +p(A.apG,A.apF) +p(A.HI,A.apG) +p(A.RS,A.apI) +p(A.au7,A.au6) +p(A.apO,A.au7) +p(A.WP,A.YU) +p(A.HO,A.abS) +p(A.abQ,A.HO) +p(A.K_,A.auf) +p(A.adf,A.acY) +q(A.a2q,[A.yJ,A.yL,A.yK,A.jA,A.tr]) +q(A.jA,[A.rb,A.re,A.z7,A.z3,A.z4,A.m2,A.v0,A.rf,A.rd,A.z6,A.rc]) +p(A.Xk,A.Z_) +p(A.Xh,A.YZ) +p(A.asy,A.Ce) +q(A.a6J,[A.aaY,A.aaI]) +p(A.ZU,A.Ot) +p(A.It,A.Y2) +p(A.anJ,A.aak) +p(A.auI,A.auH) +p(A.asm,A.auI) +p(A.WN,A.atX) +p(A.Yj,A.aeB) +p(A.aeA,A.bL) +p(A.Yi,A.aeA) +p(A.aeD,A.I) +p(A.asx,A.aeD) +p(A.ql,A.jO) +p(A.a6z,A.OH) +p(A.q5,A.DH) +p(A.Sp,A.q5) +p(A.aNQ,A.a9P) +q(A.aSx,[A.a0l,A.DR,A.a37,A.a99]) +q(A.lX,[A.a0j,A.a0k,A.a0t,A.a33,A.a34,A.a95,A.a96]) +q(A.ks,[A.a1t,A.uU,A.a44,A.a4g,A.a6Y,A.a70,A.Q8,A.a9o,A.wi,A.aaF,A.aex]) +q(A.a5C,[A.a1u,A.a2z,A.a45,A.a4h,A.a6Z,A.a71,A.a9l,A.a9p,A.aaA,A.bgu,A.bhb]) +p(A.Lb,A.a_C) +p(A.DG,A.Sj) +p(A.aQm,A.a_E) +q(A.ax7,[A.Hd,A.BX]) +p(A.acx,A.BX) +p(A.zn,A.a_u) +p(A.UH,A.a_v) +p(A.a2s,A.UH) +q(A.a3_,[A.KS,A.a5x]) +p(A.a49,A.a5y) +p(A.aU0,A.aql) +q(A.hN,[A.a1g,A.Ey,A.o4]) +q(A.a1g,[A.DO,A.Ep,A.a54,A.a5Q,A.a6l,A.abl,A.act,A.To,A.aeq,A.aew]) +p(A.Mj,A.o4) +q(A.aN,[A.d7,A.jX,A.fo,A.aev]) +q(A.fo,[A.a_T,A.ak4,A.aes,A.DC,A.Dr,A.amg,A.aqx,A.afW,A.Fe,A.Ff,A.FJ,A.FK,A.a7C,A.amh,A.aqA,A.afX,A.Gq,A.IN,A.a_W]) +q(A.d7,[A.DL,A.En,A.Eo,A.a2o,A.EZ,A.ak5,A.Fp,A.Fv,A.a7J,A.a9A,A.a9B,A.Hi,A.aaJ,A.aer,A.AC,A.amc,A.Ez,A.Gb,A.Gg,A.a7t,A.amd,A.a7M]) +q(A.jX,[A.ak6,A.a8Y,A.Sl,A.HT,A.aqv,A.aqC,A.acB]) +q(A.Dz,[A.a4x,A.acC]) +q(A.ju,[A.Oh,A.HB,A.ac7]) +q(A.Oh,[A.qW,A.cQ,A.Nw,A.pv,A.a8B,A.mr,A.SP]) +p(A.PL,A.hs) +p(A.al6,A.YQ) +q(A.a_B,[A.xP,A.dw,A.ZP,A.mW,A.ur,A.awb,A.ZQ,A.awc]) +q(A.jv,[A.a1p,A.a59,A.a7G,A.abp,A.abZ,A.adi]) +p(A.a5P,A.iK) +p(A.a_c,A.aJW) +q(A.fa,[A.a_R,A.LK,A.MK,A.a3v,A.a3Y,A.a4N,A.a4T,A.a4X,A.Oo,A.A5,A.Gz,A.RN,A.acS]) +q(A.A5,[A.Pw,A.Tl]) +p(A.Px,A.Pw) +p(A.Tm,A.Tl) +q(A.h9,[A.a_l,A.a_m,A.a13,A.a1U,A.a28,A.a39,A.a3o,A.Ih,A.a6d,A.abY]) +q(A.a28,[A.MJ,A.A0,A.acy]) +p(A.a5c,A.A0) +p(A.a5p,A.Ih) +p(A.aJm,A.adn) +q(A.HS,[A.atG,A.xg,A.apN]) +p(A.alZ,A.atG) +p(A.RX,A.apN) +p(A.KU,A.afG) +p(A.zX,A.akH) +p(A.a5V,A.akI) +p(A.hu,A.amu) +p(A.adN,A.arE) +p(A.aHU,A.aUl) +q(A.aHU,[A.aOi,A.aX6,A.aXE]) +p(A.aaz,A.Ef) +q(A.aaz,[A.dA,A.cr]) +q(A.ba,[A.bq,A.h6,A.A4,A.BF,A.BG,A.RK,A.RL,A.RM,A.z1,A.a7v,A.mZ,A.BM,A.a9e,A.aaq,A.IJ]) +q(A.h6,[A.oa,A.OE,A.T9,A.mn,A.S2,A.QX]) +q(A.hJ,[A.RV,A.yx,A.a7D]) +p(A.yf,A.A4) +q(A.QX,[A.On,A.Q6]) +p(A.lp,A.On) +p(A.zJ,A.tu) +q(A.zJ,[A.Ou,A.Qc]) +p(A.Lm,A.Ou) +p(A.Vu,A.RX) +q(A.ahL,[A.IY,A.K9]) +q(A.kU,[A.Ur,A.Yg]) +p(A.a7a,A.Gl) +p(A.ag9,A.ag8) +p(A.DE,A.ag9) +p(A.aiF,A.aiE) +p(A.EK,A.aiF) +p(A.MM,A.aiG) +p(A.a3r,A.aiP) +p(A.amM,A.amL) +p(A.PZ,A.amM) +p(A.acp,A.aqi) +p(A.acq,A.aqj) +p(A.WS,A.aoP) +p(A.WT,A.WS) +p(A.wj,A.WT) +q(A.aSE,[A.aKA,A.aSC]) +p(A.aSw,A.axI) +q(A.fD,[A.a7N,A.a1f,A.acA,A.a3x,A.a5t,A.a3O,A.a_U]) +q(A.fQ,[A.qf,A.Gn,A.Fl,A.zv]) +p(A.dB,A.cJ) +p(A.agB,A.agA) +p(A.LI,A.agB) +p(A.LJ,A.agz) +p(A.a4S,A.ajQ) +p(A.a4f,A.ajD) +p(A.a4e,A.ajC) +p(A.Go,A.amj) +p(A.a7O,A.ami) +p(A.amP,A.jW) +p(A.amQ,A.amP) +p(A.a8V,A.amQ) +p(A.aqN,A.aqM) +p(A.XI,A.aqN) +p(A.hA,A.XI) +p(A.akm,A.tJ) +p(A.Ti,A.akm) +q(A.aX4,[A.aKB,A.aX5]) +p(A.aKn,A.aOF) +p(A.aEt,A.aXg) +q(A.vX,[A.iM,A.mg,A.i6,A.LH]) +q(A.aHm,[A.aNS,A.aG3,A.aIe,A.aXx,A.axv]) +q(A.of,[A.vC,A.w5]) +q(A.ef,[A.aiD,A.adR,A.aax,A.aaw,A.Hc,A.aat,A.aau,A.QY,A.aav]) +q(A.adR,[A.j_,A.LB,A.OI,A.PN]) +q(A.j_,[A.GA,A.GD,A.Es,A.adl,A.a5a]) +q(A.GA,[A.aeo,A.ado,A.aaV]) +q(A.aet,[A.aQo,A.agL]) +p(A.azC,A.agL) +p(A.aiw,A.x5) +p(A.a0,A.Gh) +q(A.fe,[A.AF,A.AG]) +p(A.a3b,A.aKS) +q(A.it,[A.Fb,A.va]) +p(A.aeM,A.wV) +q(A.aeR,[A.aeX,A.at1,A.at3,A.TH]) +p(A.aeY,A.at1) +p(A.af0,A.at3) +p(A.asX,A.asW) +p(A.asY,A.asX) +p(A.asZ,A.asY) +p(A.at_,A.asZ) +p(A.at0,A.at_) +p(A.er,A.at0) +q(A.er,[A.asB,A.asD,A.asE,A.asG,A.asH,A.asI]) +p(A.asC,A.asB) +p(A.lF,A.asC) +p(A.aeK,A.asD) +q(A.aeK,[A.II,A.TA,A.TI,A.Cz]) +p(A.asF,A.asE) +p(A.aeL,A.asF) +p(A.TC,A.asG) +p(A.aeN,A.asH) +p(A.asJ,A.asI) +p(A.asK,A.asJ) +p(A.asL,A.asK) +p(A.lG,A.asL) +p(A.asU,A.asT) +p(A.asV,A.asU) +p(A.aYn,A.asV) +p(A.TF,A.Et) +q(A.aYn,[A.aeZ,A.af_]) +p(A.aYx,A.at4) +p(A.asP,A.auK) +p(A.b8p,A.auL) +p(A.asR,A.asQ) +p(A.asS,A.asR) +p(A.eO,A.asS) +q(A.eO,[A.nB,A.oP,A.mL,A.mM,A.asM,A.oQ,A.at2,A.wX]) +p(A.jo,A.asM) +p(A.hZ,A.at2) +p(A.asO,A.asN) +p(A.hD,A.asO) +s(A.ahG,A.a1o) +s(A.ai0,A.aQX) +s(A.akL,A.b24) +s(A.akM,A.b25) +s(A.akN,A.b23) +r(A.amF,A.UJ) +r(A.amG,A.UJ) +s(A.atJ,A.b8h) +s(A.Iv,A.ae0) +s(A.Yz,A.O) +s(A.VZ,A.O) +s(A.W_,A.N0) +s(A.W0,A.O) +s(A.W1,A.N0) +s(A.wZ,A.afw) +s(A.JZ,A.aqJ) +s(A.Xu,A.bE) +s(A.Xv,A.z) +s(A.Xw,A.mz) +s(A.Y8,A.ase) +s(A.Y9,A.asf) +s(A.atz,A.akw) +s(A.atA,A.akw) +s(A.auG,A.nr) +s(A.ahd,A.aAd) +s(A.ai2,A.O) +s(A.ai3,A.c_) +s(A.ai4,A.O) +s(A.ai5,A.c_) +s(A.aiR,A.O) +s(A.aiS,A.c_) +s(A.ajT,A.O) +s(A.ajU,A.c_) +s(A.alm,A.bE) +s(A.aln,A.bE) +s(A.alo,A.O) +s(A.alp,A.c_) +s(A.am2,A.O) +s(A.am3,A.c_) +s(A.amU,A.O) +s(A.amV,A.c_) +s(A.ap0,A.bE) +s(A.Xr,A.O) +s(A.Xs,A.c_) +s(A.aq2,A.O) +s(A.aq3,A.c_) +s(A.aqr,A.bE) +s(A.arq,A.O) +s(A.arr,A.c_) +s(A.XT,A.O) +s(A.XU,A.c_) +s(A.arC,A.O) +s(A.arD,A.c_) +s(A.ath,A.O) +s(A.ati,A.c_) +s(A.att,A.O) +s(A.atu,A.c_) +s(A.atE,A.O) +s(A.atF,A.c_) +s(A.au8,A.O) +s(A.au9,A.c_) +s(A.auc,A.O) +s(A.aud,A.c_) +s(A.akP,A.O) +s(A.akQ,A.c_) +s(A.ame,A.O) +s(A.amf,A.c_) +s(A.aqy,A.O) +s(A.aqz,A.c_) +s(A.arJ,A.O) +s(A.arK,A.c_) +s(A.auB,A.h0) +s(A.auC,A.h0) +s(A.auD,A.h0) +s(A.auE,A.h0) +s(A.auF,A.h0) +s(A.afx,A.bE) +s(A.afy,A.a6T) +s(A.afz,A.aDJ) +s(A.Wi,A.O) +s(A.atc,A.n3) +r(A.V2,A.a2) +s(A.afq,A.da) +r(A.afN,A.b_) +r(A.afO,A.a2) +r(A.afP,A.b_) +r(A.afQ,A.a2) +r(A.afb,A.b_) +r(A.afc,A.a2) +r(A.afS,A.b_) +r(A.afT,A.a2) +r(A.ar0,A.b_) +r(A.ar3,A.b_) +r(A.agQ,A.b_) +r(A.agR,A.a2) +r(A.ai7,A.b_) +r(A.ai8,A.a2) +r(A.aii,A.ex) +r(A.aqa,A.b_) +r(A.aqc,A.a2) +r(A.ahY,A.b_) +r(A.ahZ,A.a2) +r(A.ajy,A.b_) +r(A.ajz,A.a2) +r(A.ajG,A.a2) +r(A.als,A.b_) +r(A.alw,A.ex) +r(A.alx,A.a2) +r(A.aoK,A.b_) +r(A.aoL,A.a2) +r(A.aoS,A.ex) +r(A.aoT,A.a2) +r(A.ast,A.b_) +r(A.asu,A.a2) +s(A.anK,A.jd) +r(A.aoI,A.b_) +r(A.aoJ,A.a2) +r(A.aqb,A.b_) +r(A.aqd,A.a2) +r(A.ar1,A.b_) +s(A.afF,A.j4) +s(A.asv,A.j4) +r(A.aij,A.ex) +r(A.U7,A.b_) +r(A.U8,A.a3J) +r(A.ahS,A.a2) +s(A.ahT,A.uS) +r(A.ahU,A.a2) +s(A.aj2,A.da) +s(A.apE,A.da) +s(A.agl,A.pP) +r(A.afC,A.b_) +s(A.agm,A.oh) +s(A.amO,A.m7) +r(A.Up,A.Gf) +r(A.agT,A.a7c) +s(A.agU,A.kC) +s(A.agV,A.fB) +s(A.aiX,A.kC) +s(A.aiY,A.pX) +r(A.aiZ,A.a2) +r(A.Va,A.b_) +r(A.aj_,A.jB) +r(A.ajf,A.ds) +s(A.ajg,A.oh) +s(A.alB,A.cP) +s(A.alC,A.m7) +r(A.aoN,A.dR) +r(A.aoO,A.b_) +s(A.aqn,A.kC) +s(A.aqo,A.pX) +r(A.aua,A.a2) +r(A.Z1,A.b_) +r(A.aub,A.jB) +s(A.at8,A.kC) +s(A.at9,A.pX) +r(A.afH,A.a2) +s(A.afI,A.cP) +r(A.ag4,A.ds) +r(A.alO,A.a2) +s(A.alP,A.cP) +r(A.alT,A.b_) +r(A.alU,A.ds) +s(A.afd,A.cP) +r(A.afe,A.dR) +r(A.agD,A.ds) +r(A.alH,A.a2) +r(A.alI,A.ds) +r(A.VV,A.ex) +s(A.alM,A.cP) +r(A.alN,A.a4m) +s(A.agE,A.cP) +r(A.agF,A.ds) +s(A.ag5,A.cP) +s(A.ag6,A.zo) +r(A.ag7,A.ae3) +s(A.aga,A.cP) +s(A.agb,A.ag) +s(A.amR,A.cP) +r(A.amS,A.a2) +s(A.anz,A.ag) +r(A.anA,A.NG) +s(A.anB,A.fB) +s(A.anC,A.kC) +s(A.asp,A.cP) +s(A.asq,A.zo) +r(A.asr,A.ae3) +r(A.Wl,A.ds) +r(A.Wm,A.ds) +s(A.anL,A.da) +s(A.anM,A.jd) +r(A.Wn,A.ds) +r(A.anN,A.a2) +r(A.Wo,A.ds) +r(A.anO,A.b_) +r(A.Wp,A.ds) +s(A.anP,A.da) +s(A.anQ,A.jd) +s(A.anR,A.da) +s(A.agx,A.da) +r(A.V4,A.b_) +r(A.aiH,A.a7F) +r(A.V5,A.b_) +r(A.aiI,A.a7F) +r(A.amy,A.dR) +r(A.al2,A.a2) +r(A.al3,A.aGr) +r(A.aug,A.b_) +r(A.auh,A.b_) +r(A.aqg,A.a2) +r(A.aqh,A.b_) +s(A.aq0,A.da) +r(A.aq1,A.b_) +r(A.XX,A.aGq) +r(A.XY,A.ds) +r(A.atf,A.a2) +s(A.atg,A.cP) +s(A.agH,A.da) +s(A.aiq,A.da) +s(A.aml,A.da) +r(A.atK,A.b_) +s(A.ap5,A.da) +s(A.apQ,A.da) +s(A.aoY,A.ag) +r(A.aib,A.jB) +r(A.aid,A.jB) +r(A.aik,A.ex) +r(A.VW,A.b_) +r(A.alR,A.NJ) +r(A.VX,A.a4m) +r(A.atv,A.b_) +r(A.alQ,A.a2) +r(A.ajR,A.b_) +r(A.ajS,A.NJ) +r(A.VE,A.ds) +r(A.aks,A.dR) +s(A.akt,A.cP) +s(A.akB,A.fB) +s(A.akD,A.oh) +s(A.alu,A.jd) +s(A.aly,A.jd) +r(A.VU,A.Gf) +r(A.alJ,A.a7c) +r(A.alK,A.Gf) +r(A.aqR,A.b_) +s(A.apd,A.kC) +r(A.ar2,A.b_) +s(A.akp,A.jd) +s(A.am_,A.da) +s(A.am0,A.pf) +s(A.amz,A.pP) +r(A.alS,A.a2) +r(A.agd,A.a2) +r(A.age,A.b_) +r(A.U2,A.NF) +r(A.akU,A.a2) +r(A.akV,A.b_) +r(A.afD,A.a2) +r(A.afJ,A.a2) +r(A.amT,A.a2) +r(A.Z3,A.b_) +r(A.aue,A.jB) +s(A.amt,A.da) +s(A.amC,A.da) +s(A.amD,A.pf) +r(A.aqp,A.ds) +s(A.aqq,A.oh) +s(A.atm,A.cP) +s(A.am1,A.fB) +s(A.arw,A.da) +s(A.arx,A.pf) +s(A.ary,A.da) +s(A.aht,A.da) +r(A.amN,A.a2) +s(A.agG,A.bu) +r(A.agw,A.c6) +r(A.anr,A.c6) +s(A.ans,A.t8) +r(A.ao4,A.c6) +s(A.ao5,A.t8) +s(A.apb,A.cP) +r(A.X3,A.a2) +r(A.TN,A.NJ) +r(A.TO,A.b_) +r(A.U3,A.b_) +r(A.ajW,A.a2) +r(A.ajX,A.E5) +r(A.akq,A.a2) +r(A.akr,A.E5) +r(A.VF,A.ex) +s(A.akE,A.m7) +r(A.Xz,A.b_) +r(A.Wb,A.a2) +r(A.au0,A.ex) +s(A.aq8,A.ag) +s(A.aq9,A.ag) +s(A.aqe,A.ag) +s(A.aqf,A.ag) +s(A.ahJ,A.rr) +s(A.ake,A.rr) +s(A.anF,A.rr) +s(A.aoz,A.rr) +s(A.aq5,A.rr) +s(A.alE,A.ej) +s(A.amm,A.ej) +s(A.aoV,A.ej) +s(A.ap6,A.ej) +s(A.apR,A.ej) +r(A.aic,A.a2) +s(A.aj1,A.aD) +s(A.ajE,A.fY) +s(A.am4,A.bu) +s(A.apA,A.ag) +s(A.aif,A.x6) +s(A.aig,A.x6) +s(A.aih,A.x6) +s(A.an8,A.x6) +s(A.aqS,A.x6) +s(A.aqY,A.x6) +r(A.TK,A.tt) +r(A.alF,A.tt) +r(A.amw,A.tt) +r(A.aoX,A.tt) +r(A.ap9,A.tt) +r(A.as0,A.tt) +r(A.YP,A.ly) +r(A.TZ,A.a2) +s(A.U_,A.ag) +s(A.al5,A.ag) +s(A.aqH,A.ag) +r(A.XW,A.a2) +s(A.afn,A.KF) +s(A.afo,A.xS) +s(A.afp,A.ut) +s(A.afr,A.b0) +s(A.Uj,A.KG) +s(A.Uk,A.xS) +s(A.Ul,A.ut) +s(A.ahs,A.KI) +s(A.anw,A.KG) +s(A.anx,A.xS) +s(A.any,A.ut) +s(A.aoG,A.KG) +s(A.aoH,A.ut) +s(A.arF,A.KF) +s(A.arG,A.xS) +s(A.arH,A.ut) +s(A.Yw,A.KI) +r(A.YC,A.ly) +r(A.YD,A.fw) +s(A.atj,A.T7) +s(A.ahg,A.b0) +s(A.atk,A.oJ) +s(A.ahi,A.b0) +r(A.YE,A.ly) +s(A.ahk,A.oJ) +r(A.YF,A.fw) +r(A.YT,A.aZ) +s(A.atO,A.f5) +s(A.aho,A.b0) +s(A.ahq,A.b0) +s(A.aj7,A.n3) +s(A.aj6,A.b0) +s(A.ahQ,A.b0) +s(A.amW,A.hF) +s(A.amX,A.agX) +s(A.amY,A.hF) +s(A.amZ,A.agY) +s(A.an_,A.hF) +s(A.an0,A.agZ) +s(A.an1,A.hF) +s(A.an2,A.ah_) +s(A.an3,A.b0) +s(A.an4,A.hF) +s(A.an5,A.ah0) +s(A.an6,A.hF) +s(A.an7,A.ah1) +s(A.an9,A.hF) +s(A.ana,A.ah2) +s(A.anb,A.hF) +s(A.anc,A.ah3) +s(A.and,A.hF) +s(A.ane,A.ah4) +s(A.anf,A.hF) +s(A.ang,A.ah5) +s(A.anh,A.hF) +s(A.ani,A.ah6) +s(A.anj,A.hF) +s(A.ank,A.ah7) +s(A.anl,A.hF) +s(A.anm,A.ah8) +s(A.ann,A.hF) +s(A.ano,A.ah9) +s(A.anp,A.hF) +s(A.anq,A.aha) +s(A.auk,A.agX) +s(A.aul,A.agY) +s(A.aum,A.agZ) +s(A.aun,A.ah_) +s(A.auo,A.b0) +s(A.aup,A.hF) +s(A.auq,A.ah0) +s(A.aur,A.ah1) +s(A.aus,A.ah2) +s(A.aut,A.ah3) +s(A.auu,A.ah4) +s(A.auv,A.ah5) +s(A.auw,A.ah6) +s(A.aux,A.ah7) +s(A.auy,A.ah8) +s(A.auz,A.ah9) +s(A.auA,A.aha) +s(A.ajI,A.n3) +r(A.TU,A.XJ) +s(A.aqT,A.b0) +s(A.aqU,A.b0) +s(A.aqV,A.b0) +s(A.aqW,A.b0) +s(A.aqX,A.b0) +s(A.af6,A.b0) +s(A.aft,A.b0) +s(A.afE,A.b0) +s(A.alc,A.b0) +s(A.ag_,A.b0) +s(A.ag0,A.b0) +s(A.ag1,A.b0) +s(A.atL,A.a6H) +s(A.agc,A.b0) +s(A.agh,A.b0) +r(A.Yy,A.fw) +s(A.agi,A.b0) +s(A.agn,A.b0) +r(A.YA,A.fw) +r(A.YB,A.T8) +s(A.ags,A.b0) +s(A.agv,A.b0) +s(A.agJ,A.b0) +s(A.ahx,A.b0) +s(A.ahz,A.b0) +s(A.atl,A.oJ) +s(A.ahR,A.b0) +s(A.ai_,A.b0) +s(A.ail,A.b0) +s(A.YI,A.fY) +s(A.aip,A.b0) +s(A.atn,A.b0) +s(A.ato,A.b0) +s(A.atp,A.b0) +s(A.atq,A.b0) +s(A.aiB,A.b0) +r(A.YJ,A.ly) +s(A.aiO,A.b0) +s(A.aiT,A.b0) +s(A.atr,A.aDW) +s(A.ats,A.aDX) +s(A.aj3,A.b0) +s(A.atx,A.b0) +s(A.ak2,A.b0) +r(A.YN,A.uv) +s(A.akh,A.b0) +r(A.Yx,A.fw) +r(A.YM,A.ly) +r(A.YO,A.fw) +r(A.atP,A.q3) +r(A.atU,A.q3) +s(A.akZ,A.b0) +r(A.atB,A.fw) +s(A.alj,A.b0) +s(A.alk,A.b0) +s(A.all,A.b0) +s(A.alW,A.b0) +s(A.alX,A.b0) +s(A.alY,A.b0) +s(A.amo,A.b0) +s(A.VO,A.a6G) +s(A.amv,A.b0) +r(A.Z5,A.Ka) +r(A.Z6,A.Ka) +s(A.ant,A.b0) +s(A.anu,A.b0) +s(A.anD,A.b0) +r(A.X0,A.fw) +r(A.X1,A.fw) +r(A.X2,A.nn) +r(A.YK,A.fw) +s(A.aph,A.b0) +s(A.api,A.b0) +s(A.apj,A.b0) +s(A.apk,A.b0) +r(A.YV,A.we) +r(A.YX,A.we) +r(A.Z0,A.fw) +s(A.aoZ,A.ax8) +s(A.apU,A.b0) +s(A.aq_,A.b0) +s(A.aqI,A.b0) +s(A.aqO,A.b0) +s(A.aui,A.b0) +s(A.ar7,A.b0) +r(A.Z4,A.nn) +s(A.alh,A.oJ) +s(A.are,A.b0) +r(A.atY,A.aZ) +r(A.auj,A.fw) +s(A.arp,A.b0) +s(A.art,A.b0) +s(A.aso,A.b0) +s(A.arv,A.b0) +s(A.arz,A.b0) +r(A.Y_,A.ly) +s(A.arB,A.b0) +s(A.as1,A.b0) +s(A.afZ,A.b0) +s(A.ahD,A.b0) +s(A.ak7,A.b0) +s(A.ak9,A.b0) +s(A.ak8,A.b0) +s(A.aqD,A.b0) +s(A.arn,A.b0) +r(A.Un,A.h5) +r(A.Wy,A.aZ) +s(A.aoa,A.f5) +r(A.WA,A.we) +r(A.WB,A.aZ) +s(A.aoc,A.aa4) +r(A.aoe,A.aZ) +s(A.aof,A.f5) +r(A.WC,A.aAB) +s(A.akK,A.n3) +s(A.atD,A.b0) +s(A.amI,A.n3) +s(A.aoi,A.n3) +r(A.WJ,A.aZ) +s(A.aoj,A.aa4) +r(A.aok,A.we) +r(A.XP,A.h5) +s(A.au1,A.il) +s(A.au2,A.b0) +s(A.au3,A.bu) +r(A.ao7,A.Qv) +r(A.WL,A.bx) +r(A.WM,A.jh) +r(A.aol,A.bx) +s(A.app,A.b0) +r(A.WO,A.bx) +s(A.apV,A.b0) +r(A.apW,A.h5) +r(A.apZ,A.h5) +r(A.WQ,A.aZ) +s(A.aop,A.aPV) +s(A.aoq,A.aQ0) +r(A.apX,A.h5) +s(A.apY,A.py) +r(A.aoo,A.bx) +r(A.aor,A.aZ) +s(A.aos,A.f5) +r(A.aov,A.bx) +r(A.nG,A.aZ) +r(A.aox,A.aZ) +s(A.aoy,A.f5) +s(A.apq,A.b0) +s(A.apt,A.n3) +s(A.apu,A.b0) +s(A.akA,A.b0) +s(A.akC,A.b0) +s(A.alv,A.b0) +s(A.anH,A.b0) +s(A.anG,A.b0) +s(A.ar9,A.b0) +s(A.atI,A.SO) +s(A.af7,A.b0) +s(A.af5,A.b0) +s(A.akn,A.b0) +r(A.YR,A.JC) +r(A.YS,A.JC) +r(A.ate,A.ly) +s(A.auJ,A.fY) +r(A.WU,A.aQC) +r(A.Yn,A.F9) +r(A.Yo,A.iQ) +r(A.Yp,A.Hz) +r(A.Yq,A.PG) +r(A.Yr,A.abe) +r(A.Ys,A.Ha) +r(A.Yt,A.Tx) +r(A.YG,A.fw) +r(A.YH,A.uv) +r(A.UX,A.uv) +s(A.air,A.fY) +r(A.UY,A.fw) +s(A.ais,A.aVT) +s(A.ait,A.aVq) +s(A.aj8,A.n3) +s(A.aj9,A.bu) +s(A.aja,A.n3) +s(A.ajb,A.bu) +s(A.aje,A.b0) +r(A.anS,A.aB8) +s(A.atM,A.b0) +s(A.atN,A.b0) +r(A.Jb,A.nn) +s(A.aqk,A.b0) +s(A.ak3,A.b0) +s(A.aty,A.fY) +r(A.Jk,A.ly) +r(A.atS,A.bx) +s(A.atT,A.mw) +s(A.atC,A.fY) +r(A.W4,A.fw) +r(A.W5,A.nn) +s(A.atw,A.bu) +s(A.atH,A.Pn) +r(A.atV,A.aZ) +s(A.atW,A.f5) +r(A.ams,A.fw) +s(A.atQ,A.CZ) +s(A.atR,A.mb) +r(A.YW,A.aZ) +s(A.atZ,A.CZ) +r(A.W9,A.lE) +r(A.YL,A.fw) +r(A.Z2,A.fw) +r(A.au_,A.nn) +r(A.Kb,A.nn) +r(A.CU,A.a6m) +r(A.au5,A.uv) +s(A.aj0,A.tp) +r(A.X7,A.lE) +r(A.X5,A.lE) +s(A.ape,A.tp) +r(A.Xc,A.fw) +r(A.Xd,A.nn) +r(A.JI,A.fw) +s(A.alG,A.bu) +s(A.au4,A.il) +r(A.YY,A.abc) +s(A.apF,A.b0) +s(A.apG,A.bu) +s(A.apI,A.bu) +s(A.apL,A.b0) +s(A.apM,A.aKw) +s(A.atd,A.b0) +r(A.YU,A.bx) +s(A.au6,A.Pn) +s(A.au7,A.aem) +r(A.Xp,A.lz) +s(A.auf,A.b0) +s(A.agy,A.fY) +r(A.YZ,A.ly) +r(A.Z_,A.ly) +s(A.Y2,A.aWV) +s(A.auH,A.Pn) +s(A.auI,A.aem) +r(A.atX,A.bx) +s(A.UH,A.a7S) +s(A.aql,A.a5w) +r(A.YQ,A.fw) +r(A.apN,A.abC) +r(A.atG,A.abC) +s(A.afG,A.j4) +s(A.akH,A.j4) +r(A.akI,A.a2) +s(A.amu,A.fB) +s(A.arE,A.ag) +r(A.ag8,A.dR) +s(A.ag9,A.cP) +r(A.aiE,A.a2) +s(A.aiF,A.cP) +r(A.aiG,A.dR) +r(A.aiP,A.dR) +r(A.amL,A.dR) +s(A.amM,A.cP) +r(A.aqi,A.dR) +r(A.aqj,A.dR) +s(A.aoP,A.pP) +r(A.WS,A.ds) +r(A.WT,A.aGp) +r(A.agA,A.a8t) +r(A.agB,A.a2) +r(A.agz,A.a2) +r(A.ajQ,A.a2) +r(A.ajC,A.a2) +r(A.ajD,A.a2) +r(A.amj,A.a2) +r(A.ami,A.a2) +r(A.amP,A.a2) +s(A.amQ,A.cP) +s(A.aqM,A.fB) +r(A.aqN,A.b_) +r(A.XI,A.ds) +s(A.agL,A.a3j) +s(A.at1,A.aeS) +s(A.at3,A.aeS) +s(A.asB,A.wW) +s(A.asC,A.tQ) +s(A.asD,A.tQ) +s(A.asE,A.tQ) +s(A.asF,A.aeT) +s(A.asG,A.tQ) +s(A.asH,A.IK) +s(A.asI,A.wW) +s(A.asJ,A.tQ) +s(A.asK,A.aeT) +s(A.asL,A.IK) +s(A.asW,A.aXW) +s(A.asX,A.aXX) +s(A.asY,A.aeV) +s(A.asZ,A.aeW) +s(A.at_,A.aYq) +s(A.at0,A.aYv) +s(A.asT,A.aeV) +s(A.asU,A.aeW) +s(A.asV,A.tQ) +s(A.at4,A.aYw) +s(A.auK,A.TD) +s(A.auL,A.TD) +s(A.asQ,A.aeU) +s(A.asR,A.aYm) +s(A.asS,A.aYl) +s(A.asM,A.TE) +s(A.at2,A.TE) +s(A.asN,A.TE) +s(A.asO,A.aeU)})() +var v={typeUniverse:{eC:new Map(),tR:{},eT:{},tPV:{},sEA:[]},mangledGlobalNames:{k:"int",T:"double",d2:"num",h:"String",F:"bool",bR:"Null",H:"List",B:"Object",bA:"Map"},mangledNames:{},types:["~()","T(T)","~(l)","~(bv)","n(bO)","~(mY)","F()","~(F)","F(qO,i)","~(vS,i)","aN(H,IO,0&(h[k?]))","~(B?)","~(L)","~(k)","~(n6)","an<~>()","~(b7)","~(cg)","m(ah)","~(oH)","F(b7)","F(fd)","bR(~)","~(h,@)","H()","F(h)","~(h)","F(B?)","bR()","~(cX?)","~(oG,F)","br(@)","~(lf)","bR(B,eh)","F(rR)","~(o7)","~(@)","F(pk)","bR(@)","~(zk)","F(k)","~(aV)","~(y)","F(bO)","T(Y)","h(h)","~(~())","k(fd,fd)","~(hw,~())","k(h)","~(Q0)","~(oI)","~(uS)","m(R)","~(T)","h(d2,H)","ba()","~(il)","~(a)","h()","~(w3)","a(a)","F(kD)","T(T,T)","F(y)","Q(Y,bb)","nV(H,nV)","nt(bO)","T(Y,T)","I(bO)","F(jG)","F(mP)","i(a)","bR(k)","F(@)","h(ja)","h(Af)","k(k)","h(k)","~(w2)","~(t5)","ba<+(h,fl)>()","bR(l)","~(rO)","ba<@>()","cf?(cB?)","F(ia)","mE()","jf(oG)","~(FZ)","an<@>(pJ)","0&()","~(DI,ff)","~(B?,B?)","F(fa)","~(f1)","~(k,oH)","~(r8)","~(Sz)","F(hI)","n?(bO)","~(adC)","k(L,L)","fp(@)","~(Oz)","~(au)","k()","~(B,eh)","~(jz)","an
()","Gd(k)","~(j4,B)","~(Ay)","bR(F)","~(jP)","F(Bw)","bO<0^>()","~(jO)","F(B?,B?)","k(B?)","iF(ah)","~(ni)","~(jk)","k(eo,eo)","pz(fd,kt)","F(eo)","A()","~(FY)","i(iK)","bR(h)","n(n)","@(@)","l()","~(rw)","N2(i)","~([c9?])","cr(cr,cr)","~(t6)","~(b_)","F(lG)","~(wN)","m(ah,m?)","T()","m(ah,uX)","F(k,k)","~(B[eh?])","cf?(cB?)","~(h,h)","hW(hW)","bL(bO)","~(j8,F)","~(le)","F(zh)","Dp(k)","bR(aV)","~(kQ,np?)","h(fn)","~(SC)","~(jB)","~(nW)","~(fA)","F(lS)","B()","ba()","F(lo)","~({curve:ho,descendant:L?,duration:bv,rect:A?})","an<~>(@)","~(Y?)","DQ(H)","Q()","T(Q)","ke(ah,m?)","~(v7)","zI()","~(kq)","T(bO)","m(ah,bO,m?)?(cB?)","~(bgC)","cf?(cB?)","T(CV)","~([oI?])","kV(oz)","F(qO)","~(wv)","T({from!T,to!T})","n?(n?)","~(H)","~(eo)","~(Q)","H(oX)","~(jY)","he(k)","an(cX?)","an<~>(pJ)","~(fV)","bA()","~(zZ)","h(h?)","~(k,oI)","F(Ax)","F(kO)","xt(ah,dZ,m?)","F(aBt)","~([bv?])","c0(c0,F,mE)","~(ex)","a(fn)","~(DI)","bR(eI)","k(hG,hG)","jk()","lt()","~(lt)","oO()","~(oO)","oi()","~(oi)","jO()","~(A)","br<@>?(br<@>?,@,br<@>(@))","uz(ah,wU)","~(d2)","k0(cg)","~(F?)","an<~>(~)","F(il,T)","~(~)","F(il)","tT()","~(SB)","~(SD)","~(SA)","~(dk)","h?(mj)","a(k)","xu(ah,dZ,m?)","B?(B?)","~(bh)","~(G2)","~(eD,h,k)","@()","@(h)","h(T,T,h)","F(h9)","F(Ma)","H()","an()","F(h?)","F(dB)","~(@,@)","H()","F(F?)","lF(lF)","er(er)","F(wW)","~(zq)","F(BD)","lo()","bR(B?)","+(h,fl)(h,h,h)","h(h,h)","k(@,@)","aV([l?])","lY()","by(T)","~(rQ)","H()","l?(k)","jf?(oG)","an([l?])","F(bou)","~({isInternalRefresh:F})","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","~(h?)","T(@)","V(R)","an(bK)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","~(rR)","~(H,l)","Io(k)","bFM?()","Gx(k)","je(lb)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","I(I)","V(R)","V(R)","V(R)","V
(R)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","V(R)","iF(ah,B?)","~(Q?)","F(bK)","~(H)","~(eI)","zj(@)","F(a,a)","F(c6,c6)","F(a)","F1(@)","T(k)","~(T,T,T,T)","~(mv)","qS(a)","H1(a)","q1(a)","@(@,h)","a?(a8,a)","F(y,a)","k(y)","~(xa)","I0()","k(k,H)","F(c6)","bK(bK)","T(ao)","a(a,au)","bR(~())","T(h)","F(n)","H3()","bR(@,eh)","~(k,@)","k(vR,vR)","k(xj,xj)","n0(qU)","aM<@>(@)","an(h,bA)","~(@,eh)","F(kO)","l?(T)","~(ms)","F(kt)","+end,start(a,a)?(a8,+end,start(a,a))","F(y,+end,start(a,a))","k(l)","aV()","eI(eI)","bR(ln,ln)","~(eD,k,k)","m(ah,aD)","~(Su,@)","F_()","m(ah,bb)","m()","m(ah,kh<~>)","~([B?])","~(h,k)","~(pY)","~(h,k?)","F(m7)","a(a{output:a?})","F(T)","a(T)","F(hr)","k(k,k)","~(h,h?)","~(k,k,k)","eD(@,@)","~(hU,k)","~(Ri)","~(Rj)","~(Hn)","an()","eI(ji)","T(rD)","Ba?(DF,h,h)","an(k,rX)","a(a,a)","F(ff)","wz(k)","ji(he)","ji(@)","~(ji)","an()","F(c5)","e4(c5)","A(A?,jY)","zL(ah,mA)","Fy(ah,eI)","zM(ah,H)","Fz(ah,he)","~(v2)","F(v2)","~(e4)","~(yi)","k(A,A)","Ij()","an(h)","k(nw,nw)","F(fQ)","an>(fQ)","F(iP)","h?(fx)","+(h,fx)(+(h?,fx))","fx(+(h,fx))","k(fx,fx)","an(+(h,fx))","Cf({from:T?})","~(IR)","Ao()","h(h,n)","~(oF)","an<~>([l?])","~(B)","an()>()","~(k,F(pk))","iF(m)","an()","h(B?)","h(hI)","~(Cw)","bR(B[eh?])","fk?()","fk()","EN(h)","F(F)","h(ey)","Jf()","~(t4)","T?(k)","~(bv?)","F(ov)","hF?(ov)","h(T)","beJ?(i)","beJ?()","~(u4)","bA<~(cg),by?>()","~(~(cg),by?)","hI(@)","bR(v,l)","CI()","uN(fz)","Ev(fz)","yF(fz)","G5(A?,A?)","m(ah,~())","~(v,l)","ku<0^>(my,m(ah))","~(l,H)","T(tV)","AD(nl,~(),ha?)","0^?(0^?(cB?))","0^?(cf<0^>?(cB?))","y4(nl,~(),ha?)","cf?(cB?)","yq(nl,~(),ha?)","cf?(cB?)","IU()","cf?(cB?)","cf?(cB?)","f4?(bO)","f4?(cB?)","~(n)","n?(cB?)","tN?(cB?)","Ag?(cB?)","bv?(cB?)","F?(cB?)","xO?(cB?)","Fw?(cB?)","GP(ah)","f4(bO)","lg(r3)","h?(h)","m(ah,dZ,dZ)","o3(ah)","~(uq)","~(uC)","b6(m)","~(fk)","h?(h?)","F(n?)","bL?(bO)","C3(fk)","A()?(Y)","F(ah)","~(c9?)","~([T])","F(vk?)","n(x7)","~(r3?)","ku<~>(my)","Bs(ah)","bR(DM)","n?(n?,n?,n?[n?])","A6(ah)","aw?(ah,Ad,cD)","F(m9)","Fu(ah)","JH()","ws(@)","V(R)","V(R)","rV?(fk)","qE(ah,m?)","V(R)","F(bO)","V(R)","V(R)","V(R)","V(R)","V(R)","~(oR)","n?()","V(R)","E8(ah)","V(R)","~(o5)","V(R)","zK(ah,m?)","Hw(ah,m?)","Ct(m4)","Cc(@)","nv()","bK>(B,qe<@>)","F(bK>)","F(wM)","V(R)","~(k,k)","an(pr{allowUpscaling:F,cacheHeight:k?,cacheWidth:k?})","an(pr{getTargetSize:bKS(k,k)?})","f0(f0,dH)","dH(dH)","F(dH)","h(dH)","Jr()","~(j8?,F)","an<~>(B,eh?)","V(R)","bR(awv)","V(R)","~(j8)","~(pq)","~(B,eh?)?(kq)","~(pq)?(kq)","~(lU)","V(R)","je(cx)","A(cx)","rZ(cx)","F(k,F)","pn?()","V(R)","vB(vB)","DB(R)","rt(i,k)","T?()","Q(bb)","T?(+(bb,I7))","~(kQ)","F(ry)","A(A?,hW)","V(R)","f4(pL)","~(pL,by)","F(pL)","V(R)","~(H{isMergeUp:F})","V(R)","V(R)","~(u1)","F(u1)","qg?(vS,i)","F(HM{crossAxisPosition!T,mainAxisPosition!T})","V(R)","V(R)","F(Y)","V(R)","V(R)","F(fh)","V(R)","~(k,Jd)","~(BC)","V(R)","V(R)","eo(u5)","an<~>(iE)","~(iE)","k(eo)","eo(k)","~(oA)","~(fi,~(B?))","an()","cX(cX?)","an(h)","uu(bA)","cY()","an(h?)","oF()","an<~>(cX?,~(cX?))","eD(cX)","an<~>(an)","an<~>(eD)","an>(@)","~(th)","bO(u)","~(uA)","an
(cX?)","Qj()","~(n0)","bR(B)","pi(pQ)","H()","H(H)","T(d2)","H<@>(h)","H(BB)","an<+(h,jE?)>()","V(R)","~(cm)","V(R)","V(R)","eA<@>?(my)","eA<@>(my)","F(FE)","V(R)","DY(ah)","V(R)","uQ(ah)","an<~>(mY)","V(R)","A(aBt)","~(kD)","~(ic)","~(o9,Cn,EO?)","V(R)","V(R)","~(wO)","~(ox)","~(tr)","~(ik)","~(aDT)","~(nz)","B?(ld)","eN(eN,wI)","an<~>(vW)","~(eN)","F(eN?,eN)","eN(eN)","V(R)","yv(ah,mJ)","F(m5)","V(R)","F(Oc)","~(J9)","F(J2)","yC(R)","F(Cq)","bO(hG)","V(R)","H(ah)","A(hG)","k(qq,qq)","H(hG,z)","F(hG)","F(m4<@>)","lc(b7)","b7?(b7)","B?(k,b7?)","V(R)","le()","V(R)","~(pQ)","~(nd)","~(C7,Id)","V(R)","V(R)","V(R)","~(t7)","~(tj)","~(mC,B)","ta(ah,m?)","~(tY)","m(ah,dZ,Fh,ah,ah)","F(tY)","rK(ah,m?)","zD(ah)","uH(R)","V(R)","yW(@)","Cb(@)","y6(@)","an<@>(JF)","bA(H<@>)","bA(bA)","bR(bA)","F(B)","F(eA<@>?)","an
(@)","F(rT)","V(R)","V(R)","mP(eA<@>)","bK>(@,@)","Y?()","CY()","Y(k)","~(bb)","uH(ah,m?)","bR(fV?)","~(hw)","d9(F)","wg(ah,m?)","qE(ah)","B(B)","zB(cg)","G1(cg)","V(R)","V(R)","V(R)","m(ah,mJ)","F(q_)","bR(H<~>)","V(R)","~(h,B?)","F(tp?)","qu()","~(qu)","F(au)","qv()","~(qv)","k(il,il)","A(A)","F(A)","~(vA,k)","~(HH,c9)","H()","JT(ah,mJ)","~(Y)","b7?()","F(q7)","km?(q7)","lL(q7)","b7(m)","F(lL)","F(H)","z(lL)","Y(b7)","H(lL)","xn(ah)","V(R)","V(R)","V(R)","V(R)","q8()","~(q8)","q9()","~(q9)","od()","~(od)","~(wR)","~(wd)","D4(ah,t_)","V(R)","~(lV?)","yH(ah,bb)","Fa(ah,bb)","lv(ah,bb)","ql()","~(ql)","uO(ah)","m(Iy,h?,T?,T?)","Ae(ah,bGZ?)","~(h,bnY)","V(R)","ia(ia)","bR(cX)","an()","an<~>(h,cX?,~(cX?)?)","~(lX)","t9(lT)","tM(lT)","~(lT)","uU(k)","ys(R)","~(ki)","yt(R)","F(aOy)","F(bov)","F(GB)","F(boX)","F(boY)","F(bow)","an(a0U)","F(h,h)","~(H)","zn<@,@>(N7)","~(H<@>)","F(oY)","h(k,h)","V(R)","V(R)","0&(h[k?])","F(aN)","F(bp)","h(jX)","zW(R)","~(h,aN)","cQ(dw)","T(T,vY)","V(R)","F(F0)","H_(ah,m?)","hR(hR)","m(ah,kh
)","a0m(h)","n9(iK)","ho()","eD(h)","an
()","~(@,eh?)","bR(hR)","h(mj)","F5(ah,jz)","AE()","z()","FQ()","~(FU)","jz(ah)","F(a9N)","k(cq,cq)","~(h,l)","~(EG?,Ib?)","F(mj)","lh>(k)","H()","F(pc)","k(pc,pc)","bR(h[h?])","F(Cy)","Cl(k)","F(zX)","a({longMultiplier!T,shortMultiplier:T})","lx()","~(k,bA)","V(R)","G8(ah,hu)","F6(ah,hu)","V(R)","k(hd,hd)","k(k,hd)","hd(h)","hd(h,h,h)","hJ(h?,hJ)","DE(T)","an(h)","h(pE)","h(pV)","h(wA)","h(wB)","h(tL)","h(po)","h(vd)","F(om)","h(v1)","h(uV)","h(qY)","h(mu)","h(Ch)","h(Cj)","zs(k)","h(dB)","H>(dB)","h(fD)","fD(B?,fD)","om(dB)","cJ?(dB)","yg(cJ)","H(dB)","h?(dB)","V(R)","H(dB)","V(R)","h?(lG)","an(h?)","F(mG)","nw(cJ)","F(wP)","k?(h)","H(dB)","H(dB)","H(dB)","H>(dB)","H(dB)","~(k,fv)","V(R)","he(a)","V(R)","an()","ot(~)","Ps()","an(pr)","~(B,eh?)","an(cX)","T(de,de,de,de,T)","j_?(h)","H(h)","~(ef?)","jf(mp)","H()","H()","j_()","F(bK)","~(ef)","a0<0^>(h)","bK(it)","bK(it)","F(er)","h?(er)","V(R)","V(R)","V(R)","lF(hD)","ba()","ba()","ba()","ba>()","ba()","V(R)","ba()","ba()","ba()","ba()","ba()","ba()","fA(T)","V(R)","je(n)","wX(h)","hZ(h,h,H,h,h)","hD(h,h,+(h,fl))","+(h,fl)(h,h,h,+(h,fl))","Gu(R)","+(h,fl)(h)","jo(h,h,h,h)","oP(h,h,h)","nB(h,h,h)","mL(h,H,h,h)","Hg(R)","oQ(h,h,h,h)","mM(h,h,h,hO?,h,h?,h,h)","hO(h,h,+(h,fl))","hO(h,h,+(h,fl),h,+(h,fl))","h(h,h,h)","ba(wV)","~(eO)","l(k{params:B?})","I4(R)","~(CB?,br8?,CB,~())","k(h{onError:k(h)?,radix:k?})","k(dC<@>,dC<@>)","H()","H(h,H)","0^(0^,0^)","Q?(Q?,Q?,T)","T?(d2?,d2?,T)","n?(n?,n?,T)","KN({cacheId:h?,prefix:h})","qZ()","r5()","rn()","rp()","rM()","rN()","td()","te()","tk()","tm()","tP()","rg()","tz()","oK()","m(ah,rU)","V(R)","E4({comparator:k(y,y)?,strictMode:F?})","xa()","tE({style:I?,textDirection:qc})","je(T)","m(ah,i,i,m)","~(cI{forceReport:F})","oE?(h)","T(T,T,T)","jO({allowedButtonsFilter:F(k)?,debugOwner:B?,supportedDevices:bO?})","rw({allowedButtonsFilter:F(k)?,debugOwner:B?,supportedDevices:bO?})","le({allowedButtonsFilter:F(k)?,debugOwner:B?,supportedDevices:bO?})","rO({allowedButtonsFilter:F(k)?,debugOwner:B?,longTapDelay:bv,supportedDevices:bO?})","pY({allowedButtonsFilter:F(k)?,debugOwner:B?,dragStartBehavior:EB,supportedDevices:bO?,trackpadScrollCausesScale:F,trackpadScrollToScaleFactor:i})","jk({allowedButtonsFilter:F(k)?,debugOwner:B?,supportedDevices:bO?})","m(ah,dZ,dZ,m)","F?(F?,F?,T)","~(yT)","m(ah,m)","ht?(ht?,ht?,T)","f0?(f0?,f0?,T)","I?(I?,I?,T)","k(XK<@>,XK<@>)","F({priority!k,scheduler!iQ})","H(h)","iL({character:h?,deviceType:zS,logicalKey!u,physicalKey!K,synthesized:F,timeStamp!bv})","ol({deviceType:zS,logicalKey!u,physicalKey!K,synthesized:F,timeStamp!bv})","~(fd{alignment:T?,alignmentPolicy:Bx?,curve:ho?,duration:bv?})","k(b7,b7)","fr(fr?,fr?,T)","m?(ah,Ad,cD)","H>(oq,h)","k(m,k)","V(R)","n7(k)","an<@>(bJL)","BZ(h?)","Au(h?)","Cr(h?)","V(R)","DL(d7)","En(d7)","Eo(d7)","EZ(d7)","Fp(d7)","Fv(d7)","Hi(d7)","bks(aN,aN,k,0&(h[k?]))","Dr(aN,aN,k,0&(h[k?]))","Ez(aN,aN,k,0&(h[k?]))","bmy(aN,aN,k,0&(h[k?]))","Fe(aN,aN,k,0&(h[k?]))","Ff(aN,aN,k,0&(h[k?]))","FJ(aN,aN,k,0&(h[k?]))","FK(aN,aN,k,0&(h[k?]))","Gb(aN,aN,k,0&(h[k?]))","Gg(aN,aN,k,0&(h[k?]))","boj(aN,aN,k,0&(h[k?]))","Gq(aN,aN,k,0&(h[k?]))","bpX(aN,aN,k,0&(h[k?]))","IN(aN,aN,k,0&(h[k?]))","an(H{filePicker:lS?(H)?,imageProviderFactory:iI?(G0)?})","ja(h{tabRemaining:k?})","hJ(z)","~(ah,bu?)","~()(a5j,aq?)","rl(cJ)","t2(h)","fD(cJ)","fx(cJ)","Lr(cJ)","EH(cJ)","MV(cJ)","fQ(cJ)","SF(cJ)","Il(cJ)","dB(lG)","SE(cJ)","NA(cJ)","I6(cJ)","mG(cJ)","T1(cJ)","nw(cJ{tsx:wP?})","qj(cJ)","tO(cJ)","IE(cJ)","V(R)","V(R)","V(R)","aV(k)","~(h?{wrapWidth:k?})","n(iK)","r6(iK)","T(iK)","k(iK)","V(R)","oD(iK)","k(B?,B?)","0^(0^)","V(R)","V(R)","Fk(ah,m?)"],interceptorsByTag:null,leafTags:null,arrayRti:Symbol("$ti"),rttc:{"2;":(a,b)=>c=>c instanceof A.bI&&a.b(c.a)&&b.b(c.b),"2;cacheSize,maxTextLength":(a,b)=>c=>c instanceof A.JK&&a.b(c.a)&&b.b(c.b),"2;distance,fragment":(a,b)=>c=>c instanceof A.Wq&&a.b(c.a)&&b.b(c.b),"2;end,start":(a,b)=>c=>c instanceof A.JL&&a.b(c.a)&&b.b(c.b),"2;key,value":(a,b)=>c=>c instanceof A.anW&&a.b(c.a)&&b.b(c.b),"2;wordEnd,wordStart":(a,b)=>c=>c instanceof A.anX&&a.b(c.a)&&b.b(c.b),"3;":(a,b,c)=>d=>d instanceof A.xk&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"3;breaks,graphemes,words":(a,b,c)=>d=>d instanceof A.anY&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"3;completer,recorder,scene":(a,b,c)=>d=>d instanceof A.Wr&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"3;data,event,timeStamp":(a,b,c)=>d=>d instanceof A.Ws&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"3;large,medium,small":(a,b,c)=>d=>d instanceof A.anZ&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"3;queue,target,timer":(a,b,c)=>d=>d instanceof A.ao_&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"3;x,y,z":(a,b,c)=>d=>d instanceof A.Wt&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"4;":a=>b=>b instanceof A.ao0&&A.bcR(a,b.a),"4;domBlurListener,domFocusListener,element,semanticsNodeId":a=>b=>b instanceof A.Wu&&A.bcR(a,b.a),"5;":a=>b=>b instanceof A.ao1&&A.bcR(a,b.a),"8;":a=>b=>b instanceof A.ao2&&A.bcR(a,b.a)}} +A.bNZ(v.typeUniverse,JSON.parse('{"ln":"rE","a8O":"rE","qi":"rE","b1l":"rE","bZ3":"l","bZ4":"l","bWP":"l","bWA":"bh","bY3":"bh","bWU":"uw","bWB":"aR","bZL":"aR","c_R":"aR","bWx":"bB","bYx":"bB","bWV":"bD","bZr":"bD","bYJ":"c5","bXT":"c5","c0L":"jl","bX9":"p7","c0i":"p7","bZo":"e4","bYM":"zA","bXr":"e3","bXt":"o2","bXw":"jj","bXx":"kk","bXs":"kk","bXu":"kk","yh":{"eI":[]},"Lu":{"lU":[]},"Ao":{"IC":[]},"AE":{"IC":[]},"hU":{"Bh":[]},"Bi":{"Bh":[]},"jE":{"dF":[]},"hT":{"fT":[]},"pi":{"vB":[]},"r9":{"aEz":[]},"a0c":{"DI":[]},"a0D":{"o0":[]},"Lt":{"o0":[]},"DT":{"o0":[]},"a0L":{"o0":[]},"a0Q":{"o0":[]},"DS":{"o0":[]},"Pa":{"z":["op"],"z.E":"op"},"a55":{"c4":[]},"a0J":{"o0":[]},"Uf":{"o0":[]},"Ug":{"o0":[]},"a0B":{"lU":[]},"Ee":{"jJ":[]},"aaD":{"jJ":[]},"a_p":{"jJ":[],"awX":[]},"a0X":{"jJ":[],"ayY":[]},"a1_":{"jJ":[],"az1":[]},"a0Z":{"jJ":[],"az0":[]},"a7U":{"jJ":[],"aMa":[]},"Tf":{"jJ":[],"adP":[]},"a7R":{"jJ":[],"adP":[],"aM7":[]},"a58":{"jJ":[],"aHd":[]},"a8K":{"jJ":[]},"DU":{"je":[]},"Lx":{"rZ":[]},"a0P":{"z":["vY"],"z.E":"vY"},"a0E":{"vY":[]},"abA":{"yj":[],"jV":[]},"a0I":{"yj":[],"lm":[],"jV":[]},"a0G":{"yj":[],"lm":[],"jV":[]},"a0H":{"yj":[],"lm":[],"jV":[]},"a0F":{"yj":[],"lm":[],"jV":[]},"a0K":{"yj":[],"jV":[]},"Lv":{"vB":[]},"a0d":{"dF":[]},"a51":{"bn_":[]},"a50":{"c4":[]},"NM":{"c4":[]},"x3":{"z":["1"],"z.E":"1"},"UL":{"z":["1"],"z.E":"1"},"a3V":{"jE":[],"dF":[]},"Ng":{"jE":[],"dF":[]},"Ni":{"jE":[],"dF":[]},"PQ":{"hT":[],"fT":[],"awX":[]},"acD":{"DI":[]},"PS":{"hT":[],"fT":[],"az1":[]},"a8D":{"hT":[],"fT":[],"az0":[]},"PR":{"hT":[],"fT":[],"ayY":[]},"PT":{"hT":[],"fT":[],"aHd":[]},"PU":{"hT":[],"fT":[],"aM7":[]},"PV":{"hT":[],"fT":[],"aMa":[]},"HZ":{"je":[]},"wE":{"rZ":[]},"acF":{"z":["vY"],"z.E":"vY"},"acE":{"vY":[]},"a8G":{"fT":[]},"Mz":{"eK":[]},"PF":{"eK":[]},"a8h":{"eK":[]},"a8l":{"eK":[]},"a8j":{"eK":[]},"a8i":{"eK":[]},"a8k":{"eK":[]},"a82":{"eK":[]},"a81":{"eK":[]},"a80":{"eK":[]},"a84":{"eK":[]},"a87":{"eK":[]},"a89":{"eK":[]},"a8g":{"eK":[]},"a8c":{"eK":[]},"a8e":{"eK":[]},"a8d":{"eK":[]},"a85":{"eK":[]},"a88":{"eK":[]},"a83":{"eK":[]},"a8b":{"eK":[]},"a8f":{"eK":[]},"a86":{"eK":[]},"PE":{"eK":[]},"a8a":{"eK":[]},"PW":{"hT":[],"fT":[]},"z0":{"jV":[]},"EM":{"lm":[],"jV":[]},"a4y":{"lm":[],"jV":[]},"a4v":{"lm":[],"jV":[]},"Fc":{"lm":[],"jV":[]},"a4t":{"lm":[],"jV":[]},"TX":{"ph":[]},"VP":{"ph":[]},"a3e":{"ph":[]},"OW":{"ph":[]},"OQ":{"ph":[]},"a8F":{"fT":[]},"PX":{"hT":[],"fT":[],"adP":[]},"NK":{"lU":[]},"a4W":{"lU":[]},"RZ":{"Nn":[]},"NL":{"eI":[]},"a03":{"lU":[]},"Kx":{"Nn":[]},"Hj":{"tl":[]},"a3T":{"tl":[]},"Oj":{"tl":[]},"A9":{"tl":[]},"abj":{"bgC":[]},"ad0":{"tl":[]},"qw":{"O":["1"],"H":["1"],"at":["1"],"z":["1"]},"akl":{"qw":["k"],"O":["k"],"H":["k"],"at":["k"],"z":["k"]},"adW":{"qw":["k"],"O":["k"],"H":["k"],"at":["k"],"z":["k"],"O.E":"k","z.E":"k","qw.E":"k"},"GH":{"AK":[]},"a0o":{"HY":[]},"aaE":{"HY":[]},"MH":{"nd":[]},"aiJ":{"r9":[],"aEz":[]},"EL":{"r9":[],"aEz":[]},"l":{"aV":[]},"v":{"H":["1"],"l":[],"at":["1"],"aV":[],"z":["1"],"cw":["1"],"z.E":"1"},"O4":{"F":[],"eq":[]},"O5":{"bR":[],"eq":[]},"rE":{"l":[],"aV":[]},"aI8":{"v":["1"],"H":["1"],"l":[],"at":["1"],"aV":[],"z":["1"],"cw":["1"],"z.E":"1"},"vt":{"T":[],"d2":[],"dC":["d2"]},"FB":{"T":[],"k":[],"d2":[],"dC":["d2"],"eq":[]},"O6":{"T":[],"d2":[],"dC":["d2"],"eq":[]},"px":{"h":[],"dC":["h"],"cw":["@"],"eq":[]},"oS":{"z":["2"]},"ye":{"oS":["1","2"],"z":["2"],"z.E":"2"},"V_":{"ye":["1","2"],"oS":["1","2"],"at":["2"],"z":["2"],"z.E":"2"},"Ub":{"O":["2"],"H":["2"],"oS":["1","2"],"at":["2"],"z":["2"]},"hk":{"Ub":["1","2"],"O":["2"],"H":["2"],"oS":["1","2"],"at":["2"],"z":["2"],"O.E":"2","z.E":"2"},"qR":{"bO":["2"],"oS":["1","2"],"at":["2"],"z":["2"],"z.E":"2"},"qP":{"bE":["3","4"],"bA":["3","4"],"bE.V":"4","bE.K":"3"},"qQ":{"oS":["1","2"],"at":["2"],"z":["2"],"z.E":"2"},"m8":{"dF":[]},"l9":{"O":["k"],"H":["k"],"at":["k"],"z":["k"],"O.E":"k","z.E":"k"},"at":{"z":["1"]},"aI":{"at":["1"],"z":["1"]},"aT":{"aI":["1"],"at":["1"],"z":["1"],"z.E":"1","aI.E":"1"},"e7":{"z":["2"],"z.E":"2"},"yZ":{"e7":["1","2"],"at":["2"],"z":["2"],"z.E":"2"},"W":{"aI":["2"],"at":["2"],"z":["2"],"z.E":"2","aI.E":"2"},"bg":{"z":["1"],"z.E":"1"},"m0":{"z":["2"],"z.E":"2"},"C0":{"z":["1"],"z.E":"1"},"MF":{"C0":["1"],"at":["1"],"z":["1"],"z.E":"1"},"Sy":{"z":["1"],"z.E":"1"},"tw":{"z":["1"],"z.E":"1"},"EI":{"tw":["1"],"at":["1"],"z":["1"],"z.E":"1"},"BN":{"z":["1"],"z.E":"1"},"j6":{"at":["1"],"z":["1"],"z.E":"1"},"rj":{"z":["1"],"z.E":"1"},"ME":{"rj":["1"],"at":["1"],"z":["1"],"z.E":"1"},"ca":{"z":["1"],"z.E":"1"},"rx":{"z":["+(k,1)"],"z.E":"+(k,1)"},"yY":{"rx":["1"],"at":["+(k,1)"],"z":["+(k,1)"],"z.E":"+(k,1)"},"Iv":{"O":["1"],"H":["1"],"at":["1"],"z":["1"]},"cz":{"aI":["1"],"at":["1"],"z":["1"],"z.E":"1","aI.E":"1"},"fX":{"Su":[]},"yy":{"Cu":["1","2"],"bA":["1","2"]},"Eb":{"bA":["1","2"]},"bV":{"Eb":["1","2"],"bA":["1","2"]},"CS":{"z":["1"],"z.E":"1"},"cc":{"Eb":["1","2"],"bA":["1","2"]},"LU":{"mz":["1"],"bO":["1"],"at":["1"],"z":["1"]},"i4":{"mz":["1"],"bO":["1"],"at":["1"],"z":["1"],"z.E":"1"},"h8":{"mz":["1"],"bO":["1"],"at":["1"],"z":["1"],"z.E":"1"},"a5r":{"ro":[]},"vn":{"ro":[]},"Po":{"tH":[],"dF":[]},"a5J":{"dF":[]},"ae_":{"dF":[]},"a7I":{"c4":[]},"XA":{"eh":[]},"uI":{"ro":[]},"a11":{"ro":[]},"a12":{"ro":[]},"ad7":{"ro":[]},"acr":{"ro":[]},"DD":{"ro":[]},"ahu":{"dF":[]},"aaS":{"dF":[]},"jI":{"bE":["1","2"],"bA":["1","2"],"bE.V":"2","bE.K":"1"},"bk":{"at":["1"],"z":["1"],"z.E":"1"},"O7":{"jI":["1","2"],"bE":["1","2"],"bA":["1","2"],"bE.V":"2","bE.K":"1"},"zR":{"jI":["1","2"],"bE":["1","2"],"bA":["1","2"],"bE.V":"2","bE.K":"1"},"rC":{"a9N":[]},"Jt":{"a9O":[],"Af":[]},"af8":{"z":["a9O"],"z.E":"a9O"},"HU":{"Af":[]},"aqw":{"z":["Af"],"z.E":"Af"},"rQ":{"mi":[],"O":["k"],"eD":[],"H":["k"],"cG":["k"],"l":[],"at":["k"],"aV":[],"dL":[],"cw":["k"],"z":["k"],"eq":[],"O.E":"k","z.E":"k"},"Av":{"l":[],"aV":[],"DF":[],"eq":[]},"Pe":{"l":[],"aV":[],"dL":[]},"Pb":{"l":[],"cX":[],"aV":[],"dL":[],"eq":[]},"Gi":{"cG":["1"],"l":[],"aV":[],"dL":[],"cw":["1"]},"vL":{"O":["T"],"H":["T"],"cG":["T"],"l":[],"at":["T"],"aV":[],"dL":[],"cw":["T"],"z":["T"]},"mi":{"O":["k"],"H":["k"],"cG":["k"],"l":[],"at":["k"],"aV":[],"dL":[],"cw":["k"],"z":["k"]},"Aw":{"vL":[],"O":["T"],"v4":[],"H":["T"],"cG":["T"],"l":[],"at":["T"],"aV":[],"dL":[],"cw":["T"],"z":["T"],"eq":[],"O.E":"T","z.E":"T"},"a7o":{"vL":[],"O":["T"],"v5":[],"H":["T"],"cG":["T"],"l":[],"at":["T"],"aV":[],"dL":[],"cw":["T"],"z":["T"],"eq":[],"O.E":"T","z.E":"T"},"a7p":{"mi":[],"O":["k"],"aHS":[],"H":["k"],"cG":["k"],"l":[],"at":["k"],"aV":[],"dL":[],"cw":["k"],"z":["k"],"eq":[],"O.E":"k","z.E":"k"},"Pd":{"mi":[],"O":["k"],"vo":[],"H":["k"],"cG":["k"],"l":[],"at":["k"],"aV":[],"dL":[],"cw":["k"],"z":["k"],"eq":[],"O.E":"k","z.E":"k"},"a7q":{"mi":[],"O":["k"],"aHT":[],"H":["k"],"cG":["k"],"l":[],"at":["k"],"aV":[],"dL":[],"cw":["k"],"z":["k"],"eq":[],"O.E":"k","z.E":"k"},"Gj":{"mi":[],"O":["k"],"wQ":[],"H":["k"],"cG":["k"],"l":[],"at":["k"],"aV":[],"dL":[],"cw":["k"],"z":["k"],"eq":[],"O.E":"k","z.E":"k"},"Gk":{"mi":[],"O":["k"],"Ir":[],"H":["k"],"cG":["k"],"l":[],"at":["k"],"aV":[],"dL":[],"cw":["k"],"z":["k"],"eq":[],"O.E":"k","z.E":"k"},"Pf":{"mi":[],"O":["k"],"aWS":[],"H":["k"],"cG":["k"],"l":[],"at":["k"],"aV":[],"dL":[],"cw":["k"],"z":["k"],"eq":[],"O.E":"k","z.E":"k"},"Y0":{"jm":[]},"aiK":{"dF":[]},"Y1":{"tH":[],"dF":[]},"aM":{"an":["1"]},"i_":{"i_.T":"1"},"XZ":{"adC":[]},"TR":{"LQ":["1"]},"eW":{"z":["1"],"z.E":"1"},"a_d":{"dF":[]},"f8":{"lH":["1"],"JW":["1"],"cY":["1"],"cY.T":"1"},"CF":{"x2":["1"],"i_":["1"],"i_.T":"1"},"qt":{"x_":["1"]},"jp":{"x_":["1"]},"adB":{"c4":[]},"CJ":{"LQ":["1"]},"bH":{"CJ":["1"],"LQ":["1"]},"D2":{"CJ":["1"],"LQ":["1"]},"Sj":{"cY":["1"]},"wZ":{"afw":["1"],"JV":["1"]},"JZ":{"JV":["1"]},"lH":{"JW":["1"],"cY":["1"],"cY.T":"1"},"x2":{"i_":["1"],"i_.T":"1"},"JW":{"cY":["1"]},"CM":{"cY":["1"],"cY.T":"1"},"nE":{"cY":["2"]},"Jc":{"i_":["2"],"i_.T":"2"},"u8":{"nE":["1","1"],"cY":["1"],"cY.T":"1","nE.T":"1","nE.S":"1"},"tZ":{"nE":["1","2"],"cY":["2"],"cY.T":"2","nE.T":"2","nE.S":"1"},"at5":{"CB":[]},"aoR":{"CB":[]},"bfB":{"bO":["1"],"at":["1"],"z":["1"]},"tX":{"bE":["1","2"],"bA":["1","2"],"bE.V":"2","bE.K":"1"},"x8":{"tX":["1","2"],"bE":["1","2"],"bA":["1","2"],"bE.V":"2","bE.K":"1"},"UC":{"tX":["1","2"],"bE":["1","2"],"bA":["1","2"],"bE.V":"2","bE.K":"1"},"CO":{"at":["1"],"z":["1"],"z.E":"1"},"VJ":{"jI":["1","2"],"bE":["1","2"],"bA":["1","2"],"bE.V":"2","bE.K":"1"},"qo":{"JS":["1"],"mz":["1"],"bO":["1"],"at":["1"],"z":["1"],"z.E":"1"},"lJ":{"JS":["1"],"mz":["1"],"bfB":["1"],"bO":["1"],"at":["1"],"z":["1"],"z.E":"1"},"oL":{"O":["1"],"H":["1"],"at":["1"],"z":["1"],"O.E":"1","z.E":"1"},"A2":{"z":["1"],"z.E":"1"},"O":{"H":["1"],"at":["1"],"z":["1"]},"bE":{"bA":["1","2"]},"VL":{"at":["2"],"z":["2"],"z.E":"2"},"OF":{"bA":["1","2"]},"Cu":{"bA":["1","2"]},"UN":{"UO":["1"],"bmh":["1"]},"UP":{"UO":["1"]},"Mv":{"at":["1"],"z":["1"],"z.E":"1"},"Or":{"aI":["1"],"at":["1"],"z":["1"],"z.E":"1","aI.E":"1"},"mz":{"bO":["1"],"at":["1"],"z":["1"]},"JS":{"mz":["1"],"bO":["1"],"at":["1"],"z":["1"]},"Iw":{"mz":["1"],"bO":["1"],"at":["1"],"z":["1"],"z.E":"1"},"S9":{"bE":["1","2"],"bA":["1","2"],"bE.V":"2","bE.K":"1"},"u2":{"at":["1"],"z":["1"],"z.E":"1"},"D0":{"at":["2"],"z":["2"],"z.E":"2"},"Xt":{"at":["bK<1,2>"],"z":["bK<1,2>"],"z.E":"bK<1,2>"},"u3":{"qs":["1","2","1"],"qs.T":"1"},"Xx":{"qs":["1","k5<1,2>","2"],"qs.T":"2"},"D_":{"qs":["1","k5<1,2>","bK<1,2>"],"qs.T":"bK<1,2>"},"HR":{"mz":["1"],"bO":["1"],"at":["1"],"z":["1"],"z.E":"1"},"aku":{"bE":["h","@"],"bA":["h","@"],"bE.V":"@","bE.K":"h"},"akv":{"aI":["h"],"at":["h"],"z":["h"],"z.E":"h","aI.E":"h"},"VG":{"nr":[]},"a_6":{"z_":[]},"as7":{"cv":["h","H"]},"a_8":{"cv":["h","H"],"cv.S":"h","cv.T":"H"},"as8":{"nr":[]},"as6":{"cv":["H","h"]},"a_7":{"cv":["H","h"],"cv.S":"H","cv.T":"h"},"a_A":{"cv":["H","h"],"cv.S":"H","cv.T":"h"},"a_z":{"cv":["h","H"],"cv.S":"h","cv.T":"H"},"afL":{"nr":[]},"Vi":{"cv":["1","3"],"cv.S":"1","cv.T":"3"},"a4Y":{"cv":["h","h"],"cv.S":"h","cv.T":"h"},"ajV":{"nr":[]},"O8":{"dF":[]},"a5K":{"dF":[]},"a5N":{"cv":["B?","h"],"cv.S":"B?","cv.T":"h"},"a5M":{"cv":["h","B?"],"cv.S":"h","cv.T":"B?"},"a5W":{"z_":[]},"a5Y":{"cv":["h","H"],"cv.S":"h","cv.T":"H"},"a5X":{"cv":["H","h"],"cv.S":"H","cv.T":"h"},"JY":{"nr":[]},"xo":{"nr":[]},"ae6":{"z_":[]},"ae7":{"cv":["h","H"],"cv.S":"h","cv.T":"H"},"Yf":{"nr":[]},"Tp":{"cv":["H","h"],"cv.S":"H","cv.T":"h"},"lY":{"dC":["lY"]},"T":{"d2":[],"dC":["d2"]},"bv":{"dC":["bv"]},"k":{"d2":[],"dC":["d2"]},"H":{"at":["1"],"z":["1"]},"d2":{"dC":["d2"]},"a9O":{"Af":[]},"bO":{"at":["1"],"z":["1"]},"h":{"dC":["h"]},"xV":{"dF":[]},"tH":{"dF":[]},"n_":{"dF":[]},"GV":{"dF":[]},"NR":{"dF":[]},"a7z":{"dF":[]},"ae1":{"dF":[]},"Cs":{"dF":[]},"nq":{"dF":[]},"a1s":{"dF":[]},"a7X":{"dF":[]},"Sh":{"dF":[]},"V8":{"c4":[]},"j7":{"c4":[]},"Vk":{"aI":["1"],"at":["1"],"z":["1"],"z.E":"1","aI.E":"1"},"aqB":{"eh":[]},"Rb":{"z":["k"],"z.E":"k"},"Yc":{"Iy":[]},"nH":{"Iy":[]},"ahy":{"Iy":[]},"e3":{"l":[],"aV":[]},"e4":{"c5":[],"l":[],"aV":[]},"bh":{"l":[],"aV":[]},"ko":{"l":[],"aV":[]},"kp":{"l":[],"aV":[]},"kv":{"l":[],"aV":[]},"c5":{"l":[],"aV":[]},"kz":{"l":[],"aV":[]},"kG":{"l":[],"aV":[]},"kH":{"l":[],"aV":[]},"kI":{"l":[],"aV":[]},"jj":{"l":[],"aV":[]},"kR":{"l":[],"aV":[]},"jl":{"l":[],"aV":[]},"kS":{"l":[],"aV":[]},"bD":{"e4":[],"c5":[],"l":[],"aV":[]},"ZF":{"l":[],"aV":[]},"ZO":{"e4":[],"c5":[],"l":[],"aV":[]},"a_4":{"e4":[],"c5":[],"l":[],"aV":[]},"KX":{"l":[],"aV":[]},"p7":{"c5":[],"l":[],"aV":[]},"a1C":{"l":[],"aV":[]},"Eh":{"l":[],"aV":[]},"kk":{"l":[],"aV":[]},"o2":{"l":[],"aV":[]},"a1D":{"l":[],"aV":[]},"a1E":{"l":[],"aV":[]},"a1S":{"l":[],"aV":[]},"a2C":{"l":[],"aV":[]},"Ms":{"O":["hv"],"c_":["hv"],"H":["hv"],"cG":["hv"],"l":[],"at":["hv"],"aV":[],"z":["hv"],"cw":["hv"],"c_.E":"hv","O.E":"hv","z.E":"hv"},"Mt":{"l":[],"hv":["d2"],"aV":[]},"a2F":{"O":["h"],"c_":["h"],"H":["h"],"cG":["h"],"l":[],"at":["h"],"aV":[],"z":["h"],"cw":["h"],"c_.E":"h","O.E":"h","z.E":"h"},"a2H":{"l":[],"aV":[]},"agu":{"O":["e4"],"H":["e4"],"at":["e4"],"z":["e4"],"O.E":"e4","z.E":"e4"},"aR":{"l":[],"aV":[]},"a3w":{"O":["ko"],"c_":["ko"],"H":["ko"],"cG":["ko"],"l":[],"at":["ko"],"aV":[],"z":["ko"],"cw":["ko"],"c_.E":"ko","O.E":"ko","z.E":"ko"},"a3y":{"l":[],"aV":[]},"a3Z":{"e4":[],"c5":[],"l":[],"aV":[]},"a4R":{"l":[],"aV":[]},"zA":{"O":["c5"],"c_":["c5"],"H":["c5"],"cG":["c5"],"l":[],"at":["c5"],"aV":[],"z":["c5"],"cw":["c5"],"c_.E":"c5","O.E":"c5","z.E":"c5"},"a6n":{"l":[],"aV":[]},"a6O":{"l":[],"aV":[]},"a6U":{"l":[],"bE":["h","@"],"aV":[],"bA":["h","@"],"bE.V":"@","bE.K":"h"},"a6V":{"l":[],"bE":["h","@"],"aV":[],"bA":["h","@"],"bE.V":"@","bE.K":"h"},"a6W":{"O":["kv"],"c_":["kv"],"H":["kv"],"cG":["kv"],"l":[],"at":["kv"],"aV":[],"z":["kv"],"cw":["kv"],"c_.E":"kv","O.E":"kv","z.E":"kv"},"CG":{"O":["c5"],"H":["c5"],"at":["c5"],"z":["c5"],"O.E":"c5","z.E":"c5"},"Pm":{"O":["c5"],"c_":["c5"],"H":["c5"],"cG":["c5"],"l":[],"at":["c5"],"aV":[],"z":["c5"],"cw":["c5"],"c_.E":"c5","O.E":"c5","z.E":"c5"},"a8X":{"O":["kz"],"c_":["kz"],"H":["kz"],"cG":["kz"],"l":[],"at":["kz"],"aV":[],"z":["kz"],"cw":["kz"],"c_.E":"kz","O.E":"kz","z.E":"kz"},"aaQ":{"l":[],"bE":["h","@"],"aV":[],"bA":["h","@"],"bE.V":"@","bE.K":"h"},"Ho":{"e4":[],"c5":[],"l":[],"aV":[]},"ab8":{"e4":[],"c5":[],"l":[],"aV":[]},"ac_":{"O":["kG"],"c_":["kG"],"H":["kG"],"cG":["kG"],"l":[],"at":["kG"],"aV":[],"z":["kG"],"cw":["kG"],"c_.E":"kG","O.E":"kG","z.E":"kG"},"ac4":{"O":["kH"],"c_":["kH"],"H":["kH"],"cG":["kH"],"l":[],"at":["kH"],"aV":[],"z":["kH"],"cw":["kH"],"c_.E":"kH","O.E":"kH","z.E":"kH"},"acu":{"l":[],"bE":["h","h"],"aV":[],"bA":["h","h"],"bE.V":"h","bE.K":"h"},"adu":{"O":["jl"],"c_":["jl"],"H":["jl"],"cG":["jl"],"l":[],"at":["jl"],"aV":[],"z":["jl"],"cw":["jl"],"c_.E":"jl","O.E":"jl","z.E":"jl"},"adv":{"O":["kR"],"c_":["kR"],"H":["kR"],"cG":["kR"],"l":[],"at":["kR"],"aV":[],"z":["kR"],"cw":["kR"],"c_.E":"kR","O.E":"kR","z.E":"kR"},"adA":{"l":[],"aV":[]},"adI":{"O":["kS"],"c_":["kS"],"H":["kS"],"cG":["kS"],"l":[],"at":["kS"],"aV":[],"z":["kS"],"cw":["kS"],"c_.E":"kS","O.E":"kS","z.E":"kS"},"adJ":{"l":[],"aV":[]},"ae4":{"l":[],"aV":[]},"aeg":{"l":[],"aV":[]},"ahc":{"O":["e3"],"c_":["e3"],"H":["e3"],"cG":["e3"],"l":[],"at":["e3"],"aV":[],"z":["e3"],"cw":["e3"],"c_.E":"e3","O.E":"e3","z.E":"e3"},"UK":{"l":[],"hv":["d2"],"aV":[]},"ajF":{"O":["kp?"],"c_":["kp?"],"H":["kp?"],"cG":["kp?"],"l":[],"at":["kp?"],"aV":[],"z":["kp?"],"cw":["kp?"],"c_.E":"kp?","O.E":"kp?","z.E":"kp?"},"VY":{"O":["c5"],"c_":["c5"],"H":["c5"],"cG":["c5"],"l":[],"at":["c5"],"aV":[],"z":["c5"],"cw":["c5"],"c_.E":"c5","O.E":"c5","z.E":"c5"},"aq4":{"O":["kI"],"c_":["kI"],"H":["kI"],"cG":["kI"],"l":[],"at":["kI"],"aV":[],"z":["kI"],"cw":["kI"],"c_.E":"kI","O.E":"kI","z.E":"kI"},"aqE":{"O":["jj"],"c_":["jj"],"H":["jj"],"cG":["jj"],"l":[],"at":["jj"],"aV":[],"z":["jj"],"cw":["jj"],"c_.E":"jj","O.E":"jj","z.E":"jj"},"V6":{"cY":["1"],"cY.T":"1"},"V0":{"V6":["1"],"cY":["1"],"cY.T":"1"},"a3z":{"O":["e4"],"H":["e4"],"at":["e4"],"z":["e4"],"O.E":"e4","z.E":"e4"},"JJ":{"cY":["@"],"cY.T":"@"},"a7H":{"c4":[]},"hv":{"Wv":["1"]},"P9":{"hv":["1"],"Wv":["1"]},"ma":{"l":[],"aV":[]},"mk":{"l":[],"aV":[]},"mH":{"l":[],"aV":[]},"a67":{"O":["ma"],"c_":["ma"],"H":["ma"],"l":[],"at":["ma"],"aV":[],"z":["ma"],"c_.E":"ma","O.E":"ma","z.E":"ma"},"a7K":{"O":["mk"],"c_":["mk"],"H":["mk"],"l":[],"at":["mk"],"aV":[],"z":["mk"],"c_.E":"mk","O.E":"mk","z.E":"mk"},"a8Z":{"l":[],"aV":[]},"acz":{"O":["h"],"c_":["h"],"H":["h"],"l":[],"at":["h"],"aV":[],"z":["h"],"c_.E":"h","O.E":"h","z.E":"h"},"bB":{"e4":[],"c5":[],"l":[],"aV":[]},"adQ":{"O":["mH"],"c_":["mH"],"H":["mH"],"l":[],"at":["mH"],"aV":[],"z":["mH"],"c_.E":"mH","O.E":"mH","z.E":"mH"},"cX":{"dL":[]},"aHT":{"H":["k"],"at":["k"],"z":["k"],"dL":[]},"eD":{"H":["k"],"at":["k"],"z":["k"],"dL":[]},"aWS":{"H":["k"],"at":["k"],"z":["k"],"dL":[]},"aHS":{"H":["k"],"at":["k"],"z":["k"],"dL":[]},"wQ":{"H":["k"],"at":["k"],"z":["k"],"dL":[]},"vo":{"H":["k"],"at":["k"],"z":["k"],"dL":[]},"Ir":{"H":["k"],"at":["k"],"z":["k"],"dL":[]},"v4":{"H":["T"],"at":["T"],"z":["T"],"dL":[]},"v5":{"H":["T"],"at":["T"],"z":["T"],"dL":[]},"Y7":{"DF":[]},"asa":{"cX":[],"dL":[]},"K7":{"O":["k"],"eD":[],"H":["k"],"at":["k"],"z":["k"],"h0":["k","eD","eD"],"dL":[],"O.E":"k","z.E":"k","h0.2":"eD"},"asg":{"O":["k"],"wQ":[],"H":["k"],"at":["k"],"z":["k"],"h0":["k","wQ","wQ"],"dL":[],"O.E":"k","z.E":"k","h0.2":"wQ"},"asd":{"O":["k"],"vo":[],"H":["k"],"at":["k"],"z":["k"],"h0":["k","vo","vo"],"dL":[],"O.E":"k","z.E":"k","h0.2":"vo"},"K6":{"O.E":"k","z.E":"k","h0.2":"bYS"},"asb":{"O":["T"],"v4":[],"H":["T"],"at":["T"],"z":["T"],"h0":["T","v4","v4"],"dL":[],"O.E":"T","z.E":"T","h0.2":"v4"},"asc":{"O":["T"],"v5":[],"H":["T"],"at":["T"],"z":["T"],"h0":["T","v5","v5"],"dL":[],"O.E":"T","z.E":"T","h0.2":"v5"},"lm":{"jV":[]},"a_f":{"l":[],"aV":[]},"a_g":{"l":[],"bE":["h","@"],"aV":[],"bA":["h","@"],"bE.V":"@","bE.K":"h"},"a_j":{"l":[],"aV":[]},"uw":{"l":[],"aV":[]},"a7P":{"l":[],"aV":[]},"a_2":{"z":["lS"],"z.E":"lS"},"a_3":{"j7":[],"c4":[]},"a3k":{"aay":["0&"]},"Tq":{"aay":["1"]},"U9":{"bhi":["1"]},"a_h":{"c4":[]},"hz":{"a0m":[],"z":["h"],"z.E":"h"},"Ix":{"xp":["1","z<1>"],"xp.E":"1"},"HA":{"xp":["1","bO<1>"],"xp.E":"1"},"jR":{"O":["1"],"H":["1"],"at":["1"],"z":["1"],"O.E":"1","z.E":"1","jR.E":"1"},"Uc":{"jR":["2"],"O":["2"],"H":["2"],"at":["2"],"z":["2"],"O.E":"2","z.E":"2","jR.E":"2"},"UE":{"z":["1"]},"Et":{"H":["1"],"at":["1"],"z":["1"]},"a4L":{"cv":["H","yN"]},"apw":{"cv":["H","yN"],"cv.S":"H","cv.T":"yN"},"Wh":{"nl":["1"]},"Op":{"nl":["1"]},"ZI":{"aY":[],"m":[]},"kl":{"aY":[],"m":[]},"a2e":{"aY":[],"m":[]},"Md":{"aw":[],"m":[]},"ahO":{"aF":["Md"]},"ahP":{"aY":[],"m":[]},"Fu":{"aY":[],"m":[]},"akk":{"aY":[],"m":[]},"a6g":{"aY":[],"m":[]},"a9g":{"aY":[],"m":[]},"Qa":{"aw":[],"m":[]},"anv":{"aF":["Qa"]},"y4":{"aw":[],"m":[]},"a_V":{"aF":["y4"]},"yq":{"aw":[],"m":[]},"LO":{"aF":["yq"]},"FV":{"aw":[],"m":[]},"Oq":{"aF":["FV<1>"]},"AD":{"aw":[],"m":[]},"a7L":{"aF":["AD"]},"GP":{"aY":[],"m":[]},"B2":{"aY":[],"m":[]},"a2b":{"aY":[],"m":[]},"adp":{"aY":[],"m":[]},"M4":{"aw":[],"m":[]},"a1O":{"aF":["M4"]},"Ja":{"aY":[],"m":[]},"amH":{"aY":[],"m":[]},"Mc":{"aw":[],"m":[]},"UG":{"cb":[],"bN":[],"m":[]},"Me":{"aF":["Mc"]},"ab7":{"aY":[],"m":[]},"Mb":{"aY":[],"m":[]},"aby":{"aY":[],"m":[]},"Si":{"aw":[],"m":[]},"aqs":{"aF":["Si"]},"M5":{"aw":[],"m":[]},"ahw":{"aF":["M5"]},"ahv":{"aY":[],"m":[]},"aji":{"aq":[]},"ajj":{"aq":[]},"ajk":{"aq":[]},"ajq":{"aq":[]},"ajr":{"aq":[]},"ajs":{"aq":[]},"a4j":{"aq":[]},"a4k":{"aq":[]},"ajt":{"aq":[]},"aju":{"aq":[]},"ajv":{"aq":[]},"ajw":{"aq":[]},"ajx":{"aq":[]},"ajl":{"aq":[]},"ajm":{"aq":[]},"ajn":{"aq":[]},"ajo":{"aq":[]},"ajp":{"aq":[]},"a2c":{"aY":[],"m":[]},"apa":{"aq":[]},"CD":{"r3":[]},"lh":{"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["1"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"1","ag.T":"B"},"us":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"xU":{"ae":["a7"],"y":[],"aD":[],"P":[]},"xZ":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a_H":{"a7":[],"b_":[],"a2":["ae"],"y":[],"a8":[],"a2.T":"ae"},"qH":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a_J":{"a7":[],"b_":[],"a2":["qH"],"y":[],"a8":[],"a2.T":"qH"},"ux":{"ae":["a7"],"y":[],"aD":[],"P":[]},"xR":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"ZT":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"a0q":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"y2":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"a_O":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"a4A":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"a_N":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"a3u":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"yb":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"a0b":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"yw":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"ad5":{"mF":["iT"],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"ad3":{"iE":[],"a2":["bd"],"ag":["B"],"b_":[],"y":[],"b5":[],"a8":[],"ao":[],"j4":[],"a2.T":"bd","ag.T":"B"},"yz":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"a1v":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"yQ":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"Mu":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"a8P":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"a2I":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"yU":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"a2S":{"iE":[],"a2":["bd"],"ag":["B"],"ex":[],"y":[],"b5":[],"a8":[],"ao":[],"j4":[],"a2.T":"bd","ag.T":"B"},"qZ":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"acd":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"r5":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"a2A":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"rn":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"a46":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"rp":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"a4i":{"aB":[],"a7":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"a5F":{"y":[]},"rM":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"a7_":{"aB":[],"a7":[],"b_":[],"y":[],"a8":[]},"a5E":{"y":[]},"rN":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"a72":{"aB":[],"a7":[],"ex":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"td":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"a5D":{"y":[]},"te":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"a9q":{"y":[]},"tk":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"aaC":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"a0z":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"tm":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"aaG":{"aB":[],"a7":[],"ex":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"tP":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"aey":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"w9":{"bd":["aB"],"ae":["aB"],"jd":[],"y":[],"aD":[],"P":[]},"uA":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"a6e":{"y":[]},"Bl":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"aaB":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"a0y":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"a1z":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"BS":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"ace":{"aB":[],"a7":[],"b_":[],"a2":["bd"],"y":[],"a8":[],"a2.T":"bd"},"a8M":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"C1":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"ad2":{"iE":[],"a2":["bd"],"ag":["B"],"b_":[],"y":[],"b5":[],"a8":[],"ao":[],"j4":[],"a2.T":"bd","ag.T":"B"},"iE":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"j4":[],"a2.T":"bd","ag.T":"B"},"Tv":{"iE":[],"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"j4":[],"a2.T":"bd","ag.T":"B"},"ID":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"L8":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"a2T":{"a2":["bd"],"ag":["B"],"ex":[],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"bd","ag.T":"B"},"wU":{"bd":["aB"],"ae":["aB"],"y":[],"aD":[],"P":[]},"DB":{"aY":[],"m":[]},"uz":{"aw":[],"m":[]},"afV":{"aF":["uz"]},"BL":{"ae":["a7"],"y":[],"aD":[],"P":[]},"Lk":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"a08":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"Mh":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["ae"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"ae","ag.T":"B"},"Ex":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"b_":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"Mi":{"a2":["ae"],"y":[],"uS":[],"a2.T":"ae"},"a2n":{"qb":["iT"],"mF":["iT"],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"a6Q":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"vu":{"ae":["a7"],"y":[],"aD":[],"P":[]},"vv":{"ae":["a7"],"y":[],"aD":[],"P":[]},"Ac":{"ae":["a7"],"y":[],"aD":[],"P":[]},"v3":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"wt":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"uD":{"ae":["a7"],"pP":[],"y":[],"aD":[],"P":[]},"a_K":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"a_1":{"a7":[],"y":[],"a8":[]},"a2W":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"a_0":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"ya":{"ae":["a7"],"y":[],"aD":[],"P":[]},"aen":{"y":[]},"a_r":{"b_":[],"y":[]},"a3q":{"hL":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"yc":{"oh":["a7"],"ae":["a7"],"fB":[],"y":[],"aD":[],"P":[]},"a4B":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"a8U":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"m7":[],"y":[],"ao":[],"P":[],"a8":[]},"LW":{"ae":["a7"],"kC":[],"fB":[],"y":[],"aD":[],"P":[],"Ap":[]},"yC":{"aw":[],"m":[]},"agW":{"aF":["yC"]},"rg":{"ae":["a7"],"kC":[],"pX":[],"y":[],"aD":[],"P":[]},"a3E":{"a7":[],"a2":["ae"],"b_":[],"jB":[],"y":[],"a8":[],"a2.T":"ae"},"a_s":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"ad9":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"pl":{"oh":["a7"],"ae":["a7"],"ds":["fN"],"fB":[],"y":[],"aD":[],"P":[]},"a74":{"lh":["pl"],"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["pl"],"cP":[],"m7":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"pl","ag.T":"B"},"a6y":{"y":[]},"R5":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"dR":["ae"],"b_":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"dR.T":"ae","ag.T":"B"},"tC":{"ae":["a7"],"kC":[],"pX":[],"y":[],"aD":[],"P":[]},"aqm":{"a7":[],"a2":["tC"],"b_":[],"jB":[],"y":[],"a8":[],"a2.T":"tC"},"a7i":{"rW":["ae"],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"a2":["ae"],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"ae"},"CC":{"ae":["a7"],"kC":[],"pX":[],"y":[],"aD":[],"P":[]},"y7":{"ae":["a7"],"ds":["fN"],"y":[],"aD":[],"P":[]},"a_w":{"hL":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["ae"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"ae","ag.T":"B"},"qT":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a7n":{"a7":[],"b_":[],"ds":["fN"],"y":[],"a8":[]},"a7e":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"a2":["qT"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"qT"},"yn":{"ae":["a7"],"ds":["fN"],"y":[],"aD":[],"P":[]},"ZV":{"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"cP":[],"dR":["ae"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"dR.T":"ae","ag.T":"B"},"P8":{"ae":["a7"],"ds":["fN"],"y":[],"aD":[],"P":[]},"a7b":{"a7":[],"a2":["ae"],"y":[],"a8":[],"a2.T":"ae"},"a7f":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ex":[],"cP":[],"y":[],"ao":[],"P":[],"a8":[]},"a17":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ex":[],"cP":[],"y":[],"ao":[],"P":[],"a8":[]},"a18":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ex":[],"cP":[],"y":[],"ao":[],"P":[],"a8":[]},"a15":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ex":[],"cP":[],"y":[],"ao":[],"P":[],"a8":[]},"abX":{"hL":[],"c6":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"pp":["c6"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"a19":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ex":[],"cP":[],"y":[],"ao":[],"P":[],"a8":[]},"Aq":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a1a":{"a7":[],"ds":["fN"],"y":[],"a8":[]},"a16":{"lh":["ae"],"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["ae"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"ae","ag.T":"B"},"tg":{"ae":["a7"],"ds":["B4"],"fB":[],"kC":[],"y":[],"aD":[],"P":[]},"PY":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"cP":[],"a2":["tg"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"tg","ag.T":"B"},"a05":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"cP":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"La":{"fv":[],"zo":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"Tu":{"fv":[],"zo":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"a60":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"a9t":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"B6":{"ae":["a7"],"ds":["fN"],"y":[],"aD":[],"P":[]},"wa":{"ae":["a7"],"ds":["fN"],"da":[],"jd":[],"y":[],"aD":[],"P":[]},"B7":{"ae":["a7"],"ds":["fN"],"y":[],"aD":[],"P":[]},"ago":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"ti":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a9I":{"a7":[],"a2":["ti"],"ds":["fN"],"b_":[],"y":[],"a8":[],"a2.T":"ti"},"wb":{"ae":["a7"],"ds":["fN"],"da":[],"jd":[],"y":[],"aD":[],"P":[]},"yk":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"ao3":{"lx":[],"jg":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"ys":{"aw":[],"m":[]},"F5":{"aY":[],"m":[]},"uY":{"hL":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"b_":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"E3":{"ae":["a7"],"y":[],"aD":[],"P":[]},"agM":{"aF":["ys"]},"yt":{"aw":[],"m":[]},"pg":{"hL":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"b_":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"yr":{"ae":["a7"],"y":[],"aD":[],"P":[]},"agN":{"aF":["yt"]},"a4b":{"aY":[],"m":[]},"yu":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a8u":{"lx":[],"jg":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"dR":["ae"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"dR.T":"ae","ag.T":"B"},"r1":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a6p":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["r1"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"r1","ag.T":"B"},"zw":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a6o":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"zW":{"aw":[],"m":[]},"Oi":{"ae":["a7"],"y":[],"aD":[],"P":[]},"RA":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"akG":{"aF":["zW"]},"Aa":{"ae":["a7"],"y":[],"aD":[],"P":[]},"ar_":{"a7":[],"b_":[],"y":[],"a8":[]},"Ab":{"ae":["a7"],"y":[],"aD":[],"P":[]},"aqZ":{"a7":[],"b_":[],"y":[],"a8":[]},"tc":{"ae":["a7"],"y":[],"aD":[],"P":[]},"acl":{"lx":[],"jg":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["tc"],"b_":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"tc","ag.T":"B"},"tz":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"ac3":{"a7":[],"b_":[],"y":[],"a8":[]},"oK":{"ae":["a7"],"ds":["fN"],"y":[],"aD":[],"P":[]},"CH":{"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["oK"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"oK","ag.T":"B"},"yo":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"uW":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"yX":{"ae":["a7"],"y":[],"aD":[],"P":[]},"aiu":{"a7":[],"y":[],"a8":[]},"Am":{"ae":["a7"],"y":[],"aD":[],"P":[]},"alD":{"a7":[],"y":[],"a8":[]},"vO":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"Bb":{"ae":["a7"],"y":[],"aD":[],"P":[]},"ao6":{"a7":[],"y":[],"a8":[]},"anE":{"hL":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"b_":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"Bo":{"ae":["a7"],"y":[],"aD":[],"P":[]},"aoU":{"a7":[],"y":[],"a8":[]},"a1h":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"a1i":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"a1j":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"wm":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"aco":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"BE":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a8T":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"wu":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"BJ":{"ae":["a7"],"y":[],"aD":[],"P":[]},"abu":{"y":[]},"a2J":{"y":[]},"zH":{"ae":["a7"],"y":[],"aD":[],"P":[]},"xL":{"ae":["a7"],"y":[],"aD":[],"P":[]},"adE":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ms":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"a2_":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ms":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"a2r":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ms":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"aaL":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"yS":{"ae":["a7"],"jB":[],"y":[],"aD":[],"P":[]},"yT":{"lh":["ae"],"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["ae"],"jB":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"ae","ag.T":"B"},"yV":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a2V":{"lh":["ae"],"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["ae"],"ex":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"ae","ag.T":"B"},"zp":{"ae":["a7"],"y":[],"aD":[],"P":[]},"ajH":{"a7":[],"b_":[],"y":[],"a8":[]},"a7k":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"b_":[],"ms":[],"y":[],"ao":[],"P":[],"a8":[]},"rq":{"ae":["a7"],"y":[],"aD":[],"P":[]},"Oe":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"a7g":{"a2":["rq"],"y":[],"a2.T":"rq"},"zz":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a4U":{"a7":[],"b_":[],"y":[],"a8":[]},"a4V":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ms":[],"y":[],"ao":[],"P":[],"a8":[]},"zP":{"ae":["a7"],"ds":["fN"],"y":[],"aD":[],"P":[]},"zQ":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a5H":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"dR":["ae"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"dR.T":"ae","ag.T":"B"},"zT":{"ae":["a7"],"fB":[],"y":[],"aD":[],"P":[]},"zU":{"oh":["a7"],"ae":["a7"],"fB":[],"y":[],"aD":[],"P":[]},"vH":{"ae":["a7"],"jd":[],"y":[],"aD":[],"P":[]},"vI":{"ae":["a7"],"jd":[],"y":[],"aD":[],"P":[]},"Ar":{"ae":["a7"],"y":[],"aD":[],"P":[],"Ap":[]},"As":{"ae":["a7"],"y":[],"aD":[],"P":[],"Ap":[]},"AI":{"ae":["a7"],"y":[],"aD":[],"P":[]},"acW":{"lx":[],"jg":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"b_":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"Bv":{"ae":["a7"],"kC":[],"y":[],"aD":[],"P":[]},"C2":{"ae":["a7"],"y":[],"aD":[],"P":[]},"ad4":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"xN":{"ae":["a7"],"y":[],"aD":[],"P":[]},"xM":{"ae":["a7"],"y":[],"aD":[],"P":[]},"xT":{"ae":["a7"],"y":[],"aD":[],"P":[]},"y_":{"ae":["a7"],"y":[],"aD":[],"P":[]},"p9":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a7h":{"rW":["p9"],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"a2":["p9"],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"p9"},"AA":{"aD":[]},"Bq":{"ae":["a7"],"y":[],"aD":[],"P":[]},"BP":{"ae":["a7"],"y":[],"aD":[],"P":[]},"zc":{"ae":["a7"],"y":[],"aD":[],"P":[]},"vr":{"ae":["a7"],"jd":[],"y":[],"aD":[],"P":[]},"abd":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"zY":{"ae":["a7"],"y":[],"aD":[],"P":[]},"vN":{"ae":["a7"],"da":[],"pf":[],"y":[],"aD":[],"P":[]},"AM":{"ae":["a7"],"y":[],"aD":[],"P":[]},"RU":{"ho":[]},"adM":{"y":[]},"AN":{"ae":["a7"],"pP":[],"y":[],"aD":[],"P":[]},"Bm":{"ae":["a7"],"y":[],"aD":[],"P":[]},"C6":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a7m":{"qb":["iT"],"mF":["iT"],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"a7j":{"Ru":["iT"],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"xY":{"ae":["a7"],"y":[],"aD":[],"P":[]},"y0":{"ae":["a7"],"y":[],"aD":[],"P":[]},"BR":{"ae":["a7"],"y":[],"aD":[],"P":[]},"tA":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a7l":{"a2":["tA"],"y":[],"a2.T":"tA"},"tB":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a07":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["tB"],"b_":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"tB","ag.T":"B"},"BU":{"ae":["a7"],"y":[],"aD":[],"P":[]},"jK":{"ae":["a7"],"y":[],"aD":[],"P":[]},"rF":{"a7":[],"a2":["jK"],"b_":[],"y":[],"a8":[]},"A_":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"aas":{"rF":[],"a7":[],"a2":["jK"],"b_":[],"y":[],"a8":[],"a2.T":"jK"},"a68":{"rF":[],"a7":[],"a2":["jK"],"b_":[],"y":[],"a8":[],"a2.T":"jK"},"a69":{"rF":[],"a7":[],"a2":["jK"],"b_":[],"y":[],"a8":[],"a2.T":"jK"},"a6a":{"rF":[],"a7":[],"a2":["jK"],"b_":[],"y":[],"a8":[],"a2.T":"jK"},"a06":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"NF":["A_"],"y":[],"ao":[],"P":[],"a8":[]},"mD":{"ae":["a7"],"y":[],"aD":[],"P":[]},"a8S":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["mD"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"mD","ag.T":"B"},"a_q":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["mD"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"mD","ag.T":"B"},"a_y":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["mD"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"mD","ag.T":"B"},"aqG":{"a7":[],"b_":[],"jB":[],"y":[],"a8":[]},"rU":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"w_":{"ae":["a7"],"da":[],"pf":[],"y":[],"aD":[],"P":[]},"BW":{"oh":["a7"],"ae":["a7"],"ds":["fN"],"fB":[],"y":[],"aD":[],"P":[]},"ahN":{"hL":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"AB":{"fB":[],"aD":[]},"za":{"ae":["a7"],"y":[],"aD":[],"P":[]},"wL":{"ae":["a7"],"da":[],"pf":[],"y":[],"aD":[],"P":[]},"aan":{"y":[]},"Ck":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"uP":{"ae":["a7"],"da":[],"y":[],"aD":[],"P":[]},"a8W":{"aq":[]},"a8R":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"a2":["uP"],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"uP"},"kr":{"dC":["B"]},"iJ":{"dC":["B"]},"XF":{"IT":["h"]},"L7":{"y":[]},"Nd":{"y":[]},"y9":{"y":[]},"ael":{"aG":[],"ax":[],"aH":[],"y":[],"ao":[],"a8":[]},"lD":{"ax":[],"aE":[],"y":[],"P":[],"a8":[]},"a0A":{"lD":[],"ax":[],"aE":[],"y":[],"P":[],"a8":[]},"N_":{"lD":[],"ax":[],"aE":[],"y":[],"P":[],"a8":[]},"a3D":{"lD":[],"ax":[],"aE":[],"y":[],"P":[],"a8":[]},"a3G":{"lD":[],"ax":[],"aE":[],"y":[],"P":[],"a8":[]},"a6N":{"lD":[],"ax":[],"aE":[],"y":[],"P":[],"a8":[]},"a7":{"y":[],"a8":[]},"B4":{"fN":["c6"]},"a9s":{"BV":["B4"],"qV":["c6","B4"],"qV.T":"c6"},"Sr":{"fN":["1"]},"uK":{"bu":[],"aq":[]},"LL":{"bu":[],"aq":[]},"ds":{"y":[]},"Ls":{"hL":[],"c6":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"pp":["c6"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"a97":{"t8":["c6"],"jg":[],"c6":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"pp":["c6"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B","t8.T":"c6"},"B9":{"lx":[],"t8":["B9"],"jg":[],"c6":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"pp":["c6"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B","t8.T":"B9"},"to":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"cP":[],"a2":["1"],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"1"},"c6":{"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"pp":["c6"],"y":[],"ao":[],"P":[],"a8":[],"b5":[]},"BV":{"qV":["c6","1"],"qV.T":"c6"},"uG":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"jz":{"bu":[],"aq":[]},"E4":{"jQ":["y"],"kx":["y"],"z":["y"],"z.E":"y","kx.E":"y","jQ.T":"y"},"a1m":{"y":[]},"Qq":{"z":["1"],"z.E":"1"},"a1Q":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"a4_":{"y":[]},"Nm":{"mF":["iT"],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"Dq":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ms":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"Le":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"a52":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"b_":[],"a2":["ae"],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"ae"},"NN":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"a5G":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"a2":["ae"],"ex":[],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"ae"},"a5U":{"m7":[],"y":[]},"Sd":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"b_":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"adF":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ms":[],"b_":[],"y":[],"ao":[],"P":[],"a8":[]},"a5A":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"ag":{"y":[],"b5":[]},"m7":{"y":[]},"a7x":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"rW":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"a2":["1"],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"1"},"a8x":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"au":{"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"Ru":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"X8":{"qb":["iT"],"mF":["iT"],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ex":[],"y":[],"ao":[],"P":[],"a8":[]},"ac2":{"y":[]},"hx":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"jW":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B","jW.T":"1"},"Sc":{"y":[]},"fv":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"BT":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[]},"qb":{"mF":["iT"],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"mF":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"ade":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"Im":{"y":[]},"a1b":{"p8":["ag"],"f1":[],"y":[],"p8.T":"ag"},"p8":{"f1":[],"y":[]},"M2":{"fA":[]},"a27":{"fA":[]},"a31":{"fA":[]},"m6":{"fA":[]},"pB":{"fA":[]},"PO":{"fA":[]},"a9y":{"fA":[]},"aao":{"fA":[]},"R2":{"fA":[]},"He":{"fA":[]},"RJ":{"fA":[]},"HJ":{"fA":[]},"wy":{"fA":[]},"IP":{"fA":[]},"f1":{"y":[]},"a75":{"ej":["ax"],"f1":[],"y":[],"Aj":[],"ej.T":"ax"},"a76":{"ej":["ax"],"f1":[],"y":[],"Aj":[],"ej.T":"ax"},"OZ":{"ej":["ax"],"f1":[],"y":[],"Aj":[]},"a77":{"ej":["ax"],"f1":[],"y":[],"Aj":[],"ej.T":"ax"},"a7T":{"ej":["b5"],"f1":[],"y":[],"ej.T":"b5"},"amn":{"ej":["b5"],"f1":[],"y":[],"ej.T":"b5"},"a9Q":{"p8":["y"],"f1":[],"y":[],"p8.T":"y"},"R9":{"ej":["aG"],"f1":[],"y":[],"Aj":[],"ej.T":"aG"},"aoW":{"ej":["aG"],"f1":[],"y":[],"Aj":[],"ej.T":"aG"},"Rg":{"ej":["aH"],"f1":[],"y":[],"ej.T":"aH"},"ap7":{"ej":["aH"],"f1":[],"y":[],"ej.T":"aH"},"abk":{"f1":[],"y":[]},"apv":{"fA":[]},"S_":{"ej":["aE"],"f1":[],"y":[],"ej.T":"aE"},"apS":{"ej":["aE"],"f1":[],"y":[],"ej.T":"aE"},"jB":{"y":[]},"ex":{"y":[]},"b_":{"y":[]},"My":{"i3":[]},"a2K":{"a2":["ae"],"y":[],"a2.T":"ae"},"P0":{"i3":[]},"a78":{"y":[]},"P6":{"i3":[]},"P5":{"y":[],"Ap":[]},"Q1":{"y":[]},"OY":{"i3":[]},"NE":{"y":[]},"a2u":{"on":["+end,start(a,a)"]},"a2M":{"on":["a"]},"a2P":{"on":["a"]},"a2Q":{"on":["+end,start(a,a)"]},"a91":{"on":["a"]},"a9b":{"on":["a"]},"acX":{"on":["a"]},"ad_":{"on":["a"]},"qS":{"q1":[]},"a94":{"q1":[]},"H1":{"q1":[]},"aaM":{"q1":[]},"ae":{"y":[],"aD":[],"P":[]},"aa2":{"b6":[],"m":[]},"Np":{"Y":[],"L":[],"aW":[],"fY":[]},"V":{"aw":[],"m":[]},"F7":{"aF":["V<1>"]},"aJ":{"a":[],"bu":[],"aq":[]},"wN":{"bu":[],"aq":[]},"hL":{"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"jg":{"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[]},"lx":{"jg":[],"eL":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"eL":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[]},"a98":{"hr":["jg","jg"],"hr.0":"jg","hr.1":"jg"},"a0v":{"hr":["hL","jg"],"hr.0":"hL","hr.1":"jg"},"a0s":{"hr":["hL","hL"],"hr.0":"hL","hr.1":"hL"},"abn":{"zZ":[]},"ZM":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"dy":{"rX":[]},"PI":{"rX":[]},"Dp":{"ff":[]},"a0u":{"ff":[]},"a1l":{"ff":[]},"a1n":{"ff":[]},"a1r":{"ff":[]},"a1N":{"ff":[]},"a5b":{"ff":[]},"Gd":{"ff":[]},"Gx":{"ff":[]},"aaH":{"ff":[]},"aaZ":{"ff":[]},"ac9":{"ff":[]},"aci":{"ff":[]},"Io":{"ff":[]},"a_P":{"jY":[]},"Fg":{"jY":[]},"a4C":{"vl":[],"jY":[]},"vl":{"jY":[]},"Qn":{"jY":[]},"Qf":{"jY":[]},"ach":{"vl":[],"jY":[]},"If":{"vl":[],"jY":[]},"a_S":{"vm":[]},"NC":{"vm":[]},"a4M":{"y3":[]},"a5B":{"vm":[]},"AJ":{"y3":[]},"ou":{"vm":[]},"SH":{"y3":[]},"acg":{"iT":[]},"tE":{"iT":[]},"a_t":{"pj":[]},"qK":{"pj":[]},"a2B":{"pj":[]},"NZ":{"pj":[]},"zL":{"aw":[],"m":[]},"aca":{"aY":[],"m":[]},"VD":{"aF":["zL"]},"nX":{"aY":[],"m":[]},"E7":{"aw":[],"m":[]},"IV":{"aF":["E7<1>"]},"Fy":{"aY":[],"m":[]},"amx":{"aq":[]},"a7y":{"aY":[],"m":[]},"zM":{"aw":[],"m":[]},"acf":{"aY":[],"m":[]},"agg":{"aF":["zM"]},"agf":{"aq":[]},"Se":{"aq":[]},"Fz":{"aY":[],"m":[]},"ack":{"aY":[],"m":[]},"a_L":{"fY":[]},"DA":{"a2":["1"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[]},"bd":{"ae":["1"],"y":[],"aD":[],"P":[]},"aB":{"a7":[],"y":[],"a8":[]},"a6r":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"ag.T":"B"},"a7B":{"fA":[]},"HQ":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"y":[],"ao":[],"P":[],"a8":[]},"acJ":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"y":[],"ao":[],"P":[],"a8":[],"b5":[]},"zb":{"wP":[]},"vK":{"A":[]},"rP":{"ax":[],"GT":[]},"NB":{"iP":["zv"]},"N3":{"iP":["Fl"]},"Pp":{"iP":["Gn"]},"ae2":{"iP":["fQ"]},"a4P":{"iP":["qf"]},"a5z":{"iP":["qf"]},"a7W":{"iP":["qf"]},"acn":{"iP":["qf"]},"a3K":{"iP":["qf"]},"T3":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"a2":["1"],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"1"},"dZ":{"aq":[]},"Dt":{"dZ":["T"],"aq":[]},"af9":{"dZ":["T"],"aq":[]},"afa":{"dZ":["T"],"aq":[]},"B3":{"dZ":["T"],"aq":[]},"oy":{"dZ":["T"],"aq":[]},"M1":{"dZ":["T"],"aq":[]},"Co":{"dZ":["T"],"aq":[]},"E9":{"dZ":["1"],"aq":[]},"KH":{"dZ":["1"],"aq":[]},"VI":{"ho":[]},"ib":{"ho":[]},"SZ":{"ho":[]},"hn":{"ho":[]},"SY":{"ho":[]},"rh":{"ho":[]},"ahA":{"ho":[]},"ag3":{"ho":[]},"ag2":{"ho":[]},"br":{"bi":["1"],"br.T":"1","bi.T":"1"},"fp":{"br":["n?"],"bi":["n?"],"br.T":"n?","bi.T":"n?"},"bz":{"dZ":["1"],"aq":[]},"h_":{"bi":["1"],"bi.T":"1"},"R3":{"br":["1"],"bi":["1"],"br.T":"1","bi.T":"1"},"abG":{"br":["Q?"],"bi":["Q?"],"br.T":"Q?","bi.T":"Q?"},"Qo":{"br":["A?"],"bi":["A?"],"br.T":"A?","bi.T":"A?"},"vp":{"br":["k"],"bi":["k"],"br.T":"k","bi.T":"k"},"acs":{"br":["k"],"bi":["k"],"br.T":"k","bi.T":"k"},"n2":{"bi":["T"],"bi.T":"T"},"Th":{"bi":["1"],"bi.T":"1"},"LX":{"aw":[],"m":[]},"Ut":{"aF":["LX"]},"LY":{"aw":[],"m":[]},"Uu":{"aF":["LY"]},"agq":{"bu":[],"aq":[]},"ev":{"n":[]},"ahf":{"oJ":[]},"a1F":{"aY":[],"m":[]},"yF":{"aw":[],"m":[]},"Uv":{"aF":["yF"]},"a1G":{"fr":[]},"bDi":{"cb":[],"bN":[],"m":[]},"ahj":{"ls":["LZ"],"ls.T":"LZ"},"a20":{"LZ":[]},"M_":{"aw":[],"m":[]},"Ux":{"aF":["M_"]},"a1H":{"aY":[],"m":[]},"J_":{"aw":[],"m":[]},"a1I":{"aY":[],"m":[]},"J0":{"aF":["J_<1>"]},"oT":{"km":[]},"ahh":{"uB":[]},"Ei":{"aw":[],"m":[]},"Uw":{"pS":["Ei"],"aF":["Ei"]},"ahl":{"aq":[]},"a1K":{"oJ":[]},"Uz":{"aw":[],"m":[]},"a1L":{"aY":[],"m":[]},"ahn":{"c2":[],"b6":[],"m":[]},"ao9":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"UA":{"aF":["Uz"]},"akO":{"aq":[]},"aoM":{"aq":[]},"ahe":{"aq":[]},"UB":{"b6":[],"m":[]},"ahm":{"bX":[],"b7":[],"ah":[]},"CX":{"f5":["Y","jZ"],"Y":[],"aZ":["Y","jZ"],"L":[],"aW":[],"aZ.1":"jZ","f5.1":"jZ","aZ.0":"Y"},"am6":{"b7":[],"ah":[]},"am7":{"m":[]},"uN":{"aw":[],"m":[]},"Uy":{"aF":["uN"]},"al0":{"aq":[]},"Vt":{"ft":[],"cb":[],"bN":[],"m":[]},"M0":{"aY":[],"m":[]},"adG":{"bu":[],"aq":[]},"x4":{"lc":["H"],"iG":[]},"EN":{"x4":[],"lc":["H"],"iG":[]},"a3l":{"x4":[],"lc":["H"],"iG":[]},"a3i":{"x4":[],"lc":["H"],"iG":[]},"zd":{"xV":[],"dF":[]},"aj5":{"yM":["cI"],"iG":[]},"bu":{"aq":[]},"cD":{"bu":[],"aq":[]},"CT":{"aq":[]},"lc":{"iG":[]},"yM":{"iG":[]},"a2h":{"yM":["a2g"],"iG":[]},"a2i":{"iG":[]},"rG":{"ha":[]},"dp":{"rG":[],"ha":[],"dp.T":"1"},"qh":{"rG":[],"ha":[]},"Om":{"ne":[]},"bW":{"z":["1"],"z.E":"1"},"rs":{"z":["1"],"z.E":"1"},"d9":{"an":["1"]},"F9":{"aW":[]},"N8":{"cI":[]},"hF":{"cg":[]},"t6":{"cg":[]},"w2":{"cg":[]},"w3":{"cg":[]},"t5":{"cg":[]},"jP":{"cg":[]},"AX":{"jP":[],"cg":[]},"t7":{"cg":[]},"af4":{"cg":[]},"arP":{"cg":[]},"AR":{"cg":[]},"arL":{"AR":[],"cg":[]},"AW":{"cg":[]},"arW":{"AW":[],"cg":[]},"arR":{"t6":[],"cg":[]},"arO":{"w2":[],"cg":[]},"arQ":{"w3":[],"cg":[]},"arN":{"t5":[],"cg":[]},"AT":{"cg":[]},"arS":{"AT":[],"cg":[]},"AZ":{"cg":[]},"as_":{"AZ":[],"cg":[]},"arY":{"AX":[],"jP":[],"cg":[]},"AY":{"jP":[],"cg":[]},"arZ":{"AY":[],"jP":[],"cg":[]},"a92":{"jP":[],"cg":[]},"arX":{"jP":[],"cg":[]},"arU":{"t7":[],"cg":[]},"AV":{"cg":[]},"arV":{"AV":[],"cg":[]},"AU":{"cg":[]},"arT":{"AU":[],"cg":[]},"AS":{"cg":[]},"arM":{"AS":[],"cg":[]},"od":{"ed":[],"ey":[]},"VQ":{"K5":[]},"Jz":{"K5":[]},"lt":{"ed":[],"ey":[]},"oO":{"ed":[],"ey":[]},"oi":{"ed":[],"ey":[]},"jO":{"ed":[],"ey":[]},"EA":{"ed":[],"ey":[]},"rw":{"ed":[],"ey":[]},"P1":{"ed":[],"ey":[]},"aka":{"P2":[]},"le":{"ed":[],"ey":[]},"K0":{"u4":[]},"rO":{"ed":[],"ey":[]},"ed":{"ey":[]},"Pt":{"ed":[],"ey":[]},"GL":{"ed":[],"ey":[]},"pY":{"ed":[],"ey":[]},"jk":{"ed":[],"ey":[]},"a_G":{"ed":[],"ey":[]},"q8":{"ed":[],"ey":[]},"q9":{"ed":[],"ey":[]},"KW":{"ed":[],"ey":[]},"CI":{"ey":[]},"agK":{"F8":[]},"zB":{"k0":[]},"G1":{"k0":[]},"ZK":{"aY":[],"m":[]},"OL":{"aw":[],"m":[]},"VM":{"aF":["OL"]},"G5":{"br":["A?"],"bi":["A?"],"br.T":"A?","bi.T":"A?"},"OO":{"br":["i"],"bi":["i"],"br.T":"i","bi.T":"i"},"bH2":{"ft":[],"cb":[],"bN":[],"m":[]},"Ql":{"aw":[],"m":[]},"anI":{"aF":["Ql"]},"akj":{"c2":[],"b6":[],"m":[]},"WF":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"akR":{"cf":["bL?"]},"Lh":{"aw":[],"m":[]},"U4":{"aF":["Lh"]},"alt":{"f4":[],"cf":["f4"]},"aki":{"c2":[],"b6":[],"m":[]},"WE":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"bCo":{"ft":[],"cb":[],"bN":[],"m":[]},"a0g":{"aY":[],"m":[]},"Lo":{"aw":[],"m":[]},"agr":{"aF":["Lo"]},"agp":{"bu":[],"aq":[]},"Lp":{"aY":[],"m":[]},"bCx":{"cb":[],"bN":[],"m":[]},"fR":{"lb":["k"],"n":[],"lb.T":"k"},"pG":{"lb":["k"],"n":[],"lb.T":"k"},"ahM":{"oJ":[]},"a29":{"aY":[],"m":[]},"Ev":{"aY":[],"m":[]},"a2j":{"aY":[],"m":[]},"ZL":{"aY":[],"m":[]},"Mg":{"ig":["1"],"hX":["1"],"eA":["1"],"ig.T":"1"},"bMK":{"cb":[],"bN":[],"m":[]},"bEj":{"aw":[],"m":[]},"bEk":{"aF":["bEj"]},"a2Y":{"aY":[],"m":[]},"bEl":{"ft":[],"cb":[],"bN":[],"m":[]},"J5":{"aw":[],"m":[]},"J4":{"aw":[],"m":[]},"CL":{"aw":[],"m":[]},"Jv":{"c2":[],"b6":[],"m":[]},"lg":{"aY":[],"m":[]},"bEo":{"cb":[],"bN":[],"m":[]},"ED":{"aw":[],"m":[]},"ain":{"aq":[]},"J6":{"aF":["J5<1>"]},"US":{"aF":["J4<1>"]},"UT":{"ig":["nD<1>"],"hX":["nD<1>"],"eA":["nD<1>"],"ig.T":"nD<1>"},"UU":{"aF":["CL<1>"]},"aoh":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aim":{"aY":[],"m":[]},"J3":{"aF":["ED<1>"],"fY":[]},"a38":{"aw":[],"m":[]},"V1":{"cf":["n?"]},"aiz":{"cf":["n?"]},"aix":{"cf":["T"]},"aiy":{"cf":["f4?"]},"aiA":{"cB":[]},"bEB":{"ft":[],"cb":[],"bN":[],"m":[]},"MU":{"aw":[],"m":[]},"V9":{"aF":["MU"]},"bEQ":{"ft":[],"cb":[],"bN":[],"m":[]},"a3P":{"aY":[],"m":[]},"aiv":{"f4":[],"cf":["f4"]},"agt":{"c2":[],"b6":[],"m":[]},"Ww":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"TQ":{"dZ":["1"],"aq":[]},"Xe":{"aw":[],"m":[]},"a53":{"aY":[],"m":[]},"apm":{"aF":["Xe"]},"ak1":{"aw":[],"m":[]},"ajY":{"cf":["n?"]},"ak_":{"cf":["n?"]},"ajZ":{"cf":["f4?"]},"ak0":{"cB":[]},"aiU":{"cB":[]},"aiV":{"cB":[]},"amp":{"cB":[]},"NO":{"ft":[],"cb":[],"bN":[],"m":[]},"NU":{"aw":[],"m":[]},"Vy":{"aF":["NU"]},"NV":{"pu":[]},"vk":{"vq":[],"pu":[]},"NX":{"vq":[],"pu":[]},"NY":{"vq":[],"pu":[]},"vq":{"pu":[]},"Wc":{"cb":[],"bN":[],"m":[]},"Vx":{"aw":[],"m":[]},"NW":{"aY":[],"m":[]},"Vw":{"aF":["Vx"],"bhv":[]},"a5m":{"aY":[],"m":[]},"oj":{"dH":[]},"mI":{"oj":[],"dH":[]},"U0":{"aw":[],"m":[]},"Vo":{"aw":[],"m":[]},"zK":{"aw":[],"m":[]},"VA":{"bu":[],"aq":[]},"VB":{"br":["oj"],"bi":["oj"],"br.T":"oj","bi.T":"oj"},"akg":{"aq":[]},"afY":{"aF":["U0"]},"apy":{"aw":[],"m":[]},"Vp":{"aF":["Vo"]},"Wz":{"Y":[],"q3":["iU","Y"],"L":[],"aW":[]},"ahE":{"lz":["iU","Y"],"b6":[],"m":[],"lz.0":"iU","lz.1":"Y"},"VC":{"aF":["zK"]},"a6i":{"aY":[],"m":[]},"akd":{"cf":["n?"]},"akY":{"lz":["oU","Y"],"b6":[],"m":[],"lz.0":"oU","lz.1":"Y"},"WI":{"Y":[],"q3":["oU","Y"],"L":[],"aW":[]},"A6":{"ft":[],"cb":[],"bN":[],"m":[]},"SQ":{"aw":[],"m":[]},"XO":{"aF":["SQ"]},"a6u":{"aY":[],"m":[]},"OK":{"aw":[],"m":[]},"WD":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"ws":{"br":["dH?"],"bi":["dH?"],"br.T":"dH?","bi.T":"dH?"},"VN":{"aw":[],"m":[]},"alg":{"aF":["OK"]},"akf":{"c2":[],"b6":[],"m":[]},"ald":{"aF":["VN"]},"Xl":{"aY":[],"m":[]},"apz":{"aq":[]},"ale":{"ls":["ON"],"ls.T":"ON"},"a22":{"ON":[]},"akT":{"cf":["bL?"]},"ku":{"a6G":["1"],"ig":["1"],"hX":["1"],"eA":["1"],"ig.T":"1"},"xt":{"aw":[],"m":[]},"xu":{"aw":[],"m":[]},"JD":{"aw":[],"m":[]},"atb":{"aY":[],"m":[]},"at7":{"aF":["xt"]},"ata":{"aF":["xu"]},"af2":{"rV":[]},"a1J":{"rV":[]},"Wa":{"aF":["JD<1>"]},"Yu":{"bu":[],"aq":[]},"Yv":{"bu":[],"aq":[]},"Re":{"aw":[],"m":[]},"X_":{"cb":[],"bN":[],"m":[]},"Vc":{"aw":[],"m":[]},"Bs":{"aw":[],"m":[]},"Hm":{"aF":["Bs"]},"bNI":{"aw":[],"m":[]},"Rf":{"aF":["Re"]},"ap3":{"bu":[],"aq":[]},"TY":{"bb":[]},"afU":{"aY":[],"m":[]},"Vd":{"aF":["Vc"]},"ahW":{"cm":["ld"],"cm.T":"ld"},"ap4":{"cb":[],"bN":[],"m":[]},"Ju":{"aw":[],"m":[]},"ab6":{"aY":[],"m":[]},"alf":{"pS":["Ju"],"aF":["Ju"]},"bJA":{"ft":[],"cb":[],"bN":[],"m":[]},"akS":{"cf":["bL?"]},"wn":{"aw":[],"m":[]},"arm":{"cD":["eN"],"bu":[],"aq":[]},"Xf":{"aF":["wn"]},"S3":{"aw":[],"m":[]},"oR":{"c9":[]},"Xo":{"aF":["S3"]},"apT":{"b6":[],"m":[]},"JO":{"Y":[],"L":[],"aW":[]},"ask":{"b6":[],"m":[]},"aou":{"Y":[],"L":[],"aW":[]},"bKb":{"ft":[],"cb":[],"bN":[],"m":[]},"BQ":{"aw":[],"m":[]},"Xq":{"aF":["BQ"]},"C3":{"aw":[],"m":[]},"XL":{"cf":["n?"]},"ar5":{"cf":["n?"]},"ar4":{"cf":["f4?"]},"ar6":{"cB":[]},"bKY":{"ft":[],"cb":[],"bN":[],"m":[]},"SL":{"aw":[],"m":[]},"XM":{"aF":["SL"]},"SM":{"rk":["h"],"aw":[],"m":[],"rk.T":"h"},"K1":{"m4":["h"],"aF":["rk"]},"a6I":{"oJ":[]},"ard":{"aq":[]},"bL8":{"ft":[],"cb":[],"bN":[],"m":[]},"XR":{"aw":[],"m":[]},"adr":{"aY":[],"m":[]},"arj":{"aF":["XR"]},"ark":{"c2":[],"b6":[],"m":[]},"arl":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"arg":{"ih":[],"b6":[],"m":[]},"arh":{"bX":[],"b7":[],"ah":[]},"aot":{"Y":[],"aZ":["Y","jZ"],"L":[],"aW":[],"aZ.1":"jZ","aZ.0":"Y"},"arf":{"aY":[],"m":[]},"ari":{"aY":[],"m":[]},"adt":{"aY":[],"m":[]},"Vv":{"ft":[],"cb":[],"bN":[],"m":[]},"Cc":{"br":["nv"],"bi":["nv"],"br.T":"nv","bi.T":"nv"},"KD":{"aw":[],"m":[]},"wJ":{"aY":[],"m":[]},"afm":{"aF":["KD"]},"T6":{"bu":[],"aq":[]},"Tc":{"aw":[],"m":[]},"wM":{"aF":["Tc"]},"aiN":{"c2":[],"b6":[],"m":[]},"aod":{"Y":[],"bx":["Y"],"L":[],"pL":[],"aW":[]},"arA":{"aY":[],"m":[]},"bLH":{"ft":[],"cb":[],"bN":[],"m":[]},"Gm":{"iI":["bfX"],"iI.T":"bfX"},"PG":{"iQ":[]},"aqK":{"aq":[]},"ht":{"dH":[]},"nC":{"dH":[]},"a_Y":{"dH":[]},"fM":{"dH":[]},"jw":{"dH":[]},"fc":{"km":[]},"U1":{"uB":[]},"cx":{"oC":[]},"hK":{"ht":[],"dH":[]},"lb":{"n":[]},"aS":{"f0":[]},"kn":{"f0":[]},"xd":{"f0":[]},"bfX":{"iI":["bfX"]},"pI":{"iI":["pI"],"iI.T":"pI"},"a_b":{"iI":["p3"]},"a7u":{"c4":[]},"Du":{"iI":["p3"],"iI.T":"p3"},"a8N":{"ia":[]},"ez":{"ht":[],"dH":[]},"k3":{"ht":[],"dH":[]},"kF":{"km":[]},"apB":{"uB":[]},"kM":{"ht":[],"dH":[]},"k6":{"ht":[],"dH":[]},"k7":{"ht":[],"dH":[]},"IG":{"mE":[]},"ash":{"mE":[]},"k2":{"bqj":[]},"lA":{"ia":[],"pL":[],"aW":[]},"Qw":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"Ha":{"iQ":[],"aW":[]},"TV":{"bu":[],"aq":[]},"ahF":{"t_":[]},"aoF":{"Bf":[],"bx":["Y"],"L":[],"aW":[]},"qO":{"rt":[]},"Y":{"L":[],"aW":[]},"y8":{"m5":["Y"]},"j0":{"eg":[]},"LV":{"j0":[],"h5":["1"],"eg":[]},"nh":{"j0":[],"h5":["Y"],"eg":[]},"Qy":{"f5":["Y","nh"],"Y":[],"aZ":["Y","nh"],"L":[],"aW":[],"aZ.1":"nh","f5.1":"nh","aZ.0":"Y"},"a1P":{"aq":[]},"Qz":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"wf":{"bu":[],"aq":[]},"Bc":{"Y":[],"aZ":["Y","nu"],"L":[],"aW":[],"aZ.1":"nu","aZ.0":"Y"},"aob":{"Y":[],"L":[],"aW":[]},"XN":{"wf":[],"bu":[],"aq":[]},"Ua":{"wf":[],"bu":[],"aq":[]},"IW":{"wf":[],"bu":[],"aq":[]},"QB":{"Y":[],"L":[],"aW":[]},"lk":{"j0":[],"h5":["Y"],"eg":[]},"QD":{"f5":["Y","lk"],"Y":[],"aZ":["Y","lk"],"L":[],"aW":[],"aZ.1":"lk","f5.1":"lk","aZ.0":"Y"},"QF":{"Y":[],"L":[],"aW":[]},"j5":{"ic":[]},"yl":{"j5":[],"ic":[]},"DZ":{"j5":[],"ic":[]},"qg":{"or":[],"j5":[],"ic":[]},"Pv":{"or":[],"j5":[],"ic":[]},"Ol":{"j5":[],"ic":[]},"a8L":{"ic":[]},"or":{"j5":[],"ic":[]},"LC":{"j5":[],"ic":[]},"NQ":{"or":[],"j5":[],"ic":[]},"KR":{"j5":[],"ic":[]},"Ne":{"j5":[],"ic":[]},"a73":{"bu":[],"aq":[]},"L":{"aW":[]},"h5":{"eg":[]},"aoQ":{"kV":[]},"Vs":{"kV":[]},"D1":{"kV":[]},"t0":{"oA":[]},"nu":{"h5":["Y"],"eg":[]},"u1":{"il":[],"bu":[],"aq":[]},"QN":{"Y":[],"aZ":["Y","nu"],"L":[],"aW":[],"aZ.1":"nu","aZ.0":"Y"},"wr":{"aq":[]},"Qt":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"tj":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aac":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QP":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"Qx":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aa6":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QI":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QH":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aa8":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"a9S":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"a9T":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"M3":{"aq":[]},"JM":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"a9X":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"a9W":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"a9V":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"WK":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aa9":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aaa":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"a9Z":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aaj":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QC":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aa1":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aab":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QK":{"Y":[],"bx":["Y"],"L":[],"pL":[],"aW":[]},"aae":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QE":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QL":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QR":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"a9U":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aa7":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aa_":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aa3":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aa5":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aa0":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QQ":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"il":{"aq":[]},"Bd":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QM":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"a9R":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QO":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"QA":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"HM":{"rt":[]},"tx":{"ww":[],"h5":["fh"],"eg":[]},"ty":{"wx":[],"h5":["fh"],"eg":[]},"fh":{"L":[],"aW":[]},"abP":{"m5":["fh"]},"ww":{"eg":[]},"wx":{"eg":[]},"aag":{"H5":[],"fh":[],"aZ":["Y","q2"],"L":[],"aW":[],"aZ.1":"q2","aZ.0":"Y"},"py":{"eg":[]},"q2":{"ww":[],"h5":["Y"],"py":[],"eg":[]},"H5":{"fh":[],"aZ":["Y","q2"],"L":[],"aW":[]},"QS":{"fh":[],"bx":["fh"],"L":[],"aW":[]},"aah":{"fh":[],"bx":["fh"],"L":[],"aW":[]},"hf":{"j0":[],"h5":["Y"],"eg":[]},"H6":{"f5":["Y","hf"],"Y":[],"aZ":["Y","hf"],"L":[],"aW":[],"aZ.1":"hf","f5.1":"hf","aZ.0":"Y"},"QG":{"f5":["Y","hf"],"Y":[],"aZ":["Y","hf"],"L":[],"aW":[],"aZ.1":"hf","f5.1":"hf","aZ.0":"Y"},"q6":{"j0":[],"eg":[]},"a3M":{"Sx":[]},"H7":{"Y":[],"L":[],"aW":[]},"Bf":{"bx":["Y"],"L":[],"aW":[]},"H9":{"nG":["1"],"Y":[],"aZ":["fh","1"],"Qu":[],"L":[],"aW":[]},"QU":{"nG":["ty"],"Y":[],"aZ":["fh","ty"],"Qu":[],"L":[],"aW":[],"aZ.1":"ty","nG.0":"ty","aZ.0":"fh"},"aaf":{"nG":["tx"],"Y":[],"aZ":["fh","tx"],"Qu":[],"L":[],"aW":[],"aZ.1":"tx","nG.0":"tx","aZ.0":"fh"},"mJ":{"bu":[],"aq":[]},"qk":{"j0":[],"h5":["Y"],"eg":[]},"QV":{"f5":["Y","qk"],"Y":[],"aZ":["Y","qk"],"L":[],"aW":[],"aZ.1":"qk","f5.1":"qk","aZ.0":"Y"},"Cf":{"an":["~"]},"T_":{"c4":[]},"tR":{"dC":["tR"]},"oX":{"dC":["oX"]},"u5":{"dC":["u5"]},"Hy":{"dC":["Hy"]},"apr":{"yM":["eo"],"iG":[]},"RF":{"bu":[],"aq":[]},"AH":{"dC":["Hy"]},"CE":{"awv":[]},"Hz":{"iQ":[]},"iL":{"kt":[]},"ol":{"kt":[]},"FF":{"kt":[]},"AP":{"c4":[]},"OV":{"c4":[]},"nt":{"f4":[]},"ahI":{"f4":[]},"aqL":{"OX":[]},"w7":{"th":[]},"GZ":{"th":[]},"R1":{"bu":[],"aq":[]},"DN":{"mE":[]},"FM":{"mE":[]},"PH":{"mE":[]},"Mp":{"mE":[]},"adc":{"wH":[]},"adb":{"wH":[]},"add":{"wH":[]},"Ia":{"wH":[]},"MZ":{"wI":[]},"amK":{"SO":[]},"qE":{"aw":[],"m":[]},"TL":{"cb":[],"bN":[],"m":[]},"zh":{"aw":[],"m":[]},"bh8":{"c9":[]},"bDW":{"c9":[]},"bDV":{"c9":[]},"uq":{"c9":[]},"uC":{"c9":[]},"ld":{"c9":[]},"tb":{"c9":[]},"fq":{"cm":["1"]},"e1":{"cm":["1"],"cm.T":"1"},"TM":{"aF":["qE"]},"Vg":{"aF":["zh"]},"aeu":{"cm":["bh8"],"cm.T":"bh8"},"Mn":{"cm":["c9"],"cm.T":"c9"},"a2t":{"cm":["ld"]},"a9k":{"fq":["tb"],"cm":["tb"],"cm.T":"tb","fq.T":"tb"},"W7":{"YR":["1"],"fq":["1"],"JC":["1"],"cm":["1"],"cm.T":"1","fq.T":"1"},"W8":{"YS":["1"],"fq":["1"],"JC":["1"],"cm":["1"],"cm.T":"1","fq.T":"1"},"Uo":{"cm":["1"],"cm.T":"1"},"KC":{"aw":[],"m":[]},"afl":{"aF":["KC"]},"afk":{"c2":[],"b6":[],"m":[]},"Tw":{"aw":[],"m":[]},"Ym":{"aF":["Tw"],"fY":[]},"F4":{"aw":[],"m":[]},"Vj":{"aF":["F4<1>"]},"KP":{"aw":[],"m":[]},"TS":{"aF":["KP"]},"Oa":{"bu":[],"aq":[]},"am8":{"aY":[],"m":[]},"n4":{"cb":[],"bN":[],"m":[]},"uO":{"c2":[],"b6":[],"m":[]},"uH":{"c2":[],"b6":[],"m":[]},"DY":{"c2":[],"b6":[],"m":[]},"yv":{"c2":[],"b6":[],"m":[]},"E8":{"c2":[],"b6":[],"m":[]},"ke":{"c2":[],"b6":[],"m":[]},"iF":{"c2":[],"b6":[],"m":[]},"o3":{"c2":[],"b6":[],"m":[]},"Ok":{"hb":["nh"],"bN":[],"m":[],"hb.T":"nh"},"yH":{"ih":[],"b6":[],"m":[]},"ta":{"hb":["hf"],"bN":[],"m":[],"hb.T":"hf"},"bDv":{"cb":[],"bN":[],"m":[]},"Fk":{"c2":[],"b6":[],"m":[]},"Hw":{"c2":[],"b6":[],"m":[]},"as2":{"jG":[],"b7":[],"ah":[]},"as3":{"cb":[],"bN":[],"m":[]},"Pu":{"c2":[],"b6":[],"m":[]},"a_o":{"c2":[],"b6":[],"m":[]},"a0Y":{"c2":[],"b6":[],"m":[]},"a8H":{"c2":[],"b6":[],"m":[]},"a8I":{"c2":[],"b6":[],"m":[]},"In":{"c2":[],"b6":[],"m":[]},"a3A":{"c2":[],"b6":[],"m":[]},"a41":{"c2":[],"b6":[],"m":[]},"Hh":{"c2":[],"b6":[],"m":[]},"cu":{"c2":[],"b6":[],"m":[]},"iR":{"c2":[],"b6":[],"m":[]},"lW":{"c2":[],"b6":[],"m":[]},"a6c":{"c2":[],"b6":[],"m":[]},"Gp":{"c2":[],"b6":[],"m":[]},"amk":{"bX":[],"b7":[],"ah":[]},"a5v":{"c2":[],"b6":[],"m":[]},"a5u":{"c2":[],"b6":[],"m":[]},"abR":{"c2":[],"b6":[],"m":[]},"Sg":{"ih":[],"b6":[],"m":[]},"a5g":{"aY":[],"m":[]},"Wj":{"ih":[],"b6":[],"m":[]},"akc":{"bX":[],"b7":[],"ah":[]},"a9d":{"aY":[],"m":[]},"a3L":{"ih":[],"b6":[],"m":[]},"aaP":{"ih":[],"b6":[],"m":[]},"LP":{"ih":[],"b6":[],"m":[]},"EX":{"hb":["lk"],"bN":[],"m":[],"hb.T":"lk"},"EQ":{"hb":["lk"],"bN":[],"m":[],"hb.T":"lk"},"aeG":{"ih":[],"b6":[],"m":[]},"Hf":{"ih":[],"b6":[],"m":[]},"a9E":{"b6":[],"m":[]},"a6k":{"c2":[],"b6":[],"m":[]},"Gc":{"c2":[],"b6":[],"m":[]},"mx":{"c2":[],"b6":[],"m":[]},"ZD":{"c2":[],"b6":[],"m":[]},"OT":{"c2":[],"b6":[],"m":[]},"a_Q":{"c2":[],"b6":[],"m":[]},"uZ":{"c2":[],"b6":[],"m":[]},"a5f":{"c2":[],"b6":[],"m":[]},"vw":{"aY":[],"m":[]},"j1":{"aY":[],"m":[]},"uL":{"c2":[],"b6":[],"m":[]},"Wx":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"Tx":{"iQ":[],"aW":[]},"R8":{"m":[]},"R6":{"b7":[],"ah":[]},"aeF":{"iQ":[],"aW":[]},"a1W":{"c2":[],"b6":[],"m":[]},"a1w":{"aY":[],"m":[]},"ahC":{"aq":[]},"uQ":{"ft":[],"cb":[],"bN":[],"m":[]},"am9":{"aY":[],"m":[]},"a24":{"aY":[],"m":[]},"Ml":{"aw":[],"m":[]},"UI":{"aF":["Ml"]},"a2x":{"aY":[],"m":[]},"EE":{"aw":[],"m":[]},"UV":{"aF":["EE"]},"EF":{"aw":[],"m":[]},"uX":{"aF":["EF"],"fY":[]},"X4":{"aw":[],"m":[]},"oW":{"IF":[],"ia":[]},"agO":{"c2":[],"b6":[],"m":[]},"ao8":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"wG":{"cD":["eN"],"bu":[],"aq":[]},"UW":{"ih":[],"b6":[],"m":[]},"apc":{"aF":["X4"],"bpq":[]},"tU":{"fq":["1"],"cm":["1"],"cm.T":"1","fq.T":"1"},"Ya":{"fq":["1"],"cm":["1"],"cm.T":"1","fq.T":"1"},"Yb":{"fq":["1"],"cm":["1"],"cm.T":"1","fq.T":"1"},"apl":{"fq":["ts"],"cm":["ts"],"cm.T":"ts","fq.T":"ts"},"ahb":{"fq":["pa"],"cm":["pa"],"cm.T":"pa","fq.T":"pa"},"ass":{"cD":["E_"],"bu":[],"aq":[],"fY":[]},"fd":{"bu":[],"aq":[]},"v8":{"fd":[],"bu":[],"aq":[]},"afu":{"fY":[]},"Nb":{"bu":[],"aq":[]},"zf":{"aw":[],"m":[]},"F_":{"aw":[],"m":[]},"Ve":{"pt":["fd"],"cb":[],"bN":[],"m":[],"pt.T":"fd"},"J8":{"aF":["zf"]},"ajc":{"aF":["zf"]},"a3p":{"aY":[],"m":[]},"Nc":{"aw":[],"m":[]},"bgr":{"c9":[]},"Az":{"c9":[]},"B0":{"c9":[]},"uT":{"c9":[]},"Vf":{"fd":[],"bu":[],"aq":[]},"ajd":{"aF":["Nc"]},"aar":{"cm":["bgr"],"cm.T":"bgr"},"a7w":{"cm":["Az"],"cm.T":"Az"},"a9h":{"cm":["B0"],"cm.T":"B0"},"Mk":{"cm":["uT"],"cm.T":"uT"},"Nk":{"aw":[],"m":[]},"Nl":{"aF":["Nk"]},"Vh":{"cb":[],"bN":[],"m":[]},"rk":{"aw":[],"m":[]},"m4":{"aF":["rk<1>"]},"oe":{"ha":[]},"cK":{"oe":["1"],"ha":[]},"aw":{"m":[]},"b6":{"m":[]},"b7":{"ah":[]},"mC":{"b7":[],"ah":[]},"vU":{"b7":[],"ah":[]},"jG":{"b7":[],"ah":[]},"zt":{"oe":["1"],"ha":[]},"aY":{"m":[]},"bN":{"m":[]},"hb":{"bN":[],"m":[]},"cb":{"bN":[],"m":[]},"a65":{"b6":[],"m":[]},"c2":{"b6":[],"m":[]},"ih":{"b6":[],"m":[]},"a3m":{"b6":[],"m":[]},"LR":{"b7":[],"ah":[]},"HS":{"b7":[],"ah":[]},"Qd":{"b7":[],"ah":[]},"bX":{"b7":[],"ah":[]},"a64":{"bX":[],"b7":[],"ah":[]},"RW":{"bX":[],"b7":[],"ah":[]},"mh":{"bX":[],"b7":[],"ah":[]},"aak":{"bX":[],"b7":[],"ah":[]},"am5":{"b7":[],"ah":[]},"ama":{"m":[]},"Fa":{"aY":[],"m":[]},"lv":{"aw":[],"m":[]},"GY":{"aF":["lv"]},"dU":{"zr":["1"]},"ajJ":{"c2":[],"b6":[],"m":[]},"zx":{"aw":[],"m":[]},"Ji":{"aF":["zx"]},"NH":{"Ay":[]},"zC":{"aY":[],"m":[]},"zD":{"ft":[],"cb":[],"bN":[],"m":[]},"vf":{"aw":[],"m":[]},"Vr":{"aF":["vf"],"fY":[]},"yW":{"br":["f0"],"bi":["f0"],"br.T":"f0","bi.T":"f0"},"y6":{"br":["dO?"],"bi":["dO?"],"br.T":"dO?","bi.T":"dO?"},"Cb":{"br":["I"],"bi":["I"],"br.T":"I","bi.T":"I"},"Kz":{"aw":[],"m":[]},"KB":{"aw":[],"m":[]},"Ky":{"aw":[],"m":[]},"Kw":{"aw":[],"m":[]},"KA":{"aw":[],"m":[]},"a1Z":{"br":["km"],"bi":["km"],"br.T":"km","bi.T":"km"},"MC":{"br":["aS"],"bi":["aS"],"br.T":"aS","bi.T":"aS"},"a5d":{"aw":[],"m":[]},"Fo":{"aF":["1"]},"Ds":{"aF":["1"]},"afh":{"aF":["Kz"]},"afj":{"aF":["KB"]},"afg":{"aF":["Ky"]},"aff":{"aF":["Kw"]},"afi":{"aF":["KA"]},"ps":{"cb":[],"bN":[],"m":[]},"NT":{"jG":[],"b7":[],"ah":[]},"pt":{"cb":[],"bN":[],"m":[]},"Jl":{"jG":[],"b7":[],"ah":[]},"ft":{"cb":[],"bN":[],"m":[]},"tS":{"aY":[],"m":[]},"r_":{"b6":[],"m":[]},"Jm":{"bX":[],"b7":[],"ah":[]},"vy":{"r_":["bb"],"b6":[],"m":[],"r_.0":"bb"},"WG":{"mw":["bb","Y"],"Y":[],"bx":["Y"],"L":[],"aW":[],"mw.0":"bb"},"VK":{"cb":[],"bN":[],"m":[]},"Ow":{"aw":[],"m":[]},"asz":{"ls":["Ty"],"ls.T":"Ty"},"a26":{"Ty":[]},"al1":{"aF":["Ow"]},"bnR":{"cb":[],"bN":[],"m":[]},"OB":{"kF":[],"km":[]},"Qk":{"aY":[],"m":[]},"al8":{"aY":[],"m":[]},"ai9":{"aq":[]},"al7":{"c2":[],"b6":[],"m":[]},"aog":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"rK":{"ps":["iz"],"cb":[],"bN":[],"m":[],"ps.T":"iz"},"VR":{"aw":[],"m":[]},"ali":{"aF":["VR"],"fY":[]},"IS":{"ed":[],"ey":[]},"a6X":{"aY":[],"m":[]},"ZX":{"aw":[],"m":[]},"afs":{"zr":["IS"]},"alr":{"aY":[],"m":[]},"bg5":{"my":[]},"zy":{"cb":[],"bN":[],"m":[]},"Pj":{"aw":[],"m":[]},"oq":{"aF":["Pj"]},"Jy":{"xe":[]},"Jx":{"xe":[]},"W2":{"xe":[]},"W3":{"xe":[]},"ajO":{"bu":[],"z":["mP"],"aq":[],"z.E":"mP"},"ajP":{"hw":["bA>?"],"bu":[],"aq":[]},"fS":{"bN":[],"m":[]},"W6":{"b7":[],"ah":[]},"qp":{"j0":[],"h5":["Y"],"eg":[]},"a7Y":{"ih":[],"b6":[],"m":[]},"JN":{"f5":["Y","qp"],"Y":[],"aZ":["Y","qp"],"L":[],"aW":[],"aZ.1":"qp","f5.1":"qp","aZ.0":"Y"},"rT":{"aq":[]},"u0":{"aw":[],"m":[]},"JA":{"aF":["u0"]},"Gr":{"aw":[],"m":[]},"Gt":{"aF":["Gr"]},"xm":{"Y":[],"aZ":["Y","hf"],"L":[],"aW":[],"aZ.1":"hf","aZ.0":"Y"},"PA":{"aw":[],"m":[]},"xh":{"mb":["xh"],"mb.E":"xh"},"CY":{"cb":[],"bN":[],"m":[]},"xl":{"Y":[],"bx":["Y"],"L":[],"aW":[],"mb":["xl"],"mb.E":"xl"},"WH":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"XV":{"ih":[],"b6":[],"m":[]},"ars":{"bX":[],"b7":[],"ah":[]},"K4":{"hf":[],"j0":[],"h5":["Y"],"eg":[]},"amr":{"aF":["PA"]},"JB":{"b6":[],"m":[]},"amq":{"bX":[],"b7":[],"ah":[]},"ahH":{"c2":[],"b6":[],"m":[]},"Nt":{"aw":[],"m":[]},"Sk":{"aw":[],"m":[]},"Vm":{"aF":["Nt"]},"Vl":{"bu":[],"aq":[]},"ajK":{"aq":[]},"XE":{"aF":["Sk"]},"XD":{"bu":[],"aq":[]},"PB":{"lE":[]},"vQ":{"dp":["1"],"rG":[],"ha":[],"dp.T":"1"},"Gv":{"aY":[],"m":[]},"PC":{"ig":["1"],"hX":["1"],"eA":["1"]},"GM":{"cb":[],"bN":[],"m":[]},"wg":{"aw":[],"m":[]},"Ct":{"cb":[],"bN":[],"m":[]},"R7":{"aw":[],"m":[]},"hw":{"bu":[],"aq":[]},"aoE":{"aF":["wg"]},"WV":{"aF":["R7"]},"dv":{"hw":["1"],"bu":[],"aq":[]},"mO":{"dv":["1"],"hw":["1"],"bu":[],"aq":[]},"WR":{"mO":["1"],"dv":["1"],"hw":["1"],"bu":[],"aq":[]},"R_":{"mO":["1"],"dv":["1"],"hw":["1"],"bu":[],"aq":[],"dv.T":"1","mO.T":"1"},"Bj":{"mO":["F"],"dv":["F"],"hw":["F"],"bu":[],"aq":[],"dv.T":"F","mO.T":"F"},"R0":{"mO":["h?"],"dv":["h?"],"hw":["h?"],"bu":[],"aq":[],"dv.T":"h?","mO.T":"h?"},"aaO":{"aw":[],"m":[]},"bXe":{"c0U":["an"]},"JQ":{"aF":["aaO<1>"]},"ap_":{"cb":[],"bN":[],"m":[]},"aoB":{"dv":["wl?"],"hw":["wl?"],"bu":[],"aq":[],"dv.T":"wl?"},"VT":{"cb":[],"bN":[],"m":[]},"Jw":{"aw":[],"m":[]},"u_":{"aF":["Jw<1>"]},"Gs":{"eA":["1"]},"hX":{"eA":["1"]},"ahX":{"cm":["ld"],"cm.T":"ld"},"ig":{"hX":["1"],"eA":["1"]},"Q5":{"ig":["1"],"hX":["1"],"eA":["1"]},"Qi":{"ig":["1"],"hX":["1"],"eA":["1"]},"aaT":{"aY":[],"m":[]},"Rl":{"iI":["1"],"iI.T":"1"},"Rm":{"cb":[],"bN":[],"m":[]},"Ro":{"bu":[],"aq":[]},"Xi":{"aw":[],"m":[]},"WZ":{"dp":["ha"],"rG":[],"ha":[],"dp.T":"ha"},"Xj":{"aF":["Xi"]},"a3F":{"tp":[]},"kD":{"m9":[],"lE":[]},"q_":{"kD":[],"m9":[],"lE":[]},"Hq":{"kD":[],"m9":[],"lE":[]},"pN":{"kD":[],"m9":[],"lE":[]},"pZ":{"kD":[],"m9":[],"lE":[]},"ae5":{"kD":[],"m9":[],"lE":[]},"X6":{"cb":[],"bN":[],"m":[]},"xc":{"mb":["xc"],"mb.E":"xc"},"Rr":{"aw":[],"m":[]},"Rs":{"aF":["Rr"]},"tq":{"mJ":[],"bu":[],"aq":[],"tp":[]},"Bw":{"lE":[]},"Rt":{"tq":[],"mJ":[],"bu":[],"aq":[],"tp":[]},"ab3":{"aY":[],"m":[]},"a00":{"aY":[],"m":[]},"a6j":{"aY":[],"m":[]},"Rv":{"aw":[],"m":[]},"X9":{"cb":[],"bN":[],"m":[]},"Bz":{"aF":["Rv"]},"Xb":{"aw":[],"m":[]},"apg":{"aF":["Xb"]},"Xa":{"bu":[],"aq":[]},"apf":{"c2":[],"b6":[],"m":[]},"aom":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aoC":{"dv":["T?"],"hw":["T?"],"bu":[],"aq":[],"dv.T":"T?"},"ik":{"c9":[]},"Rk":{"fq":["ik"],"cm":["ik"],"cm.T":"ik","fq.T":"ik"},"H0":{"aw":[],"m":[]},"qu":{"lt":[],"ed":[],"ey":[]},"qv":{"jk":[],"ed":[],"ey":[]},"Hs":{"bu":[],"aq":[]},"pS":{"aF":["1"]},"Ge":{"bu":[],"aq":[]},"Ht":{"aw":[],"m":[]},"Hv":{"cb":[],"bN":[],"m":[]},"apo":{"il":[],"aF":["Ht"],"aq":[]},"ab9":{"aq":[]},"RQ":{"aw":[],"m":[]},"apC":{"aF":["RQ"]},"apD":{"ps":["B"],"cb":[],"bN":[],"m":[],"ps.T":"B"},"b9":{"HH":[]},"BK":{"aw":[],"m":[]},"RR":{"aw":[],"m":[]},"HI":{"bu":[],"aq":[]},"Xn":{"aF":["BK"]},"RS":{"bu":[],"aq":[]},"Xm":{"aF":["RR"]},"apH":{"cb":[],"bN":[],"m":[]},"JT":{"c2":[],"b6":[],"m":[]},"abB":{"aY":[],"m":[]},"apO":{"bX":[],"b7":[],"ah":[]},"WP":{"Y":[],"bx":["Y"],"Qu":[],"L":[],"aW":[]},"abD":{"m9":[]},"abE":{"c2":[],"b6":[],"m":[]},"aon":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"abS":{"b6":[],"m":[]},"HO":{"b6":[],"m":[]},"abQ":{"HO":[],"b6":[],"m":[]},"HN":{"bX":[],"b7":[],"ah":[]},"O9":{"hb":["py"],"bN":[],"m":[],"hb.T":"py"},"S4":{"lz":["1","2"],"b6":[],"m":[]},"S5":{"bX":[],"b7":[],"ah":[]},"S6":{"bu":[],"aq":[]},"abW":{"c2":[],"b6":[],"m":[]},"JP":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"abV":{"bu":[],"aq":[]},"UD":{"bu":[],"aq":[]},"ac0":{"aY":[],"m":[]},"Sw":{"b6":[],"m":[]},"aqP":{"bX":[],"b7":[],"ah":[]},"acQ":{"hb":["q6"],"bN":[],"m":[],"hb.T":"q6"},"QT":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"H8":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"acZ":{"c2":[],"b6":[],"m":[]},"acY":{"c2":[],"b6":[],"m":[]},"adf":{"c2":[],"b6":[],"m":[]},"Er":{"ft":[],"cb":[],"bN":[],"m":[]},"bDz":{"ft":[],"cb":[],"bN":[],"m":[]},"amb":{"aY":[],"m":[]},"f7":{"aY":[],"m":[]},"Mo":{"c9":[]},"yJ":{"c9":[]},"yL":{"c9":[]},"yK":{"c9":[]},"jA":{"c9":[]},"rb":{"jA":[],"c9":[]},"re":{"jA":[],"c9":[]},"z7":{"jA":[],"c9":[]},"z3":{"jA":[],"c9":[]},"z4":{"jA":[],"c9":[]},"m2":{"jA":[],"c9":[]},"v0":{"jA":[],"c9":[]},"rf":{"jA":[],"c9":[]},"rd":{"jA":[],"c9":[]},"z6":{"jA":[],"c9":[]},"rc":{"jA":[],"c9":[]},"tr":{"c9":[]},"aDT":{"c9":[]},"ts":{"c9":[]},"pa":{"c9":[]},"vW":{"c9":[]},"wd":{"c9":[]},"ox":{"c9":[]},"wR":{"c9":[]},"nz":{"c9":[]},"wO":{"c9":[]},"a2q":{"c9":[]},"jZ":{"j0":[],"h5":["Y"],"eg":[]},"xn":{"aw":[],"m":[]},"Xg":{"aw":[],"m":[]},"ST":{"aw":[],"m":[]},"Xk":{"aF":["xn"]},"Xh":{"aF":["Xg"]},"XQ":{"aF":["ST"]},"LF":{"cD":["E_"],"bu":[],"aq":[],"fY":[]},"Cg":{"aw":[],"m":[]},"UZ":{"cb":[],"bN":[],"m":[]},"aru":{"aF":["Cg"]},"Um":{"aq":[]},"adD":{"aY":[],"m":[]},"KE":{"aw":[],"m":[]},"TP":{"aF":["KE"]},"abM":{"aw":[],"m":[]},"a6J":{"aw":[],"m":[]},"aaY":{"aw":[],"m":[]},"aaI":{"aw":[],"m":[]},"abF":{"aw":[],"m":[]},"a3s":{"c2":[],"b6":[],"m":[]},"a1X":{"aw":[],"m":[]},"Ot":{"aw":[],"m":[]},"ZU":{"aw":[],"m":[]},"Is":{"aw":[],"m":[]},"It":{"aF":["Is<1>"]},"Tj":{"cD":["Iu"],"bu":[],"aq":[]},"D4":{"cb":[],"bN":[],"m":[]},"Wf":{"cb":[],"bN":[],"m":[]},"aeh":{"aY":[],"m":[]},"Wk":{"b6":[],"m":[]},"anJ":{"bX":[],"b7":[],"ah":[]},"UF":{"oe":["1"],"ha":[]},"Tt":{"ih":[],"b6":[],"m":[]},"asm":{"bX":[],"b7":[],"ah":[]},"abx":{"ih":[],"b6":[],"m":[]},"Yh":{"cb":[],"bN":[],"m":[]},"aep":{"aY":[],"m":[]},"asn":{"c2":[],"b6":[],"m":[]},"aow":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"IF":{"ia":[]},"asw":{"hb":["nu"],"bN":[],"m":[],"hb.T":"nu"},"afA":{"c2":[],"b6":[],"m":[]},"WN":{"Y":[],"bx":["Y"],"L":[],"aW":[]},"aeB":{"n":[],"cf":["n"]},"Yj":{"n":[],"cf":["n"]},"aeC":{"f4":[],"cf":["f4"]},"V3":{"f4":[],"cf":["f4"]},"aeA":{"bL":[],"cf":["bL?"]},"Yi":{"bL":[],"cf":["bL?"]},"aeD":{"I":[],"cf":["I"]},"asx":{"I":[],"cf":["I"]},"VH":{"cf":["1?"]},"d1":{"cf":["1"]},"d0":{"cf":["1"]},"aeE":{"cD":["bO"],"bu":[],"aq":[]},"Tz":{"aw":[],"m":[]},"asA":{"aF":["Tz"]},"LN":{"aw":[],"m":[]},"Uh":{"aF":["LN"]},"E1":{"aw":[],"m":[]},"ql":{"jO":[],"ed":[],"ey":[]},"a4H":{"aq":[]},"a4I":{"aq":[]},"a4J":{"aq":[]},"a4E":{"aq":[]},"a4G":{"aq":[]},"a4F":{"aq":[]},"a9w":{"aq":[]},"a9v":{"aq":[]},"a9u":{"aq":[]},"a4K":{"aq":[]},"adK":{"aq":[]},"adw":{"aq":[]},"a5h":{"aq":[]},"agI":{"aF":["E1"]},"a1e":{"aY":[],"m":[]},"yp":{"aY":[],"m":[]},"a1d":{"aY":[],"m":[]},"OH":{"aw":[],"m":[]},"ala":{"aF":["OH"]},"a6z":{"aw":[],"m":[]},"q5":{"DH":[]},"Sp":{"q5":["~"],"DH":[],"q5.T":"~"},"Gy":{"dC":["Gy"]},"yA":{"dC":["yA"]},"a0j":{"lX":[]},"a0k":{"lX":[]},"a0t":{"lX":[]},"a33":{"lX":[]},"a34":{"lX":[]},"a95":{"lX":[]},"a96":{"lX":[]},"a1t":{"ks":[]},"uU":{"ks":[]},"a44":{"ks":[]},"a4g":{"ks":[]},"a6Y":{"ks":[]},"a70":{"ks":[]},"Q8":{"ks":[]},"a9o":{"ks":[]},"wi":{"ks":[]},"aaF":{"ks":[]},"aex":{"ks":[]},"aOy":{"dC":["aOy"]},"a_C":{"a0U":[]},"Lb":{"a0U":[]},"DG":{"cY":["H"],"cY.T":"H"},"DW":{"c4":[]},"acx":{"BX":[]},"zn":{"a_u":["1","2"]},"a3_":{"c4":[]},"KS":{"c4":[]},"a5x":{"c4":[]},"a5l":{"c4":[]},"BZ":{"c4":[]},"Au":{"c4":[]},"Cr":{"c4":[]},"a2l":{"c4":[]},"DO":{"hN":[]},"a1g":{"hN":[]},"Ep":{"hN":[]},"a54":{"hN":[]},"a5Q":{"hN":[]},"a6l":{"hN":[]},"abl":{"hN":[]},"act":{"hN":[]},"To":{"hN":[]},"aeq":{"hN":[]},"aew":{"hN":[]},"Ey":{"hN":[]},"o4":{"hN":[]},"Mj":{"o4":[],"hN":[]},"d7":{"aN":[]},"jX":{"aN":[]},"fo":{"aN":[]},"a_T":{"fo":[],"aN":[]},"DL":{"d7":[],"aN":[]},"En":{"d7":[],"aN":[]},"Eo":{"d7":[],"aN":[]},"a2o":{"d7":[],"aN":[]},"EZ":{"d7":[],"aN":[]},"ak4":{"fo":[],"aN":[]},"ak5":{"d7":[],"aN":[]},"ak6":{"jX":[],"aN":[]},"Fp":{"d7":[],"aN":[]},"Fv":{"d7":[],"aN":[]},"a7J":{"d7":[],"aN":[]},"a8Y":{"jX":[],"aN":[]},"a9A":{"d7":[],"aN":[]},"a9B":{"d7":[],"aN":[]},"Hi":{"d7":[],"aN":[]},"aaJ":{"d7":[],"aN":[]},"Sl":{"jX":[],"aN":[]},"aer":{"d7":[],"aN":[]},"aes":{"fo":[],"aN":[]},"AC":{"d7":[],"aN":[]},"HT":{"jX":[],"aN":[]},"DC":{"fo":[],"aN":[]},"aev":{"aN":[]},"bks":{"aN":[]},"amc":{"d7":[],"aN":[]},"aqv":{"jX":[],"aN":[]},"Dr":{"fo":[],"aN":[]},"Ez":{"d7":[],"aN":[]},"bmy":{"aN":[]},"amg":{"fo":[],"aN":[]},"aqx":{"fo":[],"aN":[]},"afW":{"fo":[],"aN":[]},"Fe":{"fo":[],"aN":[]},"Ff":{"fo":[],"aN":[]},"FJ":{"fo":[],"aN":[]},"FK":{"fo":[],"aN":[]},"Gb":{"d7":[],"aN":[]},"Gg":{"d7":[],"aN":[]},"a7t":{"d7":[],"aN":[]},"a7C":{"fo":[],"aN":[]},"boj":{"aN":[]},"amh":{"fo":[],"aN":[]},"aqA":{"fo":[],"aN":[]},"afX":{"fo":[],"aN":[]},"Gq":{"fo":[],"aN":[]},"bpX":{"aN":[]},"amd":{"d7":[],"aN":[]},"aqC":{"jX":[],"aN":[]},"IN":{"fo":[],"aN":[]},"a7M":{"d7":[],"aN":[]},"acB":{"jX":[],"aN":[]},"a_W":{"fo":[],"aN":[]},"Pl":{"z":["hN"],"z.E":"hN"},"Dz":{"i8":[],"dT":[]},"uM":{"i8":[],"mq":[],"dT":[]},"MG":{"mq":[],"dT":[]},"MX":{"i8":[],"dT":[]},"Ny":{"i8":[],"dT":[]},"a4x":{"i8":[],"dT":[]},"Q2":{"mq":[],"dT":[]},"Qp":{"mq":[],"dT":[]},"QW":{"i8":[],"mq":[],"dT":[],"bfe":[]},"Bp":{"bgE":[],"dT":[]},"RP":{"mq":[],"dT":[]},"acC":{"i8":[],"dT":[]},"ny":{"dT":[]},"qW":{"ju":["n","n"]},"cQ":{"ju":["T","T"]},"Nw":{"ju":["n9","n9"]},"pv":{"ju":["k","k"]},"Oh":{"ju":["1","1"]},"PL":{"hs":["i"],"hs.T":"i"},"a8B":{"ju":["i","i"]},"mr":{"ju":["i","i"]},"HB":{"ju":["oD","rZ"]},"ac7":{"ju":["i","i"]},"SP":{"ju":["r6","r6"]},"OA":{"aw":[],"m":[]},"al6":{"aF":["OA"]},"G_":{"aw":[],"m":[]},"al4":{"aF":["G_"]},"xQ":{"eZ":[]},"a0x":{"eZ":[]},"a4u":{"eZ":[]},"a4w":{"eZ":[]},"a6S":{"eZ":[]},"a9a":{"eZ":[]},"a9M":{"eZ":[]},"aap":{"eZ":[]},"aaK":{"eZ":[]},"abo":{"eZ":[]},"BI":{"eZ":[]},"abq":{"eZ":[]},"abr":{"eZ":[]},"abs":{"eZ":[]},"jv":{"i8":[],"dT":[]},"a1p":{"jv":[],"i8":[],"dT":[]},"a59":{"jv":[],"i8":[],"dT":[]},"a7G":{"jv":[],"i8":[],"dT":[]},"abp":{"jv":[],"i8":[],"dT":[]},"abZ":{"jv":[],"i8":[],"dT":[]},"adi":{"jv":[],"i8":[],"dT":[]},"a5L":{"c4":[]},"a5O":{"c4":[]},"a5P":{"iK":[]},"H_":{"b6":[],"m":[]},"QJ":{"Y":[],"L":[],"aW":[]},"a8A":{"ho":[]},"hs":{"hs.T":"1"},"cq":{"mj":[]},"e9":{"mj":[]},"wS":{"mj":[]},"a_R":{"fa":[]},"LK":{"fa":[]},"MK":{"fa":[]},"a3v":{"fa":[]},"a3Y":{"fa":[]},"a4N":{"fa":[]},"a4T":{"fa":[]},"a4X":{"fa":[]},"Oo":{"fa":[]},"A5":{"fa":[]},"Pw":{"fa":[]},"Px":{"fa":[]},"Gz":{"fa":[]},"RN":{"fa":[]},"acS":{"fa":[]},"Tl":{"fa":[]},"Tm":{"fa":[]},"a_l":{"h9":[]},"a_m":{"h9":[]},"a13":{"h9":[]},"a1U":{"h9":[]},"a28":{"h9":[]},"RT":{"Ma":[]},"Eu":{"Ma":[]},"a39":{"h9":[]},"MJ":{"h9":[]},"a3o":{"h9":[]},"a5c":{"h9":[]},"a5p":{"h9":[]},"a6d":{"h9":[]},"A0":{"h9":[]},"abY":{"h9":[]},"acy":{"h9":[]},"Ih":{"h9":[]},"xg":{"b7":[],"ah":[]},"tv":{"m":[]},"Gl":{"aY":[],"tv":[],"m":[]},"alZ":{"b7":[],"ah":[]},"xf":{"aY":[],"m":[]},"tu":{"aY":[],"tv":[],"m":[]},"RX":{"b7":[],"ah":[]},"kx":{"z":["1"]},"jQ":{"kx":["1"],"z":["1"]},"KU":{"a2":["hu"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"j4":[],"a2.T":"hu","ag.T":"B"},"yd":{"a2":["hu"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"hu","ag.T":"B"},"F6":{"aY":[],"m":[]},"zX":{"a2":["bd"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"j4":[],"a2.T":"bd","ag.T":"B"},"a5V":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"a2":["hu"],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"hu"},"G8":{"aY":[],"m":[]},"G9":{"aY":[],"m":[]},"hu":{"bd":["aB"],"ae":["aB"],"fB":[],"y":[],"aD":[],"P":[]},"Gu":{"aY":[],"m":[]},"Cl":{"a2":["hu"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"hu","ag.T":"B"},"adN":{"ag":["B"],"y":[],"b5":[],"ag.T":"B"},"Cy":{"a2":["hu"],"ag":["B"],"y":[],"b5":[],"a8":[],"ao":[],"a2.T":"hu","ag.T":"B"},"a8v":{"j7":[],"c4":[]},"bq":{"aQn":["1"],"ba":["1"]},"OJ":{"z":["1"],"z.E":"1"},"oa":{"h6":["1","h"],"ba":["h"],"h6.T":"1"},"OE":{"h6":["1","2"],"ba":["2"],"h6.T":"1"},"T9":{"h6":["1","tG<1>"],"ba":["tG<1>"],"h6.T":"1"},"RV":{"hJ":[]},"yx":{"hJ":[]},"a6q":{"hJ":[]},"a7D":{"hJ":[]},"hd":{"hJ":[]},"aez":{"hJ":[]},"yf":{"A4":["1","1"],"ba":["1"],"A4.R":"1"},"h6":{"ba":["2"]},"BF":{"ba":["+(1,2)"]},"BG":{"ba":["+(1,2,3)"]},"RK":{"ba":["+(1,2,3,4)"]},"RL":{"ba":["+(1,2,3,4,5)"]},"RM":{"ba":["+(1,2,3,4,5,6,7,8)"]},"A4":{"ba":["2"]},"mn":{"h6":["1","1"],"ba":["1"],"h6.T":"1"},"S2":{"h6":["1","1"],"ba":["1"],"h6.T":"1"},"z1":{"ba":["1"]},"a7v":{"ba":["h"]},"mZ":{"ba":["h"]},"BM":{"ba":["h"]},"a9e":{"ba":["h"]},"aaq":{"ba":["h"]},"lp":{"h6":["1","H<1>"],"ba":["H<1>"],"h6.T":"1"},"On":{"h6":["1","H<1>"],"ba":["H<1>"]},"Q6":{"h6":["1","H<1>"],"ba":["H<1>"],"h6.T":"1"},"QX":{"h6":["1","2"],"ba":["2"]},"Lm":{"zJ":["1"],"tu":[],"aY":[],"tv":[],"m":[]},"Ou":{"zJ":["1"],"tu":[],"aY":[],"tv":[],"m":[]},"a5j":{"ah":[]},"hE":{"cb":[],"bN":[],"m":[]},"zJ":{"tu":[],"aY":[],"tv":[],"m":[]},"Vu":{"b7":[],"ah":[]},"CQ":{"jG":[],"b7":[],"a5j":["1"],"ah":[]},"Ur":{"kU":["1","IY<1>"],"kU.D":"IY<1>"},"Yg":{"kU":["1","K9<1>"],"kU.D":"K9<1>"},"a7a":{"Gl":[],"aY":[],"tv":[],"m":[]},"Qc":{"zJ":["1"],"tu":[],"aY":[],"tv":[],"m":[]},"a9n":{"c4":[]},"a9m":{"c4":[]},"DE":{"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"dR":["ae"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"dR.T":"ae","ag.T":"B"},"EK":{"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["wj"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"wj","ag.T":"B"},"MM":{"dR":["ae"],"y":[],"dR.T":"ae"},"a3r":{"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"dR":["ae"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"dR.T":"ae","ag.T":"B"},"PZ":{"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"dR":["ae"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"dR.T":"ae","ag.T":"B"},"acp":{"dR":["ae"],"y":[],"dR.T":"ae"},"acq":{"hx":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"dR":["ae"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"dR.T":"ae","ag.T":"B"},"wj":{"ae":["a7"],"pP":[],"ds":["fN"],"y":[],"aD":[],"P":[]},"Hg":{"aY":[],"m":[]},"mS":{"cM":[]},"De":{"cM":[]},"bVc":{"cM":[]},"bVb":{"cM":[]},"bVw":{"cM":[]},"bVv":{"cM":[]},"bVu":{"cM":[]},"bVa":{"cM":[]},"bVq":{"cM":[]},"bVB":{"cM":[]},"bVl":{"cM":[]},"bVe":{"cM":[]},"bVd":{"cM":[]},"bVm":{"cM":[]},"bVp":{"cM":[]},"bVx":{"cM":[]},"bVr":{"cM":[]},"bVh":{"cM":[]},"bVg":{"cM":[]},"bVk":{"cM":[]},"bVj":{"cM":[]},"bVz":{"cM":[]},"bVy":{"cM":[]},"bVo":{"cM":[]},"bVn":{"cM":[]},"lP":{"cM":[]},"biK":{"cM":[]},"jr":{"cM":[]},"bd5":{"cM":[]},"bVi":{"cM":[]},"qC":{"cM":[]},"bV9":{"cM":[]},"iX":{"cM":[]},"nQ":{"cM":[]},"l1":{"cM":[]},"Zn":{"cM":[]},"bVf":{"cM":[]},"bVA":{"cM":[]},"l2":{"cM":[]},"bVt":{"cM":[]},"bVs":{"cM":[]},"qf":{"fQ":[]},"Gn":{"fQ":[]},"Fl":{"fQ":[]},"zv":{"fQ":[]},"dB":{"cJ":[]},"a1R":{"z":["fD"],"z.E":"fD"},"a7N":{"fD":["k"]},"a1f":{"fD":["n"]},"acA":{"fD":["h"]},"a3x":{"fD":["h"]},"a5t":{"fD":["k"]},"a3O":{"fD":["T"]},"a_U":{"fD":["F"]},"a8w":{"c4":[]},"LI":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["hA"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"hA","ag.T":"B"},"LJ":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"a2":["hA"],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"hA"},"a4S":{"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"a2":["hA"],"y":[],"ao":[],"P":[],"a8":[],"a2.T":"hA"},"a4d":{"y":[]},"a4f":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["hA"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"hA","ag.T":"B"},"a4e":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["hA"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"hA","ag.T":"B"},"Go":{"fv":[],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["hA"],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"hA","ag.T":"B"},"a7O":{"a2":["hA"],"y":[],"a2.T":"hA"},"a8V":{"jW":["t1"],"au":[],"aG":[],"ax":[],"aH":[],"aE":[],"ag":["B"],"a2":["hA"],"cP":[],"y":[],"ao":[],"P":[],"a8":[],"b5":[],"a2.T":"hA","ag.T":"B","jW.T":"t1"},"hA":{"ae":["a7"],"fB":[],"b_":[],"ds":["fN"],"y":[],"aD":[],"P":[]},"I4":{"aY":[],"m":[]},"tJ":{"O":["1"],"H":["1"],"at":["1"],"z":["1"]},"akm":{"tJ":["k"],"O":["k"],"H":["k"],"at":["k"],"z":["k"]},"Ti":{"tJ":["k"],"O":["k"],"H":["k"],"at":["k"],"z":["k"],"O.E":"k","z.E":"k","tJ.E":"k"},"aeb":{"c4":[]},"iM":{"vX":[]},"mg":{"vX":[]},"i6":{"vX":[]},"LH":{"vX":[]},"vC":{"of":[]},"w5":{"of":[]},"j_":{"ef":[]},"aiD":{"ef":[]},"adR":{"ef":[]},"aeo":{"j_":[],"ef":[]},"GA":{"j_":[],"ef":[]},"ado":{"j_":[],"ef":[]},"aaV":{"j_":[],"ef":[]},"LB":{"ef":[]},"OI":{"ef":[]},"GD":{"j_":[],"ef":[]},"Es":{"j_":[],"ef":[]},"adl":{"j_":[],"ef":[]},"a5a":{"j_":[],"ef":[]},"PN":{"ef":[]},"Hc":{"ef":[]},"aax":{"ef":[]},"aaw":{"ef":[]},"aat":{"ef":[]},"aau":{"ef":[]},"QY":{"ef":[]},"aav":{"ef":[]},"x5":{"cY":["1"],"cY.T":"1"},"aiw":{"x5":["1"],"cY":["1"],"cY.T":"1"},"jy":{"bfo":[]},"fe":{"fe.T":"1"},"AF":{"fe":["a0<1>"],"fe.T":"a0<1>"},"AG":{"fe":["a0>"],"fe.T":"a0>"},"G3":{"c4":[]},"Fb":{"it":[]},"va":{"it":[]},"aeM":{"wV":[]},"aeR":{"c4":[]},"aeX":{"c4":[]},"aeY":{"j7":[],"c4":[]},"af0":{"j7":[],"c4":[]},"TH":{"c4":[]},"TB":{"z":["er"],"z.E":"er"},"lF":{"er":[],"wW":[]},"II":{"er":[]},"TA":{"er":[]},"aeK":{"er":[]},"aeL":{"er":[]},"TC":{"er":[]},"aeN":{"er":[],"IK":["er"]},"lG":{"er":[],"IK":["er"],"wW":[]},"TI":{"er":[]},"Cz":{"er":[]},"IJ":{"ba":["h"]},"TF":{"H":["1"],"at":["1"],"z":["1"],"z.E":"1"},"aeO":{"cv":["H","h"],"cv.S":"H","cv.T":"h"},"nB":{"eO":[]},"oP":{"eO":[]},"mL":{"eO":[]},"mM":{"eO":[]},"jo":{"eO":[]},"oQ":{"eO":[]},"hZ":{"eO":[]},"TJ":{"eO":[]},"wX":{"TJ":[],"eO":[]},"aeP":{"z":["eO"],"z.E":"eO"},"a0m":{"z":["h"]},"bM3":{"y":[]},"aG":{"ao":[]},"aE":{"P":[]},"ms":{"y":[]},"bH1":{"aw":[],"m":[]},"bNP":{"cb":[],"bN":[],"m":[]},"bMu":{"cb":[],"bN":[],"m":[]},"mq":{"dT":[]},"bgE":{"dT":[]},"aQn":{"ba":["1"]},"bqJ":{"cM":[]}}')) +A.bNY(v.typeUniverse,JSON.parse('{"N0":1,"ae0":1,"Iv":1,"Yz":2,"LU":1,"Gi":1,"Sj":1,"acw":2,"aqJ":1,"ahK":1,"ase":2,"OF":2,"asf":1,"aq7":2,"aq6":2,"Xu":2,"Xv":1,"Xw":1,"Y8":2,"Y9":1,"a0r":1,"a14":2,"JY":1,"dC":1,"bhi":1,"Wi":1,"UE":1,"Et":1,"V2":1,"IT":1,"NG":1,"X3":1,"E5":1,"a8t":1,"Wb":1,"BT":1,"rr":1,"a_D":1,"a9c":1,"adm":1,"DA":1,"TZ":1,"U_":1,"XW":1,"KI":1,"E9":1,"Uj":1,"Uk":1,"Ul":1,"PJ":1,"Yw":1,"T7":1,"YI":1,"a6H":1,"VO":1,"Ka":1,"T8":1,"LV":1,"Un":1,"h5":1,"jh":1,"Qv":1,"M3":1,"JM":1,"WK":1,"H9":1,"XK":1,"uv":1,"Jb":1,"Fo":1,"Ds":1,"Jk":1,"bg5":1,"adS":1,"PC":1,"hw":1,"nn":1,"WR":1,"Kb":1,"Gs":1,"a6m":1,"Q5":1,"Qi":1,"CU":1,"JI":1,"S4":2,"Xp":2,"ly":1,"fw":1,"Y2":1,"a5C":2,"a_v":2,"UH":2,"a7S":2,"a5w":2,"a5y":2,"Oh":1,"a_B":2,"aaz":1,"On":1,"QX":2,"Ou":1,"a5j":1,"ahL":1,"aet":2,"a3j":2,"dt":1,"tQ":1,"pp":1,"bM_":1}')) +var u={q:"\x10@\x100@@\xa0\x80 0P`pPP\xb1\x10@\x100@@\xa0\x80 0P`pPP\xb0\x11@\x100@@\xa0\x80 0P`pPP\xb0\x10@\x100@@\xa0\x80 1P`pPP\xb0\x10A\x101AA\xa1\x81 1QaqQQ\xb0\x10@\x100@@\xa0\x80 1Q`pPP\xb0\x10@\x100@@\xa0\x80 1QapQP\xb0\x10@\x100@@\xa0\x80 1PaqQQ\xb0\x10\xe0\x100@@\xa0\x80 1P`pPP\xb0\xb1\xb1\xb1\xb1\x91\xb1\xc1\x81\xb1\xb1\xb1\xb1\xb1\xb1\xb1\xb1\x10@\x100@@\xd0\x80 1P`pPP\xb0\x11A\x111AA\xa1\x81!1QaqQQ\xb1\x10@\x100@@\x90\x80 1P`pPP\xb0",z:" In this example we use a joint to keep a body with several fixtures stuck\n to another body.\n\n Tap the screen to add more of these combined bodies.\n ",S:" 0\x10000\xa0\x80\x10@P`p`p\xb1 0\x10000\xa0\x80\x10@P`p`p\xb0 0\x10000\xa0\x80\x11@P`p`p\xb0 1\x10011\xa0\x80\x10@P`p`p\xb0 1\x10111\xa1\x81\x10AQaqaq\xb0 1\x10011\xa0\x80\x10@Qapaq\xb0 1\x10011\xa0\x80\x10@Paq`p\xb0 1\x10011\xa0\x80\x10@P`q`p\xb0 \x91\x100\x811\xa0\x80\x10@P`p`p\xb0 1\x10011\xa0\x81\x10@P`p`p\xb0 1\x100111\x80\x10@P`p`p\xb0!1\x11111\xa1\x81\x11AQaqaq\xb1",L:'"colors" and "colorStops" arguments must have equal length.',r:'"recorder" must not already be associated with another Canvas.',M:'"rstTransforms" and "rects" lengths must be a multiple of four.',s:'"rstTransforms" and "rects" lengths must match.',v:'"transforms" and "rects" lengths must match.',T:"% of the way to being a CircleBorder that is ",N:"' has been assigned during initialization.",K:"00000008A0009!B000a!C000b000cD000d!E000e000vA000w!F000x!G000y!H000z!I0010!J0011!K0012!I0013!H0014!L0015!M0016!I0017!J0018!N0019!O001a!N001b!P001c001lQ001m001nN001o001qI001r!G001s002iI002j!L002k!J002l!M002m003eI003f!L003g!B003h!R003i!I003j003oA003p!D003q004fA004g!S004h!L004i!K004j004lJ004m004qI004r!H004s!I004t!B004u004vI004w!K004x!J004y004zI0050!T00510056I0057!H0058005aI005b!L005c00jrI00js!T00jt00jvI00jw!T00jx00keI00kf!T00kg00lbI00lc00niA00nj!S00nk00nvA00nw00o2S00o300ofA00og00otI00ou!N00ov00w2I00w300w9A00wa013cI013d!N013e!B013h013iI013j!J013l014tA014u!B014v!A014w!I014x014yA014z!I01500151A0152!G0153!A015c0162U0167016aU016b016wI016x016zK01700171N01720173I0174017eA017f!G017g!A017i017jG017k018qI018r019bA019c019lQ019m!K019n019oQ019p019rI019s!A019t01cjI01ck!G01cl!I01cm01csA01ct01cuI01cv01d0A01d101d2I01d301d4A01d5!I01d601d9A01da01dbI01dc01dlQ01dm01e8I01e9!A01ea01f3I01f401fuA01fx01idI01ie01ioA01ip!I01j401jdQ01je01kaI01kb01kjA01kk01knI01ko!N01kp!G01kq!I01kt!A01ku01kvJ01kw01lhI01li01llA01lm!I01ln01lvA01lw!I01lx01lzA01m0!I01m101m5A01m801ncI01nd01nfA01ni01qfI01qr01r5A01r6!I01r701s3A01s401tlI01tm01toA01tp!I01tq01u7A01u8!I01u901ufA01ug01upI01uq01urA01us01utB01uu01v3Q01v401vkI01vl01vnA01vp01x5I01x8!A01x9!I01xa01xgA01xj01xkA01xn01xpA01xq!I01xz!A01y401y9I01ya01ybA01ye01ynQ01yo01ypI01yq01yrK01ys01ywI01yx!K01yy!I01yz!J01z001z1I01z2!A01z501z7A01z9020pI020s!A020u020yA02130214A02170219A021d!A021l021qI021y0227Q02280229A022a022cI022d!A022e!I022p022rA022t0249I024c!A024d!I024e024lA024n024pA024r024tA024w025dI025e025fA025i025rQ025s!I025t!J0261!I02620267A0269026bA026d027tI027w!A027x!I027y0284A02870288A028b028dA028l028nA028s028xI028y028zA0292029bQ029c029jI029u!A029v02bdI02bi02bmA02bq02bsA02bu02bxA02c0!I02c7!A02cm02cvQ02cw02d4I02d5!J02d6!I02dc02dgA02dh02f1I02f202f8A02fa02fcA02fe02fhA02fp02fqA02fs02g1I02g202g3A02g602gfQ02gn!T02go02gwI02gx02gzA02h0!T02h102ihI02ik!A02il!I02im02isA02iu02iwA02iy02j1A02j902jaA02ji02jlI02jm02jnA02jq02jzQ02k102k2I02kg02kjA02kk02m2I02m302m4A02m5!I02m602mcA02me02mgA02mi02mlA02mm02muI02mv!A02mw02n5I02n602n7A02na02njQ02nk02nsI02nt!K02nu02nzI02o102o3A02o502pyI02q2!A02q702qcA02qe!A02qg02qnA02qu02r3Q02r602r7A02r802t6I02tb!J02tc02trI02ts02u1Q02u202u3B02v502x9I02xc02xlQ02xo02yoI02yp02ysT02yt!I02yu02yvT02yw!S02yx02yyT02yz!B02z0!S02z102z5G02z6!S02z7!I02z8!G02z902zbI02zc02zdA02ze02zjI02zk02ztQ02zu0303I0304!B0305!A0306!I0307!A0308!I0309!A030a!L030b!R030c!L030d!R030e030fA030g031oI031t0326A0327!B0328032cA032d!B032e032fA032g032kI032l032vA032x033wA033y033zB03400345I0346!A0347034fI034g034hT034i!B034j!T034k034oI034p034qS035s037jI037k037tQ037u037vB037w039rI039s03a1Q03a203cvI03cw03fjV03fk03hjW03hk03jzX03k003tmI03tp03trA03ts!I03tt!B03tu03y5I03y8!B03y904fzI04g0!B04g104gqI04gr!L04gs!R04gw04iyI04iz04j1B04j204k1I04k204k4A04kg04kxI04ky04l0A04l104l2B04lc04ltI04lu04lvA04m804moI04mq04mrA04n404pfI04pg04phB04pi!Y04pj!I04pk!B04pl!I04pm!B04pn!J04po04ppI04ps04q1Q04q804qpI04qq04qrG04qs04qtB04qu!T04qv!I04qw04qxG04qy!I04qz04r1A04r2!S04r404rdQ04rk04ucI04ud04ueA04uf04vcI04vd!A04ve04ymI04yo04yzA04z404zfA04zk!I04zo04zpG04zq04zzQ0500053dI053k053tQ053u055iI055j055nA055q058cI058f!A058g058pQ058w0595Q059c059pI059s05a8A05c005c4A05c505dfI05dg05dwA05dx05e3I05e805ehQ05ei05ejB05ek!I05el05eoB05ep05eyI05ez05f7A05f805fgI05fk05fmA05fn05ggI05gh05gtA05gu05gvI05gw05h5Q05h605idI05ie05irA05j005k3I05k405knA05kr05kvB05kw05l5Q05l905lbI05lc05llQ05lm05mlI05mm05mnB05mo05onI05ow05oyA05oz!I05p005pkA05pl05poI05pp!A05pq05pvI05pw!A05px05pyI05pz05q1A05q205vjI05vk05x5A05x705xbA05xc06bgI06bh!T06bi!I06bk06bqB06br!S06bs06buB06bv!Z06bw!A06bx!a06by06bzA06c0!B06c1!S06c206c3B06c4!b06c506c7I06c806c9H06ca!L06cb06cdH06ce!L06cf!H06cg06cjI06ck06cmc06cn!B06co06cpD06cq06cuA06cv!S06cw06d3K06d4!I06d506d6H06d7!I06d806d9Y06da06dfI06dg!N06dh!L06di!R06dj06dlY06dm06dxI06dy!B06dz!I06e006e3B06e4!I06e506e7B06e8!d06e906ecI06ee06enA06eo06f0I06f1!L06f2!R06f306fgI06fh!L06fi!R06fk06fwI06g006g6J06g7!K06g806glJ06gm!K06gn06gqJ06gr!K06gs06gtJ06gu!K06gv06hbJ06hc06i8A06io06iqI06ir!K06is06iwI06ix!K06iy06j9I06ja!J06jb06q9I06qa06qbJ06qc06weI06wf!c06wg06x3I06x4!L06x5!R06x6!L06x7!R06x806xlI06xm06xne06xo06y0I06y1!L06y2!R06y3073jI073k073ne073o07i7I07i807ibe07ic07irI07is07ite07iu07ivI07iw!e07ix!I07iy07j0e07j1!f07j207j3e07j407jsI07jt07jve07jw07l3I07l4!e07l507lqI07lr!e07ls07ngI07nh07nse07nt07nwI07nx!e07ny!I07nz07o1e07o2!I07o307o4e07o507o7I07o807o9e07oa07obI07oc!e07od07oeI07of07ohe07oi07opI07oq!e07or07owI07ox07p1e07p2!I07p307p4e07p5!f07p6!e07p707p8I07p907pge07ph07pjI07pk07ple07pm07ppf07pq07ruI07rv07s0H07s1!I07s207s3G07s4!e07s507s7I07s8!L07s9!R07sa!L07sb!R07sc!L07sd!R07se!L07sf!R07sg!L07sh!R07si!L07sj!R07sk!L07sl!R07sm07usI07ut!L07uu!R07uv07vpI07vq!L07vr!R07vs!L07vt!R07vu!L07vv!R07vw!L07vx!R07vy!L07vz!R07w00876I0877!L0878!R0879!L087a!R087b!L087c!R087d!L087e!R087f!L087g!R087h!L087i!R087j!L087k!R087l!L087m!R087n!L087o!R087p!L087q!R087r!L087s!R087t089jI089k!L089l!R089m!L089n!R089o08ajI08ak!L08al!R08am08viI08vj08vlA08vm08vnI08vt!G08vu08vwB08vx!I08vy!G08vz!B08w008z3I08z4!B08zj!A08zk0926I09280933A0934093hH093i093pB093q!I093r!B093s!L093t!B093u093vI093w093xH093y093zI09400941H0942!L0943!R0944!L0945!R0946!L0947!R0948!L0949!R094a094dB094e!G094f!I094g094hB094i!I094j094kB094l094pI094q094rb094s094uB094v!I094w094xB094y!L094z0956B0957!I0958!B0959!I095a095bB095c095eI096o097de097f099ve09a809g5e09gw09h7e09hc!B09hd09heR09hf09hge09hh!Y09hi09hje09hk!L09hl!R09hm!L09hn!R09ho!L09hp!R09hq!L09hr!R09hs!L09ht!R09hu09hve09hw!L09hx!R09hy!L09hz!R09i0!L09i1!R09i2!L09i3!R09i4!Y09i5!L09i609i7R09i809ihe09ii09inA09io09ise09it!A09iu09iye09iz09j0Y09j109j3e09j5!Y09j6!e09j7!Y09j8!e09j9!Y09ja!e09jb!Y09jc!e09jd!Y09je09k2e09k3!Y09k409kye09kz!Y09l0!e09l1!Y09l2!e09l3!Y09l409l9e09la!Y09lb09lge09lh09liY09ll09lmA09ln09lqY09lr!e09ls09ltY09lu!e09lv!Y09lw!e09lx!Y09ly!e09lz!Y09m0!e09m1!Y09m209mqe09mr!Y09ms09nme09nn!Y09no!e09np!Y09nq!e09nr!Y09ns09nxe09ny!Y09nz09o4e09o509o6Y09o709oae09ob09oeY09of!e09ol09pre09pt09see09sg09ure09v409vjY09vk09wee09wg09xje09xk09xrI09xs0fcve0fcw0fenI0feo0vmce0vmd!Y0vme0wi4e0wi80wjqe0wk00wl9I0wla0wlbB0wlc0wssI0wst!B0wsu!G0wsv!B0wsw0wtbI0wtc0wtlQ0wtm0wviI0wvj0wvmA0wvn!I0wvo0wvxA0wvy0wwtI0wwu0wwvA0www0wz3I0wz40wz5A0wz6!I0wz70wzbB0wzk0x6pI0x6q!A0x6r0x6tI0x6u!A0x6v0x6yI0x6z!A0x700x7mI0x7n0x7rA0x7s0x7vI0x7w!A0x800x87I0x88!K0x890x9vI0x9w0x9xT0x9y0x9zG0xa80xa9A0xaa0xbnI0xbo0xc5A0xce0xcfB0xcg0xcpQ0xcw0xddA0xde0xdnI0xdo!T0xdp0xdqI0xdr!A0xds0xe1Q0xe20xetI0xeu0xf1A0xf20xf3B0xf40xfqI0xfr0xg3A0xgf!I0xgg0xh8V0xhc0xhfA0xhg0xiqI0xir0xj4A0xj50xjaI0xjb0xjdB0xje0xjjI0xjk0xjtQ0xjy0xkfI0xkg0xkpQ0xkq0xm0I0xm10xmeA0xmo0xmqI0xmr!A0xms0xmzI0xn00xn1A0xn40xndQ0xng!I0xnh0xnjB0xnk0xreI0xrf0xrjA0xrk0xrlB0xrm0xroI0xrp0xrqA0xs10xyaI0xyb0xyiA0xyj!B0xyk0xylA0xyo0xyxQ0xz4!g0xz50xzvh0xzw!g0xzx0y0nh0y0o!g0y0p0y1fh0y1g!g0y1h0y27h0y28!g0y290y2zh0y30!g0y310y3rh0y3s!g0y3t0y4jh0y4k!g0y4l0y5bh0y5c!g0y5d0y63h0y64!g0y650y6vh0y6w!g0y6x0y7nh0y7o!g0y7p0y8fh0y8g!g0y8h0y97h0y98!g0y990y9zh0ya0!g0ya10yarh0yas!g0yat0ybjh0ybk!g0ybl0ycbh0ycc!g0ycd0yd3h0yd4!g0yd50ydvh0ydw!g0ydx0yenh0yeo!g0yep0yffh0yfg!g0yfh0yg7h0yg8!g0yg90ygzh0yh0!g0yh10yhrh0yhs!g0yht0yijh0yik!g0yil0yjbh0yjc!g0yjd0yk3h0yk4!g0yk50ykvh0ykw!g0ykx0ylnh0ylo!g0ylp0ymfh0ymg!g0ymh0yn7h0yn8!g0yn90ynzh0yo0!g0yo10yorh0yos!g0yot0ypjh0ypk!g0ypl0yqbh0yqc!g0yqd0yr3h0yr4!g0yr50yrvh0yrw!g0yrx0ysnh0yso!g0ysp0ytfh0ytg!g0yth0yu7h0yu8!g0yu90yuzh0yv0!g0yv10yvrh0yvs!g0yvt0ywjh0ywk!g0ywl0yxbh0yxc!g0yxd0yy3h0yy4!g0yy50yyvh0yyw!g0yyx0yznh0yzo!g0yzp0z0fh0z0g!g0z0h0z17h0z18!g0z190z1zh0z20!g0z210z2rh0z2s!g0z2t0z3jh0z3k!g0z3l0z4bh0z4c!g0z4d0z53h0z54!g0z550z5vh0z5w!g0z5x0z6nh0z6o!g0z6p0z7fh0z7g!g0z7h0z87h0z88!g0z890z8zh0z90!g0z910z9rh0z9s!g0z9t0zajh0zak!g0zal0zbbh0zbc!g0zbd0zc3h0zc4!g0zc50zcvh0zcw!g0zcx0zdnh0zdo!g0zdp0zefh0zeg!g0zeh0zf7h0zf8!g0zf90zfzh0zg0!g0zg10zgrh0zgs!g0zgt0zhjh0zhk!g0zhl0zibh0zic!g0zid0zj3h0zj4!g0zj50zjvh0zjw!g0zjx0zknh0zko!g0zkp0zlfh0zlg!g0zlh0zm7h0zm8!g0zm90zmzh0zn0!g0zn10znrh0zns!g0znt0zojh0zok!g0zol0zpbh0zpc!g0zpd0zq3h0zq4!g0zq50zqvh0zqw!g0zqx0zrnh0zro!g0zrp0zsfh0zsg!g0zsh0zt7h0zt8!g0zt90ztzh0zu0!g0zu10zurh0zus!g0zut0zvjh0zvk!g0zvl0zwbh0zwc!g0zwd0zx3h0zx4!g0zx50zxvh0zxw!g0zxx0zynh0zyo!g0zyp0zzfh0zzg!g0zzh1007h1008!g1009100zh1010!g1011101rh101s!g101t102jh102k!g102l103bh103c!g103d1043h1044!g1045104vh104w!g104x105nh105o!g105p106fh106g!g106h1077h1078!g1079107zh1080!g1081108rh108s!g108t109jh109k!g109l10abh10ac!g10ad10b3h10b4!g10b510bvh10bw!g10bx10cnh10co!g10cp10dfh10dg!g10dh10e7h10e8!g10e910ezh10f0!g10f110frh10fs!g10ft10gjh10gk!g10gl10hbh10hc!g10hd10i3h10i4!g10i510ivh10iw!g10ix10jnh10jo!g10jp10kfh10kg!g10kh10l7h10l8!g10l910lzh10m0!g10m110mrh10ms!g10mt10njh10nk!g10nl10obh10oc!g10od10p3h10p4!g10p510pvh10pw!g10px10qnh10qo!g10qp10rfh10rg!g10rh10s7h10s8!g10s910szh10t0!g10t110trh10ts!g10tt10ujh10uk!g10ul10vbh10vc!g10vd10w3h10w4!g10w510wvh10ww!g10wx10xnh10xo!g10xp10yfh10yg!g10yh10z7h10z8!g10z910zzh1100!g1101110rh110s!g110t111jh111k!g111l112bh112c!g112d1133h1134!g1135113vh113w!g113x114nh114o!g114p115fh115g!g115h1167h1168!g1169116zh1170!g1171117rh117s!g117t118jh118k!g118l119bh119c!g119d11a3h11a4!g11a511avh11aw!g11ax11bnh11bo!g11bp11cfh11cg!g11ch11d7h11d8!g11d911dzh11e0!g11e111erh11es!g11et11fjh11fk!g11fl11gbh11gc!g11gd11h3h11h4!g11h511hvh11hw!g11hx11inh11io!g11ip11jfh11jg!g11jh11k7h11k8!g11k911kzh11l0!g11l111lrh11ls!g11lt11mjh11mk!g11ml11nbh11nc!g11nd11o3h11o4!g11o511ovh11ow!g11ox11pnh11po!g11pp11qfh11qg!g11qh11r7h11r8!g11r911rzh11s0!g11s111srh11ss!g11st11tjh11tk!g11tl11ubh11uc!g11ud11v3h11v4!g11v511vvh11vw!g11vx11wnh11wo!g11wp11xfh11xg!g11xh11y7h11y8!g11y911yzh11z0!g11z111zrh11zs!g11zt120jh120k!g120l121bh121c!g121d1223h1224!g1225122vh122w!g122x123nh123o!g123p124fh124g!g124h1257h1258!g1259125zh1260!g1261126rh126s!g126t127jh127k!g127l128bh128c!g128d1293h1294!g1295129vh129w!g129x12anh12ao!g12ap12bfh12bg!g12bh12c7h12c8!g12c912czh12d0!g12d112drh12ds!g12dt12ejh12ek!g12el12fbh12fc!g12fd12g3h12g4!g12g512gvh12gw!g12gx12hnh12ho!g12hp12ifh12ig!g12ih12j7h12j8!g12j912jzh12k0!g12k112krh12ks!g12kt12ljh12lk!g12ll12mbh12mc!g12md12n3h12n4!g12n512nvh12nw!g12nx12onh12oo!g12op12pfh12pg!g12ph12q7h12q8!g12q912qzh12r0!g12r112rrh12rs!g12rt12sjh12sk!g12sl12tbh12tc!g12td12u3h12u4!g12u512uvh12uw!g12ux12vnh12vo!g12vp12wfh12wg!g12wh12x7h12x8!g12x912xzh12y0!g12y112yrh12ys!g12yt12zjh12zk!g12zl130bh130c!g130d1313h1314!g1315131vh131w!g131x132nh132o!g132p133fh133g!g133h1347h1348!g1349134zh1350!g1351135rh135s!g135t136jh136k!g136l137bh137c!g137d1383h1384!g1385138vh138w!g138x139nh139o!g139p13afh13ag!g13ah13b7h13b8!g13b913bzh13c0!g13c113crh13cs!g13ct13djh13dk!g13dl13ebh13ec!g13ed13f3h13f4!g13f513fvh13fw!g13fx13gnh13go!g13gp13hfh13hg!g13hh13i7h13i8!g13i913izh13j0!g13j113jrh13js!g13jt13kjh13kk!g13kl13lbh13lc!g13ld13m3h13m4!g13m513mvh13mw!g13mx13nnh13no!g13np13ofh13og!g13oh13p7h13p8!g13p913pzh13q0!g13q113qrh13qs!g13qt13rjh13rk!g13rl13sbh13sc!g13sd13t3h13t4!g13t513tvh13tw!g13tx13unh13uo!g13up13vfh13vg!g13vh13w7h13w8!g13w913wzh13x0!g13x113xrh13xs!g13xt13yjh13yk!g13yl13zbh13zc!g13zd1403h1404!g1405140vh140w!g140x141nh141o!g141p142fh142g!g142h1437h1438!g1439143zh1440!g1441144rh144s!g144t145jh145k!g145l146bh146c!g146d1473h1474!g1475147vh147w!g147x148nh148o!g148p149fh149g!g149h14a7h14a8!g14a914azh14b0!g14b114brh14bs!g14bt14cjh14ck!g14cl14dbh14dc!g14dd14e3h14e4!g14e514evh14ew!g14ex14fnh14fo!g14fp14gfh14gg!g14gh14h7h14h8!g14h914hzh14i0!g14i114irh14is!g14it14jjh14jk!g14jl14kbh14kc!g14kd14l3h14l4!g14l514lvh14lw!g14lx14mnh14mo!g14mp14nfh14ng!g14nh14o7h14o8!g14o914ozh14p0!g14p114prh14ps!g14pt14qjh14qk!g14ql14rbh14rc!g14rd14s3h14s4!g14s514svh14sw!g14sx14tnh14to!g14tp14ufh14ug!g14uh14v7h14v8!g14v914vzh14w0!g14w114wrh14ws!g14wt14xjh14xk!g14xl14ybh14yc!g14yd14z3h14z4!g14z514zvh14zw!g14zx150nh150o!g150p151fh151g!g151h1527h1528!g1529152zh1530!g1531153rh153s!g153t154jh154k!g154l155bh155c!g155d1563h1564!g1565156vh156w!g156x157nh157o!g157p158fh158g!g158h1597h1598!g1599159zh15a0!g15a115arh15as!g15at15bjh15bk!g15bl15cbh15cc!g15cd15d3h15d4!g15d515dvh15dw!g15dx15enh15eo!g15ep15ffh15fg!g15fh15g7h15g8!g15g915gzh15h0!g15h115hrh15hs!g15ht15ijh15ik!g15il15jbh15jc!g15jd15k3h15k4!g15k515kvh15kw!g15kx15lnh15lo!g15lp15mfh15mg!g15mh15n7h15n8!g15n915nzh15o0!g15o115orh15os!g15ot15pjh15pk!g15pl15qbh15qc!g15qd15r3h15r4!g15r515rvh15rw!g15rx15snh15so!g15sp15tfh15tg!g15th15u7h15u8!g15u915uzh15v0!g15v115vrh15vs!g15vt15wjh15wk!g15wl15xbh15xc!g15xd15y3h15y4!g15y515yvh15yw!g15yx15znh15zo!g15zp160fh160g!g160h1617h1618!g1619161zh1620!g1621162rh162s!g162t163jh163k!g163l164bh164c!g164d1653h1654!g1655165vh165w!g165x166nh166o!g166p167fh167g!g167h1687h1688!g1689168zh1690!g1691169rh169s!g169t16ajh16ak!g16al16bbh16bc!g16bd16c3h16c4!g16c516cvh16cw!g16cx16dnh16do!g16dp16efh16eg!g16eh16f7h16f8!g16f916fzh16g0!g16g116grh16gs!g16gt16hjh16hk!g16hl16ibh16ic!g16id16j3h16j4!g16j516jvh16jw!g16jx16knh16ko!g16kp16lfh16ls16meW16mj16nvX16o01d6nI1d6o1dkve1dkw1dljI1dlp!U1dlq!A1dlr1dm0U1dm1!I1dm21dmeU1dmg1dmkU1dmm!U1dmo1dmpU1dmr1dmsU1dmu1dn3U1dn41e0tI1e0u!R1e0v!L1e1c1e63I1e64!K1e65!I1e681e6nA1e6o!N1e6p1e6qR1e6r1e6sN1e6t1e6uG1e6v!L1e6w!R1e6x!c1e741e7jA1e7k1e7oe1e7p!L1e7q!R1e7r!L1e7s!R1e7t!L1e7u!R1e7v!L1e7w!R1e7x!L1e7y!R1e7z!L1e80!R1e81!L1e82!R1e83!L1e84!R1e851e86e1e87!L1e88!R1e891e8fe1e8g!R1e8h!e1e8i!R1e8k1e8lY1e8m1e8nG1e8o!e1e8p!L1e8q!R1e8r!L1e8s!R1e8t!L1e8u!R1e8v1e92e1e94!e1e95!J1e96!K1e97!e1e9c1ed8I1edb!d1edd!G1ede1edfe1edg!J1edh!K1edi1edje1edk!L1edl!R1edm1edne1edo!R1edp!e1edq!R1edr1ee1e1ee21ee3Y1ee41ee6e1ee7!G1ee81eeye1eez!L1ef0!e1ef1!R1ef21efue1efv!L1efw!e1efx!R1efy!e1efz!L1eg01eg1R1eg2!L1eg31eg4R1eg5!Y1eg6!e1eg71eggY1egh1ehpe1ehq1ehrY1ehs1eime1eiq1eive1eiy1ej3e1ej61ejbe1eje1ejge1ejk!K1ejl!J1ejm1ejoe1ejp1ejqJ1ejs1ejyI1ek91ekbA1ekc!i1ekd1ereI1erk1ermB1err1eykI1eyl!A1f281f4gI1f4w!A1f4x1f91I1f921f96A1f9c1fa5I1fa7!B1fa81fbjI1fbk!B1fbl1fh9I1fhc1fhlQ1fhs1g7pI1g7r!B1g7s1gd7I1gdb!B1gdc1gjkI1gjl1gjnA1gjp1gjqA1gjw1gjzA1gk01gl1I1gl41gl6A1glb!A1glc1glkI1gls1glzB1gm01gpwI1gpx1gpyA1gq31gq7I1gq81gqdB1gqe!c1gqo1gs5I1gs91gsfB1gsg1h5vI1h5w1h5zA1h681h6hQ1heo1hgpI1hgr1hgsA1hgt!B1hgw1hl1I1hl21hlcA1hld1hpyI1hq81hqaA1hqb1hrrI1hrs1hs6A1hs71hs8B1hs91ht1I1ht21htbQ1htr1htuA1htv1hv3I1hv41hveA1hvf1hvhI1hvi1hvlB1hvx1hwoI1hww1hx5Q1hxc1hxeA1hxf1hyeI1hyf1hysA1hyu1hz3Q1hz41hz7B1hz8!I1hz91hzaA1hzb1i0iI1i0j!A1i0k!I1i0l!T1i0m!I1i0w1i0yA1i0z1i2aI1i2b1i2oA1i2p1i2sI1i2t1i2uB1i2v!I1i2w!B1i2x1i30A1i31!I1i321i33A1i341i3dQ1i3e!I1i3f!T1i3g!I1i3h1i3jB1i3l1i5nI1i5o1i5zA1i601i61B1i62!I1i631i64B1i65!I1i66!A1i801i94I1i95!B1i9c1iamI1ian1iayA1ib41ibdQ1ibk1ibnA1ibp1id5I1id71id8A1id9!I1ida1idgA1idj1idkA1idn1idpA1ids!I1idz!A1ie51ie9I1iea1iebA1iee1iekA1ieo1iesA1iio1ik4I1ik51ikmA1ikn1ikqI1ikr1ikuB1ikv!I1ikw1il5Q1il61il7B1il9!I1ila!A1ilb1injI1ink1io3A1io41io7I1iog1iopQ1itc1iumI1iun1iutA1iuw1iv4A1iv5!T1iv61iv7B1iv81iv9G1iva1ivcI1ivd1ivrB1ivs1ivvI1ivw1ivxA1iww1iy7I1iy81iyoA1iyp1iyqB1iyr1iysI1iz41izdQ1izk1izwT1j0g1j1mI1j1n1j1zA1j20!I1j281j2hQ1j401j57I1j5c1j5lQ1j5m1j5nI1j5o1j5qB1j5r1jcbI1jcc1jcqA1jcr1jhbI1jhc1jhlQ1jhm1jjjI1jjk1jjpA1jjr1jjsA1jjv1jjyA1jjz!I1jk0!A1jk1!I1jk21jk3A1jk41jk6B1jkg1jkpQ1jmo1jo0I1jo11jo7A1joa1jogA1joh!I1joi!T1joj!I1jok!A1jpc!I1jpd1jpmA1jpn1jqqI1jqr1jqxA1jqy!I1jqz1jr2A1jr3!T1jr4!I1jr51jr8B1jr9!T1jra!I1jrb!A1jrk!I1jrl1jrvA1jrw1jt5I1jt61jtlA1jtm1jtoB1jtp!I1jtq1jtsT1jtt1jtuB1juo1k4uI1k4v1k52A1k541k5bA1k5c!I1k5d1k5hB1k5s1k61Q1k621k6kI1k6o!T1k6p!G1k6q1k7jI1k7m1k87A1k891k8mA1kao1kc0I1kc11kc6A1kca!A1kcc1kcdA1kcf1kclA1kcm!I1kcn!A1kcw1kd5Q1kdc1kehI1kei1kemA1keo1kepA1ker1kevA1kew!I1kf41kfdQ1ko01koiI1koj1komA1kon1kv0I1kv11kv4K1kv51kvlI1kvz!B1kw01lriI1lrk1lroB1ls01oifI1oig1oiiL1oij1oilR1oim1ojlI1ojm!R1ojn1ojpI1ojq!L1ojr!R1ojs!L1ojt!R1oju1oqgI1oqh!L1oqi1oqjR1oqk1oviI1ovk1ovqS1ovr!L1ovs!R1s001sctI1scu!L1scv!R1scw1zkuI1zkw1zl5Q1zla1zlbB1zo01zotI1zow1zp0A1zp1!B1zpc1zqnI1zqo1zquA1zqv1zqxB1zqy1zr7I1zr8!B1zr9!I1zrk1zrtQ1zrv20euI20ev20ewB20ex20juI20jz!A20k0!I20k120ljA20lr20luA20lv20m7I20o020o3Y20o4!S20og20ohA20ow25fbe25fk260ve260w26dxI26f426fce2dc02djye2dlc2dleY2dlw2dlzY2dm82dx7e2fpc2ftoI2ftp2ftqA2ftr!B2fts2ftvA2jnk2jxgI2jxh2jxlA2jxm2jxoI2jxp2jyaA2jyb2jycI2jyd2jyjA2jyk2jzdI2jze2jzhA2jzi2k3lI2k3m2k3oA2k3p2l6zI2l722l8fQ2l8g2lmnI2lmo2lo6A2lo72loaI2lob2lpoA2lpp2lpwI2lpx!A2lpy2lqbI2lqc!A2lqd2lqeI2lqf2lqiB2lqj!I2lqz2lr3A2lr52lrjA2mtc2mtiA2mtk2mu0A2mu32mu9A2mub2mucA2mue2muiA2n0g2n1oI2n1s2n1yA2n1z2n25I2n282n2hQ2n2m2ne3I2ne42ne7A2ne82nehQ2nen!J2oe82ojzI2ok02ok6A2olc2on7I2on82oneA2onf!I2onk2ontQ2ony2onzL2p9t2pbfI2pbg!K2pbh2pbjI2pbk!K2pbl2prlI2pz42q67e2q682q6kI2q6l2q6ne2q6o2q98I2q992q9be2q9c2qb0I2qb12qcle2qcm2qdbj2qdc2qo4e2qo5!f2qo62qore2qos2qotI2qou2qpge2qph2qpiI2qpj2qpne2qpo!I2qpp2qpte2qpu2qpwf2qpx2qpye2qpz!f2qq02qq1e2qq22qq4f2qq52qree2qrf2qrjk2qrk2qtde2qte2qtff2qtg2qthe2qti2qtsf2qtt2qude2que2quwf2qux2quze2qv0!f2qv12qv4e2qv52qv7f2qv8!e2qv92qvbf2qvc2qvie2qvj!f2qvk!e2qvl!f2qvm2qvze2qw0!I2qw1!e2qw2!I2qw3!e2qw4!I2qw52qw9e2qwa!f2qwb2qwee2qwf!I2qwg!e2qwh2qwiI2qwj2qyne2qyo2qyuI2qyv2qzae2qzb2qzoI2qzp2r01e2r022r0pI2r0q2r1ve2r1w2r1xf2r1y2r21e2r22!f2r232r2ne2r2o!f2r2p2r2se2r2t2r2uf2r2v2r4je2r4k2r4rI2r4s2r5fe2r5g2r5lI2r5m2r7oe2r7p2r7rf2r7s2r7ue2r7v2r7zf2r802r91I2r922r94H2r952r97Y2r982r9bI2r9c2raae2rab!f2rac2rare2ras2rauf2rav2rb3e2rb4!f2rb52rbfe2rbg!f2rbh2rcve2rcw2rg3I2rg42rgfe2rgg2risI2rit2rjze2rk02rkbI2rkc2rkfe2rkg2rlzI2rm02rm7e2rm82rmhI2rmi2rmne2rmo2rnrI2rns2rnze2ro02rotI2rou2rr3e2rr42rrfI2rrg!f2rrh2rrie2rrj!f2rrk2rrre2rrs2rrzf2rs02rs5e2rs6!f2rs72rsfe2rsg2rspf2rsq2rsre2rss2rsuf2rsv2ruee2ruf!f2rug2rw4e2rw52rw6f2rw7!e2rw82rw9f2rwa!e2rwb!f2rwc2rwse2rwt2rwvf2rww!e2rwx2rx9f2rxa2ry7e2ry82s0jI2s0k2s5be2s5c2sayI2sc02sc9Q2scg2t4te2t4w47p9e47pc5m9pejny9!Ajnz4jo1rAjo5cjobzAl2ionvnhI",F:"A ShapeHitbox needs a PositionComponent ancestor",U:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",A:"Cannot extract a file path from a URI with a fragment component",B:"Cannot extract a file path from a URI with a query component",Q:"Cannot extract a non-Windows file path from a file URI with an authority",c:"Cannot fire new event. Controller is already firing an event",I:'E533333333333333333333333333DDDDDDD4333333333333333333334C43333CD53333333333333333333333UEDTE4\x933343333\x933333333333333333333333333D433333333333333333CDDEDDD43333333S5333333333333333333333C333333D533333333333333333333333SUDDDDT5\x9933CD4E333333333333333333333333UEDDDDE433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333TUUS5CT\x94\x95E3333333333333333333333333333333333333333333333333333333333333333333333SUDD3DUU43533333333333333333C3333333333333w733337333333s3333333w7333333333w33333333333333333333CDDTETE43333ED4S5SE3333C33333D33333333333334E433C3333333C33333333333333333333333333333CETUTDT533333CDDDDDDDDDD3333333343333333D$433333333333333333333333SUDTEE433C34333333333333333333333333333333333333333333333333333333333333333333333333333333TUDDDD3333333333CT5333333333333333333333333333DCEUU3U3U5333343333S5CDDD3CDD333333333333333333333333333333333333333333333333333333333333333333333s73333s33333333333""""""""333333339433333333333333CDDDDDDDDDDDDDDDD3333333CDDDDDDDDDDD\x94DDDDDDDDDDDDDDDDDDDDDDDD33333333DDDDDDDD3333333373s333333333333333333333333333333CDTDDDCTE43C4CD3C333333333333333D3C33333\xee\xee\xed\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xed\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xed\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee333333\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb33\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc<3sww73333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww7333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww7333333w7333333333333333733333333333333333333333333333sww733333s7333333s3wwwww333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwgffffffffffffvww7wwwwwwswwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww733333333333333333333333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww7333333333333333333333333333333333333333333333333333333333swwwww7333333333333333333333333333333333333333333wwwwwwwwwwwwwwwwwwwww7swwwwwss33373733s33333w33333CT333333333333333EDTETD433333333#\x14"333333333333"""233333373ED4U5UE9333C33333D33333333333333www3333333s73333333333EEDDDCC3DDDDUUUDDDDD3T5333333333333333333333333333CCU3333333333333333333333333333334EDDD33SDD4D5U4333333333C43333333333CDDD9DDD3DCD433333333C433333333333333C433333333333334443SEUCUSE4333D33333C43333333533333CU33333333333333333333333333334EDDDD3CDDDDDDDDDDDDDDDDDDDDDDDDDDD33DDDDDDDDDDDDDDDDDDDDDDDDD33334333333C33333333333DD4DDDDDDD433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CSUUUUUUUUUUUUUUUUUUUUUUUUUUU333CD43333333333333333333333333333333333333333433333U3333333333333333333333333UUUUUUTEDDDDD3333C3333333333333333373333333333s333333333333swwwww33w733wwwwwww73333s33333333337swwwwsw73333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDD4D33CDDDDDCDDDDDDDDDDDDDDDDD43EDDDTUEUCDDD33333D33333333333333DDCDDDDCDCDD333333333DT33333333333333D5333333333333333333333333333CSUE4333333333333CDDDDDDDD4333333DT33333333333333333333333CUDDUDU3SUSU43333433333333333333333333ET533E3333SDD3U3U4333D43333C43333333333333s733333s33333333333CTE333333333333333333UUUUDDDDUD3333"""""(\x02"""""""""3333333333333333333DDDD333333333333333333333333CDDDD3333C3333T333333333333333333333334343C33333333333SET334333333333DDDDDDDDDDDDDDDDDDDDDD4DDDDDDDD4CDDDC4DD43333333333333333333333333333333333333333333333333C33333333333333333333333333333333333333333333333333333333333333333333333333333333DDD433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334333333333333333333333333333333DD3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333DD433333333333333333333333333333DDD43333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333DDDDDDD533333333333333333333333DDDTTU5D4DD333C433333D333333333333333333333DDD733333s373ss33w7733333ww733333333333ss33333333333333333333333333333ww3333333333333333333333333333wwww33333www33333333333333333333wwww333333333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww333333wwwwwwwwwwwwwwwwwwwwwww7wwwwwswwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww73333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333C4""333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333DD3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333DDD4333333333333333333333333333333333333333333333333333333DDD4333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333UEDDDTEE43333333333333333333333333333333333333333333333333333CEUDDDE33333333333333333333333333333333333333333333333333CD3DDEDD3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333EDDDCDDT43333333333333333333333333333333333333333CDDDDDDDDDD4EDDDETD3333333333333333333333333333333333333333333333333333333333333DDD3CC4DDD\x94433333333333333333333333333333333SUUC4UT4333333333333333333333333333333333333333333333333333#"""""""B333DDDDDDD433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CED3SDD$"""BDDD4CDDD333333333333333DD33333333333333333333333333333333333333333DEDDDUE333333333333333333333333333CCD3D33CD533333333333333333333333333CESEU3333333333333333333DDDD433333CU33333333333333333333333333334DC44333333333333333333333333333CD4DDDDD33333333333333333333DDD\x95DD333343333DDDUD43333333333333333333\x93\x99\x99IDDDDDDE43333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CDDDDDDDDDDDDDDDDDDDDDD4CDDDDDDDDDDD33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CD3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333433333333333333333333333333333333333333333333333333333333333333333333333333DD4333333333333333333333333333333333333333333333333333333333333333333""""""33D4D33CD43333333333333333333CD3343333333333333333333333333333333333333333333333333333333333333333333333333333333333D33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CT53333DY333333333333333333333333UDD43UT43333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333D3333333333333333333333333333333333333333D43333333333333333333333333333333333CDDDDD333333333333333333333333CD4333333333333333333333333333333333333333333333333333333333333SUDDDDUDT43333333333343333333333333333333333333333333333333333TEDDTTEETD333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CUDD3UUDE43333333333333D3333333333333333343333333333SE43CD33333333DD33333C33TEDCSUUU433333333S533333CDDDDDU333333\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa:3\x99\x99\x9933333DDDDD4233333333333333333UTEUS433333333CDCDDDDDDEDDD33433C3E433#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD$"""""""""""""""2333373r33333333\x93933CDDD4333333333333333CDUUDU53SEUUUD43\xa3\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xba\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\f',w:"Error handler must accept one Object or one Object and a StackTrace as arguments, and return a value of the returned future's type",O:"Failed to load network image.\nImage URL: ",d:'If non-null, "colors" length must match that of "transforms" and "rects".',x:"Node already has a parent, copy or remove it first",g:'PathMetricIterator is not pointing to a PathMetric. This can happen in two situations:\n- The iteration has not started yet. If so, call "moveNext" to start iteration.\n- The iterator ran out of elements. If so, check that "moveNext" returns true prior to calling "current".',V:"Stream has been disposed.\nAn ImageStream is considered disposed once at least one listener has been added and subsequently all listeners have been removed and no handles are outstanding from the keepAlive method.\nTo resolve this error, maintain at least one listener on the stream, or create an ImageStreamCompleterHandle from the keepAlive method, or create a new stream for the image.",p:"SystemChrome.setApplicationSwitcherDescription",W:"TextInputClient.updateEditingStateWithDeltas",l:"TextInputClient.updateEditingStateWithTag",u:"There was a problem trying to load FontManifest.json",t:"Use JsonReader.setLenient(true) to accept malformed JSON",P:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxElEQVQ4jYWTMQ7DIAxFIeoNuAGK1K1ISL0DMwOHzNC5p6iUPeoNOEM7GZnPJ/EUbP7Lx7KtIfH91B/L++gs5m5M9NreTN/dEZiVghatwbXvY68UlksyPjprRaxFGAJZg+uAuSSzzC7rEDirDYAz2wg0RjWRFa/EUwdnQnQ37QFe1Odjrw04AKTTaBXPAlx8dDaXdNk4rMsc0B7ge/UcYLTZxoFizxCQ/L0DMAhaX4Mzj/uzW6phu3AvtHUUU4BAWJ6t8x9N/HHcruXjwQAAAABJRU5ErkJggg==",y:"gl_Position = ((u_ctransform * position) * u_scale) + u_shift;",Z:"max must be in range 0 < max \u2264 2^32, was ",J:"vec2 center = 0.5 * (u_resolution + u_tile_offset);",E:"vec4 localCoord = m_gradient * vec4(gl_FragCoord.x - center.x, center.y - gl_FragCoord.y, 0, 1);",R:"\u1ac4\u2bb8\u411f\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u3f4f\u0814\u32b6\u32b6\u32b6\u32b6\u1f81\u32b6\u32b6\u32b6\u1bbb\u2f6f\u3cc2\u051e\u32b6\u11d3\u079b\u2c12\u3967\u1b18\u18aa\u392b\u414f\u07f1\u2eb5\u1880\u1123\u047a\u1909\u08c6\u1909\u11af\u2f32\u1a19\u04d1\u19c3\u2e6b\u209a\u1298\u1259\u0667\u108e\u1160\u3c49\u116f\u1b03\u12a3\u1f7c\u121b\u2023\u1840\u34b0\u088a\u3c13\u04b6\u32b6\u41af\u41cf\u41ef\u4217\u32b6\u32b6\u32b6\u32b6\u32b6\u3927\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u18d8\u1201\u2e2e\u15be\u0553\u32b6\u3be9\u32b6\u416f\u32b6\u32b6\u32b6\u1a68\u10e5\u2a59\u2c0e\u205e\u2ef3\u1019\u04e9\u1a84\u32b6\u32b6\u3d0f\u32b6\u32b6\u32b6\u3f4f\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u104e\u076a\u32b6\u07bb\u15dc\u32b6\u10ba\u32b6\u32b6\u32b6\u32b6\u32b6\u1a3f\u32b6\u0cf2\u1606\u32b6\u32b6\u32b6\u0877\u32b6\u32b6\u073d\u2139\u0dcb\u0bcb\u09b3\u0bcb\u0fd9\u20f7\u03e3\u32b6\u32b6\u32b6\u32b6\u32b6\u0733\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u041d\u0864\u32b6\u32b6\u32b6\u32b6\u32b6\u3915\u32b6\u3477\u32b6\u3193\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u20be\u32b6\u36b1\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u2120\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u2f80\u36ac\u369a\u32b6\u32b6\u32b6\u32b6\u1b8c\u32b6\u1584\u1947\u1ae4\u3c82\u1986\u03b8\u043a\u1b52\u2e77\u19d9\u32b6\u32b6\u32b6\u3cdf\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u093a\u0973\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u3498\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u0834\u32b6\u32b6\u2bb8\u32b6\u32b6\u36ac\u35a6\u32b9\u33d6\u32b6\u32b6\u32b6\u35e5\u24ee\u3847\x00\u0567\u3a12\u2826\u01d4\u2fb3\u29f7\u36f2\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u2bc7\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u1e54\u32b6\u1394\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u2412\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u30b3\u2c62\u3271\u32b6\u32b6\u32b6\u12e3\u32b6\u32b6\u1bf2\u1d44\u2526\u32b6\u2656\u32b6\u32b6\u32b6\u0bcb\u1645\u0a85\u0ddf\u2168\u22af\u09c3\u09c5\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u3f2f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6"} +var t=(function rtii(){var s=A.ac +return{aU:s("mV"),od:s("cm"),gj:s("bBM"),_L:s("xL"),GI:s("xM"),y2:s("xN"),xQ:s("fL"),pC:s("xO"),Vx:s("aG"),gL:s("xR"),MC:s("us"),ma:s("xT"),so:s("dZ"),ve:s("dZ"),Bs:s("dZ"),s1:s("KK"),XI:s("xU"),vp:s("xV"),S7:s("KM"),jo:s("awv"),pR:s("uu"),aM:s("a_e"),Pg:s("j_"),ag:s("xX"),ue:s("a_i"),M1:s("a_k"),kX:s("xY"),bx:s("nX"),cr:s("nX>"),Fc:s("nX"),Cu:s("nX"),iI:s("jv"),w9:s("xZ"),Jv:s("ux"),Al:s("uy"),oW:s("y_"),UY:s("y0"),a_:s("qH"),dP:s("qJ"),RD:s("y2"),Ah:s("qK"),Ye:s("fa"),o9:s("ki"),LK:s("fo"),m_:s("dO"),hm:s("y7"),k:s("bb"),q:s("j0"),rR:s("fN"),Si:s("nZ"),eu:s("Lf"),kn:s("Lg"),Xj:s("bCo"),pI:s("DF"),V4:s("cX"),wY:s("e1"),nz:s("e1"),P0:s("e1"),vr:s("e1"),gv:s("e1"),fN:s("e1"),Tx:s("e1"),AX:s("e1"),sl:s("e1"),j5:s("e1"),_n:s("e1"),ZQ:s("e1"),f6:s("e1"),O1:s("y9"),T_:s("uD"),oO:s("ya"),UT:s("yb"),qp:s("yc"),Ak:s("a0e"),p7:s("hk?,eA<@>>"),z3:s("iF(ah,B?)"),I2:s("a0l"),vg:s("bu"),wq:s("Lm>"),g9:s("jy"),zR:s("Ln"),ES:s("bCx"),R6:s("yg"),iX:s("DR"),qI:s("qT"),Lh:s("Lu"),XY:s("yh"),p1:s("o0"),qo:s("DU"),z7:s("a0O"),m6:s("Lw"),E_:s("Lx"),Bn:s("yi"),wW:s("qU"),S3:s("Ly"),BQ:s("DV"),V1:s("a0S"),nR:s("LA"),Kb:s("a0U()"),hl:s("uG"),u2:s("yk"),xG:s("DZ"),O5:s("yl"),vh:s("LI"),iK:s("LJ"),Hz:s("l9"),hP:s("lU"),c8:s("yn"),Oi:s("cP"),jI:s("uJ"),G:s("n"),oD:s("yo"),bV:s("lV"),IC:s("fp"),zC:s("dC"),F:s("y"),ny:s("i3"),Ms:s("E3"),y6:s("yr"),t8:s("p9"),gb:s("E7"),C8:s("jz"),ab:s("yu"),u7:s("yw"),s9:s("qY"),qO:s("yy"),li:s("bV"),F6:s("bV"),eL:s("bV"),fF:s("i4"),nE:s("qZ"),_D:s("j4"),fK:s("yz"),vn:s("Ee"),v:s("j5"),pU:s("aZ>"),OS:s("Eg>"),VQ:s("Eg"),Hx:s("LW"),NT:s("a8"),d1:s("a1B"),ZC:s("i6"),ho:s("LZ"),H5:s("bDi"),HY:s("n2"),ip:s("uO"),jg:s("uP"),I7:s("Em"),Pe:s("r1"),l4:s("bDv"),Uf:s("uQ"),uy:s("bDz"),sp:s("Er"),rg:s("bXL"),yW:s("r3"),JX:s("a2k"),Mb:s("Mh"),Ac:s("Ex"),ew:s("Ey"),Z2:s("o4"),I:s("n4"),ra:s("bXR"),tK:s("a2s<@,@>"),xm:s("ld"),uZ:s("a2y>"),Rr:s("uU"),AI:s("r5"),HU:s("r6"),yN:s("a2D"),cL:s("yQ"),DL:s("bmf"),Di:s("jB"),iJ:s("yS"),vF:s("pf"),TF:s("le"),ej:s("yT"),Gm:s("ex"),d4:s("yU"),Ig:s("yV"),uL:s("o7"),zk:s("n6"),Rs:s("a2X"),cm:s("uV"),ty:s("bEl"),R7:s("i8"),U2:s("bEo"),MP:s("lg"),aD:s("hO"),Zz:s("uW"),Tu:s("bv"),Ys:s("n7"),A0:s("f0"),__:s("a37"),Cv:s("EH"),j1:s("f1"),KN:s("yX"),Ee:s("at<@>"),lU:s("e4"),U:s("b7"),Gt:s("bEB"),GB:s("bXX"),o_:s("lh>"),_H:s("a3b"),BF:s("uY"),_5:s("pg"),lz:s("r9"),m1:s("ph"),EM:s("z0"),IH:s("MP"),S9:s("a3f"),X8:s("a3g"),Q4:s("MR"),oy:s("z1"),TS:s("z1<~>"),Lt:s("dF"),I3:s("bh"),VI:s("c4"),IX:s("m0"),bh:s("z3"),oB:s("z4"),ii:s("ER"),o6:s("bEQ"),q_:s("aN"),_w:s("rb"),HH:s("rc"),OO:s("m2"),cP:s("rd"),b5:s("z6"),P9:s("re"),eI:s("z7"),Ie:s("MW"),xt:s("v1"),J:s("ae"),zS:s("ae()"),y5:s("N3"),eA:s("v3"),xz:s("pj"),wL:s("za"),iq:s("zb"),Ii:s("oa>"),vo:s("oa>"),TJ:s("oa<+(h,H)>"),US:s("lk"),MN:s("zc"),AC:s("ri"),s4:s("v4"),OE:s("v5"),IR:s("ri(a0)"),Kw:s("aEz"),mx:s("fd"),l5:s("v8"),JW:s("pl"),t1:s("F0"),zq:s("F1"),dg:s("Nf"),ia:s("zi"),BK:s("zj"),FK:s("jE"),jV:s("Nj"),kt:s("pm"),E:s("aB"),gx:s("m4<@>"),bE:s("j7"),OP:s("rl"),Uy:s("Nn"),VX:s("bYn"),Nh:s("ll"),oV:s("a45"),E4:s("rn"),_8:s("ro"),Qw:s("zn<@,@>"),iH:s("an"),pZ:s("an"),cd:s("an"),Z9:s("an"),xd:s("an(h,bA)"),wF:s("an"),Ev:s("an()"),L0:s("an<@>"),T8:s("an"),Yf:s("an>?>"),Rt:s("an"),wE:s("an"),r:s("an<~>"),lG:s("an<~>()"),GV:s("zo"),UQ:s("a4h"),bA:s("rp"),Fp:s("cc"),m:s("cc"),Lu:s("h8"),El:s("h8"),Pa:s("h8"),Ih:s("h8"),SP:s("F8"),nS:s("zp"),nd:s("ed"),uA:s("dU"),C1:s("dU"),Uv:s("dU"),jn:s("dU"),YC:s("dU"),hg:s("dU"),Qm:s("dU"),UN:s("dU"),ok:s("dU"),pL:s("dU"),fg:s("dU"),Bk:s("dU"),xR:s("zr"),mZ:s("zs"),py:s("oe>"),TX:s("zt"),bT:s("zt>"),Ks:s("a4r"),gm:s("Nv"),R1:s("of"),cU:s("n9"),Fs:s("lm"),rQ:s("bYw"),m3:s("bfe"),Em:s("vd"),EI:s("po"),uF:s("rq"),L6:s("NF"),AD:s("ds>"),cv:s("zw"),GF:s("rs"),op:s("rs<~(v7)>"),G7:s("a4O>"),rA:s("zx"),mS:s("zy"),AL:s("m5"),YX:s("rt"),zE:s("aW"),UU:s("zz"),gc:s("NL"),Lk:s("bn_"),g5:s("NO"),Oh:s("zD"),lu:s("eI"),oA:s("pq"),J2:s("a56"),fE:s("a57"),OX:s("j8"),hs:s("vi"),dY:s("zH"),dW:s("kq"),Tc:s("rw"),SG:s("pr"),Bc:s("vj"),WR:s("bYO"),IS:s("jG"),og:s("ft"),WB:s("cb"),dG:s("h9"),pl:s("NZ"),U1:s("oj"),pT:s("bnc"),JZ:s("aHS"),_Y:s("f3"),XO:s("vo"),rC:s("f3(a0,f3)"),RI:s("f3(a0)"),qq:s("f3(a0)"),Yx:s("f3(a0)"),UD:s("bnd"),ZP:s("bfo"),Av:s("aHT"),wt:s("bfp"),gD:s("vp"),vz:s("c9"),nQ:s("vq"),Ya:s("Fw"),vK:s("fe>"),fs:s("fe>>"),sM:s("vr"),K9:s("O2<@>"),JY:s("z<@>"),VG:s("z"),lY:s("v>"),_M:s("v"),WC:s("v"),QP:s("v"),Cj:s("v"),NS:s("v"),c_:s("v"),Q9:s("v"),hb:s("v"),PE:s("v>"),qh:s("v>"),ca:s("v>"),fn:s("v"),ga:s("v"),Pv:s("v"),SV:s("v"),Jf:s("v"),vA:s("v"),rK:s("v"),jz:s("v"),sq:s("v"),sN:s("v"),C:s("v"),Kh:s("v"),iW:s("v"),H0:s("v"),qN:s("v"),Cw:s("v"),wp:s("v>"),O:s("v"),tv:s("v>"),Ai:s("v"),W:s("v"),BR:s("v>"),td:s("v"),go:s("v"),KV:s("v"),kQ:s("v
"),MV:s("cz"),w6:s("cz"),kp:s("wi"),T0:s("tk"),H8:s("Bl"),Sa:s("Bm"),_6:s("R4"),es:s("wj"),ad:s("R8"),X2:s("tm"),XD:s("Bo"),oj:s("Hk"),pO:s("eA<@>(ah,B?)"),Dc:s("Rb"),F0:s("Bq"),Sv:s("Br"),nY:s("Rd"),BL:s("Rd"),Np:s("Hm"),T6:s("pX"),Iv:s("wm"),BD:s("pY"),MF:s("Ho"),JE:s("Rl"),Cz:s("Rm"),Mx:s("kC"),gk:s("Bv"),FS:s("Rs"),gu:s("tq"),Lm:s("Bz"),sm:s("Hs"),NF:s("bJA"),Ca:s("c_L"),hI:s("c_M"),x9:s("il"),Xn:s("RA"),mb:s("RB"),Wu:s("Hv"),_S:s("fi"),KL:s("BC"),ZX:s("oz"),bu:s("eo"),UF:s("BD"),g3:s("oA"),ij:s("BE"),n8:s("RM"),HS:s("wq"),n5:s("HA<@>"),v2:s("bO"),hi:s("bO"),kL:s("bO"),Ro:s("bO<@>"),RY:s("dH"),jH:s("wr"),hd:s("oD"),C0:s("BI"),VC:s("c6"),FQ:s("BJ"),cJ:s("wt"),cZ:s("HG"),zU:s("HH"),yE:s("c_Z"),hw:s("RT"),AA:s("BL"),Mp:s("c2"),k7:s("tu"),FW:s("Q"),Vb:s("wu"),Fh:s("S0"),TP:s("abH"),Q3:s("S2"),Ws:s("BN"),Dj:s("bKb"),R:s("wv"),Xp:s("ww"),dq:s("HN"),b:s("q2"),F8:s("HO"),jB:s("wx"),JL:s("BP"),za:s("HQ"),x6:s("ac5"),bU:s("he"),EF:s("mA"),U9:s("hx"),y0:s("ji"),Y8:s("wz"),by:s("ip"),t_:s("acb"),VE:s("BR"),ZF:s("tA"),QA:s("BS"),rE:s("fv"),aG:s("tB"),KE:s("BU"),Qv:s("hf"),Km:s("eh"),sY:s("wA"),DO:s("wB"),MG:s("mC"),d2:s("aw"),Iz:s("aY"),I8:s("tC"),nB:s("BW"),ZT:s("acv<@>"),ZG:s("BX"),N:s("h"),Vd:s("bKA"),NC:s("nr"),gV:s("jX"),Xb:s("dA"),NU:s("oF"),Vh:s("HZ"),Ci:s("wE"),_Q:s("I0"),Yu:s("acG"),YQ:s("acH"),AF:s("mD"),PR:s("Sr"),Gu:s("d9"),NP:s("d9"),Vr:s("d9"),Yw:s("d9
"),rh:s("d9>"),az:s("d9"),Q6:s("d9"),Ow:s("d9"),AH:s("d9"),E8:s("d9"),d9:s("d9"),Zl:s("d9>?>"),hr:s("d9"),b6:s("d9<~>"),U8:s("nt"),ey:s("c0f"),aq:s("hA"),On:s("Sw"),o3:s("q6"),PA:s("Sx"),Ly:s("kO"),Nl:s("kO"),HF:s("kO"),CL:s("b_"),wf:s("C1"),hn:s("C2"),OI:s("da"),Tn:s("jk"),uB:s("I6"),Pn:s("qa"),if:s("bKY"),Qr:s("SK"),MS:s("C6"),mr:s("SM"),Z0:s("tE"),iy:s("C9"),tq:s("nu"),cu:s("SS"),Fr:s("iT"),tp:s("bqj"),qY:s("oJ"),jY:s("bL8"),AS:s("lA"),em:s("I"),we:s("nv"),UW:s("Cc"),Uo:s("qe>"),Ag:s("qe<@>"),uY:s("mG"),rP:s("Ij"),EJ:s("Ch"),hO:s("ady"),LJ:s("T3>"),pf:s("adz"),GP:s("Il"),gM:s("nw"),xr:s("Cj"),qe:s("adC"),gq:s("wL"),cO:s("Ck"),l_:s("Cl"),vi:s("bp"),ZL:s("T9"),yS:s("jZ"),Ua:s("bLH"),bq:s("qg"),zW:s("eq"),Fv:s("wP"),Ni:s("br"),Y:s("br"),B:s("jm"),ns:s("tH"),e2:s("dL"),gQ:s("c0A"),i2:s("aWR"),w7:s("wQ"),QG:s("bqD"),rd:s("Ir"),cG:s("bqE"),di:s("adV"),W1:s("aWS"),H3:s("eD"),pm:s("Is"),MX:s("tK"),ya:s("eV"),gA:s("hY"),Sc:s("hY"),kk:s("qi"),gf:s("Ct"),B4:s("oL"),_i:s("Iw"),N2:s("Ix<@>"),gU:s("nz"),Xu:s("Iy"),EV:s("bqJ"),cs:s("tL"),pg:s("e>"),s:s("e"),g:s("e"),l1:s("dp"),xe:s("dp"),kK:s("dp"),kr:s("cD"),uh:s("cD"),bm:s("cD"),N8:s("cD"),Ll:s("cD"),ft:s("cD"),Yv:s("cD"),yw:s("a"),GK:s("aed"),GY:s("k0"),JH:s("c0K"),Hi:s("Cw"),Dg:s("lD"),Kq:s("lE"),g1:s("Tt"),X3:s("tN"),ke:s("hC"),kv:s("hC(a0,ri)"),He:s("hC(a0,a0)"),uG:s("hC(a0,a0)"),W2:s("hC(a0,ri)"),nW:s("hC(a0,f3)"),gE:s("hC(a0)"),Do:s("hC(a0)"),Ql:s("hC(a0)"),No:s("hC(a0)"),TL:s("hC(a0)"),Zg:s("qj"),ol:s("tO"),TQ:s("IE"),Zh:s("it"),AW:s("tP"),Hd:s("bg"),Y3:s("fG"),aF:s("ca"),VA:s("ca"),h2:s("ca>"),sQ:s("ca"),FI:s("ca"),ky:s("ca"),ba:s("ca"),Je:s("ca"),ZK:s("ca"),Ri:s("ca"),Oo:s("ca"),Yb:s("ca"),p0:s("ca"),Yd:s("ca"),jd:s("ca"),ow:s("ca"),kE:s("ca<~(B,eh?)>"),r7:s("ca<~(pq)>"),ZH:s("nA"),Pi:s("nA"),WG:s("nA"),l7:s("m"),XP:s("wU"),a7:s("IF"),EK:s("dM"),De:s("d0"),mD:s("d0"),dy:s("d0"),W7:s("d0"),uE:s("d0"),XR:s("d0"),rc:s("d0"),RP:s("d0"),QN:s("m(ah,bO,m?)"),me:s("m(ah,aD)"),kF:s("m(ah,hu)"),GJ:s("m(ah,wU)"),X5:s("fY"),Uh:s("Ty"),i:s("a7"),Qy:s("qk"),Oq:s("aeI"),Qx:s("lF"),nT:s("nB"),mL:s("oP"),UR:s("mL"),St:s("TB"),RN:s("mM"),Gn:s("jo"),xo:s("eO"),wG:s("hD"),hh:s("er"),Mw:s("oQ"),a1:s("hZ"),JC:s("TJ"),fc:s("CC"),L1:s("TL"),J_:s("wY"),LS:s("CE"),NV:s("jp"),Im:s("jp"),tu:s("jp"),zr:s("jp<@>"),Tv:s("jp"),h8:s("bH"),xu:s("bH"),m8:s("bH"),Iy:s("bH"),fO:s("bH"),Bx:s("bH"),gI:s("bH"),VY:s("bH"),GH:s("bH"),yB:s("bH"),BT:s("bH"),F2:s("bH"),h:s("bH<~>"),BY:s("bMu"),ZW:s("IU"),Oe:s("x0"),B6:s("U6"),RF:s("Ud"),EG:s("CI"),x4:s("IY>"),bY:s("UB"),TC:s("CK"),Yc:s("iU"),rZ:s("tU"),Fb:s("tU"),Uz:s("tU"),Q8:s("UF>"),G1:s("UG"),UJ:s("ahV"),qr:s("x3"),zZ:s("UL"),Vo:s("bMK"),l3:s("UZ"),rF:s("V0"),Pl:s("aiw"),yh:s("bhi<@>"),j4:s("x5"),Eh:s("Ve"),fk:s("J9"),Jp:s("Vh"),h1:s("Jd"),Lv:s("aM"),C4:s("aM"),Ou:s("aM"),XC:s("aM"),Gl:s("aM"),dH:s("aM"),WJ:s("aM"),aP:s("aM"),tt:s("aM"),LR:s("aM<@>"),wJ:s("aM"),gg:s("aM"),OZ:s("aM"),HC:s("aM"),D:s("aM<~>"),cK:s("Jf"),Qu:s("tY"),U3:s("Ji"),R9:s("x7"),Fy:s("x8"),WD:s("Vt"),Nr:s("Vv"),pp:s("kV"),y:s("xa"),cB:s("oU"),Sx:s("xc"),pt:s("Jr"),Gk:s("VK"),PJ:s("Js"),Fe:s("VT"),xg:s("alz"),p6:s("xe"),Fn:s("xf"),aj:s("xg"),pi:s("qp"),Vl:s("xh"),yI:s("u0"),eU:s("JB"),sZ:s("Wc"),Aj:s("amB"),j6:s("amE"),Lo:s("Wf"),oi:s("CV"),p3:s("Wj"),mP:s("Wk"),h7:s("qq"),zP:s("hG"),ri:s("Wx"),l0:s("CX"),Lj:s("xl"),u9:s("WD"),SN:s("WH"),Eg:s("JN"),Sq:s("JO"),mR:s("JP"),im:s("xm"),Ap:s("CY"),Ez:s("mP"),Pu:s("X_"),yd:s("X6"),jF:s("X9"),kS:s("apJ"),wU:s("apK"),S8:s("XC"),gX:s("XF"),mf:s("XH"),c6:s("D1"),mm:s("qt"),IM:s("D2"),Hj:s("D2<~>"),jj:s("eW"),VR:s("eW"),PF:s("eW"),Wi:s("eW>"),Ln:s("eW
"),gS:s("eW"),x_:s("eW"),Oz:s("K0"),HE:s("u4"),iN:s("K1"),f2:s("XV"),i9:s("K4"),tH:s("bNP"),E2:s("oY"),Wp:s("Yb"),LB:s("K9"),_l:s("D4"),ps:s("Yh"),xs:s("xr>"),tl:s("xr"),mN:s("d1"),Dm:s("d1"),N5:s("d1"),j_:s("d1"),VZ:s("d1"),B_:s("d1"),DH:s("asy"),w:s("F"),nH:s("F(kt)"),gt:s("F(bO)"),V:s("T"),lj:s("T(a0)"),z:s("@"),C_:s("@(B)"),Hg:s("@(B,eh)"),S:s("k"),k6:s("k(a0,k)"),BW:s("k(a0)"),vQ:s("k(a0)"),BO:s("k(a0)"),ng:s("k(k)"),s5:s("0&*"),ub:s("B*"),tX:s("awX?"),m2:s("KR?"),ZU:s("qI?"),zK:s("fM?"),se:s("jw?"),xH:s("y6?"),oI:s("bL?"),en:s("uA?"),ls:s("uB?"),CD:s("cX?"),fz:s("o0?"),eQ:s("DU?"),I4:s("yj?"),Ax:s("ayY?"),JG:s("DZ?"),cW:s("az0?"),eG:s("LC?"),e4:s("az1?"),W0:s("yl?"),VD:s("ym?"),MH:s("n?"),YJ:s("fp?"),V2:s("n4?"),dd:s("hO?"),z2:s("bv?"),ik:s("n7?"),pc:s("f0?"),Om:s("yW?"),Dv:s("b7?"),e8:s("EL?"),fd:s("MQ?"),pk:s("fd?"),RC:s("Ne?"),U5:s("jE?"),ZZ:s("an
?"),eS:s("a4p?"),Mm:s("of?"),ZI:s("zy?"),GN:s("oi?"),lF:s("fr?"),IB:s("aHd?"),Wg:s("vk?"),Ef:s("oj?"),LO:s("ha?"),EZ:s("H?"),kc:s("H<@>?"),wh:s("H?"),oC:s("u?"),D_:s("lt?"),cV:s("hR?"),nA:s("bA?"),Xy:s("bA<@,@>?"),f9:s("bA>?"),J1:s("bA?"),iD:s("by?"),GE:s("f4?"),lI:s("rP?"),X:s("B?"),p4:s("Go?"),Yj:s("aM7?"),dJ:s("or?"),Zr:s("aMa?"),KX:s("ht?"),uR:s("jO?"),xO:s("vU?"),MT:s("PQ?"),Cp:s("PR?"),p9:s("PS?"),ev:s("PT?"),Gr:s("PU?"),BN:s("PV?"),mc:s("fT?"),wb:s("PX?"),XQ:s("au?"),C5:s("B5>?"),_C:s("mv?"),ai:s("P?"),aA:s("Y?"),CA:s("Bc?"),p5:s("bX?"),ym:s("tj?"),IT:s("fh?"),rJ:s("aay<@>?"),_N:s("Bz?"),LQ:s("eo?"),Zi:s("dH?"),TZ:s("ws?"),xp:s("kF?"),tW:s("Q?"),MR:s("q2?"),lE:s("mC?"),ob:s("h?"),aE:s("HZ?"),f3:s("jk?"),p8:s("I?"),Dh:s("Cb?"),qf:s("adP?"),zV:s("qg?"),ir:s("br?"),n6:s("eD?"),Wn:s("oO?"),Ek:s("agC?"),Ej:s("xg?"),av:s("Wg?"),Kp:s("xl?"),gW:s("xm?"),JI:s("XK<@>?"),X7:s("F?"),PM:s("T?"),bo:s("k?"),Nw:s("~()?"),Jy:s("d2"),U7:s("biK"),Ao:s("jr"),JP:s("lP"),sG:s("bV9"),SB:s("iX"),PD:s("bVa"),CF:s("bVb"),If:s("bVc"),jZ:s("bVd"),P1:s("Zn"),qR:s("bVe"),zb:s("bVf"),DM:s("bVg"),ap:s("bVh"),KQ:s("bVi"),P8:s("bd5"),LA:s("bVj"),Pd:s("bVk"),A2:s("bVl"),bW:s("bVm"),dX:s("bVn"),dk:s("bVo"),CC:s("bVp"),lO:s("bVq"),cx:s("l1"),ac:s("bVr"),F3:s("nQ"),q6:s("De"),xJ:s("l2"),Zk:s("mS"),z1:s("bVs"),rv:s("bVt"),Az:s("bVu"),sf:s("bVv"),Qh:s("bVw"),lp:s("bVx"),vt:s("qC"),P5:s("bVy"),LT:s("bVz"),M4:s("bVA"),JF:s("bVB"),H:s("~"),Q:s("~()"),Lp:s("~(B,eh?)"),hV:s("~(a0,a0)"),_O:s("~(a0,a0)"),T3:s("~(a0,T)"),st:s("~(a0,T)"),q5:s("~(a0,k)"),qs:s("~(o9,Cn,EO?)"),vR:s("~(ah)"),Vu:s("~(bv)"),Su:s("~(v7)"),ph:s("~(H)"),lP:s("~(B)"),hK:s("~(B,eh)"),Ld:s("~(cg)"),vC:s("~(a0)"),ID:s("~(a0)"),dU:s("~(a0)"),Ov:s("~(a0)"),tf:s("~(a0)"),Sp:s("~(th)"),EC:s("~(k)"),HT:s("~(B?)")}})();(function constants(){var s=hunkHelpers.makeConstList +B.Wv=J.Fx.prototype +B.b=J.v.prototype +B.cE=J.O4.prototype +B.f=J.FB.prototype +B.c=J.vt.prototype +B.d=J.px.prototype +B.WI=J.ln.prototype +B.WJ=J.l.prototype +B.aw=A.Av.prototype +B.Z=A.Pb.prototype +B.eF=A.Aw.prototype +B.eG=A.Pd.prototype +B.L=A.rQ.prototype +B.EV=J.a8O.prototype +B.ti=J.qi.prototype +B.aka=new A.avS(0,"unknown") +B.br=new A.nV(1,0,0,1,0,0,1) +B.Ie=new A.jt(0,1) +B.If=new A.jt(0,-1) +B.akb=new A.jt(1,0) +B.iT=new A.jt(-1,0) +B.Ig=new A.jt(-1,1) +B.bC=new A.jt(-1,-1) +B.a5=new A.fL(0,0) +B.cN=new A.fL(0,1) +B.d7=new A.fL(0,-1) +B.b_=new A.fL(1,0) +B.Ih=new A.fL(1,1) +B.Ii=new A.fL(1,-1) +B.aO=new A.fL(-1,0) +B.cz=new A.fL(-1,1) +B.dx=new A.fL(-1,-1) +B.Ij=new A.Kv(null) +B.o=new A.fn(0,0) +B.mk=new A.fn(0,1) +B.iU=new A.fn(1,0) +B.bL=new A.fn(1,1) +B.iV=new A.fn(0,0.5) +B.iW=new A.fn(1,0.5) +B.Ik=new A.fn(0.25,0.25) +B.tV=new A.fn(0.25,0.75) +B.dy=new A.fn(0.5,0) +B.e8=new A.fn(0.5,1) +B.j=new A.fn(0.5,0.5) +B.Il=new A.fn(0.75,0.25) +B.Im=new A.fn(0.75,0.75) +B.In=new A.fn(0.5,0.4) +B.ml=new A.ZY(0,"normal") +B.mm=new A.ZY(1,"preserve") +B.Y=new A.mY(0,"dismissed") +B.bD=new A.mY(1,"forward") +B.bE=new A.mY(2,"reverse") +B.af=new A.mY(3,"completed") +B.Io=new A.KJ(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.tW=new A.KK(0,"exit") +B.tX=new A.KK(1,"cancel") +B.f0=new A.nW(0,"detached") +B.d8=new A.nW(1,"resumed") +B.iX=new A.nW(2,"inactive") +B.iY=new A.nW(3,"hidden") +B.iZ=new A.nW(4,"paused") +B.tY=new A.a_7(!1,127) +B.Ip=new A.a_8(127) +B.mn=new A.KL(0,"polite") +B.mo=new A.a_9(0,"polite") +B.mp=new A.KL(1,"assertive") +B.tZ=new A.a_9(1,"assertive") +B.u_=new A.xW(0,"log") +B.mq=new A.xW(1,"duration") +B.u0=new A.xW(3,"complete") +B.mr=new A.xW(4,"prepared") +B.u1=new A.hI(B.u0,null,null,null) +B.Iq=new A.xW(2,"seekComplete") +B.u2=new A.hI(B.Iq,null,null,null) +B.u3=new A.hI(B.mr,null,null,!0) +B.dQ=A.b(s([]),t.T) +B.v=new A.SG(1,"downstream") +B.lo=new A.kQ(-1,-1,B.v,!1,-1,-1) +B.c9=new A.cZ(-1,-1) +B.is=new A.eN("",B.lo,B.c9) +B.u4=new A.KO(!1,"",B.dQ,B.is,null) +B.u5=new A.awV(0,"disabled") +B.ag=new A.Dy(0,"up") +B.d9=new A.Dy(1,"right") +B.a7=new A.Dy(2,"down") +B.cA=new A.Dy(3,"left") +B.b0=new A.a_n(0,"horizontal") +B.b1=new A.a_n(1,"vertical") +B.Ir=new A.KT(null,null,null,null,null,null,null,null) +B.eg=new A.aI5() +B.Is=new A.uy("flutter/keyevent",B.eg,t.Al) +B.bf=new A.aTV() +B.f1=new A.uy("flutter/accessibility",B.bf,t.Al) +B.It=new A.uy("flutter/system",B.eg,t.Al) +B.mH=new A.aUj() +B.Iu=new A.uy("flutter/lifecycle",B.mH,A.ac("uy")) +B.jX=new A.F2(2,"previous") +B.Iv=new A.y1(null,B.jX,0,0) +B.e9=new A.e0(0,"clear") +B.ms=new A.e0(1,"src") +B.j_=new A.e0(12,"plus") +B.mt=new A.e0(13,"modulate") +B.mu=new A.e0(14,"screen") +B.u6=new A.e0(15,"overlay") +B.u7=new A.e0(16,"darken") +B.u8=new A.e0(17,"lighten") +B.u9=new A.e0(18,"colorDodge") +B.ua=new A.e0(19,"colorBurn") +B.mv=new A.e0(20,"hardLight") +B.ub=new A.e0(21,"softLight") +B.mw=new A.e0(22,"difference") +B.uc=new A.e0(23,"exclusion") +B.ea=new A.e0(24,"multiply") +B.ud=new A.e0(25,"hue") +B.mx=new A.e0(26,"saturation") +B.ue=new A.e0(27,"color") +B.my=new A.e0(28,"luminosity") +B.bF=new A.e0(3,"srcOver") +B.j0=new A.i2(3,"srcOver") +B.da=new A.e0(6,"dstIn") +B.dz=new A.e0(8,"dstOut") +B.mz=new A.e0(9,"srcATop") +B.cV=new A.aS(6,6,6,6) +B.IV=new A.qK(B.cV,null,null,null,null) +B.ZN=A.b(s([]),t.BJ) +B.mA=new A.KY(B.ZN) +B.a0=new A.axu(0,"normal") +B.a2=new A.L_(0,"static") +B.uf=new A.L_(1,"kinematic") +B.R=new A.L_(2,"dynamic") +B.IW=new A.DB(null) +B.IX=new A.DC(!1) +B.mB=new A.DC(!0) +B.dZ=new A.bl(16,16) +B.P=new A.bl(0,0) +B.IY=new A.y5(B.dZ,B.P,B.dZ,B.P) +B.IZ=new A.y5(B.P,B.dZ,B.P,B.dZ) +B.aP=new A.dO(B.P,B.P,B.P,B.P) +B.eO=new A.bl(4,4) +B.j1=new A.dO(B.eO,B.eO,B.P,B.P) +B.e_=new A.bl(2,2) +B.j2=new A.dO(B.e_,B.e_,B.e_,B.e_) +B.hb=new A.dO(B.eO,B.eO,B.eO,B.eO) +B.kX=new A.bl(7,7) +B.J3=new A.dO(B.kX,B.kX,B.kX,B.kX) +B.e0=new A.bl(8,8) +B.uh=new A.dO(B.e0,B.e0,B.e0,B.e0) +B.kT=new A.bl(22,22) +B.J4=new A.dO(B.kT,B.kT,B.kT,B.kT) +B.fH=new A.bl(40,40) +B.J5=new A.dO(B.fH,B.fH,B.fH,B.fH) +B.kV=new A.bl(50,50) +B.J2=new A.dO(B.kV,B.kV,B.kV,B.kV) +B.kW=new A.bl(60,50) +B.J6=new A.dO(B.kW,B.kW,B.kW,B.kW) +B.kR=new A.bl(1000,1000) +B.ug=new A.dO(B.kR,B.kR,B.kR,B.kR) +B.B=new A.n(0) +B.J=new A.a_X(1,"solid") +B.J8=new A.bL(B.B,0,B.J,-1) +B.J7=new A.bL(B.B,2,B.J,-1) +B.Qr=new A.n(4293454056) +B.Jb=new A.bL(B.Qr,1,B.J,-1) +B.q=new A.n(4278190080) +B.b7=new A.a_X(0,"none") +B.C=new A.bL(B.q,0,B.b7,-1) +B.uj=new A.fM(B.C,B.C,B.C,B.C) +B.ui=new A.bL(B.B,1,B.J,-1) +B.uk=new A.fM(B.ui,B.C,B.ui,B.C) +B.Je=new A.L3(null,null,null,null,null,null,null) +B.Jf=new A.L4(null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.Jg=new A.L5(null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a5M=new A.ab1(0,"normal") +B.r9=new A.a9D(null) +B.Jh=new A.L6(B.a5M,B.r9) +B.Fu=new A.ab1(1,"fast") +B.Ji=new A.L6(B.Fu,B.r9) +B.Jj=new A.bb(40,40,40,40) +B.Jk=new A.bb(56,56,56,56) +B.eb=new A.bb(0,1/0,0,1/0) +B.Jl=new A.bb(280,1/0,0,1/0) +B.Jm=new A.bb(0,1/0,48,1/0) +B.Jn=new A.bb(96,96,96,96) +B.Jo=new A.bb(0,1/0,56,56) +B.ul=new A.bb(1/0,1/0,1/0,1/0) +B.na=new A.n(4290624957) +B.Jc=new A.bL(B.na,0,B.J,-1) +B.Jd=new A.fM(B.C,B.C,B.Jc,B.C) +B.aV=new A.a01(0,"rectangle") +B.Jp=new A.fc(null,null,B.Jd,null,null,null,B.aV) +B.Jq=new A.fc(null,null,null,null,null,null,B.aV) +B.LV=new A.n(1006632960) +B.Db=new A.i(0,4) +B.Jy=new A.cx(0.5,B.a0,B.LV,B.Db,10) +B.a_h=A.b(s([B.Jy]),t.sq) +B.Jr=new A.fc(null,null,null,B.uh,B.a_h,null,B.aV) +B.mC=new A.a_Z(1,"contain") +B.um=new A.a_Z(6,"scaleDown") +B.dA=new A.a0_(0,"tight") +B.un=new A.a0_(5,"strut") +B.uo=new A.a01(1,"circle") +B.cO=new A.axL(0,"tight") +B.b8=new A.a02(0,"dark") +B.aW=new A.a02(1,"light") +B.ec=new A.Lc(0,"blink") +B.au=new A.Lc(1,"webkit") +B.cP=new A.Lc(2,"firefox") +B.JZ=new A.axY(1,"padded") +B.K_=new A.Ld(null,null,null,null,null,null,null,null,null) +B.j3=new A.Lf(0,"unpressed") +B.bl=new A.nZ(0,"up") +B.dB=new A.Lg(0,"up") +B.up=new A.Lf(1,"pressed") +B.ed=new A.nZ(1,"upAndSelected") +B.uq=new A.Lg(1,"down") +B.ee=new A.nZ(2,"down") +B.j4=new A.nZ(3,"downAndSelected") +B.f2=new A.nZ(4,"hover") +B.j5=new A.nZ(5,"hoverAndSelected") +B.ef=new A.nZ(6,"disabled") +B.j6=new A.nZ(7,"disabledAndSelected") +B.ur=new A.Li(0,"normal") +B.K0=new A.Li(1,"accent") +B.K1=new A.Li(2,"primary") +B.Lw=new A.CM(A.ac("CM>")) +B.K2=new A.DG(B.Lw) +B.hc=new A.vn(A.bTS(),A.ac("vn")) +B.K3=new A.avT() +B.cd=new A.a_6() +B.us=new A.KS() +B.akc=new A.a_A() +B.K5=new A.awZ() +B.f3=new A.a_z() +B.K6=new A.a_R() +B.ut=new A.axT() +B.K7=new A.DO() +B.K8=new A.a0L() +B.K9=new A.ayK() +B.Ka=new A.a0Q() +B.Kb=new A.LK() +B.mD=new A.a1J() +B.Kc=new A.aAD() +B.Kd=new A.Ep() +B.Ke=new A.a20() +B.Kf=new A.a21(A.ac("a21<0&>")) +B.Kg=new A.a22() +B.akd=new A.a25(A.ac("a25<@>")) +B.Kh=new A.a26() +B.a3=new A.Mo() +B.Ki=new A.aBO() +B.cB=new A.My() +B.Kj=new A.aCf() +B.Kk=new A.aDe() +B.Kl=new A.MK() +B.uw=new A.j6(A.ac("j6")) +B.Kn=new A.j6(A.ac("j6")) +B.Ko=new A.j6(A.ac("j6")) +B.Km=new A.j6(A.ac("j6<0&>")) +B.j7=new A.a3a(A.ac("a3a<0&>")) +B.hd=new A.a3c() +B.n=new A.a3c() +B.Kp=new A.aDG() +B.Kq=new A.a3v() +B.Kr=new A.a3M() +B.j8=new A.a3Q() +B.Ks=new A.Nh() +B.Kt=new A.a3Y() +B.ake=new A.a4n() +B.Ku=new A.aG8() +B.Kv=new A.aGu() +B.Kw=new A.a4N() +B.Kx=new A.a4T() +B.Ky=new A.a4X() +B.Kz=new A.a5x() +B.aC=new A.aI4() +B.bM=new A.aI6() +B.ux=function getTagFallback(o) { + var s = Object.prototype.toString.call(o); + return s.substring(8, s.length - 1); +} +B.KA=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.KF=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.KB=function(hooks) { + if (typeof dartExperimentalFixupGetTag != "function") return hooks; + hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag); +} +B.KE=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.KD=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.KC=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.uy=function(hooks) { return hooks; } + +B.db=new A.aIi() +B.cQ=new A.a5W() +B.KG=new A.aJj() +B.KH=new A.Oo() +B.KJ=new A.FT(A.ac("FT")) +B.KI=new A.FT(A.ac("FT")) +B.KK=new A.aKi() +B.mE=new A.OY() +B.bm=new A.P0() +B.w=new A.P6() +B.KL=new A.P7() +B.KM=new A.aLz() +B.KN=new A.aLO() +B.KO=new A.aLS() +B.KP=new A.aLU() +B.KQ=new A.aLY() +B.mF=new A.B() +B.KR=new A.Pw() +B.KS=new A.Px() +B.KT=new A.a7X() +B.ar=new A.fk(0,"android") +B.a6=new A.fk(2,"iOS") +B.ct=new A.fk(4,"macOS") +B.uJ=new A.af2() +B.CO=new A.cc([B.ar,B.uJ,B.a6,B.mD,B.ct,B.mD],A.ac("cc")) +B.KU=new A.a8_() +B.KV=new A.a8h() +B.mG=new A.PF() +B.KW=new A.Gz() +B.aK=new A.np(4,"keyboard") +B.uA=new A.vW() +B.KX=new A.aNw() +B.akf=new A.aO1() +B.KY=new A.aOn() +B.uC=new A.wd() +B.L_=new A.aQG() +B.L0=new A.aQH() +B.L1=new A.aQI() +B.L2=new A.aQJ() +B.L3=new A.aRo() +B.L4=new A.ab0() +B.L5=new A.aRO() +B.uD=new A.ts() +B.L6=new A.aSl() +B.a=new A.aSm() +B.L7=new A.RN() +B.uE=new A.aSw() +B.L8=new A.abD() +B.dC=new A.aTU() +B.f4=new A.aTY() +B.c1=new A.aTZ() +B.L9=new A.act() +B.La=new A.acK() +B.Lb=new A.acS() +B.Lc=new A.aVp() +B.Ld=new A.aVv() +B.Le=new A.aVw() +B.Lf=new A.aVx() +B.Lg=new A.aVB() +B.Lh=new A.aVD() +B.Li=new A.aVE() +B.Lj=new A.aVF() +B.uF=new A.wO() +B.uG=new A.wR() +B.Lk=new A.Tl() +B.Ll=new A.Tm() +B.Lm=new A.aX3() +B.a1=new A.ae6() +B.bn=new A.ae7() +B.uH=new A.aX8() +B.Ln=new A.aXc() +B.f5=new A.aXf() +B.fX=new A.aek(0,0,0,0) +B.ZL=A.b(s([]),A.ac("v")) +B.akg=new A.aXj() +B.ja=new A.aev() +B.bw={} +B.oI=new A.bV(B.bw,[],t.li) +B.akh=new A.aXy() +B.uI=new A.aez() +B.a2U={amp:0,apos:1,gt:2,lt:3,quot:4} +B.a13=new A.bV(B.a2U,["&","'",">","<",'"'],t.li) +B.mI=new A.aeM() +B.he=new A.af9() +B.eh=new A.afa() +B.Lo=new A.aZ5() +B.uK=new A.ag2() +B.Lp=new A.ag3() +B.Lq=new A.Um(A.ac("Um")) +B.Lr=new A.ahj() +B.f6=new A.ahA() +B.Ls=new A.b0G() +B.Lt=new A.b0K() +B.Lu=new A.b0L() +B.aki=new A.UD() +B.m=new A.ahI() +B.jb=new A.b0V() +B.Lv=new A.b12() +B.bg=new A.b1e() +B.mJ=new A.aiD() +B.mK=new A.b1m() +B.Lx=new A.b2X() +B.Ly=new A.b2Y() +B.O=new A.b3d() +B.z=new A.VI() +B.Lz=new A.ale() +B.cC=new A.b4f() +B.uL=new A.b5M() +B.aE=new A.aoR() +B.dc=new A.WW() +B.LA=new A.b6e() +B.LB=new A.apw() +B.uM=new A.aqB() +B.LC=new A.asz() +B.mL=new A.ay5(0,"pixel") +B.LG=new A.DK(null,null,null,null,null,null,null) +B.af4=new A.f7("Loading",null,null,null,null,null,null,null,null,null) +B.uN=new A.iF(B.a5,null,null,B.af4,null) +B.aeU=new A.f7("Paused",null,null,null,null,null,null,null,null,null) +B.LH=new A.iF(B.a5,null,null,B.aeU,null) +B.acv=new A.I(!0,B.q,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.aeQ=new A.f7("Cool label",null,B.acv,null,null,null,null,null,null,null) +B.LI=new A.iF(B.a5,null,null,B.aeQ,null) +B.LJ=new A.DP(null,null,null,null,null,null,null,null,null) +B.LK=new A.a0p(0,"added") +B.LL=new A.a0p(1,"removed") +B.LM=new A.Lq(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.uO=new A.hK(0,B.C) +B.LN=new A.Lz(null) +B.LO=new A.Lz(B.r9) +B.a6_=new A.RC(2,"clear") +B.mM=new A.LA(B.a6_) +B.LP=new A.a0V(0,"difference") +B.f7=new A.a0V(1,"intersect") +B.y=new A.DX(0,"none") +B.a4=new A.DX(1,"hardEdge") +B.ce=new A.DX(2,"antiAlias") +B.f8=new A.DX(3,"antiAliasWithSaveLayer") +B.mN=new A.E_(0,"pasteable") +B.mO=new A.E_(1,"unknown") +B.a49=new A.GC(3,"close") +B.jc=new A.LH(B.a49) +B.H=new A.LM(0,"active") +B.mP=new A.LM(1,"passive") +B.jd=new A.LM(2,"inactive") +B.uP=new A.a1c(0,"mode") +B.uQ=new A.lV(0,"hex") +B.mQ=new A.lV(1,"rgb") +B.mR=new A.lV(2,"hsv") +B.mS=new A.lV(3,"hsl") +B.ng=new A.as(4294967295) +B.LR=new A.qX(!1,B.ng) +B.LS=new A.qX(!1,null) +B.je=new A.qX(!0,null) +B.ho=new A.n(4291869951) +B.Nd=new A.n(4281867890) +B.n5=new A.n(4283381643) +B.jr=new A.n(4293582335) +B.n0=new A.n(4280352861) +B.nb=new A.n(4291609308) +B.N9=new A.n(4281544001) +B.n4=new A.n(4283057240) +B.jq=new A.n(4293451512) +B.mZ=new A.n(4280097067) +B.ne=new A.n(4293900488) +B.Ny=new A.n(4282983730) +B.n6=new A.n(4284693320) +B.js=new A.n(4294957284) +B.n2=new A.n(4281405725) +B.QQ=new A.n(4294097077) +B.NS=new A.n(4284486672) +B.OJ=new A.n(4287372568) +B.vt=new A.n(4294565596) +B.mY=new A.n(4279505432) +B.jp=new A.n(4293320937) +B.n3=new A.n(4282991951) +B.Ni=new A.n(4282071102) +B.MM=new A.n(4279176467) +B.n_=new A.n(4280097568) +B.MW=new A.n(4280360742) +B.N3=new A.n(4281018672) +B.Nb=new A.n(4281742395) +B.vp=new A.n(4291478736) +B.OQ=new A.n(4287860633) +B.v9=new A.n(4281478965) +B.n7=new A.n(4284960932) +B.LT=new A.E2(B.b8,B.ho,B.Nd,B.n5,B.jr,B.jr,B.ho,B.n0,B.n5,B.nb,B.N9,B.n4,B.jq,B.jq,B.nb,B.mZ,B.n4,B.ne,B.Ny,B.n6,B.js,B.js,B.ne,B.n2,B.n6,B.QQ,B.NS,B.OJ,B.vt,B.mY,B.jp,B.n3,B.mY,B.Ni,B.MM,B.n_,B.MW,B.N3,B.Nb,B.vp,B.OQ,B.n3,B.q,B.q,B.jp,B.v9,B.n7,B.ho,B.mY,B.jp) +B.l=new A.n(4294967295) +B.NV=new A.n(4284636017) +B.Oj=new A.n(4286403168) +B.Po=new A.n(4289930782) +B.No=new A.n(4282453515) +B.nf=new A.n(4294899711) +B.Qq=new A.n(4293386476) +B.Qc=new A.n(4292794593) +B.R4=new A.n(4294439674) +B.QS=new A.n(4294176247) +B.Qy=new A.n(4293715696) +B.Od=new A.n(4286149758) +B.R_=new A.n(4294307831) +B.LU=new A.E2(B.aW,B.n7,B.l,B.jr,B.n0,B.jr,B.ho,B.n0,B.n5,B.NV,B.l,B.jq,B.mZ,B.jq,B.nb,B.mZ,B.n4,B.Oj,B.l,B.js,B.n2,B.js,B.ne,B.n2,B.n6,B.Po,B.l,B.vt,B.No,B.nf,B.n_,B.Qq,B.Qc,B.nf,B.l,B.R4,B.QS,B.Qy,B.jp,B.n3,B.Od,B.vp,B.q,B.q,B.v9,B.R_,B.ho,B.n7,B.nf,B.n_) +B.uR=new A.n(1087163596) +B.LW=new A.n(134217728) +B.LX=new A.n(1358954495) +B.LY=new A.n(144613022) +B.LZ=new A.n(1627389952) +B.M_=new A.n(1660944383) +B.hg=new A.n(16777215) +B.mU=new A.n(1723645116) +B.M1=new A.n(1724434632) +B.M3=new A.n(2155905152) +B.M4=new A.n(2281701376) +B.M5=new A.n(2290063795) +B.am=new A.n(2315255808) +B.M6=new A.n(2583691263) +B.M7=new A.n(2868903680) +B.a8=new A.n(3019898879) +B.M8=new A.n(335609774) +B.M9=new A.n(3439329279) +B.an=new A.n(3707764736) +B.Mb=new A.n(4039164096) +B.ei=new A.as(4278190080) +B.Mc=new A.n(4278190180) +B.Mf=new A.n(4278190260) +B.Mg=new A.n(4278190280) +B.uX=new A.n(4278190335) +B.uZ=new A.n(4278209856) +B.mW=new A.n(4278215680) +B.v_=new A.n(4278236160) +B.Mx=new A.n(4278239231) +B.v0=new A.n(4278241280) +B.jj=new A.n(4278255360) +B.MK=new A.n(4278459679) +B.v3=new A.n(4279249224) +B.I=new A.n(4279375125) +B.v4=new A.n(4279858898) +B.MP=new A.n(4279877463) +B.jk=new A.n(4280038211) +B.v5=new A.n(4280191205) +B.v6=new A.n(4280361249) +B.bs=new A.n(4280366916) +B.v7=new A.n(4280391411) +B.hk=new A.n(4280427042) +B.a_=new A.n(4280691757) +B.n1=new A.n(4281348144) +B.va=new A.n(4281545523) +B.aI=new A.n(4281746764) +B.Ne=new A.n(4281884796) +B.Nf=new A.n(4281892811) +B.cf=new A.n(4282008133) +B.Nk=new A.n(4282202918) +B.dD=new A.n(4282532418) +B.Ns=new A.n(4282664004) +B.cR=new A.n(4282671239) +B.vc=new A.n(4282798678) +B.cg=new A.n(4282933886) +B.NE=new A.n(4283314734) +B.NJ=new A.n(4283782485) +B.NM=new A.n(4283986529) +B.vd=new A.n(4284518768) +B.NU=new A.n(4284561450) +B.jm=new A.n(4284572001) +B.bN=new A.n(4284706675) +B.NW=new A.n(4284769380) +B.ve=new A.n(4284809178) +B.O_=new A.n(4284826896) +B.O3=new A.n(4285028907) +B.Ol=new A.n(4286541110) +B.n8=new A.n(4286611584) +B.vj=new A.n(4286940549) +B.Ow=new A.n(4287072135) +B.Ox=new A.n(4287087842) +B.OB=new A.n(4287137928) +B.jn=new A.n(4287540673) +B.vk=new A.n(4287679225) +B.OW=new A.n(4288413777) +B.vl=new A.n(4288585374) +B.P1=new A.n(4288716964) +B.vm=new A.n(4289045925) +B.P6=new A.n(4289214006) +B.P7=new A.n(4289353215) +B.P8=new A.n(4289374890) +B.Pp=new A.n(4289950428) +B.vo=new A.n(4290117584) +B.Ps=new A.n(4290143231) +B.Pt=new A.n(4290159169) +B.n9=new A.n(4290502395) +B.PC=new A.n(4290707299) +B.PM=new A.n(4291414386) +B.nc=new A.n(4291611852) +B.jo=new A.n(4292030255) +B.Q4=new A.n(4292591519) +B.Qa=new A.n(4292730333) +B.Qd=new A.n(4292796126) +B.vr=new A.n(4292927712) +B.vs=new A.n(4293128957) +B.Ql=new A.n(4293256677) +B.Qw=new A.n(4293577521) +B.nd=new A.n(4293848814) +B.QG=new A.n(4293912476) +B.vu=new A.n(4294638330) +B.dd=new A.n(4294901760) +B.e=new A.n(4294902015) +B.RN=new A.n(4294949987) +B.RR=new A.n(4294952572) +B.S2=new A.n(4294958960) +B.Sh=new A.n(4294963495) +B.Ss=new A.n(4294966682) +B.ej=new A.n(4294967040) +B.Sz=new A.n(436207616) +B.jt=new A.n(452984831) +B.cD=new A.n(520093696) +B.vw=new A.n(536870911) +B.SA=new A.n(587202440) +B.ac=new A.vE(0,"start") +B.ak=new A.a6v(1,"max") +B.ah=new A.yD(2,"center") +B.d3=new A.aef(1,"down") +B.Td=new A.a2b(null) +B.Tu=new A.Mb("Select a device frame:",B.Td,null) +B.lg=new A.iR(null,12,null,null) +B.aam=new A.adp(null) +B.vR=new A.Mb("Text scale factor:",B.aam,null) +B.YO=A.b(s([B.Tu,B.lg,B.vR,B.lg]),t.p) +B.SC=new A.LP(B.b1,B.ac,B.ak,B.ah,null,B.d3,null,B.YO,null) +B.SD=new A.ys(null) +B.SE=new A.yt(null) +B.vz=new A.qY(0,"zlib") +B.vA=new A.qY(1,"gzip") +B.vB=new A.qY(2,"zstd") +B.vC=new A.LS("Running in isolate",0,"isolate") +B.vD=new A.LT(0,"none") +B.SG=new A.LT(1,"waiting") +B.ju=new A.LT(3,"done") +B.SH=new A.yx(!1) +B.SI=new A.yx(!0) +B.nh=new A.n1(0,"cut") +B.ni=new A.n1(1,"copy") +B.nj=new A.n1(2,"paste") +B.nk=new A.n1(3,"selectAll") +B.SJ=new A.n1(4,"delete") +B.vE=new A.n1(5,"lookUp") +B.vF=new A.n1(6,"searchWeb") +B.nl=new A.n1(7,"share") +B.vG=new A.n1(8,"liveTextInput") +B.vH=new A.n1(9,"custom") +B.SK=new A.yC(null) +B.vI=new A.pa(!1) +B.vJ=new A.pa(!0) +B.nm=new A.yD(0,"start") +B.SL=new A.yD(1,"end") +B.fa=new A.yD(3,"stretch") +B.jv=new A.yD(4,"baseline") +B.vK=new A.hn(0.35,0.91,0.33,0.97) +B.aQ=new A.hn(0.4,0,0.2,1) +B.SM=new A.hn(0.05,0,0.133333,0.06) +B.SN=new A.hn(0.215,0.61,0.355,1) +B.SO=new A.hn(0.25,0.46,0.45,0.94) +B.fb=new A.hn(0,0,0.58,1) +B.hq=new A.hn(0.42,0,0.58,1) +B.vL=new A.hn(0.645,0.045,0.355,1) +B.bt=new A.hn(0.25,0.1,0.25,1) +B.dE=new A.hn(0.42,0,1,1) +B.SP=new A.hn(0.208333,0.82,0.25,1) +B.SQ=new A.hn(0.67,0.03,0.65,0.09) +B.vM=new A.hn(0.18,1,0.04,1) +B.SS=new A.hn(0.075,0.82,0.165,1) +B.ST=new A.hn(0.77,0,0.175,1) +B.mT=new A.n(1279016003) +B.uT=new A.n(1290529781) +B.uU=new A.n(1614560323) +B.uV=new A.n(1626074101) +B.SU=new A.ev(B.mT,"placeholderText",null,B.mT,B.uT,B.uU,B.uV,B.mT,B.uT,B.uU,B.uV,0) +B.jw=new A.ev(B.q,null,null,B.q,B.l,B.q,B.l,B.q,B.l,B.q,B.l,0) +B.hp=new A.n(4294375158) +B.SV=new A.ev(B.hp,null,null,B.hp,B.hk,B.hp,B.hk,B.hp,B.hk,B.hp,B.hk,0) +B.hf=new A.n(1493172224) +B.jf=new A.n(2164260863) +B.SW=new A.ev(B.hf,null,null,B.hf,B.jf,B.hf,B.jf,B.hf,B.jf,B.hf,B.jf,0) +B.hm=new A.n(4288256409) +B.hl=new A.n(4285887861) +B.ek=new A.ev(B.hm,"inactiveGray",null,B.hm,B.hl,B.hm,B.hl,B.hm,B.hl,B.hm,B.hl,0) +B.hn=new A.n(4290295992) +B.jl=new A.n(4284177243) +B.SX=new A.ev(B.hn,null,null,B.hn,B.jl,B.hn,B.jl,B.hn,B.jl,B.hn,B.jl,0) +B.f9=new A.n(4292269782) +B.SY=new A.ev(B.f9,null,null,B.f9,B.dD,B.f9,B.dD,B.f9,B.dD,B.f9,B.dD,0) +B.jx=new A.ev(B.q,"label",null,B.q,B.l,B.q,B.l,B.q,B.l,B.q,B.l,0) +B.mX=new A.n(4278221567) +B.v2=new A.n(4278879487) +B.uY=new A.n(4278206685) +B.vb=new A.n(4282424575) +B.hr=new A.ev(B.mX,"systemBlue",null,B.mX,B.v2,B.uY,B.vb,B.mX,B.v2,B.uY,B.vb,0) +B.hh=new A.n(268435456) +B.jg=new A.n(285212671) +B.T_=new A.ev(B.hh,null,null,B.hh,B.jg,B.hh,B.jg,B.hh,B.jg,B.hh,B.jg,0) +B.hi=new A.n(3003121663) +B.jh=new A.n(2989502512) +B.T0=new A.ev(B.hi,null,null,B.hi,B.jh,B.hi,B.jh,B.hi,B.jh,B.hi,B.jh,0) +B.mV=new A.n(343176320) +B.vy=new A.n(762738304) +B.vx=new A.n(678720640) +B.uS=new A.n(1115059840) +B.T1=new A.ev(B.mV,"quaternarySystemFill",null,B.mV,B.vy,B.vx,B.uS,B.mV,B.vy,B.vx,B.uS,0) +B.MS=new A.n(4280032286) +B.MY=new A.n(4280558630) +B.vN=new A.ev(B.l,"systemBackground",null,B.l,B.q,B.l,B.q,B.l,B.MS,B.l,B.MY,0) +B.hj=new A.n(4042914297) +B.ji=new A.n(4028439837) +B.SZ=new A.ev(B.hj,null,null,B.hj,B.ji,B.hj,B.ji,B.hj,B.ji,B.hj,B.ji,0) +B.aix=new A.ahp(B.jx,B.ek) +B.tx=new A.ahr(null,B.hr,B.vN,B.SZ,B.vN,!1,B.aix) +B.dF=new A.Ek(B.tx,null,null,null,null,null,null,null) +B.c2=new A.a1M(0,"base") +B.nn=new A.a1M(1,"elevated") +B.jy=new A.El(0,"stories") +B.no=new A.El(1,"properties") +B.np=new A.El(2,"actions") +B.nq=new A.El(3,"deviceSettings") +B.x=new A.Q(0,0) +B.T2=new A.uO(null,null,B.x,null,null) +B.T3=new A.aAw(1,"latency") +B.T4=new A.M6(null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.T5=new A.M7(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.vO=new A.yI(0,"uninitialized") +B.T6=new A.yI(1,"initializingServices") +B.vP=new A.yI(2,"initializedServices") +B.T7=new A.yI(3,"initializingUi") +B.T8=new A.yI(4,"initialized") +B.T9=new A.aAC(1,"traversalOrder") +B.Ta=new A.a1V(!0,null) +B.dG=new A.a1Y(0,"background") +B.Tb=new A.a1Y(1,"foreground") +B.bh=new A.M8(!1) +B.Tc=new A.M8(!0) +B.ajP=new A.am9(null) +B.fc=new A.uQ(null,null,null,B.ajP,null) +B.eW=new A.I(!0,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.cI=new A.SR(0,"clip") +B.aM=new A.aVV(0,"parent") +B.ajQ=new A.amb(null) +B.vQ=new A.Er(B.eW,null,!0,B.cI,null,B.aM,null,B.ajQ,null) +B.nr=new A.yJ(!1) +B.hs=new A.yJ(!0) +B.ns=new A.yK(!1) +B.nt=new A.yK(!0) +B.nu=new A.yL(!1) +B.ht=new A.yL(!0) +B.jz=new A.uR(2,"tablet") +B.Te=new A.h7("ipad-pad-pro-11inches",B.jz,B.a6) +B.bO=new A.uR(1,"phone") +B.Tf=new A.h7("iphone-se",B.bO,B.a6) +B.Tg=new A.h7("iphone-13-mini",B.bO,B.a6) +B.Th=new A.h7("iphone-12-mini",B.bO,B.a6) +B.Ti=new A.h7("ipad",B.jz,B.a6) +B.Tj=new A.h7("ipad-air-4",B.jz,B.a6) +B.Tk=new A.h7("samsung-galaxy-note20-ultra",B.bO,B.ar) +B.Tl=new A.h7("sony-xperia-1-ii",B.bO,B.ar) +B.Tn=new A.h7("samsung-galaxy-a50",B.bO,B.ar) +B.Tm=new A.h7("samsung-galaxy-s20",B.bO,B.ar) +B.To=new A.h7("iphone-12",B.bO,B.a6) +B.Tp=new A.h7("iphone-12-pro-max",B.bO,B.a6) +B.Tq=new A.h7("oneplus-8-pro",B.bO,B.ar) +B.Tr=new A.h7("iphone-13-pro-max",B.bO,B.a6) +B.Ts=new A.h7("iphone-13",B.bO,B.a6) +B.Tt=new A.h7("samsung-galaxy-note20",B.bO,B.ar) +B.fA=new A.a7V(0,"portrait") +B.nv=new A.a2f(null,1,B.fA,!0) +B.Tv=new A.uR(4,"desktop") +B.Tw=new A.uR(5,"laptop") +B.bG=new A.Mf(3,"info") +B.Tx=new A.Mf(5,"hint") +B.Ty=new A.Mf(6,"summary") +B.akj=new A.pe(1,"sparse") +B.Tz=new A.pe(10,"shallow") +B.TA=new A.pe(11,"truncateChildren") +B.TB=new A.pe(5,"error") +B.TC=new A.pe(6,"whitespace") +B.nw=new A.pe(7,"flat") +B.nx=new A.pe(8,"singleLine") +B.de=new A.pe(9,"errorProperty") +B.TD=new A.Ew(null,null,null,null,null,null,null,null,null,null,null,null) +B.TG=new A.o5(1,"horizontal") +B.vS=new A.o5(2,"endToStart") +B.ny=new A.o5(3,"startToEnd") +B.TH=new A.o5(4,"up") +B.vT=new A.o5(5,"down") +B.vU=new A.o5(6,"none") +B.TI=new A.Mm(null,null,null,null,null) +B.jA=new A.EB(0,"down") +B.ai=new A.EB(1,"start") +B.TJ=new A.o8(0,"path") +B.TK=new A.o8(2,"saveLayer") +B.TM=new A.o8(4,"clip") +B.TO=new A.o8(6,"text") +B.TP=new A.o8(7,"image") +B.TQ=new A.o8(8,"pattern") +B.TR=new A.o8(9,"textPosition") +B.TL=new A.o8(3,"restore") +B.hu=new A.m_(null,B.TL,null,null,null,null) +B.TN=new A.o8(5,"mask") +B.TS=new A.m_(null,B.TN,null,null,null,null) +B.vV=new A.uV(0,"topDown") +B.TU=new A.aCc(1,"end") +B.TV=new A.EC(null,null,null,null,null,null,null,null) +B.TW=new A.MA(null,null,null) +B.G=new A.bv(0) +B.b2=new A.bv(1e5) +B.cU=new A.bv(1e6) +B.TX=new A.bv(12e4) +B.TY=new A.bv(12e5) +B.nz=new A.bv(125e3) +B.TZ=new A.bv(14e4) +B.U_=new A.bv(15e3) +B.hv=new A.bv(15e4) +B.U0=new A.bv(15e5) +B.U1=new A.bv(16e3) +B.U2=new A.bv(16667) +B.dH=new A.bv(167e3) +B.U3=new A.bv(18e4) +B.U4=new A.bv(2e4) +B.ab=new A.bv(2e5) +B.nA=new A.bv(2e6) +B.U5=new A.bv(225e3) +B.vW=new A.bv(25e4) +B.df=new A.bv(3e5) +B.U6=new A.bv(3e6) +B.U7=new A.bv(3e7) +B.vX=new A.bv(375e3) +B.vY=new A.bv(4e4) +B.nB=new A.bv(4e5) +B.U9=new A.bv(45e3) +B.nC=new A.bv(5e4) +B.hw=new A.bv(5e5) +B.hx=new A.bv(6e5) +B.vZ=new A.bv(7e4) +B.jB=new A.bv(75e3) +B.Ua=new A.bv(-38e3) +B.jC=new A.MB(0,"unknown") +B.jD=new A.MB(1,"edgeA") +B.w_=new A.MB(2,"edgeB") +B.w0=new A.kn(16,0,24,0) +B.X=new A.aS(0,0,0,0) +B.Ub=new A.aS(0,0,0,14) +B.Uc=new A.aS(0,0,0,20) +B.Ud=new A.aS(0,0,160,60) +B.Ue=new A.aS(0,0,16,0) +B.Uf=new A.aS(0,0,4,0) +B.Ug=new A.aS(0,0,80,60) +B.Uh=new A.aS(0,0,85,150) +B.Ui=new A.aS(0,0,8,0) +B.Uj=new A.aS(0,14,0,14) +B.dI=new A.aS(0,20,0,0) +B.bP=new A.aS(0,24,0,0) +B.Uk=new A.aS(0,24,0,12) +B.w1=new A.aS(0,24,0,20) +B.Ul=new A.aS(0,24,0,8) +B.w2=new A.aS(0,32,0,32) +B.Um=new A.aS(0,36,0,24) +B.Un=new A.aS(0,40,0,20) +B.w3=new A.aS(0,44,0,34) +B.nD=new A.aS(0,47,0,34) +B.Uo=new A.aS(0,48,0,32) +B.Up=new A.aS(0,4,0,4) +B.Uq=new A.aS(0,5,0,0) +B.jE=new A.aS(0,8,0,8) +B.w4=new A.aS(10,10,10,10) +B.Ur=new A.aS(12,4,12,4) +B.w5=new A.aS(12,8,12,8) +B.Us=new A.aS(14,10,14,10) +B.Ut=new A.aS(15,0,0,10) +B.Uu=new A.aS(15,18,0,0) +B.Uv=new A.aS(15,5,10,5) +B.Uw=new A.aS(15,5,15,10) +B.nE=new A.aS(15,80,15,60) +B.Ux=new A.aS(16,0,0,0) +B.jF=new A.aS(16,0,16,0) +B.Uy=new A.aS(16,12,16,12) +B.nF=new A.aS(16,16,16,16) +B.Uz=new A.aS(16,18,16,18) +B.UA=new A.aS(16,4,16,4) +B.UB=new A.aS(16,8,16,8) +B.UC=new A.aS(20,0,20,3) +B.dJ=new A.aS(20,20,20,20) +B.UD=new A.aS(24,0,24,0) +B.UE=new A.aS(24,0,24,24) +B.nG=new A.aS(25,120,25,80) +B.w6=new A.aS(32,24,32,0) +B.w7=new A.aS(32,32,32,32) +B.UF=new A.aS(36,24,36,0) +B.w8=new A.aS(40,0,0,40) +B.UG=new A.aS(40,24,40,0) +B.UH=new A.aS(40,24,40,24) +B.w9=new A.aS(44,0,44,21) +B.UI=new A.aS(45,45,45,45) +B.UJ=new A.aS(47,0,44,21) +B.wa=new A.aS(47,0,47,21) +B.UK=new A.aS(48,24,48,0) +B.wb=new A.aS(4,0,4,0) +B.UL=new A.aS(4,4,4,4) +B.akk=new A.aS(4,4,4,5) +B.wc=new A.aS(5,5,5,5) +B.UM=new A.aS(80,110,0,0) +B.UN=new A.aS(80,80,0,0) +B.UO=new A.aS(8,0,8,0) +B.UP=new A.aS(8,2,8,5) +B.UQ=new A.aS(8,4,8,4) +B.fd=new A.aS(8,8,8,8) +B.wd=new A.aS(0.5,1,0.5,1) +B.UR=new A.EJ(null) +B.US=new A.ML(0,"noOpinion") +B.UT=new A.ML(1,"enabled") +B.jG=new A.ML(2,"disabled") +B.Xl=A.b(s([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2126,0.7152,0.0722,0,0]),t.n) +B.LQ=new A.a1c(1,"matrix") +B.UU=new A.MO(null,null,B.Xl,B.LQ) +B.UV=new A.o9(0,"start") +B.UW=new A.o9(1,"interrupt") +B.UX=new A.o9(2,"end") +B.we=new A.o9(3,"complete") +B.wf=new A.o9(4,"dispose") +B.UY=new A.o9(5,"event") +B.nH=new A.z3(!1,!1,!1,!1) +B.nI=new A.z3(!1,!1,!1,!0) +B.wg=new A.z4(!1,!1,!1,!1) +B.wh=new A.z4(!1,!1,!1,!0) +B.UZ=new A.ET(null,null,null,null,null,null,null,null,null,null,null,null,null) +B.V_=new A.EU(0,"unknown") +B.bu=new A.EU(1,"boolean") +B.aj=new A.EU(2,"numeric") +B.bQ=new A.EU(3,"string") +B.jH=new A.rb(!1,!1,!1,!1) +B.jI=new A.rb(!1,!1,!1,!0) +B.fe=new A.rb(!0,!1,!1,!1) +B.ff=new A.rb(!0,!1,!1,!0) +B.wi=new A.rc(!1,!1,!1,!1) +B.wj=new A.rc(!1,!1,!1,!0) +B.jJ=new A.rc(!0,!1,!1,!1) +B.jK=new A.rc(!0,!1,!1,!0) +B.wk=new A.m2(!1,!1,!1,!1) +B.wl=new A.m2(!1,!1,!1,!0) +B.V0=new A.m2(!1,!1,!0,!1) +B.V1=new A.m2(!1,!1,!0,!0) +B.el=new A.m2(!0,!1,!1,!1) +B.em=new A.m2(!0,!1,!1,!0) +B.V2=new A.m2(!0,!1,!0,!1) +B.V3=new A.m2(!0,!1,!0,!0) +B.wm=new A.rd(!1,!1,!1,!1) +B.wn=new A.rd(!1,!1,!1,!0) +B.V4=new A.rd(!0,!1,!1,!1) +B.V5=new A.rd(!0,!1,!1,!0) +B.wo=new A.z6(!1,!0,!1,!1) +B.wp=new A.z6(!1,!0,!1,!0) +B.wq=new A.re(!1,!1,!1,!1) +B.wr=new A.re(!1,!1,!1,!0) +B.jL=new A.re(!0,!1,!1,!1) +B.jM=new A.re(!0,!1,!1,!0) +B.ws=new A.z7(!1,!0,!1,!1) +B.wt=new A.z7(!1,!0,!1,!0) +B.hy=new A.v0(!1,!1,!1,!1) +B.hz=new A.v0(!1,!1,!1,!0) +B.fg=new A.v0(!0,!1,!1,!1) +B.fh=new A.v0(!0,!1,!1,!0) +B.jN=new A.rf(!1,!1,!1,!1) +B.jO=new A.rf(!1,!1,!1,!0) +B.nJ=new A.rf(!0,!1,!1,!1) +B.nK=new A.rf(!0,!1,!1,!0) +B.nL=new A.v1(0,"csv") +B.V7=new A.z8(B.ei,null) +B.V8=new A.MY(null) +B.av=new A.z9(0,"none") +B.fi=new A.z9(1,"low") +B.jP=new A.z9(2,"medium") +B.hA=new A.z9(3,"high") +B.V9=new A.a3C(B.x,B.x) +B.hB=new A.a3N(0,"tight") +B.Va=new A.a3N(1,"loose") +B.wu=new A.N4(0,"none") +B.wv=new A.N4(1,"generating") +B.ww=new A.N4(2,"generated") +B.Vj=new A.EY(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.wx=new A.N5(0,"Start") +B.jQ=new A.N5(1,"Update") +B.jR=new A.N5(2,"End") +B.nM=new A.N6(0,"never") +B.wy=new A.N6(1,"auto") +B.nN=new A.N6(2,"always") +B.nO=new A.v7(0,"touch") +B.jS=new A.v7(1,"traditional") +B.akl=new A.aEB(0,"automatic") +B.wz=new A.aEE("focus") +B.jT=new A.a3W(0,"normal") +B.jU=new A.a3W(1,"italic") +B.Vk=new A.oc(0,"w100") +B.Vl=new A.oc(1,"w200") +B.Vm=new A.oc(2,"w300") +B.A=new A.m3(3) +B.nP=new A.oc(3,"w400") +B.az=new A.m3(4) +B.Vn=new A.oc(4,"w500") +B.jW=new A.m3(5) +B.Vo=new A.oc(5,"w600") +B.b3=new A.m3(6) +B.wC=new A.oc(6,"w700") +B.Vp=new A.oc(7,"w800") +B.Vq=new A.oc(8,"w900") +B.wE=new A.j7("Invalid method call",null,null) +B.Vr=new A.j7("Invalid envelope",null,null) +B.Vs=new A.j7("Expected envelope, got nothing",null,null) +B.ch=new A.j7("Message corrupted",null,null) +B.wF=new A.F2(0,"ltr") +B.wG=new A.F2(1,"rtl") +B.nR=new A.F2(3,"sandwich") +B.wH=new A.No(0) +B.wI=new A.No(-1) +B.en=new A.a4a(0,"green") +B.wJ=new A.a4a(1,"blue") +B.wK=new A.Nq(0,"playing") +B.nS=new A.Nq(1,"intro") +B.nT=new A.Nq(2,"gameOver") +B.Vw=new A.V(null,A.bSL(),null,null,null,null,null,A.ac("V")) +B.Vv=new A.V(null,A.bV8(),null,null,null,null,null,A.ac("V")) +B.Vu=new A.V(null,A.bWl(),null,null,null,null,null,A.ac("V")) +B.Fc=new A.bl(35,35) +B.r7=new A.bl(10,10) +B.xl=A.b(s([100,80,15,80]),t.n) +B.xo=A.b(s([50,80]),t.n) +B.Vx=new A.a4j(null) +B.Vy=new A.a4k(null) +B.c3=new A.a4l(0,"accepted") +B.aJ=new A.a4l(1,"rejected") +B.wL=new A.zq(0,"pointerEvents") +B.fj=new A.zq(1,"browserGestures") +B.dK=new A.Ns(0,"ready") +B.jY=new A.Ns(1,"possible") +B.Vz=new A.Ns(2,"defunct") +B.VA=new A.Nv(B.A,B.jT) +B.fk=new A.a4z(0,"linear") +B.wM=new A.a4z(1,"radial") +B.nU=new A.Nz(0,"objectBoundingBox") +B.VB=new A.Nz(1,"userSpaceOnUse") +B.wN=new A.Nz(2,"transformed") +B.jZ=new A.a4D(0,"forward") +B.wO=new A.a4D(1,"reverse") +B.wP=new A.po(3,"left") +B.VH=new A.ee(1,0,1,0.5) +B.VI=new A.ee(1,60,1,0.5) +B.VJ=new A.ee(1,120,1,0.5) +B.VK=new A.ee(1,180,1,0.5) +B.VL=new A.ee(1,240,1,0.5) +B.VM=new A.ee(1,300,1,0.5) +B.VN=new A.ee(1,360,1,0.5) +B.VO=new A.dk(0,0,0,0) +B.nV=new A.dk(1,0,1,1) +B.nW=new A.dk(1,120,1,1) +B.nX=new A.dk(1,180,1,1) +B.nY=new A.dk(1,240,1,1) +B.nZ=new A.dk(1,300,1,1) +B.o_=new A.dk(1,360,1,1) +B.o0=new A.dk(1,60,1,1) +B.eo=new A.Fh(0,"push") +B.ep=new A.Fh(1,"pop") +B.cW=new A.NI(0,"deferToChild") +B.b9=new A.NI(1,"opaque") +B.dg=new A.NI(2,"translucent") +B.VP=new A.aGM("attribute",!0,!0,!1,!1) +B.wQ=new A.a4Y(B.VP) +B.akm=new A.aH4(0,"start") +B.VQ=new A.Fj(null) +B.VR=new A.fO(57490,!0) +B.VT=new A.fO(57585,!1) +B.VU=new A.fO(57687,!1) +B.VV=new A.fO(57688,!1) +B.VW=new A.fO(57704,!1) +B.VX=new A.fO(57718,!1) +B.VZ=new A.fO(58172,!1) +B.W_=new A.fO(58332,!1) +B.W0=new A.fO(58354,!1) +B.W1=new A.fO(58372,!1) +B.W2=new A.fO(58571,!1) +B.W3=new A.fO(58612,!1) +B.W5=new A.fO(58771,!1) +B.W6=new A.fO(61907,!1) +B.W7=new A.fO(62086,!1) +B.W8=new A.fO(62167,!1) +B.W9=new A.fO(62274,!1) +B.Wa=new A.fr(null,null,null,null,null,B.l,null,null,null) +B.Wb=new A.fr(null,null,null,null,null,B.q,null,null,null) +B.wR=new A.fr(24,0,400,0,48,B.q,1,null,!1) +B.VY=new A.fO(57926,!1) +B.wS=new A.zC(B.VY,null,null,null) +B.W4=new A.fO(58727,!1) +B.Wc=new A.zC(B.W4,null,null,null) +B.VS=new A.fO(57496,!1) +B.Wd=new A.zC(B.VS,null,null,null) +B.We=new A.zE(B.mB,B.mA) +B.Wf=new A.zG(null,null,null,null,null,null) +B.wT=new A.vh(0,"png") +B.o1=new A.vh(1,"jpeg") +B.wU=new A.vh(2,"webp") +B.wV=new A.vh(3,"gif") +B.wW=new A.vh(4,"bmp") +B.hC=new A.vi(0,"repeat") +B.bH=new A.vi(1,"repeatX") +B.k_=new A.vi(2,"repeatY") +B.dL=new A.vi(3,"noRepeat") +B.Wm=new A.a5e(!0,!0,B.oI) +B.b4=A.b(s([]),t.oU) +B.Wn=new A.ry("\ufffc",null,null,!0,!0,B.b4) +B.Wo=new A.Ft(null,null,null,null) +B.Wp=new A.Fs(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,!0,null,null,null) +B.Wq=new A.Fs(null,null,null,null,null,null,null,null,null,null,"Filter stories and chapters",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,!0,null,null,null) +B.Wr=new A.kr(0) +B.Ws=new A.kr(-1) +B.Wt=new A.iJ(0,0,0) +B.Wu=new A.iJ(4194303,4194303,1048575) +B.akn=new A.aHV(2,"quintic") +B.Ww=new A.ib(0.4,1,B.z) +B.Wx=new A.ib(0.0825,0.2075,B.z) +B.wX=new A.ib(0.5,1,B.bt) +B.SR=new A.hn(0.6,0.04,0.98,0.335) +B.Wy=new A.ib(0.4,0.6,B.SR) +B.WB=new A.ib(0,0.1,B.z) +B.WC=new A.ib(0,0.25,B.z) +B.WA=new A.ib(0.125,0.25,B.z) +B.WE=new A.ib(0.25,0.5,B.z) +B.Wz=new A.ib(0.6,1,B.z) +B.WD=new A.ib(0.75,1,B.z) +B.WF=new A.ib(0.2075,0.4175,B.z) +B.WG=new A.ib(0.2,0.6,B.vL) +B.WH=new A.ib(0.72,1,B.aQ) +B.wY=new A.O1(0,"grapheme") +B.wZ=new A.O1(1,"word") +B.x_=new A.ok(0,"up") +B.WK=new A.ok(1,"upLeft") +B.WL=new A.ok(2,"upRight") +B.WM=new A.ok(3,"right") +B.WN=new A.ok(4,"down") +B.WO=new A.ok(5,"downRight") +B.WP=new A.ok(6,"downLeft") +B.WQ=new A.ok(7,"left") +B.x0=new A.ok(8,"idle") +B.x1=new A.a5M(null) +B.WR=new A.a5N(null,null) +B.o2=new A.FD(2,"center") +B.WU=new A.a5R(0,"rawKeyData") +B.WV=new A.a5R(1,"keyDataThenRawKeyData") +B.cX=new A.Ob(0,"down") +B.hD=new A.zS(0,"keyboard") +B.WW=new A.lo(B.G,B.cX,0,0,null,!1) +B.ci=new A.pz(0,"handled") +B.dM=new A.pz(1,"ignored") +B.k0=new A.pz(2,"skipRemainingHandlers") +B.cj=new A.Ob(1,"up") +B.WX=new A.Ob(2,"repeat") +B.kr=new A.u(4294967564) +B.WY=new A.FG(B.kr,1,"scrollLock") +B.kq=new A.u(4294967562) +B.o3=new A.FG(B.kq,0,"numLock") +B.hS=new A.u(4294967556) +B.WZ=new A.FG(B.hS,2,"capsLock") +B.fl=new A.zV(0,"any") +B.dh=new A.zV(3,"all") +B.X_=new A.zW(null) +B.x2=new A.a5X(!1,255) +B.X0=new A.a5Y(255) +B.X1=new A.aIS(0,"platformDefault") +B.ck=new A.rD(0,"height") +B.x3=new A.rD(1,"width") +B.o4=new A.rD(2,"none") +B.x4=new A.pA(0,"preComp") +B.x5=new A.om(0,"tileLayer") +B.x6=new A.pA(2,"image") +B.o5=new A.pA(6,"unknown") +B.k3=new A.a63(0,"ariaLabel") +B.k4=new A.a63(1,"domText") +B.X9=new A.a6b(1,"block") +B.k5=new A.a6b(2,"done") +B.di=new A.FL(0,"inactive") +B.eq=new A.FL(1,"atLower") +B.er=new A.FL(2,"atUpper") +B.fm=new A.FL(3,"equal") +B.es=new A.vA(0,"opportunity") +B.Q=new A.vA(1,"prohibited") +B.dN=new A.vA(2,"mandatory") +B.dO=new A.vA(3,"endOfText") +B.x7=new A.FN(0,"butt") +B.x8=new A.FN(1,"round") +B.x9=new A.FN(2,"unknown") +B.o6=new A.d4(0,"CM") +B.k6=new A.d4(1,"BA") +B.et=new A.d4(10,"PO") +B.hE=new A.d4(11,"OP") +B.hF=new A.d4(12,"CP") +B.k7=new A.d4(13,"IS") +B.hG=new A.d4(14,"HY") +B.o7=new A.d4(15,"SY") +B.dP=new A.d4(16,"NU") +B.o8=new A.d4(17,"CL") +B.o9=new A.d4(18,"GL") +B.xa=new A.d4(19,"BB") +B.hH=new A.d4(2,"LF") +B.cl=new A.d4(20,"HL") +B.k8=new A.d4(21,"JL") +B.hI=new A.d4(22,"JV") +B.hJ=new A.d4(23,"JT") +B.oa=new A.d4(24,"NS") +B.ob=new A.d4(25,"ZW") +B.oc=new A.d4(26,"ZWJ") +B.od=new A.d4(27,"B2") +B.xb=new A.d4(28,"IN") +B.oe=new A.d4(29,"WJ") +B.k9=new A.d4(3,"BK") +B.of=new A.d4(30,"ID") +B.ka=new A.d4(31,"EB") +B.hK=new A.d4(32,"H2") +B.hL=new A.d4(33,"H3") +B.og=new A.d4(34,"CB") +B.kb=new A.d4(35,"RI") +B.kc=new A.d4(36,"EM") +B.kd=new A.d4(4,"CR") +B.fn=new A.d4(5,"SP") +B.xc=new A.d4(6,"EX") +B.oh=new A.d4(7,"QU") +B.cm=new A.d4(8,"AL") +B.ke=new A.d4(9,"PR") +B.xd=new A.FO(0,"miter") +B.xe=new A.FO(1,"round") +B.xf=new A.FO(2,"bevel") +B.N=new A.Ci(0,"clamp") +B.Yr=A.b(s([B.B,B.q]),t.O) +B.Xa=new A.eJ(B.d7,B.cN,B.N,B.Yr,null,null) +B.Ys=A.b(s([B.B,B.n8]),t.O) +B.Xb=new A.eJ(B.d7,B.cN,B.N,B.Ys,null,null) +B.Yt=A.b(s([B.B,B.l]),t.O) +B.Xc=new A.eJ(B.d7,B.cN,B.N,B.Yt,null,null) +B.Xv=A.b(s([B.l,B.hg,B.B,B.q]),t.O) +B.Xy=A.b(s([0,0.5,0.5,1]),t.n) +B.xg=new A.eJ(B.d7,B.cN,B.N,B.Xv,B.Xy,null) +B.Yu=A.b(s([B.l,B.q]),t.O) +B.Xd=new A.eJ(B.d7,B.cN,B.N,B.Yu,null,null) +B.kf=new A.A3(B.Kf,A.ac("A3")) +B.xh=new A.Os(0,"leading") +B.xi=new A.Os(1,"trailing") +B.ako=new A.Os(2,"platform") +B.Xe=new A.FW(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.xj=new A.A7(0,"threeLine") +B.Xf=new A.A7(1,"titleHeight") +B.Xg=new A.A7(2,"top") +B.Xh=new A.A7(3,"center") +B.Xi=new A.A7(4,"bottom") +B.Fj=new A.pV(0,"rightDown") +B.a5C=new A.pV(1,"rightUp") +B.a5D=new A.pV(2,"leftDown") +B.a5E=new A.pV(3,"leftUp") +B.Xj=A.b(s([B.Fj,B.a5C,B.a5D,B.a5E]),A.ac("v")) +B.xk=A.b(s([0,4,12,1,5,13,3,7,15]),t.t) +B.Xk=A.b(s([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),t.t) +B.Xm=A.b(s([0,0]),t.t) +B.Xn=A.b(s([0,1]),t.n) +B.Xo=A.b(s([0,6,12,18]),t.t) +B.Xp=A.b(s([192,193,194]),t.t) +B.Xt=A.b(s([239,191,189]),t.t) +B.a6P=new A.HE(0,"rectangle") +B.a6S=new A.HE(1,"circle") +B.a6V=new A.HE(2,"polygon") +B.Xw=A.b(s([B.a6P,B.a6S,B.a6V]),A.ac("v")) +B.Xx=A.b(s([0,0,32722,12287,65534,34815,65534,18431]),t.t) +B.kg=A.b(s([0,0,65490,45055,65535,34815,65534,18431]),t.t) +B.d0=new A.qa(0,"left") +B.ir=new A.qa(1,"right") +B.eV=new A.qa(2,"center") +B.e4=new A.qa(3,"justify") +B.aA=new A.qa(4,"start") +B.li=new A.qa(5,"end") +B.xm=A.b(s([B.d0,B.ir,B.eV,B.e4,B.aA,B.li]),A.ac("v")) +B.XV=A.b(s([0,0,32754,11263,65534,34815,65534,18431]),t.t) +B.aiI=new A.tW(0,0) +B.aiL=new A.tW(1,0.05) +B.aiK=new A.tW(3,0.08) +B.aiM=new A.tW(6,0.11) +B.aiJ=new A.tW(8,0.12) +B.aiN=new A.tW(12,0.14) +B.xn=A.b(s([B.aiI,B.aiL,B.aiK,B.aiM,B.aiJ,B.aiN]),A.ac("v")) +B.XX=A.b(s([4,9,14,19]),t.t) +B.Y6=A.b(s([65533]),t.t) +B.K4=new A.uq() +B.ib=new A.ab2(1,"page") +B.l5=new A.ik(B.a7,B.ib) +B.Ye=A.b(s([B.K4,B.l5]),A.ac("v")) +B.tK=new A.WX(0,"named") +B.I7=new A.WX(1,"anonymous") +B.Yg=A.b(s([B.tK,B.I7]),A.ac("v")) +B.eu=A.b(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.t) +B.Vi=new A.ob(-1,-1) +B.Vf=new A.ob(1,-1) +B.Vh=new A.ob(-1,1) +B.Ve=new A.ob(1,1) +B.Vc=new A.ob(0,-1) +B.Vg=new A.ob(-1,0) +B.Vb=new A.ob(0,1) +B.Vd=new A.ob(1,0) +B.Yj=A.b(s([B.Vi,B.Vf,B.Vh,B.Ve,B.Vc,B.Vg,B.Vb,B.Vd]),A.ac("v")) +B.Sc=new A.n(4294962158) +B.RV=new A.n(4294954450) +B.QF=new A.n(4293892762) +B.Qk=new A.n(4293227379) +B.QD=new A.n(4293874512) +B.QT=new A.n(4294198070) +B.Qj=new A.n(4293212469) +B.PJ=new A.n(4291176488) +B.Pu=new A.n(4290190364) +B.a1C=new A.cc([50,B.Sc,100,B.RV,200,B.QF,300,B.Qk,400,B.QD,500,B.QT,600,B.Qj,700,B.jo,800,B.PJ,900,B.Pu],t.m) +B.co=new A.fR(B.a1C,4294198070) +B.Rg=new A.n(4294763756) +B.R5=new A.n(4294491088) +B.QV=new A.n(4294217649) +B.QI=new A.n(4293943954) +B.Qx=new A.n(4293673082) +B.Qu=new A.n(4293467747) +B.PZ=new A.n(4292352864) +B.PG=new A.n(4290910299) +B.Pb=new A.n(4289533015) +B.OA=new A.n(4287106639) +B.a1z=new A.cc([50,B.Rg,100,B.R5,200,B.QV,300,B.QI,400,B.Qx,500,B.Qu,600,B.PZ,700,B.PG,800,B.Pb,900,B.OA],t.m) +B.CW=new A.fR(B.a1z,4293467747) +B.QR=new A.n(4294174197) +B.Qh=new A.n(4292984551) +B.PR=new A.n(4291728344) +B.Py=new A.n(4290406600) +B.Pa=new A.n(4289415100) +B.OX=new A.n(4288423856) +B.OL=new A.n(4287505578) +B.Of=new A.n(4286259106) +B.O6=new A.n(4285143962) +B.Nz=new A.n(4283045004) +B.a1E=new A.cc([50,B.QR,100,B.Qh,200,B.PR,300,B.Py,400,B.Pa,500,B.OX,600,B.OL,700,B.Of,800,B.O6,900,B.Nz],t.m) +B.CX=new A.fR(B.a1E,4288423856) +B.QA=new A.n(4293781494) +B.PT=new A.n(4291937513) +B.Pq=new A.n(4289961435) +B.OS=new A.n(4287985101) +B.Ok=new A.n(4286470082) +B.O2=new A.n(4284955319) +B.NQ=new A.n(4284364209) +B.NH=new A.n(4283510184) +B.Nt=new A.n(4282722208) +B.N7=new A.n(4281408402) +B.a1x=new A.cc([50,B.QA,100,B.PT,200,B.Pq,300,B.OS,400,B.Ok,500,B.O2,600,B.NQ,700,B.NH,800,B.Nt,900,B.N7],t.m) +B.CV=new A.fR(B.a1x,4284955319) +B.Qs=new A.n(4293454582) +B.PH=new A.n(4291152617) +B.P_=new A.n(4288653530) +B.Oe=new A.n(4286154443) +B.NN=new A.n(4284246976) +B.Nm=new A.n(4282339765) +B.Nh=new A.n(4281944491) +B.N6=new A.n(4281352095) +B.N1=new A.n(4280825235) +B.MQ=new A.n(4279903102) +B.a1s=new A.cc([50,B.Qs,100,B.PH,200,B.P_,300,B.Oe,400,B.NN,500,B.Nm,600,B.Nh,700,B.N6,800,B.N1,900,B.MQ],t.m) +B.a2_=new A.fR(B.a1s,4282339765) +B.NY=new A.n(4284790262) +B.Nq=new A.n(4282557941) +B.MN=new A.n(4279592384) +B.ML=new A.n(4279060385) +B.a1p=new A.cc([50,B.vs,100,B.n9,200,B.vk,300,B.NY,400,B.Nq,500,B.v7,600,B.v5,700,B.v4,800,B.MN,900,B.ML],t.m) +B.bi=new A.fR(B.a1p,4280391411) +B.Qi=new A.n(4292998654) +B.Pr=new A.n(4289979900) +B.Ou=new A.n(4286698746) +B.NG=new A.n(4283417591) +B.N2=new A.n(4280923894) +B.MJ=new A.n(4278430196) +B.MI=new A.n(4278426597) +B.MH=new A.n(4278356177) +B.MG=new A.n(4278351805) +B.MF=new A.n(4278278043) +B.a1A=new A.cc([50,B.Qi,100,B.Pr,200,B.Ou,300,B.NG,400,B.N2,500,B.MJ,600,B.MI,700,B.MH,800,B.MG,900,B.MF],t.m) +B.a22=new A.fR(B.a1A,4278430196) +B.Qf=new A.n(4292933626) +B.Pm=new A.n(4289915890) +B.Os=new A.n(4286635754) +B.ND=new A.n(4283289825) +B.N0=new A.n(4280731354) +B.Mv=new A.n(4278238420) +B.Mu=new A.n(4278234305) +B.Mt=new A.n(4278228903) +B.Mp=new A.n(4278223759) +B.Mj=new A.n(4278214756) +B.a1B=new A.cc([50,B.Qf,100,B.Pm,200,B.Os,300,B.ND,400,B.N0,500,B.Mv,600,B.Mu,700,B.Mt,800,B.Mp,900,B.Mj],t.m) +B.oM=new A.fR(B.a1B,4278238420) +B.Qe=new A.n(4292932337) +B.Pl=new A.n(4289912795) +B.Or=new A.n(4286630852) +B.NC=new A.n(4283283116) +B.N_=new A.n(4280723098) +B.Ms=new A.n(4278228616) +B.Mq=new A.n(4278225275) +B.Mm=new A.n(4278221163) +B.Ml=new A.n(4278217052) +B.a1F=new A.cc([50,B.Qe,100,B.Pl,200,B.Or,300,B.NC,400,B.N_,500,B.Ms,600,B.Mq,700,B.Mm,800,B.Ml,900,B.uZ],t.m) +B.a24=new A.fR(B.a1F,4278228616) +B.Qt=new A.n(4293457385) +B.PL=new A.n(4291356361) +B.P4=new A.n(4289058471) +B.Ot=new A.n(4286695300) +B.O0=new A.n(4284922730) +B.NB=new A.n(4283215696) +B.Nr=new A.n(4282622023) +B.Ng=new A.n(4281896508) +B.N4=new A.n(4281236786) +B.MR=new A.n(4279983648) +B.a1r=new A.cc([50,B.Qt,100,B.PL,200,B.P4,300,B.Ot,400,B.O0,500,B.NB,600,B.Nr,700,B.Ng,800,B.N4,900,B.MR],t.m) +B.i3=new A.fR(B.a1r,4283215696) +B.QP=new A.n(4294047977) +B.Q8=new A.n(4292668872) +B.PI=new A.n(4291158437) +B.Pe=new A.n(4289648001) +B.OY=new A.n(4288466021) +B.OI=new A.n(4287349578) +B.Oh=new A.n(4286362434) +B.O4=new A.n(4285046584) +B.NL=new A.n(4283796271) +B.Na=new A.n(4281559326) +B.a1D=new A.cc([50,B.QP,100,B.Q8,200,B.PI,300,B.Pe,400,B.OY,500,B.OI,600,B.Oh,700,B.O4,800,B.NL,900,B.Na],t.m) +B.a23=new A.fR(B.a1D,4287349578) +B.R8=new A.n(4294573031) +B.QL=new A.n(4293981379) +B.Qp=new A.n(4293324444) +B.Q7=new A.n(4292667253) +B.PW=new A.n(4292141399) +B.PQ=new A.n(4291681337) +B.PF=new A.n(4290824755) +B.Pf=new A.n(4289705003) +B.OZ=new A.n(4288584996) +B.Ov=new A.n(4286740247) +B.a1u=new A.cc([50,B.R8,100,B.QL,200,B.Qp,300,B.Q7,400,B.PW,500,B.PQ,600,B.PF,700,B.Pf,800,B.OZ,900,B.Ov],t.m) +B.a20=new A.fR(B.a1u,4291681337) +B.St=new A.n(4294966759) +B.So=new A.n(4294965700) +B.Sk=new A.n(4294964637) +B.Si=new A.n(4294963574) +B.Se=new A.n(4294962776) +B.Sa=new A.n(4294961979) +B.Rh=new A.n(4294826037) +B.Re=new A.n(4294688813) +B.R7=new A.n(4294551589) +B.QY=new A.n(4294278935) +B.a1t=new A.cc([50,B.St,100,B.So,200,B.Sk,300,B.Si,400,B.Se,500,B.Sa,600,B.Rh,700,B.Re,800,B.R7,900,B.QY],t.m) +B.fq=new A.fR(B.a1t,4294961979) +B.Sn=new A.n(4294965473) +B.Sd=new A.n(4294962355) +B.S3=new A.n(4294959234) +B.RX=new A.n(4294956367) +B.RS=new A.n(4294953512) +B.RP=new A.n(4294951175) +B.RK=new A.n(4294947584) +B.RD=new A.n(4294942720) +B.RA=new A.n(4294938368) +B.Rs=new A.n(4294930176) +B.a1w=new A.cc([50,B.Sn,100,B.Sd,200,B.S3,300,B.RX,400,B.RS,500,B.RP,600,B.RK,700,B.RD,800,B.RA,900,B.Rs],t.m) +B.dl=new A.fR(B.a1w,4294951175) +B.Sj=new A.n(4294964192) +B.S4=new A.n(4294959282) +B.RT=new A.n(4294954112) +B.RM=new A.n(4294948685) +B.RG=new A.n(4294944550) +B.RC=new A.n(4294940672) +B.Rd=new A.n(4294675456) +B.QX=new A.n(4294278144) +B.QE=new A.n(4293880832) +B.Qn=new A.n(4293284096) +B.a1G=new A.cc([50,B.Sj,100,B.S4,200,B.RT,300,B.RM,400,B.RG,500,B.RC,600,B.Rd,700,B.QX,800,B.QE,900,B.Qn],t.m) +B.fr=new A.fR(B.a1G,4294940672) +B.Rf=new A.n(4294699495) +B.RU=new A.n(4294954172) +B.RJ=new A.n(4294945681) +B.Rx=new A.n(4294937189) +B.Rt=new A.n(4294930499) +B.Ro=new A.n(4294924066) +B.QU=new A.n(4294201630) +B.Qm=new A.n(4293282329) +B.Q_=new A.n(4292363029) +B.PD=new A.n(4290721292) +B.a1y=new A.cc([50,B.Rf,100,B.RU,200,B.RJ,300,B.Rx,400,B.Rt,500,B.Ro,600,B.QU,700,B.Qm,800,B.Q_,900,B.PD],t.m) +B.oL=new A.fR(B.a1y,4294924066) +B.QH=new A.n(4293913577) +B.PY=new A.n(4292332744) +B.PA=new A.n(4290554532) +B.P2=new A.n(4288776319) +B.OK=new A.n(4287458915) +B.Oc=new A.n(4286141768) +B.O9=new A.n(4285353025) +B.NP=new A.n(4284301367) +B.NF=new A.n(4283315246) +B.Nl=new A.n(4282263331) +B.a1v=new A.cc([50,B.QH,100,B.PY,200,B.PA,300,B.P2,400,B.OK,500,B.Oc,600,B.O9,700,B.NP,800,B.NF,900,B.Nl],t.m) +B.a21=new A.fR(B.a1v,4286141768) +B.Qz=new A.n(4293718001) +B.PS=new A.n(4291811548) +B.Ph=new A.n(4289773253) +B.ON=new A.n(4287669422) +B.Ob=new A.n(4286091420) +B.NT=new A.n(4284513675) +B.NI=new A.n(4283723386) +B.Nu=new A.n(4282735204) +B.Nc=new A.n(4281812815) +B.MZ=new A.n(4280693304) +B.a1q=new A.cc([50,B.Qz,100,B.PS,200,B.Ph,300,B.ON,400,B.Ob,500,B.NT,600,B.NI,700,B.Nu,800,B.Nc,900,B.MZ],t.m) +B.a1Z=new A.fR(B.a1q,4284513675) +B.xp=A.b(s([B.co,B.CW,B.CX,B.CV,B.a2_,B.bi,B.a22,B.oM,B.a24,B.i3,B.a23,B.a20,B.fq,B.dl,B.fr,B.oL,B.a21,B.a1Z]),A.ac("v")) +B.c4=A.b(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.t) +B.fQ=new A.HW(0,"miter") +B.iq=new A.HW(1,"round") +B.GD=new A.HW(2,"bevel") +B.Yk=A.b(s([B.fQ,B.iq,B.GD]),A.ac("v")) +B.Yn=A.b(s([B.mn,B.mp]),A.ac("v")) +B.F9=new A.mu(0,"string") +B.a52=new A.mu(1,"int") +B.a53=new A.mu(2,"float") +B.a54=new A.mu(3,"bool") +B.a55=new A.mu(4,"color") +B.a56=new A.mu(5,"file") +B.a57=new A.mu(6,"object") +B.Yo=A.b(s([B.F9,B.a52,B.a53,B.a54,B.a55,B.a56,B.a57]),A.ac("v")) +B.a0N=new A.pE(0,"orthogonal") +B.a0O=new A.pE(1,"isometric") +B.a0P=new A.pE(2,"staggered") +B.a0Q=new A.pE(3,"hexagonal") +B.Yp=A.b(s([B.a0N,B.a0O,B.a0P,B.a0Q]),A.ac("v")) +B.Yq=A.b(s([0,0,1048576,531441,1048576,390625,279936,823543,262144,531441,1e6,161051,248832,371293,537824,759375,1048576,83521,104976,130321,16e4,194481,234256,279841,331776,390625,456976,531441,614656,707281,81e4,923521,1048576,35937,39304,42875,46656]),t.t) +B.xq=A.b(s([B.l,B.hg]),t.O) +B.hM=A.b(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.t) +B.VC=new A.vd(0,"orthogonal") +B.VD=new A.vd(1,"isometric") +B.Yw=A.b(s([B.VC,B.VD]),A.ac("v")) +B.TT=new A.uV(1,"indexOrder") +B.Yx=A.b(s([B.vV,B.TT]),A.ac("v")) +B.V6=new A.v1(1,"base64") +B.Yy=A.b(s([B.nL,B.V6]),A.ac("v")) +B.a9V=new A.wF(0,"solid") +B.GU=new A.wF(1,"double") +B.a9Y=new A.wF(2,"dotted") +B.aa_=new A.wF(3,"dashed") +B.aa1=new A.wF(4,"wavy") +B.Yz=A.b(s([B.a9V,B.GU,B.a9Y,B.aa_,B.aa1]),A.ac("v")) +B.xr=A.b(s([B.mQ,B.mR,B.mS]),A.ac("v")) +B.xs=A.b(s([0,0,26624,1023,65534,2047,65534,2047]),t.t) +B.hN=A.b(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.t) +B.hO=A.b(s([B.f0,B.d8,B.iX,B.iY,B.iZ]),t.QP) +B.cx=new A.oU(0,"leading") +B.cb=new A.oU(1,"title") +B.cc=new A.oU(2,"subtitle") +B.d5=new A.oU(3,"trailing") +B.YF=A.b(s([B.cx,B.cb,B.cc,B.d5]),A.ac("v")) +B.Z9=A.b(s([137,80,78,71,13,10,26,10]),t.Z) +B.Wg=new A.rv(B.Z9,"image/png") +B.Z_=A.b(s([71,73,70,56,55,97]),t.Z) +B.Wk=new A.rv(B.Z_,"image/gif") +B.Z0=A.b(s([71,73,70,56,57,97]),t.Z) +B.Wl=new A.rv(B.Z0,"image/gif") +B.Xu=A.b(s([255,216,255]),t.Z) +B.Wj=new A.rv(B.Xu,"image/jpeg") +B.Yl=A.b(s([82,73,70,70,null,null,null,null,87,69,66,80]),t.Z) +B.Wi=new A.rv(B.Yl,"image/webp") +B.Y7=A.b(s([66,77]),t.Z) +B.Wh=new A.rv(B.Y7,"image/bmp") +B.YK=A.b(s([B.Wg,B.Wk,B.Wl,B.Wj,B.Wi,B.Wh]),A.ac("v")) +B.uW=new A.n(419430400) +B.kB=new A.i(0,2) +B.Js=new A.cx(0.75,B.a0,B.uW,B.kB,1.5) +B.YL=A.b(s([B.Js]),t.sq) +B.IU=new A.qJ(B.bF,0,"normal") +B.IR=new A.qJ(B.j_,1,"additive") +B.IT=new A.qJ(B.ea,2,"multiply") +B.IS=new A.qJ(B.mu,3,"screen") +B.xt=A.b(s([B.IU,B.IR,B.IT,B.IS]),A.ac("v")) +B.oY=new A.i(1,1) +B.a6O=new A.oC(B.q,B.oY,1) +B.kh=A.b(s([B.a6O]),t.kO) +B.iu=new A.Ci(1,"repeated") +B.iv=new A.Ci(2,"mirror") +B.eX=new A.Ci(3,"decal") +B.xu=A.b(s([B.N,B.iu,B.iv,B.eX]),A.ac("v")) +B.YM=A.b(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.t) +B.a_k=new A.rH("en","US") +B.ki=A.b(s([B.a_k]),t.ss) +B.YN=A.b(s([0,0,32722,12287,65535,34815,65534,18431]),t.t) +B.xv=A.b(s([0,0,65490,12287,65535,34815,65534,18431]),t.t) +B.YP=A.b(s([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),t.t) +B.YQ=A.b(s(["pointerdown","pointermove","pointerleave","pointerup","pointercancel","touchstart","touchend","touchmove","touchcancel","mousedown","mousemove","mouseleave","mouseup","keyup","keydown"]),t.T) +B.a3k=new A.i(2,2) +B.a6N=new A.oC(B.co,B.a3k,2) +B.a3o=new A.i(4,4) +B.a6M=new A.oC(B.fq,B.a3o,4) +B.YR=A.b(s([B.a6N,B.a6M]),t.kO) +B.bX=new A.PK(0,"nonZero") +B.aD=new A.PK(1,"evenOdd") +B.YW=A.b(s([B.bX,B.aD]),A.ac("v")) +B.YX=A.b(s(["PauseMenu"]),t.T) +B.YZ=A.b(s([23,114,69,56,80,144]),t.t) +B.YY=A.b(s([49,65,89,38,83,89]),t.t) +B.xx=A.b(s([0,1,3,7,15,31,63,127,255]),t.t) +B.io=new A.wA(0,"x") +B.ip=new A.wA(1,"y") +B.Z1=A.b(s([B.io,B.ip]),A.ac("v")) +B.rJ=new A.wB(0,"odd") +B.rK=new A.wB(1,"even") +B.Z2=A.b(s([B.rJ,B.rK]),A.ac("v")) +B.a9w=new A.Ss(0,"left") +B.a9x=new A.Ss(1,"right") +B.Z3=A.b(s([B.a9w,B.a9x]),A.ac("v")) +B.aL=new A.SG(0,"upstream") +B.Z4=A.b(s([B.aL,B.v]),A.ac("v")) +B.ad=new A.qc(0,"rtl") +B.r=new A.qc(1,"ltr") +B.oi=A.b(s([B.ad,B.r]),A.ac("v")) +B.H9=new A.Ch(0,"map") +B.Z5=A.b(s([B.H9]),A.ac("v")) +B.Ha=new A.Cj(0,"tileset") +B.Z6=A.b(s([B.Ha]),A.ac("v")) +B.r_=new A.Q3(1) +B.F2=new A.Q3(2) +B.Z7=A.b(s([B.r_,B.F2]),A.ac("v")) +B.ahX=new A.tL(0,"center") +B.ahY=new A.tL(1,"bottom") +B.HC=new A.tL(2,"top") +B.Z8=A.b(s([B.ahX,B.ahY,B.HC]),A.ac("v")) +B.xy=A.b(s([0,0,32776,33792,1,10240,0,0]),t.t) +B.X2=new A.om(1,"objectGroup") +B.X4=new A.om(2,"imageLayer") +B.X5=new A.om(3,"group") +B.Za=A.b(s([B.x5,B.X2,B.X4,B.X5]),A.ac("v")) +B.Zb=A.b(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.t) +B.X3=new A.pA(1,"solid") +B.X6=new A.pA(3,"nullLayer") +B.X7=new A.pA(4,"shape") +B.X8=new A.pA(5,"text") +B.Zc=A.b(s([B.x4,B.X3,B.x6,B.X6,B.X7,B.X8,B.o5]),A.ac("v")) +B.Zf=A.b(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.t) +B.oO=new A.rJ(0,"none") +B.a27=new A.rJ(1,"add") +B.oP=new A.rJ(2,"invert") +B.CZ=new A.rJ(3,"luma") +B.D_=new A.rJ(4,"lumaInverted") +B.a28=new A.rJ(5,"unknown") +B.Zg=A.b(s([B.oO,B.a27,B.oP,B.CZ,B.D_,B.a28]),A.ac("v")) +B.jV=new A.m3(0) +B.wA=new A.m3(1) +B.wB=new A.m3(2) +B.wD=new A.m3(7) +B.nQ=new A.m3(8) +B.oj=A.b(s([B.jV,B.wA,B.wB,B.A,B.az,B.jW,B.b3,B.wD,B.nQ]),A.ac("v")) +B.Zh=A.b(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.t) +B.Zi=A.b(s(["button1","button2"]),t.T) +B.a6Q=new A.HD(0,"circle") +B.a6T=new A.HD(1,"rectangle") +B.a6W=new A.HD(2,"polygon") +B.Zj=A.b(s([B.a6Q,B.a6T,B.a6W]),A.ac("v")) +B.a6R=new A.HF(0,"circle") +B.a6U=new A.HF(1,"rectangle") +B.a6X=new A.HF(2,"polygon") +B.Zk=A.b(s([B.a6R,B.a6U,B.a6X]),A.ac("v")) +B.xz=A.b(s(["text","multiline","number","phone","datetime","emailAddress","url","visiblePassword","name","address","none"]),t.T) +B.Zl=A.b(s(["click","scroll"]),t.T) +B.kj=A.b(s([0,0,26498,1023,65534,34815,65534,18431]),t.t) +B.a2p=new A.ml(0,"unspecified") +B.a2q=new A.ml(1,"topLeft") +B.a2r=new A.ml(2,"top") +B.a2s=new A.ml(3,"topRight") +B.a2t=new A.ml(4,"left") +B.a2u=new A.ml(5,"center") +B.a2v=new A.ml(6,"right") +B.a2w=new A.ml(7,"bottomLeft") +B.a2x=new A.ml(8,"bottom") +B.a2y=new A.ml(9,"bottomRight") +B.Zv=A.b(s([B.a2p,B.a2q,B.a2r,B.a2s,B.a2t,B.a2u,B.a2v,B.a2w,B.a2x,B.a2y]),A.ac("v")) +B.xA=A.b(s([B.xd,B.xe,B.xf]),A.ac("v")) +B.ZM=A.b(s([]),t.QP) +B.xC=A.b(s([]),A.ac("v")) +B.ZJ=A.b(s([]),t.IF) +B.ZD=A.b(s([]),t._) +B.ZI=A.b(s([]),t.lX) +B.xD=A.b(s([]),t.EN) +B.ZA=A.b(s([]),t.fJ) +B.ZC=A.b(s([]),t.ER) +B.Zw=A.b(s([]),t.tc) +B.ZK=A.b(s([]),t.c) +B.kk=A.b(s([]),t.jl) +B.Zy=A.b(s([]),t.wi) +B.Zx=A.b(s([]),A.ac("v>")) +B.ZP=A.b(s([]),t.Vz) +B.ZE=A.b(s([]),t.H9) +B.ol=A.b(s([]),t.AO) +B.ZB=A.b(s([]),t.D1) +B.om=A.b(s([]),t.QF) +B.akp=A.b(s([]),t.nk) +B.ZR=A.b(s([]),t.Lx) +B.ZF=A.b(s([]),t.fm) +B.xB=A.b(s([]),t.p) +B.ZQ=A.b(s([]),A.ac("v")) +B.xE=A.b(s([]),t.ov) +B.ZH=A.b(s([]),t.lD) +B.on=A.b(s([]),t.n) +B.ok=A.b(s([]),t.t) +B.F=A.b(s([]),t.ee) +B.ZG=A.b(s([]),t.iG) +B.Zz=A.b(s([]),t._m) +B.tm=new A.fZ(0,"DoubleQuote") +B.h0=new A.fZ(1,"SingleQuote") +B.bK=new A.fZ(2,"HebrewLetter") +B.lY=new A.fZ(3,"CR") +B.lZ=new A.fZ(4,"LF") +B.tq=new A.fZ(5,"Newline") +B.iK=new A.fZ(6,"Extend") +B.aij=new A.fZ(7,"RegionalIndicator") +B.iL=new A.fZ(8,"Format") +B.iM=new A.fZ(9,"Katakana") +B.cL=new A.fZ(10,"ALetter") +B.tn=new A.fZ(11,"MidLetter") +B.to=new A.fZ(12,"MidNum") +B.iI=new A.fZ(13,"MidNumLet") +B.dv=new A.fZ(14,"Numeric") +B.lX=new A.fZ(15,"ExtendNumLet") +B.iJ=new A.fZ(16,"ZWJ") +B.tp=new A.fZ(17,"WSegSpace") +B.HH=new A.fZ(18,"Unknown") +B.ZS=A.b(s([B.tm,B.h0,B.bK,B.lY,B.lZ,B.tq,B.iK,B.aij,B.iL,B.iM,B.cL,B.tn,B.to,B.iI,B.dv,B.lX,B.iJ,B.tp,B.HH]),A.ac("v")) +B.ZU=A.b(s([B.hC,B.bH,B.k_,B.dL]),A.ac("v")) +B.ZV=A.b(s([B.vz,B.vA,B.vB]),A.ac("v")) +B.xF=A.b(s([B.o6,B.k6,B.hH,B.k9,B.kd,B.fn,B.xc,B.oh,B.cm,B.ke,B.et,B.hE,B.hF,B.k7,B.hG,B.o7,B.dP,B.o8,B.o9,B.xa,B.cl,B.k8,B.hI,B.hJ,B.oa,B.ob,B.oc,B.od,B.xb,B.oe,B.of,B.ka,B.hK,B.hL,B.og,B.kb,B.kc]),A.ac("v")) +B.HM=new A.IX(0,"topLeft") +B.HP=new A.IX(3,"bottomRight") +B.aiD=new A.tV(B.HM,B.HP) +B.aiG=new A.tV(B.HP,B.HM) +B.HN=new A.IX(1,"topRight") +B.HO=new A.IX(2,"bottomLeft") +B.aiE=new A.tV(B.HN,B.HO) +B.aiF=new A.tV(B.HO,B.HN) +B.ZW=A.b(s([B.aiD,B.aiG,B.aiE,B.aiF]),A.ac("v")) +B.ft=new A.mf(0,"controlModifier") +B.fu=new A.mf(1,"shiftModifier") +B.fv=new A.mf(2,"altModifier") +B.fw=new A.mf(3,"metaModifier") +B.oR=new A.mf(4,"capsLockModifier") +B.oS=new A.mf(5,"numLockModifier") +B.oT=new A.mf(6,"scrollLockModifier") +B.oU=new A.mf(7,"functionModifier") +B.D3=new A.mf(8,"symbolModifier") +B.xG=A.b(s([B.ft,B.fu,B.fv,B.fw,B.oR,B.oS,B.oT,B.oU,B.D3]),A.ac("v")) +B.xH=A.b(s([B.x7,B.x8,B.x9]),A.ac("v")) +B.fz=new A.i(1,0) +B.cF=new A.i(0,1) +B.a3I=new A.i(-1,1) +B.Di=new A.i(-1,0) +B.a3J=new A.i(-1,-1) +B.De=new A.i(0,-1) +B.a3i=new A.i(1,-1) +B.kl=A.b(s([B.fz,B.oY,B.cF,B.a3I,B.Di,B.a3J,B.De,B.a3i]),t.yv) +B.S=A.b(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.t) +B.SF=new A.LS("Running synchronously",1,"synchronous") +B.ZX=A.b(s([B.vC,B.SF]),A.ac("v")) +B.ZY=A.b(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.t) +B.xI=A.b(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.t) +B.ZZ=A.b(s(["ul","ol","li","p","br"]),t.T) +B.a__=A.b(s(["menu"]),t.T) +B.LD=new A.DJ(0,"auto") +B.LE=new A.DJ(1,"full") +B.LF=new A.DJ(2,"chromium") +B.a_0=A.b(s([B.LD,B.LE,B.LF]),A.ac("v")) +B.a_1=A.b(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.t) +B.xJ=A.b(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.t) +B.T=A.b(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.t) +B.km=A.b(s([0,0,24576,1023,65534,34815,65534,18431]),t.t) +B.VE=new A.po(0,"center") +B.VF=new A.po(1,"right") +B.VG=new A.po(2,"justify") +B.a_2=A.b(s([B.VE,B.VF,B.VG,B.wP]),A.ac("v")) +B.a_3=A.b(s([-1,0,0,1,0,0,-1,0,1,0,0,0,-1,1,0,1,1,1,1,0]),t.n) +B.aH=new A.iU(0,"icon") +B.bc=new A.iU(1,"input") +B.aB=new A.iU(2,"label") +B.bd=new A.iU(3,"hint") +B.aY=new A.iU(4,"prefix") +B.aZ=new A.iU(5,"suffix") +B.ax=new A.iU(6,"prefixIcon") +B.aS=new A.iU(7,"suffixIcon") +B.be=new A.iU(8,"helperError") +B.aU=new A.iU(9,"counter") +B.dw=new A.iU(10,"container") +B.a_4=A.b(s([B.aH,B.bc,B.aB,B.bd,B.aY,B.aZ,B.ax,B.aS,B.be,B.aU,B.dw]),A.ac("v")) +B.xK=A.b(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.t) +B.Sv=new A.n(4294967176) +B.Rw=new A.n(4294936831) +B.OD=new A.n(4287168511) +B.OC=new A.n(4287168392) +B.P9=new A.n(4289374975) +B.Rv=new A.n(4294936712) +B.xL=A.b(s([B.Sv,B.Rw,B.OD,B.OC,B.P9,B.Rv]),t.O) +B.WS=new A.FD(0,"leftAlign") +B.WT=new A.FD(1,"rightAlign") +B.a_5=A.b(s([B.WS,B.WT,B.o2]),A.ac("v")) +B.dn=new A.fk(1,"fuchsia") +B.dp=new A.fk(3,"linux") +B.dq=new A.fk(5,"windows") +B.a_6=A.b(s([B.ar,B.dn,B.a6,B.dp,B.ct,B.dq]),t.r6) +B.ajd=new A.lI(0,1) +B.ajl=new A.lI(0.5,1) +B.ajf=new A.lI(0.5375,0.75) +B.aji=new A.lI(0.575,0.5) +B.ajn=new A.lI(0.6125,0.25) +B.ajm=new A.lI(0.65,0) +B.ajj=new A.lI(0.85,0) +B.ajh=new A.lI(0.8875,0.25) +B.ajk=new A.lI(0.925,0.5) +B.ajg=new A.lI(0.9625,0.75) +B.aje=new A.lI(1,1) +B.a_7=A.b(s([B.ajd,B.ajl,B.ajf,B.aji,B.ajn,B.ajm,B.ajj,B.ajh,B.ajk,B.ajg,B.aje]),A.ac("v
  • Resources
  • @@ -367,7 +367,7 @@

    Multiplayer (netcode)Flame doesn’t bundle any network feature, which may be needed to write online multiplayer games.

    If you are building a multiplayer game, here are some recommendations of packages/services:

  • ")) +B.oo=A.b(s([!0,!1]),t.HZ) +B.a_8=A.b(s([0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0]),t.n) +B.IE=new A.e0(2,"dst") +B.IO=new A.e0(4,"dstOver") +B.IP=new A.e0(5,"srcIn") +B.IQ=new A.e0(7,"srcOut") +B.Iw=new A.e0(10,"dstATop") +B.Ix=new A.e0(11,"xor") +B.a_9=A.b(s([B.e9,B.ms,B.IE,B.bF,B.IO,B.IP,B.da,B.IQ,B.dz,B.mz,B.Iw,B.Ix,B.j_,B.mt,B.mu,B.u6,B.u7,B.u8,B.u9,B.ua,B.mv,B.ub,B.mw,B.uc,B.ea,B.ud,B.mx,B.ue,B.my]),A.ac("v")) +B.xM=A.b(s(["ul","ol"]),t.T) +B.h=new A.i(0,0) +B.JT=new A.cx(0.2,B.a0,B.uW,B.h,11) +B.a_g=A.b(s([B.JT]),t.sq) +B.dR=A.b(s([0,0,65498,45055,65535,34815,65534,18431]),t.t) +B.a_i=A.b(s([B.ck,B.x3,B.o4]),A.ac("v")) +B.eR=new A.HV(0,"butt") +B.eS=new A.HV(1,"round") +B.a8U=new A.HV(2,"square") +B.a_j=A.b(s([B.eR,B.eS,B.a8U]),A.ac("v")) +B.a_l=new A.rH("und",null) +B.fo=new A.pC(A.bTE(),1,1) +B.a_m=new A.pC(A.bTG(),3,3) +B.xN=new A.pC(A.bTH(),3,3) +B.xO=new A.pC(A.bTF(),2,2) +B.ev=new A.pC(A.bTI(),2,2) +B.bR=new A.pC(A.bTJ(),2,2) +B.a_n=new A.pC(A.bTK(),1,2) +B.D=new A.Oy(0,"ignored") +B.bI=new A.u(100) +B.op=new A.u(101) +B.xR=new A.u(111) +B.oq=new A.u(112) +B.xS=new A.u(113) +B.bU=new A.u(115) +B.or=new A.u(116) +B.bV=new A.u(119) +B.kn=new A.u(32) +B.cn=new A.u(4294967304) +B.hQ=new A.u(4294967309) +B.hR=new A.u(4294967323) +B.c5=new A.u(4294967423) +B.ou=new A.u(4294967558) +B.bJ=new A.u(4294968065) +B.bo=new A.u(4294968066) +B.bp=new A.u(4294968067) +B.bv=new A.u(4294968068) +B.hV=new A.u(8589934848) +B.ks=new A.u(8589934849) +B.dS=new A.u(8589934850) +B.ey=new A.u(8589934851) +B.hW=new A.u(8589934852) +B.kt=new A.u(8589934853) +B.hX=new A.u(8589934854) +B.ku=new A.u(8589934855) +B.ox=new A.u(8589935088) +B.oy=new A.u(8589935090) +B.oz=new A.u(8589935092) +B.oA=new A.u(8589935094) +B.bq=new A.u(97) +B.du=new A.lC(B.h) +B.a0J=new A.FY(B.h,B.du) +B.a0K=new A.aJH("longPress") +B.a0L=new A.FZ(B.h,B.h) +B.M=new A.A(0,0,0,0) +B.a0M=new A.pD(B.h,B.M,B.M,B.M) +B.kv=new A.vE(1,"end") +B.i1=new A.vE(2,"center") +B.kw=new A.vE(3,"spaceBetween") +B.CE=new A.vE(4,"spaceAround") +B.kx=new A.vE(5,"spaceEvenly") +B.dj=new A.a6v(0,"min") +B.ky=new A.OC(0,"circles") +B.eE=new A.OC(1,"faceA") +B.CF=new A.OC(2,"faceB") +B.xT=new A.u(42) +B.Cz=new A.u(8589935146) +B.YA=A.b(s([B.xT,null,null,B.Cz]),t.M) +B.Cl=new A.u(43) +B.CA=new A.u(8589935147) +B.YB=A.b(s([B.Cl,null,null,B.CA]),t.M) +B.Cm=new A.u(45) +B.CB=new A.u(8589935149) +B.YC=A.b(s([B.Cm,null,null,B.CB]),t.M) +B.Cn=new A.u(46) +B.ez=new A.u(8589935150) +B.YD=A.b(s([B.Cn,null,null,B.ez]),t.M) +B.Co=new A.u(47) +B.CC=new A.u(8589935151) +B.YE=A.b(s([B.Co,null,null,B.CC]),t.M) +B.Cp=new A.u(48) +B.oC=new A.u(8589935152) +B.Zn=A.b(s([B.Cp,null,null,B.oC]),t.M) +B.Cq=new A.u(49) +B.hY=new A.u(8589935153) +B.Zo=A.b(s([B.Cq,null,null,B.hY]),t.M) +B.Cr=new A.u(50) +B.eA=new A.u(8589935154) +B.Zp=A.b(s([B.Cr,null,null,B.eA]),t.M) +B.Cs=new A.u(51) +B.hZ=new A.u(8589935155) +B.Zq=A.b(s([B.Cs,null,null,B.hZ]),t.M) +B.Ct=new A.u(52) +B.eB=new A.u(8589935156) +B.Zr=A.b(s([B.Ct,null,null,B.eB]),t.M) +B.Cu=new A.u(53) +B.oD=new A.u(8589935157) +B.Zs=A.b(s([B.Cu,null,null,B.oD]),t.M) +B.Cv=new A.u(54) +B.eC=new A.u(8589935158) +B.Zt=A.b(s([B.Cv,null,null,B.eC]),t.M) +B.Cw=new A.u(55) +B.i_=new A.u(8589935159) +B.Zu=A.b(s([B.Cw,null,null,B.i_]),t.M) +B.Cx=new A.u(56) +B.eD=new A.u(8589935160) +B.Zd=A.b(s([B.Cx,null,null,B.eD]),t.M) +B.Cy=new A.u(57) +B.i0=new A.u(8589935161) +B.Ze=A.b(s([B.Cy,null,null,B.i0]),t.M) +B.a_a=A.b(s([B.hW,B.hW,B.kt,null]),t.M) +B.kp=new A.u(4294967555) +B.Zm=A.b(s([B.kp,null,B.kp,null]),t.M) +B.Y8=A.b(s([B.bJ,null,null,B.eA]),t.M) +B.Y9=A.b(s([B.bo,null,null,B.eB]),t.M) +B.Ya=A.b(s([B.bp,null,null,B.eC]),t.M) +B.XW=A.b(s([B.bv,null,null,B.eD]),t.M) +B.ov=new A.u(4294968321) +B.Yh=A.b(s([B.ov,null,null,B.oD]),t.M) +B.a_b=A.b(s([B.hV,B.hV,B.ks,null]),t.M) +B.Yf=A.b(s([B.c5,null,null,B.ez]),t.M) +B.ew=new A.u(4294968069) +B.Yb=A.b(s([B.ew,null,null,B.hY]),t.M) +B.oB=new A.u(8589935117) +B.Y5=A.b(s([B.hQ,null,null,B.oB]),t.M) +B.ex=new A.u(4294968070) +B.Yc=A.b(s([B.ex,null,null,B.i_]),t.M) +B.ow=new A.u(4294968327) +B.Yi=A.b(s([B.ow,null,null,B.oC]),t.M) +B.a_c=A.b(s([B.hX,B.hX,B.ku,null]),t.M) +B.hT=new A.u(4294968071) +B.Yd=A.b(s([B.hT,null,null,B.hZ]),t.M) +B.hU=new A.u(4294968072) +B.XA=A.b(s([B.hU,null,null,B.i0]),t.M) +B.a_d=A.b(s([B.dS,B.dS,B.ey,null]),t.M) +B.a0R=new A.cc(["*",B.YA,"+",B.YB,"-",B.YC,".",B.YD,"/",B.YE,"0",B.Zn,"1",B.Zo,"2",B.Zp,"3",B.Zq,"4",B.Zr,"5",B.Zs,"6",B.Zt,"7",B.Zu,"8",B.Zd,"9",B.Ze,"Alt",B.a_a,"AltGraph",B.Zm,"ArrowDown",B.Y8,"ArrowLeft",B.Y9,"ArrowRight",B.Ya,"ArrowUp",B.XW,"Clear",B.Yh,"Control",B.a_b,"Delete",B.Yf,"End",B.Yb,"Enter",B.Y5,"Home",B.Yc,"Insert",B.Yi,"Meta",B.a_c,"PageDown",B.Yd,"PageUp",B.XA,"Shift",B.a_d],A.ac("cc>")) +B.XO=A.b(s([42,null,null,8589935146]),t.Z) +B.XP=A.b(s([43,null,null,8589935147]),t.Z) +B.XQ=A.b(s([45,null,null,8589935149]),t.Z) +B.XR=A.b(s([46,null,null,8589935150]),t.Z) +B.XS=A.b(s([47,null,null,8589935151]),t.Z) +B.XT=A.b(s([48,null,null,8589935152]),t.Z) +B.XU=A.b(s([49,null,null,8589935153]),t.Z) +B.XY=A.b(s([50,null,null,8589935154]),t.Z) +B.XZ=A.b(s([51,null,null,8589935155]),t.Z) +B.Y_=A.b(s([52,null,null,8589935156]),t.Z) +B.Y0=A.b(s([53,null,null,8589935157]),t.Z) +B.Y1=A.b(s([54,null,null,8589935158]),t.Z) +B.Y2=A.b(s([55,null,null,8589935159]),t.Z) +B.Y3=A.b(s([56,null,null,8589935160]),t.Z) +B.Y4=A.b(s([57,null,null,8589935161]),t.Z) +B.YS=A.b(s([8589934852,8589934852,8589934853,null]),t.Z) +B.XD=A.b(s([4294967555,null,4294967555,null]),t.Z) +B.XE=A.b(s([4294968065,null,null,8589935154]),t.Z) +B.XF=A.b(s([4294968066,null,null,8589935156]),t.Z) +B.XG=A.b(s([4294968067,null,null,8589935158]),t.Z) +B.XH=A.b(s([4294968068,null,null,8589935160]),t.Z) +B.XM=A.b(s([4294968321,null,null,8589935157]),t.Z) +B.YT=A.b(s([8589934848,8589934848,8589934849,null]),t.Z) +B.XC=A.b(s([4294967423,null,null,8589935150]),t.Z) +B.XI=A.b(s([4294968069,null,null,8589935153]),t.Z) +B.XB=A.b(s([4294967309,null,null,8589935117]),t.Z) +B.XJ=A.b(s([4294968070,null,null,8589935159]),t.Z) +B.XN=A.b(s([4294968327,null,null,8589935152]),t.Z) +B.YU=A.b(s([8589934854,8589934854,8589934855,null]),t.Z) +B.XK=A.b(s([4294968071,null,null,8589935155]),t.Z) +B.XL=A.b(s([4294968072,null,null,8589935161]),t.Z) +B.YV=A.b(s([8589934850,8589934850,8589934851,null]),t.Z) +B.CG=new A.cc(["*",B.XO,"+",B.XP,"-",B.XQ,".",B.XR,"/",B.XS,"0",B.XT,"1",B.XU,"2",B.XY,"3",B.XZ,"4",B.Y_,"5",B.Y0,"6",B.Y1,"7",B.Y2,"8",B.Y3,"9",B.Y4,"Alt",B.YS,"AltGraph",B.XD,"ArrowDown",B.XE,"ArrowLeft",B.XF,"ArrowRight",B.XG,"ArrowUp",B.XH,"Clear",B.XM,"Control",B.YT,"Delete",B.XC,"End",B.XI,"Enter",B.XB,"Home",B.XJ,"Insert",B.XN,"Meta",B.YU,"PageDown",B.XK,"PageUp",B.XL,"Shift",B.YV],A.ac("cc>")) +B.a0S=new A.cc([0,"FontWeight.w100",1,"FontWeight.w200",2,"FontWeight.w300",3,"FontWeight.w400",4,"FontWeight.w500",5,"FontWeight.w600",6,"FontWeight.w700",7,"FontWeight.w800",8,"FontWeight.w900"],A.ac("cc")) +B.a32={"deleteBackward:":0,"deleteWordBackward:":1,"deleteToBeginningOfLine:":2,"deleteForward:":3,"deleteWordForward:":4,"deleteToEndOfLine:":5,"moveLeft:":6,"moveRight:":7,"moveForward:":8,"moveBackward:":9,"moveUp:":10,"moveDown:":11,"moveLeftAndModifySelection:":12,"moveRightAndModifySelection:":13,"moveUpAndModifySelection:":14,"moveDownAndModifySelection:":15,"moveWordLeft:":16,"moveWordRight:":17,"moveToBeginningOfParagraph:":18,"moveToEndOfParagraph:":19,"moveWordLeftAndModifySelection:":20,"moveWordRightAndModifySelection:":21,"moveParagraphBackwardAndModifySelection:":22,"moveParagraphForwardAndModifySelection:":23,"moveToLeftEndOfLine:":24,"moveToRightEndOfLine:":25,"moveToBeginningOfDocument:":26,"moveToEndOfDocument:":27,"moveToLeftEndOfLineAndModifySelection:":28,"moveToRightEndOfLineAndModifySelection:":29,"moveToBeginningOfDocumentAndModifySelection:":30,"moveToEndOfDocumentAndModifySelection:":31,"transpose:":32,"scrollToBeginningOfDocument:":33,"scrollToEndOfDocument:":34,"scrollPageUp:":35,"scrollPageDown:":36,"pageUpAndModifySelection:":37,"pageDownAndModifySelection:":38,"cancelOperation:":39,"insertTab:":40,"insertBacktab:":41} +B.Fv=new A.tr(!1) +B.Fw=new A.tr(!0) +B.rh=new A.ik(B.ag,B.ib) +B.uv=new A.ld() +B.uz=new A.Az() +B.uB=new A.B0() +B.a0T=new A.bV(B.a32,[B.nr,B.nu,B.ns,B.hs,B.ht,B.nt,B.fe,B.ff,B.ff,B.fe,B.fg,B.fh,B.jH,B.jI,B.hy,B.hz,B.jL,B.jM,B.el,B.em,B.ws,B.wt,B.wo,B.wp,B.el,B.em,B.jJ,B.jK,B.wg,B.wh,B.nH,B.nI,B.uF,B.Fv,B.Fw,B.rh,B.l5,B.jN,B.jO,B.uv,B.uz,B.uB],A.ac("bV")) +B.a_C=new A.u(33) +B.a_D=new A.u(34) +B.a_E=new A.u(35) +B.a_F=new A.u(36) +B.a_G=new A.u(37) +B.a_H=new A.u(38) +B.a_I=new A.u(39) +B.a_J=new A.u(40) +B.a_K=new A.u(41) +B.a_L=new A.u(44) +B.a_M=new A.u(58) +B.a_N=new A.u(59) +B.a_O=new A.u(60) +B.a_P=new A.u(61) +B.a_Q=new A.u(62) +B.a_R=new A.u(63) +B.a_S=new A.u(64) +B.a0D=new A.u(91) +B.a0E=new A.u(92) +B.a0F=new A.u(93) +B.a0G=new A.u(94) +B.a0H=new A.u(95) +B.a0I=new A.u(96) +B.CD=new A.u(98) +B.oE=new A.u(99) +B.xP=new A.u(102) +B.a_o=new A.u(103) +B.a_p=new A.u(104) +B.a_q=new A.u(105) +B.a_r=new A.u(106) +B.a_s=new A.u(107) +B.a_t=new A.u(108) +B.a_u=new A.u(109) +B.xQ=new A.u(110) +B.a_v=new A.u(114) +B.a_w=new A.u(117) +B.os=new A.u(118) +B.ot=new A.u(120) +B.a_x=new A.u(121) +B.hP=new A.u(122) +B.a_y=new A.u(123) +B.a_z=new A.u(124) +B.a_A=new A.u(125) +B.a_B=new A.u(126) +B.xU=new A.u(4294967297) +B.ko=new A.u(4294967305) +B.xV=new A.u(4294967553) +B.xW=new A.u(4294967559) +B.xX=new A.u(4294967560) +B.xY=new A.u(4294967566) +B.xZ=new A.u(4294967567) +B.y_=new A.u(4294967568) +B.y0=new A.u(4294967569) +B.y1=new A.u(4294968322) +B.y2=new A.u(4294968323) +B.y3=new A.u(4294968324) +B.y4=new A.u(4294968325) +B.y5=new A.u(4294968326) +B.y6=new A.u(4294968328) +B.y7=new A.u(4294968329) +B.y8=new A.u(4294968330) +B.y9=new A.u(4294968577) +B.ya=new A.u(4294968578) +B.yb=new A.u(4294968579) +B.yc=new A.u(4294968580) +B.yd=new A.u(4294968581) +B.ye=new A.u(4294968582) +B.yf=new A.u(4294968583) +B.yg=new A.u(4294968584) +B.yh=new A.u(4294968585) +B.yi=new A.u(4294968586) +B.yj=new A.u(4294968587) +B.yk=new A.u(4294968588) +B.yl=new A.u(4294968589) +B.ym=new A.u(4294968590) +B.yn=new A.u(4294968833) +B.yo=new A.u(4294968834) +B.yp=new A.u(4294968835) +B.yq=new A.u(4294968836) +B.yr=new A.u(4294968837) +B.ys=new A.u(4294968838) +B.yt=new A.u(4294968839) +B.yu=new A.u(4294968840) +B.yv=new A.u(4294968841) +B.yw=new A.u(4294968842) +B.yx=new A.u(4294968843) +B.yy=new A.u(4294969089) +B.yz=new A.u(4294969090) +B.yA=new A.u(4294969091) +B.yB=new A.u(4294969092) +B.yC=new A.u(4294969093) +B.yD=new A.u(4294969094) +B.yE=new A.u(4294969095) +B.yF=new A.u(4294969096) +B.yG=new A.u(4294969097) +B.yH=new A.u(4294969098) +B.yI=new A.u(4294969099) +B.yJ=new A.u(4294969100) +B.yK=new A.u(4294969101) +B.yL=new A.u(4294969102) +B.yM=new A.u(4294969103) +B.yN=new A.u(4294969104) +B.yO=new A.u(4294969105) +B.yP=new A.u(4294969106) +B.yQ=new A.u(4294969107) +B.yR=new A.u(4294969108) +B.yS=new A.u(4294969109) +B.yT=new A.u(4294969110) +B.yU=new A.u(4294969111) +B.yV=new A.u(4294969112) +B.yW=new A.u(4294969113) +B.yX=new A.u(4294969114) +B.yY=new A.u(4294969115) +B.yZ=new A.u(4294969116) +B.z_=new A.u(4294969117) +B.z0=new A.u(4294969345) +B.z1=new A.u(4294969346) +B.z2=new A.u(4294969347) +B.z3=new A.u(4294969348) +B.z4=new A.u(4294969349) +B.z5=new A.u(4294969350) +B.z6=new A.u(4294969351) +B.z7=new A.u(4294969352) +B.z8=new A.u(4294969353) +B.z9=new A.u(4294969354) +B.za=new A.u(4294969355) +B.zb=new A.u(4294969356) +B.zc=new A.u(4294969357) +B.zd=new A.u(4294969358) +B.ze=new A.u(4294969359) +B.zf=new A.u(4294969360) +B.zg=new A.u(4294969361) +B.zh=new A.u(4294969362) +B.zi=new A.u(4294969363) +B.zj=new A.u(4294969364) +B.zk=new A.u(4294969365) +B.zl=new A.u(4294969366) +B.zm=new A.u(4294969367) +B.zn=new A.u(4294969368) +B.zo=new A.u(4294969601) +B.zp=new A.u(4294969602) +B.zq=new A.u(4294969603) +B.zr=new A.u(4294969604) +B.zs=new A.u(4294969605) +B.zt=new A.u(4294969606) +B.zu=new A.u(4294969607) +B.zv=new A.u(4294969608) +B.zw=new A.u(4294969857) +B.zx=new A.u(4294969858) +B.zy=new A.u(4294969859) +B.zz=new A.u(4294969860) +B.zA=new A.u(4294969861) +B.zB=new A.u(4294969863) +B.zC=new A.u(4294969864) +B.zD=new A.u(4294969865) +B.zE=new A.u(4294969866) +B.zF=new A.u(4294969867) +B.zG=new A.u(4294969868) +B.zH=new A.u(4294969869) +B.zI=new A.u(4294969870) +B.zJ=new A.u(4294969871) +B.zK=new A.u(4294969872) +B.zL=new A.u(4294969873) +B.zM=new A.u(4294970113) +B.zN=new A.u(4294970114) +B.zO=new A.u(4294970115) +B.zP=new A.u(4294970116) +B.zQ=new A.u(4294970117) +B.zR=new A.u(4294970118) +B.zS=new A.u(4294970119) +B.zT=new A.u(4294970120) +B.zU=new A.u(4294970121) +B.zV=new A.u(4294970122) +B.zW=new A.u(4294970123) +B.zX=new A.u(4294970124) +B.zY=new A.u(4294970125) +B.zZ=new A.u(4294970126) +B.A_=new A.u(4294970127) +B.A0=new A.u(4294970369) +B.A1=new A.u(4294970370) +B.A2=new A.u(4294970371) +B.A3=new A.u(4294970372) +B.A4=new A.u(4294970373) +B.A5=new A.u(4294970374) +B.A6=new A.u(4294970375) +B.A7=new A.u(4294970625) +B.A8=new A.u(4294970626) +B.A9=new A.u(4294970627) +B.Aa=new A.u(4294970628) +B.Ab=new A.u(4294970629) +B.Ac=new A.u(4294970630) +B.Ad=new A.u(4294970631) +B.Ae=new A.u(4294970632) +B.Af=new A.u(4294970633) +B.Ag=new A.u(4294970634) +B.Ah=new A.u(4294970635) +B.Ai=new A.u(4294970636) +B.Aj=new A.u(4294970637) +B.Ak=new A.u(4294970638) +B.Al=new A.u(4294970639) +B.Am=new A.u(4294970640) +B.An=new A.u(4294970641) +B.Ao=new A.u(4294970642) +B.Ap=new A.u(4294970643) +B.Aq=new A.u(4294970644) +B.Ar=new A.u(4294970645) +B.As=new A.u(4294970646) +B.At=new A.u(4294970647) +B.Au=new A.u(4294970648) +B.Av=new A.u(4294970649) +B.Aw=new A.u(4294970650) +B.Ax=new A.u(4294970651) +B.Ay=new A.u(4294970652) +B.Az=new A.u(4294970653) +B.AA=new A.u(4294970654) +B.AB=new A.u(4294970655) +B.AC=new A.u(4294970656) +B.AD=new A.u(4294970657) +B.AE=new A.u(4294970658) +B.AF=new A.u(4294970659) +B.AG=new A.u(4294970660) +B.AH=new A.u(4294970661) +B.AI=new A.u(4294970662) +B.AJ=new A.u(4294970663) +B.AK=new A.u(4294970664) +B.AL=new A.u(4294970665) +B.AM=new A.u(4294970666) +B.AN=new A.u(4294970667) +B.AO=new A.u(4294970668) +B.AP=new A.u(4294970669) +B.AQ=new A.u(4294970670) +B.AR=new A.u(4294970671) +B.AS=new A.u(4294970672) +B.AT=new A.u(4294970673) +B.AU=new A.u(4294970674) +B.AV=new A.u(4294970675) +B.AW=new A.u(4294970676) +B.AX=new A.u(4294970677) +B.AY=new A.u(4294970678) +B.AZ=new A.u(4294970679) +B.B_=new A.u(4294970680) +B.B0=new A.u(4294970681) +B.B1=new A.u(4294970682) +B.B2=new A.u(4294970683) +B.B3=new A.u(4294970684) +B.B4=new A.u(4294970685) +B.B5=new A.u(4294970686) +B.B6=new A.u(4294970687) +B.B7=new A.u(4294970688) +B.B8=new A.u(4294970689) +B.B9=new A.u(4294970690) +B.Ba=new A.u(4294970691) +B.Bb=new A.u(4294970692) +B.Bc=new A.u(4294970693) +B.Bd=new A.u(4294970694) +B.Be=new A.u(4294970695) +B.Bf=new A.u(4294970696) +B.Bg=new A.u(4294970697) +B.Bh=new A.u(4294970698) +B.Bi=new A.u(4294970699) +B.Bj=new A.u(4294970700) +B.Bk=new A.u(4294970701) +B.Bl=new A.u(4294970702) +B.Bm=new A.u(4294970703) +B.Bn=new A.u(4294970704) +B.Bo=new A.u(4294970705) +B.Bp=new A.u(4294970706) +B.Bq=new A.u(4294970707) +B.Br=new A.u(4294970708) +B.Bs=new A.u(4294970709) +B.Bt=new A.u(4294970710) +B.Bu=new A.u(4294970711) +B.Bv=new A.u(4294970712) +B.Bw=new A.u(4294970713) +B.Bx=new A.u(4294970714) +B.By=new A.u(4294970715) +B.Bz=new A.u(4294970882) +B.BA=new A.u(4294970884) +B.BB=new A.u(4294970885) +B.BC=new A.u(4294970886) +B.BD=new A.u(4294970887) +B.BE=new A.u(4294970888) +B.BF=new A.u(4294970889) +B.BG=new A.u(4294971137) +B.BH=new A.u(4294971138) +B.BI=new A.u(4294971393) +B.BJ=new A.u(4294971394) +B.BK=new A.u(4294971395) +B.BL=new A.u(4294971396) +B.BM=new A.u(4294971397) +B.BN=new A.u(4294971398) +B.BO=new A.u(4294971399) +B.BP=new A.u(4294971400) +B.BQ=new A.u(4294971401) +B.BR=new A.u(4294971402) +B.BS=new A.u(4294971403) +B.BT=new A.u(4294971649) +B.BU=new A.u(4294971650) +B.BV=new A.u(4294971651) +B.BW=new A.u(4294971652) +B.BX=new A.u(4294971653) +B.BY=new A.u(4294971654) +B.BZ=new A.u(4294971655) +B.C_=new A.u(4294971656) +B.C0=new A.u(4294971657) +B.C1=new A.u(4294971658) +B.C2=new A.u(4294971659) +B.C3=new A.u(4294971660) +B.C4=new A.u(4294971661) +B.C5=new A.u(4294971662) +B.C6=new A.u(4294971663) +B.C7=new A.u(4294971664) +B.C8=new A.u(4294971665) +B.C9=new A.u(4294971666) +B.Ca=new A.u(4294971667) +B.Cb=new A.u(4294971668) +B.Cc=new A.u(4294971669) +B.Cd=new A.u(4294971670) +B.Ce=new A.u(4294971671) +B.Cf=new A.u(4294971672) +B.Cg=new A.u(4294971673) +B.Ch=new A.u(4294971674) +B.Ci=new A.u(4294971675) +B.Cj=new A.u(4294971905) +B.Ck=new A.u(4294971906) +B.a_T=new A.u(8589934592) +B.a_U=new A.u(8589934593) +B.a_V=new A.u(8589934594) +B.a_W=new A.u(8589934595) +B.a_X=new A.u(8589934608) +B.a_Y=new A.u(8589934609) +B.a_Z=new A.u(8589934610) +B.a0_=new A.u(8589934611) +B.a00=new A.u(8589934612) +B.a01=new A.u(8589934624) +B.a02=new A.u(8589934625) +B.a03=new A.u(8589934626) +B.a04=new A.u(8589935144) +B.a05=new A.u(8589935145) +B.a06=new A.u(8589935148) +B.a07=new A.u(8589935165) +B.a08=new A.u(8589935361) +B.a09=new A.u(8589935362) +B.a0a=new A.u(8589935363) +B.a0b=new A.u(8589935364) +B.a0c=new A.u(8589935365) +B.a0d=new A.u(8589935366) +B.a0e=new A.u(8589935367) +B.a0f=new A.u(8589935368) +B.a0g=new A.u(8589935369) +B.a0h=new A.u(8589935370) +B.a0i=new A.u(8589935371) +B.a0j=new A.u(8589935372) +B.a0k=new A.u(8589935373) +B.a0l=new A.u(8589935374) +B.a0m=new A.u(8589935375) +B.a0n=new A.u(8589935376) +B.a0o=new A.u(8589935377) +B.a0p=new A.u(8589935378) +B.a0q=new A.u(8589935379) +B.a0r=new A.u(8589935380) +B.a0s=new A.u(8589935381) +B.a0t=new A.u(8589935382) +B.a0u=new A.u(8589935383) +B.a0v=new A.u(8589935384) +B.a0w=new A.u(8589935385) +B.a0x=new A.u(8589935386) +B.a0y=new A.u(8589935387) +B.a0z=new A.u(8589935388) +B.a0A=new A.u(8589935389) +B.a0B=new A.u(8589935390) +B.a0C=new A.u(8589935391) +B.a0U=new A.cc([32,B.kn,33,B.a_C,34,B.a_D,35,B.a_E,36,B.a_F,37,B.a_G,38,B.a_H,39,B.a_I,40,B.a_J,41,B.a_K,42,B.xT,43,B.Cl,44,B.a_L,45,B.Cm,46,B.Cn,47,B.Co,48,B.Cp,49,B.Cq,50,B.Cr,51,B.Cs,52,B.Ct,53,B.Cu,54,B.Cv,55,B.Cw,56,B.Cx,57,B.Cy,58,B.a_M,59,B.a_N,60,B.a_O,61,B.a_P,62,B.a_Q,63,B.a_R,64,B.a_S,91,B.a0D,92,B.a0E,93,B.a0F,94,B.a0G,95,B.a0H,96,B.a0I,97,B.bq,98,B.CD,99,B.oE,100,B.bI,101,B.op,102,B.xP,103,B.a_o,104,B.a_p,105,B.a_q,106,B.a_r,107,B.a_s,108,B.a_t,109,B.a_u,110,B.xQ,111,B.xR,112,B.oq,113,B.xS,114,B.a_v,115,B.bU,116,B.or,117,B.a_w,118,B.os,119,B.bV,120,B.ot,121,B.a_x,122,B.hP,123,B.a_y,124,B.a_z,125,B.a_A,126,B.a_B,4294967297,B.xU,4294967304,B.cn,4294967305,B.ko,4294967309,B.hQ,4294967323,B.hR,4294967423,B.c5,4294967553,B.xV,4294967555,B.kp,4294967556,B.hS,4294967558,B.ou,4294967559,B.xW,4294967560,B.xX,4294967562,B.kq,4294967564,B.kr,4294967566,B.xY,4294967567,B.xZ,4294967568,B.y_,4294967569,B.y0,4294968065,B.bJ,4294968066,B.bo,4294968067,B.bp,4294968068,B.bv,4294968069,B.ew,4294968070,B.ex,4294968071,B.hT,4294968072,B.hU,4294968321,B.ov,4294968322,B.y1,4294968323,B.y2,4294968324,B.y3,4294968325,B.y4,4294968326,B.y5,4294968327,B.ow,4294968328,B.y6,4294968329,B.y7,4294968330,B.y8,4294968577,B.y9,4294968578,B.ya,4294968579,B.yb,4294968580,B.yc,4294968581,B.yd,4294968582,B.ye,4294968583,B.yf,4294968584,B.yg,4294968585,B.yh,4294968586,B.yi,4294968587,B.yj,4294968588,B.yk,4294968589,B.yl,4294968590,B.ym,4294968833,B.yn,4294968834,B.yo,4294968835,B.yp,4294968836,B.yq,4294968837,B.yr,4294968838,B.ys,4294968839,B.yt,4294968840,B.yu,4294968841,B.yv,4294968842,B.yw,4294968843,B.yx,4294969089,B.yy,4294969090,B.yz,4294969091,B.yA,4294969092,B.yB,4294969093,B.yC,4294969094,B.yD,4294969095,B.yE,4294969096,B.yF,4294969097,B.yG,4294969098,B.yH,4294969099,B.yI,4294969100,B.yJ,4294969101,B.yK,4294969102,B.yL,4294969103,B.yM,4294969104,B.yN,4294969105,B.yO,4294969106,B.yP,4294969107,B.yQ,4294969108,B.yR,4294969109,B.yS,4294969110,B.yT,4294969111,B.yU,4294969112,B.yV,4294969113,B.yW,4294969114,B.yX,4294969115,B.yY,4294969116,B.yZ,4294969117,B.z_,4294969345,B.z0,4294969346,B.z1,4294969347,B.z2,4294969348,B.z3,4294969349,B.z4,4294969350,B.z5,4294969351,B.z6,4294969352,B.z7,4294969353,B.z8,4294969354,B.z9,4294969355,B.za,4294969356,B.zb,4294969357,B.zc,4294969358,B.zd,4294969359,B.ze,4294969360,B.zf,4294969361,B.zg,4294969362,B.zh,4294969363,B.zi,4294969364,B.zj,4294969365,B.zk,4294969366,B.zl,4294969367,B.zm,4294969368,B.zn,4294969601,B.zo,4294969602,B.zp,4294969603,B.zq,4294969604,B.zr,4294969605,B.zs,4294969606,B.zt,4294969607,B.zu,4294969608,B.zv,4294969857,B.zw,4294969858,B.zx,4294969859,B.zy,4294969860,B.zz,4294969861,B.zA,4294969863,B.zB,4294969864,B.zC,4294969865,B.zD,4294969866,B.zE,4294969867,B.zF,4294969868,B.zG,4294969869,B.zH,4294969870,B.zI,4294969871,B.zJ,4294969872,B.zK,4294969873,B.zL,4294970113,B.zM,4294970114,B.zN,4294970115,B.zO,4294970116,B.zP,4294970117,B.zQ,4294970118,B.zR,4294970119,B.zS,4294970120,B.zT,4294970121,B.zU,4294970122,B.zV,4294970123,B.zW,4294970124,B.zX,4294970125,B.zY,4294970126,B.zZ,4294970127,B.A_,4294970369,B.A0,4294970370,B.A1,4294970371,B.A2,4294970372,B.A3,4294970373,B.A4,4294970374,B.A5,4294970375,B.A6,4294970625,B.A7,4294970626,B.A8,4294970627,B.A9,4294970628,B.Aa,4294970629,B.Ab,4294970630,B.Ac,4294970631,B.Ad,4294970632,B.Ae,4294970633,B.Af,4294970634,B.Ag,4294970635,B.Ah,4294970636,B.Ai,4294970637,B.Aj,4294970638,B.Ak,4294970639,B.Al,4294970640,B.Am,4294970641,B.An,4294970642,B.Ao,4294970643,B.Ap,4294970644,B.Aq,4294970645,B.Ar,4294970646,B.As,4294970647,B.At,4294970648,B.Au,4294970649,B.Av,4294970650,B.Aw,4294970651,B.Ax,4294970652,B.Ay,4294970653,B.Az,4294970654,B.AA,4294970655,B.AB,4294970656,B.AC,4294970657,B.AD,4294970658,B.AE,4294970659,B.AF,4294970660,B.AG,4294970661,B.AH,4294970662,B.AI,4294970663,B.AJ,4294970664,B.AK,4294970665,B.AL,4294970666,B.AM,4294970667,B.AN,4294970668,B.AO,4294970669,B.AP,4294970670,B.AQ,4294970671,B.AR,4294970672,B.AS,4294970673,B.AT,4294970674,B.AU,4294970675,B.AV,4294970676,B.AW,4294970677,B.AX,4294970678,B.AY,4294970679,B.AZ,4294970680,B.B_,4294970681,B.B0,4294970682,B.B1,4294970683,B.B2,4294970684,B.B3,4294970685,B.B4,4294970686,B.B5,4294970687,B.B6,4294970688,B.B7,4294970689,B.B8,4294970690,B.B9,4294970691,B.Ba,4294970692,B.Bb,4294970693,B.Bc,4294970694,B.Bd,4294970695,B.Be,4294970696,B.Bf,4294970697,B.Bg,4294970698,B.Bh,4294970699,B.Bi,4294970700,B.Bj,4294970701,B.Bk,4294970702,B.Bl,4294970703,B.Bm,4294970704,B.Bn,4294970705,B.Bo,4294970706,B.Bp,4294970707,B.Bq,4294970708,B.Br,4294970709,B.Bs,4294970710,B.Bt,4294970711,B.Bu,4294970712,B.Bv,4294970713,B.Bw,4294970714,B.Bx,4294970715,B.By,4294970882,B.Bz,4294970884,B.BA,4294970885,B.BB,4294970886,B.BC,4294970887,B.BD,4294970888,B.BE,4294970889,B.BF,4294971137,B.BG,4294971138,B.BH,4294971393,B.BI,4294971394,B.BJ,4294971395,B.BK,4294971396,B.BL,4294971397,B.BM,4294971398,B.BN,4294971399,B.BO,4294971400,B.BP,4294971401,B.BQ,4294971402,B.BR,4294971403,B.BS,4294971649,B.BT,4294971650,B.BU,4294971651,B.BV,4294971652,B.BW,4294971653,B.BX,4294971654,B.BY,4294971655,B.BZ,4294971656,B.C_,4294971657,B.C0,4294971658,B.C1,4294971659,B.C2,4294971660,B.C3,4294971661,B.C4,4294971662,B.C5,4294971663,B.C6,4294971664,B.C7,4294971665,B.C8,4294971666,B.C9,4294971667,B.Ca,4294971668,B.Cb,4294971669,B.Cc,4294971670,B.Cd,4294971671,B.Ce,4294971672,B.Cf,4294971673,B.Cg,4294971674,B.Ch,4294971675,B.Ci,4294971905,B.Cj,4294971906,B.Ck,8589934592,B.a_T,8589934593,B.a_U,8589934594,B.a_V,8589934595,B.a_W,8589934608,B.a_X,8589934609,B.a_Y,8589934610,B.a_Z,8589934611,B.a0_,8589934612,B.a00,8589934624,B.a01,8589934625,B.a02,8589934626,B.a03,8589934848,B.hV,8589934849,B.ks,8589934850,B.dS,8589934851,B.ey,8589934852,B.hW,8589934853,B.kt,8589934854,B.hX,8589934855,B.ku,8589935088,B.ox,8589935090,B.oy,8589935092,B.oz,8589935094,B.oA,8589935117,B.oB,8589935144,B.a04,8589935145,B.a05,8589935146,B.Cz,8589935147,B.CA,8589935148,B.a06,8589935149,B.CB,8589935150,B.ez,8589935151,B.CC,8589935152,B.oC,8589935153,B.hY,8589935154,B.eA,8589935155,B.hZ,8589935156,B.eB,8589935157,B.oD,8589935158,B.eC,8589935159,B.i_,8589935160,B.eD,8589935161,B.i0,8589935165,B.a07,8589935361,B.a08,8589935362,B.a09,8589935363,B.a0a,8589935364,B.a0b,8589935365,B.a0c,8589935366,B.a0d,8589935367,B.a0e,8589935368,B.a0f,8589935369,B.a0g,8589935370,B.a0h,8589935371,B.a0i,8589935372,B.a0j,8589935373,B.a0k,8589935374,B.a0l,8589935375,B.a0m,8589935376,B.a0n,8589935377,B.a0o,8589935378,B.a0p,8589935379,B.a0q,8589935380,B.a0r,8589935381,B.a0s,8589935382,B.a0t,8589935383,B.a0u,8589935384,B.a0v,8589935385,B.a0w,8589935386,B.a0x,8589935387,B.a0y,8589935388,B.a0z,8589935389,B.a0A,8589935390,B.a0B,8589935391,B.a0C],A.ac("cc")) +B.fL=new A.b9(B.bv,!1,!1,!1,!1,B.D) +B.fM=new A.b9(B.bJ,!1,!1,!1,!1,B.D) +B.fN=new A.b9(B.bo,!1,!1,!1,!1,B.D) +B.fO=new A.b9(B.bp,!1,!1,!1,!1,B.D) +B.ak_=new A.JU(2,"up") +B.aim=new A.oR(B.ak_) +B.ak0=new A.JU(3,"down") +B.ain=new A.oR(B.ak0) +B.ajZ=new A.JU(1,"left") +B.HL=new A.oR(B.ajZ) +B.ajY=new A.JU(0,"right") +B.HK=new A.oR(B.ajY) +B.a11=new A.cc([B.fL,B.aim,B.fM,B.ain,B.fN,B.HL,B.fO,B.HK],t.Fp) +B.a2M={in:0,iw:1,ji:2,jw:3,mo:4,aam:5,adp:6,aue:7,ayx:8,bgm:9,bjd:10,ccq:11,cjr:12,cka:13,cmk:14,coy:15,cqu:16,drh:17,drw:18,gav:19,gfx:20,ggn:21,gti:22,guv:23,hrr:24,ibi:25,ilw:26,jeg:27,kgc:28,kgh:29,koj:30,krm:31,ktr:32,kvs:33,kwq:34,kxe:35,kzj:36,kzt:37,lii:38,lmm:39,meg:40,mst:41,mwj:42,myt:43,nad:44,ncp:45,nnx:46,nts:47,oun:48,pcr:49,pmc:50,pmu:51,ppa:52,ppr:53,pry:54,puz:55,sca:56,skk:57,tdu:58,thc:59,thx:60,tie:61,tkk:62,tlw:63,tmp:64,tne:65,tnf:66,tsf:67,uok:68,xba:69,xia:70,xkh:71,xsj:72,ybd:73,yma:74,ymt:75,yos:76,yuu:77} +B.cY=new A.bV(B.a2M,["id","he","yi","jv","ro","aas","dz","ktz","nun","bcg","drl","rki","mom","cmr","xch","pij","quh","khk","prs","dev","vaj","gvr","nyc","duz","jal","opa","gal","oyb","tdf","kml","kwv","bmf","dtp","gdj","yam","tvd","dtp","dtp","raq","rmx","cir","mry","vaj","mry","xny","kdz","ngv","pij","vaj","adx","huw","phr","bfy","lcq","prt","pub","hle","oyb","dtp","tpo","oyb","ras","twm","weo","tyj","kak","prs","taj","ema","cax","acn","waw","suj","rki","lrr","mtm","zom","yug"],t.li) +B.a2L={multiply:0,screen:1,overlay:2,darken:3,lighten:4,"color-dodge":5,"color-burn":6,"hard-light":7,"soft-light":8,difference:9,exclusion:10,hue:11,saturation:12,color:13,luminosity:14} +B.IJ=new A.i2(24,"multiply") +B.Iy=new A.i2(14,"screen") +B.Iz=new A.i2(15,"overlay") +B.IA=new A.i2(16,"darken") +B.IB=new A.i2(17,"lighten") +B.IC=new A.i2(18,"colorDodge") +B.ID=new A.i2(19,"colorBurn") +B.IF=new A.i2(20,"hardLight") +B.IG=new A.i2(21,"softLight") +B.IH=new A.i2(22,"difference") +B.II=new A.i2(23,"exclusion") +B.IK=new A.i2(25,"hue") +B.IL=new A.i2(26,"saturation") +B.IM=new A.i2(27,"color") +B.IN=new A.i2(28,"luminosity") +B.a12=new A.bV(B.a2L,[B.IJ,B.Iy,B.Iz,B.IA,B.IB,B.IC,B.ID,B.IF,B.IG,B.IH,B.II,B.IK,B.IL,B.IM,B.IN],A.ac("bV")) +B.dT=new A.vG(0,"canvas") +B.fs=new A.vG(1,"card") +B.a26=new A.vG(2,"circle") +B.oN=new A.vG(3,"button") +B.i4=new A.vG(4,"transparency") +B.a14=new A.cc([B.dT,null,B.fs,B.j2,B.a26,null,B.oN,B.j2,B.i4,null],A.ac("cc")) +B.a15=new A.cc([B.fN,B.HL,B.fO,B.HK],t.Fp) +B.agj=new A.Cq(2,"down") +B.TF=new A.uT(B.agj) +B.Hs=new A.Cq(0,"up") +B.TE=new A.uT(B.Hs) +B.a16=new A.cc([B.fM,B.TF,B.fL,B.TE],t.Fp) +B.a2E={circle:0,path:1,rect:2,polygon:3,polyline:4,ellipse:5,line:6} +B.CH=new A.bV(B.a2E,[A.bUn(),A.bUq(),A.bUt(),A.bUr(),A.bUs(),A.bUo(),A.bUp()],A.ac("bV")) +B.a2V={KeyA:0,KeyB:1,KeyC:2,KeyD:3,KeyE:4,KeyF:5,KeyG:6,KeyH:7,KeyI:8,KeyJ:9,KeyK:10,KeyL:11,KeyM:12,KeyN:13,KeyO:14,KeyP:15,KeyQ:16,KeyR:17,KeyS:18,KeyT:19,KeyU:20,KeyV:21,KeyW:22,KeyX:23,KeyY:24,KeyZ:25,Digit1:26,Digit2:27,Digit3:28,Digit4:29,Digit5:30,Digit6:31,Digit7:32,Digit8:33,Digit9:34,Digit0:35,Minus:36,Equal:37,BracketLeft:38,BracketRight:39,Backslash:40,Semicolon:41,Quote:42,Backquote:43,Comma:44,Period:45,Slash:46} +B.oF=new A.bV(B.a2V,["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","1","2","3","4","5","6","7","8","9","0","-","=","[","]","\\",";","'","`",",",".","/"],t.li) +B.a2N={bool:0,ceil:1,dec:2,decimal:3,dice:4,floor:5,if:6,inc:7,int:8,number:9,plural:10,random:11,random_range:12,round:13,round_places:14,string:15,visit_count:16,visited_count:17,visited:18} +B.a17=new A.bV(B.a2N,[A.bRq(),A.bRw(),A.bSc(),A.bSe(),A.bSs(),A.bSQ(),A.bT9(),A.bTb(),A.bTj(),A.bU5(),A.bUE(),A.bUL(),A.bUM(),A.bUV(),A.bUW(),A.bVP(),A.buW(),A.buW(),A.bWt()],A.ac("bV,IO,0&(h[k?]))>")) +B.ZO=A.b(s([]),t.sq) +B.cT=new A.n(855638016) +B.Jv=new A.cx(-1,B.a0,B.cT,B.kB,1) +B.cS=new A.n(603979776) +B.Jz=new A.cx(0,B.a0,B.cS,B.cF,1) +B.JA=new A.cx(0,B.a0,B.cD,B.cF,3) +B.Xq=A.b(s([B.Jv,B.Jz,B.JA]),t.sq) +B.fy=new A.i(0,3) +B.JW=new A.cx(-2,B.a0,B.cT,B.fy,1) +B.JL=new A.cx(0,B.a0,B.cS,B.kB,2) +B.JM=new A.cx(0,B.a0,B.cD,B.cF,5) +B.a_e=A.b(s([B.JW,B.JL,B.JM]),t.sq) +B.JX=new A.cx(-2,B.a0,B.cT,B.fy,3) +B.JN=new A.cx(0,B.a0,B.cS,B.fy,4) +B.JO=new A.cx(0,B.a0,B.cD,B.cF,8) +B.a_f=A.b(s([B.JX,B.JN,B.JO]),t.sq) +B.Jw=new A.cx(-1,B.a0,B.cT,B.kB,4) +B.JP=new A.cx(0,B.a0,B.cS,B.Db,5) +B.JQ=new A.cx(0,B.a0,B.cD,B.cF,10) +B.Xr=A.b(s([B.Jw,B.JP,B.JQ]),t.sq) +B.Jx=new A.cx(-1,B.a0,B.cT,B.fy,5) +B.Dc=new A.i(0,6) +B.JR=new A.cx(0,B.a0,B.cS,B.Dc,10) +B.JS=new A.cx(0,B.a0,B.cD,B.cF,18) +B.Xs=A.b(s([B.Jx,B.JR,B.JS]),t.sq) +B.oW=new A.i(0,5) +B.JU=new A.cx(-3,B.a0,B.cT,B.oW,5) +B.oX=new A.i(0,8) +B.JB=new A.cx(1,B.a0,B.cS,B.oX,10) +B.JC=new A.cx(2,B.a0,B.cD,B.fy,14) +B.YI=A.b(s([B.JU,B.JB,B.JC]),t.sq) +B.JV=new A.cx(-3,B.a0,B.cT,B.oW,6) +B.Dd=new A.i(0,9) +B.JD=new A.cx(1,B.a0,B.cS,B.Dd,12) +B.JE=new A.cx(2,B.a0,B.cD,B.fy,16) +B.YJ=A.b(s([B.JV,B.JD,B.JE]),t.sq) +B.a3e=new A.i(0,7) +B.JY=new A.cx(-4,B.a0,B.cT,B.a3e,8) +B.a38=new A.i(0,12) +B.JF=new A.cx(2,B.a0,B.cS,B.a38,17) +B.JG=new A.cx(4,B.a0,B.cD,B.oW,22) +B.Ym=A.b(s([B.JY,B.JF,B.JG]),t.sq) +B.Ju=new A.cx(-5,B.a0,B.cT,B.oX,10) +B.a39=new A.i(0,16) +B.JH=new A.cx(2,B.a0,B.cS,B.a39,24) +B.JI=new A.cx(5,B.a0,B.cD,B.Dc,30) +B.ZT=A.b(s([B.Ju,B.JH,B.JI]),t.sq) +B.a37=new A.i(0,11) +B.Jt=new A.cx(-7,B.a0,B.cT,B.a37,15) +B.a3b=new A.i(0,24) +B.JJ=new A.cx(3,B.a0,B.cS,B.a3b,38) +B.JK=new A.cx(8,B.a0,B.cD,B.Dd,46) +B.Xz=A.b(s([B.Jt,B.JJ,B.JK]),t.sq) +B.a18=new A.cc([0,B.ZO,1,B.Xq,2,B.a_e,3,B.a_f,4,B.Xr,6,B.Xs,8,B.YI,9,B.YJ,12,B.Ym,16,B.ZT,24,B.Xz],A.ac("cc>")) +B.a2z={A:0,B:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,J:9,K:10,L:11,M:12,N:13,O:14,P:15,Q:16,R:17,S:18,T:19,U:20,V:21,W:22,X:23,Y:24,Z:25,"\xc0":26,"\xc1":27,"\xc2":28,"\xc3":29,"\xc4":30,"\xc5":31,"\xc6":32,"\xc7":33,"\xc8":34,"\xc9":35,"\xca":36,"\xcb":37,"\xcc":38,"\xcd":39,"\xce":40,"\xcf":41,"\xd0":42,"\xd1":43,"\xd2":44,"\xd3":45,"\xd4":46,"\xd5":47,"\xd6":48,"\xd8":49,"\xd9":50,"\xda":51,"\xdb":52,"\xdc":53,"\xdd":54,"\xde":55,"\u0100":56,"\u0102":57,"\u0104":58,"\u0106":59,"\u0108":60,"\u010a":61,"\u010c":62,"\u010e":63,"\u0110":64,"\u0112":65,"\u0114":66,"\u0116":67,"\u0118":68,"\u011a":69,"\u011c":70,"\u011e":71,"\u0120":72,"\u0122":73,"\u0124":74,"\u0126":75,"\u0128":76,"\u012a":77,"\u012c":78,"\u012e":79,"\u0130":80,"\u0134":81,"\u0136":82,"\u0139":83,"\u013b":84,"\u013d":85,"\u013f":86,"\u0141":87,"\u0143":88,"\u0145":89,"\u0147":90,"\u014a":91,"\u014c":92,"\u014e":93,"\u0150":94,"\u0154":95,"\u0156":96,"\u0158":97,"\u015a":98,"\u015c":99,"\u015e":100,"\u0160":101,"\u0162":102,"\u0164":103,"\u0166":104,"\u0168":105,"\u016a":106,"\u016c":107,"\u016e":108,"\u0170":109,"\u0172":110,"\u0174":111,"\u0176":112,"\u0178":113,"\u0179":114,"\u017b":115,"\u017d":116,"\u0181":117,"\u0182":118,"\u0184":119,"\u0186":120,"\u0187":121,"\u0189":122,"\u018a":123,"\u018b":124,"\u018e":125,"\u018f":126,"\u0190":127,"\u0191":128,"\u0193":129,"\u0194":130,"\u0196":131,"\u0197":132,"\u0198":133,"\u019c":134,"\u019d":135,"\u019f":136,"\u01a0":137,"\u01a2":138,"\u01a4":139,"\u01a7":140,"\u01a9":141,"\u01ac":142,"\u01ae":143,"\u01af":144,"\u01b1":145,"\u01b2":146,"\u01b3":147,"\u01b5":148,"\u01b7":149,"\u01b8":150,"\u01bc":151,"\u01c4":152,"\u01c5":153,"\u01c7":154,"\u01c8":155,"\u01ca":156,"\u01cb":157,"\u01cd":158,"\u01cf":159,"\u01d1":160,"\u01d3":161,"\u01d5":162,"\u01d7":163,"\u01d9":164,"\u01db":165,"\u01de":166,"\u01e0":167,"\u01e2":168,"\u01e4":169,"\u01e6":170,"\u01e8":171,"\u01ea":172,"\u01ec":173,"\u01ee":174,"\u01f1":175,"\u01f2":176,"\u01f4":177,"\u01f6":178,"\u01f7":179,"\u01f8":180,"\u01fa":181,"\u01fc":182,"\u01fe":183,"\u0200":184,"\u0202":185,"\u0204":186,"\u0206":187,"\u0208":188,"\u020a":189,"\u020c":190,"\u020e":191,"\u0210":192,"\u0212":193,"\u0214":194,"\u0216":195,"\u0218":196,"\u021a":197,"\u021c":198,"\u021e":199,"\u0220":200,"\u0222":201,"\u0224":202,"\u0226":203,"\u0228":204,"\u022a":205,"\u022c":206,"\u022e":207,"\u0230":208,"\u0232":209,"\u023a":210,"\u023b":211,"\u023d":212,"\u023e":213,"\u0241":214,"\u0243":215,"\u0244":216,"\u0245":217,"\u0246":218,"\u0248":219,"\u024a":220,"\u024c":221,"\u024e":222,"\u0370":223,"\u0372":224,"\u0376":225,"\u037f":226,"\u0386":227,"\u0388":228,"\u0389":229,"\u038a":230,"\u038c":231,"\u038e":232,"\u038f":233,"\u0391":234,"\u0392":235,"\u0393":236,"\u0394":237,"\u0395":238,"\u0396":239,"\u0397":240,"\u0398":241,"\u0399":242,"\u039a":243,"\u039b":244,"\u039c":245,"\u039d":246,"\u039e":247,"\u039f":248,"\u03a0":249,"\u03a1":250,"\u03a3":251,"\u03a4":252,"\u03a5":253,"\u03a6":254,"\u03a7":255,"\u03a8":256,"\u03a9":257,"\u03aa":258,"\u03ab":259,"\u03e2":260,"\u03e4":261,"\u03e6":262,"\u03e8":263,"\u03ea":264,"\u03ec":265,"\u03ee":266,"\u03f7":267,"\u03fa":268,"\u0400":269,"\u0401":270,"\u0402":271,"\u0403":272,"\u0404":273,"\u0405":274,"\u0406":275,"\u0407":276,"\u0408":277,"\u0409":278,"\u040a":279,"\u040b":280,"\u040c":281,"\u040d":282,"\u040e":283,"\u040f":284,"\u0410":285,"\u0411":286,"\u0412":287,"\u0413":288,"\u0414":289,"\u0415":290,"\u0416":291,"\u0417":292,"\u0418":293,"\u0419":294,"\u041a":295,"\u041b":296,"\u041c":297,"\u041d":298,"\u041e":299,"\u041f":300,"\u0420":301,"\u0421":302,"\u0422":303,"\u0423":304,"\u0424":305,"\u0425":306,"\u0426":307,"\u0427":308,"\u0428":309,"\u0429":310,"\u042a":311,"\u042b":312,"\u042c":313,"\u042d":314,"\u042e":315,"\u042f":316,"\u0460":317,"\u0462":318,"\u0464":319,"\u0466":320,"\u0468":321,"\u046a":322,"\u046c":323,"\u046e":324,"\u0470":325,"\u0472":326,"\u0474":327,"\u0476":328,"\u0478":329,"\u047a":330,"\u047c":331,"\u047e":332,"\u0480":333,"\u048a":334,"\u048c":335,"\u048e":336,"\u0490":337,"\u0492":338,"\u0494":339,"\u0496":340,"\u0498":341,"\u049a":342,"\u049c":343,"\u049e":344,"\u04a0":345,"\u04a2":346,"\u04a6":347,"\u04a8":348,"\u04aa":349,"\u04ac":350,"\u04ae":351,"\u04b0":352,"\u04b2":353,"\u04b6":354,"\u04b8":355,"\u04ba":356,"\u04bc":357,"\u04be":358,"\u04c1":359,"\u04c3":360,"\u04c5":361,"\u04c7":362,"\u04c9":363,"\u04cb":364,"\u04cd":365,"\u04d0":366,"\u04d2":367,"\u04d6":368,"\u04d8":369,"\u04da":370,"\u04dc":371,"\u04de":372,"\u04e0":373,"\u04e2":374,"\u04e4":375,"\u04e6":376,"\u04e8":377,"\u04ea":378,"\u04ec":379,"\u04ee":380,"\u04f0":381,"\u04f2":382,"\u04f4":383,"\u04f6":384,"\u04f8":385,"\u04fa":386,"\u04fc":387,"\u04fe":388,"\u0500":389,"\u0502":390,"\u0504":391,"\u0506":392,"\u0508":393,"\u050a":394,"\u050c":395,"\u050e":396,"\u0510":397,"\u0512":398,"\u0514":399,"\u0516":400,"\u0518":401,"\u051a":402,"\u051c":403,"\u051e":404,"\u0520":405,"\u0522":406,"\u0524":407,"\u0526":408,"\u0528":409,"\u052a":410,"\u052c":411,"\u052e":412,"\u0531":413,"\u0532":414,"\u0533":415,"\u0534":416,"\u0535":417,"\u0536":418,"\u0537":419,"\u0538":420,"\u0539":421,"\u053a":422,"\u053b":423,"\u053c":424,"\u053d":425,"\u053e":426,"\u053f":427,"\u0540":428,"\u0541":429,"\u0542":430,"\u0543":431,"\u0544":432,"\u0545":433,"\u0546":434,"\u0547":435,"\u0548":436,"\u0549":437,"\u054a":438,"\u054b":439,"\u054c":440,"\u054d":441,"\u054e":442,"\u054f":443,"\u0550":444,"\u0551":445,"\u0552":446,"\u0553":447,"\u0554":448,"\u0555":449,"\u0556":450,"\u10a0":451,"\u10a1":452,"\u10a2":453,"\u10a3":454,"\u10a4":455,"\u10a5":456,"\u10a6":457,"\u10a7":458,"\u10a8":459,"\u10a9":460,"\u10aa":461,"\u10ab":462,"\u10ac":463,"\u10ad":464,"\u10ae":465,"\u10af":466,"\u10b0":467,"\u10b1":468,"\u10b2":469,"\u10b3":470,"\u10b4":471,"\u10b5":472,"\u10b6":473,"\u10b7":474,"\u10b8":475,"\u10b9":476,"\u10ba":477,"\u10bb":478,"\u10bc":479,"\u10bd":480,"\u10be":481,"\u10bf":482,"\u10c0":483,"\u10c1":484,"\u10c2":485,"\u10c3":486,"\u10c4":487,"\u10c5":488,"\u10c7":489,"\u10cd":490,"\u1c90":491,"\u1c91":492,"\u1c92":493,"\u1c93":494,"\u1c94":495,"\u1c95":496,"\u1c96":497,"\u1c97":498,"\u1c98":499,"\u1c99":500,"\u1c9a":501,"\u1c9b":502,"\u1c9c":503,"\u1c9d":504,"\u1c9e":505,"\u1c9f":506,"\u1ca0":507,"\u1ca1":508,"\u1ca2":509,"\u1ca3":510,"\u1ca4":511,"\u1ca5":512,"\u1ca6":513,"\u1ca7":514,"\u1ca8":515,"\u1ca9":516,"\u1caa":517,"\u1cab":518,"\u1cac":519,"\u1cad":520,"\u1cae":521,"\u1caf":522,"\u1cb0":523,"\u1cb1":524,"\u1cb2":525,"\u1cb3":526,"\u1cb4":527,"\u1cb5":528,"\u1cb6":529,"\u1cb7":530,"\u1cb8":531,"\u1cb9":532,"\u1cba":533,"\u1cbd":534,"\u1cbe":535,"\u1cbf":536,"\u1e00":537,"\u1e02":538,"\u1e04":539,"\u1e06":540,"\u1e08":541,"\u1e0a":542,"\u1e0c":543,"\u1e0e":544,"\u1e10":545,"\u1e12":546,"\u1e14":547,"\u1e16":548,"\u1e18":549,"\u1e1a":550,"\u1e1c":551,"\u1e1e":552,"\u1e20":553,"\u1e22":554,"\u1e24":555,"\u1e26":556,"\u1e28":557,"\u1e2a":558,"\u1e2c":559,"\u1e2e":560,"\u1e30":561,"\u1e32":562,"\u1e34":563,"\u1e36":564,"\u1e38":565,"\u1e3a":566,"\u1e3c":567,"\u1e3e":568,"\u1e40":569,"\u1e42":570,"\u1e44":571,"\u1e46":572,"\u1e48":573,"\u1e4a":574,"\u1e4c":575,"\u1e4e":576,"\u1e50":577,"\u1e52":578,"\u1e54":579,"\u1e56":580,"\u1e58":581,"\u1e5a":582,"\u1e5c":583,"\u1e5e":584,"\u1e60":585,"\u1e62":586,"\u1e64":587,"\u1e66":588,"\u1e68":589,"\u1e6a":590,"\u1e6c":591,"\u1e6e":592,"\u1e70":593,"\u1e72":594,"\u1e74":595,"\u1e76":596,"\u1e78":597,"\u1e7a":598,"\u1e7c":599,"\u1e7e":600,"\u1e80":601,"\u1e82":602,"\u1e84":603,"\u1e86":604,"\u1e88":605,"\u1e8a":606,"\u1e8c":607,"\u1e8e":608,"\u1e90":609,"\u1e92":610,"\u1e94":611,"\u1e9e":612,"\u1ea0":613,"\u1ea2":614,"\u1ea4":615,"\u1ea6":616,"\u1ea8":617,"\u1eaa":618,"\u1eac":619,"\u1eae":620,"\u1eb0":621,"\u1eb2":622,"\u1eb4":623,"\u1eb6":624,"\u1eb8":625,"\u1eba":626,"\u1ebc":627,"\u1ebe":628,"\u1ec0":629,"\u1ec2":630,"\u1ec4":631,"\u1ec6":632,"\u1ec8":633,"\u1eca":634,"\u1ecc":635,"\u1ece":636,"\u1ed0":637,"\u1ed2":638,"\u1ed4":639,"\u1ed6":640,"\u1ed8":641,"\u1eda":642,"\u1edc":643,"\u1ede":644,"\u1ee0":645,"\u1ee2":646,"\u1ee4":647,"\u1ee6":648,"\u1ee8":649,"\u1eea":650,"\u1eec":651,"\u1eee":652,"\u1ef0":653,"\u1ef2":654,"\u1ef4":655,"\u1ef6":656,"\u1ef8":657,"\u1efa":658,"\u1efc":659,"\u1efe":660,"\u1f08":661,"\u1f09":662,"\u1f0a":663,"\u1f0b":664,"\u1f0c":665,"\u1f0d":666,"\u1f0e":667,"\u1f0f":668,"\u1f18":669,"\u1f19":670,"\u1f1a":671,"\u1f1b":672,"\u1f1c":673,"\u1f1d":674,"\u1f28":675,"\u1f29":676,"\u1f2a":677,"\u1f2b":678,"\u1f2c":679,"\u1f2d":680,"\u1f2e":681,"\u1f2f":682,"\u1f38":683,"\u1f39":684,"\u1f3a":685,"\u1f3b":686,"\u1f3c":687,"\u1f3d":688,"\u1f3e":689,"\u1f3f":690,"\u1f48":691,"\u1f49":692,"\u1f4a":693,"\u1f4b":694,"\u1f4c":695,"\u1f4d":696,"\u1f59":697,"\u1f5b":698,"\u1f5d":699,"\u1f5f":700,"\u1f68":701,"\u1f69":702,"\u1f6a":703,"\u1f6b":704,"\u1f6c":705,"\u1f6d":706,"\u1f6e":707,"\u1f6f":708,"\u1f88":709,"\u1f89":710,"\u1f8a":711,"\u1f8b":712,"\u1f8c":713,"\u1f8d":714,"\u1f8e":715,"\u1f8f":716,"\u1f98":717,"\u1f99":718,"\u1f9a":719,"\u1f9b":720,"\u1f9c":721,"\u1f9d":722,"\u1f9e":723,"\u1f9f":724,"\u1fa8":725,"\u1fa9":726,"\u1faa":727,"\u1fab":728,"\u1fac":729,"\u1fad":730,"\u1fae":731,"\u1faf":732,"\u1fb8":733,"\u1fb9":734,"\u1fba":735,"\u1fbb":736,"\u1fbc":737,"\u1fc8":738,"\u1fc9":739,"\u1fca":740,"\u1fcb":741,"\u1fcc":742,"\u1fd8":743,"\u1fd9":744,"\u1fda":745,"\u1fdb":746,"\u1fe8":747,"\u1fe9":748,"\u1fea":749,"\u1feb":750,"\u1fec":751,"\u1ff8":752,"\u1ff9":753,"\u1ffa":754,"\u1ffb":755,"\u1ffc":756,"\u24b6":757,"\u24b7":758,"\u24b8":759,"\u24b9":760,"\u24ba":761,"\u24bb":762,"\u24bc":763,"\u24bd":764,"\u24be":765,"\u24bf":766,"\u24c0":767,"\u24c1":768,"\u24c2":769,"\u24c3":770,"\u24c4":771,"\u24c5":772,"\u24c6":773,"\u24c7":774,"\u24c8":775,"\u24c9":776,"\u24ca":777,"\u24cb":778,"\u24cc":779,"\u24cd":780,"\u24ce":781,"\u24cf":782,"\u2c00":783,"\u2c01":784,"\u2c02":785,"\u2c03":786,"\u2c04":787,"\u2c05":788,"\u2c06":789,"\u2c07":790,"\u2c08":791,"\u2c09":792,"\u2c0a":793,"\u2c0b":794,"\u2c0c":795,"\u2c0d":796,"\u2c0e":797,"\u2c0f":798,"\u2c10":799,"\u2c11":800,"\u2c12":801,"\u2c13":802,"\u2c14":803,"\u2c15":804,"\u2c16":805,"\u2c17":806,"\u2c18":807,"\u2c19":808,"\u2c1a":809,"\u2c1b":810,"\u2c1c":811,"\u2c1d":812,"\u2c1e":813,"\u2c1f":814,"\u2c20":815,"\u2c21":816,"\u2c22":817,"\u2c23":818,"\u2c24":819,"\u2c25":820,"\u2c26":821,"\u2c27":822,"\u2c28":823,"\u2c29":824,"\u2c2a":825,"\u2c2b":826,"\u2c2c":827,"\u2c2d":828,"\u2c2e":829,"\u2c2f":830,"\u2c60":831,"\u2c62":832,"\u2c63":833,"\u2c64":834,"\u2c67":835,"\u2c69":836,"\u2c6b":837,"\u2c6d":838,"\u2c6e":839,"\u2c6f":840,"\u2c70":841,"\u2c72":842,"\u2c75":843,"\u2c7e":844,"\u2c7f":845,"\u2c80":846,"\u2c82":847,"\u2c84":848,"\u2c86":849,"\u2c88":850,"\u2c8a":851,"\u2c8c":852,"\u2c8e":853,"\u2c90":854,"\u2c92":855,"\u2c94":856,"\u2c96":857,"\u2c98":858,"\u2c9a":859,"\u2c9c":860,"\u2c9e":861,"\u2ca0":862,"\u2ca2":863,"\u2ca4":864,"\u2ca6":865,"\u2ca8":866,"\u2caa":867,"\u2cac":868,"\u2cae":869,"\u2cb0":870,"\u2cb2":871,"\u2cb4":872,"\u2cb6":873,"\u2cb8":874,"\u2cba":875,"\u2cbc":876,"\u2cbe":877,"\u2cc0":878,"\u2cc2":879,"\u2cc4":880,"\u2cc6":881,"\u2cc8":882,"\u2cca":883,"\u2ccc":884,"\u2cce":885,"\u2cd0":886,"\u2cd2":887,"\u2cd4":888,"\u2cd6":889,"\u2cd8":890,"\u2cda":891,"\u2cdc":892,"\u2cde":893,"\u2ce0":894,"\u2ce2":895,"\u2ceb":896,"\u2ced":897,"\u2cf2":898,"\ua640":899,"\ua642":900,"\ua644":901,"\ua646":902,"\ua648":903,"\ua64a":904,"\ua64c":905,"\ua64e":906,"\ua650":907,"\ua652":908,"\ua654":909,"\ua656":910,"\ua658":911,"\ua65a":912,"\ua65c":913,"\ua65e":914,"\ua660":915,"\ua662":916,"\ua664":917,"\ua666":918,"\ua668":919,"\ua66a":920,"\ua66c":921,"\ua680":922,"\ua682":923,"\ua684":924,"\ua686":925,"\ua688":926,"\ua68a":927,"\ua68c":928,"\ua68e":929,"\ua690":930,"\ua692":931,"\ua694":932,"\ua696":933,"\ua698":934,"\ua69a":935,"\ua722":936,"\ua724":937,"\ua726":938,"\ua728":939,"\ua72a":940,"\ua72c":941,"\ua72e":942,"\ua732":943,"\ua734":944,"\ua736":945,"\ua738":946,"\ua73a":947,"\ua73c":948,"\ua73e":949,"\ua740":950,"\ua742":951,"\ua744":952,"\ua746":953,"\ua748":954,"\ua74a":955,"\ua74c":956,"\ua74e":957,"\ua750":958,"\ua752":959,"\ua754":960,"\ua756":961,"\ua758":962,"\ua75a":963,"\ua75c":964,"\ua75e":965,"\ua760":966,"\ua762":967,"\ua764":968,"\ua766":969,"\ua768":970,"\ua76a":971,"\ua76c":972,"\ua76e":973,"\ua779":974,"\ua77b":975,"\ua77d":976,"\ua77e":977,"\ua780":978,"\ua782":979,"\ua784":980,"\ua786":981,"\ua78b":982,"\ua78d":983,"\ua790":984,"\ua792":985,"\ua796":986,"\ua798":987,"\ua79a":988,"\ua79c":989,"\ua79e":990,"\ua7a0":991,"\ua7a2":992,"\ua7a4":993,"\ua7a6":994,"\ua7a8":995,"\ua7aa":996,"\ua7ab":997,"\ua7ac":998,"\ua7ad":999,"\ua7ae":1000,"\ua7b0":1001,"\ua7b1":1002,"\ua7b2":1003,"\ua7b3":1004,"\ua7b4":1005,"\ua7b6":1006,"\ua7b8":1007,"\ua7ba":1008,"\ua7bc":1009,"\ua7be":1010,"\ua7c0":1011,"\ua7c2":1012,"\ua7c4":1013,"\ua7c5":1014,"\ua7c6":1015,"\ua7c7":1016,"\ua7c9":1017,"\ua7d0":1018,"\ua7d6":1019,"\ua7d8":1020,"\ua7f5":1021,"\uff21":1022,"\uff22":1023,"\uff23":1024,"\uff24":1025,"\uff25":1026,"\uff26":1027,"\uff27":1028,"\uff28":1029,"\uff29":1030,"\uff2a":1031,"\uff2b":1032,"\uff2c":1033,"\uff2d":1034,"\uff2e":1035,"\uff2f":1036,"\uff30":1037,"\uff31":1038,"\uff32":1039,"\uff33":1040,"\uff34":1041,"\uff35":1042,"\uff36":1043,"\uff37":1044,"\uff38":1045,"\uff39":1046,"\uff3a":1047,"\ud801\udc00":1048,"\ud801\udc01":1049,"\ud801\udc02":1050,"\ud801\udc03":1051,"\ud801\udc04":1052,"\ud801\udc05":1053,"\ud801\udc06":1054,"\ud801\udc07":1055,"\ud801\udc08":1056,"\ud801\udc09":1057,"\ud801\udc0a":1058,"\ud801\udc0b":1059,"\ud801\udc0c":1060,"\ud801\udc0d":1061,"\ud801\udc0e":1062,"\ud801\udc0f":1063,"\ud801\udc10":1064,"\ud801\udc11":1065,"\ud801\udc12":1066,"\ud801\udc13":1067,"\ud801\udc14":1068,"\ud801\udc15":1069,"\ud801\udc16":1070,"\ud801\udc17":1071,"\ud801\udc18":1072,"\ud801\udc19":1073,"\ud801\udc1a":1074,"\ud801\udc1b":1075,"\ud801\udc1c":1076,"\ud801\udc1d":1077,"\ud801\udc1e":1078,"\ud801\udc1f":1079,"\ud801\udc20":1080,"\ud801\udc21":1081,"\ud801\udc22":1082,"\ud801\udc23":1083,"\ud801\udc24":1084,"\ud801\udc25":1085,"\ud801\udc26":1086,"\ud801\udc27":1087,"\ud801\udcb0":1088,"\ud801\udcb1":1089,"\ud801\udcb2":1090,"\ud801\udcb3":1091,"\ud801\udcb4":1092,"\ud801\udcb5":1093,"\ud801\udcb6":1094,"\ud801\udcb7":1095,"\ud801\udcb8":1096,"\ud801\udcb9":1097,"\ud801\udcba":1098,"\ud801\udcbb":1099,"\ud801\udcbc":1100,"\ud801\udcbd":1101,"\ud801\udcbe":1102,"\ud801\udcbf":1103,"\ud801\udcc0":1104,"\ud801\udcc1":1105,"\ud801\udcc2":1106,"\ud801\udcc3":1107,"\ud801\udcc4":1108,"\ud801\udcc5":1109,"\ud801\udcc6":1110,"\ud801\udcc7":1111,"\ud801\udcc8":1112,"\ud801\udcc9":1113,"\ud801\udcca":1114,"\ud801\udccb":1115,"\ud801\udccc":1116,"\ud801\udccd":1117,"\ud801\udcce":1118,"\ud801\udccf":1119,"\ud801\udcd0":1120,"\ud801\udcd1":1121,"\ud801\udcd2":1122,"\ud801\udcd3":1123,"\ud801\udd70":1124,"\ud801\udd71":1125,"\ud801\udd72":1126,"\ud801\udd73":1127,"\ud801\udd74":1128,"\ud801\udd75":1129,"\ud801\udd76":1130,"\ud801\udd77":1131,"\ud801\udd78":1132,"\ud801\udd79":1133,"\ud801\udd7a":1134,"\ud801\udd7c":1135,"\ud801\udd7d":1136,"\ud801\udd7e":1137,"\ud801\udd7f":1138,"\ud801\udd80":1139,"\ud801\udd81":1140,"\ud801\udd82":1141,"\ud801\udd83":1142,"\ud801\udd84":1143,"\ud801\udd85":1144,"\ud801\udd86":1145,"\ud801\udd87":1146,"\ud801\udd88":1147,"\ud801\udd89":1148,"\ud801\udd8a":1149,"\ud801\udd8c":1150,"\ud801\udd8d":1151,"\ud801\udd8e":1152,"\ud801\udd8f":1153,"\ud801\udd90":1154,"\ud801\udd91":1155,"\ud801\udd92":1156,"\ud801\udd94":1157,"\ud801\udd95":1158,"\ud803\udc80":1159,"\ud803\udc81":1160,"\ud803\udc82":1161,"\ud803\udc83":1162,"\ud803\udc84":1163,"\ud803\udc85":1164,"\ud803\udc86":1165,"\ud803\udc87":1166,"\ud803\udc88":1167,"\ud803\udc89":1168,"\ud803\udc8a":1169,"\ud803\udc8b":1170,"\ud803\udc8c":1171,"\ud803\udc8d":1172,"\ud803\udc8e":1173,"\ud803\udc8f":1174,"\ud803\udc90":1175,"\ud803\udc91":1176,"\ud803\udc92":1177,"\ud803\udc93":1178,"\ud803\udc94":1179,"\ud803\udc95":1180,"\ud803\udc96":1181,"\ud803\udc97":1182,"\ud803\udc98":1183,"\ud803\udc99":1184,"\ud803\udc9a":1185,"\ud803\udc9b":1186,"\ud803\udc9c":1187,"\ud803\udc9d":1188,"\ud803\udc9e":1189,"\ud803\udc9f":1190,"\ud803\udca0":1191,"\ud803\udca1":1192,"\ud803\udca2":1193,"\ud803\udca3":1194,"\ud803\udca4":1195,"\ud803\udca5":1196,"\ud803\udca6":1197,"\ud803\udca7":1198,"\ud803\udca8":1199,"\ud803\udca9":1200,"\ud803\udcaa":1201,"\ud803\udcab":1202,"\ud803\udcac":1203,"\ud803\udcad":1204,"\ud803\udcae":1205,"\ud803\udcaf":1206,"\ud803\udcb0":1207,"\ud803\udcb1":1208,"\ud803\udcb2":1209,"\ud806\udca0":1210,"\ud806\udca1":1211,"\ud806\udca2":1212,"\ud806\udca3":1213,"\ud806\udca4":1214,"\ud806\udca5":1215,"\ud806\udca6":1216,"\ud806\udca7":1217,"\ud806\udca8":1218,"\ud806\udca9":1219,"\ud806\udcaa":1220,"\ud806\udcab":1221,"\ud806\udcac":1222,"\ud806\udcad":1223,"\ud806\udcae":1224,"\ud806\udcaf":1225,"\ud806\udcb0":1226,"\ud806\udcb1":1227,"\ud806\udcb2":1228,"\ud806\udcb3":1229,"\ud806\udcb4":1230,"\ud806\udcb5":1231,"\ud806\udcb6":1232,"\ud806\udcb7":1233,"\ud806\udcb8":1234,"\ud806\udcb9":1235,"\ud806\udcba":1236,"\ud806\udcbb":1237,"\ud806\udcbc":1238,"\ud806\udcbd":1239,"\ud806\udcbe":1240,"\ud806\udcbf":1241,"\ud81b\ude40":1242,"\ud81b\ude41":1243,"\ud81b\ude42":1244,"\ud81b\ude43":1245,"\ud81b\ude44":1246,"\ud81b\ude45":1247,"\ud81b\ude46":1248,"\ud81b\ude47":1249,"\ud81b\ude48":1250,"\ud81b\ude49":1251,"\ud81b\ude4a":1252,"\ud81b\ude4b":1253,"\ud81b\ude4c":1254,"\ud81b\ude4d":1255,"\ud81b\ude4e":1256,"\ud81b\ude4f":1257,"\ud81b\ude50":1258,"\ud81b\ude51":1259,"\ud81b\ude52":1260,"\ud81b\ude53":1261,"\ud81b\ude54":1262,"\ud81b\ude55":1263,"\ud81b\ude56":1264,"\ud81b\ude57":1265,"\ud81b\ude58":1266,"\ud81b\ude59":1267,"\ud81b\ude5a":1268,"\ud81b\ude5b":1269,"\ud81b\ude5c":1270,"\ud81b\ude5d":1271,"\ud81b\ude5e":1272,"\ud81b\ude5f":1273,"\ud83a\udd00":1274,"\ud83a\udd01":1275,"\ud83a\udd02":1276,"\ud83a\udd03":1277,"\ud83a\udd04":1278,"\ud83a\udd05":1279,"\ud83a\udd06":1280,"\ud83a\udd07":1281,"\ud83a\udd08":1282,"\ud83a\udd09":1283,"\ud83a\udd0a":1284,"\ud83a\udd0b":1285,"\ud83a\udd0c":1286,"\ud83a\udd0d":1287,"\ud83a\udd0e":1288,"\ud83a\udd0f":1289,"\ud83a\udd10":1290,"\ud83a\udd11":1291,"\ud83a\udd12":1292,"\ud83a\udd13":1293,"\ud83a\udd14":1294,"\ud83a\udd15":1295,"\ud83a\udd16":1296,"\ud83a\udd17":1297,"\ud83a\udd18":1298,"\ud83a\udd19":1299,"\ud83a\udd1a":1300,"\ud83a\udd1b":1301,"\ud83a\udd1c":1302,"\ud83a\udd1d":1303,"\ud83a\udd1e":1304,"\ud83a\udd1f":1305,"\ud83a\udd20":1306,"\ud83a\udd21":1307} +B.a19=new A.bV(B.a2z,["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","\xe0","\xe1","\xe2","\xe3","\xe4","\xe5","\xe6","\xe7","\xe8","\xe9","\xea","\xeb","\xec","\xed","\xee","\xef","\xf0","\xf1","\xf2","\xf3","\xf4","\xf5","\xf6","\xf8","\xf9","\xfa","\xfb","\xfc","\xfd","\xfe","\u0101","\u0103","\u0105","\u0107","\u0109","\u010b","\u010d","\u010f","\u0111","\u0113","\u0115","\u0117","\u0119","\u011b","\u011d","\u011f","\u0121","\u0123","\u0125","\u0127","\u0129","\u012b","\u012d","\u012f","i\u0307","\u0135","\u0137","\u013a","\u013c","\u013e","\u0140","\u0142","\u0144","\u0146","\u0148","\u014b","\u014d","\u014f","\u0151","\u0155","\u0157","\u0159","\u015b","\u015d","\u015f","\u0161","\u0163","\u0165","\u0167","\u0169","\u016b","\u016d","\u016f","\u0171","\u0173","\u0175","\u0177","\xff","\u017a","\u017c","\u017e","\u0253","\u0183","\u0185","\u0254","\u0188","\u0256","\u0257","\u018c","\u01dd","\u0259","\u025b","\u0192","\u0260","\u0263","\u0269","\u0268","\u0199","\u026f","\u0272","\u0275","\u01a1","\u01a3","\u01a5","\u01a8","\u0283","\u01ad","\u0288","\u01b0","\u028a","\u028b","\u01b4","\u01b6","\u0292","\u01b9","\u01bd","\u01c6","\u01c6","\u01c9","\u01c9","\u01cc","\u01cc","\u01ce","\u01d0","\u01d2","\u01d4","\u01d6","\u01d8","\u01da","\u01dc","\u01df","\u01e1","\u01e3","\u01e5","\u01e7","\u01e9","\u01eb","\u01ed","\u01ef","\u01f3","\u01f3","\u01f5","\u0195","\u01bf","\u01f9","\u01fb","\u01fd","\u01ff","\u0201","\u0203","\u0205","\u0207","\u0209","\u020b","\u020d","\u020f","\u0211","\u0213","\u0215","\u0217","\u0219","\u021b","\u021d","\u021f","\u019e","\u0223","\u0225","\u0227","\u0229","\u022b","\u022d","\u022f","\u0231","\u0233","\u2c65","\u023c","\u019a","\u2c66","\u0242","\u0180","\u0289","\u028c","\u0247","\u0249","\u024b","\u024d","\u024f","\u0371","\u0373","\u0377","\u03f3","\u03ac","\u03ad","\u03ae","\u03af","\u03cc","\u03cd","\u03ce","\u03b1","\u03b2","\u03b3","\u03b4","\u03b5","\u03b6","\u03b7","\u03b8","\u03b9","\u03ba","\u03bb","\u03bc","\u03bd","\u03be","\u03bf","\u03c0","\u03c1","\u03c3","\u03c4","\u03c5","\u03c6","\u03c7","\u03c8","\u03c9","\u03ca","\u03cb","\u03e3","\u03e5","\u03e7","\u03e9","\u03eb","\u03ed","\u03ef","\u03f8","\u03fb","\u0450","\u0451","\u0452","\u0453","\u0454","\u0455","\u0456","\u0457","\u0458","\u0459","\u045a","\u045b","\u045c","\u045d","\u045e","\u045f","\u0430","\u0431","\u0432","\u0433","\u0434","\u0435","\u0436","\u0437","\u0438","\u0439","\u043a","\u043b","\u043c","\u043d","\u043e","\u043f","\u0440","\u0441","\u0442","\u0443","\u0444","\u0445","\u0446","\u0447","\u0448","\u0449","\u044a","\u044b","\u044c","\u044d","\u044e","\u044f","\u0461","\u0463","\u0465","\u0467","\u0469","\u046b","\u046d","\u046f","\u0471","\u0473","\u0475","\u0477","\u0479","\u047b","\u047d","\u047f","\u0481","\u048b","\u048d","\u048f","\u0491","\u0493","\u0495","\u0497","\u0499","\u049b","\u049d","\u049f","\u04a1","\u04a3","\u04a7","\u04a9","\u04ab","\u04ad","\u04af","\u04b1","\u04b3","\u04b7","\u04b9","\u04bb","\u04bd","\u04bf","\u04c2","\u04c4","\u04c6","\u04c8","\u04ca","\u04cc","\u04ce","\u04d1","\u04d3","\u04d7","\u04d9","\u04db","\u04dd","\u04df","\u04e1","\u04e3","\u04e5","\u04e7","\u04e9","\u04eb","\u04ed","\u04ef","\u04f1","\u04f3","\u04f5","\u04f7","\u04f9","\u04fb","\u04fd","\u04ff","\u0501","\u0503","\u0505","\u0507","\u0509","\u050b","\u050d","\u050f","\u0511","\u0513","\u0515","\u0517","\u0519","\u051b","\u051d","\u051f","\u0521","\u0523","\u0525","\u0527","\u0529","\u052b","\u052d","\u052f","\u0561","\u0562","\u0563","\u0564","\u0565","\u0566","\u0567","\u0568","\u0569","\u056a","\u056b","\u056c","\u056d","\u056e","\u056f","\u0570","\u0571","\u0572","\u0573","\u0574","\u0575","\u0576","\u0577","\u0578","\u0579","\u057a","\u057b","\u057c","\u057d","\u057e","\u057f","\u0580","\u0581","\u0582","\u0583","\u0584","\u0585","\u0586","\u2d00","\u2d01","\u2d02","\u2d03","\u2d04","\u2d05","\u2d06","\u2d07","\u2d08","\u2d09","\u2d0a","\u2d0b","\u2d0c","\u2d0d","\u2d0e","\u2d0f","\u2d10","\u2d11","\u2d12","\u2d13","\u2d14","\u2d15","\u2d16","\u2d17","\u2d18","\u2d19","\u2d1a","\u2d1b","\u2d1c","\u2d1d","\u2d1e","\u2d1f","\u2d20","\u2d21","\u2d22","\u2d23","\u2d24","\u2d25","\u2d27","\u2d2d","\u10d0","\u10d1","\u10d2","\u10d3","\u10d4","\u10d5","\u10d6","\u10d7","\u10d8","\u10d9","\u10da","\u10db","\u10dc","\u10dd","\u10de","\u10df","\u10e0","\u10e1","\u10e2","\u10e3","\u10e4","\u10e5","\u10e6","\u10e7","\u10e8","\u10e9","\u10ea","\u10eb","\u10ec","\u10ed","\u10ee","\u10ef","\u10f0","\u10f1","\u10f2","\u10f3","\u10f4","\u10f5","\u10f6","\u10f7","\u10f8","\u10f9","\u10fa","\u10fd","\u10fe","\u10ff","\u1e01","\u1e03","\u1e05","\u1e07","\u1e09","\u1e0b","\u1e0d","\u1e0f","\u1e11","\u1e13","\u1e15","\u1e17","\u1e19","\u1e1b","\u1e1d","\u1e1f","\u1e21","\u1e23","\u1e25","\u1e27","\u1e29","\u1e2b","\u1e2d","\u1e2f","\u1e31","\u1e33","\u1e35","\u1e37","\u1e39","\u1e3b","\u1e3d","\u1e3f","\u1e41","\u1e43","\u1e45","\u1e47","\u1e49","\u1e4b","\u1e4d","\u1e4f","\u1e51","\u1e53","\u1e55","\u1e57","\u1e59","\u1e5b","\u1e5d","\u1e5f","\u1e61","\u1e63","\u1e65","\u1e67","\u1e69","\u1e6b","\u1e6d","\u1e6f","\u1e71","\u1e73","\u1e75","\u1e77","\u1e79","\u1e7b","\u1e7d","\u1e7f","\u1e81","\u1e83","\u1e85","\u1e87","\u1e89","\u1e8b","\u1e8d","\u1e8f","\u1e91","\u1e93","\u1e95","ss","\u1ea1","\u1ea3","\u1ea5","\u1ea7","\u1ea9","\u1eab","\u1ead","\u1eaf","\u1eb1","\u1eb3","\u1eb5","\u1eb7","\u1eb9","\u1ebb","\u1ebd","\u1ebf","\u1ec1","\u1ec3","\u1ec5","\u1ec7","\u1ec9","\u1ecb","\u1ecd","\u1ecf","\u1ed1","\u1ed3","\u1ed5","\u1ed7","\u1ed9","\u1edb","\u1edd","\u1edf","\u1ee1","\u1ee3","\u1ee5","\u1ee7","\u1ee9","\u1eeb","\u1eed","\u1eef","\u1ef1","\u1ef3","\u1ef5","\u1ef7","\u1ef9","\u1efb","\u1efd","\u1eff","\u1f00","\u1f01","\u1f02","\u1f03","\u1f04","\u1f05","\u1f06","\u1f07","\u1f10","\u1f11","\u1f12","\u1f13","\u1f14","\u1f15","\u1f20","\u1f21","\u1f22","\u1f23","\u1f24","\u1f25","\u1f26","\u1f27","\u1f30","\u1f31","\u1f32","\u1f33","\u1f34","\u1f35","\u1f36","\u1f37","\u1f40","\u1f41","\u1f42","\u1f43","\u1f44","\u1f45","\u1f51","\u1f53","\u1f55","\u1f57","\u1f60","\u1f61","\u1f62","\u1f63","\u1f64","\u1f65","\u1f66","\u1f67","\u1f00\u03b9","\u1f01\u03b9","\u1f02\u03b9","\u1f03\u03b9","\u1f04\u03b9","\u1f05\u03b9","\u1f06\u03b9","\u1f07\u03b9","\u1f20\u03b9","\u1f21\u03b9","\u1f22\u03b9","\u1f23\u03b9","\u1f24\u03b9","\u1f25\u03b9","\u1f26\u03b9","\u1f27\u03b9","\u1f60\u03b9","\u1f61\u03b9","\u1f62\u03b9","\u1f63\u03b9","\u1f64\u03b9","\u1f65\u03b9","\u1f66\u03b9","\u1f67\u03b9","\u1fb0","\u1fb1","\u1f70","\u1f71","\u03b1\u03b9","\u1f72","\u1f73","\u1f74","\u1f75","\u03b7\u03b9","\u1fd0","\u1fd1","\u1f76","\u1f77","\u1fe0","\u1fe1","\u1f7a","\u1f7b","\u1fe5","\u1f78","\u1f79","\u1f7c","\u1f7d","\u03c9\u03b9","\u24d0","\u24d1","\u24d2","\u24d3","\u24d4","\u24d5","\u24d6","\u24d7","\u24d8","\u24d9","\u24da","\u24db","\u24dc","\u24dd","\u24de","\u24df","\u24e0","\u24e1","\u24e2","\u24e3","\u24e4","\u24e5","\u24e6","\u24e7","\u24e8","\u24e9","\u2c30","\u2c31","\u2c32","\u2c33","\u2c34","\u2c35","\u2c36","\u2c37","\u2c38","\u2c39","\u2c3a","\u2c3b","\u2c3c","\u2c3d","\u2c3e","\u2c3f","\u2c40","\u2c41","\u2c42","\u2c43","\u2c44","\u2c45","\u2c46","\u2c47","\u2c48","\u2c49","\u2c4a","\u2c4b","\u2c4c","\u2c4d","\u2c4e","\u2c4f","\u2c50","\u2c51","\u2c52","\u2c53","\u2c54","\u2c55","\u2c56","\u2c57","\u2c58","\u2c59","\u2c5a","\u2c5b","\u2c5c","\u2c5d","\u2c5e","\u2c5f","\u2c61","\u026b","\u1d7d","\u027d","\u2c68","\u2c6a","\u2c6c","\u0251","\u0271","\u0250","\u0252","\u2c73","\u2c76","\u023f","\u0240","\u2c81","\u2c83","\u2c85","\u2c87","\u2c89","\u2c8b","\u2c8d","\u2c8f","\u2c91","\u2c93","\u2c95","\u2c97","\u2c99","\u2c9b","\u2c9d","\u2c9f","\u2ca1","\u2ca3","\u2ca5","\u2ca7","\u2ca9","\u2cab","\u2cad","\u2caf","\u2cb1","\u2cb3","\u2cb5","\u2cb7","\u2cb9","\u2cbb","\u2cbd","\u2cbf","\u2cc1","\u2cc3","\u2cc5","\u2cc7","\u2cc9","\u2ccb","\u2ccd","\u2ccf","\u2cd1","\u2cd3","\u2cd5","\u2cd7","\u2cd9","\u2cdb","\u2cdd","\u2cdf","\u2ce1","\u2ce3","\u2cec","\u2cee","\u2cf3","\ua641","\ua643","\ua645","\ua647","\ua649","\ua64b","\ua64d","\ua64f","\ua651","\ua653","\ua655","\ua657","\ua659","\ua65b","\ua65d","\ua65f","\ua661","\ua663","\ua665","\ua667","\ua669","\ua66b","\ua66d","\ua681","\ua683","\ua685","\ua687","\ua689","\ua68b","\ua68d","\ua68f","\ua691","\ua693","\ua695","\ua697","\ua699","\ua69b","\ua723","\ua725","\ua727","\ua729","\ua72b","\ua72d","\ua72f","\ua733","\ua735","\ua737","\ua739","\ua73b","\ua73d","\ua73f","\ua741","\ua743","\ua745","\ua747","\ua749","\ua74b","\ua74d","\ua74f","\ua751","\ua753","\ua755","\ua757","\ua759","\ua75b","\ua75d","\ua75f","\ua761","\ua763","\ua765","\ua767","\ua769","\ua76b","\ua76d","\ua76f","\ua77a","\ua77c","\u1d79","\ua77f","\ua781","\ua783","\ua785","\ua787","\ua78c","\u0265","\ua791","\ua793","\ua797","\ua799","\ua79b","\ua79d","\ua79f","\ua7a1","\ua7a3","\ua7a5","\ua7a7","\ua7a9","\u0266","\u025c","\u0261","\u026c","\u026a","\u029e","\u0287","\u029d","\uab53","\ua7b5","\ua7b7","\ua7b9","\ua7bb","\ua7bd","\ua7bf","\ua7c1","\ua7c3","\ua794","\u0282","\u1d8e","\ua7c8","\ua7ca","\ua7d1","\ua7d7","\ua7d9","\ua7f6","\uff41","\uff42","\uff43","\uff44","\uff45","\uff46","\uff47","\uff48","\uff49","\uff4a","\uff4b","\uff4c","\uff4d","\uff4e","\uff4f","\uff50","\uff51","\uff52","\uff53","\uff54","\uff55","\uff56","\uff57","\uff58","\uff59","\uff5a","\ud801\udc28","\ud801\udc29","\ud801\udc2a","\ud801\udc2b","\ud801\udc2c","\ud801\udc2d","\ud801\udc2e","\ud801\udc2f","\ud801\udc30","\ud801\udc31","\ud801\udc32","\ud801\udc33","\ud801\udc34","\ud801\udc35","\ud801\udc36","\ud801\udc37","\ud801\udc38","\ud801\udc39","\ud801\udc3a","\ud801\udc3b","\ud801\udc3c","\ud801\udc3d","\ud801\udc3e","\ud801\udc3f","\ud801\udc40","\ud801\udc41","\ud801\udc42","\ud801\udc43","\ud801\udc44","\ud801\udc45","\ud801\udc46","\ud801\udc47","\ud801\udc48","\ud801\udc49","\ud801\udc4a","\ud801\udc4b","\ud801\udc4c","\ud801\udc4d","\ud801\udc4e","\ud801\udc4f","\ud801\udcd8","\ud801\udcd9","\ud801\udcda","\ud801\udcdb","\ud801\udcdc","\ud801\udcdd","\ud801\udcde","\ud801\udcdf","\ud801\udce0","\ud801\udce1","\ud801\udce2","\ud801\udce3","\ud801\udce4","\ud801\udce5","\ud801\udce6","\ud801\udce7","\ud801\udce8","\ud801\udce9","\ud801\udcea","\ud801\udceb","\ud801\udcec","\ud801\udced","\ud801\udcee","\ud801\udcef","\ud801\udcf0","\ud801\udcf1","\ud801\udcf2","\ud801\udcf3","\ud801\udcf4","\ud801\udcf5","\ud801\udcf6","\ud801\udcf7","\ud801\udcf8","\ud801\udcf9","\ud801\udcfa","\ud801\udcfb","\ud801\udd97","\ud801\udd98","\ud801\udd99","\ud801\udd9a","\ud801\udd9b","\ud801\udd9c","\ud801\udd9d","\ud801\udd9e","\ud801\udd9f","\ud801\udda0","\ud801\udda1","\ud801\udda3","\ud801\udda4","\ud801\udda5","\ud801\udda6","\ud801\udda7","\ud801\udda8","\ud801\udda9","\ud801\uddaa","\ud801\uddab","\ud801\uddac","\ud801\uddad","\ud801\uddae","\ud801\uddaf","\ud801\uddb0","\ud801\uddb1","\ud801\uddb3","\ud801\uddb4","\ud801\uddb5","\ud801\uddb6","\ud801\uddb7","\ud801\uddb8","\ud801\uddb9","\ud801\uddbb","\ud801\uddbc","\ud803\udcc0","\ud803\udcc1","\ud803\udcc2","\ud803\udcc3","\ud803\udcc4","\ud803\udcc5","\ud803\udcc6","\ud803\udcc7","\ud803\udcc8","\ud803\udcc9","\ud803\udcca","\ud803\udccb","\ud803\udccc","\ud803\udccd","\ud803\udcce","\ud803\udccf","\ud803\udcd0","\ud803\udcd1","\ud803\udcd2","\ud803\udcd3","\ud803\udcd4","\ud803\udcd5","\ud803\udcd6","\ud803\udcd7","\ud803\udcd8","\ud803\udcd9","\ud803\udcda","\ud803\udcdb","\ud803\udcdc","\ud803\udcdd","\ud803\udcde","\ud803\udcdf","\ud803\udce0","\ud803\udce1","\ud803\udce2","\ud803\udce3","\ud803\udce4","\ud803\udce5","\ud803\udce6","\ud803\udce7","\ud803\udce8","\ud803\udce9","\ud803\udcea","\ud803\udceb","\ud803\udcec","\ud803\udced","\ud803\udcee","\ud803\udcef","\ud803\udcf0","\ud803\udcf1","\ud803\udcf2","\ud806\udcc0","\ud806\udcc1","\ud806\udcc2","\ud806\udcc3","\ud806\udcc4","\ud806\udcc5","\ud806\udcc6","\ud806\udcc7","\ud806\udcc8","\ud806\udcc9","\ud806\udcca","\ud806\udccb","\ud806\udccc","\ud806\udccd","\ud806\udcce","\ud806\udccf","\ud806\udcd0","\ud806\udcd1","\ud806\udcd2","\ud806\udcd3","\ud806\udcd4","\ud806\udcd5","\ud806\udcd6","\ud806\udcd7","\ud806\udcd8","\ud806\udcd9","\ud806\udcda","\ud806\udcdb","\ud806\udcdc","\ud806\udcdd","\ud806\udcde","\ud806\udcdf","\ud81b\ude60","\ud81b\ude61","\ud81b\ude62","\ud81b\ude63","\ud81b\ude64","\ud81b\ude65","\ud81b\ude66","\ud81b\ude67","\ud81b\ude68","\ud81b\ude69","\ud81b\ude6a","\ud81b\ude6b","\ud81b\ude6c","\ud81b\ude6d","\ud81b\ude6e","\ud81b\ude6f","\ud81b\ude70","\ud81b\ude71","\ud81b\ude72","\ud81b\ude73","\ud81b\ude74","\ud81b\ude75","\ud81b\ude76","\ud81b\ude77","\ud81b\ude78","\ud81b\ude79","\ud81b\ude7a","\ud81b\ude7b","\ud81b\ude7c","\ud81b\ude7d","\ud81b\ude7e","\ud81b\ude7f","\ud83a\udd22","\ud83a\udd23","\ud83a\udd24","\ud83a\udd25","\ud83a\udd26","\ud83a\udd27","\ud83a\udd28","\ud83a\udd29","\ud83a\udd2a","\ud83a\udd2b","\ud83a\udd2c","\ud83a\udd2d","\ud83a\udd2e","\ud83a\udd2f","\ud83a\udd30","\ud83a\udd31","\ud83a\udd32","\ud83a\udd33","\ud83a\udd34","\ud83a\udd35","\ud83a\udd36","\ud83a\udd37","\ud83a\udd38","\ud83a\udd39","\ud83a\udd3a","\ud83a\udd3b","\ud83a\udd3c","\ud83a\udd3d","\ud83a\udd3e","\ud83a\udd3f","\ud83a\udd40","\ud83a\udd41","\ud83a\udd42","\ud83a\udd43"],t.li) +B.lc=new A.b9(B.kn,!1,!1,!1,!1,B.D) +B.ld=new A.b9(B.hQ,!1,!1,!1,!1,B.D) +B.a70=new A.b9(B.oB,!1,!1,!1,!1,B.D) +B.a7E=new A.b9(B.hR,!1,!1,!1,!1,B.D) +B.a7z=new A.b9(B.ko,!1,!1,!1,!1,B.D) +B.a7A=new A.b9(B.ko,!1,!0,!1,!1,B.D) +B.le=new A.b9(B.hU,!1,!1,!1,!1,B.D) +B.lb=new A.b9(B.hT,!1,!1,!1,!1,B.D) +B.KZ=new A.tb() +B.uu=new A.uC() +B.l4=new A.ab2(0,"line") +B.a5O=new A.ik(B.ag,B.l4) +B.a5Q=new A.ik(B.a7,B.l4) +B.a5N=new A.ik(B.cA,B.l4) +B.a5P=new A.ik(B.d9,B.l4) +B.a1a=new A.cc([B.lc,B.KZ,B.ld,B.uu,B.a70,B.uu,B.a7E,B.uv,B.a7z,B.uz,B.a7A,B.uB,B.fL,B.a5O,B.fM,B.a5Q,B.fN,B.a5N,B.fO,B.a5P,B.le,B.rh,B.lb,B.l5],t.Fp) +B.xw=A.b(s(["R","G","B","A"]),t.T) +B.YH=A.b(s(["H","S","V","A"]),t.T) +B.YG=A.b(s(["H","S","L","A"]),t.T) +B.CI=new A.cc([B.uQ,B.xw,B.mQ,B.xw,B.mR,B.YH,B.mS,B.YG],A.ac("cc>")) +B.Hy=A.bj("F") +B.HA=A.bj("k") +B.Hz=A.bj("T") +B.aht=A.bj("d2") +B.Hw=A.bj("h") +B.Ic=new A.oY(0,"boolean") +B.ak6=new A.oY(1,"integer") +B.ak7=new A.oY(2,"double") +B.ak8=new A.oY(3,"numeric") +B.Id=new A.oY(4,"string") +B.a1c=new A.cc([B.Hy,B.Ic,B.HA,B.ak6,B.Hz,B.ak7,B.aht,B.ak8,B.Hw,B.Id],A.ac("cc")) +B.a2G={alias:0,allScroll:1,basic:2,cell:3,click:4,contextMenu:5,copy:6,forbidden:7,grab:8,grabbing:9,help:10,move:11,none:12,noDrop:13,precise:14,progress:15,text:16,resizeColumn:17,resizeDown:18,resizeDownLeft:19,resizeDownRight:20,resizeLeft:21,resizeLeftRight:22,resizeRight:23,resizeRow:24,resizeUp:25,resizeUpDown:26,resizeUpLeft:27,resizeUpRight:28,resizeUpLeftDownRight:29,resizeUpRightDownLeft:30,verticalText:31,wait:32,zoomIn:33,zoomOut:34} +B.a1d=new A.bV(B.a2G,["alias","all-scroll","default","cell","pointer","context-menu","copy","not-allowed","grab","grabbing","help","move","none","no-drop","crosshair","progress","text","col-resize","s-resize","sw-resize","se-resize","w-resize","ew-resize","e-resize","row-resize","n-resize","ns-resize","nw-resize","ne-resize","nwse-resize","nesw-resize","vertical-text","wait","zoom-in","zoom-out"],t.li) +B.a2F={true:0,false:1,String:2,Number:3,Bool:4,as:5,to:6,"=":7,is:8,eq:9,"==":10,neq:11,ne:12,"!=":13,le:14,lte:15,"<=":16,ge:17,gte:18,">=":19,lt:20,"<":21,gt:22,">":23,and:24,"&&":25,or:26,"||":27,xor:28,"^":29,not:30,"!":31,"+":32,"-":33,"*":34,"/":35,"%":36,"+=":37,"-=":38,"*=":39,"/=":40,"%=":41,",":42,"(":43,")":44} +B.afs=new A.bT(26,"constTrue") +B.t6=new A.bp(B.afs,null) +B.afr=new A.bT(25,"constFalse") +B.He=new A.bp(B.afr,null) +B.ag4=new A.bT(65,"typeString") +B.Ho=new A.bp(B.ag4,null) +B.ag3=new A.bT(64,"typeNumber") +B.Hn=new A.bp(B.ag3,null) +B.ag2=new A.bT(63,"typeBool") +B.Hm=new A.bp(B.ag2,null) +B.ag7=new A.bT(9,"asType") +B.iG=new A.bp(B.ag7,null) +B.afC=new A.bT(36,"operatorAssign") +B.e6=new A.bp(B.afC,null) +B.afF=new A.bT(39,"operatorEqual") +B.iz=new A.bp(B.afF,null) +B.afR=new A.bT(51,"operatorNotEqual") +B.iE=new A.bp(B.afR,null) +B.afI=new A.bT(42,"operatorLessOrEqual") +B.iB=new A.bp(B.afI,null) +B.afG=new A.bT(40,"operatorGreaterOrEqual") +B.iA=new A.bp(B.afG,null) +B.afJ=new A.bT(43,"operatorLessThan") +B.lI=new A.bp(B.afJ,null) +B.afH=new A.bT(41,"operatorGreaterThan") +B.lH=new A.bp(B.afH,null) +B.afB=new A.bT(35,"operatorAnd") +B.lG=new A.bp(B.afB,null) +B.afS=new A.bT(52,"operatorOr") +B.lL=new A.bp(B.afS,null) +B.afV=new A.bT(55,"operatorXor") +B.lN=new A.bp(B.afV,null) +B.afQ=new A.bT(50,"operatorNot") +B.iD=new A.bp(B.afQ,null) +B.afT=new A.bT(53,"operatorPlus") +B.lM=new A.bp(B.afT,null) +B.afK=new A.bT(44,"operatorMinus") +B.iC=new A.bp(B.afK,null) +B.afO=new A.bT(48,"operatorMultiply") +B.lK=new A.bp(B.afO,null) +B.afD=new A.bT(37,"operatorDivide") +B.fW=new A.bp(B.afD,null) +B.afM=new A.bT(46,"operatorModulo") +B.lJ=new A.bp(B.afM,null) +B.afU=new A.bT(54,"operatorPlusAssign") +B.Hk=new A.bp(B.afU,null) +B.afL=new A.bT(45,"operatorMinusAssign") +B.Hh=new A.bp(B.afL,null) +B.afP=new A.bT(49,"operatorMultiplyAssign") +B.Hj=new A.bp(B.afP,null) +B.afE=new A.bT(38,"operatorDivideAssign") +B.Hg=new A.bp(B.afE,null) +B.afN=new A.bT(47,"operatorModuloAssign") +B.Hi=new A.bp(B.afN,null) +B.afe=new A.bT(12,"comma") +B.t5=new A.bp(B.afe,null) +B.ag1=new A.bT(62,"startParenthesis") +B.t8=new A.bp(B.ag1,null) +B.afz=new A.bT(33,"endParenthesis") +B.iy=new A.bp(B.afz,null) +B.oG=new A.bV(B.a2F,[B.t6,B.He,B.Ho,B.Hn,B.Hm,B.iG,B.e6,B.e6,B.iz,B.iz,B.iz,B.iE,B.iE,B.iE,B.iB,B.iB,B.iB,B.iA,B.iA,B.iA,B.lI,B.lI,B.lH,B.lH,B.lG,B.lG,B.lL,B.lL,B.lN,B.lN,B.iD,B.iD,B.lM,B.iC,B.lK,B.fW,B.lJ,B.Hk,B.Hh,B.Hj,B.Hg,B.Hi,B.t5,B.t8,B.iy],t.F6) +B.p1=new A.K(16) +B.p2=new A.K(17) +B.fD=new A.K(18) +B.p3=new A.K(19) +B.Dp=new A.K(20) +B.Dq=new A.K(21) +B.Dr=new A.K(22) +B.Ds=new A.K(23) +B.Dt=new A.K(24) +B.El=new A.K(65666) +B.Em=new A.K(65667) +B.En=new A.K(65717) +B.p4=new A.K(392961) +B.p5=new A.K(392962) +B.p6=new A.K(392963) +B.p7=new A.K(392964) +B.p8=new A.K(392965) +B.p9=new A.K(392966) +B.pa=new A.K(392967) +B.pb=new A.K(392968) +B.Du=new A.K(392969) +B.Dv=new A.K(392970) +B.Dw=new A.K(392971) +B.Dx=new A.K(392972) +B.Dy=new A.K(392973) +B.Dz=new A.K(392974) +B.DA=new A.K(392975) +B.DB=new A.K(392976) +B.pc=new A.K(392977) +B.pd=new A.K(392978) +B.pe=new A.K(392979) +B.pf=new A.K(392980) +B.pg=new A.K(392981) +B.ph=new A.K(392982) +B.pi=new A.K(392983) +B.pj=new A.K(392984) +B.pk=new A.K(392985) +B.pl=new A.K(392986) +B.pm=new A.K(392987) +B.pn=new A.K(392988) +B.po=new A.K(392989) +B.pp=new A.K(392990) +B.pq=new A.K(392991) +B.a4d=new A.K(458752) +B.a4e=new A.K(458753) +B.a4f=new A.K(458754) +B.a4g=new A.K(458755) +B.pr=new A.K(458756) +B.ps=new A.K(458757) +B.pt=new A.K(458758) +B.pu=new A.K(458759) +B.pv=new A.K(458760) +B.pw=new A.K(458761) +B.px=new A.K(458762) +B.py=new A.K(458763) +B.pz=new A.K(458764) +B.pA=new A.K(458765) +B.pB=new A.K(458766) +B.pC=new A.K(458767) +B.pD=new A.K(458768) +B.pE=new A.K(458769) +B.pF=new A.K(458770) +B.pG=new A.K(458771) +B.pH=new A.K(458772) +B.pI=new A.K(458773) +B.pJ=new A.K(458774) +B.pK=new A.K(458775) +B.pL=new A.K(458776) +B.pM=new A.K(458777) +B.pN=new A.K(458778) +B.pO=new A.K(458779) +B.pP=new A.K(458780) +B.pQ=new A.K(458781) +B.pR=new A.K(458782) +B.pS=new A.K(458783) +B.pT=new A.K(458784) +B.pU=new A.K(458785) +B.pV=new A.K(458786) +B.pW=new A.K(458787) +B.pX=new A.K(458788) +B.pY=new A.K(458789) +B.pZ=new A.K(458790) +B.q_=new A.K(458791) +B.q0=new A.K(458792) +B.kF=new A.K(458793) +B.q1=new A.K(458794) +B.q2=new A.K(458795) +B.q3=new A.K(458796) +B.q4=new A.K(458797) +B.q5=new A.K(458798) +B.q6=new A.K(458799) +B.q7=new A.K(458800) +B.q8=new A.K(458801) +B.q9=new A.K(458803) +B.qa=new A.K(458804) +B.qb=new A.K(458805) +B.qc=new A.K(458806) +B.qd=new A.K(458807) +B.qe=new A.K(458808) +B.dW=new A.K(458809) +B.qf=new A.K(458810) +B.qg=new A.K(458811) +B.qh=new A.K(458812) +B.qi=new A.K(458813) +B.qj=new A.K(458814) +B.qk=new A.K(458815) +B.ql=new A.K(458816) +B.qm=new A.K(458817) +B.qn=new A.K(458818) +B.qo=new A.K(458819) +B.qp=new A.K(458820) +B.qq=new A.K(458821) +B.qr=new A.K(458822) +B.i6=new A.K(458823) +B.qs=new A.K(458824) +B.qt=new A.K(458825) +B.qu=new A.K(458826) +B.qv=new A.K(458827) +B.qw=new A.K(458828) +B.qx=new A.K(458829) +B.qy=new A.K(458830) +B.qz=new A.K(458831) +B.qA=new A.K(458832) +B.qB=new A.K(458833) +B.qC=new A.K(458834) +B.i7=new A.K(458835) +B.qD=new A.K(458836) +B.qE=new A.K(458837) +B.qF=new A.K(458838) +B.qG=new A.K(458839) +B.qH=new A.K(458840) +B.qI=new A.K(458841) +B.qJ=new A.K(458842) +B.qK=new A.K(458843) +B.qL=new A.K(458844) +B.qM=new A.K(458845) +B.qN=new A.K(458846) +B.qO=new A.K(458847) +B.qP=new A.K(458848) +B.qQ=new A.K(458849) +B.qR=new A.K(458850) +B.qS=new A.K(458851) +B.DC=new A.K(458852) +B.qT=new A.K(458853) +B.DD=new A.K(458854) +B.DE=new A.K(458855) +B.qU=new A.K(458856) +B.qV=new A.K(458857) +B.qW=new A.K(458858) +B.qX=new A.K(458859) +B.DF=new A.K(458860) +B.DG=new A.K(458861) +B.DH=new A.K(458862) +B.DI=new A.K(458863) +B.DJ=new A.K(458864) +B.DK=new A.K(458865) +B.DL=new A.K(458866) +B.DM=new A.K(458867) +B.DN=new A.K(458868) +B.DO=new A.K(458869) +B.DP=new A.K(458871) +B.DQ=new A.K(458873) +B.DR=new A.K(458874) +B.DS=new A.K(458875) +B.DT=new A.K(458876) +B.DU=new A.K(458877) +B.DV=new A.K(458878) +B.DW=new A.K(458879) +B.DX=new A.K(458880) +B.DY=new A.K(458881) +B.DZ=new A.K(458885) +B.E_=new A.K(458887) +B.E0=new A.K(458888) +B.E1=new A.K(458889) +B.E2=new A.K(458890) +B.E3=new A.K(458891) +B.E4=new A.K(458896) +B.E5=new A.K(458897) +B.E6=new A.K(458898) +B.E7=new A.K(458899) +B.E8=new A.K(458900) +B.E9=new A.K(458907) +B.Ea=new A.K(458915) +B.Eb=new A.K(458934) +B.Ec=new A.K(458935) +B.Ed=new A.K(458939) +B.Ee=new A.K(458960) +B.Ef=new A.K(458961) +B.Eg=new A.K(458962) +B.Eh=new A.K(458963) +B.Ei=new A.K(458964) +B.a4h=new A.K(458967) +B.Ej=new A.K(458968) +B.Ek=new A.K(458969) +B.eI=new A.K(458976) +B.eJ=new A.K(458977) +B.eK=new A.K(458978) +B.eL=new A.K(458979) +B.fE=new A.K(458980) +B.fF=new A.K(458981) +B.eM=new A.K(458982) +B.fG=new A.K(458983) +B.a4i=new A.K(786528) +B.a4j=new A.K(786529) +B.Eo=new A.K(786543) +B.Ep=new A.K(786544) +B.a4k=new A.K(786546) +B.a4l=new A.K(786547) +B.a4m=new A.K(786548) +B.a4n=new A.K(786549) +B.a4o=new A.K(786553) +B.a4p=new A.K(786554) +B.a4q=new A.K(786563) +B.a4r=new A.K(786572) +B.a4s=new A.K(786573) +B.a4t=new A.K(786580) +B.a4u=new A.K(786588) +B.a4v=new A.K(786589) +B.Eq=new A.K(786608) +B.Er=new A.K(786609) +B.Es=new A.K(786610) +B.Et=new A.K(786611) +B.Eu=new A.K(786612) +B.Ev=new A.K(786613) +B.Ew=new A.K(786614) +B.Ex=new A.K(786615) +B.Ey=new A.K(786616) +B.Ez=new A.K(786637) +B.a4w=new A.K(786639) +B.a4x=new A.K(786661) +B.EA=new A.K(786819) +B.a4y=new A.K(786820) +B.a4z=new A.K(786822) +B.EB=new A.K(786826) +B.a4A=new A.K(786829) +B.a4B=new A.K(786830) +B.EC=new A.K(786834) +B.ED=new A.K(786836) +B.a4C=new A.K(786838) +B.a4D=new A.K(786844) +B.a4E=new A.K(786846) +B.EE=new A.K(786847) +B.EF=new A.K(786850) +B.a4F=new A.K(786855) +B.a4G=new A.K(786859) +B.a4H=new A.K(786862) +B.EG=new A.K(786865) +B.a4I=new A.K(786871) +B.EH=new A.K(786891) +B.a4J=new A.K(786945) +B.a4K=new A.K(786947) +B.a4L=new A.K(786951) +B.a4M=new A.K(786952) +B.EI=new A.K(786977) +B.EJ=new A.K(786979) +B.EK=new A.K(786980) +B.EL=new A.K(786981) +B.EM=new A.K(786982) +B.EN=new A.K(786983) +B.EO=new A.K(786986) +B.a4N=new A.K(786989) +B.a4O=new A.K(786990) +B.EP=new A.K(786994) +B.a4P=new A.K(787065) +B.EQ=new A.K(787081) +B.ER=new A.K(787083) +B.ES=new A.K(787084) +B.ET=new A.K(787101) +B.EU=new A.K(787103) +B.a1e=new A.cc([16,B.p1,17,B.p2,18,B.fD,19,B.p3,20,B.Dp,21,B.Dq,22,B.Dr,23,B.Ds,24,B.Dt,65666,B.El,65667,B.Em,65717,B.En,392961,B.p4,392962,B.p5,392963,B.p6,392964,B.p7,392965,B.p8,392966,B.p9,392967,B.pa,392968,B.pb,392969,B.Du,392970,B.Dv,392971,B.Dw,392972,B.Dx,392973,B.Dy,392974,B.Dz,392975,B.DA,392976,B.DB,392977,B.pc,392978,B.pd,392979,B.pe,392980,B.pf,392981,B.pg,392982,B.ph,392983,B.pi,392984,B.pj,392985,B.pk,392986,B.pl,392987,B.pm,392988,B.pn,392989,B.po,392990,B.pp,392991,B.pq,458752,B.a4d,458753,B.a4e,458754,B.a4f,458755,B.a4g,458756,B.pr,458757,B.ps,458758,B.pt,458759,B.pu,458760,B.pv,458761,B.pw,458762,B.px,458763,B.py,458764,B.pz,458765,B.pA,458766,B.pB,458767,B.pC,458768,B.pD,458769,B.pE,458770,B.pF,458771,B.pG,458772,B.pH,458773,B.pI,458774,B.pJ,458775,B.pK,458776,B.pL,458777,B.pM,458778,B.pN,458779,B.pO,458780,B.pP,458781,B.pQ,458782,B.pR,458783,B.pS,458784,B.pT,458785,B.pU,458786,B.pV,458787,B.pW,458788,B.pX,458789,B.pY,458790,B.pZ,458791,B.q_,458792,B.q0,458793,B.kF,458794,B.q1,458795,B.q2,458796,B.q3,458797,B.q4,458798,B.q5,458799,B.q6,458800,B.q7,458801,B.q8,458803,B.q9,458804,B.qa,458805,B.qb,458806,B.qc,458807,B.qd,458808,B.qe,458809,B.dW,458810,B.qf,458811,B.qg,458812,B.qh,458813,B.qi,458814,B.qj,458815,B.qk,458816,B.ql,458817,B.qm,458818,B.qn,458819,B.qo,458820,B.qp,458821,B.qq,458822,B.qr,458823,B.i6,458824,B.qs,458825,B.qt,458826,B.qu,458827,B.qv,458828,B.qw,458829,B.qx,458830,B.qy,458831,B.qz,458832,B.qA,458833,B.qB,458834,B.qC,458835,B.i7,458836,B.qD,458837,B.qE,458838,B.qF,458839,B.qG,458840,B.qH,458841,B.qI,458842,B.qJ,458843,B.qK,458844,B.qL,458845,B.qM,458846,B.qN,458847,B.qO,458848,B.qP,458849,B.qQ,458850,B.qR,458851,B.qS,458852,B.DC,458853,B.qT,458854,B.DD,458855,B.DE,458856,B.qU,458857,B.qV,458858,B.qW,458859,B.qX,458860,B.DF,458861,B.DG,458862,B.DH,458863,B.DI,458864,B.DJ,458865,B.DK,458866,B.DL,458867,B.DM,458868,B.DN,458869,B.DO,458871,B.DP,458873,B.DQ,458874,B.DR,458875,B.DS,458876,B.DT,458877,B.DU,458878,B.DV,458879,B.DW,458880,B.DX,458881,B.DY,458885,B.DZ,458887,B.E_,458888,B.E0,458889,B.E1,458890,B.E2,458891,B.E3,458896,B.E4,458897,B.E5,458898,B.E6,458899,B.E7,458900,B.E8,458907,B.E9,458915,B.Ea,458934,B.Eb,458935,B.Ec,458939,B.Ed,458960,B.Ee,458961,B.Ef,458962,B.Eg,458963,B.Eh,458964,B.Ei,458967,B.a4h,458968,B.Ej,458969,B.Ek,458976,B.eI,458977,B.eJ,458978,B.eK,458979,B.eL,458980,B.fE,458981,B.fF,458982,B.eM,458983,B.fG,786528,B.a4i,786529,B.a4j,786543,B.Eo,786544,B.Ep,786546,B.a4k,786547,B.a4l,786548,B.a4m,786549,B.a4n,786553,B.a4o,786554,B.a4p,786563,B.a4q,786572,B.a4r,786573,B.a4s,786580,B.a4t,786588,B.a4u,786589,B.a4v,786608,B.Eq,786609,B.Er,786610,B.Es,786611,B.Et,786612,B.Eu,786613,B.Ev,786614,B.Ew,786615,B.Ex,786616,B.Ey,786637,B.Ez,786639,B.a4w,786661,B.a4x,786819,B.EA,786820,B.a4y,786822,B.a4z,786826,B.EB,786829,B.a4A,786830,B.a4B,786834,B.EC,786836,B.ED,786838,B.a4C,786844,B.a4D,786846,B.a4E,786847,B.EE,786850,B.EF,786855,B.a4F,786859,B.a4G,786862,B.a4H,786865,B.EG,786871,B.a4I,786891,B.EH,786945,B.a4J,786947,B.a4K,786951,B.a4L,786952,B.a4M,786977,B.EI,786979,B.EJ,786980,B.EK,786981,B.EL,786982,B.EM,786983,B.EN,786986,B.EO,786989,B.a4N,786990,B.a4O,786994,B.EP,787065,B.a4P,787081,B.EQ,787083,B.ER,787084,B.ES,787101,B.ET,787103,B.EU],A.ac("cc")) +B.rD=new A.b9(B.bJ,!1,!1,!0,!1,B.D) +B.rA=new A.b9(B.bo,!1,!1,!0,!1,B.D) +B.rB=new A.b9(B.bp,!1,!1,!0,!1,B.D) +B.rC=new A.b9(B.bv,!1,!1,!0,!1,B.D) +B.Ge=new A.b9(B.bJ,!1,!1,!1,!0,B.D) +B.Gb=new A.b9(B.bo,!1,!1,!1,!0,B.D) +B.Gc=new A.b9(B.bp,!1,!1,!1,!0,B.D) +B.Gd=new A.b9(B.bv,!1,!1,!1,!0,B.D) +B.G6=new A.b9(B.bo,!0,!1,!1,!1,B.D) +B.G7=new A.b9(B.bp,!0,!1,!1,!1,B.D) +B.G8=new A.b9(B.bo,!0,!0,!1,!1,B.D) +B.G9=new A.b9(B.bp,!0,!0,!1,!1,B.D) +B.a1f=new A.cc([B.rD,B.a3,B.rA,B.a3,B.rB,B.a3,B.rC,B.a3,B.Ge,B.a3,B.Gb,B.a3,B.Gc,B.a3,B.Gd,B.a3,B.fM,B.a3,B.fN,B.a3,B.fO,B.a3,B.fL,B.a3,B.G6,B.a3,B.G7,B.a3,B.G8,B.a3,B.G9,B.a3,B.lc,B.a3,B.ld,B.a3],t.Fp) +B.a1g=new A.cc([B.jV,"Thin",B.wA,"ExtraLight",B.wB,"Light",B.A,"Regular",B.az,"Medium",B.jW,"SemiBold",B.b3,"Bold",B.wD,"ExtraBold",B.nQ,"Black"],A.ac("cc")) +B.a2O={PauseMenu:0} +B.a1h=new A.bV(B.a2O,[A.bUd()],A.ac("bV")) +B.oJ=new A.bV(B.bw,[],A.ac("bV")) +B.CL=new A.bV(B.bw,[],A.ac("bV")) +B.a1k=new A.bV(B.bw,[],A.ac("bV")) +B.kz=new A.bV(B.bw,[],A.ac("bV")) +B.a1m=new A.bV(B.bw,[],A.ac("bV")) +B.CK=new A.bV(B.bw,[],A.ac("bV>")) +B.a1i=new A.bV(B.bw,[],A.ac("bV")) +B.a1j=new A.bV(B.bw,[],A.ac("bV")) +B.i2=new A.bV(B.bw,[],A.ac("bV")) +B.CJ=new A.bV(B.bw,[],A.ac("bV")) +B.a1l=new A.bV(B.bw,[],A.ac("bV")) +B.CM=new A.bV(B.bw,[],A.ac("bV>")) +B.oH=new A.bV(B.bw,[],A.ac("bV<0&,F>")) +B.a2Z={png:0,jpeg:1,jpg:2,webp:3,gif:4,bmp:5} +B.a1n=new A.bV(B.a2Z,[B.wT,B.o1,B.o1,B.wU,B.wV,B.wW],A.ac("bV")) +B.a31={svg:0,g:1,a:2,use:3,symbol:4,mask:5,pattern:6,radialGradient:7,linearGradient:8,clipPath:9,image:10,text:11,tspan:12} +B.a1o=new A.bV(B.a31,[A.bUl(),A.buq(),A.buq(),A.bUm(),A.bur(),A.bur(),A.bUj(),A.bUk(),A.bUi(),A.bUg(),A.bUh(),A.bus(),A.bus()],A.ac("bV")) +B.a2W={BU:0,DD:1,FX:2,TP:3,YD:4,ZR:5} +B.dk=new A.bV(B.a2W,["MM","DE","FR","TL","YE","CD"],t.li) +B.a2Q={"Æ":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,"𝔅":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,"’":52,"∷":53,"⩴":54,"≡":55,"∯":56,"∮":57,"ℂ":58,"∐":59,"∳":60,"⨯":61,"𝒞":62,"⋓":63,"≍":64,"ⅅ":65,"⤑":66,"Ђ":67,"Ѕ":68,"Џ":69,"‡":70,"↡":71,"⫤":72,"Ď":73,"Д":74,"∇":75,"Δ":76,"𝔇":77,"´":78,"˙":79,"˝":80,"`":81,"˜":82,"⋄":83,"ⅆ":84,"𝔻":85,"¨":86,"⃜":87,"≐":88,"∯":89,"¨":90,"⇓":91,"⇐":92,"⇔":93,"⫤":94,"⟸":95,"⟺":96,"⟹":97,"⇒":98,"⊨":99,"⇑":100,"⇕":101,"∥":102,"↓":103,"⤓":104,"⇵":105,"̑":106,"⥐":107,"⥞":108,"↽":109,"⥖":110,"⥟":111,"⇁":112,"⥗":113,"⊤":114,"↧":115,"⇓":116,"𝒟":117,"Đ":118,"Ŋ":119,"Ð":120,"É":121,"Ě":122,"Ê":123,"Э":124,"Ė":125,"𝔈":126,"È":127,"∈":128,"Ē":129,"◻":130,"▫":131,"Ę":132,"𝔼":133,"Ε":134,"⩵":135,"≂":136,"⇌":137,"ℰ":138,"⩳":139,"Η":140,"Ë":141,"∃":142,"ⅇ":143,"Ф":144,"𝔉":145,"◼":146,"▪":147,"𝔽":148,"∀":149,"ℱ":150,"ℱ":151,"Ѓ":152,">":153,"Γ":154,"Ϝ":155,"Ğ":156,"Ģ":157,"Ĝ":158,"Г":159,"Ġ":160,"𝔊":161,"⋙":162,"𝔾":163,"≥":164,"⋛":165,"≧":166,"⪢":167,"≷":168,"⩾":169,"≳":170,"𝒢":171,"≫":172,"Ъ":173,"ˇ":174,"^":175,"Ĥ":176,"ℌ":177,"ℋ":178,"ℍ":179,"─":180,"ℋ":181,"Ħ":182,"≎":183,"≏":184,"Е":185,"IJ":186,"Ё":187,"Í":188,"Î":189,"И":190,"İ":191,"ℑ":192,"Ì":193,"ℑ":194,"Ī":195,"ⅈ":196,"⇒":197,"∬":198,"∫":199,"⋂":200,"⁣":201,"⁢":202,"Į":203,"𝕀":204,"Ι":205,"ℐ":206,"Ĩ":207,"І":208,"Ï":209,"Ĵ":210,"Й":211,"𝔍":212,"𝕁":213,"𝒥":214,"Ј":215,"Є":216,"Х":217,"Ќ":218,"Κ":219,"Ķ":220,"К":221,"𝔎":222,"𝕂":223,"𝒦":224,"Љ":225,"<":226,"Ĺ":227,"Λ":228,"⟪":229,"ℒ":230,"↞":231,"Ľ":232,"Ļ":233,"Л":234,"⟨":235,"←":236,"⇤":237,"⇆":238,"⌈":239,"⟦":240,"⥡":241,"⇃":242,"⥙":243,"⌊":244,"↔":245,"⥎":246,"⊣":247,"↤":248,"⥚":249,"⊲":250,"⧏":251,"⊴":252,"⥑":253,"⥠":254,"↿":255,"⥘":256,"↼":257,"⥒":258,"⇐":259,"⇔":260,"⋚":261,"≦":262,"≶":263,"⪡":264,"⩽":265,"≲":266,"𝔏":267,"⋘":268,"⇚":269,"Ŀ":270,"⟵":271,"⟷":272,"⟶":273,"⟸":274,"⟺":275,"⟹":276,"𝕃":277,"↙":278,"↘":279,"ℒ":280,"↰":281,"Ł":282,"≪":283,"⤅":284,"М":285," ":286,"ℳ":287,"𝔐":288,"∓":289,"𝕄":290,"ℳ":291,"Μ":292,"Њ":293,"Ń":294,"Ň":295,"Ņ":296,"Н":297,"​":298,"​":299,"​":300,"​":301,"≫":302,"≪":303," ":304,"𝔑":305,"⁠":306," ":307,"ℕ":308,"⫬":309,"≢":310,"≭":311,"∦":312,"∉":313,"≠":314,"≂̸":315,"∄":316,"≯":317,"≱":318,"≧̸":319,"≫̸":320,"≹":321,"⩾̸":322,"≵":323,"≎̸":324,"≏̸":325,"⋪":326,"⧏̸":327,"⋬":328,"≮":329,"≰":330,"≸":331,"≪̸":332,"⩽̸":333,"≴":334,"⪢̸":335,"⪡̸":336,"⊀":337,"⪯̸":338,"⋠":339,"∌":340,"⋫":341,"⧐̸":342,"⋭":343,"⊏̸":344,"⋢":345,"⊐̸":346,"⋣":347,"⊂⃒":348,"⊈":349,"⊁":350,"⪰̸":351,"⋡":352,"≿̸":353,"⊃⃒":354,"⊉":355,"≁":356,"≄":357,"≇":358,"≉":359,"∤":360,"𝒩":361,"Ñ":362,"Ν":363,"Œ":364,"Ó":365,"Ô":366,"О":367,"Ő":368,"𝔒":369,"Ò":370,"Ō":371,"Ω":372,"Ο":373,"𝕆":374,"“":375,"‘":376,"⩔":377,"𝒪":378,"Ø":379,"Õ":380,"⨷":381,"Ö":382,"‾":383,"⏞":384,"⎴":385,"⏜":386,"∂":387,"П":388,"𝔓":389,"Φ":390,"Π":391,"±":392,"ℌ":393,"ℙ":394,"⪻":395,"≺":396,"⪯":397,"≼":398,"≾":399,"″":400,"∏":401,"∷":402,"∝":403,"𝒫":404,"Ψ":405,""":406,"𝔔":407,"ℚ":408,"𝒬":409,"⤐":410,"®":411,"Ŕ":412,"⟫":413,"↠":414,"⤖":415,"Ř":416,"Ŗ":417,"Р":418,"ℜ":419,"∋":420,"⇋":421,"⥯":422,"ℜ":423,"Ρ":424,"⟩":425,"→":426,"⇥":427,"⇄":428,"⌉":429,"⟧":430,"⥝":431,"⇂":432,"⥕":433,"⌋":434,"⊢":435,"↦":436,"⥛":437,"⊳":438,"⧐":439,"⊵":440,"⥏":441,"⥜":442,"↾":443,"⥔":444,"⇀":445,"⥓":446,"⇒":447,"ℝ":448,"⥰":449,"⇛":450,"ℛ":451,"↱":452,"⧴":453,"Щ":454,"Ш":455,"Ь":456,"Ś":457,"⪼":458,"Š":459,"Ş":460,"Ŝ":461,"С":462,"𝔖":463,"↓":464,"←":465,"→":466,"↑":467,"Σ":468,"∘":469,"𝕊":470,"√":471,"□":472,"⊓":473,"⊏":474,"⊑":475,"⊐":476,"⊒":477,"⊔":478,"𝒮":479,"⋆":480,"⋐":481,"⋐":482,"⊆":483,"≻":484,"⪰":485,"≽":486,"≿":487,"∋":488,"∑":489,"⋑":490,"⊃":491,"⊇":492,"⋑":493,"Þ":494,"™":495,"Ћ":496,"Ц":497," ":498,"Τ":499,"Ť":500,"Ţ":501,"Т":502,"𝔗":503,"∴":504,"Θ":505,"  ":506," ":507,"∼":508,"≃":509,"≅":510,"≈":511,"𝕋":512,"⃛":513,"𝒯":514,"Ŧ":515,"Ú":516,"↟":517,"⥉":518,"Ў":519,"Ŭ":520,"Û":521,"У":522,"Ű":523,"𝔘":524,"Ù":525,"Ū":526,"_":527,"⏟":528,"⎵":529,"⏝":530,"⋃":531,"⊎":532,"Ų":533,"𝕌":534,"↑":535,"⤒":536,"⇅":537,"↕":538,"⥮":539,"⊥":540,"↥":541,"⇑":542,"⇕":543,"↖":544,"↗":545,"ϒ":546,"Υ":547,"Ů":548,"𝒰":549,"Ũ":550,"Ü":551,"⊫":552,"⫫":553,"В":554,"⊩":555,"⫦":556,"⋁":557,"‖":558,"‖":559,"∣":560,"|":561,"❘":562,"≀":563," ":564,"𝔙":565,"𝕍":566,"𝒱":567,"⊪":568,"Ŵ":569,"⋀":570,"𝔚":571,"𝕎":572,"𝒲":573,"𝔛":574,"Ξ":575,"𝕏":576,"𝒳":577,"Я":578,"Ї":579,"Ю":580,"Ý":581,"Ŷ":582,"Ы":583,"𝔜":584,"𝕐":585,"𝒴":586,"Ÿ":587,"Ж":588,"Ź":589,"Ž":590,"З":591,"Ż":592,"​":593,"Ζ":594,"ℨ":595,"ℤ":596,"𝒵":597,"á":598,"ă":599,"∾":600,"∾̳":601,"∿":602,"â":603,"´":604,"а":605,"æ":606,"⁡":607,"𝔞":608,"à":609,"ℵ":610,"ℵ":611,"α":612,"ā":613,"⨿":614,"&":615,"∧":616,"⩕":617,"⩜":618,"⩘":619,"⩚":620,"∠":621,"⦤":622,"∠":623,"∡":624,"⦨":625,"⦩":626,"⦪":627,"⦫":628,"⦬":629,"⦭":630,"⦮":631,"⦯":632,"∟":633,"⊾":634,"⦝":635,"∢":636,"Å":637,"⍼":638,"ą":639,"𝕒":640,"≈":641,"⩰":642,"⩯":643,"≊":644,"≋":645,"'":646,"≈":647,"≊":648,"å":649,"𝒶":650,"*":651,"≈":652,"≍":653,"ã":654,"ä":655,"∳":656,"⨑":657,"⫭":658,"≌":659,"϶":660,"‵":661,"∽":662,"⋍":663,"⊽":664,"⌅":665,"⌅":666,"⎵":667,"⎶":668,"≌":669,"б":670,"„":671,"∵":672,"∵":673,"⦰":674,"϶":675,"ℬ":676,"β":677,"ℶ":678,"≬":679,"𝔟":680,"⋂":681,"◯":682,"⋃":683,"⨀":684,"⨁":685,"⨂":686,"⨆":687,"★":688,"▽":689,"△":690,"⨄":691,"⋁":692,"⋀":693,"⤍":694,"⧫":695,"▪":696,"▴":697,"▾":698,"◂":699,"▸":700,"␣":701,"▒":702,"░":703,"▓":704,"█":705,"=⃥":706,"≡⃥":707,"⌐":708,"𝕓":709,"⊥":710,"⊥":711,"⋈":712,"╗":713,"╔":714,"╖":715,"╓":716,"═":717,"╦":718,"╩":719,"╤":720,"╧":721,"╝":722,"╚":723,"╜":724,"╙":725,"║":726,"╬":727,"╣":728,"╠":729,"╫":730,"╢":731,"╟":732,"⧉":733,"╕":734,"╒":735,"┐":736,"┌":737,"─":738,"╥":739,"╨":740,"┬":741,"┴":742,"⊟":743,"⊞":744,"⊠":745,"╛":746,"╘":747,"┘":748,"└":749,"│":750,"╪":751,"╡":752,"╞":753,"┼":754,"┤":755,"├":756,"‵":757,"˘":758,"¦":759,"𝒷":760,"⁏":761,"∽":762,"⋍":763,"\":764,"⧅":765,"⟈":766,"•":767,"•":768,"≎":769,"⪮":770,"≏":771,"≏":772,"ć":773,"∩":774,"⩄":775,"⩉":776,"⩋":777,"⩇":778,"⩀":779,"∩︀":780,"⁁":781,"ˇ":782,"⩍":783,"č":784,"ç":785,"ĉ":786,"⩌":787,"⩐":788,"ċ":789,"¸":790,"⦲":791,"¢":792,"·":793,"𝔠":794,"ч":795,"✓":796,"✓":797,"χ":798,"○":799,"⧃":800,"ˆ":801,"≗":802,"↺":803,"↻":804,"®":805,"Ⓢ":806,"⊛":807,"⊚":808,"⊝":809,"≗":810,"⨐":811,"⫯":812,"⧂":813,"♣":814,"♣":815,":":816,"≔":817,"≔":818,",":819,"@":820,"∁":821,"∘":822,"∁":823,"ℂ":824,"≅":825,"⩭":826,"∮":827,"𝕔":828,"∐":829,"©":830,"℗":831,"↵":832,"✗":833,"𝒸":834,"⫏":835,"⫑":836,"⫐":837,"⫒":838,"⋯":839,"⤸":840,"⤵":841,"⋞":842,"⋟":843,"↶":844,"⤽":845,"∪":846,"⩈":847,"⩆":848,"⩊":849,"⊍":850,"⩅":851,"∪︀":852,"↷":853,"⤼":854,"⋞":855,"⋟":856,"⋎":857,"⋏":858,"¤":859,"↶":860,"↷":861,"⋎":862,"⋏":863,"∲":864,"∱":865,"⌭":866,"⇓":867,"⥥":868,"†":869,"ℸ":870,"↓":871,"‐":872,"⊣":873,"⤏":874,"˝":875,"ď":876,"д":877,"ⅆ":878,"‡":879,"⇊":880,"⩷":881,"°":882,"δ":883,"⦱":884,"⥿":885,"𝔡":886,"⇃":887,"⇂":888,"⋄":889,"⋄":890,"♦":891,"♦":892,"¨":893,"ϝ":894,"⋲":895,"÷":896,"÷":897,"⋇":898,"⋇":899,"ђ":900,"⌞":901,"⌍":902,"$":903,"𝕕":904,"˙":905,"≐":906,"≑":907,"∸":908,"∔":909,"⊡":910,"⌆":911,"↓":912,"⇊":913,"⇃":914,"⇂":915,"⤐":916,"⌟":917,"⌌":918,"𝒹":919,"ѕ":920,"⧶":921,"đ":922,"⋱":923,"▿":924,"▾":925,"⇵":926,"⥯":927,"⦦":928,"џ":929,"⟿":930,"⩷":931,"≑":932,"é":933,"⩮":934,"ě":935,"≖":936,"ê":937,"≕":938,"э":939,"ė":940,"ⅇ":941,"≒":942,"𝔢":943,"⪚":944,"è":945,"⪖":946,"⪘":947,"⪙":948,"⏧":949,"ℓ":950,"⪕":951,"⪗":952,"ē":953,"∅":954,"∅":955,"∅":956," ":957," ":958," ":959,"ŋ":960," ":961,"ę":962,"𝕖":963,"⋕":964,"⧣":965,"⩱":966,"ε":967,"ε":968,"ϵ":969,"≖":970,"≕":971,"≂":972,"⪖":973,"⪕":974,"=":975,"≟":976,"≡":977,"⩸":978,"⧥":979,"≓":980,"⥱":981,"ℯ":982,"≐":983,"≂":984,"η":985,"ð":986,"ë":987,"€":988,"!":989,"∃":990,"ℰ":991,"ⅇ":992,"≒":993,"ф":994,"♀":995,"ffi":996,"ff":997,"ffl":998,"𝔣":999,"fi":1000,"fj":1001,"♭":1002,"fl":1003,"▱":1004,"ƒ":1005,"𝕗":1006,"∀":1007,"⋔":1008,"⫙":1009,"⨍":1010,"½":1011,"⅓":1012,"¼":1013,"⅕":1014,"⅙":1015,"⅛":1016,"⅔":1017,"⅖":1018,"¾":1019,"⅗":1020,"⅜":1021,"⅘":1022,"⅚":1023,"⅝":1024,"⅞":1025,"⁄":1026,"⌢":1027,"𝒻":1028,"≧":1029,"⪌":1030,"ǵ":1031,"γ":1032,"ϝ":1033,"⪆":1034,"ğ":1035,"ĝ":1036,"г":1037,"ġ":1038,"≥":1039,"⋛":1040,"≥":1041,"≧":1042,"⩾":1043,"⩾":1044,"⪩":1045,"⪀":1046,"⪂":1047,"⪄":1048,"⋛︀":1049,"⪔":1050,"𝔤":1051,"≫":1052,"⋙":1053,"ℷ":1054,"ѓ":1055,"≷":1056,"⪒":1057,"⪥":1058,"⪤":1059,"≩":1060,"⪊":1061,"⪊":1062,"⪈":1063,"⪈":1064,"≩":1065,"⋧":1066,"𝕘":1067,"`":1068,"ℊ":1069,"≳":1070,"⪎":1071,"⪐":1072,">":1073,"⪧":1074,"⩺":1075,"⋗":1076,"⦕":1077,"⩼":1078,"⪆":1079,"⥸":1080,"⋗":1081,"⋛":1082,"⪌":1083,"≷":1084,"≳":1085,"≩︀":1086,"≩︀":1087,"⇔":1088," ":1089,"½":1090,"ℋ":1091,"ъ":1092,"↔":1093,"⥈":1094,"↭":1095,"ℏ":1096,"ĥ":1097,"♥":1098,"♥":1099,"…":1100,"⊹":1101,"𝔥":1102,"⤥":1103,"⤦":1104,"⇿":1105,"∻":1106,"↩":1107,"↪":1108,"𝕙":1109,"―":1110,"𝒽":1111,"ℏ":1112,"ħ":1113,"⁃":1114,"‐":1115,"í":1116,"⁣":1117,"î":1118,"и":1119,"е":1120,"¡":1121,"⇔":1122,"𝔦":1123,"ì":1124,"ⅈ":1125,"⨌":1126,"∭":1127,"⧜":1128,"℩":1129,"ij":1130,"ī":1131,"ℑ":1132,"ℐ":1133,"ℑ":1134,"ı":1135,"⊷":1136,"Ƶ":1137,"∈":1138,"℅":1139,"∞":1140,"⧝":1141,"ı":1142,"∫":1143,"⊺":1144,"ℤ":1145,"⊺":1146,"⨗":1147,"⨼":1148,"ё":1149,"į":1150,"𝕚":1151,"ι":1152,"⨼":1153,"¿":1154,"𝒾":1155,"∈":1156,"⋹":1157,"⋵":1158,"⋴":1159,"⋳":1160,"∈":1161,"⁢":1162,"ĩ":1163,"і":1164,"ï":1165,"ĵ":1166,"й":1167,"𝔧":1168,"ȷ":1169,"𝕛":1170,"𝒿":1171,"ј":1172,"є":1173,"κ":1174,"ϰ":1175,"ķ":1176,"к":1177,"𝔨":1178,"ĸ":1179,"х":1180,"ќ":1181,"𝕜":1182,"𝓀":1183,"⇚":1184,"⇐":1185,"⤛":1186,"⤎":1187,"≦":1188,"⪋":1189,"⥢":1190,"ĺ":1191,"⦴":1192,"ℒ":1193,"λ":1194,"⟨":1195,"⦑":1196,"⟨":1197,"⪅":1198,"«":1199,"←":1200,"⇤":1201,"⤟":1202,"⤝":1203,"↩":1204,"↫":1205,"⤹":1206,"⥳":1207,"↢":1208,"⪫":1209,"⤙":1210,"⪭":1211,"⪭︀":1212,"⤌":1213,"❲":1214,"{":1215,"[":1216,"⦋":1217,"⦏":1218,"⦍":1219,"ľ":1220,"ļ":1221,"⌈":1222,"{":1223,"л":1224,"⤶":1225,"“":1226,"„":1227,"⥧":1228,"⥋":1229,"↲":1230,"≤":1231,"←":1232,"↢":1233,"↽":1234,"↼":1235,"⇇":1236,"↔":1237,"⇆":1238,"⇋":1239,"↭":1240,"⋋":1241,"⋚":1242,"≤":1243,"≦":1244,"⩽":1245,"⩽":1246,"⪨":1247,"⩿":1248,"⪁":1249,"⪃":1250,"⋚︀":1251,"⪓":1252,"⪅":1253,"⋖":1254,"⋚":1255,"⪋":1256,"≶":1257,"≲":1258,"⥼":1259,"⌊":1260,"𝔩":1261,"≶":1262,"⪑":1263,"↽":1264,"↼":1265,"⥪":1266,"▄":1267,"љ":1268,"≪":1269,"⇇":1270,"⌞":1271,"⥫":1272,"◺":1273,"ŀ":1274,"⎰":1275,"⎰":1276,"≨":1277,"⪉":1278,"⪉":1279,"⪇":1280,"⪇":1281,"≨":1282,"⋦":1283,"⟬":1284,"⇽":1285,"⟦":1286,"⟵":1287,"⟷":1288,"⟼":1289,"⟶":1290,"↫":1291,"↬":1292,"⦅":1293,"𝕝":1294,"⨭":1295,"⨴":1296,"∗":1297,"_":1298,"◊":1299,"◊":1300,"⧫":1301,"(":1302,"⦓":1303,"⇆":1304,"⌟":1305,"⇋":1306,"⥭":1307,"‎":1308,"⊿":1309,"‹":1310,"𝓁":1311,"↰":1312,"≲":1313,"⪍":1314,"⪏":1315,"[":1316,"‘":1317,"‚":1318,"ł":1319,"<":1320,"⪦":1321,"⩹":1322,"⋖":1323,"⋋":1324,"⋉":1325,"⥶":1326,"⩻":1327,"⦖":1328,"◃":1329,"⊴":1330,"◂":1331,"⥊":1332,"⥦":1333,"≨︀":1334,"≨︀":1335,"∺":1336,"¯":1337,"♂":1338,"✠":1339,"✠":1340,"↦":1341,"↦":1342,"↧":1343,"↤":1344,"↥":1345,"▮":1346,"⨩":1347,"м":1348,"—":1349,"∡":1350,"𝔪":1351,"℧":1352,"µ":1353,"∣":1354,"*":1355,"⫰":1356,"·":1357,"−":1358,"⊟":1359,"∸":1360,"⨪":1361,"⫛":1362,"…":1363,"∓":1364,"⊧":1365,"𝕞":1366,"∓":1367,"𝓂":1368,"∾":1369,"μ":1370,"⊸":1371,"⊸":1372,"⋙̸":1373,"≫⃒":1374,"≫̸":1375,"⇍":1376,"⇎":1377,"⋘̸":1378,"≪⃒":1379,"≪̸":1380,"⇏":1381,"⊯":1382,"⊮":1383,"∇":1384,"ń":1385,"∠⃒":1386,"≉":1387,"⩰̸":1388,"≋̸":1389,"ʼn":1390,"≉":1391,"♮":1392,"♮":1393,"ℕ":1394," ":1395,"≎̸":1396,"≏̸":1397,"⩃":1398,"ň":1399,"ņ":1400,"≇":1401,"⩭̸":1402,"⩂":1403,"н":1404,"–":1405,"≠":1406,"⇗":1407,"⤤":1408,"↗":1409,"↗":1410,"≐̸":1411,"≢":1412,"⤨":1413,"≂̸":1414,"∄":1415,"∄":1416,"𝔫":1417,"≧̸":1418,"≱":1419,"≱":1420,"≧̸":1421,"⩾̸":1422,"⩾̸":1423,"≵":1424,"≯":1425,"≯":1426,"⇎":1427,"↮":1428,"⫲":1429,"∋":1430,"⋼":1431,"⋺":1432,"∋":1433,"њ":1434,"⇍":1435,"≦̸":1436,"↚":1437,"‥":1438,"≰":1439,"↚":1440,"↮":1441,"≰":1442,"≦̸":1443,"⩽̸":1444,"⩽̸":1445,"≮":1446,"≴":1447,"≮":1448,"⋪":1449,"⋬":1450,"∤":1451,"𝕟":1452,"¬":1453,"∉":1454,"⋹̸":1455,"⋵̸":1456,"∉":1457,"⋷":1458,"⋶":1459,"∌":1460,"∌":1461,"⋾":1462,"⋽":1463,"∦":1464,"∦":1465,"⫽⃥":1466,"∂̸":1467,"⨔":1468,"⊀":1469,"⋠":1470,"⪯̸":1471,"⊀":1472,"⪯̸":1473,"⇏":1474,"↛":1475,"⤳̸":1476,"↝̸":1477,"↛":1478,"⋫":1479,"⋭":1480,"⊁":1481,"⋡":1482,"⪰̸":1483,"𝓃":1484,"∤":1485,"∦":1486,"≁":1487,"≄":1488,"≄":1489,"∤":1490,"∦":1491,"⋢":1492,"⋣":1493,"⊄":1494,"⫅̸":1495,"⊈":1496,"⊂⃒":1497,"⊈":1498,"⫅̸":1499,"⊁":1500,"⪰̸":1501,"⊅":1502,"⫆̸":1503,"⊉":1504,"⊃⃒":1505,"⊉":1506,"⫆̸":1507,"≹":1508,"ñ":1509,"≸":1510,"⋪":1511,"⋬":1512,"⋫":1513,"⋭":1514,"ν":1515,"#":1516,"№":1517," ":1518,"⊭":1519,"⤄":1520,"≍⃒":1521,"⊬":1522,"≥⃒":1523,">⃒":1524,"⧞":1525,"⤂":1526,"≤⃒":1527,"<⃒":1528,"⊴⃒":1529,"⤃":1530,"⊵⃒":1531,"∼⃒":1532,"⇖":1533,"⤣":1534,"↖":1535,"↖":1536,"⤧":1537,"Ⓢ":1538,"ó":1539,"⊛":1540,"⊚":1541,"ô":1542,"о":1543,"⊝":1544,"ő":1545,"⨸":1546,"⊙":1547,"⦼":1548,"œ":1549,"⦿":1550,"𝔬":1551,"˛":1552,"ò":1553,"⧁":1554,"⦵":1555,"Ω":1556,"∮":1557,"↺":1558,"⦾":1559,"⦻":1560,"‾":1561,"⧀":1562,"ō":1563,"ω":1564,"ο":1565,"⦶":1566,"⊖":1567,"𝕠":1568,"⦷":1569,"⦹":1570,"⊕":1571,"∨":1572,"↻":1573,"⩝":1574,"ℴ":1575,"ℴ":1576,"ª":1577,"º":1578,"⊶":1579,"⩖":1580,"⩗":1581,"⩛":1582,"ℴ":1583,"ø":1584,"⊘":1585,"õ":1586,"⊗":1587,"⨶":1588,"ö":1589,"⌽":1590,"∥":1591,"¶":1592,"∥":1593,"⫳":1594,"⫽":1595,"∂":1596,"п":1597,"%":1598,".":1599,"‰":1600,"⊥":1601,"‱":1602,"𝔭":1603,"φ":1604,"ϕ":1605,"ℳ":1606,"☎":1607,"π":1608,"⋔":1609,"ϖ":1610,"ℏ":1611,"ℎ":1612,"ℏ":1613,"+":1614,"⨣":1615,"⊞":1616,"⨢":1617,"∔":1618,"⨥":1619,"⩲":1620,"±":1621,"⨦":1622,"⨧":1623,"±":1624,"⨕":1625,"𝕡":1626,"£":1627,"≺":1628,"⪳":1629,"⪷":1630,"≼":1631,"⪯":1632,"≺":1633,"⪷":1634,"≼":1635,"⪯":1636,"⪹":1637,"⪵":1638,"⋨":1639,"≾":1640,"′":1641,"ℙ":1642,"⪵":1643,"⪹":1644,"⋨":1645,"∏":1646,"⌮":1647,"⌒":1648,"⌓":1649,"∝":1650,"∝":1651,"≾":1652,"⊰":1653,"𝓅":1654,"ψ":1655," ":1656,"𝔮":1657,"⨌":1658,"𝕢":1659,"⁗":1660,"𝓆":1661,"ℍ":1662,"⨖":1663,"?":1664,"≟":1665,""":1666,"⇛":1667,"⇒":1668,"⤜":1669,"⤏":1670,"⥤":1671,"∽̱":1672,"ŕ":1673,"√":1674,"⦳":1675,"⟩":1676,"⦒":1677,"⦥":1678,"⟩":1679,"»":1680,"→":1681,"⥵":1682,"⇥":1683,"⤠":1684,"⤳":1685,"⤞":1686,"↪":1687,"↬":1688,"⥅":1689,"⥴":1690,"↣":1691,"↝":1692,"⤚":1693,"∶":1694,"ℚ":1695,"⤍":1696,"❳":1697,"}":1698,"]":1699,"⦌":1700,"⦎":1701,"⦐":1702,"ř":1703,"ŗ":1704,"⌉":1705,"}":1706,"р":1707,"⤷":1708,"⥩":1709,"”":1710,"”":1711,"↳":1712,"ℜ":1713,"ℛ":1714,"ℜ":1715,"ℝ":1716,"▭":1717,"®":1718,"⥽":1719,"⌋":1720,"𝔯":1721,"⇁":1722,"⇀":1723,"⥬":1724,"ρ":1725,"ϱ":1726,"→":1727,"↣":1728,"⇁":1729,"⇀":1730,"⇄":1731,"⇌":1732,"⇉":1733,"↝":1734,"⋌":1735,"˚":1736,"≓":1737,"⇄":1738,"⇌":1739,"‏":1740,"⎱":1741,"⎱":1742,"⫮":1743,"⟭":1744,"⇾":1745,"⟧":1746,"⦆":1747,"𝕣":1748,"⨮":1749,"⨵":1750,")":1751,"⦔":1752,"⨒":1753,"⇉":1754,"›":1755,"𝓇":1756,"↱":1757,"]":1758,"’":1759,"’":1760,"⋌":1761,"⋊":1762,"▹":1763,"⊵":1764,"▸":1765,"⧎":1766,"⥨":1767,"℞":1768,"ś":1769,"‚":1770,"≻":1771,"⪴":1772,"⪸":1773,"š":1774,"≽":1775,"⪰":1776,"ş":1777,"ŝ":1778,"⪶":1779,"⪺":1780,"⋩":1781,"⨓":1782,"≿":1783,"с":1784,"⋅":1785,"⊡":1786,"⩦":1787,"⇘":1788,"⤥":1789,"↘":1790,"↘":1791,"§":1792,";":1793,"⤩":1794,"∖":1795,"∖":1796,"✶":1797,"𝔰":1798,"⌢":1799,"♯":1800,"щ":1801,"ш":1802,"∣":1803,"∥":1804,"­":1805,"σ":1806,"ς":1807,"ς":1808,"∼":1809,"⩪":1810,"≃":1811,"≃":1812,"⪞":1813,"⪠":1814,"⪝":1815,"⪟":1816,"≆":1817,"⨤":1818,"⥲":1819,"←":1820,"∖":1821,"⨳":1822,"⧤":1823,"∣":1824,"⌣":1825,"⪪":1826,"⪬":1827,"⪬︀":1828,"ь":1829,"/":1830,"⧄":1831,"⌿":1832,"𝕤":1833,"♠":1834,"♠":1835,"∥":1836,"⊓":1837,"⊓︀":1838,"⊔":1839,"⊔︀":1840,"⊏":1841,"⊑":1842,"⊏":1843,"⊑":1844,"⊐":1845,"⊒":1846,"⊐":1847,"⊒":1848,"□":1849,"□":1850,"▪":1851,"▪":1852,"→":1853,"𝓈":1854,"∖":1855,"⌣":1856,"⋆":1857,"☆":1858,"★":1859,"ϵ":1860,"ϕ":1861,"¯":1862,"⊂":1863,"⫅":1864,"⪽":1865,"⊆":1866,"⫃":1867,"⫁":1868,"⫋":1869,"⊊":1870,"⪿":1871,"⥹":1872,"⊂":1873,"⊆":1874,"⫅":1875,"⊊":1876,"⫋":1877,"⫇":1878,"⫕":1879,"⫓":1880,"≻":1881,"⪸":1882,"≽":1883,"⪰":1884,"⪺":1885,"⪶":1886,"⋩":1887,"≿":1888,"∑":1889,"♪":1890,"¹":1891,"²":1892,"³":1893,"⊃":1894,"⫆":1895,"⪾":1896,"⫘":1897,"⊇":1898,"⫄":1899,"⟉":1900,"⫗":1901,"⥻":1902,"⫂":1903,"⫌":1904,"⊋":1905,"⫀":1906,"⊃":1907,"⊇":1908,"⫆":1909,"⊋":1910,"⫌":1911,"⫈":1912,"⫔":1913,"⫖":1914,"⇙":1915,"⤦":1916,"↙":1917,"↙":1918,"⤪":1919,"ß":1920,"⌖":1921,"τ":1922,"⎴":1923,"ť":1924,"ţ":1925,"т":1926,"⃛":1927,"⌕":1928,"𝔱":1929,"∴":1930,"∴":1931,"θ":1932,"ϑ":1933,"ϑ":1934,"≈":1935,"∼":1936," ":1937,"≈":1938,"∼":1939,"þ":1940,"˜":1941,"×":1942,"⊠":1943,"⨱":1944,"⨰":1945,"∭":1946,"⤨":1947,"⊤":1948,"⌶":1949,"⫱":1950,"𝕥":1951,"⫚":1952,"⤩":1953,"‴":1954,"™":1955,"▵":1956,"▿":1957,"◃":1958,"⊴":1959,"≜":1960,"▹":1961,"⊵":1962,"◬":1963,"≜":1964,"⨺":1965,"⨹":1966,"⧍":1967,"⨻":1968,"⏢":1969,"𝓉":1970,"ц":1971,"ћ":1972,"ŧ":1973,"≬":1974,"↞":1975,"↠":1976,"⇑":1977,"⥣":1978,"ú":1979,"↑":1980,"ў":1981,"ŭ":1982,"û":1983,"у":1984,"⇅":1985,"ű":1986,"⥮":1987,"⥾":1988,"𝔲":1989,"ù":1990,"↿":1991,"↾":1992,"▀":1993,"⌜":1994,"⌜":1995,"⌏":1996,"◸":1997,"ū":1998,"¨":1999,"ų":2000,"𝕦":2001,"↑":2002,"↕":2003,"↿":2004,"↾":2005,"⊎":2006,"υ":2007,"ϒ":2008,"υ":2009,"⇈":2010,"⌝":2011,"⌝":2012,"⌎":2013,"ů":2014,"◹":2015,"𝓊":2016,"⋰":2017,"ũ":2018,"▵":2019,"▴":2020,"⇈":2021,"ü":2022,"⦧":2023,"⇕":2024,"⫨":2025,"⫩":2026,"⊨":2027,"⦜":2028,"ϵ":2029,"ϰ":2030,"∅":2031,"ϕ":2032,"ϖ":2033,"∝":2034,"↕":2035,"ϱ":2036,"ς":2037,"⊊︀":2038,"⫋︀":2039,"⊋︀":2040,"⫌︀":2041,"ϑ":2042,"⊲":2043,"⊳":2044,"в":2045,"⊢":2046,"∨":2047,"⊻":2048,"≚":2049,"⋮":2050,"|":2051,"|":2052,"𝔳":2053,"⊲":2054,"⊂⃒":2055,"⊃⃒":2056,"𝕧":2057,"∝":2058,"⊳":2059,"𝓋":2060,"⫋︀":2061,"⊊︀":2062,"⫌︀":2063,"⊋︀":2064,"⦚":2065,"ŵ":2066,"⩟":2067,"∧":2068,"≙":2069,"℘":2070,"𝔴":2071,"𝕨":2072,"℘":2073,"≀":2074,"≀":2075,"𝓌":2076,"⋂":2077,"◯":2078,"⋃":2079,"▽":2080,"𝔵":2081,"⟺":2082,"⟷":2083,"ξ":2084,"⟸":2085,"⟵":2086,"⟼":2087,"⋻":2088,"⨀":2089,"𝕩":2090,"⨁":2091,"⨂":2092,"⟹":2093,"⟶":2094,"𝓍":2095,"⨆":2096,"⨄":2097,"△":2098,"⋁":2099,"⋀":2100,"ý":2101,"я":2102,"ŷ":2103,"ы":2104,"¥":2105,"𝔶":2106,"ї":2107,"𝕪":2108,"𝓎":2109,"ю":2110,"ÿ":2111,"ź":2112,"ž":2113,"з":2114,"ż":2115,"ℨ":2116,"ζ":2117,"𝔷":2118,"ж":2119,"⇝":2120,"𝕫":2121,"𝓏":2122,"‍":2123,"‌":2124} +B.CN=new A.bV(B.a2Q,["\xc6","&","\xc1","\u0102","\xc2","\u0410","\ud835\udd04","\xc0","\u0391","\u0100","\u2a53","\u0104","\ud835\udd38","\u2061","\xc5","\ud835\udc9c","\u2254","\xc3","\xc4","\u2216","\u2ae7","\u2306","\u0411","\u2235","\u212c","\u0392","\ud835\udd05","\ud835\udd39","\u02d8","\u212c","\u224e","\u0427","\xa9","\u0106","\u22d2","\u2145","\u212d","\u010c","\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","\xc9","\u011a","\xca","\u042d","\u0116","\ud835\udd08","\xc8","\u2208","\u0112","\u25fb","\u25ab","\u0118","\ud835\udd3c","\u0395","\u2a75","\u2242","\u21cc","\u2130","\u2a73","\u0397","\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","\xce","\u0418","\u0130","\u2111","\xcc","\u2111","\u012a","\u2148","\u21d2","\u222c","\u222b","\u22c2","\u2063","\u2062","\u012e","\ud835\udd40","\u0399","\u2110","\u0128","\u0406","\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","\u039d","\u0152","\xd3","\xd4","\u041e","\u0150","\ud835\udd12","\xd2","\u014c","\u03a9","\u039f","\ud835\udd46","\u201c","\u2018","\u2a54","\ud835\udcaa","\xd8","\xd5","\u2a37","\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","\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","\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","\u219f","\u2949","\u040e","\u016c","\xdb","\u0423","\u0170","\ud835\udd18","\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","\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","\u0176","\u042b","\ud835\udd1c","\ud835\udd50","\ud835\udcb4","\u0178","\u0416","\u0179","\u017d","\u0417","\u017b","\u200b","\u0396","\u2128","\u2124","\ud835\udcb5","\xe1","\u0103","\u223e","\u223e\u0333","\u223f","\xe2","\xb4","\u0430","\xe6","\u2061","\ud835\udd1e","\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","\ud835\udcb6","*","\u2248","\u224d","\xe3","\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","\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","\u0109","\u2a4c","\u2a50","\u010b","\xb8","\u29b2","\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","\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","\u21b6","\u21b7","\u22ce","\u22cf","\u2232","\u2231","\u232d","\u21d3","\u2965","\u2020","\u2138","\u2193","\u2010","\u22a3","\u290f","\u02dd","\u010f","\u0434","\u2146","\u2021","\u21ca","\u2a77","\xb0","\u03b4","\u29b1","\u297f","\ud835\udd21","\u21c3","\u21c2","\u22c4","\u22c4","\u2666","\u2666","\xa8","\u03dd","\u22f2","\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","\u2a6e","\u011b","\u2256","\xea","\u2255","\u044d","\u0117","\u2147","\u2252","\ud835\udd22","\u2a9a","\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","\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","\u2153","\xbc","\u2155","\u2159","\u215b","\u2154","\u2156","\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","\u2063","\xee","\u0438","\u0435","\xa1","\u21d4","\ud835\udd26","\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","\ud835\udcbe","\u2208","\u22f9","\u22f5","\u22f4","\u22f3","\u2208","\u2062","\u0129","\u0456","\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","\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","\u2642","\u2720","\u2720","\u21a6","\u21a6","\u21a7","\u21a4","\u21a5","\u25ae","\u2a29","\u043c","\u2014","\u2221","\ud835\udd2a","\u2127","\xb5","\u2223","*","\u2af0","\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","\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","\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","\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","\u229b","\u229a","\xf4","\u043e","\u229d","\u0151","\u2a38","\u2299","\u29bc","\u0153","\u29bf","\ud835\udd2c","\u02db","\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","\xba","\u22b6","\u2a56","\u2a57","\u2a5b","\u2134","\xf8","\u2298","\xf5","\u2297","\u2a36","\xf6","\u233d","\u2225","\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","\u2a26","\u2a27","\xb1","\u2a15","\ud835\udd61","\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","\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","\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",";","\u2929","\u2216","\u2216","\u2736","\ud835\udd30","\u2322","\u266f","\u0449","\u0448","\u2223","\u2225","\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","\xb2","\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","\u2316","\u03c4","\u23b4","\u0165","\u0163","\u0442","\u20db","\u2315","\ud835\udd31","\u2234","\u2234","\u03b8","\u03d1","\u03d1","\u2248","\u223c","\u2009","\u2248","\u223c","\xfe","\u02dc","\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","\u2191","\u045e","\u016d","\xfb","\u0443","\u21c5","\u0171","\u296e","\u297e","\ud835\udd32","\xf9","\u21bf","\u21be","\u2580","\u231c","\u231c","\u230f","\u25f8","\u016b","\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","\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","\u044f","\u0177","\u044b","\xa5","\ud835\udd36","\u0457","\ud835\udd6a","\ud835\udcce","\u044e","\xff","\u017a","\u017e","\u0437","\u017c","\u2128","\u03b6","\ud835\udd37","\u0436","\u21dd","\ud835\udd6b","\ud835\udccf","\u200d","\u200c"],t.li) +B.a2A={Abort:0,Again:1,AltLeft:2,AltRight:3,ArrowDown:4,ArrowLeft:5,ArrowRight:6,ArrowUp:7,AudioVolumeDown:8,AudioVolumeMute:9,AudioVolumeUp:10,Backquote:11,Backslash:12,Backspace:13,BracketLeft:14,BracketRight:15,BrightnessDown:16,BrightnessUp:17,BrowserBack:18,BrowserFavorites:19,BrowserForward:20,BrowserHome:21,BrowserRefresh:22,BrowserSearch:23,BrowserStop:24,CapsLock:25,Comma:26,ContextMenu:27,ControlLeft:28,ControlRight:29,Convert:30,Copy:31,Cut:32,Delete:33,Digit0:34,Digit1:35,Digit2:36,Digit3:37,Digit4:38,Digit5:39,Digit6:40,Digit7:41,Digit8:42,Digit9:43,DisplayToggleIntExt:44,Eject:45,End:46,Enter:47,Equal:48,Esc:49,Escape:50,F1:51,F10:52,F11:53,F12:54,F13:55,F14:56,F15:57,F16:58,F17:59,F18:60,F19:61,F2:62,F20:63,F21:64,F22:65,F23:66,F24:67,F3:68,F4:69,F5:70,F6:71,F7:72,F8:73,F9:74,Find:75,Fn:76,FnLock:77,GameButton1:78,GameButton10:79,GameButton11:80,GameButton12:81,GameButton13:82,GameButton14:83,GameButton15:84,GameButton16:85,GameButton2:86,GameButton3:87,GameButton4:88,GameButton5:89,GameButton6:90,GameButton7:91,GameButton8:92,GameButton9:93,GameButtonA:94,GameButtonB:95,GameButtonC:96,GameButtonLeft1:97,GameButtonLeft2:98,GameButtonMode:99,GameButtonRight1:100,GameButtonRight2:101,GameButtonSelect:102,GameButtonStart:103,GameButtonThumbLeft:104,GameButtonThumbRight:105,GameButtonX:106,GameButtonY:107,GameButtonZ:108,Help:109,Home:110,Hyper:111,Insert:112,IntlBackslash:113,IntlRo:114,IntlYen:115,KanaMode:116,KeyA:117,KeyB:118,KeyC:119,KeyD:120,KeyE:121,KeyF:122,KeyG:123,KeyH:124,KeyI:125,KeyJ:126,KeyK:127,KeyL:128,KeyM:129,KeyN:130,KeyO:131,KeyP:132,KeyQ:133,KeyR:134,KeyS:135,KeyT:136,KeyU:137,KeyV:138,KeyW:139,KeyX:140,KeyY:141,KeyZ:142,KeyboardLayoutSelect:143,Lang1:144,Lang2:145,Lang3:146,Lang4:147,Lang5:148,LaunchApp1:149,LaunchApp2:150,LaunchAssistant:151,LaunchControlPanel:152,LaunchMail:153,LaunchScreenSaver:154,MailForward:155,MailReply:156,MailSend:157,MediaFastForward:158,MediaPause:159,MediaPlay:160,MediaPlayPause:161,MediaRecord:162,MediaRewind:163,MediaSelect:164,MediaStop:165,MediaTrackNext:166,MediaTrackPrevious:167,MetaLeft:168,MetaRight:169,MicrophoneMuteToggle:170,Minus:171,NonConvert:172,NumLock:173,Numpad0:174,Numpad1:175,Numpad2:176,Numpad3:177,Numpad4:178,Numpad5:179,Numpad6:180,Numpad7:181,Numpad8:182,Numpad9:183,NumpadAdd:184,NumpadBackspace:185,NumpadClear:186,NumpadClearEntry:187,NumpadComma:188,NumpadDecimal:189,NumpadDivide:190,NumpadEnter:191,NumpadEqual:192,NumpadMemoryAdd:193,NumpadMemoryClear:194,NumpadMemoryRecall:195,NumpadMemoryStore:196,NumpadMemorySubtract:197,NumpadMultiply:198,NumpadParenLeft:199,NumpadParenRight:200,NumpadSubtract:201,Open:202,PageDown:203,PageUp:204,Paste:205,Pause:206,Period:207,Power:208,PrintScreen:209,PrivacyScreenToggle:210,Props:211,Quote:212,Resume:213,ScrollLock:214,Select:215,SelectTask:216,Semicolon:217,ShiftLeft:218,ShiftRight:219,ShowAllWindows:220,Slash:221,Sleep:222,Space:223,Super:224,Suspend:225,Tab:226,Turbo:227,Undo:228,WakeUp:229,ZoomToggle:230} +B.a1H=new A.bV(B.a2A,[458907,458873,458978,458982,458833,458832,458831,458834,458881,458879,458880,458805,458801,458794,458799,458800,786544,786543,786980,786986,786981,786979,786983,786977,786982,458809,458806,458853,458976,458980,458890,458876,458875,458828,458791,458782,458783,458784,458785,458786,458787,458788,458789,458790,65717,786616,458829,458792,458798,458793,458793,458810,458819,458820,458821,458856,458857,458858,458859,458860,458861,458862,458811,458863,458864,458865,458866,458867,458812,458813,458814,458815,458816,458817,458818,458878,18,19,392961,392970,392971,392972,392973,392974,392975,392976,392962,392963,392964,392965,392966,392967,392968,392969,392977,392978,392979,392980,392981,392982,392983,392984,392985,392986,392987,392988,392989,392990,392991,458869,458826,16,458825,458852,458887,458889,458888,458756,458757,458758,458759,458760,458761,458762,458763,458764,458765,458766,458767,458768,458769,458770,458771,458772,458773,458774,458775,458776,458777,458778,458779,458780,458781,787101,458896,458897,458898,458899,458900,786836,786834,786891,786847,786826,786865,787083,787081,787084,786611,786609,786608,786637,786610,786612,786819,786615,786613,786614,458979,458983,24,458797,458891,458835,458850,458841,458842,458843,458844,458845,458846,458847,458848,458849,458839,458939,458968,458969,458885,458851,458836,458840,458855,458963,458962,458961,458960,458964,458837,458934,458935,458838,458868,458830,458827,458877,458824,458807,458854,458822,23,458915,458804,21,458823,458871,786850,458803,458977,458981,787103,458808,65666,458796,17,20,458795,22,458874,65667,786994],t.eL) +B.D9={AVRInput:0,AVRPower:1,Accel:2,Accept:3,Again:4,AllCandidates:5,Alphanumeric:6,AltGraph:7,AppSwitch:8,ArrowDown:9,ArrowLeft:10,ArrowRight:11,ArrowUp:12,Attn:13,AudioBalanceLeft:14,AudioBalanceRight:15,AudioBassBoostDown:16,AudioBassBoostToggle:17,AudioBassBoostUp:18,AudioFaderFront:19,AudioFaderRear:20,AudioSurroundModeNext:21,AudioTrebleDown:22,AudioTrebleUp:23,AudioVolumeDown:24,AudioVolumeMute:25,AudioVolumeUp:26,Backspace:27,BrightnessDown:28,BrightnessUp:29,BrowserBack:30,BrowserFavorites:31,BrowserForward:32,BrowserHome:33,BrowserRefresh:34,BrowserSearch:35,BrowserStop:36,Call:37,Camera:38,CameraFocus:39,Cancel:40,CapsLock:41,ChannelDown:42,ChannelUp:43,Clear:44,Close:45,ClosedCaptionToggle:46,CodeInput:47,ColorF0Red:48,ColorF1Green:49,ColorF2Yellow:50,ColorF3Blue:51,ColorF4Grey:52,ColorF5Brown:53,Compose:54,ContextMenu:55,Convert:56,Copy:57,CrSel:58,Cut:59,DVR:60,Delete:61,Dimmer:62,DisplaySwap:63,Eisu:64,Eject:65,End:66,EndCall:67,Enter:68,EraseEof:69,Esc:70,Escape:71,ExSel:72,Execute:73,Exit:74,F1:75,F10:76,F11:77,F12:78,F13:79,F14:80,F15:81,F16:82,F17:83,F18:84,F19:85,F2:86,F20:87,F21:88,F22:89,F23:90,F24:91,F3:92,F4:93,F5:94,F6:95,F7:96,F8:97,F9:98,FavoriteClear0:99,FavoriteClear1:100,FavoriteClear2:101,FavoriteClear3:102,FavoriteRecall0:103,FavoriteRecall1:104,FavoriteRecall2:105,FavoriteRecall3:106,FavoriteStore0:107,FavoriteStore1:108,FavoriteStore2:109,FavoriteStore3:110,FinalMode:111,Find:112,Fn:113,FnLock:114,GoBack:115,GoHome:116,GroupFirst:117,GroupLast:118,GroupNext:119,GroupPrevious:120,Guide:121,GuideNextDay:122,GuidePreviousDay:123,HangulMode:124,HanjaMode:125,Hankaku:126,HeadsetHook:127,Help:128,Hibernate:129,Hiragana:130,HiraganaKatakana:131,Home:132,Hyper:133,Info:134,Insert:135,InstantReplay:136,JunjaMode:137,KanaMode:138,KanjiMode:139,Katakana:140,Key11:141,Key12:142,LastNumberRedial:143,LaunchApplication1:144,LaunchApplication2:145,LaunchAssistant:146,LaunchCalendar:147,LaunchContacts:148,LaunchControlPanel:149,LaunchMail:150,LaunchMediaPlayer:151,LaunchMusicPlayer:152,LaunchPhone:153,LaunchScreenSaver:154,LaunchSpreadsheet:155,LaunchWebBrowser:156,LaunchWebCam:157,LaunchWordProcessor:158,Link:159,ListProgram:160,LiveContent:161,Lock:162,LogOff:163,MailForward:164,MailReply:165,MailSend:166,MannerMode:167,MediaApps:168,MediaAudioTrack:169,MediaClose:170,MediaFastForward:171,MediaLast:172,MediaPause:173,MediaPlay:174,MediaPlayPause:175,MediaRecord:176,MediaRewind:177,MediaSkip:178,MediaSkipBackward:179,MediaSkipForward:180,MediaStepBackward:181,MediaStepForward:182,MediaStop:183,MediaTopMenu:184,MediaTrackNext:185,MediaTrackPrevious:186,MicrophoneToggle:187,MicrophoneVolumeDown:188,MicrophoneVolumeMute:189,MicrophoneVolumeUp:190,ModeChange:191,NavigateIn:192,NavigateNext:193,NavigateOut:194,NavigatePrevious:195,New:196,NextCandidate:197,NextFavoriteChannel:198,NextUserProfile:199,NonConvert:200,Notification:201,NumLock:202,OnDemand:203,Open:204,PageDown:205,PageUp:206,Pairing:207,Paste:208,Pause:209,PinPDown:210,PinPMove:211,PinPToggle:212,PinPUp:213,Play:214,PlaySpeedDown:215,PlaySpeedReset:216,PlaySpeedUp:217,Power:218,PowerOff:219,PreviousCandidate:220,Print:221,PrintScreen:222,Process:223,Props:224,RandomToggle:225,RcLowBattery:226,RecordSpeedNext:227,Redo:228,RfBypass:229,Romaji:230,STBInput:231,STBPower:232,Save:233,ScanChannelsToggle:234,ScreenModeNext:235,ScrollLock:236,Select:237,Settings:238,ShiftLevel5:239,SingleCandidate:240,Soft1:241,Soft2:242,Soft3:243,Soft4:244,Soft5:245,Soft6:246,Soft7:247,Soft8:248,SpeechCorrectionList:249,SpeechInputToggle:250,SpellCheck:251,SplitScreenToggle:252,Standby:253,Subtitle:254,Super:255,Symbol:256,SymbolLock:257,TV:258,TV3DMode:259,TVAntennaCable:260,TVAudioDescription:261,TVAudioDescriptionMixDown:262,TVAudioDescriptionMixUp:263,TVContentsMenu:264,TVDataService:265,TVInput:266,TVInputComponent1:267,TVInputComponent2:268,TVInputComposite1:269,TVInputComposite2:270,TVInputHDMI1:271,TVInputHDMI2:272,TVInputHDMI3:273,TVInputHDMI4:274,TVInputVGA1:275,TVMediaContext:276,TVNetwork:277,TVNumberEntry:278,TVPower:279,TVRadioService:280,TVSatellite:281,TVSatelliteBS:282,TVSatelliteCS:283,TVSatelliteToggle:284,TVTerrestrialAnalog:285,TVTerrestrialDigital:286,TVTimer:287,Tab:288,Teletext:289,Undo:290,Unidentified:291,VideoModeNext:292,VoiceDial:293,WakeUp:294,Wink:295,Zenkaku:296,ZenkakuHankaku:297,ZoomIn:298,ZoomOut:299,ZoomToggle:300} +B.a1I=new A.bV(B.D9,[4294970632,4294970633,4294967553,4294968577,4294968578,4294969089,4294969090,4294967555,4294971393,4294968065,4294968066,4294968067,4294968068,4294968579,4294970625,4294970626,4294970627,4294970882,4294970628,4294970629,4294970630,4294970631,4294970884,4294970885,4294969871,4294969873,4294969872,4294967304,4294968833,4294968834,4294970369,4294970370,4294970371,4294970372,4294970373,4294970374,4294970375,4294971394,4294968835,4294971395,4294968580,4294967556,4294970634,4294970635,4294968321,4294969857,4294970642,4294969091,4294970636,4294970637,4294970638,4294970639,4294970640,4294970641,4294969092,4294968581,4294969093,4294968322,4294968323,4294968324,4294970703,4294967423,4294970643,4294970644,4294969108,4294968836,4294968069,4294971396,4294967309,4294968325,4294967323,4294967323,4294968326,4294968582,4294970645,4294969345,4294969354,4294969355,4294969356,4294969357,4294969358,4294969359,4294969360,4294969361,4294969362,4294969363,4294969346,4294969364,4294969365,4294969366,4294969367,4294969368,4294969347,4294969348,4294969349,4294969350,4294969351,4294969352,4294969353,4294970646,4294970647,4294970648,4294970649,4294970650,4294970651,4294970652,4294970653,4294970654,4294970655,4294970656,4294970657,4294969094,4294968583,4294967558,4294967559,4294971397,4294971398,4294969095,4294969096,4294969097,4294969098,4294970658,4294970659,4294970660,4294969105,4294969106,4294969109,4294971399,4294968584,4294968841,4294969110,4294969111,4294968070,4294967560,4294970661,4294968327,4294970662,4294969107,4294969112,4294969113,4294969114,4294971905,4294971906,4294971400,4294970118,4294970113,4294970126,4294970114,4294970124,4294970127,4294970115,4294970116,4294970117,4294970125,4294970119,4294970120,4294970121,4294970122,4294970123,4294970663,4294970664,4294970665,4294970666,4294968837,4294969858,4294969859,4294969860,4294971402,4294970667,4294970704,4294970715,4294970668,4294970669,4294970670,4294970671,4294969861,4294970672,4294970673,4294970674,4294970705,4294970706,4294970707,4294970708,4294969863,4294970709,4294969864,4294969865,4294970886,4294970887,4294970889,4294970888,4294969099,4294970710,4294970711,4294970712,4294970713,4294969866,4294969100,4294970675,4294970676,4294969101,4294971401,4294967562,4294970677,4294969867,4294968071,4294968072,4294970714,4294968328,4294968585,4294970678,4294970679,4294970680,4294970681,4294968586,4294970682,4294970683,4294970684,4294968838,4294968839,4294969102,4294969868,4294968840,4294969103,4294968587,4294970685,4294970686,4294970687,4294968329,4294970688,4294969115,4294970693,4294970694,4294969869,4294970689,4294970690,4294967564,4294968588,4294970691,4294967569,4294969104,4294969601,4294969602,4294969603,4294969604,4294969605,4294969606,4294969607,4294969608,4294971137,4294971138,4294969870,4294970692,4294968842,4294970695,4294967566,4294967567,4294967568,4294970697,4294971649,4294971650,4294971651,4294971652,4294971653,4294971654,4294971655,4294970698,4294971656,4294971657,4294971658,4294971659,4294971660,4294971661,4294971662,4294971663,4294971664,4294971665,4294971666,4294971667,4294970699,4294971668,4294971669,4294971670,4294971671,4294971672,4294971673,4294971674,4294971675,4294967305,4294970696,4294968330,4294967297,4294970700,4294971403,4294968843,4294970701,4294969116,4294969117,4294968589,4294968590,4294970702],t.eL) +B.a1J=new A.bV(B.D9,[B.Ae,B.Af,B.xV,B.y9,B.ya,B.yy,B.yz,B.kp,B.BI,B.bJ,B.bo,B.bp,B.bv,B.yb,B.A7,B.A8,B.A9,B.Bz,B.Aa,B.Ab,B.Ac,B.Ad,B.BA,B.BB,B.zJ,B.zL,B.zK,B.cn,B.yn,B.yo,B.A0,B.A1,B.A2,B.A3,B.A4,B.A5,B.A6,B.BJ,B.yp,B.BK,B.yc,B.hS,B.Ag,B.Ah,B.ov,B.zw,B.Ao,B.yA,B.Ai,B.Aj,B.Ak,B.Al,B.Am,B.An,B.yB,B.yd,B.yC,B.y1,B.y2,B.y3,B.Bm,B.c5,B.Ap,B.Aq,B.yR,B.yq,B.ew,B.BL,B.hQ,B.y4,B.hR,B.hR,B.y5,B.ye,B.Ar,B.z0,B.z9,B.za,B.zb,B.zc,B.zd,B.ze,B.zf,B.zg,B.zh,B.zi,B.z1,B.zj,B.zk,B.zl,B.zm,B.zn,B.z2,B.z3,B.z4,B.z5,B.z6,B.z7,B.z8,B.As,B.At,B.Au,B.Av,B.Aw,B.Ax,B.Ay,B.Az,B.AA,B.AB,B.AC,B.AD,B.yD,B.yf,B.ou,B.xW,B.BM,B.BN,B.yE,B.yF,B.yG,B.yH,B.AE,B.AF,B.AG,B.yO,B.yP,B.yS,B.BO,B.yg,B.yv,B.yT,B.yU,B.ex,B.xX,B.AH,B.ow,B.AI,B.yQ,B.yV,B.yW,B.yX,B.Cj,B.Ck,B.BP,B.zR,B.zM,B.zZ,B.zN,B.zX,B.A_,B.zO,B.zP,B.zQ,B.zY,B.zS,B.zT,B.zU,B.zV,B.zW,B.AJ,B.AK,B.AL,B.AM,B.yr,B.zx,B.zy,B.zz,B.BR,B.AN,B.Bn,B.By,B.AO,B.AP,B.AQ,B.AR,B.zA,B.AS,B.AT,B.AU,B.Bo,B.Bp,B.Bq,B.Br,B.zB,B.Bs,B.zC,B.zD,B.BC,B.BD,B.BF,B.BE,B.yI,B.Bt,B.Bu,B.Bv,B.Bw,B.zE,B.yJ,B.AV,B.AW,B.yK,B.BQ,B.kq,B.AX,B.zF,B.hT,B.hU,B.Bx,B.y6,B.yh,B.AY,B.AZ,B.B_,B.B0,B.yi,B.B1,B.B2,B.B3,B.ys,B.yt,B.yL,B.zG,B.yu,B.yM,B.yj,B.B4,B.B5,B.B6,B.y7,B.B7,B.yY,B.Bc,B.Bd,B.zH,B.B8,B.B9,B.kr,B.yk,B.Ba,B.y0,B.yN,B.zo,B.zp,B.zq,B.zr,B.zs,B.zt,B.zu,B.zv,B.BG,B.BH,B.zI,B.Bb,B.yw,B.Be,B.xY,B.xZ,B.y_,B.Bg,B.BT,B.BU,B.BV,B.BW,B.BX,B.BY,B.BZ,B.Bh,B.C_,B.C0,B.C1,B.C2,B.C3,B.C4,B.C5,B.C6,B.C7,B.C8,B.C9,B.Ca,B.Bi,B.Cb,B.Cc,B.Cd,B.Ce,B.Cf,B.Cg,B.Ch,B.Ci,B.ko,B.Bf,B.y8,B.xU,B.Bj,B.BS,B.yx,B.Bk,B.yZ,B.z_,B.yl,B.ym,B.Bl],A.ac("bV")) +B.a2S={character:0,declare:1,else:2,elseif:3,endif:4,if:5,jump:6,local:7,set:8,stop:9,visit:10,wait:11} +B.aff=new A.bT(13,"commandCharacter") +B.lw=new A.bp(B.aff,null) +B.afg=new A.bT(14,"commandDeclare") +B.lx=new A.bp(B.afg,null) +B.afh=new A.bT(15,"commandElse") +B.fT=new A.bp(B.afh,null) +B.afi=new A.bT(16,"commandElseif") +B.fU=new A.bp(B.afi,null) +B.afj=new A.bT(17,"commandEndif") +B.fV=new A.bp(B.afj,null) +B.afk=new A.bT(18,"commandIf") +B.ix=new A.bp(B.afk,null) +B.afl=new A.bT(19,"commandJump") +B.ly=new A.bp(B.afl,null) +B.afm=new A.bT(20,"commandLocal") +B.lz=new A.bp(B.afm,null) +B.afn=new A.bT(21,"commandSet") +B.lA=new A.bp(B.afn,null) +B.afo=new A.bT(22,"commandStop") +B.lB=new A.bp(B.afo,null) +B.afp=new A.bT(23,"commandVisit") +B.lC=new A.bp(B.afp,null) +B.afq=new A.bT(24,"commandWait") +B.lD=new A.bp(B.afq,null) +B.a1K=new A.bV(B.a2S,[B.lw,B.lx,B.fT,B.fU,B.fV,B.ix,B.ly,B.lz,B.lA,B.lB,B.lC,B.lD],t.F6) +B.rL=new A.fW(1,"close") +B.rQ=new A.fW(2,"moveToAbs") +B.rR=new A.fW(3,"moveToRel") +B.GE=new A.fW(4,"lineToAbs") +B.GF=new A.fW(5,"lineToRel") +B.rS=new A.fW(6,"cubicToAbs") +B.rT=new A.fW(7,"cubicToRel") +B.rU=new A.fW(8,"quadToAbs") +B.rV=new A.fW(9,"quadToRel") +B.a9q=new A.fW(10,"arcToAbs") +B.a9r=new A.fW(11,"arcToRel") +B.a9s=new A.fW(12,"lineToHorizontalAbs") +B.a9t=new A.fW(13,"lineToHorizontalRel") +B.a9u=new A.fW(14,"lineToVerticalAbs") +B.a9v=new A.fW(15,"lineToVerticalRel") +B.rM=new A.fW(16,"smoothCubicToAbs") +B.rN=new A.fW(17,"smoothCubicToRel") +B.rO=new A.fW(18,"smoothQuadToAbs") +B.rP=new A.fW(19,"smoothQuadToRel") +B.a1L=new A.cc([90,B.rL,122,B.rL,77,B.rQ,109,B.rR,76,B.GE,108,B.GF,67,B.rS,99,B.rT,81,B.rU,113,B.rV,65,B.a9q,97,B.a9r,72,B.a9s,104,B.a9t,86,B.a9u,118,B.a9v,83,B.rM,115,B.rN,84,B.rO,116,B.rP],A.ac("cc")) +B.a2C={aliceblue:0,antiquewhite:1,aqua:2,aquamarine:3,azure:4,beige:5,bisque:6,black:7,blanchedalmond:8,blue:9,blueviolet:10,brown:11,burlywood:12,cadetblue:13,chartreuse:14,chocolate:15,coral:16,cornflowerblue:17,cornsilk:18,crimson:19,cyan:20,darkblue:21,darkcyan:22,darkgoldenrod:23,darkgray:24,darkgreen:25,darkgrey:26,darkkhaki:27,darkmagenta:28,darkolivegreen:29,darkorange:30,darkorchid:31,darkred:32,darksalmon:33,darkseagreen:34,darkslateblue:35,darkslategray:36,darkslategrey:37,darkturquoise:38,darkviolet:39,deeppink:40,deepskyblue:41,dimgray:42,dimgrey:43,dodgerblue:44,firebrick:45,floralwhite:46,forestgreen:47,fuchsia:48,gainsboro:49,ghostwhite:50,gold:51,goldenrod:52,gray:53,grey:54,green:55,greenyellow:56,honeydew:57,hotpink:58,indianred:59,indigo:60,ivory:61,khaki:62,lavender:63,lavenderblush:64,lawngreen:65,lemonchiffon:66,lightblue:67,lightcoral:68,lightcyan:69,lightgoldenrodyellow:70,lightgray:71,lightgreen:72,lightgrey:73,lightpink:74,lightsalmon:75,lightseagreen:76,lightskyblue:77,lightslategray:78,lightslategrey:79,lightsteelblue:80,lightyellow:81,lime:82,limegreen:83,linen:84,magenta:85,maroon:86,mediumaquamarine:87,mediumblue:88,mediumorchid:89,mediumpurple:90,mediumseagreen:91,mediumslateblue:92,mediumspringgreen:93,mediumturquoise:94,mediumvioletred:95,midnightblue:96,mintcream:97,mistyrose:98,moccasin:99,navajowhite:100,navy:101,oldlace:102,olive:103,olivedrab:104,orange:105,orangered:106,orchid:107,palegoldenrod:108,palegreen:109,paleturquoise:110,palevioletred:111,papayawhip:112,peachpuff:113,peru:114,pink:115,plum:116,powderblue:117,purple:118,red:119,rosybrown:120,royalblue:121,saddlebrown:122,salmon:123,sandybrown:124,seagreen:125,seashell:126,sienna:127,silver:128,skyblue:129,slateblue:130,slategray:131,slategrey:132,snow:133,springgreen:134,steelblue:135,tan:136,teal:137,thistle:138,tomato:139,transparent:140,turquoise:141,violet:142,wheat:143,white:144,whitesmoke:145,yellow:146,yellowgreen:147} +B.QM=new A.as(4293982463) +B.Ra=new A.as(4294634455) +B.v1=new A.as(4278255615) +B.On=new A.as(4286578644) +B.QO=new A.as(4293984255) +B.R0=new A.as(4294309340) +B.S6=new A.as(4294960324) +B.Sb=new A.as(4294962125) +B.Mi=new A.as(4278190335) +B.OE=new A.as(4287245282) +B.P3=new A.as(4289014314) +B.Qb=new A.as(4292786311) +B.NR=new A.as(4284456608) +B.Om=new A.as(4286578432) +B.PU=new A.as(4291979550) +B.Ru=new A.as(4294934352) +B.NX=new A.as(4284782061) +B.Sm=new A.as(4294965468) +B.Q5=new A.as(4292613180) +B.Me=new A.as(4278190219) +B.Mr=new A.as(4278225803) +B.Pv=new A.as(4290283019) +B.vn=new A.as(4289309097) +B.Mk=new A.as(4278215680) +B.PB=new A.as(4290623339) +B.OG=new A.as(4287299723) +B.NK=new A.as(4283788079) +B.Rz=new A.as(4294937600) +B.OU=new A.as(4288230092) +B.OF=new A.as(4287299584) +B.Qv=new A.as(4293498490) +B.OM=new A.as(4287609999) +B.Nw=new A.as(4282924427) +B.v8=new A.as(4281290575) +B.MA=new A.as(4278243025) +B.OR=new A.as(4287889619) +B.Rk=new A.as(4294907027) +B.My=new A.as(4278239231) +B.vf=new A.as(4285098345) +B.MU=new A.as(4280193279) +B.Pk=new A.as(4289864226) +B.Sq=new A.as(4294966e3) +B.MX=new A.as(4280453922) +B.vv=new A.as(4294902015) +B.Q6=new A.as(4292664540) +B.R6=new A.as(4294506751) +B.RZ=new A.as(4294956800) +B.Q2=new A.as(4292519200) +B.vi=new A.as(4286611584) +B.Mn=new A.as(4278222848) +B.Pd=new A.as(4289593135) +B.QN=new A.as(4293984240) +B.Rq=new A.as(4294928820) +B.PO=new A.as(4291648604) +B.NA=new A.as(4283105410) +B.Sy=new A.as(4294967280) +B.QK=new A.as(4293977740) +B.Qo=new A.as(4293322490) +B.Sg=new A.as(4294963445) +B.Oi=new A.as(4286381056) +B.Sp=new A.as(4294965965) +B.Pc=new A.as(4289583334) +B.QJ=new A.as(4293951616) +B.Qg=new A.as(4292935679) +B.Rc=new A.as(4294638290) +B.vq=new A.as(4292072403) +B.OO=new A.as(4287688336) +B.RL=new A.as(4294948545) +B.RE=new A.as(4294942842) +B.MV=new A.as(4280332970) +B.Oz=new A.as(4287090426) +B.vh=new A.as(4286023833) +B.Pi=new A.as(4289774814) +B.Sx=new A.as(4294967264) +B.MD=new A.as(4278255360) +B.N8=new A.as(4281519410) +B.Rb=new A.as(4294635750) +B.Oo=new A.as(4286578688) +B.O1=new A.as(4284927402) +B.Mh=new A.as(4278190285) +B.Px=new A.as(4290401747) +B.OP=new A.as(4287852763) +B.Nj=new A.as(4282168177) +B.Og=new A.as(4286277870) +B.MC=new A.as(4278254234) +B.Nx=new A.as(4282962380) +B.PK=new A.as(4291237253) +B.MO=new A.as(4279834992) +B.R3=new A.as(4294311930) +B.S7=new A.as(4294960353) +B.S5=new A.as(4294960309) +B.S1=new A.as(4294958765) +B.Md=new A.as(4278190208) +B.Ri=new A.as(4294833638) +B.Oq=new A.as(4286611456) +B.O8=new A.as(4285238819) +B.RF=new A.as(4294944e3) +B.Rm=new A.as(4294919424) +B.Q1=new A.as(4292505814) +B.QC=new A.as(4293847210) +B.OT=new A.as(4288215960) +B.Pg=new A.as(4289720046) +B.Q3=new A.as(4292571283) +B.Sf=new A.as(4294963157) +B.S0=new A.as(4294957753) +B.PP=new A.as(4291659071) +B.RO=new A.as(4294951115) +B.Q9=new A.as(4292714717) +B.Pj=new A.as(4289781990) +B.Op=new A.as(4286578816) +B.Rj=new A.as(4294901760) +B.Pz=new A.as(4290547599) +B.Np=new A.as(4282477025) +B.OH=new A.as(4287317267) +B.R9=new A.as(4294606962) +B.QW=new A.as(4294222944) +B.N5=new A.as(4281240407) +B.Sl=new A.as(4294964718) +B.P0=new A.as(4288696877) +B.PE=new A.as(4290822336) +B.Oy=new A.as(4287090411) +B.O7=new A.as(4285160141) +B.vg=new A.as(4285563024) +B.Sr=new A.as(4294966010) +B.ME=new A.as(4278255487) +B.Nv=new A.as(4282811060) +B.PV=new A.as(4291998860) +B.Mo=new A.as(4278222976) +B.Q0=new A.as(4292394968) +B.Rp=new A.as(4294927175) +B.M0=new A.as(16777215) +B.Nn=new A.as(4282441936) +B.QB=new A.as(4293821166) +B.QZ=new A.as(4294303411) +B.R1=new A.as(4294309365) +B.Su=new A.as(4294967040) +B.OV=new A.as(4288335154) +B.a1M=new A.bV(B.a2C,[B.QM,B.Ra,B.v1,B.On,B.QO,B.R0,B.S6,B.ei,B.Sb,B.Mi,B.OE,B.P3,B.Qb,B.NR,B.Om,B.PU,B.Ru,B.NX,B.Sm,B.Q5,B.v1,B.Me,B.Mr,B.Pv,B.vn,B.Mk,B.vn,B.PB,B.OG,B.NK,B.Rz,B.OU,B.OF,B.Qv,B.OM,B.Nw,B.v8,B.v8,B.MA,B.OR,B.Rk,B.My,B.vf,B.vf,B.MU,B.Pk,B.Sq,B.MX,B.vv,B.Q6,B.R6,B.RZ,B.Q2,B.vi,B.vi,B.Mn,B.Pd,B.QN,B.Rq,B.PO,B.NA,B.Sy,B.QK,B.Qo,B.Sg,B.Oi,B.Sp,B.Pc,B.QJ,B.Qg,B.Rc,B.vq,B.OO,B.vq,B.RL,B.RE,B.MV,B.Oz,B.vh,B.vh,B.Pi,B.Sx,B.MD,B.N8,B.Rb,B.vv,B.Oo,B.O1,B.Mh,B.Px,B.OP,B.Nj,B.Og,B.MC,B.Nx,B.PK,B.MO,B.R3,B.S7,B.S5,B.S1,B.Md,B.Ri,B.Oq,B.O8,B.RF,B.Rm,B.Q1,B.QC,B.OT,B.Pg,B.Q3,B.Sf,B.S0,B.PP,B.RO,B.Q9,B.Pj,B.Op,B.Rj,B.Pz,B.Np,B.OH,B.R9,B.QW,B.N5,B.Sl,B.P0,B.PE,B.Oy,B.O7,B.vg,B.vg,B.Sr,B.ME,B.Nv,B.PV,B.Mo,B.Q0,B.Rp,B.M0,B.Nn,B.QB,B.QZ,B.ng,B.R1,B.Su,B.OV],A.ac("bV")) +B.a3_={type:0} +B.a1N=new A.bV(B.a3_,["line"],t.li) +B.a2T={Abort:0,Again:1,AltLeft:2,AltRight:3,ArrowDown:4,ArrowLeft:5,ArrowRight:6,ArrowUp:7,AudioVolumeDown:8,AudioVolumeMute:9,AudioVolumeUp:10,Backquote:11,Backslash:12,Backspace:13,BracketLeft:14,BracketRight:15,BrightnessDown:16,BrightnessUp:17,BrowserBack:18,BrowserFavorites:19,BrowserForward:20,BrowserHome:21,BrowserRefresh:22,BrowserSearch:23,BrowserStop:24,CapsLock:25,Comma:26,ContextMenu:27,ControlLeft:28,ControlRight:29,Convert:30,Copy:31,Cut:32,Delete:33,Digit0:34,Digit1:35,Digit2:36,Digit3:37,Digit4:38,Digit5:39,Digit6:40,Digit7:41,Digit8:42,Digit9:43,DisplayToggleIntExt:44,Eject:45,End:46,Enter:47,Equal:48,Escape:49,Esc:50,F1:51,F10:52,F11:53,F12:54,F13:55,F14:56,F15:57,F16:58,F17:59,F18:60,F19:61,F2:62,F20:63,F21:64,F22:65,F23:66,F24:67,F3:68,F4:69,F5:70,F6:71,F7:72,F8:73,F9:74,Find:75,Fn:76,FnLock:77,GameButton1:78,GameButton10:79,GameButton11:80,GameButton12:81,GameButton13:82,GameButton14:83,GameButton15:84,GameButton16:85,GameButton2:86,GameButton3:87,GameButton4:88,GameButton5:89,GameButton6:90,GameButton7:91,GameButton8:92,GameButton9:93,GameButtonA:94,GameButtonB:95,GameButtonC:96,GameButtonLeft1:97,GameButtonLeft2:98,GameButtonMode:99,GameButtonRight1:100,GameButtonRight2:101,GameButtonSelect:102,GameButtonStart:103,GameButtonThumbLeft:104,GameButtonThumbRight:105,GameButtonX:106,GameButtonY:107,GameButtonZ:108,Help:109,Home:110,Hyper:111,Insert:112,IntlBackslash:113,IntlRo:114,IntlYen:115,KanaMode:116,KeyA:117,KeyB:118,KeyC:119,KeyD:120,KeyE:121,KeyF:122,KeyG:123,KeyH:124,KeyI:125,KeyJ:126,KeyK:127,KeyL:128,KeyM:129,KeyN:130,KeyO:131,KeyP:132,KeyQ:133,KeyR:134,KeyS:135,KeyT:136,KeyU:137,KeyV:138,KeyW:139,KeyX:140,KeyY:141,KeyZ:142,KeyboardLayoutSelect:143,Lang1:144,Lang2:145,Lang3:146,Lang4:147,Lang5:148,LaunchApp1:149,LaunchApp2:150,LaunchAssistant:151,LaunchControlPanel:152,LaunchMail:153,LaunchScreenSaver:154,MailForward:155,MailReply:156,MailSend:157,MediaFastForward:158,MediaPause:159,MediaPlay:160,MediaPlayPause:161,MediaRecord:162,MediaRewind:163,MediaSelect:164,MediaStop:165,MediaTrackNext:166,MediaTrackPrevious:167,MetaLeft:168,MetaRight:169,MicrophoneMuteToggle:170,Minus:171,NonConvert:172,NumLock:173,Numpad0:174,Numpad1:175,Numpad2:176,Numpad3:177,Numpad4:178,Numpad5:179,Numpad6:180,Numpad7:181,Numpad8:182,Numpad9:183,NumpadAdd:184,NumpadBackspace:185,NumpadClear:186,NumpadClearEntry:187,NumpadComma:188,NumpadDecimal:189,NumpadDivide:190,NumpadEnter:191,NumpadEqual:192,NumpadMemoryAdd:193,NumpadMemoryClear:194,NumpadMemoryRecall:195,NumpadMemoryStore:196,NumpadMemorySubtract:197,NumpadMultiply:198,NumpadParenLeft:199,NumpadParenRight:200,NumpadSubtract:201,Open:202,PageDown:203,PageUp:204,Paste:205,Pause:206,Period:207,Power:208,PrintScreen:209,PrivacyScreenToggle:210,Props:211,Quote:212,Resume:213,ScrollLock:214,Select:215,SelectTask:216,Semicolon:217,ShiftLeft:218,ShiftRight:219,ShowAllWindows:220,Slash:221,Sleep:222,Space:223,Super:224,Suspend:225,Tab:226,Turbo:227,Undo:228,WakeUp:229,ZoomToggle:230} +B.CP=new A.bV(B.a2T,[B.E9,B.DQ,B.eK,B.eM,B.qB,B.qA,B.qz,B.qC,B.DY,B.DW,B.DX,B.qb,B.q8,B.q1,B.q6,B.q7,B.Ep,B.Eo,B.EK,B.EO,B.EL,B.EJ,B.EN,B.EI,B.EM,B.dW,B.qc,B.qT,B.eI,B.fE,B.E2,B.DT,B.DS,B.qw,B.q_,B.pR,B.pS,B.pT,B.pU,B.pV,B.pW,B.pX,B.pY,B.pZ,B.En,B.Ey,B.qx,B.q0,B.q5,B.kF,B.kF,B.qf,B.qo,B.qp,B.qq,B.qU,B.qV,B.qW,B.qX,B.DF,B.DG,B.DH,B.qg,B.DI,B.DJ,B.DK,B.DL,B.DM,B.qh,B.qi,B.qj,B.qk,B.ql,B.qm,B.qn,B.DV,B.fD,B.p3,B.p4,B.Dv,B.Dw,B.Dx,B.Dy,B.Dz,B.DA,B.DB,B.p5,B.p6,B.p7,B.p8,B.p9,B.pa,B.pb,B.Du,B.pc,B.pd,B.pe,B.pf,B.pg,B.ph,B.pi,B.pj,B.pk,B.pl,B.pm,B.pn,B.po,B.pp,B.pq,B.DO,B.qu,B.p1,B.qt,B.DC,B.E_,B.E1,B.E0,B.pr,B.ps,B.pt,B.pu,B.pv,B.pw,B.px,B.py,B.pz,B.pA,B.pB,B.pC,B.pD,B.pE,B.pF,B.pG,B.pH,B.pI,B.pJ,B.pK,B.pL,B.pM,B.pN,B.pO,B.pP,B.pQ,B.ET,B.E4,B.E5,B.E6,B.E7,B.E8,B.ED,B.EC,B.EH,B.EE,B.EB,B.EG,B.ER,B.EQ,B.ES,B.Et,B.Er,B.Eq,B.Ez,B.Es,B.Eu,B.EA,B.Ex,B.Ev,B.Ew,B.eL,B.fG,B.Dt,B.q4,B.E3,B.i7,B.qR,B.qI,B.qJ,B.qK,B.qL,B.qM,B.qN,B.qO,B.qP,B.qQ,B.qG,B.Ed,B.Ej,B.Ek,B.DZ,B.qS,B.qD,B.qH,B.DE,B.Eh,B.Eg,B.Ef,B.Ee,B.Ei,B.qE,B.Eb,B.Ec,B.qF,B.DN,B.qy,B.qv,B.DU,B.qs,B.qd,B.DD,B.qr,B.Ds,B.Ea,B.qa,B.Dq,B.i6,B.DP,B.EF,B.q9,B.eJ,B.fF,B.EU,B.qe,B.El,B.q3,B.p2,B.Dp,B.q2,B.Dr,B.DR,B.Em,B.EP],A.ac("bV")) +B.a2P={matrix:0,translate:1,scale:2,rotate:3,skewX:4,skewY:5} +B.a1O=new A.bV(B.a2P,[A.bUu(),A.bUz(),A.bUw(),A.bUv(),A.bUx(),A.bUy()],A.ac("bV,nV)>")) +B.a1P=new A.a6A(0,"baseline") +B.a1Q=new A.a6A(1,"start") +B.a1R=new A.pF(B.a0,2) +B.a1S=new A.pF(B.a0,0.3) +B.CQ=new A.G4(0,"maskModeAdd") +B.a1T=new A.G4(1,"maskModeSubstract") +B.a1U=new A.G4(2,"maskModeIntersect") +B.CR=new A.G4(3,"maskModeNone") +B.Ry=new A.n(4294937216) +B.Rn=new A.n(4294922834) +B.Rl=new A.n(4294907716) +B.PX=new A.n(4292149248) +B.a0V=new A.cc([100,B.Ry,200,B.Rn,400,B.Rl,700,B.PX],t.m) +B.oK=new A.pG(B.a0V,4294922834) +B.RW=new A.n(4294955392) +B.RI=new A.n(4294945600) +B.RB=new A.n(4294938880) +B.Rr=new A.n(4294929664) +B.a0W=new A.cc([100,B.RW,200,B.RI,400,B.RB,700,B.Rr],t.m) +B.a1V=new A.pG(B.a0W,4294945600) +B.PN=new A.n(4291624848) +B.Pn=new A.n(4289920857) +B.Oa=new A.n(4285988611) +B.NZ=new A.n(4284800279) +B.a0X=new A.cc([100,B.PN,200,B.Pn,400,B.Oa,700,B.NZ],t.m) +B.CS=new A.pG(B.a0X,4289920857) +B.S8=new A.n(4294960511) +B.S_=new A.n(4294956864) +B.RQ=new A.n(4294951936) +B.RH=new A.n(4294945536) +B.a0Y=new A.cc([100,B.S8,200,B.S_,400,B.RQ,700,B.RH],t.m) +B.a1W=new A.pG(B.a0Y,4294956864) +B.P5=new A.n(4289200107) +B.MT=new A.n(4280150454) +B.Mw=new A.n(4278239141) +B.a0Z=new A.cc([100,B.P5,200,B.ve,400,B.MT,700,B.Mw],t.m) +B.CT=new A.pG(B.a0Z,4284809178) +B.Sw=new A.n(4294967181) +B.S9=new A.n(4294961664) +B.RY=new A.n(4294956544) +B.a1_=new A.cc([100,B.Sw,200,B.ej,400,B.S9,700,B.RY],t.m) +B.a1X=new A.pG(B.a1_,4294967040) +B.Pw=new A.n(4290377418) +B.O5=new A.n(4285132974) +B.MB=new A.n(4278249078) +B.Mz=new A.n(4278241363) +B.a10=new A.cc([100,B.Pw,200,B.O5,400,B.MB,700,B.Mz],t.m) +B.fp=new A.pG(B.a10,4285132974) +B.a1Y=new A.OM(null,null,null,null,null,null,null,null) +B.R2=new A.n(4294309365) +B.a1b=new A.cc([50,B.vu,100,B.R2,200,B.nd,300,B.vr,350,B.f9,400,B.na,500,B.vl,600,B.hl,700,B.jm,800,B.dD,850,B.n1,900,B.v6],t.m) +B.CU=new A.fR(B.a1b,4288585374) +B.a25=new A.Ag(0,"padded") +B.CY=new A.Ag(1,"shrinkWrap") +B.a29=new A.a6M(0,"none") +B.a2a=new A.a6M(2,"truncateAfterCompositionEnds") +B.akq=new A.aKv(2,"onlyIfGlobalNotSet") +B.a2b=new A.a6P(null) +B.a2c=new A.OS(null) +B.a2d=new A.Ga(null) +B.D0=new A.Al(0,"merge") +B.a2e=new A.Al(1,"add") +B.a2f=new A.Al(2,"substract") +B.a2g=new A.Al(3,"intersect") +B.a2h=new A.Al(4,"excludeIntersections") +B.a2i=new A.ng("popRoute",null) +B.oQ=new A.rL("plugins.flutter.io/shared_preferences",B.c1) +B.a2j=new A.rL("flutter/service_worker",B.c1) +B.D1=new A.rL("xyz.luan/audioplayers",B.c1) +B.D2=new A.rL("plugins.flutter.io/url_launcher",B.c1) +B.i5=new A.a7d(0,"latestPointer") +B.oV=new A.a7d(1,"averageBoundaryPointers") +B.D4=new A.At(0,"clipRect") +B.D5=new A.At(1,"clipRRect") +B.D6=new A.At(2,"clipPath") +B.D7=new A.At(3,"transform") +B.D8=new A.At(4,"opacity") +B.a2k=new A.Pg(null,null,null,null,null,null,null,null,null,null,null) +B.a2l=new A.Ph(null,null,null,null,null,null,null,null,null,null) +B.fx=new A.a7s(0,"traditional") +B.kA=new A.a7s(1,"directional") +B.a2m=new A.Ax(!0) +B.a2n=new A.Pi(null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a2o=new A.AC(0) +B.a33=new A.Pr(0,"cactusSmall") +B.a34=new A.Pr(1,"cactusLarge") +B.Da=new A.hS(B.h,B.h) +B.a35=new A.i(0,10) +B.a36=new A.i(0,100) +B.a3a=new A.i(0,20) +B.a3c=new A.i(0,26) +B.a3d=new A.i(0,30) +B.a3f=new A.i(10,0) +B.akr=new A.i(10,10) +B.a3g=new A.i(11,-4) +B.a3h=new A.i(1,3) +B.a3j=new A.i(22,0) +B.a3l=new A.i(3,0) +B.a3m=new A.i(3,-3) +B.a3n=new A.i(1/0,1/0) +B.a3p=new A.i(6,6) +B.Df=new A.i(0,-0.005) +B.Dg=new A.i(9,9) +B.Dh=new A.i(7.2,12.6) +B.a3r=new A.i(13.5,9) +B.a3t=new A.i(14.4,9) +B.a3v=new A.i(5,10.5) +B.a3x=new A.i(17976931348623157e292,0) +B.a3z=new A.i(0,-0.25) +B.a3B=new A.i(0.5,2) +B.a3D=new A.i(15.299999999999999,4.5) +B.a3E=new A.i(2.6999999999999997,8.1) +B.a3F=new A.i(4.5,9) +B.a3K=new A.i(-3,0) +B.a3L=new A.i(-3,3) +B.a3M=new A.i(-3,-3) +B.a3N=new A.i(3.6,9) +B.a3P=new A.i(-0.3333333333333333,0) +B.a3Q=new A.i(1/0,0) +B.bx=new A.rS(0,"iOs") +B.kC=new A.rS(1,"android") +B.oZ=new A.rS(2,"linux") +B.Dj=new A.rS(3,"windows") +B.cZ=new A.rS(4,"macOs") +B.a3R=new A.rS(5,"unknown") +B.j9=new A.aI7() +B.Dk=new A.mm("flutter/textinput",B.j9) +B.kD=new A.mm("flutter/navigation",B.j9) +B.a3S=new A.mm("flutter/processtext",B.c1) +B.a3T=new A.mm("flutter/mousecursor",B.c1) +B.c6=new A.mm("flutter/platform",B.j9) +B.a3U=new A.mm("flutter/keyboard",B.c1) +B.p_=new A.mm("flutter/restoration",B.c1) +B.Dl=new A.mm("flutter/menu",B.c1) +B.a3V=new A.mm("flutter/spellcheck",B.c1) +B.a3W=new A.mm("flutter/backgesture",B.c1) +B.a3X=new A.mm("flutter/undomanager",B.j9) +B.a3Y=new A.AH(0,null) +B.a3Z=new A.AH(1,null) +B.eH=new A.a7V(1,"landscape") +B.a4_=new A.Py(null) +B.aks=new A.a7Z(0,"start") +B.a40=new A.a7Z(1,"end") +B.a41=new A.Gu(null) +B.a42=new A.vQ("stories_list",t.aN) +B.i=new A.a8m(0,"fill") +B.a43=new A.a8n(0,"fill") +B.u=new A.a8m(1,"stroke") +B.a44=new A.a8n(1,"stroke") +B.fB=new A.lu(B.q) +B.dU=new A.lu(B.uX) +B.Dm=new A.lu(B.jj) +B.kE=new A.lu(B.n8) +B.a45=new A.lu(B.nc) +B.p0=new A.lu(B.dd) +B.a46=new A.lu(B.e) +B.t=new A.lu(B.l) +B.a47=new A.a8o(1,"hsvWithHue") +B.a48=new A.a8o(11,"hueWheel") +B.Dn=new A.vT(1/0) +B.dV=new A.GC(0,"move") +B.c7=new A.GC(1,"line") +B.bW=new A.GC(2,"cubic") +B.cG=new A.a8z(0,"nonZero") +B.a4a=new A.a8z(1,"evenOdd") +B.cp=new A.AO(0,"created") +B.bj=new A.AO(1,"active") +B.fC=new A.AO(2,"pendingRetention") +B.a4b=new A.AO(3,"pendingUpdate") +B.Do=new A.AO(4,"released") +B.a4c=new A.GF(null,A.ac("GF")) +B.kG=new A.w0(0,"baseline") +B.kH=new A.w0(1,"aboveBaseline") +B.kI=new A.w0(2,"belowBaseline") +B.kJ=new A.w0(3,"top") +B.dX=new A.w0(4,"bottom") +B.kK=new A.w0(5,"middle") +B.a4Q=new A.GG(B.x,B.dX,null,null) +B.a4R=new A.aNO(1,"lowLatency") +B.i8=new A.w1(0,"stopped") +B.EW=new A.t1(0,"crashed") +B.kL=new A.w1(1,"playing") +B.kM=new A.t1(1,"jumping") +B.kN=new A.w1(2,"paused") +B.EX=new A.t1(2,"running") +B.a4S=new A.w1(3,"completed") +B.EY=new A.t1(3,"waiting") +B.qY=new A.w1(4,"disposed") +B.a4T=new A.a9_(0,"points") +B.EZ=new A.a9_(2,"polygon") +B.F_=new A.de(0,0) +B.F0=new A.t3(0,"cancel") +B.qZ=new A.t3(1,"add") +B.a4U=new A.t3(2,"remove") +B.eN=new A.t3(3,"hover") +B.a4V=new A.t3(4,"down") +B.kO=new A.t3(5,"move") +B.F1=new A.t3(6,"up") +B.ba=new A.hc(0,"touch") +B.cq=new A.hc(1,"mouse") +B.cr=new A.hc(2,"stylus") +B.dY=new A.hc(3,"invertedStylus") +B.bY=new A.hc(4,"trackpad") +B.c8=new A.hc(5,"unknown") +B.kP=new A.GJ(0,"none") +B.a4W=new A.GJ(1,"scroll") +B.a4X=new A.GJ(3,"scale") +B.a4Y=new A.GJ(4,"unknown") +B.a4Z=new A.Q4(null,null,null,null,null,null,null,null,null,null,null,null) +B.Vt=new A.a4b(null) +B.a5_=new A.ta(16,16,null,null,null,null,B.Vt,null) +B.r0=new A.B_(0,"platformDefault") +B.F3=new A.B_(1,"inAppWebView") +B.F4=new A.B_(2,"inAppBrowserView") +B.a50=new A.B_(3,"externalApplication") +B.F5=new A.B_(4,"externalNonBrowserApplication") +B.F6=new A.nk(0,"incrementable") +B.r1=new A.nk(1,"scrollable") +B.r2=new A.nk(2,"button") +B.F7=new A.nk(3,"textField") +B.r3=new A.nk(4,"checkable") +B.F8=new A.nk(5,"image") +B.kQ=new A.nk(6,"dialog") +B.r4=new A.nk(7,"platformView") +B.r5=new A.nk(8,"generic") +B.r6=new A.nk(9,"link") +B.a51=new A.Q9(null,null,null,null,null) +B.Fa=new A.a9x(B.a5,0.5,B.N,null,0,B.xq,null,null) +B.a58=new A.Qg(null,null,null,null,null,null) +B.Fb=new A.bl(1,1) +B.r8=new A.bl(5,5) +B.a59=new A.bl(1/0,1/0) +B.a5a=new A.bl(1.5,1.5) +B.a5b=new A.bl(-1/0,-1/0) +B.a5c=new A.bl(0.3,0.3) +B.a5d=new A.bI(0,!0) +B.a5e=new A.bI(16,16) +B.ih=new A.fi(32,"scrollDown") +B.ig=new A.fi(16,"scrollUp") +B.a5f=new A.bI(B.ih,B.ig) +B.ij=new A.fi(8,"scrollRight") +B.ii=new A.fi(4,"scrollLeft") +B.a5g=new A.bI(B.ij,B.ii) +B.Fd=new A.JK(1e5,10) +B.Fe=new A.JK(1e4,100) +B.Ff=new A.JK(20,5e4) +B.a5h=new A.bI(!1,null) +B.a5i=new A.bI(B.ig,B.ih) +B.tr=new A.fl('"',1,"DOUBLE_QUOTE") +B.a5j=new A.bI("",B.tr) +B.a5k=new A.bI(B.ii,B.ij) +B.Fg=new A.Wt(0,0,1) +B.a5l=new A.lw(0,0,0,0) +B.a5m=new A.A(0,0,2400,2400) +B.a5n=new A.A(0,100,100,200) +B.a5o=new A.A(14,11,16,13) +B.kY=new A.A(512,512,576,640) +B.a5p=new A.A(80,230,320,470) +B.a5q=new A.A(8,11,10,13) +B.a5r=new A.A(-1/0,-1/0,1/0,1/0) +B.a5s=new A.A(12.5,9,16.5,15) +B.a5t=new A.A(6.5,9,10.5,15) +B.a5u=new A.A(-120,-120,120,120) +B.Fh=new A.A(-1500,-1500,1500,1500) +B.a5v=new A.A(-50,-50,50,50) +B.eP=new A.A(-1e9,-1e9,1e9,1e9) +B.a5w=new A.lw(-1e9,-1e9,1e9,1e9) +B.i9=new A.Qs(0,"release") +B.ra=new A.Qs(1,"loop") +B.a5x=new A.Qs(2,"stop") +B.Fi=new A.H2(0,"start") +B.rb=new A.H2(1,"stable") +B.a5y=new A.H2(2,"changed") +B.a5z=new A.H2(3,"unstable") +B.e1=new A.H4(0,"identical") +B.a5A=new A.H4(1,"metadata") +B.a5B=new A.H4(2,"paint") +B.bZ=new A.H4(3,"layout") +B.kZ=new A.R4(0,"idle") +B.Fk=new A.R4(1,"running") +B.a5F=new A.Hg(null) +B.a5G=new A.Bn(0,"focusable") +B.a5H=new A.Bn(1,"tappable") +B.Fl=new A.Bn(2,"labelAndValue") +B.l_=new A.Bn(3,"liveRegion") +B.rc=new A.Bn(4,"routeName") +B.l0=new A.ez(B.aP,B.C) +B.Fm=new A.ez(B.j2,B.C) +B.Fn=new A.ez(B.hb,B.C) +B.kS=new A.bl(12,12) +B.J_=new A.dO(B.kS,B.kS,B.kS,B.kS) +B.Fo=new A.ez(B.J_,B.C) +B.J0=new A.dO(B.dZ,B.dZ,B.dZ,B.dZ) +B.Fp=new A.ez(B.J0,B.C) +B.kU=new A.bl(28,28) +B.J1=new A.dO(B.kU,B.kU,B.kU,B.kU) +B.Fq=new A.ez(B.J1,B.C) +B.rd=new A.aaN(0,"none") +B.a5I=new A.aaN(1,"neglect") +B.l1=new A.Hk(0,"pop") +B.ia=new A.Hk(1,"doNotPop") +B.Fr=new A.Hk(2,"bubble") +B.re=new A.my(null,null) +B.a5J=new A.aaX(null,null) +B.fI=new A.Bt(0,"idle") +B.a5K=new A.Bt(1,"transientCallbacks") +B.a5L=new A.Bt(2,"midFrameMicrotasks") +B.l2=new A.Bt(3,"persistentCallbacks") +B.Fs=new A.Bt(4,"postFrameCallbacks") +B.Ft=new A.aRp(0,"englishLike") +B.l3=new A.Rq(0,"idle") +B.rf=new A.Rq(1,"forward") +B.rg=new A.Rq(2,"reverse") +B.akt=new A.Bx(0,"explicit") +B.e2=new A.Bx(1,"keepVisibleAtEnd") +B.e3=new A.Bx(2,"keepVisibleAtStart") +B.a5R=new A.ab4(0,"manual") +B.a5S=new A.ab4(1,"onDrag") +B.Fx=new A.Hr(0,"left") +B.Fy=new A.Hr(1,"right") +B.a5T=new A.Hr(2,"top") +B.Fz=new A.Hr(3,"bottom") +B.a5U=new A.Rw(null,null,null,null,null,null,null,null,null,null,null) +B.a5V=new A.Rx(null,null,null,null,null,null,null,null,null,null,null,null) +B.a5W=new A.Ry(null,null,null,null,null,null,null,null,null,null) +B.a5X=new A.Rz(null,null) +B.a5Y=new A.ab7(null) +B.aX=new A.np(0,"tap") +B.FA=new A.np(1,"doubleTap") +B.by=new A.np(2,"longPress") +B.ic=new A.np(3,"forcePress") +B.aR=new A.np(5,"toolbar") +B.aF=new A.np(6,"drag") +B.l6=new A.np(7,"scribble") +B.a5Z=new A.RC(0,"startEdgeUpdate") +B.id=new A.RC(1,"endEdgeUpdate") +B.ri=new A.Hu(0,"previousLine") +B.rj=new A.Hu(1,"nextLine") +B.l7=new A.Hu(2,"forward") +B.l8=new A.Hu(3,"backward") +B.fJ=new A.RD(2,"none") +B.a60=new A.wo(null,null,B.fJ,B.ol,!1) +B.FB=new A.wo(null,null,B.fJ,B.ol,!0) +B.bz=new A.wp(0,"next") +B.c_=new A.wp(1,"previous") +B.bA=new A.wp(2,"end") +B.rk=new A.wp(3,"pending") +B.ie=new A.wp(4,"none") +B.rl=new A.RD(0,"uncollapsed") +B.a61=new A.RD(1,"collapsed") +B.a62=new A.fi(1048576,"moveCursorBackwardByWord") +B.FC=new A.fi(128,"decrease") +B.a63=new A.fi(16384,"paste") +B.dm=new A.fi(1,"tap") +B.a64=new A.fi(2048,"setSelection") +B.a65=new A.fi(2097152,"setText") +B.a66=new A.fi(256,"showOnScreen") +B.a67=new A.fi(262144,"dismiss") +B.FD=new A.fi(2,"longPress") +B.rm=new A.fi(32768,"didGainAccessibilityFocus") +B.a68=new A.fi(4096,"copy") +B.a69=new A.fi(512,"moveCursorForwardByCharacter") +B.a6a=new A.fi(524288,"moveCursorForwardByWord") +B.FE=new A.fi(64,"increase") +B.rn=new A.fi(65536,"didLoseAccessibilityFocus") +B.a6b=new A.fi(8192,"cut") +B.a6c=new A.fi(1024,"moveCursorBackwardByCharacter") +B.FF=new A.eB(1024,"isObscured") +B.FG=new A.eB(1048576,"isReadOnly") +B.ro=new A.eB(128,"isEnabled") +B.a6d=new A.eB(131072,"isToggled") +B.a6e=new A.eB(134217728,"isExpanded") +B.FH=new A.eB(16384,"isImage") +B.a6f=new A.eB(16777216,"isKeyboardKey") +B.FI=new A.eB(16,"isTextField") +B.l9=new A.eB(1,"hasCheckedState") +B.FJ=new A.eB(2048,"scopesRoute") +B.FK=new A.eB(2097152,"isFocusable") +B.a6g=new A.eB(256,"isInMutuallyExclusiveGroup") +B.a6h=new A.eB(262144,"hasImplicitScrolling") +B.FL=new A.eB(2,"isChecked") +B.FM=new A.eB(32768,"isLiveRegion") +B.rp=new A.eB(32,"isFocused") +B.FN=new A.eB(33554432,"isCheckStateMixed") +B.FO=new A.eB(4096,"namesRoute") +B.rq=new A.eB(4194304,"isLink") +B.FP=new A.eB(4,"isSelected") +B.a6i=new A.eB(512,"isHeader") +B.FQ=new A.eB(524288,"isMultiline") +B.rr=new A.eB(64,"hasEnabledState") +B.a6j=new A.eB(65536,"hasToggledState") +B.a6k=new A.eB(67108864,"hasExpandedState") +B.la=new A.eB(8192,"isHidden") +B.FR=new A.eB(8388608,"isSlider") +B.FS=new A.eB(8,"isButton") +B.a6l=new A.oA("_InputDecoratorState.suffix") +B.a6m=new A.oA("_InputDecoratorState.prefix") +B.FT=new A.oA("RenderViewport.twoPane") +B.a6n=new A.oA("RenderViewport.excludeFromScrolling") +B.rs=new A.RH(0,"idle") +B.a6o=new A.RH(1,"updating") +B.a6p=new A.RH(2,"postUpdate") +B.a6q=new A.RI(0,"points") +B.a6r=new A.RI(1,"faceA") +B.a6s=new A.RI(2,"faceB") +B.a2I={a:0,e:1,i:2,o:3,u:4} +B.a6t=new A.i4(B.a2I,5,t.fF) +B.HJ=new A.mN(0,"ATTRIBUTE") +B.rt=new A.h8([B.HJ],t.Pa) +B.a2X={javascript:0} +B.a6u=new A.i4(B.a2X,1,t.fF) +B.ru=new A.h8([B.cZ,B.oZ,B.Dj],A.ac("h8")) +B.a2K={click:0,keyup:1,keydown:2,mouseup:3,mousedown:4,pointerdown:5,pointerup:6} +B.a6v=new A.i4(B.a2K,7,t.fF) +B.a2B={click:0,touchstart:1,touchend:2,pointerdown:3,pointermove:4,pointerup:5} +B.a6w=new A.i4(B.a2B,6,t.fF) +B.m_=new A.mN(1,"CDATA") +B.m2=new A.mN(2,"COMMENT") +B.ts=new A.mN(3,"DECLARATION") +B.tt=new A.mN(4,"DOCUMENT_TYPE") +B.iO=new A.mN(7,"ELEMENT") +B.m0=new A.mN(10,"PROCESSING") +B.m1=new A.mN(11,"TEXT") +B.a6x=new A.h8([B.m_,B.m2,B.ts,B.tt,B.iO,B.m0,B.m1],t.Pa) +B.FU=new A.h8([B.ba,B.cr,B.dY,B.bY,B.c8],t.Lu) +B.a6y=new A.h8([32,8203],t.Ih) +B.a2D={serif:0,"sans-serif":1,monospace:2,cursive:3,fantasy:4,"system-ui":5,math:6,emoji:7,fangsong:8} +B.a6z=new A.i4(B.a2D,9,t.fF) +B.a6A=new A.h8([B.ar,B.a6,B.dn],A.ac("h8")) +B.V=new A.dM(0,"hovered") +B.a6B=new A.h8([B.V],t.El) +B.a2R={"canvaskit.js":0} +B.a6C=new A.i4(B.a2R,1,t.fF) +B.ae=new A.dM(2,"pressed") +B.a6D=new A.h8([B.ae],t.El) +B.W=new A.dM(1,"focused") +B.a6E=new A.h8([B.W],t.El) +B.a6G=new A.i4(B.bw,0,A.ac("i4")) +B.a6F=new A.i4(B.bw,0,A.ac("i4")) +B.a6H=new A.h8([10,11,12,13,133,8232,8233],t.Ih) +B.a30={_:0,"-":1} +B.a6I=new A.i4(B.a30,2,t.fF) +B.a2J={"writing-mode":0,"glyph-orientation-vertical":1,"glyph-orientation-horizontal":2,direction:3,"text-anchor":4,"font-family":5,"font-style":6,"font-variant":7,"font-weight":8,"font-stretch":9,"font-size":10,"font-size-adjust":11,font:12,kerning:13,"letter-spacing":14,"word-spacing":15,fill:16,"fill-rule":17,"fill-opacity":18,stroke:19,"stroke-width":20,"stroke-linecap":21,"stroke-linejoin":22,"stroke-miterlimit":23,"stroke-dasharray":24,"stroke-dashoffset":25,"stroke-opacity":26,visibility:27,"marker-start":28,marker:29,"color-interpolation":30,"color-interpolation-filters":31,"color-rendering":32,"shape-rendering":33,"text-rendering":34,"image-rendering":35,color:36,"color-profile":37,"clip-rule":38,"pointer-events":39,cursor:40} +B.a6J=new A.i4(B.a2J,41,t.fF) +B.a6K=new A.h8([B.dY,B.cr,B.ba,B.c8,B.bY],t.Lu) +B.FV=new A.h8([B.m_,B.m2,B.iO,B.m0,B.m1],t.Pa) +B.a2H={mailto:0,tel:1,sms:2} +B.FW=new A.i4(B.a2H,3,t.fF) +B.a2Y={"\n":0," ":1,"*":2,_:3,"~":4,"(":5,">":6} +B.a6L=new A.i4(B.a2Y,7,t.fF) +B.fK=new A.abt(0,"simultaneously") +B.rv=new A.abt(1,"individually") +B.ik=new A.HC(0,"circle") +B.rw=new A.HC(1,"edge") +B.il=new A.HC(2,"polygon") +B.rx=new A.HC(3,"chain") +B.a6Y=new A.aSJ(0,"onlyForDiscrete") +B.FX=new A.abz(0,"top") +B.FY=new A.abz(2,"right") +B.bS=new A.Oy(1,"locked") +B.a6Z=new A.b9(B.ez,!1,!0,!1,!1,B.bS) +B.a7_=new A.b9(B.ez,!0,!0,!1,!1,B.bS) +B.rz=new A.b9(B.ew,!1,!1,!1,!1,B.D) +B.ry=new A.b9(B.ex,!1,!1,!1,!1,B.D) +B.G1=new A.b9(B.bJ,!1,!0,!1,!1,B.D) +B.FZ=new A.b9(B.bo,!1,!0,!1,!1,B.D) +B.G_=new A.b9(B.bp,!1,!0,!1,!1,B.D) +B.G0=new A.b9(B.bv,!1,!0,!1,!1,B.D) +B.rF=new A.b9(B.ew,!1,!0,!1,!1,B.D) +B.rE=new A.b9(B.ex,!1,!0,!1,!1,B.D) +B.Ga=new A.b9(B.hT,!1,!0,!1,!1,B.D) +B.a76=new A.b9(B.bJ,!1,!0,!1,!0,B.D) +B.a73=new A.b9(B.bo,!1,!0,!1,!0,B.D) +B.a74=new A.b9(B.bp,!1,!0,!1,!0,B.D) +B.a75=new A.b9(B.bv,!1,!0,!1,!0,B.D) +B.a78=new A.b9(B.ew,!0,!1,!1,!1,B.D) +B.a77=new A.b9(B.ex,!0,!1,!1,!1,B.D) +B.a72=new A.b9(B.bJ,!0,!0,!1,!1,B.D) +B.a71=new A.b9(B.bv,!0,!0,!1,!1,B.D) +B.a7a=new A.b9(B.ew,!0,!0,!1,!1,B.D) +B.a79=new A.b9(B.ex,!0,!0,!1,!1,B.D) +B.G5=new A.b9(B.bJ,!1,!0,!0,!1,B.D) +B.G2=new A.b9(B.bo,!1,!0,!0,!1,B.D) +B.G3=new A.b9(B.bp,!1,!0,!0,!1,B.D) +B.G4=new A.b9(B.bv,!1,!0,!0,!1,B.D) +B.a7b=new A.b9(B.eD,!1,!0,!1,!1,B.bS) +B.a7d=new A.b9(B.i0,!1,!0,!1,!1,B.bS) +B.a7c=new A.b9(B.eD,!0,!0,!1,!1,B.bS) +B.Gi=new A.b9(B.bq,!1,!1,!1,!0,B.D) +B.Gk=new A.b9(B.oE,!1,!1,!1,!0,B.D) +B.Gl=new A.b9(B.os,!1,!1,!1,!0,B.D) +B.Gj=new A.b9(B.ot,!1,!1,!1,!0,B.D) +B.a7e=new A.b9(B.hP,!1,!1,!1,!0,B.D) +B.a7f=new A.b9(B.hP,!1,!0,!1,!0,B.D) +B.rG=new A.b9(B.bq,!0,!1,!1,!1,B.D) +B.a7i=new A.b9(B.CD,!0,!1,!1,!1,B.D) +B.Gg=new A.b9(B.oE,!0,!1,!1,!1,B.D) +B.a7g=new A.b9(B.op,!0,!1,!1,!1,B.D) +B.a7h=new A.b9(B.xP,!0,!1,!1,!1,B.D) +B.a7j=new A.b9(B.xQ,!0,!1,!1,!1,B.D) +B.a7k=new A.b9(B.oq,!0,!1,!1,!1,B.D) +B.a7n=new A.b9(B.or,!0,!1,!1,!1,B.D) +B.Gh=new A.b9(B.os,!0,!1,!1,!1,B.D) +B.Gf=new A.b9(B.ot,!0,!1,!1,!1,B.D) +B.a7l=new A.b9(B.hP,!0,!1,!1,!1,B.D) +B.a7m=new A.b9(B.hP,!0,!0,!1,!1,B.D) +B.bT=new A.Oy(2,"unlocked") +B.a7w=new A.b9(B.hY,!1,!1,!1,!1,B.bT) +B.a7q=new A.b9(B.eA,!1,!1,!1,!1,B.bT) +B.a7u=new A.b9(B.hZ,!1,!1,!1,!1,B.bT) +B.a7p=new A.b9(B.eB,!1,!1,!1,!1,B.bT) +B.a7o=new A.b9(B.eC,!1,!1,!1,!1,B.bT) +B.a7v=new A.b9(B.i_,!1,!1,!1,!1,B.bT) +B.a7t=new A.b9(B.eA,!0,!1,!1,!1,B.bT) +B.a7s=new A.b9(B.eB,!0,!1,!1,!1,B.bT) +B.a7r=new A.b9(B.eC,!0,!1,!1,!1,B.bT) +B.a7x=new A.b9(B.ez,!1,!1,!1,!1,B.bT) +B.a7y=new A.b9(B.ez,!0,!1,!1,!1,B.bT) +B.a7B=new A.b9(B.eD,!1,!1,!1,!1,B.bT) +B.a7D=new A.b9(B.i0,!1,!1,!1,!1,B.bT) +B.a7C=new A.b9(B.eD,!0,!1,!1,!1,B.bT) +B.Gm=new A.b9(B.hU,!1,!0,!1,!1,B.D) +B.a7N=new A.b9(B.hY,!1,!0,!1,!1,B.bS) +B.a7H=new A.b9(B.eA,!1,!0,!1,!1,B.bS) +B.a7L=new A.b9(B.hZ,!1,!0,!1,!1,B.bS) +B.a7G=new A.b9(B.eB,!1,!0,!1,!1,B.bS) +B.a7F=new A.b9(B.eC,!1,!0,!1,!1,B.bS) +B.a7M=new A.b9(B.i_,!1,!0,!1,!1,B.bS) +B.a7K=new A.b9(B.eA,!0,!0,!1,!1,B.bS) +B.a7J=new A.b9(B.eB,!0,!0,!1,!1,B.bS) +B.a7I=new A.b9(B.eC,!0,!0,!1,!1,B.bS) +B.lf=new A.HK(0,"phone") +B.a7O=new A.HK(1,"tablet") +B.a7P=new A.HK(2,"laptop") +B.a7Q=new A.HK(3,"desktop") +B.a7S=new A.Q(1e5,1e5) +B.a7U=new A.Q(1024,1350) +B.a7V=new A.Q(1024,1366) +B.Gn=new A.Q(10,10) +B.a7W=new A.Q(1280,1880) +B.a7X=new A.Q(150,50) +B.a7Y=new A.Q(1673,2409) +B.a7Z=new A.Q(1741,2412) +B.a8_=new A.Q(1811,2509) +B.Go=new A.Q(18,18) +B.a80=new A.Q(1,1) +B.a81=new A.Q(22,22) +B.a82=new A.Q(80,47.5) +B.a83=new A.Q(360,640) +B.Gp=new A.Q(360,800) +B.a84=new A.Q(375,667) +B.Gq=new A.Q(375,812) +B.a85=new A.Q(390,844) +B.Gr=new A.Q(40,40) +B.a86=new A.Q(411,960) +B.a87=new A.Q(412,732) +B.a88=new A.Q(412,883) +B.a89=new A.Q(412,892) +B.a8a=new A.Q(412,916) +B.Gs=new A.Q(428,926) +B.a8b=new A.Q(44,44) +B.a8c=new A.Q(480,853) +B.a8d=new A.Q(48,36) +B.Gt=new A.Q(48,48) +B.a8f=new A.Q(77.37,37.9) +B.a8g=new A.Q(6,10) +B.a8h=new A.Q(800,1280) +B.a8i=new A.Q(810,1080) +B.a8j=new A.Q(820,1180) +B.a8k=new A.Q(834,1194) +B.a8l=new A.Q(852,1865) +B.Gu=new A.Q(871,1768) +B.Gv=new A.Q(873,1770) +B.Gw=new A.Q(873,1771) +B.a8m=new A.Q(891,1790) +B.a8n=new A.Q(856.54,1899) +B.a8o=new A.Q(760,1757.63) +B.a8p=new A.Q(834,1788.93) +B.a8q=new A.Q(868,1829.84) +B.a8r=new A.Q(801,1713.86) +B.bb=new A.iR(0,0,null,null) +B.Gx=new A.iR(10,null,null,null) +B.a8s=new A.iR(12,null,null,null) +B.Gy=new A.iR(15,null,null,null) +B.a8t=new A.iR(20,null,null,null) +B.eQ=new A.iR(null,10,null,null) +B.a8u=new A.iR(null,15,null,null) +B.Gz=new A.iR(null,20,null,null) +B.a8v=new A.iR(null,32,null,null) +B.a8w=new A.iR(null,5,null,null) +B.fP=new A.iR(null,null,null,null) +B.a8x=new A.iR(1/0,1/0,null,null) +B.a8y=new A.abN(0,"tapAndSlide") +B.a8z=new A.abN(2,"slideOnly") +B.a8A=new A.HL(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.GA=new A.abO(0,0,0,0,0,0,!1,!1,null,0) +B.rH=new A.aTd(1,"enabled") +B.rI=new A.aTe(1,"enabled") +B.a8B=new A.abT(0,"fixed") +B.a8C=new A.abT(1,"floating") +B.a8D=new A.q4(1,"dismiss") +B.a8E=new A.q4(2,"swipe") +B.a8F=new A.q4(3,"hide") +B.aku=new A.q4(4,"remove") +B.GB=new A.q4(5,"timeout") +B.a8G=new A.HP(null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.af1=new A.f7("Link copied to your clipboard",null,null,null,null,null,null,null,null,null) +B.U8=new A.bv(4e6) +B.a8H=new A.BQ(B.af1,null,null,null,null,null,null,null,null,null,null,null,null,B.U8,null,null,null,B.a4,null) +B.GC=new A.abU(0,"permissive") +B.akv=new A.abU(1,"normal") +B.a8I=new A.ac0(null) +B.im=new A.S7(null,null,null,null,!1) +B.a8J=new A.Sb(0,"criticallyDamped") +B.a8K=new A.Sb(1,"underDamped") +B.a8L=new A.Sb(2,"overDamped") +B.bB=new A.acm(0,"loose") +B.a8M=new A.acm(2,"passthrough") +B.a8N=new A.oE("",-1,"","","",-1,-1,"","asynchronous suspension") +B.a8O=new A.oE("...",-1,"","","",-1,-1,"","...") +B.cs=new A.hz("") +B.a8Q=new A.HT("") +B.a8R=new A.Sn(0,"butt") +B.a8S=new A.Sn(1,"round") +B.a8T=new A.Sn(2,"square") +B.a8V=new A.So(0,"miter") +B.a8W=new A.So(1,"round") +B.a8X=new A.So(2,"bevel") +B.a8Y=new A.HX(null,null,null,null,null,null,null,null,null,null) +B.eT=new A.I1(B.oI,null,null,B.LS,null,null,B.br,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a8Z=new A.eC(0) +B.a99=new A.eC(0) +B.a97=new A.eC(0) +B.a95=new A.eC(0) +B.a96=new A.eC(0) +B.a94=new A.eC(0) +B.a98=new A.eC(0) +B.a93=new A.eC(0) +B.a90=new A.eC(0) +B.a92=new A.eC(0) +B.a9_=new A.eC(0) +B.a91=new A.eC(0) +B.a9a=new A.eC(1) +B.a9b=new A.eC(10) +B.a9c=new A.eC(11) +B.a9d=new A.eC(12) +B.a9e=new A.eC(13) +B.a9f=new A.eC(14) +B.a9g=new A.eC(15) +B.a9h=new A.eC(16) +B.a9i=new A.eC(2) +B.a9j=new A.eC(3) +B.a9k=new A.eC(4) +B.a9l=new A.eC(5) +B.a9m=new A.eC(6) +B.a9n=new A.eC(7) +B.a9o=new A.eC(8) +B.a9p=new A.eC(9) +B.eU=new A.fW(0,"unknown") +B.a9y=new A.St(null,null,null,null,null,null,null,null,null) +B.a9z=new A.fX("_notificationCallStackDepth=") +B.a9A=new A.fX("_listeners=") +B.a9B=new A.fX("_reentrantlyRemovedListeners=") +B.GG=new A.fX("_clientToken") +B.a9C=new A.fX("_collisionDetection") +B.a9D=new A.fX("_count") +B.lh=new A.fX("_internalHash") +B.a9E=new A.fX("_listeners") +B.a9F=new A.fX("_notificationCallStackDepth") +B.a9G=new A.fX("_reentrantlyRemovedListeners") +B.a9H=new A.fX("_removeAt") +B.a9I=new A.fX("_symbolsByAddress") +B.GH=new A.fX("_throwNoParent") +B.a9J=new A.fX("call") +B.a9K=new A.fX("_count=") +B.cH=new A.nt("basic") +B.d_=new A.nt("click") +B.a9L=new A.nt("grab") +B.GI=new A.nt("move") +B.rW=new A.nt("text") +B.a9M=new A.acN(0,"click") +B.a9N=new A.acN(1,"alert") +B.bk=new A.C_(0,"unknown") +B.GJ=new A.C_(1,"failed") +B.a9O=new A.C_(2,"overlapped") +B.rX=new A.C_(3,"touching") +B.a9P=new A.C_(4,"separated") +B.a9Q=new A.I4(null) +B.a9R=new A.Sv(null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.akw=new A.acR(0,"top") +B.GK=new A.acR(1,"middle") +B.rY=new A.aV0("tap") +B.GL=new A.ad6(0,"checked") +B.a9S=new A.ad6(1,"unchecked") +B.GM=new A.ad8(0) +B.GN=new A.ad8(-1) +B.E=new A.I7(0,"alphabetic") +B.as=new A.I7(1,"ideographic") +B.a9T=new A.I8(200,B.w4,0.005,null,!1) +B.GO=new A.I8(200,B.fd,0,null,!1) +B.a9U=new A.SI(null) +B.rZ=new A.I9(3,"none") +B.GP=new A.SJ(B.rZ) +B.GQ=new A.I9(0,"words") +B.GR=new A.I9(1,"sentences") +B.GS=new A.I9(2,"characters") +B.lj=new A.aV8(3,"none") +B.GT=new A.C5(0,"solid") +B.a9W=new A.C5(1,"double") +B.a9X=new A.C5(2,"dotted") +B.a9Z=new A.C5(3,"dashed") +B.aa0=new A.C5(4,"wavy") +B.k=new A.tD(0) +B.GV=new A.C4(0) +B.lk=new A.tD(1) +B.aa2=new A.C4(1) +B.aa3=new A.tD(2) +B.aa4=new A.C4(2) +B.GW=new A.tD(4) +B.aa5=new A.C4(4) +B.t_=new A.Ic(0,"character") +B.aa6=new A.Ic(1,"word") +B.aa7=new A.Ic(2,"line") +B.aa8=new A.Ic(3,"document") +B.t0=new A.adj(0,"proportional") +B.GX=new A.SN(B.t0) +B.aa9=new A.kP(0,"none") +B.aaa=new A.kP(1,"unspecified") +B.aab=new A.kP(10,"route") +B.aac=new A.kP(11,"emergencyCall") +B.GY=new A.kP(12,"newline") +B.GZ=new A.kP(2,"done") +B.aad=new A.kP(3,"go") +B.aae=new A.kP(4,"search") +B.aaf=new A.kP(5,"send") +B.aag=new A.kP(6,"next") +B.aah=new A.kP(7,"previous") +B.aai=new A.kP(8,"continueAction") +B.aaj=new A.kP(9,"join") +B.H_=new A.C8(0,null,null) +B.aak=new A.C8(10,null,null) +B.ll=new A.C8(1,null,null) +B.H0=new A.C8(2,!1,!1) +B.U=new A.adj(1,"even") +B.akx=new A.adk(null,!0) +B.cJ=new A.SR(2,"ellipsis") +B.aal=new A.SR(3,"visible") +B.fR=new A.c0(0,B.v) +B.lm=new A.SV(0,"left") +B.ln=new A.SV(1,"right") +B.it=new A.SV(2,"collapsed") +B.aan=new A.SW(null,null,null) +B.aao=new A.SX(B.h,null) +B.H1=new A.kQ(0,0,B.v,!1,0,0) +B.aap=new A.lA("\n",null,null,B.m,null,null) +B.H2=new A.I(!0,B.l,null,null,null,null,2,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.H3=new A.I(!0,B.l,null,null,null,null,20,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.aaQ=new A.I(!0,B.bi,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.M2=new A.n(2013265919) +B.abx=new A.I(!0,B.M2,null,null,null,null,12,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.H4=new A.I(!1,null,null,null,null,null,14,B.A,null,-0.15,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.abG=new A.I(!1,null,null,null,null,null,15,B.A,null,-0.15,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.H5=new A.I(!0,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,B.lk,null,null,null,null,null,null,null,null) +B.acb=new A.I(!0,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,B.GW,null,null,null,null,null,null,null,null) +B.aco=new A.I(!0,null,null,null,null,null,null,B.A,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.acr=new A.I(!0,null,null,null,null,null,null,B.jW,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.lp=new A.I(!0,null,null,null,null,null,null,B.b3,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.acq=new A.I(!0,null,null,null,null,null,20,B.b3,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.acp=new A.I(!0,null,null,null,null,null,30,B.b3,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.acu=new A.I(!0,B.q,null,null,null,null,24,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.acA=new A.I(!0,null,null,null,null,null,null,null,B.jU,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.acH=new A.I(!0,null,null,null,null,null,10,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.H6=new A.I(!1,B.jx,null,"CupertinoSystemText",null,null,17,null,null,-0.41,null,null,null,null,null,null,null,B.k,null,null,null,null,null,null,null,null) +B.acT=new A.I(!0,B.vo,null,null,null,null,20,B.b3,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.Ma=new A.n(3506372608) +B.acU=new A.I(!0,B.Ma,null,"monospace",null,null,48,B.nQ,null,null,null,null,null,null,null,null,null,B.lk,B.ej,B.GU,null,"fallback style; consider putting your text in a Material",null,null,null,null) +B.ae0=new A.I(!0,B.a8,null,null,null,null,12,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.ae_=new A.I(!0,B.a8,null,null,null,null,24,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.aec=new A.I(!0,B.dl,null,null,null,null,8,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.aek=new A.I(!0,B.l,null,"Arial",null,null,24,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.ac9=new A.I(!0,B.am,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity displayLarge",null,null,null,null) +B.acI=new A.I(!0,B.am,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity displayMedium",null,null,null,null) +B.aca=new A.I(!0,B.am,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity displaySmall",null,null,null,null) +B.aep=new A.I(!0,B.am,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity headlineLarge",null,null,null,null) +B.add=new A.I(!0,B.am,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity headlineMedium",null,null,null,null) +B.ab_=new A.I(!0,B.an,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity headlineSmall",null,null,null,null) +B.aex=new A.I(!0,B.an,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity titleLarge",null,null,null,null) +B.aci=new A.I(!0,B.an,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity titleMedium",null,null,null,null) +B.acn=new A.I(!0,B.q,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity titleSmall",null,null,null,null) +B.adl=new A.I(!0,B.an,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity bodyLarge",null,null,null,null) +B.ad_=new A.I(!0,B.an,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity bodyMedium",null,null,null,null) +B.adZ=new A.I(!0,B.am,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity bodySmall",null,null,null,null) +B.aaq=new A.I(!0,B.an,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity labelLarge",null,null,null,null) +B.ads=new A.I(!0,B.q,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity labelMedium",null,null,null,null) +B.aaN=new A.I(!0,B.q,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedwoodCity labelSmall",null,null,null,null) +B.aey=new A.hB(B.ac9,B.acI,B.aca,B.aep,B.add,B.ab_,B.aex,B.aci,B.acn,B.adl,B.ad_,B.adZ,B.aaq,B.ads,B.aaN) +B.ad2=new A.I(!1,null,null,null,null,null,112,B.jV,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense displayLarge 2014",null,null,null,null) +B.abr=new A.I(!1,null,null,null,null,null,56,B.A,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense displayMedium 2014",null,null,null,null) +B.adT=new A.I(!1,null,null,null,null,null,45,B.A,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense displaySmall 2014",null,null,null,null) +B.abB=new A.I(!1,null,null,null,null,null,40,B.A,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense headlineLarge 2014",null,null,null,null) +B.abs=new A.I(!1,null,null,null,null,null,34,B.A,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense headlineMedium 2014",null,null,null,null) +B.ae7=new A.I(!1,null,null,null,null,null,24,B.A,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense headlineSmall 2014",null,null,null,null) +B.aaH=new A.I(!1,null,null,null,null,null,21,B.az,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense titleLarge 2014",null,null,null,null) +B.abH=new A.I(!1,null,null,null,null,null,17,B.A,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense titleMedium 2014",null,null,null,null) +B.acB=new A.I(!1,null,null,null,null,null,15,B.az,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense titleSmall 2014",null,null,null,null) +B.acS=new A.I(!1,null,null,null,null,null,15,B.az,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense bodyLarge 2014",null,null,null,null) +B.ad7=new A.I(!1,null,null,null,null,null,15,B.A,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense bodyMedium 2014",null,null,null,null) +B.abD=new A.I(!1,null,null,null,null,null,13,B.A,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense bodySmall 2014",null,null,null,null) +B.adM=new A.I(!1,null,null,null,null,null,15,B.az,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense labelLarge 2014",null,null,null,null) +B.acP=new A.I(!1,null,null,null,null,null,12,B.A,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense labelMedium 2014",null,null,null,null) +B.acM=new A.I(!1,null,null,null,null,null,11,B.A,null,null,null,B.as,null,null,null,null,null,null,null,null,null,"dense labelSmall 2014",null,null,null,null) +B.aez=new A.hB(B.ad2,B.abr,B.adT,B.abB,B.abs,B.ae7,B.aaH,B.abH,B.acB,B.acS,B.ad7,B.abD,B.adM,B.acP,B.acM) +B.aeu=new A.I(!0,B.am,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond displayLarge",null,null,null,null) +B.abb=new A.I(!0,B.am,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond displayMedium",null,null,null,null) +B.ac6=new A.I(!0,B.am,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond displaySmall",null,null,null,null) +B.adQ=new A.I(!0,B.am,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond headlineLarge",null,null,null,null) +B.adz=new A.I(!0,B.am,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond headlineMedium",null,null,null,null) +B.ab4=new A.I(!0,B.an,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond headlineSmall",null,null,null,null) +B.adS=new A.I(!0,B.an,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond titleLarge",null,null,null,null) +B.adW=new A.I(!0,B.an,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond titleMedium",null,null,null,null) +B.aej=new A.I(!0,B.q,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond titleSmall",null,null,null,null) +B.adV=new A.I(!0,B.an,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond bodyLarge",null,null,null,null) +B.abX=new A.I(!0,B.an,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond bodyMedium",null,null,null,null) +B.aaL=new A.I(!0,B.am,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond bodySmall",null,null,null,null) +B.aet=new A.I(!0,B.an,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond labelLarge",null,null,null,null) +B.ac7=new A.I(!0,B.q,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond labelMedium",null,null,null,null) +B.adF=new A.I(!0,B.q,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackRedmond labelSmall",null,null,null,null) +B.aeA=new A.hB(B.aeu,B.abb,B.ac6,B.adQ,B.adz,B.ab4,B.adS,B.adW,B.aej,B.adV,B.abX,B.aaL,B.aet,B.ac7,B.adF) +B.acE=new A.I(!1,null,null,null,null,null,57,B.A,null,-0.25,null,B.as,1.12,B.U,null,null,null,null,null,null,null,"dense displayLarge 2021",null,null,null,null) +B.aaV=new A.I(!1,null,null,null,null,null,45,B.A,null,0,null,B.as,1.16,B.U,null,null,null,null,null,null,null,"dense displayMedium 2021",null,null,null,null) +B.adr=new A.I(!1,null,null,null,null,null,36,B.A,null,0,null,B.as,1.22,B.U,null,null,null,null,null,null,null,"dense displaySmall 2021",null,null,null,null) +B.aaG=new A.I(!1,null,null,null,null,null,32,B.A,null,0,null,B.as,1.25,B.U,null,null,null,null,null,null,null,"dense headlineLarge 2021",null,null,null,null) +B.adO=new A.I(!1,null,null,null,null,null,28,B.A,null,0,null,B.as,1.29,B.U,null,null,null,null,null,null,null,"dense headlineMedium 2021",null,null,null,null) +B.acO=new A.I(!1,null,null,null,null,null,24,B.A,null,0,null,B.as,1.33,B.U,null,null,null,null,null,null,null,"dense headlineSmall 2021",null,null,null,null) +B.aes=new A.I(!1,null,null,null,null,null,22,B.A,null,0,null,B.as,1.27,B.U,null,null,null,null,null,null,null,"dense titleLarge 2021",null,null,null,null) +B.aba=new A.I(!1,null,null,null,null,null,16,B.az,null,0.15,null,B.as,1.5,B.U,null,null,null,null,null,null,null,"dense titleMedium 2021",null,null,null,null) +B.abN=new A.I(!1,null,null,null,null,null,14,B.az,null,0.1,null,B.as,1.43,B.U,null,null,null,null,null,null,null,"dense titleSmall 2021",null,null,null,null) +B.abM=new A.I(!1,null,null,null,null,null,16,B.A,null,0.5,null,B.as,1.5,B.U,null,null,null,null,null,null,null,"dense bodyLarge 2021",null,null,null,null) +B.ac0=new A.I(!1,null,null,null,null,null,14,B.A,null,0.25,null,B.as,1.43,B.U,null,null,null,null,null,null,null,"dense bodyMedium 2021",null,null,null,null) +B.abF=new A.I(!1,null,null,null,null,null,12,B.A,null,0.4,null,B.as,1.33,B.U,null,null,null,null,null,null,null,"dense bodySmall 2021",null,null,null,null) +B.adt=new A.I(!1,null,null,null,null,null,14,B.az,null,0.1,null,B.as,1.43,B.U,null,null,null,null,null,null,null,"dense labelLarge 2021",null,null,null,null) +B.acl=new A.I(!1,null,null,null,null,null,12,B.az,null,0.5,null,B.as,1.33,B.U,null,null,null,null,null,null,null,"dense labelMedium 2021",null,null,null,null) +B.abL=new A.I(!1,null,null,null,null,null,11,B.az,null,0.5,null,B.as,1.45,B.U,null,null,null,null,null,null,null,"dense labelSmall 2021",null,null,null,null) +B.aeB=new A.hB(B.acE,B.aaV,B.adr,B.aaG,B.adO,B.acO,B.aes,B.aba,B.abN,B.abM,B.ac0,B.abF,B.adt,B.acl,B.abL) +B.adj=new A.I(!0,B.a8,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity displayLarge",null,null,null,null) +B.ae6=new A.I(!0,B.a8,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity displayMedium",null,null,null,null) +B.adk=new A.I(!0,B.a8,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity displaySmall",null,null,null,null) +B.aeb=new A.I(!0,B.a8,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity headlineLarge",null,null,null,null) +B.acN=new A.I(!0,B.a8,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity headlineMedium",null,null,null,null) +B.ad6=new A.I(!0,B.l,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity headlineSmall",null,null,null,null) +B.abR=new A.I(!0,B.l,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity titleLarge",null,null,null,null) +B.aaS=new A.I(!0,B.l,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity titleMedium",null,null,null,null) +B.abk=new A.I(!0,B.l,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity titleSmall",null,null,null,null) +B.adi=new A.I(!0,B.l,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity bodyLarge",null,null,null,null) +B.ae4=new A.I(!0,B.l,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity bodyMedium",null,null,null,null) +B.aaO=new A.I(!0,B.a8,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity bodySmall",null,null,null,null) +B.abn=new A.I(!0,B.l,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity labelLarge",null,null,null,null) +B.aby=new A.I(!0,B.l,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity labelMedium",null,null,null,null) +B.aaP=new A.I(!0,B.l,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedwoodCity labelSmall",null,null,null,null) +B.aeC=new A.hB(B.adj,B.ae6,B.adk,B.aeb,B.acN,B.ad6,B.abR,B.aaS,B.abk,B.adi,B.ae4,B.aaO,B.abn,B.aby,B.aaP) +B.ada=new A.I(!1,null,null,null,null,null,112,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall displayLarge 2014",null,null,null,null) +B.abU=new A.I(!1,null,null,null,null,null,56,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall displayMedium 2014",null,null,null,null) +B.acd=new A.I(!1,null,null,null,null,null,45,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall displaySmall 2014",null,null,null,null) +B.acV=new A.I(!1,null,null,null,null,null,40,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall headlineLarge 2014",null,null,null,null) +B.adp=new A.I(!1,null,null,null,null,null,34,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall headlineMedium 2014",null,null,null,null) +B.ack=new A.I(!1,null,null,null,null,null,24,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall headlineSmall 2014",null,null,null,null) +B.acD=new A.I(!1,null,null,null,null,null,21,B.b3,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall titleLarge 2014",null,null,null,null) +B.aaW=new A.I(!1,null,null,null,null,null,17,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall titleMedium 2014",null,null,null,null) +B.adC=new A.I(!1,null,null,null,null,null,15,B.az,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall titleSmall 2014",null,null,null,null) +B.abT=new A.I(!1,null,null,null,null,null,15,B.b3,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall bodyLarge 2014",null,null,null,null) +B.adK=new A.I(!1,null,null,null,null,null,15,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall bodyMedium 2014",null,null,null,null) +B.ac1=new A.I(!1,null,null,null,null,null,13,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall bodySmall 2014",null,null,null,null) +B.aeg=new A.I(!1,null,null,null,null,null,15,B.b3,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall labelLarge 2014",null,null,null,null) +B.acF=new A.I(!1,null,null,null,null,null,12,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall labelMedium 2014",null,null,null,null) +B.aaw=new A.I(!1,null,null,null,null,null,11,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"tall labelSmall 2014",null,null,null,null) +B.aeD=new A.hB(B.ada,B.abU,B.acd,B.acV,B.adp,B.ack,B.acD,B.aaW,B.adC,B.abT,B.adK,B.ac1,B.aeg,B.acF,B.aaw) +B.acQ=new A.I(!0,B.a8,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView displayLarge",null,null,null,null) +B.ac4=new A.I(!0,B.a8,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView displayMedium",null,null,null,null) +B.aem=new A.I(!0,B.a8,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView displaySmall",null,null,null,null) +B.aaY=new A.I(!0,B.a8,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView headlineLarge",null,null,null,null) +B.abi=new A.I(!0,B.a8,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView headlineMedium",null,null,null,null) +B.adq=new A.I(!0,B.l,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView headlineSmall",null,null,null,null) +B.abc=new A.I(!0,B.l,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView titleLarge",null,null,null,null) +B.abv=new A.I(!0,B.l,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView titleMedium",null,null,null,null) +B.acR=new A.I(!0,B.l,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView titleSmall",null,null,null,null) +B.adn=new A.I(!0,B.l,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView bodyLarge",null,null,null,null) +B.ab9=new A.I(!0,B.l,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView bodyMedium",null,null,null,null) +B.abe=new A.I(!0,B.a8,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView bodySmall",null,null,null,null) +B.aed=new A.I(!0,B.l,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView labelLarge",null,null,null,null) +B.aeq=new A.I(!0,B.l,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView labelMedium",null,null,null,null) +B.ae2=new A.I(!0,B.l,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteMountainView labelSmall",null,null,null,null) +B.aeE=new A.hB(B.acQ,B.ac4,B.aem,B.aaY,B.abi,B.adq,B.abc,B.abv,B.acR,B.adn,B.ab9,B.abe,B.aed,B.aeq,B.ae2) +B.abm=new A.I(!1,null,null,null,null,null,57,B.A,null,-0.25,null,B.E,1.12,B.U,null,null,null,null,null,null,null,"englishLike displayLarge 2021",null,null,null,null) +B.acY=new A.I(!1,null,null,null,null,null,45,B.A,null,0,null,B.E,1.16,B.U,null,null,null,null,null,null,null,"englishLike displayMedium 2021",null,null,null,null) +B.abp=new A.I(!1,null,null,null,null,null,36,B.A,null,0,null,B.E,1.22,B.U,null,null,null,null,null,null,null,"englishLike displaySmall 2021",null,null,null,null) +B.ach=new A.I(!1,null,null,null,null,null,32,B.A,null,0,null,B.E,1.25,B.U,null,null,null,null,null,null,null,"englishLike headlineLarge 2021",null,null,null,null) +B.abo=new A.I(!1,null,null,null,null,null,28,B.A,null,0,null,B.E,1.29,B.U,null,null,null,null,null,null,null,"englishLike headlineMedium 2021",null,null,null,null) +B.abS=new A.I(!1,null,null,null,null,null,24,B.A,null,0,null,B.E,1.33,B.U,null,null,null,null,null,null,null,"englishLike headlineSmall 2021",null,null,null,null) +B.aef=new A.I(!1,null,null,null,null,null,22,B.A,null,0,null,B.E,1.27,B.U,null,null,null,null,null,null,null,"englishLike titleLarge 2021",null,null,null,null) +B.acJ=new A.I(!1,null,null,null,null,null,16,B.az,null,0.15,null,B.E,1.5,B.U,null,null,null,null,null,null,null,"englishLike titleMedium 2021",null,null,null,null) +B.aaF=new A.I(!1,null,null,null,null,null,14,B.az,null,0.1,null,B.E,1.43,B.U,null,null,null,null,null,null,null,"englishLike titleSmall 2021",null,null,null,null) +B.ac_=new A.I(!1,null,null,null,null,null,16,B.A,null,0.5,null,B.E,1.5,B.U,null,null,null,null,null,null,null,"englishLike bodyLarge 2021",null,null,null,null) +B.aaZ=new A.I(!1,null,null,null,null,null,14,B.A,null,0.25,null,B.E,1.43,B.U,null,null,null,null,null,null,null,"englishLike bodyMedium 2021",null,null,null,null) +B.ael=new A.I(!1,null,null,null,null,null,12,B.A,null,0.4,null,B.E,1.33,B.U,null,null,null,null,null,null,null,"englishLike bodySmall 2021",null,null,null,null) +B.aaB=new A.I(!1,null,null,null,null,null,14,B.az,null,0.1,null,B.E,1.43,B.U,null,null,null,null,null,null,null,"englishLike labelLarge 2021",null,null,null,null) +B.acz=new A.I(!1,null,null,null,null,null,12,B.az,null,0.5,null,B.E,1.33,B.U,null,null,null,null,null,null,null,"englishLike labelMedium 2021",null,null,null,null) +B.ady=new A.I(!1,null,null,null,null,null,11,B.az,null,0.5,null,B.E,1.45,B.U,null,null,null,null,null,null,null,"englishLike labelSmall 2021",null,null,null,null) +B.aeF=new A.hB(B.abm,B.acY,B.abp,B.ach,B.abo,B.abS,B.aef,B.acJ,B.aaF,B.ac_,B.aaZ,B.ael,B.aaB,B.acz,B.ady) +B.adI=new A.I(!0,B.am,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino displayLarge",null,null,null,null) +B.adE=new A.I(!0,B.am,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino displayMedium",null,null,null,null) +B.aen=new A.I(!0,B.am,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino displaySmall",null,null,null,null) +B.abw=new A.I(!0,B.am,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino headlineLarge",null,null,null,null) +B.adL=new A.I(!0,B.am,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino headlineMedium",null,null,null,null) +B.aaz=new A.I(!0,B.an,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino headlineSmall",null,null,null,null) +B.ab0=new A.I(!0,B.an,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino titleLarge",null,null,null,null) +B.abj=new A.I(!0,B.an,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino titleMedium",null,null,null,null) +B.adv=new A.I(!0,B.q,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino titleSmall",null,null,null,null) +B.aax=new A.I(!0,B.an,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino bodyLarge",null,null,null,null) +B.adh=new A.I(!0,B.an,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino bodyMedium",null,null,null,null) +B.ad4=new A.I(!0,B.am,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino bodySmall",null,null,null,null) +B.adN=new A.I(!0,B.an,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino labelLarge",null,null,null,null) +B.abh=new A.I(!0,B.q,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino labelMedium",null,null,null,null) +B.ad1=new A.I(!0,B.q,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackCupertino labelSmall",null,null,null,null) +B.aeG=new A.hB(B.adI,B.adE,B.aen,B.abw,B.adL,B.aaz,B.ab0,B.abj,B.adv,B.aax,B.adh,B.ad4,B.adN,B.abh,B.ad1) +B.abz=new A.I(!1,null,null,null,null,null,57,B.A,null,-0.25,null,B.E,1.12,B.U,null,null,null,null,null,null,null,"tall displayLarge 2021",null,null,null,null) +B.aaI=new A.I(!1,null,null,null,null,null,45,B.A,null,0,null,B.E,1.16,B.U,null,null,null,null,null,null,null,"tall displayMedium 2021",null,null,null,null) +B.acw=new A.I(!1,null,null,null,null,null,36,B.A,null,0,null,B.E,1.22,B.U,null,null,null,null,null,null,null,"tall displaySmall 2021",null,null,null,null) +B.abd=new A.I(!1,null,null,null,null,null,32,B.A,null,0,null,B.E,1.25,B.U,null,null,null,null,null,null,null,"tall headlineLarge 2021",null,null,null,null) +B.aau=new A.I(!1,null,null,null,null,null,28,B.A,null,0,null,B.E,1.29,B.U,null,null,null,null,null,null,null,"tall headlineMedium 2021",null,null,null,null) +B.acs=new A.I(!1,null,null,null,null,null,24,B.A,null,0,null,B.E,1.33,B.U,null,null,null,null,null,null,null,"tall headlineSmall 2021",null,null,null,null) +B.acX=new A.I(!1,null,null,null,null,null,22,B.A,null,0,null,B.E,1.27,B.U,null,null,null,null,null,null,null,"tall titleLarge 2021",null,null,null,null) +B.acc=new A.I(!1,null,null,null,null,null,16,B.az,null,0.15,null,B.E,1.5,B.U,null,null,null,null,null,null,null,"tall titleMedium 2021",null,null,null,null) +B.adw=new A.I(!1,null,null,null,null,null,14,B.az,null,0.1,null,B.E,1.43,B.U,null,null,null,null,null,null,null,"tall titleSmall 2021",null,null,null,null) +B.ac2=new A.I(!1,null,null,null,null,null,16,B.A,null,0.5,null,B.E,1.5,B.U,null,null,null,null,null,null,null,"tall bodyLarge 2021",null,null,null,null) +B.aaK=new A.I(!1,null,null,null,null,null,14,B.A,null,0.25,null,B.E,1.43,B.U,null,null,null,null,null,null,null,"tall bodyMedium 2021",null,null,null,null) +B.adJ=new A.I(!1,null,null,null,null,null,12,B.A,null,0.4,null,B.E,1.33,B.U,null,null,null,null,null,null,null,"tall bodySmall 2021",null,null,null,null) +B.abf=new A.I(!1,null,null,null,null,null,14,B.az,null,0.1,null,B.E,1.43,B.U,null,null,null,null,null,null,null,"tall labelLarge 2021",null,null,null,null) +B.aaU=new A.I(!1,null,null,null,null,null,12,B.az,null,0.5,null,B.E,1.33,B.U,null,null,null,null,null,null,null,"tall labelMedium 2021",null,null,null,null) +B.aaA=new A.I(!1,null,null,null,null,null,11,B.az,null,0.5,null,B.E,1.45,B.U,null,null,null,null,null,null,null,"tall labelSmall 2021",null,null,null,null) +B.aeH=new A.hB(B.abz,B.aaI,B.acw,B.abd,B.aau,B.acs,B.acX,B.acc,B.adw,B.ac2,B.aaK,B.adJ,B.abf,B.aaU,B.aaA) +B.at=A.b(s(["Ubuntu","Cantarell","DejaVu Sans","Liberation Sans","Arial"]),t.T) +B.adY=new A.I(!0,B.a8,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki displayLarge",null,null,null,null) +B.adA=new A.I(!0,B.a8,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki displayMedium",null,null,null,null) +B.aev=new A.I(!0,B.a8,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki displaySmall",null,null,null,null) +B.ae9=new A.I(!0,B.a8,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki headlineLarge",null,null,null,null) +B.acK=new A.I(!0,B.a8,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki headlineMedium",null,null,null,null) +B.abY=new A.I(!0,B.l,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki headlineSmall",null,null,null,null) +B.aer=new A.I(!0,B.l,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki titleLarge",null,null,null,null) +B.ad9=new A.I(!0,B.l,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki titleMedium",null,null,null,null) +B.aaD=new A.I(!0,B.l,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki titleSmall",null,null,null,null) +B.ae8=new A.I(!0,B.l,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki bodyLarge",null,null,null,null) +B.ac3=new A.I(!0,B.l,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki bodyMedium",null,null,null,null) +B.adU=new A.I(!0,B.a8,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki bodySmall",null,null,null,null) +B.acL=new A.I(!0,B.l,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki labelLarge",null,null,null,null) +B.aea=new A.I(!0,B.l,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki labelMedium",null,null,null,null) +B.aar=new A.I(!0,B.l,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteHelsinki labelSmall",null,null,null,null) +B.aeI=new A.hB(B.adY,B.adA,B.aev,B.ae9,B.acK,B.abY,B.aer,B.ad9,B.aaD,B.ae8,B.ac3,B.adU,B.acL,B.aea,B.aar) +B.adH=new A.I(!0,B.a8,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond displayLarge",null,null,null,null) +B.abt=new A.I(!0,B.a8,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond displayMedium",null,null,null,null) +B.aeo=new A.I(!0,B.a8,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond displaySmall",null,null,null,null) +B.adu=new A.I(!0,B.a8,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond headlineLarge",null,null,null,null) +B.ab6=new A.I(!0,B.a8,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond headlineMedium",null,null,null,null) +B.aas=new A.I(!0,B.l,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond headlineSmall",null,null,null,null) +B.adx=new A.I(!0,B.l,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond titleLarge",null,null,null,null) +B.abA=new A.I(!0,B.l,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond titleMedium",null,null,null,null) +B.adR=new A.I(!0,B.l,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond titleSmall",null,null,null,null) +B.aat=new A.I(!0,B.l,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond bodyLarge",null,null,null,null) +B.adg=new A.I(!0,B.l,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond bodyMedium",null,null,null,null) +B.ad3=new A.I(!0,B.a8,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond bodySmall",null,null,null,null) +B.ab2=new A.I(!0,B.l,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond labelLarge",null,null,null,null) +B.ab7=new A.I(!0,B.l,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond labelMedium",null,null,null,null) +B.aav=new A.I(!0,B.l,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteRedmond labelSmall",null,null,null,null) +B.aeJ=new A.hB(B.adH,B.abt,B.aeo,B.adu,B.ab6,B.aas,B.adx,B.abA,B.adR,B.aat,B.adg,B.ad3,B.ab2,B.ab7,B.aav) +B.acC=new A.I(!0,B.am,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView displayLarge",null,null,null,null) +B.aei=new A.I(!0,B.am,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView displayMedium",null,null,null,null) +B.abg=new A.I(!0,B.am,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView displaySmall",null,null,null,null) +B.ae5=new A.I(!0,B.am,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView headlineLarge",null,null,null,null) +B.ad5=new A.I(!0,B.am,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView headlineMedium",null,null,null,null) +B.abO=new A.I(!0,B.an,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView headlineSmall",null,null,null,null) +B.ade=new A.I(!0,B.an,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView titleLarge",null,null,null,null) +B.ad0=new A.I(!0,B.an,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView titleMedium",null,null,null,null) +B.acx=new A.I(!0,B.q,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView titleSmall",null,null,null,null) +B.abP=new A.I(!0,B.an,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView bodyLarge",null,null,null,null) +B.abq=new A.I(!0,B.an,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView bodyMedium",null,null,null,null) +B.acy=new A.I(!0,B.am,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView bodySmall",null,null,null,null) +B.act=new A.I(!0,B.an,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView labelLarge",null,null,null,null) +B.ac5=new A.I(!0,B.q,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView labelMedium",null,null,null,null) +B.abW=new A.I(!0,B.q,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackMountainView labelSmall",null,null,null,null) +B.aeK=new A.hB(B.acC,B.aei,B.abg,B.ae5,B.ad5,B.abO,B.ade,B.ad0,B.acx,B.abP,B.abq,B.acy,B.act,B.ac5,B.abW) +B.aaJ=new A.I(!0,B.a8,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino displayLarge",null,null,null,null) +B.adX=new A.I(!0,B.a8,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino displayMedium",null,null,null,null) +B.aeh=new A.I(!0,B.a8,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino displaySmall",null,null,null,null) +B.abK=new A.I(!0,B.a8,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino headlineLarge",null,null,null,null) +B.acG=new A.I(!0,B.a8,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino headlineMedium",null,null,null,null) +B.ab3=new A.I(!0,B.l,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino headlineSmall",null,null,null,null) +B.acm=new A.I(!0,B.l,null,"CupertinoSystemDisplay",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino titleLarge",null,null,null,null) +B.aaR=new A.I(!0,B.l,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino titleMedium",null,null,null,null) +B.abE=new A.I(!0,B.l,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino titleSmall",null,null,null,null) +B.abu=new A.I(!0,B.l,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino bodyLarge",null,null,null,null) +B.abQ=new A.I(!0,B.l,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino bodyMedium",null,null,null,null) +B.adf=new A.I(!0,B.a8,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino bodySmall",null,null,null,null) +B.ad8=new A.I(!0,B.l,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino labelLarge",null,null,null,null) +B.abV=new A.I(!0,B.l,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino labelMedium",null,null,null,null) +B.ab5=new A.I(!0,B.l,null,"CupertinoSystemText",null,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"whiteCupertino labelSmall",null,null,null,null) +B.aeL=new A.hB(B.aaJ,B.adX,B.aeh,B.abK,B.acG,B.ab3,B.acm,B.aaR,B.abE,B.abu,B.abQ,B.adf,B.ad8,B.abV,B.ab5) +B.ace=new A.I(!1,null,null,null,null,null,112,B.jV,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike displayLarge 2014",null,null,null,null) +B.acZ=new A.I(!1,null,null,null,null,null,56,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike displayMedium 2014",null,null,null,null) +B.aaE=new A.I(!1,null,null,null,null,null,45,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike displaySmall 2014",null,null,null,null) +B.aew=new A.I(!1,null,null,null,null,null,40,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike headlineLarge 2014",null,null,null,null) +B.aaT=new A.I(!1,null,null,null,null,null,34,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike headlineMedium 2014",null,null,null,null) +B.abJ=new A.I(!1,null,null,null,null,null,24,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike headlineSmall 2014",null,null,null,null) +B.abZ=new A.I(!1,null,null,null,null,null,20,B.az,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike titleLarge 2014",null,null,null,null) +B.abC=new A.I(!1,null,null,null,null,null,16,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike titleMedium 2014",null,null,null,null) +B.aaM=new A.I(!1,null,null,null,null,null,14,B.az,null,0.1,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike titleSmall 2014",null,null,null,null) +B.acg=new A.I(!1,null,null,null,null,null,14,B.az,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike bodyLarge 2014",null,null,null,null) +B.ab1=new A.I(!1,null,null,null,null,null,14,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike bodyMedium 2014",null,null,null,null) +B.aaX=new A.I(!1,null,null,null,null,null,12,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike bodySmall 2014",null,null,null,null) +B.abl=new A.I(!1,null,null,null,null,null,14,B.az,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike labelLarge 2014",null,null,null,null) +B.ae3=new A.I(!1,null,null,null,null,null,12,B.A,null,null,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike labelMedium 2014",null,null,null,null) +B.acf=new A.I(!1,null,null,null,null,null,10,B.A,null,1.5,null,B.E,null,null,null,null,null,null,null,null,null,"englishLike labelSmall 2014",null,null,null,null) +B.aeM=new A.hB(B.ace,B.acZ,B.aaE,B.aew,B.aaT,B.abJ,B.abZ,B.abC,B.aaM,B.acg,B.ab1,B.aaX,B.abl,B.ae3,B.acf) +B.aee=new A.I(!0,B.am,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki displayLarge",null,null,null,null) +B.ab8=new A.I(!0,B.am,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki displayMedium",null,null,null,null) +B.ac8=new A.I(!0,B.am,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki displaySmall",null,null,null,null) +B.adb=new A.I(!0,B.am,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki headlineLarge",null,null,null,null) +B.ado=new A.I(!0,B.am,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki headlineMedium",null,null,null,null) +B.aay=new A.I(!0,B.an,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki headlineSmall",null,null,null,null) +B.abI=new A.I(!0,B.an,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki titleLarge",null,null,null,null) +B.aaC=new A.I(!0,B.an,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki titleMedium",null,null,null,null) +B.acW=new A.I(!0,B.q,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki titleSmall",null,null,null,null) +B.adB=new A.I(!0,B.an,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki bodyLarge",null,null,null,null) +B.acj=new A.I(!0,B.an,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki bodyMedium",null,null,null,null) +B.adD=new A.I(!0,B.am,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki bodySmall",null,null,null,null) +B.adP=new A.I(!0,B.an,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki labelLarge",null,null,null,null) +B.adc=new A.I(!0,B.q,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki labelMedium",null,null,null,null) +B.adm=new A.I(!0,B.q,null,"Roboto",B.at,null,null,null,null,null,null,null,null,null,null,null,null,B.k,null,null,null,"blackHelsinki labelSmall",null,null,null,null) +B.aeN=new A.hB(B.aee,B.ab8,B.ac8,B.adb,B.ado,B.aay,B.abI,B.aaC,B.acW,B.adB,B.acj,B.adD,B.adP,B.adc,B.adm) +B.aeO=new A.f7("Knight",null,null,null,null,null,null,null,null,null) +B.aeP=new A.f7("Ranger",null,null,null,null,null,null,null,null,null) +B.aeR=new A.f7("Reset",null,null,null,null,null,null,null,null,null) +B.aeS=new A.f7("Mage",null,null,null,null,null,null,null,null,null) +B.aeT=new A.f7("+",null,null,null,null,null,null,null,null,null) +B.ae1=new A.I(!0,B.a8,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.aeV=new A.f7("Hey, I can be a widget too!",null,B.ae1,null,null,null,null,null,null,null) +B.aeW=new A.f7("2 Players",null,null,null,null,null,null,null,null,null) +B.aeX=new A.f7("Restart",null,null,null,null,null,null,null,null,null) +B.aeY=new A.f7("Got it",null,null,null,null,null,null,null,null,null) +B.aeZ=new A.f7("Close",null,null,null,null,null,null,null,null,null) +B.H7=new A.f7("Play again",null,null,null,null,null,null,null,null,null) +B.ajp=new A.k2(2) +B.af_=new A.f7("Flying button!",null,null,null,null,null,B.ajp,null,null,null) +B.NO=new A.n(4284295005) +B.adG=new A.I(!0,B.NO,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.af0=new A.f7("Sprite Button",null,B.adG,null,null,null,null,null,null,null) +B.af2=new A.f7("1 Player",null,null,null,null,null,null,null,null,null) +B.af3=new A.f7("Custom device",null,null,null,null,null,null,null,null,null) +B.aky=new A.aVZ(0,"system") +B.a3G=new A.i(0.05,0) +B.a3H=new A.i(0.133333,0.06) +B.a3q=new A.i(0.166666,0.4) +B.a3y=new A.i(0.208333,0.82) +B.a3C=new A.i(0.25,1) +B.af5=new A.SY(B.a3G,B.a3H,B.a3q,B.a3y,B.a3C) +B.a3O=new A.i(0.056,0.024) +B.a3w=new A.i(0.108,0.3085) +B.a3A=new A.i(0.198,0.541) +B.a3u=new A.i(0.3655,1) +B.a3s=new A.i(0.5465,0.989) +B.H8=new A.SY(B.a3O,B.a3w,B.a3A,B.a3u,B.a3s) +B.lq=new A.SZ(0) +B.af6=new A.SZ(0.5) +B.af7=new A.T_(null) +B.t1=new A.T0(0,"clamp") +B.af8=new A.T0(1,"repeated") +B.af9=new A.T0(2,"mirror") +B.afa=new A.T4(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.afb=new A.T5(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.Hb=new A.bT(0,"command") +B.t2=new A.bT(1,"hashtag") +B.e5=new A.bT(2,"id") +B.Hc=new A.bT(3,"number") +B.lr=new A.bT(4,"person") +B.t3=new A.bT(5,"string") +B.dr=new A.bT(6,"text") +B.ls=new A.bT(66,"error") +B.lt=new A.bT(7,"variable") +B.ds=new A.nx(0,"beginArray") +B.t4=new A.nx(1,"endArray") +B.fS=new A.nx(2,"beginObject") +B.Hd=new A.nx(3,"endObject") +B.ag8=new A.nx(4,"name") +B.lu=new A.nx(5,"string") +B.cu=new A.nx(6,"number") +B.ag9=new A.nx(7,"boolean") +B.aga=new A.nx(8,"nullToken") +B.agb=new A.nx(9,"endDocument") +B.agc=new A.bp(B.dr,">>") +B.afc=new A.bT(10,"closeMarkupTag") +B.iw=new A.bp(B.afc,null) +B.afd=new A.bT(11,"colon") +B.lv=new A.bp(B.afd,null) +B.aft=new A.bT(27,"endBody") +B.Hf=new A.bp(B.aft,null) +B.afu=new A.bT(28,"endCommand") +B.ca=new A.bp(B.afu,null) +B.afv=new A.bT(29,"endExpression") +B.d1=new A.bp(B.afv,null) +B.afw=new A.bT(30,"endHeader") +B.lE=new A.bp(B.afw,null) +B.afx=new A.bT(31,"endIndent") +B.lF=new A.bp(B.afx,null) +B.afy=new A.bT(32,"endMarkupTag") +B.t7=new A.bp(B.afy,null) +B.afA=new A.bT(34,"newline") +B.b5=new A.bp(B.afA,null) +B.afW=new A.bT(56,"startBody") +B.Hl=new A.bp(B.afW,null) +B.afX=new A.bT(57,"startCommand") +B.aT=new A.bp(B.afX,null) +B.afY=new A.bT(58,"startExpression") +B.c0=new A.bp(B.afY,null) +B.afZ=new A.bT(59,"startHeader") +B.iF=new A.bp(B.afZ,null) +B.ag_=new A.bT(60,"startIndent") +B.dt=new A.bp(B.ag_,null) +B.ag0=new A.bT(61,"startMarkupTag") +B.eY=new A.bp(B.ag0,null) +B.ag5=new A.bT(67,"eof") +B.aG=new A.bp(B.ag5,null) +B.ag6=new A.bT(8,"arrow") +B.lO=new A.bp(B.ag6,null) +B.agd=new A.bp(B.dr,"\n") +B.age=new A.Ta(0.01,1/0) +B.d2=new A.Ta(0.001,0.001) +B.Hp=new A.Tb(!1,!1,!1,!1) +B.agf=new A.Tb(!0,!1,!1,!0) +B.agg=new A.Tb(!0,!0,!0,!0) +B.agh=new A.Td(null,null,null,null,null,null,null,null,null) +B.agi=new A.adL(0,"hue") +B.t9=new A.adL(8,"alpha") +B.Hq=new A.Tg(0,"identity") +B.Hr=new A.Tg(1,"transform2d") +B.lP=new A.Tg(2,"complex") +B.agk=new A.Cq(3,"left") +B.Ht=new A.adT(0,"closedLoop") +B.agl=new A.adT(1,"leaveFlutterView") +B.agm=A.bj("z7") +B.ta=A.bj("oO") +B.agn=A.bj("z6") +B.ago=A.bj("rb") +B.lQ=A.bj("uq") +B.Hu=A.bj("uC") +B.agp=A.bj("DF") +B.agq=A.bj("cX") +B.agr=A.bj("pa") +B.ags=A.bj("LZ") +B.agt=A.bj("yJ") +B.agu=A.bj("yK") +B.agv=A.bj("uR") +B.Hv=A.bj("uT") +B.tb=A.bj("ld") +B.agw=A.bj("bDW") +B.agx=A.bj("le") +B.agy=A.bj("EF") +B.agz=A.bj("aDT") +B.agA=A.bj("v4") +B.agB=A.bj("v5") +B.agC=A.bj("od") +B.agD=A.bj("bDV") +B.agE=A.bj("aHS") +B.agF=A.bj("vo") +B.agG=A.bj("aHT") +B.agH=A.bj("bfp") +B.agI=A.bj("aV") +B.agJ=A.bj("cK>") +B.agK=A.bj("nd") +B.tc=A.bj("lt") +B.td=A.bj("bnR") +B.agL=A.bj("Ae") +B.cK=A.bj("ON") +B.agN=A.bj("rc") +B.agM=A.bj("re") +B.agO=A.bj("Az") +B.agP=A.bj("B") +B.agQ=A.bj("Gr") +B.lR=A.bj("jO") +B.agR=A.bj("pQ") +B.agS=A.bj("vW") +B.agT=A.bj("B0") +B.agU=A.bj("tb") +B.te=A.bj("oi") +B.agV=A.bj("rd") +B.agW=A.bj("wd") +B.agX=A.bj("Bi") +B.agY=A.bj("hU") +B.agZ=A.bj("ox") +B.ah_=A.bj("bgr") +B.tf=A.bj("ik") +B.ah0=A.bj("ts") +B.ah1=A.bj("wr") +B.ah2=A.bj("BK") +B.ah3=A.bj("q9") +B.tg=A.bj("jk") +B.ah4=A.bj("fk") +B.ah5=A.bj("tE") +B.ah6=A.bj("iT") +B.ah7=A.bj("wO") +B.ah8=A.bj("wQ") +B.ah9=A.bj("Ir") +B.aha=A.bj("aWS") +B.ahb=A.bj("eD") +B.ahc=A.bj("wR") +B.ahd=A.bj("nz") +B.ahe=A.bj("bh8") +B.Hx=A.bj("Ty") +B.ahf=A.bj("yL") +B.ahg=A.bj("z4") +B.ahh=A.bj("tr") +B.ahi=A.bj("oR") +B.ahj=A.bj("IS") +B.ahk=A.bj("u_<@>") +B.ahl=A.bj("qu") +B.ahm=A.bj("qv") +B.ahn=A.bj("q8") +B.aho=A.bj("Mo") +B.ahp=A.bj("v0") +B.ahq=A.bj("rf") +B.ahr=A.bj("ql") +B.ahs=A.bj("m2") +B.ahu=A.bj("t0") +B.ahv=A.bj("z3") +B.Ja=new A.bL(B.l,1,B.J,-1) +B.HB=new A.mI(B.j1,B.Ja) +B.J9=new A.bL(B.q,1,B.J,-1) +B.ahw=new A.mI(B.j1,B.J9) +B.ahx=new A.adX(0,"undo") +B.ahy=new A.adX(1,"redo") +B.ahz=new A.Iu(!1,!1) +B.ahA=new A.adZ(0,"scope") +B.th=new A.adZ(1,"previouslyFocusedChild") +B.ahB=new A.eV(11264,55297,B.r,t.ya) +B.ahC=new A.eV(1425,1775,B.ad,t.ya) +B.ahD=new A.eV(1786,2303,B.ad,t.ya) +B.ahE=new A.eV(192,214,B.r,t.ya) +B.ahF=new A.eV(216,246,B.r,t.ya) +B.ahG=new A.eV(2304,8191,B.r,t.ya) +B.ahH=new A.eV(248,696,B.r,t.ya) +B.ahI=new A.eV(55298,55299,B.ad,t.ya) +B.ahJ=new A.eV(55300,55353,B.r,t.ya) +B.ahK=new A.eV(55354,55355,B.ad,t.ya) +B.ahL=new A.eV(55356,56319,B.r,t.ya) +B.ahM=new A.eV(63744,64284,B.r,t.ya) +B.ahN=new A.eV(64285,65023,B.ad,t.ya) +B.ahO=new A.eV(65024,65135,B.r,t.ya) +B.ahP=new A.eV(65136,65276,B.ad,t.ya) +B.ahQ=new A.eV(65277,65535,B.r,t.ya) +B.ahR=new A.eV(65,90,B.r,t.ya) +B.ahS=new A.eV(768,1424,B.r,t.ya) +B.ahT=new A.eV(8206,8206,B.r,t.ya) +B.ahU=new A.eV(8207,8207,B.ad,t.ya) +B.ahV=new A.eV(97,122,B.r,t.ya) +B.tj=new A.Tp(!1) +B.ahW=new A.Tp(!0) +B.ahZ=new A.dp("Screen",t.kK) +B.ai_=new A.dp("actions_close_icon",t.kK) +B.ai0=new A.dp("actions_icon",t.kK) +B.ai1=new A.dp("device_custom_toggle",t.kK) +B.ai2=new A.dp("device_preview_close_icon",t.kK) +B.ai3=new A.dp("device_preview_icon",t.kK) +B.ai4=new A.dp("dismissible",t.kK) +B.ai5=new A.dp("frame",t.kK) +B.ai6=new A.dp("hide_frame_icon",t.kK) +B.ai7=new A.dp("properties_icon",t.kK) +B.ai8=new A.dp("rotate_icon",t.kK) +B.ai9=new A.dp("stories_close_icon",t.kK) +B.aia=new A.dp("stories_filter_field",t.kK) +B.aib=new A.dp("stories_icon",t.kK) +B.aic=new A.dp("story_pin_icon",t.kK) +B.HD=new A.wT(B.h,0,B.G,B.h) +B.tk=new A.wT(B.h,1,B.G,B.h) +B.lS=new A.aee(0,"triangles") +B.aid=new A.aee(2,"triangleFan") +B.tl=new A.aef(0,"up") +B.aie=new A.Ts(0,"undefined") +B.HE=new A.Ts(1,"forward") +B.aif=new A.Ts(2,"backward") +B.aig=new A.aej(0,"unfocused") +B.aih=new A.aej(1,"focused") +B.fY=new A.tN(0,0) +B.HF=new A.tN(-2,-2) +B.iH=new A.d0(0,t.XR) +B.lT=new A.d0(24,t.XR) +B.a8P=new A.kM(B.C) +B.fZ=new A.d0(B.a8P,t.dy) +B.a7R=new A.Q(1/0,1/0) +B.h_=new A.d0(B.a7R,t.W7) +B.cv=new A.d0(B.B,t.De) +B.aii=new A.d0(B.B,t.rc) +B.lU=new A.d0(B.Gr,t.W7) +B.a8e=new A.Q(64,40) +B.HG=new A.d0(B.a8e,t.W7) +B.lV=new A.d0(B.fd,t.mD) +B.lW=new A.dM(3,"dragged") +B.ao=new A.dM(4,"selected") +B.K=new A.dM(6,"disabled") +B.cw=new A.dM(7,"error") +B.ap=new A.aXL(0,"start") +B.iN=new A.aeH(0,"start") +B.HI=new A.aeH(2,"center") +B.aik=new A.fl("'",0,"SINGLE_QUOTE") +B.ail=new A.mN(5,"DOCUMENT") +B.tu=new A.mN(6,"DOCUMENT_FRAGMENT") +B.b6=new A.IR(0,"forward") +B.m3=new A.IR(1,"reverse") +B.akz=new A.aZZ(0,"elevated") +B.aio=new A.Ue(0,"checkbox") +B.aip=new A.Ue(1,"radio") +B.aiq=new A.Ue(2,"toggle") +B.air=new A.b_8(0,"material") +B.akA=new A.b_9(0,"material") +B.ais=new A.Ui(0,"inside") +B.ait=new A.Ui(1,"higher") +B.aiu=new A.Ui(2,"lower") +B.SB=new A.n(67108864) +B.Yv=A.b(s([B.SB,B.B]),t.O) +B.aiv=new A.oT(B.Yv) +B.aiw=new A.oT(null) +B.tv=new A.CK(0,"backButton") +B.tw=new A.CK(1,"nextButton") +B.aiy=new A.qm(0,"size") +B.HQ=new A.qm(1,"images") +B.HR=new A.qm(2,"shaders") +B.HS=new A.qm(3,"paints") +B.aiz=new A.qm(4,"paths") +B.aiA=new A.qm(5,"textPositions") +B.aiB=new A.qm(6,"text") +B.d4=new A.qm(7,"commands") +B.aiC=new A.ahP(null) +B.h1=new A.aie(0,"horizontal") +B.h2=new A.aie(1,"vertical") +B.e7=new A.UQ(0,"ready") +B.iP=new A.UR(0,"ready") +B.HT=new A.UQ(1,"possible") +B.ty=new A.UR(1,"possible") +B.iQ=new A.UQ(2,"accepted") +B.m4=new A.UR(2,"accepted") +B.al=new A.J7(0,"initial") +B.eZ=new A.J7(1,"active") +B.aiH=new A.J7(2,"inactive") +B.HU=new A.J7(3,"defunct") +B.h3=new A.V3(B.d_,"clickable") +B.aiO=new A.V3(B.rW,"textable") +B.aiP=new A.aiW(1,0,"forward") +B.aiQ=new A.aiW(-1,1,"backward") +B.tz=new A.Vb(0,"none") +B.aiR=new A.Vb(1,"forward") +B.aiS=new A.Vb(2,"reverse") +B.aiT=new A.aj4(1,"small") +B.aiU=new A.aj4(3,"extended") +B.tA=new A.CN(0,"ready") +B.m5=new A.CN(1,"possible") +B.HV=new A.CN(2,"accepted") +B.m6=new A.CN(3,"started") +B.aiV=new A.CN(4,"peaked") +B.aiZ=new A.aji(null) +B.aj2=new A.ajj(null) +B.aj0=new A.ajk(null) +B.aj_=new A.ajq(null) +B.aj1=new A.ajr(null) +B.aja=new A.ajs(null) +B.aiX=new A.ajt(null) +B.aiY=new A.aju(null) +B.aiW=new A.ajv(null) +B.aj8=new A.ajw(null) +B.aj9=new A.ajx(null) +B.aj7=new A.ajl(null) +B.aj5=new A.ajm(null) +B.aj6=new A.ajn(null) +B.aj4=new A.ajo(null) +B.aj3=new A.ajp(null) +B.m7=new A.Jg(0,"idle") +B.ajb=new A.Jg(1,"absorb") +B.m8=new A.Jg(2,"pull") +B.HW=new A.Jg(3,"recede") +B.f_=new A.x7(0,"pressed") +B.h4=new A.x7(1,"hover") +B.HX=new A.x7(2,"focus") +B.ajc=new A.b2G(0,"standard") +B.a9=new A.CR(0,"minWidth") +B.aa=new A.CR(1,"maxWidth") +B.ay=new A.CR(2,"minHeight") +B.aN=new A.CR(3,"maxHeight") +B.m9=new A.Jn(0,"unknown") +B.tB=new A.Jn(1,"add") +B.tC=new A.Jn(2,"remove") +B.ajo=new A.Jn(3,"move") +B.aq=new A.k2(1) +B.h5=new A.iz(0,"size") +B.HY=new A.iz(1,"orientation") +B.tD=new A.iz(11,"accessibleNavigation") +B.ajq=new A.iz(12,"invertColors") +B.HZ=new A.iz(13,"highContrast") +B.tE=new A.iz(16,"boldText") +B.h6=new A.iz(17,"navigationMode") +B.ma=new A.iz(18,"gestureSettings") +B.cy=new A.iz(2,"devicePixelRatio") +B.d6=new A.iz(4,"textScaler") +B.tF=new A.iz(5,"platformBrightness") +B.cM=new A.iz(6,"padding") +B.mb=new A.iz(7,"viewInsets") +B.ajr=new A.iz(9,"viewPadding") +B.tG=new A.xd(1/0,1/0,1/0,1/0,1/0,1/0) +B.ajs=new A.fm(B.ft,B.fl) +B.k1=new A.zV(1,"left") +B.ajt=new A.fm(B.ft,B.k1) +B.k2=new A.zV(2,"right") +B.aju=new A.fm(B.ft,B.k2) +B.ajv=new A.fm(B.ft,B.dh) +B.ajw=new A.fm(B.fu,B.fl) +B.ajx=new A.fm(B.fu,B.k1) +B.ajy=new A.fm(B.fu,B.k2) +B.ajz=new A.fm(B.fu,B.dh) +B.ajA=new A.fm(B.fv,B.fl) +B.ajB=new A.fm(B.fv,B.k1) +B.ajC=new A.fm(B.fv,B.k2) +B.ajD=new A.fm(B.fv,B.dh) +B.ajE=new A.fm(B.fw,B.fl) +B.ajF=new A.fm(B.fw,B.k1) +B.ajG=new A.fm(B.fw,B.k2) +B.ajH=new A.fm(B.fw,B.dh) +B.ajI=new A.fm(B.oR,B.dh) +B.ajJ=new A.fm(B.oS,B.dh) +B.ajK=new A.fm(B.oT,B.dh) +B.ajL=new A.fm(B.oU,B.dh) +B.ajO=new A.am7(null) +B.ajN=new A.am8(null) +B.ajM=new A.ama(null) +B.h7=new A.dY(0,0) +B.I_=new A.CW(0,1,"topLeft") +B.I0=new A.CW(1,2,"topRight") +B.I1=new A.CW(2,3,"bottomLeft") +B.I2=new A.CW(3,4,"bottomRight") +B.h8=new A.CW(-1,0,"root") +B.tH=new A.k4(1,"add") +B.I3=new A.k4(10,"remove") +B.ajR=new A.k4(11,"popping") +B.ajS=new A.k4(12,"removing") +B.tI=new A.k4(13,"dispose") +B.ajT=new A.k4(14,"disposing") +B.mc=new A.k4(15,"disposed") +B.ajU=new A.k4(2,"adding") +B.I4=new A.k4(3,"push") +B.I5=new A.k4(4,"pushReplace") +B.I6=new A.k4(5,"pushing") +B.ajV=new A.k4(6,"replace") +B.h9=new A.k4(7,"idle") +B.tJ=new A.k4(8,"pop") +B.md=new A.lK(0,"body") +B.tL=new A.lK(1,"appBar") +B.tM=new A.lK(10,"endDrawer") +B.me=new A.lK(11,"statusBar") +B.mf=new A.lK(2,"bodyScrim") +B.mg=new A.lK(3,"bottomSheet") +B.ha=new A.lK(4,"snackBar") +B.mh=new A.lK(5,"materialBanner") +B.tN=new A.lK(6,"persistentFooter") +B.tO=new A.lK(7,"bottomNavigationBar") +B.mi=new A.lK(8,"floatingActionButton") +B.tP=new A.lK(9,"drawer") +B.iR=new A.JR(0,"ready") +B.iS=new A.JR(1,"possible") +B.I8=new A.JR(2,"accepted") +B.mj=new A.JR(3,"started") +B.ajW=new A.oW(B.x,B.bb,B.dX,null,null) +B.a7T=new A.Q(100,0) +B.ajX=new A.oW(B.a7T,B.bb,B.dX,null,null) +B.akB=new A.b6R(0,"material") +B.p=new A.b6Y(0,"created") +B.tQ=new A.aqu(0,"trailing") +B.I9=new A.aqu(1,"leading") +B.tR=new A.JX(0,"idle") +B.ak1=new A.JX(1,"absorb") +B.tS=new A.JX(2,"pull") +B.tT=new A.JX(3,"recede") +B.Ia=new A.K3(0,"first") +B.ak2=new A.K3(1,"middle") +B.Ib=new A.K3(2,"last") +B.tU=new A.K3(3,"only") +B.ak3=new A.XS(B.jx,B.ek) +B.ak4=new A.arI(0,"minimize") +B.ak5=new A.arI(1,"maximize") +B.ak9=new A.at6(B.aE,A.bRh(),A.ac("at6<~(CB,br8,CB,~())>"))})();(function staticFields(){$.bhQ=null +$.eF=null +$.cp=A.bn("canvasKit") +$.ayf=A.bn("_instance") +$.bCs=A.D(t.N,A.ac("an")) +$.bpZ=!1 +$.bsi=null +$.btC=0 +$.bhW=!1 +$.p_=A.b([],t.kZ) +$.bf5=A.b([],t.no) +$.bf4=0 +$.bf3=0 +$.bq0=0 +$.b8M=0 +$.ue=A.b([],A.ac("v")) +$.bcQ=A.b([],t.nx) +$.k9=null +$.bFN=A.bn("_instance") +$.QZ=null +$.aUp=null +$.bqN=null +$.bqO=null +$.biH=A.b([],t.cD) +$.bsH=B.U6 +$.ud=A.b([],t.u) +$.Z7=B.vO +$.Kc=null +$.bfx=null +$.bok=0 +$.buC=null +$.buw=null +$.bs4=null +$.brz=0 +$.a9G=null +$.aG5=A.bn("_programCache") +$.bfb=0 +$.bfa=0 +$.aG4=null +$.bfc=null +$.bon=null +$.dd=null +$.RG=null +$.bsI=null +$.aTh=A.D(A.ac("C7"),A.ac("Id")) +$.b9k=null +$.bsL=-1 +$.bsK=-1 +$.bsM="" +$.bsJ="" +$.bsN=-1 +$.av1=A.D(t.N,t.e) +$.bss=null +$.bsT=1 +$.nK=null +$.b3e=null +$.Dg=A.b([],t.jl) +$.buy=null +$.boR=null +$.aOs=0 +$.GN=A.bPO() +$.bkK=null +$.bkJ=null +$.btU=null +$.btf=null +$.buz=null +$.bc5=null +$.bcv=null +$.biu=null +$.b5_=A.b([],A.ac("v?>")) +$.Kd=null +$.Z8=null +$.Z9=null +$.bi_=!1 +$.aK=B.aE +$.bqG="" +$.bqH=null +$.bsw=A.D(t.N,t.xd) +$.btb=1 +$.bsX=A.D(t.C_,t.e) +$.iB=A.b([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.t) +$.o_=A.b([],A.ac("v")) +$.E6=A.b([],t.W) +$.bmC=0 +$.aW5=A.D(t.N,t.hO) +$.bFa=A.bRa() +$.beU=0 +$.a3R=A.b([],A.ac("v")) +$.bnG=null +$.auN=0 +$.b8Z=null +$.bhU=!1 +$.hq=null +$.bhA=!0 +$.bhz=!1 +$.Cm=A.b([],A.ac("v")) +$.jN=null +$.Bg=null +$.bnD=0 +$.cN=null +$.abf=null +$.blw=0 +$.blv=A.D(t.S,t.I7) +$.ben=A.D(t.I7,t.S) +$.aSa=0 +$.f6=null +$.bqc=1 +$.b1=null +$.r0=null +$.yB=null +$.brD=1 +$.bg4=-9007199254740992 +$.b9a=A.b(["p","h1","h2","h3","h4","h5","h6","li","blockquote","pre","ol","ul","hr","table","thead","tbody","tr","section"],t.T) +$.blJ=0 +$.blK=0 +$.blL=20 +$.bqo=0 +$.bqp=0 +$.bqq=0 +$.bqs=0 +$.bqr=0 +$.bkA=null +$.bi2=A.C(t.N) +$.br7=A.cC(["true","yes","on","+","T","1"],t.N) +$.br6=A.cC(["false","no","off","-","F","0"],t.N) +$.bnA=0 +$.bRp=A.b([null,B.ea,B.mu,B.u6,B.u7,B.u8,B.u9,B.ua,B.mv,B.ub,B.mw,B.uc,B.ud,B.mx,B.ue,B.my,B.j_,null],A.ac("v")) +$.bGs=A.D(t.S,A.ac("ho")) +$.axr=!1 +$.bsm=null +$.b8X=null +$.aSF=null +$.bsR=null +$.c7=A.bn("_bindings") +$.xv=A.bn("_allocator") +$.bGD=A.D(t.S,A.ac("bZc")) +$.bQ7=A.D(A.ac("DH"),A.ac("LQ<~>")) +$.bKK=A.b3(["xx-small",10,"x-small",12,"small",14,"medium",18,"large",22,"x-large",26,"xx-large",32],t.N,t.V) +$.kb=A.D(t.B,t.S) +$.bfO=null})();(function lazyInitializers(){var s=hunkHelpers.lazyFinal,r=hunkHelpers.lazy +s($,"c1D","eb",()=>{var q="navigator" +return A.bSn(A.bGe(A.a4(A.a4(self.window,q),"vendor")),B.d.aZt(A.bEb(A.a4(self.window,q))))}) +s($,"c2t","hj",()=>A.bSp()) +s($,"bXb","biW",()=>A.Pc(8)) +s($,"c1H","avn",()=>A.a4(A.a4(A.b4(),"ClipOp"),"Intersect")) +s($,"c33","bzP",()=>{var q="FontSlant" +return A.b([A.a4(A.a4(A.b4(),q),"Upright"),A.a4(A.a4(A.b4(),q),"Italic")],t.A)}) +s($,"c34","bzQ",()=>{var q="FontWeight" +return A.b([A.a4(A.a4(A.b4(),q),"Thin"),A.a4(A.a4(A.b4(),q),"ExtraLight"),A.a4(A.a4(A.b4(),q),"Light"),A.a4(A.a4(A.b4(),q),"Normal"),A.a4(A.a4(A.b4(),q),"Medium"),A.a4(A.a4(A.b4(),q),"SemiBold"),A.a4(A.a4(A.b4(),q),"Bold"),A.a4(A.a4(A.b4(),q),"ExtraBold"),A.a4(A.a4(A.b4(),q),"ExtraBlack")],t.A)}) +s($,"c3f","bA_",()=>{var q="TextDirection" +return A.b([A.a4(A.a4(A.b4(),q),"RTL"),A.a4(A.a4(A.b4(),q),"LTR")],t.A)}) +s($,"c3c","bzY",()=>{var q="TextAlign" +return A.b([A.a4(A.a4(A.b4(),q),"Left"),A.a4(A.a4(A.b4(),q),"Right"),A.a4(A.a4(A.b4(),q),"Center"),A.a4(A.a4(A.b4(),q),"Justify"),A.a4(A.a4(A.b4(),q),"Start"),A.a4(A.a4(A.b4(),q),"End")],t.A)}) +s($,"c3g","bA0",()=>{var q="TextHeightBehavior" +return A.b([A.a4(A.a4(A.b4(),q),"All"),A.a4(A.a4(A.b4(),q),"DisableFirstAscent"),A.a4(A.a4(A.b4(),q),"DisableLastDescent"),A.a4(A.a4(A.b4(),q),"DisableAll")],t.A)}) +s($,"c38","bzU",()=>{var q="RectHeightStyle" +return A.b([A.a4(A.a4(A.b4(),q),"Tight"),A.a4(A.a4(A.b4(),q),"Max"),A.a4(A.a4(A.b4(),q),"IncludeLineSpacingMiddle"),A.a4(A.a4(A.b4(),q),"IncludeLineSpacingTop"),A.a4(A.a4(A.b4(),q),"IncludeLineSpacingBottom"),A.a4(A.a4(A.b4(),q),"Strut")],t.A)}) +s($,"c39","bzV",()=>{var q="RectWidthStyle" +return A.b([A.a4(A.a4(A.b4(),q),"Tight"),A.a4(A.a4(A.b4(),q),"Max")],t.A)}) +s($,"c3i","bA1",()=>{var q="VertexMode" +return A.b([A.a4(A.a4(A.b4(),q),"Triangles"),A.a4(A.a4(A.b4(),q),"TrianglesStrip"),A.a4(A.a4(A.b4(),q),"TriangleFan")],t.A)}) +s($,"c37","bzT",()=>{var q="PointMode" +return A.b([A.a4(A.a4(A.b4(),q),"Points"),A.a4(A.a4(A.b4(),q),"Lines"),A.a4(A.a4(A.b4(),q),"Polygon")],t.A)}) +s($,"c31","bjL",()=>A.b([A.a4(A.a4(A.b4(),"ClipOp"),"Difference"),A.a4(A.a4(A.b4(),"ClipOp"),"Intersect")],t.A)) +s($,"c32","Zt",()=>{var q="FillType" +return A.b([A.a4(A.a4(A.b4(),q),"Winding"),A.a4(A.a4(A.b4(),q),"EvenOdd")],t.A)}) +s($,"c30","bzO",()=>{var q="BlurStyle" +return A.b([A.a4(A.a4(A.b4(),q),"Normal"),A.a4(A.a4(A.b4(),q),"Solid"),A.a4(A.a4(A.b4(),q),"Outer"),A.a4(A.a4(A.b4(),q),"Inner")],t.A)}) +s($,"c3a","bzW",()=>{var q="StrokeCap" +return A.b([A.a4(A.a4(A.b4(),q),"Butt"),A.a4(A.a4(A.b4(),q),"Round"),A.a4(A.a4(A.b4(),q),"Square")],t.A)}) +s($,"c35","bzR",()=>{var q="PaintStyle" +return A.b([A.a4(A.a4(A.b4(),q),"Fill"),A.a4(A.a4(A.b4(),q),"Stroke")],t.A)}) +s($,"c3_","Ks",()=>{var q="BlendMode" +return A.b([A.a4(A.a4(A.b4(),q),"Clear"),A.a4(A.a4(A.b4(),q),"Src"),A.a4(A.a4(A.b4(),q),"Dst"),A.a4(A.a4(A.b4(),q),"SrcOver"),A.a4(A.a4(A.b4(),q),"DstOver"),A.a4(A.a4(A.b4(),q),"SrcIn"),A.a4(A.a4(A.b4(),q),"DstIn"),A.a4(A.a4(A.b4(),q),"SrcOut"),A.a4(A.a4(A.b4(),q),"DstOut"),A.a4(A.a4(A.b4(),q),"SrcATop"),A.a4(A.a4(A.b4(),q),"DstATop"),A.a4(A.a4(A.b4(),q),"Xor"),A.a4(A.a4(A.b4(),q),"Plus"),A.a4(A.a4(A.b4(),q),"Modulate"),A.a4(A.a4(A.b4(),q),"Screen"),A.a4(A.a4(A.b4(),q),"Overlay"),A.a4(A.a4(A.b4(),q),"Darken"),A.a4(A.a4(A.b4(),q),"Lighten"),A.a4(A.a4(A.b4(),q),"ColorDodge"),A.a4(A.a4(A.b4(),q),"ColorBurn"),A.a4(A.a4(A.b4(),q),"HardLight"),A.a4(A.a4(A.b4(),q),"SoftLight"),A.a4(A.a4(A.b4(),q),"Difference"),A.a4(A.a4(A.b4(),q),"Exclusion"),A.a4(A.a4(A.b4(),q),"Multiply"),A.a4(A.a4(A.b4(),q),"Hue"),A.a4(A.a4(A.b4(),q),"Saturation"),A.a4(A.a4(A.b4(),q),"Color"),A.a4(A.a4(A.b4(),q),"Luminosity")],t.A)}) +s($,"c3b","bzX",()=>{var q="StrokeJoin" +return A.b([A.a4(A.a4(A.b4(),q),"Miter"),A.a4(A.a4(A.b4(),q),"Round"),A.a4(A.a4(A.b4(),q),"Bevel")],t.A)}) +s($,"c3h","Dk",()=>{var q="TileMode" +return A.b([A.a4(A.a4(A.b4(),q),"Clamp"),A.a4(A.a4(A.b4(),q),"Repeat"),A.a4(A.a4(A.b4(),q),"Mirror"),A.a4(A.a4(A.b4(),q),"Decal")],t.A)}) +s($,"c1O","bjE",()=>{var q="FilterMode",p="MipmapMode",o="Linear",n=t.e +return A.b3([B.av,n.a({filter:A.a4(A.a4(A.b4(),q),"Nearest"),mipmap:A.a4(A.a4(A.b4(),p),"None")}),B.fi,n.a({filter:A.a4(A.a4(A.b4(),q),o),mipmap:A.a4(A.a4(A.b4(),p),"None")}),B.jP,n.a({filter:A.a4(A.a4(A.b4(),q),o),mipmap:A.a4(A.a4(A.b4(),p),o)}),B.hA,n.a({B:A.bmk(0.3333333333333333),C:A.bmk(0.3333333333333333)})],A.ac("z9"),n)}) +s($,"c1Y","bz_",()=>{var q=A.Pc(2) +q[0]=0 +q[1]=1 +return q}) +s($,"c2W","avt",()=>A.bTR(4)) +s($,"c3e","bzZ",()=>{var q="DecorationStyle" +return A.b([A.a4(A.a4(A.b4(),q),"Solid"),A.a4(A.a4(A.b4(),q),"Double"),A.a4(A.a4(A.b4(),q),"Dotted"),A.a4(A.a4(A.b4(),q),"Dashed"),A.a4(A.a4(A.b4(),q),"Wavy")],t.A)}) +s($,"c3d","bjM",()=>{var q="TextBaseline" +return A.b([A.a4(A.a4(A.b4(),q),"Alphabetic"),A.a4(A.a4(A.b4(),q),"Ideographic")],t.A)}) +s($,"c36","bzS",()=>{var q="PlaceholderAlignment" +return A.b([A.a4(A.a4(A.b4(),q),"Baseline"),A.a4(A.a4(A.b4(),q),"AboveBaseline"),A.a4(A.a4(A.b4(),q),"BelowBaseline"),A.a4(A.a4(A.b4(),q),"Top"),A.a4(A.a4(A.b4(),q),"Bottom"),A.a4(A.a4(A.b4(),q),"Middle")],t.A)}) +r($,"bPs","byV",()=>A.bOD()) +r($,"c2B","bzr",()=>A.hh().gWO()+"roboto/v20/KFOmCnqEu92Fr1Me5WZLCzYlKw.ttf") +r($,"c1P","byT",()=>A.bOo(A.D6(A.D6(A.biL(),"window"),"FinalizationRegistry"),A.bmO(new A.b92()))) +r($,"c4q","bAD",()=>new A.aLD()) +s($,"c1W","byY",()=>A.bHA(B.a_3)) +s($,"c1V","avq",()=>A.aK0(A.bCI($.byY()))) +s($,"c1G","byP",()=>A.bpG(A.a4(A.b4(),"ParagraphBuilder"))) +s($,"bXk","bvr",()=>A.bsd(A.D6(A.D6(A.D6(A.biL(),"window"),"flutterCanvasKit"),"Paint"))) +s($,"bXj","bvq",()=>{var q=A.bsd(A.D6(A.D6(A.D6(A.biL(),"window"),"flutterCanvasKit"),"Paint")) +A.bKa(q,0) +return q}) +s($,"c4H","bAM",()=>{var q=t.N,p=A.ac("+breaks,graphemes,words(Ir,Ir,Ir)"),o=A.bfG(B.Fd.a,q,p),n=A.bfG(B.Fe.a,q,p) +return new A.anZ(A.bfG(B.Ff.a,q,p),n,o)}) +s($,"c1U","byX",()=>A.b3([B.wY,A.bil("grapheme"),B.wZ,A.bil("word")],A.ac("O1"),t.e)) +s($,"c3u","bAa",()=>A.btA()) +s($,"bY1","cF",()=>{var q,p=A.a4(self.window,"screen") +p=p==null?null:A.a4(p,"width") +if(p==null)p=0 +q=A.a4(self.window,"screen") +q=q==null?null:A.a4(q,"height") +return new A.a3d(A.bK6(p,q==null?0:q))}) +s($,"c3t","bA9",()=>{var q=A.a4(self.window,"trustedTypes") +q.toString +return A.bOs(q,"createPolicy",A.bKD("flutter-engine"),t.e.a({createScriptURL:A.bmO(new A.b9A())}))}) +r($,"c3B","bAf",()=>self.window.FinalizationRegistry!=null) +r($,"c3D","bdz",()=>self.window.OffscreenCanvas!=null) +s($,"c1Q","byU",()=>B.aC.e3(A.b3(["type","fontsChange"],t.N,t.z))) +r($,"bFp","bvX",()=>A.F3()) +s($,"bX3","biV",()=>{var q=new A.I_() +q.d=B.eS +q.e=B.iq +q.a=B.bF +return q}) +s($,"c1b","bjA",()=>A.Pc(8)) +s($,"c4i","bk0",()=>{var q=A.bty() +A.blS(q,"width",0) +A.blS(q,"height",0) +A.blN(A.a4(q,"style"),"absolute") +return q}) +s($,"c18","bdt",()=>A.Pc(4)) +r($,"c2V","Kr",()=>new A.aSA()) +s($,"c0J","byf",()=>A.boe(A.b([0,1,2,2,3,0],t.t))) +s($,"c3j","bA2",()=>A.bis(A.bis(A.bis(self.window,"Image"),"prototype"),"decode")!=null) +s($,"c1B","byN",()=>A.bCW("ftyp")) +s($,"c2_","bjF",()=>8589934852) +s($,"c20","bz1",()=>8589934853) +s($,"c21","bjG",()=>8589934848) +s($,"c22","bz2",()=>8589934849) +s($,"c26","bjI",()=>8589934850) +s($,"c27","bz5",()=>8589934851) +s($,"c24","bjH",()=>8589934854) +s($,"c25","bz4",()=>8589934855) +s($,"c2c","bza",()=>458978) +s($,"c2d","bzb",()=>458982) +s($,"c4g","bjZ",()=>458976) +s($,"c4h","bk_",()=>458980) +s($,"c2g","bze",()=>458977) +s($,"c2h","bzf",()=>458981) +s($,"c2e","bzc",()=>458979) +s($,"c2f","bzd",()=>458983) +s($,"c23","bz3",()=>A.b3([$.bjF(),new A.b9b(),$.bz1(),new A.b9c(),$.bjG(),new A.b9d(),$.bz2(),new A.b9e(),$.bjI(),new A.b9f(),$.bz5(),new A.b9g(),$.bjH(),new A.b9h(),$.bz4(),new A.b9i()],t.S,A.ac("F(pk)"))) +s($,"c4A","bdD",()=>A.bRZ(new A.bcS())) +r($,"bYE","bdm",()=>new A.a4Q(A.b([],A.ac("v<~(F)>")),A.beI(self.window,"(forced-colors: active)"))) +s($,"bY2","bF",()=>A.bEJ()) +s($,"bWS","biT",()=>new A.aZc(B.d8,A.b([],A.ac("v<~(nW)>")))) +r($,"bZQ","bdp",()=>{var q=t.N,p=t.S +q=new A.aNI(A.D(q,t._8),A.D(p,t.e),A.C(q),A.D(p,q)) +q.aYp("_default_document_create_element_visible",A.bsu()) +q.Z2("_default_document_create_element_invisible",A.bsu(),!1) +return q}) +r($,"bZR","bwS",()=>new A.aNK($.bdp())) +s($,"bZS","bwT",()=>new A.aQV()) +s($,"bZT","bji",()=>new A.a0T()) +s($,"bZU","qD",()=>new A.b2q(A.D(t.S,A.ac("JH")))) +s($,"c2A","G",()=>(A.hh().gai_()!=null?A.hh().gai_()==="canvaskit":A.bTs())?new A.Ll(A.bCr(),A.bKJ(!1),A.D(t.S,A.ac("IC"))):new A.a4Z()) +r($,"c3C","bjS",()=>{var q=self.window.ImageDecoder +q=(q==null?null:q)!=null&&A.bRr()===B.ec +return q}) +s($,"c4t","bAE",()=>A.aUk(65532)) +s($,"bYK","bwd",()=>A.bw("[a-z0-9\\s]+",!1,!1,!1)) +s($,"bYL","bwe",()=>A.bw("\\b\\d",!0,!1,!1)) +s($,"c4M","Dm",()=>A.bE4(A.Da(0,0))) +s($,"c0_","bxO",()=>{var q=A.bRY("flt-ruler-host"),p=new A.aaR(q),o=A.a4(q,"style") +A.blN(o,"fixed") +A.bE1(o,"hidden") +A.bE_(o,"hidden") +A.bE0(o,"0") +A.bDZ(o,"0") +A.bE2(o,"0") +A.bDY(o,"0") +A.bOr($.bF().gaTp().ghv().c,"appendChild",q) +A.bUP(p.geL()) +return p}) +s($,"c3o","bjO",()=>A.bLP(A.b([B.ahR,B.ahV,B.ahE,B.ahF,B.ahH,B.ahS,B.ahC,B.ahD,B.ahG,B.ahT,B.ahU,B.ahB,B.ahI,B.ahJ,B.ahK,B.ahL,B.ahM,B.ahN,B.ahO,B.ahP,B.ahQ],A.ac("v>")),null,A.ac("qc?"))) +r($,"c4T","Zx",()=>A.bLQ("000a!E000b000cF000d!D000w!R000y!A0013!B0018!M001a!N001c001lO001m!L001n!M001t002iK002n!P002p003eK003p!F004q!K004t!I0051!K0053!L0056!K005c005yK0060006uK006w00k7K00ke00lbK00lc00ofG00og00okK00om00onK00oq00otK00ou!M00ov!K00p2!K00p3!L00p400p6K00p8!K00pa00ptK00pv00s5K00s700w1K00w300w9G00wa010vK010x011yK01210124K0126!K0127!L0128013cK013d!M013e!K013l014tG014v!G014x014yG01500151G0153!G015c0162C0167016aC016b!K016c!L016o016tI01700171M0174017eG017g!I017k018qK018r019bG019c019lO019n!O019o!M019q019rK019s!G019t01cjK01cl!K01cm01csG01ct!I01cv01d0G01d101d2K01d301d4G01d601d9G01da01dbK01dc01dlO01dm01doK01dr!K01e7!I01e8!K01e9!G01ea01f3K01f401fuG01fx01idK01ie01ioG01ip!K01j401jdO01je01kaK01kb01kjG01kk01klK01ko!M01kq!K01kt!G01kw01lhK01li01llG01lm!K01ln01lvG01lw!K01lx01lzG01m0!K01m101m5G01mo01ncK01nd01nfG01nk01nuK01pc01pwK01py01qfK01qr01r5G01r6!I01r701s3G01s401tlK01tm01toG01tp!K01tq01u7G01u8!K01u901ufG01ug01upK01uq01urG01uu01v3O01v501vkK01vl01vnG01vp01vwK01vz01w0K01w301woK01wq01wwK01wy!K01x201x5K01x8!G01x9!K01xa01xgG01xj01xkG01xn01xpG01xq!K01xz!G01y401y5K01y701y9K01ya01ybG01ye01ynO01yo01ypK01z0!K01z2!G01z501z7G01z901zeK01zj01zkK01zn0208K020a020gK020i020jK020l020mK020o020pK020s!G020u020yG02130214G02170219G021d!G021l021oK021q!K021y0227O02280229G022a022cK022d!G022p022rG022t0231K02330235K0237023sK023u0240K02420243K02450249K024c!G024d!K024e024lG024n024pG024r024tG024w!K025c025dK025e025fG025i025rO0261!K02620267G0269026bG026d026kK026n026oK026r027cK027e027kK027m027nK027p027tK027w!G027x!K027y0284G02870288G028b028dG028l028nG028s028tK028v028xK028y028zG0292029bO029d!K029u!G029v!K029x02a2K02a602a8K02aa02adK02ah02aiK02ak!K02am02anK02ar02asK02aw02ayK02b202bdK02bi02bmG02bq02bsG02bu02bxG02c0!K02c7!G02cm02cvO02dc02dgG02dh02doK02dq02dsK02du02egK02ei02exK02f1!K02f202f8G02fa02fcG02fe02fhG02fp02fqG02fs02fuK02g002g1K02g202g3G02g602gfO02gw!K02gx02gzG02h102h8K02ha02hcK02he02i0K02i202ibK02id02ihK02ik!G02il!K02im02isG02iu02iwG02iy02j1G02j902jaG02ji!K02jk02jlK02jm02jnG02jq02jzO02k102k2K02kg02kjG02kk02ksK02ku02kwK02ky02m2K02m302m4G02m5!K02m602mcG02me02mgG02mi02mlG02mm!K02ms02muK02mv!G02n302n5K02n602n7G02na02njO02nu02nzK02o102o3G02o502omK02oq02pdK02pf02pnK02pp!K02ps02pyK02q2!G02q702qcG02qe!G02qg02qnG02qu02r3O02r602r7G02sx!G02t002t6G02tj02tqG02ts02u1O02wh!G02wk02wsG02x402x9G02xc02xlO02yo!K02zc02zdG02zk02ztO0305!G0307!G0309!G030e030fG030g030nK030p031oK031t032cG032e032fG032g032kK032l032vG032x033wG0346!G036z037iG037k037tO03860389G038e038gG038i038kG038n038tG038x0390G039e039pG039r!G039s03a1O03a203a5G03a803b9K03bb!K03bh!K03bk03cqK03cs03m0K03m203m5K03m803meK03mg!K03mi03mlK03mo03nsK03nu03nxK03o003owK03oy03p1K03p403paK03pc!K03pe03phK03pk03pyK03q003rkK03rm03rpK03rs03tmK03tp03trG03uo03v3K03vk03xxK03y003y5K03y904fgK04fj04fzK04g0!R04g104gqK04gw04iyK04j204jcK04jk04jwK04jy04k1K04k204k4G04kg04kxK04ky04l0G04lc04ltK04lu04lvG04m804mkK04mm04moK04mq04mrG04ok04pfG04pp!G04ps04q1O04qz04r1G04r2!I04r404rdO04rk04u0K04u804ucK04ud04ueG04uf04vcK04vd!G04ve!K04vk04xhK04xs04ymK04yo04yzG04z404zfG04zq04zzO053k053tO054w055iK055j055nG0579057iG057k058cG058f!G058g058pO058w0595O059s05a8G05c005c4G05c505dfK05dg05dwG05dx05e3K05e805ehO05ez05f7G05fk05fmG05fn05ggK05gh05gtG05gu05gvK05gw05h5O05h605idK05ie05irG05j405k3K05k405knG05kw05l5O05l905lbK05lc05llO05lm05mlK05mo05mwK05n405oaK05od05ofK05ow05oyG05p005pkG05pl05poK05pp!G05pq05pvK05pw!G05px05pyK05pz05q1G05q2!K05q805vjK05vk05x5G05x705xbG05xc0651K06540659K065c066dK066g066lK066o066vK066x!K066z!K0671!K0673067xK0680069gK069i069oK069q!K069u069wK069y06a4K06a806abK06ae06ajK06ao06b0K06b606b8K06ba06bgK06bk06bqR06bs06buR06bw!G06bx!Q06by06bzI06c806c9N06ck!N06cn!L06co06cpF06cq06cuI06cv!P06db06dcP06dg!M06dw!P06e7!R06e806ecI06ee06enI06ep!K06f3!K06fk06fwK06hc06i8G06iq!K06iv!K06iy06j7K06j9!K06jd06jhK06jo!K06jq!K06js!K06ju06jxK06jz06k9K06kc06kfK06kl06kpK06ku!K06lc06mgK079207ahK08ow08q6K08q808riK08rk08v8K08vf08viK08vj08vlG08vm08vnK08w008x1K08x3!K08x9!K08xc08yvK08z3!K08zj!G08zk0906K090g090mK090o090uK090w0912K0914091aK091c091iK091k091qK091s091yK09200926K09280933G094f!K09hc!R09hh!K09ii09inG09ip09itJ09iz09j0K09ll09lmG09ln09loJ09ls09oaJ09oc09ofJ09ol09prK09pt09seK09sw09trK09v409vjJ0a1c0a2mJ0a2o0a53J0vls0wi4K0wk00wl9K0wlc0wssK0wsw0wtbK0wtc0wtlO0wtm0wtnK0wu80wviK0wvj0wvmG0wvo0wvxG0wvz0wwtK0wwu0wwvG0www0wz3K0wz40wz5G0wzs0x4vK0x4y0x56K0x6d0x6pK0x6q!G0x6r0x6tK0x6u!G0x6v0x6yK0x6z!G0x700x7mK0x7n0x7rG0x7w!G0x8g0x9vK0xa80xa9G0xaa0xbnK0xbo0xc5G0xcg0xcpO0xcw0xddG0xde0xdjK0xdn!K0xdp0xdqK0xdr!G0xds0xe1O0xe20xetK0xeu0xf1G0xf40xfqK0xfr0xg3G0xgg0xh8K0xhc0xhfG0xhg0xiqK0xir0xj4G0xjj!K0xjk0xjtO0xk5!G0xkg0xkpO0xkw0xm0K0xm10xmeG0xmo0xmqK0xmr!G0xms0xmzK0xn00xn1G0xn40xndO0xob0xodG0xps!G0xpu0xpwG0xpz0xq0G0xq60xq7G0xq9!G0xr40xreK0xrf0xrjG0xrm0xroK0xrp0xrqG0xs10xs6K0xs90xseK0xsh0xsmK0xsw0xt2K0xt40xtaK0xtc0xuxK0xv40xyaK0xyb0xyiG0xyk0xylG0xyo0xyxO0xz416lfK16ls16meK16mj16nvK1dkw1dl2K1dlf1dljK1dlp!C1dlq!G1dlr1dm0C1dm21dmeC1dmg1dmkC1dmm!C1dmo1dmpC1dmr1dmsC1dmu1dn3C1dn41dptK1dqr1e0tK1e1c1e33K1e361e4nK1e5s1e63K1e681e6nG1e6o!M1e6r!L1e6s!M1e741e7jG1e7n1e7oP1e8d1e8fP1e8g!M1e8i!N1e8k!M1e8l!L1e9c1e9gK1e9i1ed8K1edb!I1edj!N1edo!M1edq!N1eds1ee1O1ee2!L1ee3!M1ee91eeyK1ef3!P1ef51efuK1eg61ehpJ1ehq1ehrG1ehs1eimK1eiq1eivK1eiy1ej3K1ej61ejbK1eje1ejgK1ek91ekbI1ekg1ekrK1ekt1eliK1elk1em2K1em41em5K1em71emlK1emo1en1K1eo01ereK1etc1eusK1eyl!G1f281f30K1f341f4gK1f4w!G1f5s1f6nK1f711f7uK1f801f91K1f921f96G1f9c1fa5K1fa81fb7K1fbc1fbjK1fbl1fbpK1fcw1fh9K1fhc1fhlO1fhs1firK1fiw1fjvK1fk01fl3K1flc1fmrK1fr41fzqK1g001g0lK1g0w1g13K1g5c1g5hK1g5k!K1g5m1g6tK1g6v1g6wK1g70!K1g731g7pK1g801g8mK1g8w1g9qK1gbk1gc2K1gc41gc5K1gcg1gd1K1gdc1ge1K1gg01ghjK1ghq1ghrK1gjk!K1gjl1gjnG1gjp1gjqG1gjw1gjzG1gk01gk3K1gk51gk7K1gk91gl1K1gl41gl6G1glb!G1gm81gn0K1gn41gnwK1gow1gp3K1gp51gpwK1gpx1gpyG1gqo1gs5K1gsg1gt1K1gtc1gtuK1gu81gupK1gxs1gzsK1h1c1h2qK1h341h4iK1h4w1h5vK1h5w1h5zG1h681h6hO1hfk1hgpK1hgr1hgsG1hgw1hgxK1hj41hjwK1hk7!K1hkg1hl1K1hl21hlcG1ho01hokK1hpc1hpyK1hq81hqaG1hqb1hrrK1hrs1hs6G1ht21htbO1htr1htuG1htv1hv3K1hv41hveG1hvh!I1hvx!I1hw01hwoK1hww1hx5O1hxc1hxeG1hxf1hyeK1hyf1hysG1hyu1hz3O1hz8!K1hz91hzaG1hzb!K1hzk1i0iK1i0j!G1i0m!K1i0w1i0yG1i0z1i2aK1i2b1i2oG1i2p1i2sK1i2x1i30G1i321i33G1i341i3dO1i3e!K1i3g!K1i4g1i4xK1i4z1i5nK1i5o1i5zG1i66!G1i801i86K1i88!K1i8a1i8dK1i8f1i8tK1i8v1i94K1i9c1iamK1ian1iayG1ib41ibdO1ibk1ibnG1ibp1ibwK1ibz1ic0K1ic31icoK1icq1icwK1icy1iczK1id11id5K1id71id8G1id9!K1ida1idgG1idj1idkG1idn1idpG1ids!K1idz!G1ie51ie9K1iea1iebG1iee1iekG1ieo1iesG1iio1ik4K1ik51ikmG1ikn1ikqK1ikw1il5O1ila!G1ilb1ildK1im81injK1ink1io3G1io41io5K1io7!K1iog1iopO1itc1iumK1iun1iutG1iuw1iv4G1ivs1ivvK1ivw1ivxG1iww1iy7K1iy81iyoG1iys!K1iz41izdO1j0g1j1mK1j1n1j1zG1j20!K1j281j2hO1j4t1j57G1j5c1j5lO1jb41jcbK1jcc1jcqG1jfk1jhbK1jhc1jhlO1ji71jieK1jih!K1jik1jirK1jit1jiuK1jiw1jjjK1jjk1jjpG1jjr1jjsG1jjv1jjyG1jjz!K1jk0!G1jk1!K1jk21jk3G1jkg1jkpO1jmo1jmvK1jmy1jo0K1jo11jo7G1joa1jogG1joh!K1joj!K1jok!G1jpc!K1jpd1jpmG1jpn1jqqK1jqr1jqxG1jqy!K1jqz1jr2G1jrb!G1jrk!K1jrl1jrvG1jrw1jt5K1jt61jtlG1jtp!K1juo1jw8K1k3k1k3sK1k3u1k4uK1k4v1k52G1k541k5bG1k5c!K1k5s1k61O1k6q1k7jK1k7m1k87G1k891k8mG1kao1kauK1kaw1kaxK1kaz1kc0K1kc11kc6G1kca!G1kcc1kcdG1kcf1kclG1kcm!K1kcn!G1kcw1kd5O1kdc1kdhK1kdj1kdkK1kdm1kehK1kei1kemG1keo1kepG1ker1kevG1kew!K1kf41kfdO1ko01koiK1koj1komG1kts!K1kw01lllK1log1lriK1ls01lxfK1o1s1oviK1ovk1ovsI1s001sg6K1z401zjsK1zk01zkuK1zkw1zl5O1zo01zotK1zow1zp0G1zpc1zqnK1zqo1zquG1zr41zr7K1zrk1zrtO1zs31zsnK1zst1ztbK20cg20e7K20hs20juK20jz!G20k0!K20k120ljG20lr20luG20lv20m7K20o020o1K20o3!K20o4!G20og20ohG2dc0!J2dlw2dlzJ2fpc2fsaK2fsg2fssK2fsw2ft4K2ftc2ftlK2ftp2ftqG2fts2ftvI2jxh2jxlG2jxp2jxuG2jxv2jy2I2jy32jyaG2jyd2jyjG2jze2jzhG2k3m2k3oG2kg02kicK2kie2kkcK2kke2kkfK2kki!K2kkl2kkmK2kkp2kksK2kku2kl5K2kl7!K2kl92klfK2klh2kn9K2knb2kneK2knh2knoK2knq2knwK2kny2kopK2kor2kouK2kow2kp0K2kp2!K2kp62kpcK2kpe2kytK2kyw2kzkK2kzm2l0aK2l0c2l16K2l182l1wK2l1y2l2sK2l2u2l3iK2l3k2l4eK2l4g2l54K2l562l60K2l622l6qK2l6s2l6zK2l722l8fO2lmo2lo6G2lob2lpoG2lpx!G2lqc!G2lqz2lr3G2lr52lrjG2mtc2mtiG2mtk2mu0G2mu32mu9G2mub2mucG2mue2muiG2n0g2n1oK2n1s2n1yG2n1z2n25K2n282n2hO2n2m!K2ncw2ne3K2ne42ne7G2ne82nehO2oe82ojoK2ok02ok6G2olc2on7K2on82oneG2onf!K2onk2ontO2pkw2pkzK2pl12plrK2plt2pluK2plw!K2plz!K2pm12pmaK2pmc2pmfK2pmh!K2pmj!K2pmq!K2pmv!K2pmx!K2pmz!K2pn12pn3K2pn52pn6K2pn8!K2pnb!K2pnd!K2pnf!K2pnh!K2pnj!K2pnl2pnmK2pno!K2pnr2pnuK2pnw2po2K2po42po7K2po92pocK2poe!K2pog2popK2por2pp7K2ppd2ppfK2pph2pplK2ppn2pq3K2q7k2q89K2q8g2q95K2q9c2qa1K2qcm2qdbH2qrf2qrjG2sc02sc9Ojny9!Ijnz4jo1rGjo5cjobzG",231,B.ZS,B.HH,A.ac("fZ"))) +s($,"bX7","bvl",()=>{var q=t.N +return new A.axM(A.b3(["birthday","bday","birthdayDay","bday-day","birthdayMonth","bday-month","birthdayYear","bday-year","countryCode","country","countryName","country-name","creditCardExpirationDate","cc-exp","creditCardExpirationMonth","cc-exp-month","creditCardExpirationYear","cc-exp-year","creditCardFamilyName","cc-family-name","creditCardGivenName","cc-given-name","creditCardMiddleName","cc-additional-name","creditCardName","cc-name","creditCardNumber","cc-number","creditCardSecurityCode","cc-csc","creditCardType","cc-type","email","email","familyName","family-name","fullStreetAddress","street-address","gender","sex","givenName","given-name","impp","impp","jobTitle","organization-title","language","language","middleName","additional-name","name","name","namePrefix","honorific-prefix","nameSuffix","honorific-suffix","newPassword","new-password","nickname","nickname","oneTimeCode","one-time-code","organizationName","organization","password","current-password","photo","photo","postalCode","postal-code","streetAddressLevel1","address-level1","streetAddressLevel2","address-level2","streetAddressLevel3","address-level3","streetAddressLevel4","address-level4","streetAddressLine1","address-line1","streetAddressLine2","address-line2","streetAddressLine3","address-line3","telephoneNumber","tel","telephoneNumberAreaCode","tel-area-code","telephoneNumberCountryCode","tel-country-code","telephoneNumberExtension","tel-extension","telephoneNumberLocal","tel-local","telephoneNumberLocalPrefix","tel-local-prefix","telephoneNumberLocalSuffix","tel-local-suffix","telephoneNumberNational","tel-national","transactionAmount","transaction-amount","transactionCurrency","transaction-currency","url","url","username","username"],q,q))}) +s($,"c4N","Zw",()=>new A.aGX()) +s($,"c3m","bA4",()=>A.Pc(4)) +s($,"c3k","bjN",()=>A.Pc(16)) +s($,"c3l","bA3",()=>A.bH4($.bjN())) +r($,"c4B","fK",()=>A.bE6(A.a4(self.window,"console"))) +r($,"bXS","bvI",()=>{var q=$.cF(),p=A.bKz(null,null,!1,t.V) +p=new A.a2w(q,q.gpw(0),p) +p.a8N() +return p}) +s($,"c1S","bdw",()=>new A.b97().$0()) +s($,"bXz","bj_",()=>A.bT_("_$dart_dartClosure")) +s($,"c4r","bdC",()=>B.aE.Zi(new A.bcM(),A.ac("an
    "))) +s($,"c0q","by1",()=>A.tI(A.aWQ({ +toString:function(){return"$receiver$"}}))) +s($,"c0r","by2",()=>A.tI(A.aWQ({$method$:null, +toString:function(){return"$receiver$"}}))) +s($,"c0s","by3",()=>A.tI(A.aWQ(null))) +s($,"c0t","by4",()=>A.tI(function(){var $argumentsExpr$="$arguments$" +try{null.$method$($argumentsExpr$)}catch(q){return q.message}}())) +s($,"c0w","by7",()=>A.tI(A.aWQ(void 0))) +s($,"c0x","by8",()=>A.tI(function(){var $argumentsExpr$="$arguments$" +try{(void 0).$method$($argumentsExpr$)}catch(q){return q.message}}())) +s($,"c0v","by6",()=>A.tI(A.bqB(null))) +s($,"c0u","by5",()=>A.tI(function(){try{null.$method$}catch(q){return q.message}}())) +s($,"c0z","bya",()=>A.tI(A.bqB(void 0))) +s($,"c0y","by9",()=>A.tI(function(){try{(void 0).$method$}catch(q){return q.message}}())) +s($,"c2m","bzj",()=>A.aUk(254)) +s($,"c28","bz6",()=>97) +s($,"c2k","bzh",()=>65) +s($,"c29","bz7",()=>122) +s($,"c2l","bzi",()=>90) +s($,"c2a","bz8",()=>48) +s($,"c0R","bjw",()=>A.bMq()) +s($,"bYo","Di",()=>A.ac("aM
    ").a($.bdC())) +s($,"c1k","byD",()=>A.a7r(4096)) +s($,"c1i","byB",()=>new A.b8e().$0()) +s($,"c1j","byC",()=>new A.b8d().$0()) +s($,"c0T","bjx",()=>A.bHD(A.eG(A.b([-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.t)))) +r($,"c0S","byj",()=>A.a7r(0)) +s($,"bXZ","bvN",()=>A.b3(["iso_8859-1:1987",B.cQ,"iso-ir-100",B.cQ,"iso_8859-1",B.cQ,"iso-8859-1",B.cQ,"latin1",B.cQ,"l1",B.cQ,"ibm819",B.cQ,"cp819",B.cQ,"csisolatin1",B.cQ,"iso-ir-6",B.cd,"ansi_x3.4-1968",B.cd,"ansi_x3.4-1986",B.cd,"iso_646.irv:1991",B.cd,"iso646-us",B.cd,"us-ascii",B.cd,"us",B.cd,"ibm367",B.cd,"cp367",B.cd,"csascii",B.cd,"ascii",B.cd,"csutf8",B.a1,"utf-8",B.a1],t.N,A.ac("z_"))) +s($,"c1l","avl",()=>A.bOe()) +s($,"c1g","byz",()=>A.bw("^[\\-\\.0-9A-Z_a-z~]*$",!0,!1,!1)) +s($,"c1h","byA",()=>typeof URLSearchParams=="function") +s($,"c1R","i0",()=>A.mR(B.agP)) +s($,"c08","fJ",()=>{A.bII() +return $.aOs}) +s($,"c2C","bzs",()=>A.bON()) +s($,"bXv","bvw",()=>({})) +s($,"bXP","bj3",()=>B.d.JL(A.bet(),"Opera",0)) +s($,"bXO","bvG",()=>!$.bj3()&&B.d.JL(A.bet(),"Trident/",0)) +s($,"bXN","bvF",()=>B.d.JL(A.bet(),"Firefox",0)) +s($,"bXM","bvE",()=>"-"+$.bvH()+"-") +s($,"bXQ","bvH",()=>{if($.bvF())var q="moz" +else if($.bvG())q="ms" +else q=$.bj3()?"o":"webkit" +return q}) +s($,"bY_","hi",()=>J.bBk(A.bCp(A.boe(A.b([1],t.t)).buffer,0,null),0)===1?B.n:B.hd) +s($,"c3E","avu",()=>new A.ayt(A.D(t.N,A.ac("tT")))) +r($,"c2x","bdy",()=>B.Kv) +s($,"c4u","bAF",()=>new A.aNL()) +s($,"bWY","bvc",()=>A.a7r(0)) +s($,"bWX","bvb",()=>A.bfW(0)) +r($,"bWT","bv9",()=>A.bkB(null,"assets/")) +s($,"bWW","biU",()=>new A.B()) +r($,"bC4","bva",()=>{var q=new A.awT(A.D(t.N,A.ac("cY"))) +q.OT($.biU()) +return q}) +s($,"bWI","bv1",()=>A.ber("small","Small",B.ar,B.bP,B.bP,B.a83)) +s($,"bWG","bv_",()=>A.ber("medium","Medium",B.ar,B.bP,B.bP,B.a87)) +s($,"bWE","buZ",()=>A.ber("big","Big",B.ar,B.bP,B.bP,B.a8c)) +s($,"bWJ","bv2",()=>A.aAV("small","Small",B.ar,B.bP,B.bP,B.a8h)) +s($,"bWH","bv0",()=>A.aAV("medium","Medium",B.ar,B.bP,B.bP,B.a7U)) +s($,"bWF","biS",()=>A.aAV("large","Large",B.ar,B.bP,B.bP,B.a7W)) +s($,"c3X","bAs",()=>A.kT(B.aiZ,B.a8l,B.Tq,"OnePlus 8 Pro",4,B.UG,B.Un,$.bzw(),B.Gp)) +s($,"c2D","bzw",()=>{var q=A.ky() +q.a4(0,30.3263,75.7513) +q.l(21.7354,91.0915,21.7354,111.551,21.7354,152.469) +q.q(0,21.7354,1708.02) +q.l(21.7354,1748.94,21.7354,1769.4,30.3263,1784.74) +q.l(36.3978,1795.58,45.3492,1804.53,56.1908,1810.6) +q.l(71.531,1819.19,91.9901,1819.19,132.908,1819.19) +q.q(0,719.093,1819.19) +q.l(760.011,1819.19,780.47,1819.19,795.81,1810.6) +q.l(806.652,1804.53,815.603,1795.58,821.675,1784.74) +q.l(830.266,1769.4,830.266,1748.94,830.266,1708.02) +q.q(0,830.266,152.469) +q.l(830.266,111.551,830.266,91.0915,821.675,75.7513) +q.l(815.603,64.9098,806.652,55.9584,795.81,49.8868) +q.l(780.47,41.2959,760.011,41.2959,719.093,41.2959) +q.q(0,132.908,41.2959) +q.l(91.9901,41.2959,71.531,41.2959,56.1908,49.8868) +q.l(45.3492,55.9584,36.3978,64.9098,30.3263,75.7513) +q.T(0) +q.a4(0,130.47,88.7347) +q.l(130.47,100.738,120.739,110.469,108.736,110.469) +q.l(96.7319,110.469,87.001,100.738,87.001,88.7347) +q.l(87.001,76.731,96.7319,67,108.736,67) +q.l(120.739,67,130.47,76.731,130.47,88.7347) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c3Y","bAj",()=>A.kT(B.aj2,B.a8q,B.Tn,"Samsung Galaxy A50",2.625,B.w6,B.w2,$.bzA(),B.a89)) +s($,"c2E","bzA",()=>{var q=A.ky() +q.a4(0,40.1294,87.1001) +q.l(34.1228,101.601,34.1228,119.985,34.1228,156.752) +q.q(0,34.1228,1626.17) +q.l(34.1228,1662.93,34.1228,1681.32,40.1294,1695.82) +q.l(48.1382,1715.15,63.4997,1730.52,82.8347,1738.52) +q.l(97.3359,1744.53,115.719,1744.53,152.486,1744.53) +q.q(0,709.115,1744.53) +q.l(745.882,1744.53,764.266,1744.53,778.767,1738.52) +q.l(798.102,1730.52,813.464,1715.15,821.472,1695.82) +q.l(827.479,1681.32,827.479,1662.93,827.479,1626.17) +q.q(0,827.479,156.752) +q.l(827.479,119.985,827.479,101.601,821.472,87.1001) +q.l(813.464,67.7651,798.102,52.4036,778.767,44.3948) +q.l(764.266,38.3882,745.882,38.3882,709.115,38.3882) +q.q(0,497.907,38.3882) +q.l(492.246,38.3882,489.416,38.3882,486.946,39.1543) +q.l(483.463,40.235,480.417,42.4037,478.256,45.3422) +q.l(476.724,47.4253,475.798,50.1001,473.947,55.4496) +q.q(0,470.425,65.6229) +q.q(0,470.424,65.626) +q.l(469.635,67.9039,469.241,69.0433,468.824,70.0568) +q.l(463.206,83.7107,450.255,92.9326,435.515,93.7752) +q.l(434.42,93.8378,433.214,93.8378,430.801,93.8378) +q.l(428.388,93.8378,427.182,93.8378,426.087,93.7752) +q.l(411.347,92.9326,398.396,83.7107,392.778,70.0568) +q.l(392.361,69.0438,391.967,67.905,391.179,65.6291) +q.q(0,391.177,65.6229) +q.q(0,387.655,55.4496) +q.l(385.803,50.1001,384.878,47.4253,383.346,45.3422) +q.l(381.185,42.4037,378.139,40.235,374.656,39.1543) +q.l(372.186,38.3882,369.356,38.3882,363.695,38.3882) +q.q(0,152.486,38.3882) +q.l(115.719,38.3882,97.3359,38.3882,82.8347,44.3948) +q.l(63.4997,52.4036,48.1382,67.7651,40.1294,87.1001) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c3Z","bAl",()=>A.kT(B.aj0,B.a8p,B.Tt,"Samsung Galaxy Note 20",2.625,B.UK,B.Uo,$.bzy(),B.a8a)) +s($,"c2F","bzy",()=>{var q=A.ky() +q.a4(0,27.105,83.4) +q.l(27.105,52.3091,52.3091,27.105,83.4,27.105) +q.q(0,744.345,27.105) +q.l(775.436,27.105,800.64,52.3091,800.64,83.4) +q.q(0,800.64,1688.85) +q.l(800.64,1719.94,775.436,1745.15,744.345,1745.15) +q.q(0,83.4,1745.15) +q.l(52.3091,1745.15,27.105,1719.94,27.105,1688.85) +q.q(0,27.105,83.4) +q.T(0) +q.a4(0,435.785,69.8925) +q.l(435.785,81.9834,425.983,91.785,413.892,91.785) +q.l(401.802,91.785,392,81.9834,392,69.8925) +q.l(392,57.8016,401.802,48,413.892,48) +q.l(425.983,48,435.785,57.8016,435.785,69.8925) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c44","bAr",()=>A.kT(B.aj_,B.a8r,B.Tk,"Samsung Galaxy Note 20 Ultra",3.5,B.UF,B.Um,$.bzx(),B.a88)) +s($,"c2L","bzx",()=>{var q=A.ky() +q.a4(0,7.99023,65.9178) +q.l(7.99023,45.2018,7.99023,34.8439,14.4259,28.4083) +q.l(20.8615,21.9727,31.2194,21.9727,51.9354,21.9727) +q.q(0,743.073,21.9727) +q.l(763.789,21.9727,774.146,21.9727,780.582,28.4083) +q.l(787.018,34.8439,787.018,45.2019,787.018,65.9178) +q.q(0,787.018,1635.96) +q.l(787.018,1656.67,787.018,1667.03,780.582,1673.47) +q.l(774.147,1679.9,763.789,1679.9,743.074,1679.9) +q.q(0,51.9342,1679.9) +q.l(31.219,1679.9,20.8613,1679.9,14.4259,1673.47) +q.l(7.99023,1667.03,7.99023,1656.67,7.99023,1635.96) +q.q(0,7.99023,65.9178) +q.T(0) +q.a4(0,416.955,53.9776) +q.l(416.955,63.9063,408.906,71.9551,398.978,71.9551) +q.l(389.049,71.9551,381,63.9063,381,53.9776) +q.l(381,44.0488,389.049,36,398.978,36) +q.l(408.906,36,416.955,44.0488,416.955,53.9776) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c45","bAk",()=>A.kT(B.aj1,B.a8n,B.Tm,"Samsung Galaxy S20",4,B.w6,B.w2,$.bzz(),B.Gp)) +s($,"c2M","bzz",()=>{var q=A.ky() +q.a4(0,19.9199,110.664) +q.l(19.9199,67.8815,54.6022,33.1992,97.385,33.1992) +q.q(0,761.371,33.1992) +q.l(804.154,33.1992,838.836,67.8815,838.836,110.664) +q.q(0,838.836,1775.06) +q.l(838.836,1817.84,804.154,1852.52,761.371,1852.52) +q.q(0,97.385,1852.52) +q.l(54.6022,1852.52,19.9199,1817.84,19.9199,1775.06) +q.q(0,19.9199,110.664) +q.T(0) +q.a4(0,425.133,91.2657) +q.l(437.357,91.2657,447.266,81.3565,447.266,69.1329) +q.l(447.266,56.9092,437.357,47,425.133,47) +q.l(412.909,47,403,56.9092,403,69.1329) +q.l(403,81.3565,412.909,91.2657,425.133,91.2657) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c46","bAt",()=>A.kT(B.aja,B.a8o,B.Tl,"Sony Xperia 1 II",4,B.bP,B.bP,$.bzI(),B.a86)) +s($,"c2N","bzI",()=>{var q=A.ky() +q.a4(0,51.2127,75.7949) +q.l(39.8991,75.7949,30.7275,84.9665,30.7275,96.2802) +q.q(0,30.7275,1667.49) +q.l(30.7275,1678.81,39.8991,1687.98,51.2127,1687.98) +q.q(0,702.641,1687.98) +q.l(713.955,1687.98,723.126,1678.81,723.126,1667.49) +q.q(0,723.126,96.2801) +q.l(723.126,84.9664,713.955,75.7949,702.641,75.7949) +q.q(0,51.2127,75.7949) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c47","bAp",()=>A.kT(B.aiX,B.a7Y,B.Ti,"iPad",2,B.dI,B.dI,$.bzu(),B.a8i)) +s($,"c2O","bzu",()=>{var q=A.ky() +q.a4(0,1606,176.66) +q.q(0,66.917,176.66) +q.q(0,66.917,2229.66) +q.q(0,1606,2229.66) +q.q(0,1606,176.66) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c48","bAo",()=>A.kT(B.aiY,B.a8_,B.Tj,"iPad Air 4",3,B.dI,B.dI,$.bzv(),B.a8j)) +s($,"c2P","bzv",()=>{var q=A.ky() +q.a4(0,141.875,111.275) +q.l(121.902,111.275,105.711,127.466,105.711,147.439) +q.q(0,105.711,2367.37) +q.l(105.711,2387.35,121.902,2403.54,141.875,2403.54) +q.q(0,1663.56,2403.54) +q.l(1683.53,2403.54,1699.72,2387.35,1699.72,2367.37) +q.q(0,1699.72,147.439) +q.l(1699.72,127.466,1683.53,111.275,1663.56,111.275) +q.q(0,141.875,111.275) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c49","bAq",()=>A.kT(B.aiW,B.a7Z,B.Te,'iPad Pro (11")',3,B.dI,B.dI,$.bzt(),B.a8k)) +s($,"c2Q","bzt",()=>{var q=A.ky() +q.a4(0,90.9277,128.369) +q.q(0,90.9277,2289.24) +q.l(90.9277,2306.97,105.296,2321.33,123.02,2321.33) +q.q(0,1612.63,2321.33) +q.l(1630.36,2321.33,1644.72,2306.97,1644.72,2289.24) +q.q(0,1644.72,128.369) +q.l(1644.72,110.645,1630.36,96.2765,1612.63,96.2765) +q.q(0,123.02,96.2765) +q.l(105.296,96.2765,90.9277,110.645,90.9277,128.369) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c4a","bAv",()=>A.kT(B.aj8,B.Gw,B.To,"iPhone 12",2,B.w1,B.w1,$.bzG(),B.a7V)) +s($,"c2R","bzG",()=>{var q=A.ky() +q.a4(0,224.958,50.564) +q.q(0,224.958,59.8513) +q.q(0,225.106,59.8466) +q.q(0,224.958,60.8831) +q.l(224.958,85.3893,244.824,105.255,269.33,105.255) +q.q(0,603.67,105.255) +q.l(628.176,105.255,648.043,85.3893,648.043,60.8831) +q.q(0,647.895,59.8466) +q.q(0,648.042,59.8513) +q.q(0,648.042,50.564) +q.l(648.042,44.295,653.124,39.213,659.393,39.213) +q.q(0,685.976,39.2129) +q.l(727.533,39.2129,748.311,39.2129,764.883,45.4748) +q.l(790.93,55.3172,811.492,75.8786,821.334,101.926) +q.l(827.596,118.498,827.596,139.276,827.596,180.833) +q.q(0,827.596,1589.93) +q.l(827.596,1631.49,827.596,1652.27,821.334,1668.84) +q.l(811.492,1694.89,790.93,1715.45,764.883,1725.29) +q.l(748.311,1731.55,727.533,1731.55,685.976,1731.55) +q.q(0,187.024,1731.55) +q.l(145.467,1731.55,124.689,1731.55,108.117,1725.29) +q.l(82.07,1715.45,61.5086,1694.89,51.6662,1668.84) +q.l(45.4043,1652.27,45.4043,1631.49,45.4043,1589.93) +q.q(0,45.4043,180.833) +q.l(45.4043,139.276,45.4043,118.498,51.6662,101.926) +q.l(61.5086,75.8786,82.07,55.3172,108.117,45.4748) +q.l(124.689,39.2129,145.467,39.2129,187.024,39.2129) +q.q(0,213.607,39.213) +q.l(219.876,39.213,224.958,44.295,224.958,50.564) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c4b","bAu",()=>A.kT(B.aj9,B.Gu,B.Th,"iPhone 12 Mini",2,B.w9,B.w3,$.bzH(),B.Gq)) +s($,"c2S","bzH",()=>{var q=A.ky() +q.a4(0,203.851,63.8789) +q.l(203.851,88.9158,224.074,109.212,249.151,109.212) +q.q(0,621.848,109.212) +q.l(646.925,109.212,667.148,88.9158,667.148,63.8789) +q.q(0,667.148,51.5152) +q.l(667.148,44.687,672.664,39.1516,679.503,39.1516) +q.q(0,683.436,39.1516) +q.l(725.805,39.1516,746.989,39.1516,763.84,45.6754) +q.l(789.255,55.5151,809.348,75.622,819.18,101.056) +q.l(825.699,117.919,825.699,139.119,825.699,181.519) +q.q(0,825.699,1586.48) +q.l(825.699,1628.88,825.699,1650.08,819.18,1666.94) +q.l(809.348,1692.38,789.255,1712.49,763.84,1722.32) +q.l(747.437,1728.68,726.927,1728.84,686.766,1728.85) +q.l(685.671,1728.85,684.561,1728.85,683.436,1728.85) +q.q(0,187.563,1728.85) +q.l(186.438,1728.85,185.328,1728.85,184.233,1728.85) +q.l(144.072,1728.84,123.562,1728.68,107.159,1722.32) +q.l(81.7436,1712.49,61.6514,1692.38,51.8189,1666.94) +q.l(45.2998,1650.08,45.2998,1628.88,45.2998,1586.48) +q.q(0,45.2998,181.519) +q.l(45.2998,139.119,45.2998,117.919,51.8189,101.056) +q.l(61.6514,75.622,81.7436,55.5151,107.159,45.6754) +q.l(124.01,39.1516,145.194,39.1516,187.563,39.1516) +q.q(0,191.496,39.1516) +q.l(198.335,39.1516,203.851,44.687,203.851,51.5152) +q.q(0,203.851,63.8789) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c4_","bAw",()=>A.kT(B.aj7,B.Gv,B.Tp,"iPhone 12 Pro Max",3,B.w9,B.w3,$.bzF(),B.Gs)) +s($,"c2G","bzF",()=>{var q=A.ky() +q.a4(0,284.809,99.021) +q.l(263.338,99.021,245.596,81.7495,245.596,60.4441) +q.q(0,245.596,49.9231) +q.l(245.596,44.1125,241.132,39.1958,235.277,39.1958) +q.q(0,187.994,39.1958) +q.l(145.528,39.1958,124.295,39.1958,107.406,45.727) +q.l(81.9318,55.5778,61.7934,75.7075,51.9383,101.17) +q.l(45.4043,118.052,45.4043,139.276,45.4043,181.724) +q.q(0,45.4043,1588.28) +q.l(45.4043,1630.72,45.4043,1651.95,51.9383,1668.83) +q.l(61.7934,1694.29,81.9318,1714.42,107.406,1724.27) +q.l(124.295,1730.8,145.528,1730.8,187.994,1730.8) +q.q(0,685.006,1730.8) +q.l(727.472,1730.8,748.705,1730.8,765.594,1724.27) +q.l(791.068,1714.42,811.207,1694.29,821.062,1668.83) +q.l(827.596,1651.95,827.596,1630.72,827.596,1588.28) +q.q(0,827.596,181.724) +q.l(827.596,139.276,827.596,118.052,821.062,101.17) +q.l(811.207,75.7075,791.068,55.5778,765.594,45.727) +q.l(748.705,39.1958,727.472,39.1958,685.006,39.1958) +q.q(0,637.723,39.1958) +q.l(631.868,39.1958,627.404,44.1125,627.404,49.9231) +q.q(0,627.404,60.4441) +q.l(627.404,81.7495,609.662,99.021,588.191,99.021) +q.q(0,284.809,99.021) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c40","bAy",()=>A.kT(B.aj5,B.Gw,B.Ts,"iPhone 13",3,B.wa,B.nD,$.bzD(),B.a85)) +s($,"c2H","bzD",()=>{var q=1734,p=A.ky() +p.a4(0,45.1305,129.973) +p.l(45.0439,131.645,45,133.329,45,135.022) +p.q(0,45,1637.98) +p.l(45,1691.01,88.002,q,141.048,q) +p.q(0,731.952,q) +p.l(784.998,q,828,1691.01,828,1637.98) +p.q(0,828,135.022) +p.l(828,134.815,827.999,134.608,827.998,134.401) +p.l(827.664,81.6555,784.791,39,731.952,39) +p.q(0,596.761,39) +p.l(589.566,41.5313,584.408,48.3863,584.408,56.4451) +p.l(584.408,81.9729,563.708,102.667,538.174,102.667) +p.q(0,332.826,102.667) +p.l(307.292,102.667,286.592,81.9729,286.592,56.4451) +p.l(286.592,48.3863,281.434,41.5313,274.239,39) +p.q(0,141.048,39) +p.l(117.114,39,95.2253,47.7516,78.408,62.2285) +p.l(71.9295,67.8055,66.2036,74.2321,61.4035,81.3353) +p.l(51.9291,95.3554,46.0612,112.011,45.1305,129.973) +p.T(0) +p.sfW(B.aD) +return p}) +s($,"c41","bAx",()=>A.kT(B.aj6,B.Gu,B.Tg,"iPhone 13 Mini",2,B.UJ,B.nD,$.bzE(),B.Gq)) +s($,"c2I","bzE",()=>{var q=A.ky() +q.a4(0,253.851,68.5) +q.l(253.851,91.1214,277.423,117.212,302.5,117.212) +q.q(0,567.5,117.212) +q.l(592.577,117.212,616.3,93.5369,616.3,68.5) +q.q(0,616.3,51.5152) +q.l(616.3,44.687,621.816,39.1516,628.655,39.1516) +q.q(0,632.588,39.1516) +q.l(674.957,39.1516,746.989,39.1514,763.84,45.6752) +q.l(789.255,55.5149,809.348,75.6218,819.18,101.056) +q.l(825.699,117.919,825.699,139.119,825.699,181.519) +q.q(0,825.699,1586.48) +q.l(825.699,1628.88,825.699,1650.08,819.18,1666.94) +q.l(809.348,1692.38,789.255,1712.48,763.84,1722.32) +q.l(747.437,1728.68,726.927,1728.84,686.766,1728.85) +q.l(685.671,1728.85,684.561,1728.85,683.436,1728.85) +q.q(0,187.563,1728.85) +q.l(186.438,1728.85,185.328,1728.85,184.233,1728.85) +q.l(144.072,1728.84,123.562,1728.68,107.159,1722.32) +q.l(81.7436,1712.48,61.6514,1692.38,51.8189,1666.94) +q.l(45.2998,1650.08,45.2998,1628.88,45.2998,1586.48) +q.q(0,45.2998,181.519) +q.l(45.2998,139.119,45.2998,117.919,51.8189,101.056) +q.l(61.6514,75.6218,81.7436,55.5149,107.159,45.6752) +q.l(124.01,39.1514,195.194,39.1514,237.563,39.1514) +q.q(0,241.496,39.1514) +q.l(248.335,39.1514,253.851,44.6868,253.851,51.515) +q.q(0,253.851,68.5) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c42","bAm",()=>A.kT(B.aj4,B.Gv,B.Tr,"iPhone 13 Pro Max",3,B.wa,B.nD,$.bzC(),B.Gs)) +s($,"c2J","bzC",()=>{var q=A.ky() +q.a4(0,329.809,99.021) +q.l(308.338,99.021,290.596,81.7495,290.596,60.4441) +q.q(0,290.596,49.9231) +q.l(290.596,44.1125,286.132,39.1958,280.277,39.1958) +q.q(0,187.994,39.1958) +q.l(145.528,39.1958,124.295,39.1958,107.406,45.727) +q.l(81.9318,55.5778,61.7934,75.7075,51.9383,101.17) +q.l(45.4043,118.052,45.4043,139.276,45.4043,181.724) +q.q(0,45.4043,1588.28) +q.l(45.4043,1630.72,45.4043,1651.95,51.9383,1668.83) +q.l(61.7934,1694.29,81.9318,1714.42,107.406,1724.27) +q.l(124.295,1730.8,145.528,1730.8,187.994,1730.8) +q.q(0,685.006,1730.8) +q.l(727.472,1730.8,748.705,1730.8,765.594,1724.27) +q.l(791.068,1714.42,811.207,1694.29,821.062,1668.83) +q.l(827.596,1651.95,827.596,1630.72,827.596,1588.28) +q.q(0,827.596,181.724) +q.l(827.596,139.276,827.596,118.052,821.062,101.17) +q.l(811.207,75.7075,791.068,55.5778,765.594,45.727) +q.l(748.705,39.1958,727.472,39.1958,685.006,39.1958) +q.q(0,596.723,39.1958) +q.l(590.868,39.1958,586.404,44.1125,586.404,49.9231) +q.q(0,586.404,60.4441) +q.l(586.404,81.7495,568.662,99.021,547.191,99.021) +q.q(0,329.809,99.021) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"c43","bAn",()=>A.kT(B.aj3,B.a8m,B.Tf,"iPhone SE",2,B.dI,B.dI,$.bzB(),B.a84)) +s($,"c2K","bzB",()=>{var q=A.ky() +q.a4(0,836.747,198.193) +q.q(0,54.2529,198.193) +q.q(0,54.2529,1589.72) +q.q(0,836.747,1589.72) +q.q(0,836.747,198.193) +q.T(0) +q.sfW(B.aD) +return q}) +s($,"bX_","bve",()=>B.fB.aW()) +s($,"bX1","bvg",()=>B.a45.aW()) +s($,"bX2","bvh",()=>{var q=null +return A.dW(A.ep(q,q,B.Mx,q,q,q,q,q,q,q,q,q,q,q,q,q,q,!0,q,q,q,q,q,q,q,q),B.r)}) +s($,"bX0","bvf",()=>{var q=null +return A.dW(A.ep(q,q,B.q,q,q,q,q,q,q,q,q,q,q,q,q,q,q,!0,q,q,q,q,q,q,q,q),B.r)}) +s($,"bXa","bvm",()=>A.GU(null).f9(1e8)+5e8) +s($,"bXp","bvu",()=>{var q=A.mo() +q.sU(0,B.u) +q.sbM(2) +q.sA(0,B.dd) +return q}) +s($,"bXq","bvv",()=>{var q=null +return A.dW(A.ep(q,q,B.dd,q,q,q,q,q,q,q,q,12,q,q,q,q,q,!0,q,q,q,q,q,q,q,q),B.r)}) +s($,"bZz","bwJ",()=>A.dW(B.ae0,B.r)) +s($,"bZl","bwD",()=>A.a9K(-1500,-1500,1500,1500)) +s($,"bZj","bwB",()=>{var q=A.mo() +q.sA(0,B.vw) +q.sbM(10) +q.sU(0,B.u) +return q}) +s($,"bZi","bwA",()=>{var q=A.mo() +q.sA(0,B.va) +return q}) +s($,"bZk","bwC",()=>A.GU(null)) +s($,"bXn","bvs",()=>A.GU(null)) +s($,"c4S","bAT",()=>{var q=A.mo() +q.sA(0,B.l) +q.sU(0,B.u) +return q}) +s($,"c4j","bk1",()=>{var q=A.mo() +q.sA(0,B.LX) +q.sU(0,B.u) +return q}) +s($,"c3Q","bAh",()=>{var q=A.mo() +q.sA(0,B.jj) +q.sU(0,B.u) +return q}) +s($,"c4E","bAL",()=>{var q=A.mo() +q.sA(0,B.dd) +q.sU(0,B.u) +return q}) +s($,"bZN","bjh",()=>{var q=B.t.aW() +q.sU(0,B.u) +return q}) +s($,"bZF","bwO",()=>A.b3([B.p1,"Hyper",B.p2,"Super",B.fD,"Fn",B.p3,"FnLock",B.p4,"Game 1",B.p5,"Game 2 ",B.p6,"Game 3",B.p7,"Game 4",B.p8,"Game 5",B.p9,"Game 6",B.pa,"Game 7",B.pb,"Game 8",B.pc,"Game A",B.pd,"Game B",B.pe,"Game C",B.pf,"Game L1",B.pg,"Game L2",B.ph,"Game Mode",B.pi,"Game R1",B.pj,"Game R2",B.pk,"Game Select",B.pl,"Game Start",B.pm,"Game LThumb",B.pn,"Game RThumb",B.po,"Game X",B.pp,"Game Y",B.pq,"Game Z",B.pr,"A",B.ps,"B",B.pt,"C",B.pu,"D",B.pv,"E",B.pw,"F",B.px,"G",B.py,"H",B.pz,"I",B.pA,"J",B.pB,"K",B.pC,"L",B.pD,"M",B.pE,"N",B.pF,"O",B.pG,"P",B.pH,"Q",B.pI,"R",B.pJ,"S",B.pK,"T",B.pL,"U",B.pM,"V",B.pN,"W",B.pO,"X",B.pP,"Y",B.pQ,"Z",B.pR,"1",B.pS,"2",B.pT,"3",B.pU,"4",B.pV,"5",B.pW,"6",B.pX,"7",B.pY,"8",B.pZ,"9",B.q_,"0",B.q0,"Enter",B.kF,"Esc",B.q1,"Backspace",B.q2,"Tab",B.q3,"Space",B.q4,"-",B.q5,"=",B.q6,"[",B.q7,"]",B.q8,"\\",B.q9,";",B.qa,"'",B.qb,"`",B.qc,",",B.qd,".",B.qe,"/",B.dW,"CapsLock",B.qf,"F1",B.qg,"F2",B.qh,"F3",B.qi,"F4",B.qj,"F5",B.qk,"F6",B.ql,"F7",B.qm,"F8",B.qn,"F9",B.qo,"F10",B.qp,"F11",B.qq,"F12",B.qU,"F13",B.qV,"F14",B.qW,"F15",B.qX,"F16",B.qr,"PrintScreen",B.i6,"ScrollLock",B.qs,"Pause",B.qt,"Insert",B.qu,"Home",B.qv,"PageUp",B.qw,"Delete",B.qx,"End",B.qy,"PageDown",B.qz,"ArrowRight",B.qA,"ArrowLeft",B.qB,"ArrowDown",B.qC,"ArrowUp",B.i7,"NumLock",B.qD,"Num /",B.qE,"Num *",B.qF,"Num -",B.qG,"Num +",B.qH,"Num Enter",B.qI,"Num 1",B.qJ,"Num 2",B.qK,"Num 3",B.qL,"Num 4",B.qM,"Num 5",B.qN,"Num 6",B.qO,"Num 7",B.qP,"Num 8",B.qQ,"Num 9",B.qR,"Num 0",B.qS,"Num .",B.qT,"ContextMenu",B.eI,"LControl",B.eJ,"LShift",B.eK,"LAlt",B.eL,"LMeta",B.fE,"RControl",B.fF,"RShift",B.eM,"RAlt",B.fG,"RMeta"],t.v3,t.N)) +s($,"bZ0","bwn",()=>A.Iz(24,12)) +s($,"bZ_","bwm",()=>{var q=A.mo() +q.sU(0,B.u) +q.sbM(3) +q.sA(0,B.vo) +return q}) +s($,"bZ1","bwo",()=>A.dW(B.acT,B.r)) +s($,"bYH","bwb",()=>{var q=A.mo() +q.sA(0,B.l) +return q}) +s($,"bYG","bwa",()=>{var q=A.mo() +q.sA(0,B.vm) +return q}) +s($,"bZt","bwF",()=>B.dU.aW()) +s($,"bZu","bwG",()=>B.t.aW()) +s($,"bZv","bjc",()=>A.IA(150)) +s($,"bZw","bwH",()=>B.dU.aW()) +s($,"bZx","bwI",()=>B.t.aW()) +s($,"bZy","bjd",()=>A.IA(50)) +s($,"bZC","bje",()=>B.t.aW()) +s($,"bZB","bwL",()=>A.IA(50)) +s($,"bZE","bwN",()=>B.t.aW()) +s($,"bZD","bwM",()=>A.IA(50)) +s($,"c0h","bxW",()=>{var q=A.mo() +q.sA(0,B.l) +return q}) +s($,"c0g","bxV",()=>{var q=A.mo() +q.sA(0,B.vm) +return q}) +s($,"c2z","bjK",()=>{var q=null +return A.ep(q,q,B.l,q,q,q,q,q,q,q,q,18,q,q,q,q,q,!0,q,q,q,q,q,q,q,q)}) +s($,"c2y","bjJ",()=>A.dW($.bjK(),B.r)) +s($,"c3q","bA6",()=>A.dW($.bjK().acj(14),B.r)) +s($,"c1C","bjB",()=>{var q=$.bjJ(),p=new A.b8E().$1(q.a) +return A.dW(p,q.b)}) +s($,"c2U","bzK",()=>{var q=null +return A.dW(A.ep(q,q,B.l,q,q,q,q,q,q,q,q,40,q,q,q,q,q,!0,q,q,q,q,q,B.YR,q,q),B.r)}) +s($,"c07","bjo",()=>A.Iz(320,180)) +s($,"bZI","bwQ",()=>B.t.aW()) +s($,"c3w","bAc",()=>B.b.jo($.bdh(),new A.bbH(),t.N).eT(0)) +s($,"c3x","bAb",()=>B.b.jo($.bdh(),new A.bbG(),t.N).eT(0)) +s($,"c3y","bAd",()=>B.b.jo($.bdh(),new A.bbI(),t.N).eT(0)) +s($,"bWC","bdg",()=>A.b3([B.o,"topLeft",B.dy,"topCenter",B.iU,"topRight",B.iV,"centerLeft",B.j,"center",B.iW,"centerRight",B.mk,"bottomLeft",B.e8,"bottomCenter",B.bL,"bottomRight"],A.ac("fn"),t.N)) +s($,"bWD","bdh",()=>$.bdg().gdv(0).eT(0)) +s($,"c06","bxS",()=>{var q=null +return A.bp1(q,q,!1,q,q,t.VC)}) +s($,"c05","bjn",()=>A.bBJ()) +s($,"bYp","bvY",()=>A.bQ()) +s($,"c0j","bxX",()=>{var q=B.t.aW() +q.sor(B.jP) +return q}) +s($,"c_r","bxo",()=>A.GU(null)) +s($,"bZW","bwU",()=>A.IA(0/0)) +s($,"bXi","biY",()=>A.bQ()) +s($,"c_B","bxv",()=>A.bQ()) +s($,"c_J","bxD",()=>A.bQ()) +s($,"c_I","bxC",()=>A.bQ()) +s($,"bYN","bwf",()=>B.t.aW()) +s($,"c0H","bju",()=>A.bQ()) +r($,"bYc","avj",()=>$.l3()) +r($,"bYb","aL",()=>{var q=$.avj() +return new A.awx(q,A.D(t.N,A.ac("IT<@>")))}) +r($,"bYd","aC",()=>{A.bS4() +var q=$.avj() +return new A.aHr(A.D(t.N,A.ac("Vq")),q)}) +s($,"bXg","biX",()=>A.bQ()) +s($,"bXf","bvo",()=>A.bQ()) +s($,"c_w","bxr",()=>A.bQ()) +s($,"c_x","bxs",()=>A.bQ()) +s($,"c_y","bxt",()=>A.bQ()) +s($,"c1T","byW",()=>A.b([new A.a0s(),new A.a0v(),new A.a98()],A.ac("v>"))) +s($,"c4D","bAK",()=>A.GU(null)) +s($,"c4P","bAQ",()=>A.bQ()) +s($,"bZH","bwP",()=>B.t.aW()) +s($,"bZA","bwK",()=>A.bQ()) +s($,"c00","bjm",()=>A.bQ()) +s($,"c01","bxP",()=>A.bQ()) +s($,"c02","bxQ",()=>A.bQ()) +s($,"bX6","bvk",()=>{var q=null +return A.rz(q,q,q,q,q,q,q,q,q,q,q,B.b3,q,q,q,q,q)}) +r($,"bYy","bw4",()=>{var q=null +return A.KZ(q,B.Uk,q,A.rz(q,q,q,q,q,q,q,2,q,q,q,B.b3,q,q,q,q,q),q)}) +r($,"bYz","bw5",()=>{var q=null +return A.KZ(q,B.Ul,q,A.rz(q,q,q,q,q,q,q,1.5,q,q,q,B.b3,q,q,q,q,q),q)}) +r($,"bYA","bw6",()=>{var q=null +return A.KZ(q,q,q,A.rz(q,q,q,q,q,q,q,1.25,q,q,q,B.b3,q,q,q,q,q),q)}) +r($,"bYB","bw7",()=>{var q=null +return A.KZ(q,q,q,A.rz(q,q,q,q,q,q,q,1,q,q,q,B.b3,q,q,q,q,q),q)}) +r($,"bYC","bw8",()=>{var q=null +return A.KZ(q,q,q,A.rz(q,q,q,q,q,q,q,0.875,q,q,q,B.b3,q,q,q,q,q),q)}) +r($,"bYD","bw9",()=>{var q=null +return A.KZ(q,q,q,A.rz(q,q,q,q,q,q,q,0.85,q,q,q,B.b3,q,q,q,q,q),q)}) +s($,"bYT","bwj",()=>{var q=null +return A.rz(q,q,q,q,q,q,q,q,q,B.jU,q,q,q,q,q,q,q)}) +r($,"c0m","bxY",()=>A.b3([B.ah6,A.buM(),B.ah5,A.buM()],t.B,A.ac("iT()"))) +r($,"bXU","bvJ",()=>{var q=null +return A.rz(q,q,q,q,q,q,q,q,16,q,q,q,q,q,q,q,q)}) +r($,"bY9","bdl",()=>A.bRi().$1$prefix("assets/audio/")) +s($,"bYa","bj6",()=>A.bC9($.bdl())) +s($,"bYl","js",()=>A.Iz(0,10)) +s($,"c1Z","bz0",()=>A.bgM(1,1,500)) +r($,"bWQ","bv8",()=>new A.ZZ(B.G,B.G)) +s($,"c3I","bjT",()=>new A.ahf()) +s($,"c2i","bzg",()=>A.lB(B.fz,B.h,t.o)) +s($,"c2b","bz9",()=>A.lB(B.h,B.a3P,t.o)) +r($,"c0X","byl",()=>new A.a1Z(B.aiw,B.aiv)) +s($,"c3J","bjU",()=>new A.a1K()) +r($,"c16","byv",()=>new A.am6(B.ajO,B.al)) +s($,"c3n","bA5",()=>new A.b9x().$0()) +s($,"c1E","byO",()=>new A.b8F().$0()) +r($,"bYe","nR",()=>$.bFa) +s($,"bXd","aa",()=>A.bc(0,null,!1,t.Nw)) +s($,"c0W","Zs",()=>new A.x1(0,$.byk())) +s($,"c0V","byk",()=>A.bPS(0)) +s($,"c1J","avo",()=>A.mc(null,t.N)) +s($,"c1K","bjD",()=>A.bKy()) +s($,"c0Q","byi",()=>A.a7r(8)) +s($,"c04","bxR",()=>A.bw("^\\s*at ([^\\s]+).*$",!0,!1,!1)) +s($,"c4d","bjY",()=>A.blb(4294967295)) +s($,"c4c","bjX",()=>A.blb(3707764736)) +s($,"c3L","bdA",()=>new A.ahM()) +s($,"c0Z","byn",()=>A.pb(B.fb)) +s($,"c0Y","bym",()=>A.pb(B.dE)) +s($,"c1_","byo",()=>A.lB(0,0.5,t.V)) +s($,"c1d","byw",()=>A.lB(0.75,1,t.V)) +s($,"c1e","byx",()=>A.pb(B.af6)) +s($,"bYP","bwg",()=>A.pb(B.bt)) +s($,"bYQ","bwh",()=>A.pb(B.Wz)) +r($,"c0l","bjq",()=>new A.adk(new A.aVM(),A.ci()===B.a6)) +s($,"c1u","byL",()=>{var q=t.V +return A.b([A.bqA(A.lB(0,0.4,q).pr(A.pb(B.SM)),0.166666,q),A.bqA(A.lB(0.4,1,q).pr(A.pb(B.SP)),0.833334,q)],A.ac("v>"))}) +s($,"c1t","avm",()=>A.bLL($.byL(),t.V)) +s($,"c1m","byE",()=>A.lB(0,1,t.V).pr(A.pb(B.WA))) +s($,"c1n","byF",()=>A.lB(1.1,1,t.V).pr($.avm())) +s($,"c1o","byG",()=>A.lB(0.85,1,t.V).pr($.avm())) +s($,"c1p","byH",()=>A.lB(0,0.6,t.PM).pr(A.pb(B.WF))) +s($,"c1q","byI",()=>A.lB(1,0,t.V).pr(A.pb(B.Wx))) +s($,"c1s","byK",()=>A.lB(1,1.05,t.V).pr($.avm())) +s($,"c1r","byJ",()=>A.lB(1,0.9,t.V).pr($.avm())) +s($,"c10","byp",()=>A.lB(0.875,1,t.V).pr(A.pb(B.dE))) +s($,"c4n","bk2",()=>new A.a6I()) +s($,"c0o","by_",()=>A.bLj()) +s($,"c0n","bxZ",()=>new A.aiQ(A.D(A.ac("Jj"),t.we),5,A.ac("aiQ"))) +s($,"bZp","bdn",()=>A.bHC(4)) +r($,"c_C","bxw",()=>B.Mb) +r($,"c_E","bxy",()=>{var q=null +return A.bgZ(q,B.n1,q,q,q,q,"sans-serif",q,q,18,q,q,q,q,q,q,q,q,q,q,q)}) +r($,"c_D","bxx",()=>{var q=null +return A.bg7(q,q,q,q,q,q,q,q,q,B.d0,B.r,q)}) +s($,"c1f","byy",()=>A.bH5()) +s($,"c_F","bxz",()=>A.aUk(65532)) +s($,"c2j","avr",()=>98304) +s($,"c_O","bdq",()=>A.q0()) +s($,"c_N","bxF",()=>A.bfW(0)) +s($,"c_P","bxG",()=>A.bfW(0)) +s($,"c_Q","bxH",()=>A.bH7().a) +s($,"c4F","l3",()=>{var q=t.N,p=t.L0 +return new A.aNC(A.D(q,A.ac("an")),A.D(q,p),A.D(q,p))}) +s($,"bX8","avi",()=>new A.axP()) +s($,"bZ2","bwp",()=>A.b3([4294967562,B.o3,4294967564,B.WY,4294967556,B.WZ],t.S,t.SQ)) +s($,"bZd","bwv",()=>{var q=t.bd +return A.b3([B.oy,A.cC([B.dS,B.ey],q),B.oA,A.cC([B.hX,B.ku],q),B.oz,A.cC([B.hW,B.kt],q),B.ox,A.cC([B.hV,B.ks],q)],q,t.v2)}) +s($,"c_v","bjk",()=>new A.aOM(A.b([],A.ac("v<~(th)>")),A.D(t.v3,t.bd))) +s($,"c_u","bxq",()=>{var q=t.v3 +return A.b3([B.ajB,A.cC([B.eK],q),B.ajC,A.cC([B.eM],q),B.ajD,A.cC([B.eK,B.eM],q),B.ajA,A.cC([B.eK],q),B.ajx,A.cC([B.eJ],q),B.ajy,A.cC([B.fF],q),B.ajz,A.cC([B.eJ,B.fF],q),B.ajw,A.cC([B.eJ],q),B.ajt,A.cC([B.eI],q),B.aju,A.cC([B.fE],q),B.ajv,A.cC([B.eI,B.fE],q),B.ajs,A.cC([B.eI],q),B.ajF,A.cC([B.eL],q),B.ajG,A.cC([B.fG],q),B.ajH,A.cC([B.eL,B.fG],q),B.ajE,A.cC([B.eL],q),B.ajI,A.cC([B.dW],q),B.ajJ,A.cC([B.i7],q),B.ajK,A.cC([B.i6],q),B.ajL,A.cC([B.fD],q)],A.ac("fm"),A.ac("bO"))}) +s($,"c_t","bjj",()=>A.b3([B.eK,B.hW,B.eM,B.kt,B.eJ,B.dS,B.fF,B.ey,B.eI,B.hV,B.fE,B.ks,B.eL,B.hX,B.fG,B.ku,B.dW,B.hS,B.i7,B.kq,B.i6,B.kr],t.v3,t.bd)) +s($,"c_s","bxp",()=>{var q=A.D(t.v3,t.bd) +q.u(0,B.fD,B.ou) +q.I(0,$.bjj()) +return q}) +s($,"bY8","bvQ",()=>new A.MZ("\n",!1,"")) +s($,"bY7","bj5",()=>A.bEW(A.bw("[0-9]",!0,!1,!1))) +s($,"c0k","dN",()=>{var q=$.bdv() +q=new A.adh(q,A.cC([q],A.ac("SO")),A.D(t.N,A.ac("bpq"))) +q.c=B.Dk +q.gaut().uy(q.gaCN()) +return q}) +s($,"c1c","bdv",()=>new A.amK()) +s($,"c0B","bjr",()=>{var q=new A.adY() +q.a=B.a3X +q.gaKF().uy(q.gaBy()) +return q}) +r($,"c0M","byg",()=>{var q=A.ac("~(cm)") +return A.b3([B.agw,A.blM(!0),B.agD,A.blM(!1),B.ah_,new A.aar(A.Pq(q)),B.agO,new A.a7w(A.Pq(q)),B.agT,new A.a9h(A.Pq(q)),B.Hv,new A.Mk(!1,A.Pq(q)),B.tf,A.bJv(),B.agU,new A.a9k(A.Pq(q)),B.ahe,new A.aeu(A.Pq(q))],t.B,t.od)}) +s($,"bXC","bdj",()=>{var q,p,o,n=t.vz,m=A.D(t.zU,n) +for(q=A.ac("b9"),p=0;p<2;++p){o=B.oo[p] +m.I(0,A.b3([A.im(B.cn,!1,!1,!1,o),B.nr,A.im(B.cn,!1,!0,!1,o),B.nu,A.im(B.cn,!0,!1,!1,o),B.ns,A.im(B.c5,!1,!1,!1,o),B.hs,A.im(B.c5,!1,!0,!1,o),B.ht,A.im(B.c5,!0,!1,!1,o),B.nt],q,n))}m.u(0,B.fN,B.fe) +m.u(0,B.fO,B.ff) +m.u(0,B.fL,B.fg) +m.u(0,B.fM,B.fh) +m.u(0,B.FZ,B.jH) +m.u(0,B.G_,B.jI) +m.u(0,B.G0,B.hy) +m.u(0,B.G1,B.hz) +m.u(0,B.rA,B.el) +m.u(0,B.rB,B.em) +m.u(0,B.rC,B.jJ) +m.u(0,B.rD,B.jK) +m.u(0,B.G2,B.wk) +m.u(0,B.G3,B.wl) +m.u(0,B.G4,B.wi) +m.u(0,B.G5,B.wj) +m.u(0,B.G6,B.jL) +m.u(0,B.G7,B.jM) +m.u(0,B.G8,B.wq) +m.u(0,B.G9,B.wr) +m.u(0,B.a71,B.wm) +m.u(0,B.a72,B.wn) +m.u(0,B.le,B.nJ) +m.u(0,B.lb,B.nK) +m.u(0,B.Gm,B.jN) +m.u(0,B.Ga,B.jO) +m.u(0,B.Gf,B.vJ) +m.u(0,B.Gg,B.vI) +m.u(0,B.Gh,B.uA) +m.u(0,B.rG,B.uD) +m.u(0,B.a7l,B.uG) +m.u(0,B.a7m,B.uC) +m.u(0,B.lc,B.a3) +m.u(0,B.ld,B.a3) +return m}) +s($,"bXB","bj0",()=>$.bdj()) +s($,"bXD","bvy",()=>$.bj0()) +s($,"bXF","bvA",()=>A.b3([B.a7F,B.jI,B.a7G,B.jH,B.a7b,B.hy,B.a7H,B.hz,B.a7I,B.wr,B.a7J,B.wq,B.a7c,B.wm,B.a7K,B.wn,B.a7d,B.jN,B.a7L,B.jO,B.a7M,B.hy,B.a7N,B.hz,B.a6Z,B.hs,B.a7_,B.ht,B.a7o,B.ff,B.a7p,B.fe,B.a7B,B.fg,B.a7q,B.fh,B.a7r,B.jM,B.a7s,B.jL,B.a7C,B.V4,B.a7t,B.V5,B.a7D,B.nJ,B.a7u,B.nK,B.a7v,B.fg,B.a7w,B.fh,B.a7x,B.hs,B.a7y,B.ht],t.zU,t.vz)) +s($,"bXG","bvB",()=>{var q=A.A1($.bdj(),t.zU,t.vz) +q.I(0,$.bvA()) +q.u(0,B.ry,B.el) +q.u(0,B.rz,B.em) +q.u(0,B.rE,B.wk) +q.u(0,B.rF,B.wl) +return q}) +s($,"bXH","bj1",()=>{var q,p,o,n=t.vz,m=A.D(t.zU,n) +for(q=A.ac("b9"),p=0;p<2;++p){o=B.oo[p] +m.I(0,A.b3([A.im(B.cn,!1,!1,!1,o),B.nr,A.im(B.cn,!0,!1,!1,o),B.nu,A.im(B.cn,!1,!1,!0,o),B.ns,A.im(B.c5,!1,!1,!1,o),B.hs,A.im(B.c5,!0,!1,!1,o),B.ht,A.im(B.c5,!1,!1,!0,o),B.nt],q,n))}m.u(0,B.fN,B.fe) +m.u(0,B.fO,B.ff) +m.u(0,B.fL,B.fg) +m.u(0,B.fM,B.fh) +m.u(0,B.FZ,B.jH) +m.u(0,B.G_,B.jI) +m.u(0,B.G0,B.hy) +m.u(0,B.G1,B.hz) +m.u(0,B.rA,B.jL) +m.u(0,B.rB,B.jM) +m.u(0,B.rC,B.el) +m.u(0,B.rD,B.em) +m.u(0,B.G2,B.ws) +m.u(0,B.G3,B.wt) +m.u(0,B.G4,B.wo) +m.u(0,B.G5,B.wp) +m.u(0,B.Gb,B.el) +m.u(0,B.Gc,B.em) +m.u(0,B.Gd,B.jJ) +m.u(0,B.Ge,B.jK) +m.u(0,B.a73,B.wg) +m.u(0,B.a74,B.wh) +m.u(0,B.a75,B.nH) +m.u(0,B.a76,B.nI) +m.u(0,B.a7n,B.uF) +m.u(0,B.ry,B.Fv) +m.u(0,B.rz,B.Fw) +m.u(0,B.rE,B.nH) +m.u(0,B.rF,B.nI) +m.u(0,B.le,B.rh) +m.u(0,B.lb,B.l5) +m.u(0,B.Gm,B.jN) +m.u(0,B.Ga,B.jO) +m.u(0,B.Gj,B.vJ) +m.u(0,B.Gk,B.vI) +m.u(0,B.Gl,B.uA) +m.u(0,B.Gi,B.uD) +m.u(0,B.a7e,B.uG) +m.u(0,B.a7f,B.uC) +m.u(0,B.a7g,B.em) +m.u(0,B.rG,B.el) +m.u(0,B.a7h,B.ff) +m.u(0,B.a7i,B.fe) +m.u(0,B.a7j,B.fh) +m.u(0,B.a7k,B.fg) +m.u(0,B.lc,B.a3) +m.u(0,B.ld,B.a3) +return m}) +s($,"bXE","bvz",()=>$.bj1()) +s($,"bXJ","bvD",()=>{var q=A.A1($.bdj(),t.zU,t.vz) +q.u(0,B.le,B.nJ) +q.u(0,B.lb,B.nK) +q.u(0,B.ry,B.V2) +q.u(0,B.rz,B.V3) +q.u(0,B.rE,B.V0) +q.u(0,B.rF,B.V1) +q.u(0,B.a77,B.jJ) +q.u(0,B.a78,B.jK) +q.u(0,B.a79,B.wi) +q.u(0,B.a7a,B.wj) +return q}) +s($,"bXI","bvC",()=>{var q,p,o,n=t.vz,m=A.D(t.zU,n) +for(q=A.ac("b9"),p=0;p<2;++p){o=B.oo[p] +m.I(0,A.b3([A.im(B.cn,!1,!1,!1,o),B.a3,A.im(B.c5,!1,!1,!1,o),B.a3,A.im(B.cn,!0,!1,!1,o),B.a3,A.im(B.c5,!0,!1,!1,o),B.a3,A.im(B.cn,!1,!0,!1,o),B.a3,A.im(B.c5,!1,!0,!1,o),B.a3,A.im(B.cn,!1,!1,!0,o),B.a3,A.im(B.c5,!1,!1,!0,o),B.a3],q,n))}m.I(0,B.a1f) +m.u(0,B.Gf,B.a3) +m.u(0,B.Gj,B.a3) +m.u(0,B.Gg,B.a3) +m.u(0,B.Gk,B.a3) +m.u(0,B.Gh,B.a3) +m.u(0,B.Gl,B.a3) +m.u(0,B.rG,B.a3) +m.u(0,B.Gi,B.a3) +return m}) +r($,"c17","bjy",()=>new A.am5(B.ajM,B.al)) +s($,"c12","byr",()=>A.lB(1,0,t.V)) +s($,"bZG","p2",()=>A.bmA(t.uK)) +s($,"c11","byq",()=>A.dE(16667,0)) +s($,"c_K","bxE",()=>A.bgM(0.5,1.1,100)) +s($,"bXl","bdi",()=>A.bu6(0.78)/A.bu6(0.9)) +s($,"c1I","byQ",()=>A.aJB(A.cC([B.ox],t.bd))) +s($,"c2X","bzL",()=>A.aJB(A.cC([B.oy],t.bd))) +s($,"c1v","byM",()=>A.aJB(A.cC([B.oz],t.bd))) +s($,"c2o","bzk",()=>A.aJB(A.cC([B.oA],t.bd))) +s($,"c4e","bAz",()=>new A.bcA()) +s($,"c4f","bAA",()=>new A.bcB()) +s($,"c4K","bAO",()=>{var q=t.K +return new A.aUt(new A.ay4(A.D(q,A.ac("an")),A.D(q,t.V4)))}) +s($,"c4R","bAS",()=>new A.aNQ(A.D(t.N,A.ac("an?(cX?)")))) +s($,"c0O","bjv",()=>{var q=t.S +return new A.aBw(A.bNH(),A.bc(3,0,!1,q),A.bc(3,0,!1,q),A.bQ(),A.bQ(),A.bQ(),A.bQ())}) +s($,"c0N","xE",()=>{var q=A.ac("v") +return new A.azf(A.blE(),A.bpB(),A.blI(),A.bQ(),A.bQ(),A.Te(),A.bQ(),A.bQ(),new A.a36(),new A.a36(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.b([A.o1(),A.o1()],q),A.b([A.o1(),A.o1()],q),A.b([A.o1(),A.o1()],q),A.bQ(),A.bQ(),A.bD4(),A.bQ(),A.bQ(),new A.aCl(A.bKT(),A.Te(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.b([A.o1(),A.o1()],q),A.b([A.o1(),A.o1()],q),A.b([A.o1(),A.o1()],q),new A.b56(A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ()),A.bmp(),A.bmp(),A.bQ(),A.bQ()))}) +s($,"c0P","byh",()=>new A.aWq(A.bpB(),A.blE(),A.Te(),A.Te(),A.blI(),new A.aSn(A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.bQ(),A.Te(),A.Te(),A.bQ(),A.bQ()),A.bc(2,0,!1,t.S),A.bq1(),A.bq1())) +s($,"c0C","byb",()=>A.bQ()) +r($,"c4y","avB",()=>0.01) +r($,"c4p","bk4",()=>4) +r($,"c4o","bk3",()=>2.4674011002723395) +s($,"bYq","bvZ",()=>new A.b_G()) +r($,"c3V","bAi",()=>A.bCM()) +r($,"c3z","bAe",()=>new A.awu()) +s($,"bWZ","bvd",()=>A.bw("^[\\w!#%&'*+\\-.^`|~]+$",!0,!1,!1)) +s($,"c1L","byR",()=>A.bw("^\\d+$",!0,!1,!1)) +s($,"c4m","bAC",()=>A.b3(["az",B.bR,"bg",B.bR,"de",B.ev,"el",B.bR,"en",B.a_n,"es",B.bR,"et",B.ev,"fi",B.ev,"fr",B.xO,"haw",B.bR,"hu",B.bR,"id",B.fo,"it",B.ev,"ja",B.fo,"ka",B.bR,"kk",B.bR,"ko",B.fo,"ky",B.bR,"mn",B.bR,"nl",B.ev,"no",B.bR,"pl",B.a_m,"pt",B.xO,"ru",B.xN,"sv",B.ev,"th",B.fo,"tk",B.bR,"tr",B.bR,"uk",B.xN,"uz",B.bR,"vi",B.fo,"yi",B.ev,"zh",B.fo],t.N,A.ac("pC"))) +s($,"c1a","bdu",()=>A.b3([B.Hm,B.IX,B.Hn,B.a2o,B.Ho,B.a8Q],t.vi,t.q_)) +s($,"c19","bjz",()=>A.b3([B.lK,6,B.fW,6,B.lJ,6,B.iC,5,B.lM,5,B.iz,4,B.iE,4,B.iA,4,B.lH,4,B.iB,4,B.lI,4,B.iD,3,B.lG,2,B.lN,2,B.lL,1],t.vi,t.S)) +s($,"c15","byu",()=>A.cC([B.fT,B.fV,B.lB],t.vi)) +s($,"c13","bys",()=>A.cC([B.lw,B.lx,B.fU,B.ix,B.lz,B.lA,B.lD],t.vi)) +s($,"c14","byt",()=>A.cC([B.ly,B.lC],t.vi)) +s($,"c1F","bjC",()=>A.b3([B.lG,A.bR6(),B.fW,A.bSu(),B.iz,A.bSz(),B.iA,A.bT1(),B.lH,A.bT2(),B.iB,A.bTz(),B.lI,A.bTA(),B.iC,A.bVQ(),B.lJ,A.bTT(),B.lK,A.bTY(),B.iE,A.bU3(),B.lL,A.bUa(),B.lM,A.bR5(),B.lN,A.bWv()],t.vi,A.ac("aN(aN,aN,k,0&(h[k?]))"))) +s($,"bWK","bv3",()=>A.d3(A.b(["k","x","y"],t.T))) +s($,"bWM","bv5",()=>A.d3(A.b(["a"],t.T))) +s($,"bWL","bv4",()=>A.d3(A.b(["fc","sc","sw","t"],t.T))) +s($,"bWO","bv7",()=>A.d3(A.b(["a","p","s","rz","r","o","so","eo","sk","sa"],t.T))) +s($,"bWN","bv6",()=>A.d3(A.b(["k"],t.T))) +s($,"bX4","bvi",()=>A.d3(A.b(["ef"],t.T))) +s($,"bX5","bvj",()=>A.d3(A.b(["ty","v"],t.T))) +s($,"bXh","bvp",()=>A.d3(A.b(["nm","p","s","hd","d"],t.T))) +s($,"bXo","bvt",()=>A.d3(A.b(["ty","d"],t.T))) +s($,"c2p","bzm",()=>A.d3(A.b(["t","f","s","j","tr","lh","ls","fc","sc","sw","of","ps","sz"],t.T))) +s($,"bXV","bvK",()=>A.d3(A.b(["ef"],t.T))) +s($,"bXW","bvL",()=>A.d3(A.b(["nm","v"],t.T))) +s($,"bYi","bvU",()=>A.d3(A.b(["ch","size","w","style","fFamily","data"],t.T))) +s($,"bYh","bvT",()=>A.d3(A.b(["shapes"],t.T))) +s($,"bYj","bvV",()=>A.d3(A.b(["fFamily","fName","fStyle","ascent"],t.T))) +s($,"bYs","bw0",()=>A.d3(A.b(["nm","g","o","t","s","e","r","hd"],t.T))) +s($,"bYr","bw_",()=>A.d3(A.b(["p","k"],t.T))) +s($,"bYv","bw3",()=>A.d3(A.b(["nm","g","o","t","s","e","w","lc","lj","ml","hd","d"],t.T))) +s($,"bYu","bw2",()=>A.d3(A.b(["p","k"],t.T))) +s($,"bYt","bw1",()=>A.d3(A.b(["n","v"],t.T))) +s($,"bYZ","bwl",()=>A.d3(A.b(["x","y"],t.T))) +s($,"bZ6","bjb",()=>A.d3(A.b(["t","s","e","o","i","h","to","ti"],t.T))) +s($,"bZ5","bja",()=>A.d3(A.b(["x","y"],t.T))) +s($,"bZ7","bwq",()=>A.d3(A.b(["k"],t.T))) +s($,"bZ9","bws",()=>A.d3(A.b(["nm","ind","refId","ty","parent","sw","sh","sc","ks","tt","masksProperties","shapes","t","ef","sr","st","w","h","ip","op","tm","cl","hd","ao","bm"],t.T))) +s($,"bZa","bwt",()=>A.d3(A.b(["d","a"],t.T))) +s($,"bZ8","bwr",()=>A.d3(A.b(["ty","nm"],t.T))) +s($,"bZh","bwz",()=>A.d3(A.b(["w","h","ip","op","fr","v","layers","assets","fonts","chars","markers"],t.T))) +s($,"bZe","bww",()=>A.d3(A.b(["id","layers","w","h","p","u"],t.T))) +s($,"bZf","bwx",()=>A.d3(A.b(["list"],t.T))) +s($,"bZg","bwy",()=>A.d3(A.b(["cm","tm","dr"],t.T))) +s($,"bZs","bwE",()=>A.d3(A.b(["nm","mm","hd"],t.T))) +s($,"bYX","Kq",()=>B.bn.dB("'\\")) +s($,"bYV","Kp",()=>B.bn.dB('"\\')) +s($,"bYY","bj9",()=>B.bn.dB("{}[]:, \n\t\r\f/\\;#=")) +s($,"bYW","bj8",()=>B.bn.dB("\n\r")) +s($,"bYU","bwk",()=>B.bn.dB("*/")) +s($,"c_p","bxn",()=>A.d3(A.b(["nm","sy","pt","p","r","or","os","ir","is","hd","d"],t.T))) +s($,"c_A","bxu",()=>A.d3(A.b(["nm","p","s","r","hd"],t.T))) +s($,"c_G","bxA",()=>A.d3(A.b(["nm","c","o","tr","hd"],t.T))) +s($,"c_H","bxB",()=>A.d3(A.b(["nm","r","hd"],t.T))) +s($,"c2q","bzl",()=>A.d3(A.b(["c","v","i","o"],t.T))) +s($,"c_S","bxI",()=>A.d3(A.b(["nm","c","o","fillEnabled","r","hd"],t.T))) +s($,"c_T","bxJ",()=>A.d3(A.b(["nm","hd","it"],t.T))) +s($,"c_U","bxK",()=>A.d3(A.b(["nm","ind","ks","hd"],t.T))) +s($,"c_W","bxM",()=>A.d3(A.b(["nm","c","w","o","lc","lj","ml","hd","d"],t.T))) +s($,"c_V","bxL",()=>A.d3(A.b(["n","v"],t.T))) +s($,"c_X","bxN",()=>A.d3(A.b(["s","e","o","nm","m","hd"],t.T))) +s($,"c4J","bAN",()=>{var q=t.K +return new A.aJM(A.D(q,A.ac("an
    ")),A.D(q,t.zI))}) +s($,"bYk","bvW",()=>A.cC([$.nS(),$.bdB()],A.ac("a9N"))) +s($,"bYI","bwc",()=>{var q=A.bw("",!1,!1,!1),p=A.bw("-->",!0,!1,!1),o=A.bw("\\?>",!0,!1,!1),n=A.bw(">",!0,!1,!1),m=A.bw("]]>",!0,!1,!1),l=$.nS() +return A.b([q,p,o,n,m,l,l],A.ac("v"))}) +s($,"bY4","bvO",()=>A.bET(A.A8(A.b([B.Kq,B.Lb,B.Ll,B.KS,B.Kt],t.vA),t.Ye),A.A8(A.b([A.bFZ(),new A.acy(!0,!0,A.b([A.beq("del",2)],t.IF),A.bw("~+",!0,!0,!1),126),new A.a_l(A.bw("((?:(?:https?|ftp):\\/\\/|www\\.)(?:[-_a-z0-9]+\\.)*(?:[-a-z0-9]+\\.[-a-z0-9]+)[^\\s<]*[^\\s{var q=A.bw("<([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>",!0,!0,!1),p=A.bw("<(([a-zA-Z][a-zA-Z\\-\\+\\.]+):(?://)?[^\\s>]*)>",!0,!0,!1),o=A.bw("(?:\\\\| +)\\n",!0,!0,!1),n=$.bvM() +return A.A8(A.b([new A.a39(q,60),new A.a_m(p,null),new A.a6d(o,null),new A.MJ(!0,!0,n,A.bw("\\*+",!0,!0,!1),42),new A.MJ(!0,!1,n,A.bw("_+",!0,!0,!1),95),new A.a13(A.bw("(`+(?!`))((?:.|\\n)*?[^`])\\1(?!`)",!0,!0,!1),null),new A.abY(A.bw(" \n",!0,!0,!1),32)],t.xB),t.dG)}) +s($,"bXK","bj2",()=>A.bw("[!\"#$%&'()*+,\\-./:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]",!0,!1,!1)) +s($,"bXY","bvM",()=>A.b([A.beq("em",1),A.beq("strong",2)],t.IF)) +s($,"bZb","bwu",()=>A.bw("^\\s*$",!0,!1,!1)) +s($,"c3N","nS",()=>A.bw("^(?:[ \\t]*)$",!0,!1,!1)) +s($,"c4I","bk5",()=>A.bw("^[ ]{0,3}(=+|-+)\\s*$",!0,!1,!1)) +s($,"c3R","bjW",()=>A.bw("^ {0,3}(#{1,6})(?:[ \\x09\\x0b\\x0c].*?)?(?:\\s(#*)\\s*)?$",!0,!1,!1)) +s($,"c3A","bjR",()=>A.bw("^[ ]{0,3}>[ \\t]?.*$",!0,!1,!1)) +s($,"c3W","avz",()=>A.bw("^(?: | {0,3}\\t)(.*)$",!0,!1,!1)) +s($,"c3F","avv",()=>A.bw("^([ ]{0,3})(?:(?`{3,})(?[^`]*)|(?~{3,})(?.*))$",!0,!1,!1)) +s($,"c3S","avx",()=>A.bw("^ {0,3}([-*_])[ \\t]*\\1[ \\t]*\\1(?:\\1|[ \\t])*$",!0,!1,!1)) +s($,"c4l","avA",()=>A.bw("^[ ]{0,3}(?:(\\d{1,9})[\\.)]|[*+-])(?:[ \\t]+(.*))?$",!0,!1,!1)) +s($,"c4L","bAP",()=>A.bw("^[ ]{0,3}\\|?([ \\t]*:?\\-+:?[ \\t]*\\|[ \\t]*)+([ \\t]|[ \\t]*:?\\-+:?[ \\t]*)?$",!0,!1,!1)) +s($,"c3P","bjV",()=>A.bw("(^[ ]{0,3})\\[\\^([^\\] \\r\\n\\x00\\t]+)\\]:[ \\t]*",!0,!1,!1)) +s($,"c3M","bdB",()=>A.bw("",!0,!1,!1)) +s($,"c3T","avy",()=>A.bw("^ {0,3}(?:<(?pre|script|style|textarea)(?:\\s|>|$)|(? + {%- for css in css_files %} + {{ css_tag(css) }} + {%- endfor %} + {%- endblock %} + + {%- block scripts %} + + {%- for js in script_files %} + {{ js_tag(js) }} + {%- endfor %} + + {%- endblock %} + + {%- block links %} + + {%- if pageurl %} + + {%- endif %} + + + + + + + + {%- if hasdoc('genindex') %} + + {%- endif %} + {%- if hasdoc('search') %} + + {%- endif %} + {%- if hasdoc('copyright') %} + + {%- endif %} + {%- if next %} + + {%- endif %} + {%- if prev %} + + {%- endif %} + {%- endblock %} + + + + +
    + + + +
    +
    + +
    + {% block body %} {% endblock %} +
    + +
    + {%- if prev %} + + +
    +

    Previous:

    +

    {{ prev.title|striptags|e }}

    +
    +
    + {%- endif %} +
    + {%- if next %} + +
    +

    Next:

    +

    {{ next.title|striptags|e }}

    +
    + +
    + {%- endif %} +
    +
    + + + +
    +
    + +{% block footer %} +{% endblock %} + + + diff --git a/docs/1.18.0/_static/logo_flame.png b/docs/1.18.0/_static/logo_flame.png new file mode 100644 index 000000000..19dc8c08f Binary files /dev/null and b/docs/1.18.0/_static/logo_flame.png differ diff --git a/docs/1.18.0/_static/menu-expand.js b/docs/1.18.0/_static/menu-expand.js new file mode 100644 index 000000000..2eea638fe --- /dev/null +++ b/docs/1.18.0/_static/menu-expand.js @@ -0,0 +1,21 @@ +// Auto expand the first expandable node ("flame") when loaded. +window.addEventListener('load', (_event) => { + expandFirstOnHome(); +}); + +/** + * This method expands the first expandable node on the home page. + * + * If the current page is not the home page, this method does nothing. + */ +// When the path name ends with index.html or an empty string, it is home page. +function expandFirstOnHome() { + const parts = location.pathname.split('/'); + const lastPart = parts[parts.length - 1]; + const isHomePage = (lastPart == '') || (lastPart == 'index.html'); + + if (isHomePage) { + // expand the first expandable node in the toctree + $('li.toctree-l1').has('ul').first().addClass('current'); + } +} diff --git a/docs/1.18.0/_static/minus.png b/docs/1.18.0/_static/minus.png new file mode 100644 index 000000000..d96755fda Binary files /dev/null and b/docs/1.18.0/_static/minus.png differ diff --git a/docs/1.18.0/_static/package.css b/docs/1.18.0/_static/package.css new file mode 100644 index 000000000..6f0a1fde0 --- /dev/null +++ b/docs/1.18.0/_static/package.css @@ -0,0 +1,27 @@ +.package { + display: flex; + margin-bottom: 12pt; +} +.package > p:first-child { + margin: 0 12pt 0 0; +} +.package > p:first-child > a { + background: #9b6814; + border-left: 4px solid #ffc43c; + box-shadow: 2px 2px 4px black; + color: #ffffff; + display: block; + font-family: var(--font-mono); + min-width: 110pt; + padding: 8pt 10pt; +} +.package > p:first-child > a:hover { + background: #d48f1d; + text-shadow: 1px 1px 1px black; +} +.package > div.container > p { + margin-bottom: 6pt; +} +.package > div.container > p:last-child { + margin-bottom: 0; +} diff --git a/docs/1.18.0/_static/plus.png b/docs/1.18.0/_static/plus.png new file mode 100644 index 000000000..7107cec93 Binary files /dev/null and b/docs/1.18.0/_static/plus.png differ diff --git a/docs/1.18.0/_static/pygments.css b/docs/1.18.0/_static/pygments.css new file mode 100644 index 000000000..0e1cdf3f3 --- /dev/null +++ b/docs/1.18.0/_static/pygments.css @@ -0,0 +1,85 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #49483e } +.highlight { background: #272822; color: #f8f8f2 } +.highlight .c { color: #959077 } /* Comment */ +.highlight .err { color: #ed007e; background-color: #1e0010 } /* Error */ +.highlight .esc { color: #f8f8f2 } /* Escape */ +.highlight .g { color: #f8f8f2 } /* Generic */ +.highlight .k { color: #66d9ef } /* Keyword */ +.highlight .l { color: #ae81ff } /* Literal */ +.highlight .n { color: #f8f8f2 } /* Name */ +.highlight .o { color: #ff4689 } /* Operator */ +.highlight .x { color: #f8f8f2 } /* Other */ +.highlight .p { color: #f8f8f2 } /* Punctuation */ +.highlight .ch { color: #959077 } /* Comment.Hashbang */ +.highlight .cm { color: #959077 } /* Comment.Multiline */ +.highlight .cp { color: #959077 } /* Comment.Preproc */ +.highlight .cpf { color: #959077 } /* Comment.PreprocFile */ +.highlight .c1 { color: #959077 } /* Comment.Single */ +.highlight .cs { color: #959077 } /* Comment.Special */ +.highlight .gd { color: #ff4689 } /* Generic.Deleted */ +.highlight .ge { color: #f8f8f2; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #f8f8f2; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #f8f8f2 } /* Generic.Error */ +.highlight .gh { color: #f8f8f2 } /* Generic.Heading */ +.highlight .gi { color: #a6e22e } /* Generic.Inserted */ +.highlight .go { color: #66d9ef } /* Generic.Output */ +.highlight .gp { color: #ff4689; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { color: #f8f8f2; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #959077 } /* Generic.Subheading */ +.highlight .gt { color: #f8f8f2 } /* Generic.Traceback */ +.highlight .kc { color: #66d9ef } /* Keyword.Constant */ +.highlight .kd { color: #66d9ef } /* Keyword.Declaration */ +.highlight .kn { color: #ff4689 } /* Keyword.Namespace */ +.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */ +.highlight .kr { color: #66d9ef } /* Keyword.Reserved */ +.highlight .kt { color: #66d9ef } /* Keyword.Type */ +.highlight .ld { color: #e6db74 } /* Literal.Date */ +.highlight .m { color: #ae81ff } /* Literal.Number */ +.highlight .s { color: #e6db74 } /* Literal.String */ +.highlight .na { color: #a6e22e } /* Name.Attribute */ +.highlight .nb { color: #f8f8f2 } /* Name.Builtin */ +.highlight .nc { color: #a6e22e } /* Name.Class */ +.highlight .no { color: #66d9ef } /* Name.Constant */ +.highlight .nd { color: #a6e22e } /* Name.Decorator */ +.highlight .ni { color: #f8f8f2 } /* Name.Entity */ +.highlight .ne { color: #a6e22e } /* Name.Exception */ +.highlight .nf { color: #a6e22e } /* Name.Function */ +.highlight .nl { color: #f8f8f2 } /* Name.Label */ +.highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +.highlight .nx { color: #a6e22e } /* Name.Other */ +.highlight .py { color: #f8f8f2 } /* Name.Property */ +.highlight .nt { color: #ff4689 } /* Name.Tag */ +.highlight .nv { color: #f8f8f2 } /* Name.Variable */ +.highlight .ow { color: #ff4689 } /* Operator.Word */ +.highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +.highlight .mb { color: #ae81ff } /* Literal.Number.Bin */ +.highlight .mf { color: #ae81ff } /* Literal.Number.Float */ +.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */ +.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */ +.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */ +.highlight .sa { color: #e6db74 } /* Literal.String.Affix */ +.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */ +.highlight .sc { color: #e6db74 } /* Literal.String.Char */ +.highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */ +.highlight .sd { color: #e6db74 } /* Literal.String.Doc */ +.highlight .s2 { color: #e6db74 } /* Literal.String.Double */ +.highlight .se { color: #ae81ff } /* Literal.String.Escape */ +.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */ +.highlight .si { color: #e6db74 } /* Literal.String.Interpol */ +.highlight .sx { color: #e6db74 } /* Literal.String.Other */ +.highlight .sr { color: #e6db74 } /* Literal.String.Regex */ +.highlight .s1 { color: #e6db74 } /* Literal.String.Single */ +.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */ +.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #a6e22e } /* Name.Function.Magic */ +.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ +.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ +.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ +.highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */ +.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/1.18.0/_static/search.html b/docs/1.18.0/_static/search.html new file mode 100644 index 000000000..812598308 --- /dev/null +++ b/docs/1.18.0/_static/search.html @@ -0,0 +1,38 @@ +{# +basic/search.html +~~~~~~~~~~~~~~~~~ + +Template for the search page. + +:copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. +:license: BSD, see LICENSE for details. +#} +{%- extends "layout.html" %} +{% set title = 'Search' %} + +{%- block scripts %} +{{ super() }} + + +{%- endblock %} + +{% block footer %} + +{# this is used when loading the search index using $.ajax fails, +such as on Chrome for documents on localhost #} + +{{ super() }} +{% endblock %} + +{% block body %} + + +
    +
    +{% endblock %} diff --git a/docs/1.18.0/_static/searchtools.js b/docs/1.18.0/_static/searchtools.js new file mode 100644 index 000000000..7918c3fab --- /dev/null +++ b/docs/1.18.0/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/docs/1.18.0/_static/sphinx_highlight.js b/docs/1.18.0/_static/sphinx_highlight.js new file mode 100644 index 000000000..8a96c69a1 --- /dev/null +++ b/docs/1.18.0/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/1.18.0/_static/theme.conf b/docs/1.18.0/_static/theme.conf new file mode 100644 index 000000000..5e199edda --- /dev/null +++ b/docs/1.18.0/_static/theme.conf @@ -0,0 +1,12 @@ +[theme] +inherit = basic +style = flames.css +pygments_style = sphinx + +[options] +logo = +collapse_navigation = True +sticky_navigation = True +navigation_depth = 4 +includehidden = True +titles_only = diff --git a/docs/1.18.0/_static/versions.js b/docs/1.18.0/_static/versions.js new file mode 100644 index 000000000..ffbc525f2 --- /dev/null +++ b/docs/1.18.0/_static/versions.js @@ -0,0 +1,104 @@ + +// Detect the doc version of the current page. This can be done by +// looking at the URL, which is supposed to be of the form +// `https://docs.flame-engine.org/${version}/...`. Thus, the first part in the +// path is presumed to be the version. +function getCurrentDocVersion() { + if (location.host === 'docs.flame-engine.org') { + const parts = location.pathname.split('/'); + if (parts.length >= 2 && parts[0] === '') { + return parts[1]; + } + } + return 'local'; +} + +// global constant - special versions from the docs +const specialVersions = ['main', 'local']; + +// Given a list of versions (as plain strings), return the latest version. +function getLatestVersion(versions) { + return versions.filter(e => !specialVersions.includes(e))[0]; +} + +// Given a list of versions (as plain strings), convert them into HTML +// links, so that they can be placed into the menu. +function convertVersionsToHtmlLinks(versionsList, currentVersion) { + let out = ''; + const latestVersion = getLatestVersion(versionsList); + for (let version of versionsList) { + version = version.trim(); + if (version === '') continue; + let classes = 'btn btn-secondary topbarbtn'; + if (version === currentVersion) { + classes += ' selected'; + } + // Link to the 'latest/` path if it is the latest version. + if (version === latestVersion) { + out += ` + + `; + } else { + out += ` + + `; + } + } + return out; +} + +function maybeAddWarning(versions, currentVersion) { + const latestVersion = getLatestVersion(versions); + const nonWarningVersions = [...specialVersions, 'latest', latestVersion]; + const showWarning = !nonWarningVersions.includes(currentVersion); + if (showWarning) { + $('#version-warning') + .find('.version').text(currentVersion).end() + .removeClass('hidden'); + } +} + +function buildVersionsMenu(data) { + const versions = data.split('\n'); + const currentVersion = getCurrentDocVersion(); + const versionButtons = convertVersionsToHtmlLinks(versions, currentVersion); + $('div.versions-placeholder').append(` +
    +
    + + ${currentVersion} +
    + +
    + `); + $("#versions-menu").on("click", function() { + $(this).toggleClass("active"); + }).on("blur", function() { + // A timeout ensures that `click` can propagate to child elements. + setTimeout(() => $(this).removeClass("active"), 200); + }); + + maybeAddWarning(versions, currentVersion); +} + +// Start loading the versions list as soon as possible, don't wait for DOM +const versionsRequest = $.get( + "/versions.txt" +); + +// Now wait for DOM to finish loading +$(function() { + // Lastly, wait for versions to finish loading too. + versionsRequest.then(buildVersionsMenu) + .fail(function() { + console.log("Failed to load versions.txt, using default version list"); + buildVersionsMenu("local\nmain\n1.0.0\n"); + }); +}); diff --git a/docs/1.18.0/_static/yarn_lexer.css b/docs/1.18.0/_static/yarn_lexer.css new file mode 100644 index 000000000..6f9b0792b --- /dev/null +++ b/docs/1.18.0/_static/yarn_lexer.css @@ -0,0 +1,32 @@ + +/* Single-line comment */ +.highlight-yarn span.c { + color: #505050; +} + +/* Character name at the start of a line */ +.highlight-yarn span.nt { + color: #10d576; +} + +/* Variable */ +.highlight-yarn span.nv { + color: #80a4da; +} + +/* Hashtag */ +.highlight-yarn span.ch { + color: #1e6557; + font-style: italic; +} + +/* Markup */ +.highlight-yarn span.sb { + color: #816417; +} + +/* Built-in command */ +.highlight-yarn span.k { + color: #76e9ff; + font-weight: bold; +} diff --git a/docs/1.18.0/bridge_packages/bridge_packages.html b/docs/1.18.0/bridge_packages/bridge_packages.html new file mode 100644 index 000000000..c6129df4e --- /dev/null +++ b/docs/1.18.0/bridge_packages/bridge_packages.html @@ -0,0 +1,457 @@ + + + + + + + Bridge Packages — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + +
    +

    Bridge Packages

    +
    +

    flame_audio

    +
    +

    Play multiple audio files simultaneously (bridge package for AudioPlayers).

    +
    +
    +
    +

    flame_bloc

    +
    +

    A predictable state management library (bridge package for Bloc).

    +
    +
    +
    +

    flame_fire_atlas

    +
    +

    Create texture atlases for games (bridge package for FireAtlas).

    +
    +
    +
    +

    flame_forge2d

    +
    +

    A Box2D physics engine (bridge package for Forge2D).

    +
    +
    +
    +

    flame_isolate

    +
    +

    Use isolates to offload heavy computations to another thread.

    +
    +
    +
    +

    flame_lottie

    +
    +

    Use Lottie animations in Flame (bridge package for Lottie).

    +
    +
    +
    +

    flame_network_assets

    +
    +

    Fetch assets over the network.

    +
    +
    +
    +

    flame_oxygen

    +
    +

    Replace FCS with the Oxygen Entity Component System.

    +
    +
    +
    +

    flame_rive

    +
    +

    Create interactive animations (bridge package for Rive).

    +
    +
    +
    +

    flame_riverpod

    +
    +

    A reactive caching and data-binding framework (bridge package for Riverpod).

    +
    +
    +
    +

    flame_spine

    +
    +

    Use Spine skeletal animations (bridge package for Spine).

    +
    +
    +
    +

    flame_splash_screen

    +
    +

    Add the “Powered by Flame” splash screen.

    +
    +
    +
    +

    flame_svg

    +
    +

    Draw SVG files in Flutter (bridge package for flutter_svg).

    +
    +
    +
    +

    flame_tiled

    +
    +

    2D tilemap level editor (bridge package for Tiled).

    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_audio/audio.html b/docs/1.18.0/bridge_packages/flame_audio/audio.html new file mode 100644 index 000000000..4fdc4b331 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_audio/audio.html @@ -0,0 +1,455 @@ + + + + + + + Audio — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Audio

    +

    Playing audio is essential for most games, so we made it simple!

    +

    First you have to add flame_audio to your dependency +list in your pubspec.yaml file:

    +
    dependencies:
    +  flame_audio: VERSION
    +
    +
    +

    The latest version can be found on pub.dev.

    +

    After installing the flame_audio package, you can add audio files in the assets section of your +pubspec.yaml file. Make sure that the audio files exists in the paths that you provide.

    +

    The default directory for FlameAudio is assets/audio (which can be changed by providing your own +instance of AudioCache).

    +

    For the examples below, your pubspec.yaml file needs to contain something like this:

    +
    flutter:
    +  assets:
    +    - assets/audio/explosion.mp3
    +    - assets/audio/music.mp3
    +
    +
    +

    Then you have the following methods at your disposal:

    +
    import 'package:flame_audio/flame_audio.dart';
    +
    +// For shorter reused audio clips, like sound effects
    +FlameAudio.play('explosion.mp3');
    +
    +// For looping an audio file
    +FlameAudio.loop('music.mp3');
    +
    +// For playing a longer audio file
    +FlameAudio.playLongAudio('music.mp3');
    +
    +// For looping a longer audio file
    +FlameAudio.loopLongAudio('music.mp3');
    +
    +// For background music that should be paused/played when the pausing/resuming
    +// the game
    +FlameAudio.bgm.play('music.mp3');
    +
    +
    +

    The difference between the play/loop and playLongAudio/loopLongAudio is that play/loop makes +use of optimized features that allow sounds to be looped without gaps between their iterations, and +almost no drop on the game frame rate will happen. You should whenever possible, prefer the former +methods.

    +

    playLongAudio/loopLongAudio allows for audios of any length to be played, but they do create frame +rate drop, and the looped audio will have a small gap between iterations.

    +

    You can use the Bgm class (via FlameAudio.bgm) to play looping background music +tracks. The Bgm class lets Flame automatically manage the pausing and resuming of background music +tracks when the game is sent to background or comes back to the foreground.

    +

    You can use the AudioPool class if you want to fire quick sound effects in a very +efficient manner. AudioPool will keep a pool of AudioPlayers preloaded with a given sound, and +allow you to play them very fast in quick succession.

    +

    Some file formats that work across devices and that we recommend are: MP3, OGG and WAV.

    +

    This bridge library (flame_audio) uses audioplayers +in order to allow for playing multiple sounds simultaneously (crucial in a game). You can check the +link for a more in-depth explanation.

    +

    Both on play and loop you can pass an additional optional double parameter, the volume +(defaults to 1.0).

    +

    Both the play and loop methods return an instance of an AudioPlayer from the +audioplayers lib, that allows you to stop, pause and +configure other parameters.

    +

    In fact you can always use AudioPlayers directly to gain full control over how your audio is played +– the FlameAudio class is just a wrapper for common functionality.

    +
    +

    Caching

    +

    You can pre-load your assets. Audios need to be stored in the memory the first time they +are requested; therefore, the first time you play each mp3 you might get a delay. In order to +pre-load your audios, just use:

    +
    await FlameAudio.audioCache.load('explosion.mp3');
    +
    +
    +

    You can load all your audios in the beginning in your game’s onLoad method so that they always +play smoothly. To load multiple audio files, use the loadAll method:

    +
    await FlameAudio.audioCache.loadAll(['explosion.mp3', 'music.mp3']);
    +
    +
    +

    Finally, you can use the clear method to remove a file that has been loaded into the cache:

    +
    FlameAudio.audioCache.clear('explosion.mp3');
    +
    +
    +

    There is also a clearCache method, that clears the whole cache.

    +

    This might be useful if, for instance, your game has multiple levels and each has a different +set of sounds and music.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_audio/audio_pool.html b/docs/1.18.0/bridge_packages/flame_audio/audio_pool.html new file mode 100644 index 000000000..40058e878 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_audio/audio_pool.html @@ -0,0 +1,381 @@ + + + + + + + AudioPool — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    AudioPool

    +

    An AudioPool is a provider of AudioPlayers that are pre-loaded with +local assets to minimize delays.

    +

    A single AudioPool always plays the same sound, usually a quick sound +effect, like a laser shooting from your ship or a jump sound for your +platformer.

    +

    The advantage of using Audio Pool is that by configuring a minimum +(starting) size, and a maximum size, the pool will create and preload +some players, and allow them to be re-used many times.

    +

    You can use the helper method FlameAudio.createPool to create AudioPool +instances using the same global FlameAudio.audioCache.

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_audio/bgm.html b/docs/1.18.0/bridge_packages/flame_audio/bgm.html new file mode 100644 index 000000000..95626027c --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_audio/bgm.html @@ -0,0 +1,446 @@ + + + + + + + Looping Background Music — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Looping Background Music

    +

    With the Bgm class, you can manage looping of background music tracks with regards to application +(or game) lifecycle state changes.

    +

    When the application is terminated, or sent to background, Bgm will automatically pause +the currently playing music track. Similarly, when the application is resumed, Bgm will resume the +background music. Manually pausing and resuming your tracks is also supported.

    +

    For this class to function properly, the observer must be registered by calling the following:

    +
    FlameAudio.bgm.initialize();
    +
    +
    +

    IMPORTANT Note: The initialize function must be called at a point in time where an instance of +the WidgetsBinding class already exists. Best practice is to put this call inside of your game’s +onLoad method`.

    +

    In cases where you’re done with background music but still want to keep the application/game +running, use the dispose function to remove the observer.

    +
    FlameAudio.bgm.dispose();
    +
    +
    +

    To play a looping background music track, run:

    +
    import 'package:flame_audio/flame_audio.dart';
    +
    +FlameAudio.bgm.play('adventure-track.mp3');
    +
    +
    +

    You must have an appropriate folder structure and add the files to the pubspec.yaml file, as +explained in Flame Audio documentation.

    +
    +

    Caching music files

    +

    The Bgm class will use the static instance of FlameAudio for storing cached +music files by default.

    +

    So in order to pre-load music, you can use the same recommendations from the +Flame Audio documentation.

    +

    You can optionally create your own Bgm instances with different backing AudioCaches, +if you so desire.

    +
    +
    +

    Methods

    +
    +

    Play

    +

    The play function takes in a String that should be a path that points to the location of the +music file to be played (following the Flame Audio folder structure requirements).

    +

    You can pass an additional optional double parameter which is the volume (defaults to 1.0).

    +

    Examples:

    +
    FlameAudio.bgm.play('music/boss-fight/level-382.mp3');
    +
    +
    +
    FlameAudio.bgm.play('music/world-map.mp3', volume: .25);
    +
    +
    +
    +
    +

    Stop

    +

    To stop a currently playing background music track, just call stop.

    +
    FlameAudio.bgm.stop();
    +
    +
    +
    +
    +

    Pause and Resume

    +

    To manually pause and resume background music you can use the pause and resume functions.

    +

    FlameAudio.bgm automatically handles pausing and resuming the currently playing background music +track. Manually pausing prevents the app/game from auto-resuming when focus is given back to the +app/game.

    +
    FlameAudio.bgm.pause();
    +
    +
    +
    FlameAudio.bgm.resume();
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_audio/flame_audio.html b/docs/1.18.0/bridge_packages/flame_audio/flame_audio.html new file mode 100644 index 000000000..7c57e71d0 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_audio/flame_audio.html @@ -0,0 +1,390 @@ + + + + + + + flame_audio — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + + + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_bloc/bloc.html b/docs/1.18.0/bridge_packages/flame_bloc/bloc.html new file mode 100644 index 000000000..d8c5cad96 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_bloc/bloc.html @@ -0,0 +1,473 @@ + + + + + + + flame_bloc — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_bloc

    +

    flame_bloc is a bridge library for using Bloc in your Flame +game. flame_bloc offers a simple and natural (as in similar to flutter_bloc) way to use blocs and +cubits inside a FlameGame. Bloc offers way to make game state changes predictable by regulating when +a game state change can occur and offers a single way to change game state throughout an entire +Game.

    +

    To use it in your game you just need to add flame_bloc to your pubspec.yaml, as can be seen in the +Flame Bloc example +and in the pub.dev installation instructions.

    +
    +

    How to use

    +

    Lets assume we have a bloc that handles player inventory, first we need to make it available to our +components.

    +

    We can do that by using FlameBlocProvider component:

    +
    class MyGame extends FlameGame {
    +  @override
    +  Future<void> onLoad() async {
    +    await add(
    +      FlameBlocProvider<PlayerInventoryBloc, PlayerInventoryState>(
    +        create: () => PlayerInventoryBloc(),
    +        children: [
    +          Player(),
    +          // ...
    +        ],
    +      ),
    +    );
    +  }
    +}
    +
    +
    +

    With the above changes, the Player component will now have access to our bloc.

    +

    If more than one bloc needs to be provided, FlameMultiBlocProvider can be used in a similar +fashion:

    +
    class MyGame extends FlameGame {
    +  @override
    +  Future<void> onLoad() async {
    +    await add(
    +      FlameMultiBlocProvider(
    +        providers: [
    +          FlameBlocProvider<PlayerInventoryBloc, PlayerInventoryState>(
    +            create: () => PlayerInventoryBloc(),
    +          ),
    +          FlameBlocProvider<PlayerStatsBloc, PlayerStatsState>(
    +            create: () => PlayerStatsBloc(),
    +          ),
    +        ],
    +        children: [
    +          Player(),
    +          // ...
    +        ],
    +      ),
    +    );
    +  }
    +}
    +
    +
    +

    Listening to states changes at the component level can be done with two approaches:

    +

    By using FlameBlocListener component:

    +
    class Player extends PositionComponent {
    +  @override
    +  Future<void> onLoad() async {
    +    await add(
    +      FlameBlocListener<PlayerInventoryBloc, PlayerInventoryState>(
    +        listener: (state) {
    +          updateGear(state);
    +        },
    +      ),
    +    );
    +  }
    +}
    +
    +
    +

    Or by using FlameBlocListenable mixin:

    +
    class Player extends PositionComponent
    +    with FlameBlocListenable<PlayerInventoryBloc, PlayerInventoryState> {
    +
    +  @override
    +  void onNewState(state) {
    +    updateGear(state);
    +  }
    +}
    +
    +
    +

    If all your component need is to simply access a bloc, the FlameBlocReader mixin can be applied to +a component:

    +
    class Player extends PositionComponent
    +    with FlameBlocReader<PlayerStatsBloc, PlayerStatsState> {
    +
    +  void takeHit() {
    +    bloc.add(const PlayerDamaged());
    +  }
    +}
    +
    +
    +

    Note that one limitation of the mixin is that it can access only a single bloc.

    +
    +
    +

    Full Example

    +

    You can check an example +here.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_bloc/bloc_components.html b/docs/1.18.0/bridge_packages/flame_bloc/bloc_components.html new file mode 100644 index 000000000..2cf92bcfe --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_bloc/bloc_components.html @@ -0,0 +1,472 @@ + + + + + + + Components — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Components

    +
    +

    FlameBlocProvider

    +

    FlameBlocProvider is a Component which creates and provides a bloc to its children.
    +The bloc will only live while this component is alive. It is used as a dependency injection (DI) +widget so that a single instance of a bloc can be provided to multiple Components within a subtree.

    +

    FlameBlocProvider should be used to create new blocs which will be made available to the rest of the +subtree.

    +
    FlameBlocProvider<BlocA, BlocAState>(
    +  create: () => BlocA(),
    +  children: [...]
    +);
    +
    +
    +

    FlameBlocProvider can be used to provide an existing bloc to a new portion of the Component tree.

    +
    FlameBlocProvider<BlocA, BlocAState>.value(
    +  value: blocA,
    +  children: [...],
    +);
    +
    +
    +
    +
    +

    FlameMultiBlocProvider

    +

    Similar to FlameBlocProvider, but provides multiples blocs down to the component tree

    +
    FlameMultiBlocProvider(
    +  providers: [
    +    FlameBlocProvider<BlocA, BlocAState>(
    +      create: () => BlocA(),
    +    ),
    +    FlameBlocProvider<BlocB, BlocBState>.value(
    +      create: () => BlocB(),
    +    ),
    +    ],
    +  children: [...],
    +)
    +
    +
    +
    +
    +

    FlameBlocListener

    +

    FlameBlocListener is Component which can listen to changes in a Bloc state. It invokes +the onNewState in response to state changes in the bloc. For fine-grained control over when +the onNewState function is called an optional listenWhen can be provided. listenWhen takes the +previous bloc state and current bloc state and returns a boolean. If listenWhen returns +true, onNewState will be called with state. If listenWhen returns false, onNewState will not +be called with state.

    +

    alternatively you can use FlameBlocListenable mixin to listen state changes on Component.

    +
    FlameBlocListener<GameStatsBloc, GameStatsState>(
    +  listenWhen: (previousState, newState) {
    +      // return true/false to determine whether or not
    +      // to call listener with state
    +  },
    +  onNewState: (state) {
    +          // do stuff here based on state
    +  },
    +)
    +
    +
    +
    +
    +

    FlameBlocListenable

    +

    FlameBlocListenable is an alternative to FlameBlocListener to listen state changes.

    +
    class ComponentA extends Component
    +    with FlameBlocListenable<BlocA, BlocAState> {
    +
    +  @override
    +  bool listenWhen(PlayerState previousState, PlayerState newState) {
    +    // return true/false to determine whether or not
    +    // to call listener with state
    +  }
    +
    +  @override
    +  void onNewState(PlayerState state) {
    +    super.onNewState(state);
    +    // do stuff here based on state
    +  }
    +}
    +
    +
    +
    +
    +

    FlameBlocReader

    +

    FlameBlocReader is mixin that allows you to read the current state of bloc on Component. It is +Useful for components that needs to only read a bloc current state or to trigger an event on it. You +can have only one reader on Component

    +
    class InventoryReader extends Component
    +    with FlameBlocReader<InventoryCubit, InventoryState> {}
    +
    +    /// inside game
    +    
    +    final component = InventoryReader();
    +    // reading current state
    +    var state = component.bloc
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_bloc/flame_bloc.html b/docs/1.18.0/bridge_packages/flame_bloc/flame_bloc.html new file mode 100644 index 000000000..3e879eb5b --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_bloc/flame_bloc.html @@ -0,0 +1,388 @@ + + + + + + + flame_bloc — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + + + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_fire_atlas/fire_atlas.html b/docs/1.18.0/bridge_packages/flame_fire_atlas/fire_atlas.html new file mode 100644 index 000000000..33b046bb7 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_fire_atlas/fire_atlas.html @@ -0,0 +1,465 @@ + + + + + + + Flame fire atlas — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Flame fire atlas

    +

    Flame fire atlas is a texture atlas lib for Flame. By using flame_fire_atlas one can access images +and animations stored in a .fa texture atlas by referring to them by their named keys.

    +
    +

    FireAtlas

    +

    FireAtlas is a tool for handling texture atlases. Atlases can be created using the +Fire Atlas Editor.

    +
    +

    Creating Atlas

    +

    To create a texture atlas open Fire Atlas Editor.

    +

    Select new atlas and give the atlas a name, tile width, tile height and an image and press okay. +This will take you to the atlas editor.

    +

    To create a new Sprite in the atlas, select a portion and click the plus button on top left and +give the selection a name and then select type Sprite and press Create Sprite. You can now +see a preview in the right panel of editor.

    +

    To create a new SpriteAnimation in the atlas, select a portion and click the plus button on top +left and give the selection a name and then select type Animation and provide frame count +and steps times (in milliseconds) and select the checkbox to loop the animation, and then +press Create Animation. You can now see a preview of the animation in the right panel of the +editor.

    +

    Once you are done with editing you can download the fire atlas file from top left with +the download icon button.

    +
    +
    +
    +

    Texture atlas

    +

    A Texture atlas is an image that contains data from +several smaller images that have been packed together to reduce overall dimensions. With it, you +reduce the number of images loaded and can speed up the loading time of the game.

    +
    +
    +

    Usage

    +

    To use the bridge library in your game you just need to add flame_fire_atlas to your pubspec.yaml, +as can be seen in +the Flame Fire Atlas example +and in the pub.dev installation instructions.

    +

    Then you have the following methods at your disposal:

    +
    import 'package:flame_fire_atlas/flame_fire_atlas.dart';
    +
    +// Load the atlas from your assets
    +// file at assets/atlas.fa
    +final atlas = await FireAtlas.loadAsset('atlas.fa');
    +
    +//or when inside a game instance, the loadFireAtlas can be used:
    +// file at assets/atlas.fa
    +final atlas = await loadFireAtlas('atlas.fa');
    +
    +// Get a Sprite with the given key.
    +FireAtlas.getSprite('sprite_name')
    +
    +// Get a SpriteAnimation with the given key.
    +FireAtlas.getAnimation('animation_name')
    +
    +
    +

    To use FireAtlas in your game, load the fire atlas file in an onLoad method, either in your game +or a component. Then you can use getSprite and getAnimation to retrieve the mapped assets.

    +
    class ExampleGame extends FlameGame {
    +
    +  late FireAtlas _atlas;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    _atlas = await loadFireAtlas('atlas.fa');
    +
    +    add(
    +      SpriteComponent(
    +        size: Vector2(50, 50),
    +        position: Vector2(0, 50),
    +        sprite: _atlas.getSprite('sprite_name'),
    +      ),
    +    );
    +
    +    add(
    +      SpriteAnimationComponent(
    +        size: Vector2(150, 100),
    +        position: Vector2(150, 100),
    +        animation: _atlas.getAnimation('animation_name'),
    +      ),
    +    );
    +  }
    +
    +}
    +
    +
    +
    +
    +

    Full Example

    +

    You can check an example +here.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_fire_atlas/flame_fire_atlas.html b/docs/1.18.0/bridge_packages/flame_fire_atlas/flame_fire_atlas.html new file mode 100644 index 000000000..12b4ceca4 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_fire_atlas/flame_fire_atlas.html @@ -0,0 +1,385 @@ + + + + + + + flame_fire_atlas — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_fire_atlas

    + +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_forge2d/flame_forge2d.html b/docs/1.18.0/bridge_packages/flame_forge2d/flame_forge2d.html new file mode 100644 index 000000000..1f5e4f50e --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_forge2d/flame_forge2d.html @@ -0,0 +1,409 @@ + + + + + + + flame_forge2d — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + + + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_forge2d/forge2d.html b/docs/1.18.0/bridge_packages/flame_forge2d/forge2d.html new file mode 100644 index 000000000..7ada82b75 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_forge2d/forge2d.html @@ -0,0 +1,497 @@ + + + + + + + Forge2D — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Forge2D

    +

    Blue Fire maintains a ported version of the Box2D physics engine and our +version is called Forge2D.

    +

    If you want to use Forge2D specifically for Flame you should use our bridge library +flame_forge2d and if you +just want to use it in a Dart project you can use the +forge2d library directly.

    +

    To use it in your game you just need to add flame_forge2d to your +pubspec.yaml, as can be seen in the [Forge2D +example +and the pub. dev installation +instructions](https://pub.dev/packages/flame_forge2d).

    +
    +

    Forge2DGame

    +

    If you are going to use Forge2D in your project it can be a good idea to use the Forge2D-specific +FlameGame class, Forge2DGame.

    +

    It is called Forge2DGame and supports both the special Forge2D components called BodyComponents +as well as normal Flame components.

    +

    Forge2DGame has a built-in CameraComponent and has a zoom level set to 10 by default, so your +components will be a lot bigger than in a normal Flame game. This is due to the speed limit in the +Forge2D world, which you would hit very quickly if you are using it with zoom = 1.0. You can +easily change the zoom level either by calling super(zoom: yourZoom) in your constructor or +doing game.cameraComponent.viewfinder.zoom = yourZoom; at a later stage.

    +

    If you are previously familiar with Box2D it can be good to know that the whole concept of the +Box2d world is mapped to world in the Forge2DGame component and every Body that you want to +use as a component should be wrapped in a BodyComponent, and added to the world in your +Forge2DGame.

    +

    You can have have non-physics-related components in your Forge2DGame world’s component list along +with your physical entities. When the update is called, it will use the Forge2D physics engine to +properly update every BodyComponent and other components in the game will be updated according to +the normal FlameGame way.

    +

    In Forge2DGame the gravity is flipped compared to Forge2D to keep the same coordinate system as +in Flame, so a positive y-axis in the gravity like Vector2(0, 10) would be pulling bodies +downwards, meanwhile, a negative y-axis would pull them upwards. The gravity can be set directly in +the constructor of the Forge2DGame.

    +

    A simple Forge2DGame implementation example can be seen in the +examples folder.

    +
    +
    +

    BodyComponent

    +

    The BodyComponent is a wrapper for the Forge2D body, which is the body that the physics engine +is interacting with. To create a BodyComponent you can either:

    +
      +
    • override createBody() and create and return your created body;

    • +
    • use the default createBody() implementation by passing a BodyDef instance (and optionally a +list of FixtureDef instances) to the BodyComponent’s constructor;

    • +
    • use the default createBody() implementation and assign a BodyDef instance to this.bodyDef, +and optionally a list of FixtureDef instances to this.fixtureDefs.

    • +
    +

    The BodyComponent is by default having renderBody = true, since otherwise, it wouldn’t show +anything after you have created a Body and added the BodyComponent to the game. If you want to +turn it off you can just set (or override) renderBody to false.

    +

    Just like any other Flame component you can add children to the BodyComponent, which can be very +useful if you want to add for example animations or other components on top of your body.

    +

    The body that you create should be defined according to Flame’s coordinate system, +not according to the coordinate system of Forge2D (where the Y-axis is flipped).

    +

    :exclamation: In Forge2D you shouldn’t add any bodies as children to other components, +since Forge2D doesn’t have a concept of nested bodies. +So bodies should live on the top level in the physics world, Forge2DGame.world. +So instead of add(Weapon())), world.add(Weapon()) should be used (as below), and the Player +should also of course initially be added to the world.

    +
    class Weapon extends BodyComponent  {
    +  @override
    +  void onLoad() {
    +    ...
    +  }
    +}
    +
    +class Player extends BodyComponent  {
    +  @override
    +  void onLoad() {
    +    world.add(Weapon());
    +  }
    +}
    +
    +
    +

    Later you might want to add bullets coming from your weapon, these are added to the world in the +same sense, but if they are going to be moving very fast, make sure that you set isBullet = true +to avoid some tunneling problems.

    +
    +
    +

    Contact callbacks

    +

    Forge2DGame provides a simple out-of-the-box solution to propagate contact events.

    +

    Contact events occur whenever two Fixtures meet each other. These events allow listening when +these Fixtures begin to come in contact (beginContact) and cease being in contact +(endContact).

    +

    There are multiple ways to listen to these events. One common way is to use the ContactCallbacks +class as a mixin in the BodyComponent where you are interested in these events.

    +
    class Ball extends BodyComponent with ContactCallbacks {
    +  ...
    +  void beginContact(Object other, Contact contact) {
    +    if (other is Wall) {
    +      // Do something here.
    +    }
    +  }
    +  ...
    +}
    +
    +
    +

    For the above to work, the Ball’s body.userData or contacting fixture.userData must be +set to a ContactCallback. And if Wall is a BodyComponent it’s body.userData or contacting +fixture.userData must be set to Wall.

    +

    If userData is null the contact events are ignored, it is null by default.

    +

    A convenient way of setting userData is to assign it when creating the body. For example:

    +
    class Ball extends BodyComponent with ContactCallbacks {
    +  ...
    +
    +  @override
    +  Body createBody() {
    +    ...
    +    final bodyDef = BodyDef(
    +      userData: this,
    +    );
    +    ...
    +  }
    +
    +}
    +
    +
    +

    Every time Ball and Wall begin to come in contact beginContact will be called, and once the +fixtures cease being in contact, endContact will be called.

    +

    An implementation example can be seen in the Flame Forge2D +example.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_forge2d/joints.html b/docs/1.18.0/bridge_packages/flame_forge2d/joints.html new file mode 100644 index 000000000..12f3169b9 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_forge2d/joints.html @@ -0,0 +1,1822 @@ + + + + + + + Joints — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Joints

    +

    Joints are used to connect two different bodies together in various ways. +They help to simulate interactions between objects to create hinges, wheels, ropes, chains etc.

    +

    One Body in a joint may be of type BodyType.static. Joints between BodyType.static and/or +BodyType.kinematic are allowed, but have no effect and use some processing time.

    +

    To construct a Joint, you need to create a corresponding subclass of JointDefand initialize it +with its parameters.

    +

    To register a Joint use world.createJointand later use world.destroyJoint when you want to +remove it.

    +
    +

    Built-in joints

    +

    Currently, Forge2D supports the following joints:

    + +
    +

    ConstantVolumeJoint

    +

    This type of joint connects a group of bodies together and maintains a constant volume within them. +Essentially, it is a set of DistanceJoints, that connects all bodies one after +another.

    +

    It can for example be useful when simulating “soft-bodies”.

    +
      final constantVolumeJoint = ConstantVolumeJointDef()
    +    ..frequencyHz = 10
    +    ..dampingRatio = 0.8;
    +
    +  bodies.forEach((body) {
    +    constantVolumeJoint.addBody(body);
    +  });
    +    
    +  world.createJoint(ConstantVolumeJoint(world, constantVolumeJoint));
    +
    +
    +
    +
    +constant_volume_joint.dart
    +
     1import 'dart:math';
    + 2
    + 3import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/balls.dart';
    + 4import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/boundaries.dart';
    + 5import 'package:flame/components.dart';
    + 6import 'package:flame/events.dart';
    + 7import 'package:flame_forge2d/flame_forge2d.dart';
    + 8
    + 9class ConstantVolumeJointExample extends Forge2DGame {
    +10  static const description = '''
    +11    This example shows how to use a `ConstantVolumeJoint`. Tap the screen to add
    +12    a bunch off balls, that maintain a constant volume within them.
    +13  ''';
    +14
    +15  ConstantVolumeJointExample() : super(world: SpriteBodyWorld());
    +16}
    +17
    +18class SpriteBodyWorld extends Forge2DWorld
    +19    with TapCallbacks, HasGameReference<Forge2DGame> {
    +20  @override
    +21  Future<void> onLoad() async {
    +22    super.onLoad();
    +23    addAll(createBoundaries(game));
    +24  }
    +25
    +26  @override
    +27  Future<void> onTapDown(TapDownEvent info) async {
    +28    super.onTapDown(info);
    +29    final center = info.localPosition;
    +30
    +31    const numPieces = 20;
    +32    const radius = 5.0;
    +33    final balls = <Ball>[];
    +34
    +35    for (var i = 0; i < numPieces; i++) {
    +36      final x = radius * cos(2 * pi * (i / numPieces));
    +37      final y = radius * sin(2 * pi * (i / numPieces));
    +38
    +39      final ball = Ball(Vector2(x + center.x, y + center.y), radius: 0.5);
    +40
    +41      add(ball);
    +42      balls.add(ball);
    +43    }
    +44
    +45    await Future.wait(balls.map((e) => e.loaded));
    +46
    +47    final constantVolumeJoint = ConstantVolumeJointDef()
    +48      ..frequencyHz = 10
    +49      ..dampingRatio = 0.8;
    +50
    +51    balls.forEach((ball) {
    +52      constantVolumeJoint.addBody(ball.body);
    +53    });
    +54
    +55    createJoint(
    +56      ConstantVolumeJoint(
    +57        physicsWorld,
    +58        constantVolumeJoint,
    +59      ),
    +60    );
    +61  }
    +62}
    +
    +
    +
    +

    ConstantVolumeJointDef requires at least 3 bodies to be added using the addBody method. It also +has two optional parameters:

    +
      +
    • frequencyHz: This parameter sets the frequency of oscillation of the joint. If it is not set to +0, the higher the value, the less springy each of the compound DistantJoints are.

    • +
    • dampingRatio: This parameter defines how quickly the oscillation comes to rest. It ranges from +0 to 1, where 0 means no damping and 1 indicates critical damping.

    • +
    +
    +
    +

    DistanceJoint

    +

    A DistanceJoint constrains two points on two bodies to remain at a fixed distance from each other.

    +

    You can view this as a massless, rigid rod.

    +
    final distanceJointDef = DistanceJointDef()
    +  ..initialize(firstBody, secondBody, firstBody.worldCenter, secondBody.worldCenter)
    +  ..length = 10
    +  ..frequencyHz = 3
    +  ..dampingRatio = 0.2;
    +
    +world.createJoint(DistanceJoint(distanceJointDef));
    +
    +
    +
    +
    +distance_joint.dart
    +
     1import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/balls.dart';
    + 2import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/boundaries.dart';
    + 3import 'package:flame/components.dart';
    + 4import 'package:flame/events.dart';
    + 5import 'package:flame_forge2d/flame_forge2d.dart';
    + 6
    + 7class DistanceJointExample extends Forge2DGame {
    + 8  static const description = '''
    + 9    This example shows how to use a `DistanceJoint`. Tap the screen to add a
    +10    pair of balls joined with a `DistanceJoint`.
    +11  ''';
    +12
    +13  DistanceJointExample() : super(world: DistanceJointWorld());
    +14}
    +15
    +16class DistanceJointWorld extends Forge2DWorld
    +17    with TapCallbacks, HasGameReference<Forge2DGame> {
    +18  @override
    +19  Future<void> onLoad() async {
    +20    super.onLoad();
    +21    addAll(createBoundaries(game));
    +22  }
    +23
    +24  @override
    +25  Future<void> onTapDown(TapDownEvent info) async {
    +26    super.onTapDown(info);
    +27    final tap = info.localPosition;
    +28
    +29    final first = Ball(tap);
    +30    final second = Ball(Vector2(tap.x + 3, tap.y + 3));
    +31    addAll([first, second]);
    +32
    +33    await Future.wait([first.loaded, second.loaded]);
    +34
    +35    final distanceJointDef = DistanceJointDef()
    +36      ..initialize(
    +37        first.body,
    +38        second.body,
    +39        first.body.worldCenter,
    +40        second.center,
    +41      )
    +42      ..length = 10
    +43      ..frequencyHz = 3
    +44      ..dampingRatio = 0.2;
    +45
    +46    createJoint(DistanceJoint(distanceJointDef));
    +47  }
    +48}
    +
    +
    +
    +

    To create a DistanceJointDef, you can use the initialize method, which requires two bodies and a +world anchor point on each body. The definition uses local anchor points, allowing for a slight +violation of the constraint in the initial configuration. This is useful when saving and +loading a game.

    +

    The DistanceJointDef has three optional parameters that you can set:

    +
      +
    • length: This parameter determines the distance between the two anchor points and must be greater +than 0. The default value is 1.

    • +
    • frequencyHz: This parameter sets the frequency of oscillation of the joint. If it is not set +to 0, the higher the value, the less springy the joint becomes.

    • +
    • dampingRatio: This parameter defines how quickly the oscillation comes to rest. It ranges from +0 to 1, where 0 means no damping and 1 indicates critical damping.

    • +
    +
    +

    Warning

    +

    Do not use a zero or short length.

    +
    +
    +
    +

    FrictionJoint

    +

    A FrictionJoint is used for simulating friction in a top-down game. It provides 2D translational +friction and angular friction.

    +

    The FrictionJoint isn’t related to the friction that occurs when two shapes collide in the x-y plane +of the screen. Instead, it’s designed to simulate friction along the z-axis, which is perpendicular +to the screen. The most common use-case for it is applying the friction force between a moving body +and the game floor.

    +

    The initialize method of the FrictionJointDef method requires two bodies that will have friction +force applied to them, and an anchor.

    +

    The third parameter is the anchor point in the world coordinates where the friction force will be +applied. In most cases, it would be the center of the first object. However, for more complex +physics interactions between bodies, you can set the anchor point to a specific location on one or +both of the bodies.

    +
    final frictionJointDef = FrictionJointDef()
    +  ..initialize(ballBody, floorBody, ballBody.worldCenter)
    +  ..maxForce = 50
    +  ..maxTorque = 50;
    +
    +  world.createJoint(FrictionJoint(frictionJointDef));
    +
    +
    +
    +
    +friction_joint.dart
    +
     1import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/balls.dart';
    + 2import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/boundaries.dart';
    + 3import 'package:flame/components.dart';
    + 4import 'package:flame/events.dart';
    + 5import 'package:flame_forge2d/flame_forge2d.dart';
    + 6
    + 7class FrictionJointExample extends Forge2DGame {
    + 8  static const description = '''
    + 9    This example shows how to use a `FrictionJoint`. Tap the screen to move the
    +10    ball around and observe it slows down due to the friction force.
    +11  ''';
    +12
    +13  FrictionJointExample()
    +14      : super(gravity: Vector2.all(0), world: FrictionJointWorld());
    +15}
    +16
    +17class FrictionJointWorld extends Forge2DWorld
    +18    with TapCallbacks, HasGameReference<Forge2DGame> {
    +19  late Wall border;
    +20  late Ball ball;
    +21
    +22  @override
    +23  Future<void> onLoad() async {
    +24    super.onLoad();
    +25    final boundaries = createBoundaries(game);
    +26    border = boundaries.first;
    +27    addAll(boundaries);
    +28
    +29    ball = Ball(Vector2.zero(), radius: 3);
    +30    add(ball);
    +31
    +32    await Future.wait([ball.loaded, border.loaded]);
    +33
    +34    createFrictionJoint(ball.body, border.body);
    +35  }
    +36
    +37  @override
    +38  Future<void> onTapDown(TapDownEvent info) async {
    +39    super.onTapDown(info);
    +40    ball.body.applyLinearImpulse(Vector2.random() * 5000);
    +41  }
    +42
    +43  void createFrictionJoint(Body first, Body second) {
    +44    final frictionJointDef = FrictionJointDef()
    +45      ..initialize(first, second, first.worldCenter)
    +46      ..collideConnected = true
    +47      ..maxForce = 500
    +48      ..maxTorque = 500;
    +49
    +50    createJoint(FrictionJoint(frictionJointDef));
    +51  }
    +52}
    +
    +
    +
    +

    When creating a FrictionJoint, simulated friction can be applied via maximum force and torque +values:

    +
      +
    • maxForce: the maximum translational friction which applied to the joined body. A higher value

    • +
    • simulates higher friction.

    • +
    • maxTorque: the maximum angular friction which may be applied to the joined body. A higher value

    • +
    • simulates higher friction.

    • +
    +

    In other words, the former simulates the friction, when the body is sliding and the latter simulates +the friction when the body is spinning.

    +
    +
    +

    GearJoint

    +

    The GearJoint is used to connect two joints together. Joints are required to be a +RevoluteJoint or a PrismaticJoint in any combination.

    +
    +

    Warning

    +

    The connected joints must attach a dynamic body to a static body. +The static body is expected to be a bodyA on those joints

    +
    +
    final gearJointDef = GearJointDef()
    +  ..bodyA = firstJoint.bodyA
    +  ..bodyB = secondJoint.bodyA
    +  ..joint1 = firstJoint
    +  ..joint2 = secondJoint
    +  ..ratio = 1;
    +
    +world.createJoint(GearJoint(gearJointDef));
    +
    +
    +
    +
    +gear_joint.dart
    +
      1import 'dart:ui';
    +  2
    +  3import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/balls.dart';
    +  4import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/boxes.dart';
    +  5import 'package:flame/components.dart';
    +  6import 'package:flame_forge2d/flame_forge2d.dart';
    +  7
    +  8class GearJointExample extends Forge2DGame {
    +  9  static const description = '''
    + 10    This example shows how to use a `GearJoint`.
    + 11
    + 12    Drag the box along the specified axis and observe gears respond to the
    + 13    translation.
    + 14  ''';
    + 15
    + 16  GearJointExample() : super(world: GearJointWorld());
    + 17}
    + 18
    + 19class GearJointWorld extends Forge2DWorld with HasGameReference<Forge2DGame> {
    + 20  late PrismaticJoint prismaticJoint;
    + 21  Vector2 boxAnchor = Vector2.zero();
    + 22
    + 23  double boxWidth = 2;
    + 24  double ball1Radius = 4;
    + 25  double ball2Radius = 2;
    + 26
    + 27  @override
    + 28  Future<void> onLoad() async {
    + 29    super.onLoad();
    + 30
    + 31    final box =
    + 32        DraggableBox(startPosition: boxAnchor, width: boxWidth, height: 20);
    + 33    add(box);
    + 34
    + 35    final ball1Anchor = boxAnchor - Vector2(boxWidth / 2 + ball1Radius, 0);
    + 36    final ball1 = Ball(ball1Anchor, radius: ball1Radius);
    + 37    add(ball1);
    + 38
    + 39    final ball2Anchor = ball1Anchor - Vector2(ball1Radius + ball2Radius, 0);
    + 40    final ball2 = Ball(ball2Anchor, radius: ball2Radius);
    + 41    add(ball2);
    + 42
    + 43    await Future.wait([box.loaded, ball1.loaded, ball2.loaded]);
    + 44
    + 45    prismaticJoint = createPrismaticJoint(box.body, boxAnchor);
    + 46    final revoluteJoint1 = createRevoluteJoint(ball1.body, ball1Anchor);
    + 47    final revoluteJoint2 = createRevoluteJoint(ball2.body, ball2Anchor);
    + 48
    + 49    createGearJoint(prismaticJoint, revoluteJoint1, 1);
    + 50    createGearJoint(revoluteJoint1, revoluteJoint2, 0.5);
    + 51    add(JointRenderer(joint: prismaticJoint, anchor: boxAnchor));
    + 52  }
    + 53
    + 54  PrismaticJoint createPrismaticJoint(Body box, Vector2 anchor) {
    + 55    final groundBody = createBody(BodyDef());
    + 56
    + 57    final prismaticJointDef = PrismaticJointDef()
    + 58      ..initialize(
    + 59        groundBody,
    + 60        box,
    + 61        anchor,
    + 62        Vector2(0, 1),
    + 63      )
    + 64      ..enableLimit = true
    + 65      ..lowerTranslation = -10
    + 66      ..upperTranslation = 10;
    + 67
    + 68    final joint = PrismaticJoint(prismaticJointDef);
    + 69    createJoint(joint);
    + 70    return joint;
    + 71  }
    + 72
    + 73  RevoluteJoint createRevoluteJoint(Body ball, Vector2 anchor) {
    + 74    final groundBody = createBody(BodyDef());
    + 75
    + 76    final revoluteJointDef = RevoluteJointDef()
    + 77      ..initialize(
    + 78        groundBody,
    + 79        ball,
    + 80        anchor,
    + 81      );
    + 82
    + 83    final joint = RevoluteJoint(revoluteJointDef);
    + 84    createJoint(joint);
    + 85    return joint;
    + 86  }
    + 87
    + 88  void createGearJoint(Joint first, Joint second, double gearRatio) {
    + 89    final gearJointDef = GearJointDef()
    + 90      ..bodyA = first.bodyA
    + 91      ..bodyB = second.bodyA
    + 92      ..joint1 = first
    + 93      ..joint2 = second
    + 94      ..ratio = gearRatio;
    + 95
    + 96    final joint = GearJoint(gearJointDef);
    + 97    createJoint(joint);
    + 98  }
    + 99}
    +100
    +101class JointRenderer extends Component {
    +102  JointRenderer({required this.joint, required this.anchor});
    +103
    +104  final PrismaticJoint joint;
    +105  final Vector2 anchor;
    +106  final Vector2 p1 = Vector2.zero();
    +107  final Vector2 p2 = Vector2.zero();
    +108
    +109  @override
    +110  void render(Canvas canvas) {
    +111    p1
    +112      ..setFrom(joint.getLocalAxisA())
    +113      ..scale(joint.getLowerLimit())
    +114      ..add(anchor);
    +115    p2
    +116      ..setFrom(joint.getLocalAxisA())
    +117      ..scale(joint.getUpperLimit())
    +118      ..add(anchor);
    +119
    +120    canvas.drawLine(p1.toOffset(), p2.toOffset(), debugPaint);
    +121  }
    +122}
    +
    +
    +
    +
      +
    • joint1, joint2: Connected revolute or prismatic joints

    • +
    • bodyA, bodyB: Any bodies form the connected joints, as long as they are not the same body.

    • +
    • ratio: Gear ratio

    • +
    +

    Similarly to PulleyJoint, you can specify a gear ratio to bind the motions +together:

    +
    coordinate1 + ratio * coordinate2 == constant 
    +
    +
    +

    The ratio can be negative or positive. If one joint is a RevoluteJoint and the other joint is a +PrismaticJoint, then the ratio will have units of length or units of 1/length.

    +

    Since the GearJoint depends on two other joints, if these are destroyed, the GearJoint needs to +be destroyed as well.

    +
    +

    Warning

    +

    Manually destroy the GearJoint if joint1 or joint2 is destroyed

    +
    +
    +
    +

    MotorJoint

    +

    A MotorJoint is used to control the relative motion between two bodies. A typical usage is to +control the movement of a dynamic body with respect to the fixed point, for example to create +animations.

    +

    A MotorJoint lets you control the motion of a body by specifying target position and rotation +offsets. You can set the maximum motor force and torque that will be applied to reach the target +position and rotation. If the body is blocked, it will stop and the contact forces will be +proportional the maximum motor force and torque.

    +
    final motorJointDef = MotorJointDef()
    +  ..initialize(first, second)
    +  ..maxTorque = 1000
    +  ..maxForce = 1000
    +  ..correctionFactor = 0.1;
    +
    +  world.createJoint(MotorJoint(motorJointDef));
    +
    +
    +
    +
    +motor_joint.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/balls.dart';
    + 4import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/boxes.dart';
    + 5import 'package:flame/components.dart';
    + 6import 'package:flame/events.dart';
    + 7import 'package:flame_forge2d/flame_forge2d.dart';
    + 8
    + 9class MotorJointExample extends Forge2DGame {
    +10  static const description = '''
    +11    This example shows how to use a `MotorJoint`. The ball spins around the
    +12    center point. Tap the screen to change the direction.
    +13  ''';
    +14
    +15  MotorJointExample()
    +16      : super(gravity: Vector2.zero(), world: MotorJointWorld());
    +17}
    +18
    +19class MotorJointWorld extends Forge2DWorld with TapCallbacks {
    +20  late Ball ball;
    +21  late MotorJoint joint;
    +22  final motorSpeed = 1;
    +23
    +24  bool clockWise = true;
    +25
    +26  @override
    +27  Future<void> onLoad() async {
    +28    super.onLoad();
    +29
    +30    final box = Box(
    +31      startPosition: Vector2.zero(),
    +32      width: 2,
    +33      height: 1,
    +34      bodyType: BodyType.static,
    +35    );
    +36    add(box);
    +37
    +38    ball = Ball(Vector2(0, -5));
    +39    add(ball);
    +40
    +41    await Future.wait([ball.loaded, box.loaded]);
    +42
    +43    joint = createMotorJoint(ball.body, box.body);
    +44    add(JointRenderer(joint: joint));
    +45  }
    +46
    +47  @override
    +48  void onTapDown(TapDownEvent info) {
    +49    super.onTapDown(info);
    +50    clockWise = !clockWise;
    +51  }
    +52
    +53  MotorJoint createMotorJoint(Body first, Body second) {
    +54    final motorJointDef = MotorJointDef()
    +55      ..initialize(first, second)
    +56      ..maxForce = 1000
    +57      ..maxTorque = 1000
    +58      ..correctionFactor = 0.1;
    +59
    +60    final joint = MotorJoint(motorJointDef);
    +61    createJoint(joint);
    +62    return joint;
    +63  }
    +64
    +65  final linearOffset = Vector2.zero();
    +66
    +67  @override
    +68  void update(double dt) {
    +69    super.update(dt);
    +70
    +71    var deltaOffset = motorSpeed * dt;
    +72    if (clockWise) {
    +73      deltaOffset = -deltaOffset;
    +74    }
    +75
    +76    final linearOffsetX = joint.getLinearOffset().x + deltaOffset;
    +77    final linearOffsetY = joint.getLinearOffset().y + deltaOffset;
    +78    linearOffset.setValues(linearOffsetX, linearOffsetY);
    +79    final angularOffset = joint.getAngularOffset() + deltaOffset;
    +80
    +81    joint.setLinearOffset(linearOffset);
    +82    joint.setAngularOffset(angularOffset);
    +83  }
    +84}
    +85
    +86class JointRenderer extends Component {
    +87  JointRenderer({required this.joint});
    +88
    +89  final MotorJoint joint;
    +90
    +91  @override
    +92  void render(Canvas canvas) {
    +93    canvas.drawLine(
    +94      joint.anchorA.toOffset(),
    +95      joint.anchorB.toOffset(),
    +96      debugPaint,
    +97    );
    +98  }
    +99}
    +
    +
    +
    +

    A MotorJointDef has three optional parameters:

    +
      +
    • maxForce: the maximum translational force which will be applied to the joined body to reach the +target position.

    • +
    • maxTorque: the maximum angular force which will be applied to the joined body to reach the +target rotation.

    • +
    • correctionFactor: position correction factor in range [0, 1]. It adjusts the joint’s response to +deviation from target position. A higher value makes the joint respond faster, while a lower value +makes it respond slower. If the value is set too high, the joint may overcompensate and oscillate, +becoming unstable. If set too low, it may respond too slowly.

    • +
    +

    The linear and angular offsets are the target distance and angle that the bodies should achieve +relative to each other’s position and rotation. By default, the linear target will be the distance +between the two body centers and the angular target will be the relative rotation of the bodies. +Use the setLinearOffset(Vector2) and setLinearOffset(double) methods of the MotorJoint to set +the desired relative translation and rotate between the bodies.

    +

    For example, this code increments the angular offset of the joint every update cycle, causing the +body to rotate.

    +
    @override
    +void update(double dt) {
    +  super.update(dt);
    +  
    +  final angularOffset = joint.getAngularOffset() + motorSpeed * dt;
    +  joint.setAngularOffset(angularOffset);
    +}
    +
    +
    +
    +
    +

    MouseJoint

    +

    The MouseJoint is used to manipulate bodies with the mouse. It attempts to drive a point on a body +towards the current position of the cursor. There is no restriction on rotation.

    +

    The MouseJoint definition has a target point, maximum force, frequency, and damping ratio. The +target point initially coincides with the body’s anchor point. The maximum force is used to prevent +violent reactions when multiple dynamic bodies interact. You can make this as large as you like. +The frequency and damping ratio are used to create a spring/damper effect similar to the distance +joint.

    +
    +

    Warning

    +

    Many users have tried to adapt the mouse joint for game play. Users often want +to achieve precise positioning and instantaneous response. The mouse joint +doesn’t work very well in that context. You may wish to consider using +kinematic bodies instead.

    +
    +
    final mouseJointDef = MouseJointDef()
    +  ..maxForce = 3000 * ballBody.mass * 10
    +  ..dampingRatio = 1
    +  ..frequencyHz = 5
    +  ..target.setFrom(ballBody.position)
    +  ..collideConnected = false
    +  ..bodyA = groundBody
    +  ..bodyB = ballBody;
    +
    +  mouseJoint = MouseJoint(mouseJointDef);
    +  world.createJoint(mouseJoint);
    +}
    +
    +
    +
    +
    +mouse_joint.dart
    +
     1import 'package:examples/stories/bridge_libraries/flame_forge2d/revolute_joint_with_motor_example.dart';
    + 2import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/balls.dart';
    + 3import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/boundaries.dart';
    + 4import 'package:flame/components.dart';
    + 5import 'package:flame/events.dart';
    + 6import 'package:flame_forge2d/flame_forge2d.dart';
    + 7
    + 8class MouseJointExample extends Forge2DGame {
    + 9  static const description = '''
    +10    In this example we use a `MouseJoint` to make the ball follow the mouse
    +11    when you drag it around.
    +12  ''';
    +13
    +14  MouseJointExample()
    +15      : super(gravity: Vector2(0, 10.0), world: MouseJointWorld());
    +16}
    +17
    +18class MouseJointWorld extends Forge2DWorld
    +19    with DragCallbacks, HasGameReference<Forge2DGame> {
    +20  late Ball ball;
    +21  late Body groundBody;
    +22  MouseJoint? mouseJoint;
    +23
    +24  @override
    +25  Future<void> onLoad() async {
    +26    super.onLoad();
    +27    final boundaries = createBoundaries(game);
    +28    addAll(boundaries);
    +29
    +30    final center = Vector2.zero();
    +31    groundBody = createBody(BodyDef());
    +32    ball = Ball(center, radius: 5);
    +33    add(ball);
    +34    add(CornerRamp(center));
    +35    add(CornerRamp(center, isMirrored: true));
    +36  }
    +37
    +38  @override
    +39  void onDragStart(DragStartEvent info) {
    +40    super.onDragStart(info);
    +41    final mouseJointDef = MouseJointDef()
    +42      ..maxForce = 3000 * ball.body.mass * 10
    +43      ..dampingRatio = 0.1
    +44      ..frequencyHz = 5
    +45      ..target.setFrom(ball.body.position)
    +46      ..collideConnected = false
    +47      ..bodyA = groundBody
    +48      ..bodyB = ball.body;
    +49
    +50    if (mouseJoint == null) {
    +51      mouseJoint = MouseJoint(mouseJointDef);
    +52      createJoint(mouseJoint!);
    +53    }
    +54  }
    +55
    +56  @override
    +57  void onDragUpdate(DragUpdateEvent info) {
    +58    mouseJoint?.setTarget(info.localEndPosition);
    +59  }
    +60
    +61  @override
    +62  void onDragEnd(DragEndEvent info) {
    +63    super.onDragEnd(info);
    +64    destroyJoint(mouseJoint!);
    +65    mouseJoint = null;
    +66  }
    +67}
    +
    +
    +
    +
      +
    • maxForce: This parameter defines the maximum constraint force that can be exerted to move the +candidate body. Usually you will express as some multiple of the weight +(multiplier mass gravity).

    • +
    • dampingRatio: This parameter defines how quickly the oscillation comes to rest. It ranges from +0 to 1, where 0 means no damping and 1 indicates critical damping.

    • +
    • frequencyHz: This parameter defines the response speed of the body, i.e. how quickly it tries to +reach the target position

    • +
    • target: The initial world target point. This is assumed to coincide with the body anchor +initially.

    • +
    +
    +
    +

    PrismaticJoint

    +

    The PrismaticJoint provides a single degree of freedom, allowing for a relative translation of two +bodies along an axis fixed in bodyA. Relative rotation is prevented.

    +

    PrismaticJointDef requires defining a line of motion using an axis and an anchor point. +The definition uses local anchor points and a local axis so that the initial configuration +can violate the constraint slightly.

    +

    The joint translation is zero when the local anchor points coincide in world space. +Using local anchors and a local axis helps when saving and loading a game.

    +
    +

    Warning

    +

    At least one body should by dynamic with a non-fixed rotation.

    +
    +

    The PrismaticJoint definition is similar to the RevoluteJoint definition, but +instead of rotation, it uses translation.

    +
    final prismaticJointDef = PrismaticJointDef()
    +  ..initialize(
    +    dynamicBody,
    +    groundBody,
    +    dynamicBody.worldCenter,
    +    Vector2(1, 0),
    +  )
    +
    +
    +
    +
    +prismatic_joint.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/boxes.dart';
    + 4import 'package:flame/components.dart';
    + 5import 'package:flame_forge2d/flame_forge2d.dart';
    + 6
    + 7class PrismaticJointExample extends Forge2DGame {
    + 8  static const description = '''
    + 9    This example shows how to use a `PrismaticJoint`.
    +10
    +11    Drag the box along the specified axis, bound between lower and upper limits.
    +12    Also, there's a motor enabled that's pulling the box to the lower limit.
    +13  ''';
    +14
    +15  final Vector2 anchor = Vector2.zero();
    +16
    +17  @override
    +18  Future<void> onLoad() async {
    +19    super.onLoad();
    +20
    +21    final box = DraggableBox(startPosition: anchor, width: 6, height: 6);
    +22    world.add(box);
    +23    await Future.wait([box.loaded]);
    +24
    +25    final joint = createJoint(box.body, anchor);
    +26    world.add(JointRenderer(joint: joint, anchor: anchor));
    +27  }
    +28
    +29  PrismaticJoint createJoint(Body box, Vector2 anchor) {
    +30    final groundBody = world.createBody(BodyDef());
    +31
    +32    final prismaticJointDef = PrismaticJointDef()
    +33      ..initialize(
    +34        box,
    +35        groundBody,
    +36        anchor,
    +37        Vector2(1, 0),
    +38      )
    +39      ..enableLimit = true
    +40      ..lowerTranslation = -20
    +41      ..upperTranslation = 20
    +42      ..enableMotor = true
    +43      ..motorSpeed = 1
    +44      ..maxMotorForce = 100;
    +45
    +46    final joint = PrismaticJoint(prismaticJointDef);
    +47    world.createJoint(joint);
    +48    return joint;
    +49  }
    +50}
    +51
    +52class JointRenderer extends Component {
    +53  JointRenderer({required this.joint, required this.anchor});
    +54
    +55  final PrismaticJoint joint;
    +56  final Vector2 anchor;
    +57  final Vector2 p1 = Vector2.zero();
    +58  final Vector2 p2 = Vector2.zero();
    +59
    +60  @override
    +61  void render(Canvas canvas) {
    +62    p1
    +63      ..setFrom(joint.getLocalAxisA())
    +64      ..scale(joint.getLowerLimit())
    +65      ..add(anchor);
    +66    p2
    +67      ..setFrom(joint.getLocalAxisA())
    +68      ..scale(joint.getUpperLimit())
    +69      ..add(anchor);
    +70
    +71    canvas.drawLine(p1.toOffset(), p2.toOffset(), debugPaint);
    +72  }
    +73}
    +
    +
    +
    +
      +
    • b1, b2: Bodies connected by the joint.

    • +
    • anchor: World anchor point, to put the axis through. Usually the center of the first body.

    • +
    • axis: World translation axis, along which the translation will be fixed.

    • +
    +

    In some cases you might wish to control the range of motion. For this, the PrismaticJointDef has +optional parameters that allow you to simulate a joint limit and/or a motor.

    +
    +

    Prismatic Joint Limit

    +

    You can limit the relative rotation with a joint limit that specifies a lower and upper translation.

    +
    jointDef
    +  ..enableLimit = true
    +  ..lowerTranslation = -20
    +  ..upperTranslation = 20;
    +
    +
    +
      +
    • enableLimit: Set to true to enable translation limits

    • +
    • lowerTranslation: The lower translation limit in meters

    • +
    • upperTranslation: The upper translation limit in meters

    • +
    +

    You change the limits after the joint was created with this method:

    +
    prismaticJoint.setLimits(-10, 10);
    +
    +
    +
    +
    +

    Prismatic Joint Motor

    +

    You can use a motor to drive the motion or to model joint friction. A maximum motor force is +provided so that infinite forces are not generated.

    +
    jointDef
    +  ..enableMotor = true
    +  ..motorSpeed = 1
    +  ..maxMotorForce = 100;
    +
    +
    +
      +
    • enableMotor: Set to true to enable the motor

    • +
    • motorSpeed: The desired motor speed in radians per second

    • +
    • maxMotorForce: The maximum motor torque used to achieve the desired motor speed in N-m.

    • +
    +

    You change the motor’s speed and force after the joint was created using these methods:

    +
    prismaticJoint.setMotorSpeed(2);
    +prismaticJoint.setMaxMotorForce(200);
    +
    +
    +

    Also, you can get the joint angle and speed using the following methods:

    +
    prismaticJoint.getJointTranslation();
    +prismaticJoint.getJointSpeed();
    +
    +
    +
    +
    +
    +

    PulleyJoint

    +

    A PulleyJoint is used to create an idealized pulley. The pulley connects two bodies to the ground +and to each other. As one body goes up, the other goes down. The total length of the pulley rope is +conserved according to the initial configuration:

    +
    length1 + length2 == constant
    +
    +
    +

    You can supply a ratio that simulates a block and tackle. This causes one side of the pulley to +extend faster than the other. At the same time the constraint force is smaller on one side than the +other. You can use this to create a mechanical leverage.

    +
    length1 + ratio * length2 == constant
    +
    +
    +

    For example, if the ratio is 2, then length1 will vary at twice the rate of length2. Also the +force in the rope attached to the first body will have half the constraint force as the rope +attached to the second body.

    +
    final pulleyJointDef = PulleyJointDef()
    +  ..initialize(
    +    firstBody,
    +    secondBody,
    +    firstPulley.worldCenter,
    +    secondPulley.worldCenter,
    +    firstBody.worldCenter,     
    +    secondBody.worldCenter,
    +    1,
    +  );
    +
    +world.createJoint(PulleyJoint(pulleyJointDef));
    +
    +
    +
    +
    +pulley_joint.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/balls.dart';
    + 4import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/boxes.dart';
    + 5import 'package:flame/components.dart';
    + 6import 'package:flame_forge2d/flame_forge2d.dart';
    + 7
    + 8class PulleyJointExample extends Forge2DGame {
    + 9  static const description = '''
    +10    This example shows how to use a `PulleyJoint`. Drag one of the boxes and see
    +11    how the other one gets moved by the pulley
    +12  ''';
    +13
    +14  @override
    +15  Future<void> onLoad() async {
    +16    super.onLoad();
    +17    final distanceFromCenter = camera.visibleWorldRect.width / 5;
    +18
    +19    final firstPulley = Ball(
    +20      Vector2(-distanceFromCenter, -10),
    +21      bodyType: BodyType.static,
    +22    );
    +23    final secondPulley = Ball(
    +24      Vector2(distanceFromCenter, -10),
    +25      bodyType: BodyType.static,
    +26    );
    +27
    +28    final firstBox = DraggableBox(
    +29      startPosition: Vector2(-distanceFromCenter, 20),
    +30      width: 5,
    +31      height: 10,
    +32    );
    +33    final secondBox = DraggableBox(
    +34      startPosition: Vector2(distanceFromCenter, 20),
    +35      width: 7,
    +36      height: 10,
    +37    );
    +38    world.addAll([firstBox, secondBox, firstPulley, secondPulley]);
    +39
    +40    await Future.wait([
    +41      firstBox.loaded,
    +42      secondBox.loaded,
    +43      firstPulley.loaded,
    +44      secondPulley.loaded,
    +45    ]);
    +46
    +47    final joint = createJoint(firstBox, secondBox, firstPulley, secondPulley);
    +48    world.add(PulleyRenderer(joint: joint));
    +49  }
    +50
    +51  PulleyJoint createJoint(
    +52    Box firstBox,
    +53    Box secondBox,
    +54    Ball firstPulley,
    +55    Ball secondPulley,
    +56  ) {
    +57    final pulleyJointDef = PulleyJointDef()
    +58      ..initialize(
    +59        firstBox.body,
    +60        secondBox.body,
    +61        firstPulley.center,
    +62        secondPulley.center,
    +63        firstBox.body.worldPoint(Vector2(0, -firstBox.height / 2)),
    +64        secondBox.body.worldPoint(Vector2(0, -secondBox.height / 2)),
    +65        1,
    +66      );
    +67    final joint = PulleyJoint(pulleyJointDef);
    +68    world.createJoint(joint);
    +69    return joint;
    +70  }
    +71}
    +72
    +73class PulleyRenderer extends Component {
    +74  PulleyRenderer({required this.joint});
    +75
    +76  final PulleyJoint joint;
    +77
    +78  @override
    +79  void render(Canvas canvas) {
    +80    canvas.drawLine(
    +81      joint.anchorA.toOffset(),
    +82      joint.getGroundAnchorA().toOffset(),
    +83      debugPaint,
    +84    );
    +85
    +86    canvas.drawLine(
    +87      joint.anchorB.toOffset(),
    +88      joint.getGroundAnchorB().toOffset(),
    +89      debugPaint,
    +90    );
    +91
    +92    canvas.drawLine(
    +93      joint.getGroundAnchorA().toOffset(),
    +94      joint.getGroundAnchorB().toOffset(),
    +95      debugPaint,
    +96    );
    +97  }
    +98}
    +
    +
    +
    +

    The initialize method of PulleyJointDef requires two ground anchors, two dynamic bodies and +their anchor points, and a pulley ratio.

    +
      +
    • b1, b2: Two dynamic bodies connected with the joint

    • +
    • ga1, ga2: Two ground anchors

    • +
    • anchor1, anchor2: Anchors on the dynamic bodies the joint will be attached to

    • +
    • r: Pulley ratio to simulate a block and tackle

    • +
    +

    PulleyJoint also provides the current lengths:

    +
    joint.getCurrentLengthA()
    +joint.getCurrentLengthB()
    +
    +
    +
    +

    Warning

    +

    PulleyJoint can get a bit troublesome by itself. They often work better when +combined with prismatic joints. You should also cover the anchor points +with static shapes to prevent one side from going to zero length.

    +
    +
    +
    +

    RevoluteJoint

    +

    A RevoluteJoint forces two bodies to share a common anchor point, often called a hinge point. +The revolute joint has a single degree of freedom: the relative rotation of the two bodies.

    +

    To create a RevoluteJoint, provide two bodies and a common point to the initialize method. +The definition uses local anchor points so that the initial configuration can violate the +constraint slightly.

    +
    final jointDef = RevoluteJointDef()
    +  ..initialize(firstBody, secondBody, firstBody.position);
    +world.createJoint(RevoluteJoint(jointDef));
    +
    +
    +
    +
    +revolute_joint.dart
    +
     1import 'dart:math';
    + 2
    + 3import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/balls.dart';
    + 4import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/boundaries.dart';
    + 5import 'package:flame/components.dart';
    + 6import 'package:flame/events.dart';
    + 7import 'package:flame_forge2d/flame_forge2d.dart';
    + 8
    + 9class RevoluteJointExample extends Forge2DGame {
    +10  static const description = '''
    +11    In this example we use a joint to keep a body with several fixtures stuck
    +12    to another body.
    +13
    +14    Tap the screen to add more of these combined bodies.
    +15  ''';
    +16
    +17  RevoluteJointExample()
    +18      : super(gravity: Vector2(0, 10.0), world: RevoluteJointWorld());
    +19}
    +20
    +21class RevoluteJointWorld extends Forge2DWorld
    +22    with TapCallbacks, HasGameReference<Forge2DGame> {
    +23  @override
    +24  Future<void> onLoad() async {
    +25    super.onLoad();
    +26    addAll(createBoundaries(game));
    +27  }
    +28
    +29  @override
    +30  void onTapDown(TapDownEvent info) {
    +31    super.onTapDown(info);
    +32    final ball = Ball(info.localPosition);
    +33    add(ball);
    +34    add(CircleShuffler(ball));
    +35  }
    +36}
    +37
    +38class CircleShuffler extends BodyComponent {
    +39  final Ball ball;
    +40
    +41  CircleShuffler(this.ball);
    +42
    +43  @override
    +44  Body createBody() {
    +45    final bodyDef = BodyDef(
    +46      type: BodyType.dynamic,
    +47      position: ball.body.position.clone(),
    +48    );
    +49    const numPieces = 5;
    +50    const radius = 6.0;
    +51    final body = world.createBody(bodyDef);
    +52
    +53    for (var i = 0; i < numPieces; i++) {
    +54      final xPos = radius * cos(2 * pi * (i / numPieces));
    +55      final yPos = radius * sin(2 * pi * (i / numPieces));
    +56
    +57      final shape = CircleShape()
    +58        ..radius = 1.2
    +59        ..position.setValues(xPos, yPos);
    +60
    +61      final fixtureDef = FixtureDef(
    +62        shape,
    +63        density: 50.0,
    +64        friction: 0.1,
    +65        restitution: 0.9,
    +66      );
    +67
    +68      body.createFixture(fixtureDef);
    +69    }
    +70
    +71    final jointDef = RevoluteJointDef()
    +72      ..initialize(body, ball.body, body.position);
    +73    world.createJoint(RevoluteJoint(jointDef));
    +74
    +75    return body;
    +76  }
    +77}
    +
    +
    +
    +

    In some cases you might wish to control the joint angle. For this, the RevoluteJointDef has +optional parameters that allow you to simulate a joint limit and/or a motor.

    +
    +

    Revolute Joint Limit

    +

    You can limit the relative rotation with a joint limit that specifies a lower and upper angle.

    +
    jointDef
    +  ..enableLimit = true
    +  ..lowerAngle = 0
    +  ..upperAngle = pi / 2;
    +
    +
    +
      +
    • enableLimit: Set to true to enable angle limits

    • +
    • lowerAngle: The lower angle in radians

    • +
    • upperAngle: The upper angle in radians

    • +
    +

    You change the limits after the joint was created with this method:

    +
    revoluteJoint.setLimits(0, pi);
    +
    +
    +
    +
    +

    Revolute Joint Motor

    +

    You can use a motor to drive the relative rotation about the shared point. A maximum motor torque is +provided so that infinite forces are not generated.

    +
    jointDef
    +  ..enableMotor = true
    +  ..motorSpeed = 5
    +  ..maxMotorTorque = 100;
    +
    +
    +
      +
    • enableMotor: Set to true to enable the motor

    • +
    • motorSpeed: The desired motor speed in radians per second

    • +
    • maxMotorTorque: The maximum motor torque used to achieve the desired motor speed in N-m.

    • +
    +

    You change the motor’s speed and torque after the joint was created using these methods:

    +
    revoluteJoint.setMotorSpeed(2);
    +revoluteJoint.setMaxMotorTorque(200);
    +
    +
    +

    Also, you can get the joint angle and speed using the following methods:

    +
    revoluteJoint.jointAngle();
    +revoluteJoint.jointSpeed();
    +
    +
    +
    +
    +
    +

    RopeJoint

    +

    A RopeJoint restricts the maximum distance between two points on two bodies.

    +

    RopeJointDef requires two body anchor points and the maximum length.

    +
    final ropeJointDef = RopeJointDef()
    +  ..bodyA = firstBody
    +  ..localAnchorA.setFrom(firstBody.getLocalCenter())
    +  ..bodyB = secondBody
    +  ..localAnchorB.setFrom(secondBody.getLocalCenter())
    +  ..maxLength = (secondBody.worldCenter - firstBody.worldCenter).length;
    +
    +world.createJoint(RopeJoint(ropeJointDef));
    +
    +
    +
    +
    +rope_joint.dart
    +
     1import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/balls.dart';
    + 2import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/boxes.dart';
    + 3import 'package:flame/components.dart';
    + 4import 'package:flame/events.dart';
    + 5import 'package:flame_forge2d/flame_forge2d.dart';
    + 6import 'package:flutter/material.dart';
    + 7
    + 8class RopeJointExample extends Forge2DGame {
    + 9  static const description = '''
    +10    This example shows how to use a `RopeJoint`.
    +11
    +12    Drag the box handle along the axis and observe the rope respond to the
    +13    movement.
    +14  ''';
    +15
    +16  RopeJointExample() : super(world: RopeJointWorld());
    +17}
    +18
    +19class RopeJointWorld extends Forge2DWorld
    +20    with DragCallbacks, HasGameReference<Forge2DGame> {
    +21  double handleWidth = 6;
    +22
    +23  @override
    +24  Future<void> onLoad() async {
    +25    super.onLoad();
    +26
    +27    final handleBody = await createHandle();
    +28    createRope(handleBody);
    +29  }
    +30
    +31  Future<Body> createHandle() async {
    +32    final anchor = game.screenToWorld(Vector2(0, 100))..x = 0;
    +33
    +34    final box = DraggableBox(
    +35      startPosition: anchor,
    +36      width: handleWidth,
    +37      height: 3,
    +38    );
    +39    await add(box);
    +40
    +41    createPrismaticJoint(box.body, anchor);
    +42    return box.body;
    +43  }
    +44
    +45  Future<void> createRope(Body handle) async {
    +46    const length = 50;
    +47    var prevBody = handle;
    +48
    +49    for (var i = 0; i < length; i++) {
    +50      final newPosition = prevBody.worldCenter + Vector2(0, 1);
    +51      final ball = Ball(newPosition, radius: 0.5, color: Colors.white);
    +52      await add(ball);
    +53
    +54      createRopeJoint(ball.body, prevBody);
    +55      prevBody = ball.body;
    +56    }
    +57  }
    +58
    +59  void createPrismaticJoint(Body box, Vector2 anchor) {
    +60    final groundBody = createBody(BodyDef());
    +61    final halfWidth = game.screenToWorld(Vector2.zero()).x.abs();
    +62
    +63    final prismaticJointDef = PrismaticJointDef()
    +64      ..initialize(
    +65        box,
    +66        groundBody,
    +67        anchor,
    +68        Vector2(1, 0),
    +69      )
    +70      ..enableLimit = true
    +71      ..lowerTranslation = -halfWidth + handleWidth / 2
    +72      ..upperTranslation = halfWidth - handleWidth / 2;
    +73
    +74    final joint = PrismaticJoint(prismaticJointDef);
    +75    createJoint(joint);
    +76  }
    +77
    +78  void createRopeJoint(Body first, Body second) {
    +79    final ropeJointDef = RopeJointDef()
    +80      ..bodyA = first
    +81      ..localAnchorA.setFrom(first.getLocalCenter())
    +82      ..bodyB = second
    +83      ..localAnchorB.setFrom(second.getLocalCenter())
    +84      ..maxLength = (second.worldCenter - first.worldCenter).length;
    +85
    +86    createJoint(RopeJoint(ropeJointDef));
    +87  }
    +88}
    +
    +
    +
    +
      +
    • bodyA, bodyB: Connected bodies

    • +
    • localAnchorA, localAnchorB: Optional parameter, anchor point relative to the body’s origin.

    • +
    • maxLength: The maximum length of the rope. This must be larger than linearSlop, or the joint +will have no effect.

    • +
    +
    +

    Warning

    +

    The joint assumes that the maximum length doesn’t change during simulation. +See DistanceJoint if you want to dynamically control length.

    +
    +
    +
    +

    WeldJoint

    +

    A WeldJoint is used to restrict all relative motion between two bodies, effectively joining them +together.

    +

    WeldJointDef requires two bodies that will be connected, and a world anchor:

    +
    final weldJointDef = WeldJointDef()
    +  ..initialize(bodyA, bodyB, anchor);
    +
    +world.createJoint(WeldJoint(weldJointDef));
    +
    +
    +
    +
    +weld_joint.dart
    +
      1import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/balls.dart';
    +  2import 'package:examples/stories/bridge_libraries/flame_forge2d/utils/boxes.dart';
    +  3import 'package:flame/components.dart';
    +  4import 'package:flame/events.dart';
    +  5import 'package:flame_forge2d/flame_forge2d.dart';
    +  6import 'package:flutter/material.dart';
    +  7
    +  8class WeldJointExample extends Forge2DGame {
    +  9  static const description = '''
    + 10    This example shows how to use a `WeldJoint`. Tap the screen to add a
    + 11    ball to test the bridge built using a `WeldJoint`
    + 12  ''';
    + 13
    + 14  WeldJointExample() : super(world: WeldJointWorld());
    + 15}
    + 16
    + 17class WeldJointWorld extends Forge2DWorld
    + 18    with TapCallbacks, HasGameReference<Forge2DGame> {
    + 19  final pillarHeight = 20.0;
    + 20  final pillarWidth = 5.0;
    + 21
    + 22  @override
    + 23  Future<void> onLoad() async {
    + 24    super.onLoad();
    + 25
    + 26    final leftPillar = Box(
    + 27      startPosition: game.screenToWorld(Vector2(50, game.size.y))
    + 28        ..y -= pillarHeight / 2,
    + 29      width: pillarWidth,
    + 30      height: pillarHeight,
    + 31      bodyType: BodyType.static,
    + 32      color: Colors.white,
    + 33    );
    + 34    final rightPillar = Box(
    + 35      startPosition: game.screenToWorld(Vector2(game.size.x - 50, game.size.y))
    + 36        ..y -= pillarHeight / 2,
    + 37      width: pillarWidth,
    + 38      height: pillarHeight,
    + 39      bodyType: BodyType.static,
    + 40      color: Colors.white,
    + 41    );
    + 42
    + 43    await addAll([leftPillar, rightPillar]);
    + 44
    + 45    createBridge(leftPillar, rightPillar);
    + 46  }
    + 47
    + 48  Future<void> createBridge(
    + 49    Box leftPillar,
    + 50    Box rightPillar,
    + 51  ) async {
    + 52    const sectionsCount = 10;
    + 53    // Vector2.zero is used here since 0,0 is in the middle and 0,0 in the
    + 54    // screen space then gives us the coordinates of the upper left corner in
    + 55    // world space.
    + 56    final halfSize = game.screenToWorld(Vector2.zero())..absolute();
    + 57    final sectionWidth = ((leftPillar.center.x.abs() +
    + 58                rightPillar.center.x.abs() +
    + 59                pillarWidth) /
    + 60            sectionsCount)
    + 61        .ceilToDouble();
    + 62    Body? prevSection;
    + 63
    + 64    for (var i = 0; i < sectionsCount; i++) {
    + 65      final section = Box(
    + 66        startPosition: Vector2(
    + 67          sectionWidth * i - halfSize.x + sectionWidth / 2,
    + 68          halfSize.y - pillarHeight,
    + 69        ),
    + 70        width: sectionWidth,
    + 71        height: 1,
    + 72      );
    + 73      await add(section);
    + 74
    + 75      if (prevSection != null) {
    + 76        createWeldJoint(
    + 77          prevSection,
    + 78          section.body,
    + 79          Vector2(
    + 80            sectionWidth * i - halfSize.x + sectionWidth,
    + 81            halfSize.y - pillarHeight,
    + 82          ),
    + 83        );
    + 84      }
    + 85
    + 86      prevSection = section.body;
    + 87    }
    + 88  }
    + 89
    + 90  void createWeldJoint(Body first, Body second, Vector2 anchor) {
    + 91    final weldJointDef = WeldJointDef()..initialize(first, second, anchor);
    + 92
    + 93    createJoint(WeldJoint(weldJointDef));
    + 94  }
    + 95
    + 96  @override
    + 97  Future<void> onTapDown(TapDownEvent info) async {
    + 98    super.onTapDown(info);
    + 99    final ball = Ball(info.localPosition, radius: 5);
    +100    add(ball);
    +101  }
    +102}
    +
    +
    +
    +
      +
    • bodyA, bodyB: Two bodies that will be connected

    • +
    • anchor: Anchor point in world coordinates, at which two bodies will be welded together +to 0, the higher the value, the less springy the joint becomes.

    • +
    +
    +

    Breakable Bodies and WeldJoint

    +

    Since the Forge2D constraint solver is iterative, joints are somewhat flexible. This means that the +bodies connected by a WeldJoint may bend slightly. If you want to simulate a breakable body, it’s +better to create a single body with multiple fixtures. When the body breaks, you can destroy a +fixture and recreate it on a new body instead of relying on a WeldJoint.

    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_isolate/flame_isolate.html b/docs/1.18.0/bridge_packages/flame_isolate/flame_isolate.html new file mode 100644 index 000000000..26b21d57b --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_isolate/flame_isolate.html @@ -0,0 +1,383 @@ + + + + + + + flame_isolate — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_isolate

    + +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_isolate/isolate.html b/docs/1.18.0/bridge_packages/flame_isolate/isolate.html new file mode 100644 index 000000000..78ff5d3eb --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_isolate/isolate.html @@ -0,0 +1,434 @@ + + + + + + + FlameIsolate — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    FlameIsolate

    +

    The power of integral_isolates neatly packaged in +flame_isolate for your Flame game.

    +

    If you’ve ever used the compute +function before, you will feel right at home. This mixin allows you to run CPU-intensive code in an +isolate.

    +

    To use it in your game you just need to add flame_isolate to your pubspec.yaml.

    +
    +

    Usage

    +

    Just add the mixin FlameIsolate to your component and start utilizing the power of an isolate as +simple as running the compute +function.

    +

    Example:

    +
    class MyGame extends FlameGame with FlameIsolate {
    +  ...
    +  @override
    +  void update(double dt) {
    +    if (shouldRecalculate) {
    +      isolate(recalculateWorld, worldData).then(updateWorld);
    +    }
    +    ...
    +  }
    +  ...
    +}
    +
    +
    +
    +

    Performance note

    +

    Keep in mind that every component with FlameIsolate mixin that you create and add to your game +will create a new isolate. This means you will probably want to create a manager component to +manage a lot of “dumber” components. Think of it like ants, where the queen controls the worker +ants. If every individual worker ant got its own isolate, it would be a total waste of power, +hence you would put it on the queen, which in turn tells all the worker ants what to do.

    +

    A simple example of this can be found in the example application for the FlameIsolate package.

    +
    +
    +

    Backpressure Strategies

    +

    Backpressure strategies are a way to cope with the job queue when job items are produced more +rapidly than the isolate can handle them. This presents the problem of what to do with such a +growing backlog of unhandled jobs. To mitigate this problem this library funnels all jobs through a +job queue handler. Also known as BackpressureStrategy.

    +

    The ones currently supported are:

    +
      +
    • NoBackPressureStrategy that basically does not handle back pressure. It uses a FIFO stack for +storing a backlog of unhandled jobs. +-ReplaceBackpressureStrategy that has a job queue with size one, and discards the queue upon +adding a new job.

    • +
    • DiscardNewBackPressureStrategy that has a job queue with size one, and as long as the queue is +populated a new job will not be added.

    • +
    +

    You can specify a backpressure strategy by overriding the backpressureStrategy field. This will +create the isolate with the specified strategy when the component is mounted.

    +
    class MyGame extends FlameGame with FlameIsolate {
    +  @override
    +  BackpressureStrategy get backpressureStrategy => ReplaceBackpressureStrategy();
    +  ...
    +}
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_lottie/flame_lottie.html b/docs/1.18.0/bridge_packages/flame_lottie/flame_lottie.html new file mode 100644 index 000000000..8a79483db --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_lottie/flame_lottie.html @@ -0,0 +1,414 @@ + + + + + + + flame_lottie — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_lottie

    +

    This package allows you to load and add Lottie animations to your Flame game.

    +

    The native Lottie libraries (such as lottie-android) +are maintained by Airbnb.

    +

    The Flutter package lottie, on which this wrapper is based on, is by developed xaha.dev and +can be found on pub.dev.

    +
    +

    Usage

    +

    To use it in your game you just need to add flame_lottie to your pubspec.yaml.

    +

    Simply load the Lottie animation using the loadLottie method and +the LottieBuilder. +It allows all the various ways of loading a Lottie file:

    +
      +
    • Lottie.asset, for +obtaining a Lottie file from an AssetBundle using a key.

    • +
    • Lottie.network, for +obtaining a lottie file from a URL.

    • +
    • Lottie.file, for obtaining +a lottie file from a File.

    • +
    • Lottie.memory, for +obtaining a lottie file from a Uint8List.

    • +
    +

    … and add it as LottieComponent to your Flame 🔥 game.

    +

    Example:

    +
    class MyGame extends FlameGame {
    +  ...
    +  @override
    +  Future<void> onLoad() async {
    +    final asset = Lottie.asset('assets/LottieLogo1.json');
    +    final animation = await loadLottie(asset);
    +    add(
    +      LottieComponent(
    +        animation,
    +        repeating: true, // Continuously loop the animation.
    +        size: Vector2.all(400),
    +      ),
    +    );
    +  }
    +  ...
    +}
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_network_assets/flame_network_assets.html b/docs/1.18.0/bridge_packages/flame_network_assets/flame_network_assets.html new file mode 100644 index 000000000..e55c202dd --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_network_assets/flame_network_assets.html @@ -0,0 +1,398 @@ + + + + + + + FlameNetworkAssets — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    FlameNetworkAssets

    +

    FlameNetworkAssets is a bridge package focused on providing a solution to fetch, and cache assets +from the network.

    +

    The FlameNetworkAssets class provides an abstraction that should be extended in order to create +asset specific handler.

    +

    By default, the package relies on the http package to make http requests, and path_provider +to get the place to store the local cache, to use a different approach for those, use the +optional arguments in the constructor.

    +

    This package bundles a specific asset handler class for images:

    +
    final networkAssets = FlameNetworkImages();
    +final playerSprite = await networkAssets.load('https://url.com/image.png');
    +
    +
    +

    To create a specific asset handler class, you just need to extend the FlameNetworkAssets class +and define the decodeAsset and encodeAsset arguments:

    +
    class FlameNetworkCustomAsset extends FlameNetworkAssets<CustomAsset> {
    +  FlameNetworkImages({
    +    super.get,
    +    super.getAppDirectory,
    +    super.cacheInMemory,
    +    super.cacheInStorage,
    +  }) : super(
    +          decodeAsset: (bytes) => CustomAsset.decode(bytes),
    +          encodeAsset: (CustomAsset asset) => asset.encode(),
    +        );
    +}
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_oxygen/flame_oxygen.html b/docs/1.18.0/bridge_packages/flame_oxygen/flame_oxygen.html new file mode 100644 index 000000000..71418eea9 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_oxygen/flame_oxygen.html @@ -0,0 +1,374 @@ + + + + + + + flame_oxygen — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_oxygen

    +

    flame_oxygen

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_rive/flame_rive.html b/docs/1.18.0/bridge_packages/flame_rive/flame_rive.html new file mode 100644 index 000000000..8b39ab45c --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_rive/flame_rive.html @@ -0,0 +1,380 @@ + + + + + + + flame_rive — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_rive

    + +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_rive/rive.html b/docs/1.18.0/bridge_packages/flame_rive/rive.html new file mode 100644 index 000000000..1b2a9f4aa --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_rive/rive.html @@ -0,0 +1,453 @@ + + + + + + + flame_rive — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_rive

    +

    flame_rive is a bridge library for using rive animations in your Flame game. +Rive is a real-time interactive design and animation tool and you use it to create animations.

    +

    To use a file created by Rive in your game you need to add flame_rive to your pubspec.yaml, as can +be seen in the +Flame Rive example +and in the pub.dev installation instructions.

    +
    +

    How to use it

    +

    First, start with adding the animation.riv file to the assets folder. Then load the artboard of +the animation to the game using the loadArtboard method. After that, create the +StateMachineController from the artboard and add a controller to it. Then you can create a +RiveComponent using that artboard.

    +
    +
    +
    +rive_example.dart
    +
     1import 'dart:async';
    + 2
    + 3import 'package:flame/events.dart';
    + 4import 'package:flame/game.dart';
    + 5import 'package:flame_rive/flame_rive.dart';
    + 6
    + 7class RiveExampleGame extends FlameGame with TapDetector {
    + 8  late SMIInput<double>? levelInput;
    + 9
    +10  @override
    +11  Future<void> onLoad() async {
    +12    final skillsArtboard =
    +13        await loadArtboard(RiveFile.asset('assets/skills.riv'));
    +14
    +15    final controller = StateMachineController.fromArtboard(
    +16      skillsArtboard,
    +17      "Designer's Test",
    +18    );
    +19
    +20    skillsArtboard.addController(controller!);
    +21
    +22    levelInput = controller.findInput<double>('Level');
    +23
    +24    add(RiveComponent(artboard: skillsArtboard, size: canvasSize));
    +25  }
    +26
    +27  @override
    +28  void onTap() {
    +29    super.onTap();
    +30    if (levelInput != null) {
    +31      levelInput!.value = (levelInput!.value + 1) % 3;
    +32    }
    +33  }
    +34}
    +
    +
    +
    +
    +
    class RiveExampleGame extends FlameGame {
    +  @override
    +  Future<void> onLoad() async {
    +    final skillsArtboard =
    +    await loadArtboard(RiveFile.asset('assets/skills.riv'));
    +
    +    final controller = StateMachineController.fromArtboard(
    +      skillsArtboard,
    +      "Designer's Test",
    +    );
    +
    +    skillsArtboard.addController(controller!);
    +
    +    add(RiveComponent(artboard: skillsArtboard, size: Vector2.all(550)));
    +  }
    +}
    +
    +
    +

    You can use the controller to manage the state of animation. +Check out the example for more information.

    +
    +
    +

    Full Example

    +

    You can check an example +here.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_riverpod/component.html b/docs/1.18.0/bridge_packages/flame_riverpod/component.html new file mode 100644 index 000000000..02a74133e --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_riverpod/component.html @@ -0,0 +1,414 @@ + + + + + + + Component — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Component

    +
    +

    ComponentRef

    +

    ComponentRef exposes Riverpod functionality to individual Components, and is comparable to +flutter_riverpod’s WidgetRef.

    +
    +
    +

    RiverpodComponentMixin

    +

    RiverpodComponentMixin manages the lifecycle of listeners on behalf of individual Components.

    +

    Components using this mixin must use addToGameWidgetBuild in their onMount method to add +listeners (e.g. ref.watch or ref.listen) prior to calling super.onMount, which manages the +staged listeners and disposes of them on the user’s behalf inside onRemove.

    +
    class RiverpodAwareTextComponent extends PositionComponent
    +    with RiverpodComponentMixin {
    +  late TextComponent textComponent;
    +  int currentValue = 0;
    +
    +  @override
    +  void onMount() {
    +    addToGameWidgetBuild(() {
    +      ref.listen(countingStreamProvider, (p0, p1) {
    +        if (p1.hasValue) {
    +          currentValue = p1.value!;
    +          textComponent.text = '$currentValue';
    +        }
    +      });
    +    });
    +    super.onMount();
    +    add(textComponent = TextComponent(position: position + Vector2(0, 27)));
    +  }
    +}
    +
    +
    +
    +
    +

    RiverpodGameMixin

    +

    RiverpodGameMixin provides listeners from all components to the build method of the +RiverpodAwareGameWidget. +The addToGameWidgetBuild method is available in the RiverpodGameMixin as well, +enabling you to access ComponentRef methods directly in your Game class.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_riverpod/flame_riverpod.html b/docs/1.18.0/bridge_packages/flame_riverpod/flame_riverpod.html new file mode 100644 index 000000000..5abcab1a7 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_riverpod/flame_riverpod.html @@ -0,0 +1,391 @@ + + + + + + + flame_riverpod — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + + + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_riverpod/riverpod.html b/docs/1.18.0/bridge_packages/flame_riverpod/riverpod.html new file mode 100644 index 000000000..c9cf8d29e --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_riverpod/riverpod.html @@ -0,0 +1,429 @@ + + + + + + + flame_riverpod — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_riverpod

    +
    +

    Riverpod

    +

    Riverpod is a reactive caching and data-binding +framework for Dart & Flutter.

    +

    In flutter_riverpod, widgets can be configured to rebuild when the state +of a provider changes.

    +

    When using Flame, we are interacting with components, which are not Widgets.

    +

    flame_riverpod provides the RiverpodAwareGameWidget, RiverpodGameMixin, and +RiverpodComponentMixin to facilitate managing state from Providers in your Flame Game.

    +
    +
    +

    Usage

    +

    You should use the RiverpodAwareGameWidget as your Flame GameWidget, the RiverpodGameMixin +mixin on your game that extends FlameGame, and the RiverpodComponentMixin on any components +interacting with Riverpod providers.

    +

    Subscriptions to a provider are managed in accordance with the lifecycle +of a Flame Component: initialization occurs when a Component is mounted, and disposal +occurs when a Component is removed.

    +

    By default, the RiverpodAwareGameWidget is rebuilt when +Riverpod-aware (i.e. using the RiverpodComponentMixin) components are mounted and when they are +removed.

    +
    /// An excerpt from the Example. Check it out!
    +class RefExampleGame extends FlameGame with RiverpodGameMixin {
    +  @override
    +  Future<void> onLoad() async {
    +    await super.onLoad();
    +    add(TextComponent(text: 'Flame'));
    +    add(RiverpodAwareTextComponent());
    +  }
    +}
    +
    +class RiverpodAwareTextComponent extends PositionComponent
    +    with RiverpodComponentMixin {
    +  late TextComponent textComponent;
    +  int currentValue = 0;
    +
    +  @override
    +  void onMount() {
    +    addToGameWidgetBuild(() {
    +      ref.listen(countingStreamProvider, (p0, p1) {
    +        if (p1.hasValue) {
    +          currentValue = p1.value!;
    +          textComponent.text = '$currentValue';
    +        }
    +      });
    +    });
    +    super.onMount();
    +    add(textComponent = TextComponent(position: position + Vector2(0, 27)));
    +  }
    +}
    +
    +
    +

    The order of operations in Component.onMount is important. The RiverpodComponentMixin +interacts with RiverpodGameMixin (inside of RiverpodComponentMixin.onMount) to co-ordinate +adding and removing listeners as the corresponding component is mounted and removed, respectively.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_riverpod/widget.html b/docs/1.18.0/bridge_packages/flame_riverpod/widget.html new file mode 100644 index 000000000..7a8839645 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_riverpod/widget.html @@ -0,0 +1,385 @@ + + + + + + + Widget — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Widget

    +
    +

    RiverpodAwareGameWidget

    +

    RiverpodAwareGameWidget is a GameWidget with a State object of type +RiverpodAwareGameWidgetState.

    +

    The required GlobalKey argument is used to provide Components using RiverpodComponentMixin +access to Providers via RiverpodAwareGameWidgetState.

    +
    +
    +

    RiverpodAwareGameWidgetState

    +

    RiverpodAwareGameWidgetState performs the duties associated with the +ConsumerStatefulElement in flutter_riverpod and GameWidgetState in flame.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_spine/flame_spine.html b/docs/1.18.0/bridge_packages/flame_spine/flame_spine.html new file mode 100644 index 000000000..8856ba54e --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_spine/flame_spine.html @@ -0,0 +1,419 @@ + + + + + + + flame_spine — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_spine

    +

    This package allows you to load and add Spine skeletal animations to your Flame game.

    +
    +

    Usage

    +

    To use it in your game you just need to add flame_spine to your pubspec.yaml and your spine +assets to your assets/ directory, and you can add a SpineComponent to your FlameGame.

    +
    +

    Note

    +

    Remember to call await initSpineFlutter(); in your main method, or in onLoad.

    +
    +

    Example:

    +
    void main() async {
    +  WidgetsFlutterBinding.ensureInitialized();
    +  await initSpineFlutter();
    +  runApp(const GameWidget.controlled(gameFactory: SpineExample.new));
    +}
    +
    +class FlameSpineExample extends FlameGame with TapDetector {
    + late final SpineComponent spineboy;
    +
    + @override
    + Future<void> onLoad() async {
    +  await initSpineFlutter();
    +  // Load the Spineboy atlas and skeleton data from asset files
    +  // and create a SpineComponent from them, scaled down and
    +  // centered on the screen
    +  spineboy = await SpineComponent.fromAssets(
    +   atlasFile: 'assets/spine/spineboy.atlas',
    +   skeletonFile: 'assets/spine/spineboy-pro.skel',
    +   scale: Vector2(0.4, 0.4),
    +   anchor: Anchor.center,
    +   position: size / 2,
    +  );
    +
    +  // Set the "walk" animation on track 0 in looping mode
    +  spineboy.animationState.setAnimationByName(0, 'walk', true);
    +  await add(spineboy);
    + }
    +
    + @override
    + void onDetach() {
    +  // Dispose the native resources that have been loaded for spineboy.
    +  spineboy.dispose();
    + }
    +}
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_splash_screen/flame_splash_screen.html b/docs/1.18.0/bridge_packages/flame_splash_screen/flame_splash_screen.html new file mode 100644 index 000000000..cac466ac6 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_splash_screen/flame_splash_screen.html @@ -0,0 +1,382 @@ + + + + + + + flame_splash_screen — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_splash_screen

    +

    Showcase of the splash screen

    +

    Style your flame game with a beautiful splash screen.

    +

    flame_splash_screen is a very customizable splash screen package.

    +
    FlameSplashScreen(
    +  theme: FlameSplashTheme.dark,
    +  onFinish: (BuildContext context) => Navigator.pushNamed(context, '/your-game-initial-screen')
    +)
    +
    +
    +

    Check the package’s repo and the +pub page for more details.

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_svg/flame_svg.html b/docs/1.18.0/bridge_packages/flame_svg/flame_svg.html new file mode 100644 index 000000000..86e8abe65 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_svg/flame_svg.html @@ -0,0 +1,380 @@ + + + + + + + flame_svg — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_svg

    + +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_svg/svg.html b/docs/1.18.0/bridge_packages/flame_svg/svg.html new file mode 100644 index 000000000..98d8334c8 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_svg/svg.html @@ -0,0 +1,412 @@ + + + + + + + Flame SVG — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Flame SVG

    +

    flame_svg provides a simple API for rendering SVG images in your game.

    +
    +

    Installation

    +

    Svg support is provided by the flame_svg bridge package, be sure to put it in your pubspec file +to use it.

    +

    If you want to know more about the installation visit +flame_svg on pub.dev.

    +
    +
    +

    How to use flame_svg

    +

    To use it just import the Svg class from 'package:flame_svg/flame_svg.dart', and use the +following snippet to render it on the canvas:

    +
    final svgInstance = await Svg.load('android.svg');
    +
    +final position = Vector2(100, 100);
    +final size = Vector2(300, 300);
    +
    +svgInstance.renderPosition(canvas, position, size);
    +
    +
    +

    or use the SvgComponent and add it to the component tree:

    +
    class MyGame extends FlameGame {
    +  @override
    +  Future<void> onLoad() async {
    +    final svgInstance = await Svg.load('android.svg');
    +    final size = Vector2.all(100);
    +    final position = Vector2.all(100);
    +    final svgComponent = SvgComponent(
    +      size: size,
    +      position: position,
    +      svg: svgInstance,
    +    );
    +
    +    add(svgComponent);
    +  }
    +}
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_tiled/flame_tiled.html b/docs/1.18.0/bridge_packages/flame_tiled/flame_tiled.html new file mode 100644 index 000000000..48b796831 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_tiled/flame_tiled.html @@ -0,0 +1,504 @@ + + + + + + + flame_tiled — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    flame_tiled

    +

    flame_tiled is the bridge package that connects the flame game engine to Tiled maps by parsing +TMX (XML) files and accessing the tiles, objects, and everything in there.

    +

    To use this,

    +
      +
    1. Create your own map by using Tiled.

    2. +
    3. Create a TiledComponent and add it to the component tree as follows:

    4. +
    +
    final component = await TiledComponent.load(
    +  'my_map.tmx',
    +  Vector2.all(32),
    +);
    +
    +add(component);
    +
    +
    +
    +

    TiledComponent

    +

    Tiled is a free and open source, full-featured level and map editor for your platformer or +RPG game. Currently we have an “in progress” implementation of a Tiled component. This API +uses the lib tiled.dart to parse map files and +render visible layers using the performant SpriteBatch for each layer.

    +

    Supported map types include: Orthogonal, Isometric, Hexagonal, and Staggered.

    + + + + + + + + + + + + + +

    Orthogonal

    Hexagonal

    Isomorphic

    An example of an orthogonal map

    An example of hexagonal map

    An example of isomorphic map

    +

    An example of how to use the API can be found +here.

    +
    +

    TileStack

    +

    Once a TiledComponent is loaded, you can select any column of (x,y) tiles in a tileStack to +then add animation. Removing the stack will not remove the tiles from the map.

    +
    +

    Note: This currently only supports position based effects.

    +
    +
    void onLoad() {
    +  final stack = map.tileMap.tileStack(4, 0, named: {'floor_under'});
    +  stack.add(
    +    SequenceEffect(
    +      [
    +        MoveEffect.by(
    +          Vector2(5, 0),
    +          NoiseEffectController(duration: 1, frequency: 20),
    +        ),
    +        MoveEffect.by(Vector2.zero(), LinearEffectController(2)),
    +      ],
    +      repeatCount: 3,
    +    )
    +      ..onComplete = () => stack.removeFromParent(),
    +  );
    +  map.add(stack);
    +}
    +
    +
    +
    +
    +

    TileAtlas

    +

    When a tilemap has multiple images (from multiple tilesets) TiledComponent uses a TileAtlas to +pack all those image into a single big image (a.k.a atlas). This helps in rendering the whole map in +a single draw call. But is there a limit on how big this atlas can be based on the target platform +and hardware. As it is not possible to query this max size from Flame or Flutter as of now, +TiledComponent limits the atlas to 4096x4096 for web and 8192x8192 for all other platforms.

    +

    These limits should work well for most cases. But in case you are sure that your target platform can +support bigger atlas and want to override the limits used by TiledComponent you can do so by +passing in the atlasMaxX and atlasMaxX values to TiledComponent.load.

    +

    NOTE: This is not recommended as such huge sizes might not work with all hardware. Instead consider +resizing the original tileset images so that when packed they fit with the limits.

    +
    final component = await TiledComponent.load(
    +  'my_map.tmx',
    +  Vector2.all(32),
    +  atlasMaxX: 9216,
    +  atlasMaxY: 9216,
    +);
    +
    +add(component);
    +
    +
    +
    +
    +
    +

    Limitations

    +
    +

    Flip

    +

    Tiled has a feature that allows you to flip a tile horizontally or vertically, or even rotate it.

    +

    flame_tiled supports this but if you are using a large texture and have flipped tiles there will +be a drop in performance. If you want to ignore any flips in your tilemap you can set the +ignoreFlip to false in the constructor.

    +

    Note: A large texture in this context means one with multiple tilesets (or a huge tileset) +where the sum of their dimensions are in the thousands.

    +
    final component = await TiledComponent.load(
    +  'my_map.tmx',
    +  Vector2.all(32),
    +  ignoreFlip: true,
    +);
    +
    +
    +
    +
    +

    Clearing images cache

    +

    If you have called Flame.images.clearCache() you also need to call TiledAtlas.clearCache() to +remove disposed images from the tiled cache. It might be useful if your next game map have completely +different tiles than the previous.

    +
    +
    +
    +

    Troubleshooting

    +
    +

    My game shows “lines” and artifacts between the map tiles

    +

    This is caused by the imprecision found in float-pointing numbers in computer science.

    +

    Check this Article +to learn more about the issue and how it can be solved.

    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_tiled/layers.html b/docs/1.18.0/bridge_packages/flame_tiled/layers.html new file mode 100644 index 000000000..ee07774a9 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_tiled/layers.html @@ -0,0 +1,414 @@ + + + + + + + Layers — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Layers

    +

    At its simplest, layers can be retrieved from a Tilemap by invoking:

    +
    getLayer<ObjectGroup>("myObjectGroupLayer");
    +getLayer<ImageLayer>("myImageLayer");
    +getLayer<TileLayer>("myTileLayer");
    +getLayer<Group>("myGroupLayer");
    +
    +
    +

    These methods will either return the requested layer type or null if it does not exist.

    +
    +

    Layer properties

    +

    The following Tiled properties are supported:

    +
      +
    • Visible

    • +
    • Opacity

    • +
    • Tint color

    • +
    • Horizontal offset

    • +
    • Vertical offset

    • +
    • Parallax factor

    • +
    • Custom properties

    • +
    +
    +
    +

    Tiles properties

    +
      +
    • Tiles can have custom properties accessible at tile.properties.

    • +
    • Tiles can have a custom type (or class starting in Tiled v1.9) accessible at tile.type.

    • +
    +
    +
    +

    Other features

    +

    Other advanced features are not yet supported, but you can easily read the objects and other +features of the TMX and add custom behavior (eg regions for triggers and walking areas, custom +animated objects).

    +
    +
    +

    Full Example

    +

    You can check a working example +here.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/bridge_packages/flame_tiled/tiled.html b/docs/1.18.0/bridge_packages/flame_tiled/tiled.html new file mode 100644 index 000000000..a156bc273 --- /dev/null +++ b/docs/1.18.0/bridge_packages/flame_tiled/tiled.html @@ -0,0 +1,398 @@ + + + + + + + Tiled — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Tiled

    +

    Tiled is a great tool to design levels and maps. From Tiled’s documentation:

    +
    +

    Tiled is a 2D level editor that helps you develop the content of your game. Its +primary feature is to edit tile maps of various forms, but it also supports +free image placement as well as powerful ways to annotate your level with extra +information used by the game. Tiled focuses on general flexibility while trying +to stay intuitive.

    +

    In terms of tile maps, it supports straight rectangular tile layers, but also +projected isometric, staggered isometric and staggered hexagonal layers. A +tileset can be either a single image containing many tiles, or it can be a +collection of individual images. In order to support certain depth faking +techniques, tiles and layers can be offset by a custom distance and their +rendering order can be configured.

    +
    +

    Tiled Editor

    +

    Flame provides a package (flame_tiled) that bundles a dart package which allows you to parse TMX +(XML) files and access the tiles, objects, and everything in there.

    +

    The dart package provides a simple Tiled class and flame_tiled provides a component wrapper +TiledComponent, for the map rendering, which renders the tiles on the screen and supports +rotations and flips.

    +
    +

    Tiled Editor

    +

    You can choose to download the Tiled map editor and create interactive maps that can be loaded +into your game. At its core, the Tiled map editor creates a TMX file that can be parsed and used +within your game.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/development/contributing.html b/docs/1.18.0/development/contributing.html new file mode 100644 index 000000000..496b02087 --- /dev/null +++ b/docs/1.18.0/development/contributing.html @@ -0,0 +1,604 @@ + + + + + + + Contribution Guidelines — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Contribution Guidelines

    +

    Note: If these contribution guidelines are not followed your issue or PR might be closed, so +please read these instructions carefully.

    +
    +

    Contribution types

    +
    +

    Bug Reports

    +
      +
    • If you find a bug, please first report it using Github issues.

      +
        +
      • First check if there is not already an issue for it; duplicated issues will be closed.

      • +
      +
    • +
    +
    +
    +

    Bug Fix

    +
      +
    • If you’d like to submit a fix for a bug, please read the How To for how to +send a Pull Request.

    • +
    • Indicate on the open issue that you are working on fixing the bug and the issue will be assigned +to you.

    • +
    • Write Fixes #xxxx in your PR text, where xxxx is the issue number (if there is one).

    • +
    • Include a test that isolates the bug and verifies that it was fixed.

    • +
    +
    +
    +

    New Features

    +
      +
    • If you’d like to add a feature to the library that doesn’t already exist, feel free to describe +the feature in a new GitHub issue.

      +
        +
      • You can also join us on Discord to discuss some initials thoughts.

      • +
      +
    • +
    • If you’d like to implement the new feature, please wait for feedback from the project maintainers +before spending too much time writing the code. In some cases, enhancements may not align well +with the project future development direction.

    • +
    • Implement the code for the new feature and please read the How To.

    • +
    +
    +
    +

    Documentation & Miscellaneous

    +
      +
    • If you have suggestions for improvements to the documentation, tutorial or examples (or something +else), we would love to hear about it.

    • +
    • As always first file a Github issue.

    • +
    • Implement the changes to the documentation, please read the How To.

    • +
    +
    +
    +
    +

    How To Contribute

    +
    +

    Requirements

    +

    For a contribution to be accepted:

    +
      +
    • Follow the Style Guide when writing the code;

    • +
    • Format the code using dart format .;

    • +
    • Lint the code with melos run analyze;

    • +
    • Check that all tests pass: melos run test;

    • +
    • Documentation should always be updated or added (if applicable);

    • +
    • Examples should always be updated or added (if applicable);

    • +
    • Tests should always be updated or added (if applicable) – check the Test writing guide for +more details;

    • +
    • The PR title should start with a conventional commit prefix (feat:, fix: etc).

    • +
    +

    If the contribution doesn’t meet these criteria, a maintainer will discuss it with you on the issue +or PR. You can still continue to add more commits to the branch you have sent the Pull Request from +and it will be automatically reflected in the PR.

    +
    +
    +
    +

    Open an issue and fork the repository

    +
      +
    • If it is a bigger change or a new feature, first of all +file a bug or feature report, so that we can discuss what direction to follow.

    • +
    • Fork the project on GitHub.

    • +
    • Clone the forked repository to your local development machine +(e.g. git clone git@github.com:<YOUR_GITHUB_USER>/flame.git).

    • +
    +
    +

    Environment Setup

    +

    Flame is setup to run with the most recent stable version of Flutter, so make sure your version +matches that:

    +
    flutter channel stable
    +
    +
    +

    Also, Flame uses Melos to manage the project and dependencies.

    +

    To install Melos, run the following command from your terminal:

    +
    flutter pub global activate melos
    +
    +
    +

    Next, at the root of your locally cloned repository bootstrap the projects dependencies:

    +
    melos bootstrap
    +
    +
    +

    The bootstrap command locally links all dependencies within the project without having to +provide manual dependency_overrides. This allows all +plugins, examples and tests to build from the local clone project. You should only need to run this +command once.

    +
    +

    You do not need to run flutter pub get once bootstrap has been completed.

    +
    +
    +

    CSpell

    +

    If you want to run the spellchecker locally, you will have to install +cspell; +you can do so using npm or yarn:

    +
    npm install -g cspell
    +
    +
    +

    Then you can run it with the following arguments:

    +
    cspell --no-progress -c .github/cspell.json "**/*.{md,dart}"
    +
    +
    +
    +
    +

    Markdown Lint

    +

    If you want to lint the markdown files you have to install +markdownlint-cli and once that is installed you +can run melos markdown-check to check if the markdown follows the rules. Some markdown linting +errors can be automatically fixed with melos markdown-fix.

    +

    Note that, sadly, a particularly laborious rule, MD013, does not provide an auto-fix +option. However, you can use other tools to +circumvent this. For example, the extension Rewrap for VSCode, when +configured with rewrap.wrappingColumn=100, will do +the trick for you.

    +
    +
    +
    +

    Performing changes

    +
      +
    • Create a new local branch from main (e.g. git checkout -b my-new-feature)

    • +
    • Make your changes (try to split them up with one PR per feature/fix).

    • +
    • When committing your changes, make sure that each commit message is clear +(e.g. git commit -m 'Take in an optional Camera as a parameter to FlameGame').

    • +
    • Push your new branch to your own fork into the same remote branch +(e.g. git push origin my-username.my-new-feature, replace origin if you use another remote.)

    • +
    +
    +
    +

    Breaking changes

    +

    When doing breaking changes a deprecation tag should be added when possible and contain a message +that conveys to the user what which version that the deprecated method/field will be removed in and +what method they should use instead to perform the task. The version specified should be at least +two versions after the current one, such that there will be at least one stable release where the +users get to see the deprecation warning and in the version after that (or a later version) the +deprecated entity should be removed.

    +

    Example (if the current version is v1.3.0):

    +
    @Deprecated('Will be removed in v1.5.0, use nonDeprecatedFeature() instead')
    +void deprecatedFeature() {}
    +
    +
    +
    +
    +

    Open a pull request

    +

    Go to the pull request page of Flame and in the top +of the page it will ask you if you want to open a pull request from your newly created branch.

    +

    The title of the pull request should start with a conventional commit type.

    +

    Allowed types are:

    +
      +
    • fix: – patches a bug and is not a new feature;

    • +
    • feat: – introduces a new feature;

    • +
    • docs: – updates or adds documentation or examples;

    • +
    • test: – updates or adds tests;

    • +
    • refactor: – refactors code but doesn’t introduce any changes or additions to the public API;

    • +
    • perf: – code change that improves performance;

    • +
    • build: – code change that affects the build system or external dependencies;

    • +
    • ci: – changes to the CI configuration files and scripts;

    • +
    • chore: – other changes that don’t modify source or test files;

    • +
    • revert: – reverts a previous commit.

    • +
    +

    If you introduce a breaking change the conventional commit type MUST end with an exclamation +mark (e.g. feat!: Remove the position argument from PositionComponent).

    +

    Examples of PR titles:

    +
      +
    • feat: Component.childrenFactory can be used to set up a global ComponentSet factory

    • +
    • fix: Avoid infinite loop in FlameGame

    • +
    • docs: Add a JoystickComponent example

    • +
    • docs: Improve the Mandarin README

    • +
    • test: Add infinity test for MoveEffect.to

    • +
    • refactor: Optimize the structure of the game loop

    • +
    +
    +
    +
    +

    Maintainers

    +

    These instructions are for the maintainers of Flame.

    +
    +

    Merging a pull request

    +

    When merging a pull request, make sure that the title of the merge commit has the correct +conventional commit tag and a descriptive title. This is extra important since sometimes the title +of the PR doesn’t reflect what GitHub defaults to for the merge commit title (if the title has been +changed during the life time of the PR for example).

    +

    All the default text should be removed from the commit message and the PR description and the +instructions from the “Migration instruction” (if the PR is breaking) should be copied into the +commit message.

    +
    +
    +

    Creating a release

    +

    There are a few things to think about when doing a release:

    +
      +
    • Search through the codebase for @Deprecated methods/fields and remove the ones that are marked +for removal in the version that you are intending to release.

    • +
    • Create a PR containing the changes for removing the deprecated entities.

    • +
    • Run melos version -V <package1>:<version> -V <package2>:<version> for Melos to generate +CHANGELOG.md files.

    • +
    • Go through the PRs with breaking changes and add migration documentation to the changelog. +There should be migration docs on each PR, if they haven’t been copied to the commit message.

    • +
    • Run melos publish to make sure that there aren’t any problems with any of the packages and make +sure that all the versions are correct.

    • +
    • Once you are satisfied with the result of the dry run, run melos publish --no-dry-run

    • +
    • Create a PR containing the updated changelog and pubspec.yaml files.

    • +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/development/development.html b/docs/1.18.0/development/development.html new file mode 100644 index 000000000..b5565e6c3 --- /dev/null +++ b/docs/1.18.0/development/development.html @@ -0,0 +1,379 @@ + + + + + + + Development — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Development

    + +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/development/documentation.html b/docs/1.18.0/development/documentation.html new file mode 100644 index 000000000..52fd40a55 --- /dev/null +++ b/docs/1.18.0/development/documentation.html @@ -0,0 +1,692 @@ + + + + + + + Documentation Site — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Documentation Site

    +

    Flame’s documentation is written in Markdown. It is then rendered into HTML with the help of +the Sphinx engine and its MyST plugin. The rendered files are then manually (but with the help +of a script) published to flame-docs-site, where the site is served via GitHub Pages.

    +
    +

    Markdown

    +

    The main documentation site is written in Markdown. We assume that you’re already familiar with the +basics of the Markdown syntax (if not, there are plenty of guides on the Internet). Instead, this +section will focus on the Markdown extensions that are enabled in our build system.

    +
    +
    +

    Table of contents

    +

    The table of contents for the site must be created manually. This is done using special {toctree} +blocks, one per each subdirectory:

    +
    ```{toctree}
    +:hidden:
    +
    +First Topic    <relative_path/to_topic1.md>
    +Second Topic   <topic2.md>
    +```
    +
    +
    +

    When adding new documents into the documentation site, make sure that they are mentioned in one of +the toctrees – otherwise you will see a warning during the build that the document is orphaned.

    +
    +
    +

    Admonitions

    +

    Admonitions are emphasized blocks of text with a distinct appearance. They are created using the +triple-backticks syntax:

    +
    ```{note}
    +Please note this very important caveat.
    +```
    +```{warning}
    +Don't look down, or you will encounter an error.
    +```
    +```{error}
    +I told you so.
    +```
    +```{seealso}
    +Also check out this cool thingy.
    +```
    +
    +
    +
    +

    Note

    +

    Please note this very important caveat.

    +
    +
    +

    Warning

    +

    Don’t look down, or you will encounter an error.

    +
    +
    +

    Error

    +

    I told you so.

    +
    +
    +

    See also

    +

    Also check out this cool thingy.

    +
    +
    +
    +

    Deprecations

    +

    The special {deprecated} block can be used to mark some part of documentation or syntax as being +deprecated. This block requires specifying the version when the deprecation has occurred

    +
    ```{deprecated} v1.3.0
    +
    +Please use this **other** thing instead.
    +```
    +
    +
    +

    Which would be rendered like this:

    +
    +

    Deprecated since version v1.3.0: Please use this other thing instead.

    +
    +
    +
    +

    Live examples

    +

    Our documentation site includes a custom-built flutter-app directive which allows creating +Flutter widgets and embedding them alongside the overall documentation content.

    +

    In Markdown, the code for inserting an embed looks like this:

    +
    ```{flutter-app}
    +:sources: ../flame/examples
    +:page: tap_events
    +:show: widget code popup
    +:width: 180
    +:height: 160
    +```
    +
    +
    +

    Here’s what the different options mean:

    +
      +
    • sources: specifies the name of the root directory where the Flutter code that you wish to run +is located. This directory must be a Flutter repository, and there must be a pubspec.yaml file +there. The path is considered relative to the doc/_sphinx directory.

    • +
    • page: a sub-path within the root directory given in sources. This option has two effects: +first, it is appended to the path of the html page of the widget, like so: main.dart.html?$page. +Secondly, the button to show the source code of the embed will display the code from the file or +directory with the name given by page.

      +

      The purpose of this option is to be able to bundle multiple examples into a single executable. +When using this option, the main.dart file of the app should route the execution to the proper +widget according to the page being passed.

      +
    • +
    • show: contains a subset of modes: widget, code, infobox, and popup. The widget mode +creates an iframe with the embedded example, directly within the page. The code mode will show +a button that allows the user to see the code that produced this example. The popup mode also +shows a button, which displays the example in an overlay window. This is more suitable for +demoing larger apps. Using both “widget” and “popup” modes at the same time is not recommended. +Finally, the infobox mode will display the result in a floating window – this mode is best +combined with widget and code.

    • +
    • width: an integer that defines the width of the embedded application. If this is not defined, +the width will be 100%.

    • +
    • height: an integer that defines the height of the embedded application. If this is not +defined, the height will be 350px.

    • +
    +
    +
    +tap_events.dart
    +
      1import 'dart:math';
    +  2
    +  3import 'package:flame/components.dart';
    +  4import 'package:flame/events.dart';
    +  5import 'package:flame/game.dart';
    +  6import 'package:flutter/rendering.dart';
    +  7
    +  8class TapEventsGame extends FlameGame {
    +  9  @override
    + 10  Future<void> onLoad() async {
    + 11    add(TapTarget());
    + 12  }
    + 13}
    + 14
    + 15/// This component is the tappable blue-ish rectangle in the center of the game.
    + 16/// It uses the [TapCallbacks] mixin to receive tap events.
    + 17class TapTarget extends PositionComponent with TapCallbacks {
    + 18  TapTarget() : super(anchor: Anchor.center);
    + 19
    + 20  final _paint = Paint()..color = const Color(0x448BA8FF);
    + 21
    + 22  /// We will store all current circles into this map, keyed by the `pointerId`
    + 23  /// of the event that created the circle.
    + 24  final Map<int, ExpandingCircle> _circles = {};
    + 25
    + 26  @override
    + 27  void onGameResize(Vector2 size) {
    + 28    super.onGameResize(size);
    + 29    this.size = size - Vector2(100, 75);
    + 30    if (this.size.x < 100 || this.size.y < 100) {
    + 31      this.size = size * 0.9;
    + 32    }
    + 33    position = size / 2;
    + 34  }
    + 35
    + 36  @override
    + 37  void render(Canvas canvas) {
    + 38    canvas.drawRect(size.toRect(), _paint);
    + 39  }
    + 40
    + 41  @override
    + 42  void onTapDown(TapDownEvent event) {
    + 43    final circle = ExpandingCircle(event.localPosition);
    + 44    _circles[event.pointerId] = circle;
    + 45    add(circle);
    + 46  }
    + 47
    + 48  @override
    + 49  void onLongTapDown(TapDownEvent event) {
    + 50    _circles[event.pointerId]!.accent();
    + 51  }
    + 52
    + 53  @override
    + 54  void onTapUp(TapUpEvent event) {
    + 55    _circles.remove(event.pointerId)!.release();
    + 56  }
    + 57
    + 58  @override
    + 59  void onTapCancel(TapCancelEvent event) {
    + 60    _circles.remove(event.pointerId)!.cancel();
    + 61  }
    + 62}
    + 63
    + 64class ExpandingCircle extends Component {
    + 65  ExpandingCircle(this._center)
    + 66      : _baseColor =
    + 67            HSLColor.fromAHSL(1, random.nextDouble() * 360, 1, 0.8).toColor();
    + 68
    + 69  final Color _baseColor;
    + 70  final Vector2 _center;
    + 71  double _outerRadius = 0;
    + 72  double _innerRadius = 0;
    + 73  bool _released = false;
    + 74  bool _cancelled = false;
    + 75  late final _paint = Paint()
    + 76    ..style = PaintingStyle.stroke
    + 77    ..color = _baseColor;
    + 78
    + 79  /// "Accent" is thin white circle generated by `onLongTapDown`. We use
    + 80  /// negative radius to indicate that the circle should not be drawn yet.
    + 81  double _accentRadius = -1e10;
    + 82  late final _accentPaint = Paint()
    + 83    ..style = PaintingStyle.stroke
    + 84    ..strokeWidth = 0
    + 85    ..color = const Color(0xFFFFFFFF);
    + 86
    + 87  /// At this radius the circle will disappear.
    + 88  static const maxRadius = 175;
    + 89  static final random = Random();
    + 90
    + 91  double get radius => (_innerRadius + _outerRadius) / 2;
    + 92
    + 93  void release() => _released = true;
    + 94  void cancel() => _cancelled = true;
    + 95  void accent() => _accentRadius = 0;
    + 96
    + 97  @override
    + 98  void render(Canvas canvas) {
    + 99    canvas.drawCircle(_center.toOffset(), radius, _paint);
    +100    if (_accentRadius >= 0) {
    +101      canvas.drawCircle(_center.toOffset(), _accentRadius, _accentPaint);
    +102    }
    +103  }
    +104
    +105  @override
    +106  void update(double dt) {
    +107    if (_cancelled) {
    +108      _innerRadius += dt * 100; // implosion
    +109    } else {
    +110      _outerRadius += dt * 20;
    +111      _innerRadius += dt * (_released ? 20 : 6);
    +112      _accentRadius += dt * 20;
    +113    }
    +114    if (radius >= maxRadius || _innerRadius > _outerRadius) {
    +115      removeFromParent();
    +116    } else {
    +117      final opacity = 1 - radius / maxRadius;
    +118      _paint.color = _baseColor.withOpacity(opacity);
    +119      _paint.strokeWidth = _outerRadius - _innerRadius;
    +120    }
    +121  }
    +122}
    +
    +
    +
    +
    +
    +

    Standardization and Templates

    +

    For every section or package added to the documentation, naming conventions, directory structure, +and standardized table of contents are important. Every section and package must have a table of +contents or an entry in the parent markdown file to allow navigation from the left sidebar menu in +logical or alphabetical order. Additionally, naming conventions should be followed for organization, +such as:

    +
      +
    • bridge_packages/package_name/package_name.md

    • +
    • documentation_section/documentation_section.md

    • +
    +
    +

    Note

    +

    Avoid having spaces in the paths to the docs since that will keep you from +building the project due to +this bug.

    +
    +
    +
    +

    Building documentation locally

    +

    Building the documentation site on your own computer is fairly simple. All you need is the +following:

    +
      +
    1. A working Flutter installation, accessible from the command line.

    2. +
    3. Melos command-line tool, as per the contributing guide.

    4. +
    5. A Python environment, with python version 3.8+ or higher. Having a dedicated python +virtual environment is recommended but not required.

    6. +
    7. Install the remaining requirements using the command

      +
      melos run doc-setup
      +
      +
      +
    8. +
    +

    Once these prerequisites are met, you can build the documentation by using the built-in Melos +target:

    +
    melos doc-build
    +
    +
    +

    The melos doc-build command here renders the documentation site into HTML. This command needs to +be re-run every time you make changes to any of the documents. Luckily, it is smart enough to only +rebuild the documents that have changed since the previous run, so usually, a rebuild takes only a +second or two.

    +

    If you want to automatically recompile the docs every time there is a change to one of the files +you can use the built-in Melos target below, which will also serve and open your default +browser with the docs.

    +
    melos doc-serve
    +
    +
    +

    When using the melos doc-serve command, the melos doc-build is only needed when +there are changes to the sphinx theme. This is because the serve command both automatically +compiles the docs on changes and also hosts them locally. The docs are served at +http://localhost:8000/ by default.

    +

    There are other make commands that you may find occasionally useful too:

    +
      +
    • melos doc-clean removes all cached generated files (in case the system gets stuck in a bad +state).

    • +
    • melos doc-linkcheck to check whether there are any broken links in the documentation.

    • +
    • melos doc-kill removes any orphaned TCP threads running on port 8000.

    • +
    +

    The generated html files will be in the doc/_build/html directory, you can view them directly +by opening the file doc/_build/html/index.html in your browser. The only drawback is that the +browser won’t allow any dynamic content in a file opened from a local drive. The solution to this +is to run melos doc-serve.

    +

    If you ever run the melos doc-clean command, the server will need to be restarted, because the +clean command deletes the entire html directory.

    +
    +

    Note

    +

    Avoid having spaces in the paths to the docs since that will keep you from +building the project due to +this bug.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/development/style_guide.html b/docs/1.18.0/development/style_guide.html new file mode 100644 index 000000000..451243dd8 --- /dev/null +++ b/docs/1.18.0/development/style_guide.html @@ -0,0 +1,583 @@ + + + + + + + Flame Style Guide — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Flame Style Guide

    +

    This is a general style guide for writing code within Flame and adjacent projects. We strive to +maintain the code clean and readable – both for the benefit of the users who will need to study +this code in order to understand how a particular feature works or debug something that is breaking, +and for the benefit of the current and future maintainers.

    +

    This guide extends upon the official Dart’s style guide. Please make sure to read +that document first, as it is sure to improve your skill in Dart programming.

    +
    +

    Code Formatting

    +

    Most of the code formatting rules are enforced automatically via the linter. Run the following +commands to ensure the code is conformant and to fix any easy formatting problems:

    +
    flutter analyze
    +dart format .
    +
    +
    +
    +
    +

    Code Structure

    +
    +

    Imports

    +
      +
    • If you’re using an external symbol that’s defined in multiple libraries, prefer importing the +smallest of them. For example, use package:meta/meta.dart to import annotations like +@protected, or dart:ui to import Canvas.

    • +
    • Never import package:flutter/cupertino.dart or package:flutter/material.dart – prefer +a much smaller library package:flutter/widgets.dart if you’re working with widgets.

    • +
    +
    +
    +

    Exports

    +
      +
    • Strongly prefer to have only one public class per file, and name the file after that class. +Having several private classes within the file is perfectly reasonable.

    • +
    • A possible exception to this rule is if the “main” class requires some small “helper” classes +that need to be public. Or if the file hosts multiple very small related classes.

    • +
    • The “main” class in a file should be located at the start of the file (right after the imports +section), so that it can be seen immediately upon opening the file. All other definitions, +including typedefs, helper classes and functions, should be moved below the main class.

    • +
    • If multiple public symbols are defined in a file, then they must be exported explicitly using +the export ... show ... statement. For example:

      +
      export 'src/effects/provider_interfaces.dart'
      +  show
      +    AnchorProvider,
      +    AngleProvider,
      +    PositionProvider,
      +    ScaleProvider,
      +    SizeProvider;
      +
      +
      +
    • +
    +
    +
    +

    Assertions

    +

    Use asserts to detect contract violations, or pre-condition/post-condition failures. Sometimes, +however, using exceptions would be more appropriate. The following rules of thumb apply:

    +
      +
    • Use an assert with a clear error message to check for a condition that is in developers’ control. +For example, when creating a component that takes an opacity level as an input, you should check +whether the value is in the range from 0 to 1. Consider also including the value itself into the +error message, to make it easier for the developer to debug the error:

      +
      assert(0 <= opacity && opacity <= 1, 'The opacity value must be from 0 to 1: $opacity');
      +
      +
      +

      Always use asserts as early as possible to detect possible violations. For example, check the +validity of opacity in the constructor/setter, instead of in the render function.

      +

      When adding such an assert, also include a test that checks that the assert triggers. This test +would verify that the component does not accept invalid input, and that the error message is what +you expect it to be.

      +
    • +
    • Use an assert without an error message to check for a condition that cannot be triggered by the +developer through any means known to you. If such an assert does trigger, it would indicate a bug +in the Flame framework.

      +

      Such asserts serve as “mini-tests” directly in the code, and protect against future refactorings +that could create an erroneous internal state. It should not be possible to write a test that +would deliberately trigger such an assert.

      +
    • +
    • Use an explicit if-check with an exception to test for a condition that may be outside of the +developer’s control (i.e. it may depend on the environment or on user’s input). When deciding +whether to use an assert or exception, consider the following question: is it possible for the +error condition to occur in production even after the developer has done extensive testing on +their side?

    • +
    +
    +
    +

    Class structure

    +
      +
    • Consider putting all class constructors at the top of the class. This makes it much easier to see +how the class ought to be used.

    • +
    • Try to make as much of your class’ API private as possible, do not expose members “just in case”. +This makes it much easier to modify/refactor the class later without it being a breaking change.

      +

      Remember to document all your public members! Documenting things is harder than it looks, and one +way to avoid the burden of documentation is to make as many variables private as possible.

      +
    • +
    • If a class exposes a List<X> or Vector2 property – it is NOT an invitation to modify +them at will! Consider such properties as read-only, unless the documentation explicitly says that +they are allowed to be modified.

    • +
    • When a class becomes sufficiently big, consider adding regions inside it, which help with code +navigation and collapsing (note the lack of space after //):

      +
      //#region Region description
      +...
      +//#endregion
      +
      +
      +
    • +
    • If a class has a private member that needs to be exposed via a getter/setter, prefer the following +code structure:

      +
      class MyClass {
      +  MyClass();
      +
      +  ...
      +  int _variable;
      +  ...
      +
      +  /// Docs for both the getter and the setter.
      +  int get variable => _variable;
      +  set variable(int value) {
      +    assert(value >= 0, 'variable must be non-negative: $value');
      +    _variable = value;
      +  }
      +}
      +
      +
      +

      This would gather all private variables in a single block near the top of the class, allowing one +to quickly see what data the class has.

      +
    • +
    +
    +
    +
    +

    Documentation

    +
      +
    • Use dartdocs /// to explain the meaning/purpose of a class, method, or a variable.

    • +
    • Use regular comments // to explain implementation details of a particular code fragment. That +is, these comments explain HOW something works.

    • +
    • Use markdown documentation in doc/ folder to give the high-level overview of the functionality, +and especially how it fits into the overall Flame framework.

    • +
    +
    +

    Dartdocs

    +
      +
    • Check the Flutter Documentation Guide – it contains lots of great advice on writing good +documentation.

      +
        +
      • However, disregard the advice about writing in a passive voice.

      • +
      +
    • +
    • Class documentation should ideally start with the class name itself, and follow a pattern such as:

      +
      /// [MyClass] is ...
      +/// [MyClass] serves as ...
      +/// [MyClass] does the following ...
      +
      +
      +

      The reason for such convention is that often the documentation for a class becomes sufficiently +long, and it may not be immediately apparent when looking at the top of the doc what exactly is +being documented there.

      +
    • +
    • Method documentation should start with a verb in the present simple tense, with the method name +as an implicit subject. Add a paragraph break after the first sentence. Try to think about what +could be unclear to the users of the method; and mention any pre- and post-conditions. +For example:

      +
      /// Adds a new [child] into the container, and becomes the owner of that
      +/// child.
      +///
      +/// The child will be disposed of when this container is destroyed.
      +/// It is an error to try to add a child that already belongs to another
      +/// container.
      +void addChild(T child) { ... }
      +
      +
      +

      Avoid stating the obvious (or at least only the obvious).

      +
    • +
    • Constructor documentation may follow either the style of a method (i.e. “Creates …”, +“Constructs …”), or of the class but omitting the name of the class (i.e. “Rectangular-shaped +component”). Constructor documentation may be omitted if (1) it’s the main constructor of the +class, and (2) all the parameters are obvious and coincide with the public members of the class.

      +

      Do not use macros to copy the class documentation into the constructor’s dartdoc. Generally, +the class documentation answers the question “what the class is”, whereas the constructor docs +answer “how it will be constructed”.

      +
    • +
    +
    +
    +

    Main docs

    +

    This refers to the docs on the main Flame Documentation website, the one you’re reading right now. +The main documentation site serves as a place where people go to learn about various functionality +available in Flame. If you’re adding a new class, then it must be documented both at the dartdocs +level, and on the main docs site. The latter serves the purposes of discoverability of your class. +Without the docs site, your class might never be used (or at least used less than it could have +been), because the developers would simply not know about it.

    +

    When adding the documentation to the main docs site, consider also including an example directly +into the docs. This will make readers more excited about trying this new functionality.

    +

    Check the Documentation manual about how to work with the docs site.

    +

    The following style rules generally apply when writing documentation:

    +
      +
    • Maximum line length of 100 characters;

    • +
    • Prefer to define external links at the bottom of the document, so as to make reading the plain +text of the document easier;

    • +
    • Separate headers from the preceding content with 2 blank lines – this makes it easier to see the +sections within the plain text.

    • +
    • Lists should start at the beginning of the line and sublists should be indented with 2 spaces.

    • +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/development/testing_guide.html b/docs/1.18.0/development/testing_guide.html new file mode 100644 index 000000000..3e892695c --- /dev/null +++ b/docs/1.18.0/development/testing_guide.html @@ -0,0 +1,528 @@ + + + + + + + Writing tests — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Writing tests

    +
      +
    • All new functionality must be tested, if at all possible. When fixing a bug, tests must be added +to ensure that this bug would not reappear in the future.

    • +
    • Run melos run coverage to execute all tests in the “coverage” mode. The results will be saved +in the coverage/index.html file, which can be opened in a browser. Try to achieve 100% coverage +for any new functionality added.

    • +
    • Every source file should have a corresponding test file, with the _test suffix. For example, +if you’re making a SpookyEffect and the source file is src/effects/spooky_effect.dart, then +the test file should be test/effects/spooky_effect_test.dart mirroring the source directory.

    • +
    • The test file should contain a main() function with a single group() whose name matches the +name of the class being tested. If the source file contains multiple public classes, then each of +them should have its own group. For example:

      +
      void main() {
      +  group('SpookyEffect', () {
      +    // tests here
      +  });
      +}
      +
      +
      +
    • +
    • For a larger class, multiple groups can be created inside the top-level group, allowing to +navigate the test suite easier. The names of the nested groups should be capitalized.

    • +
    • The names of the individual tests should normally start with a lowercase.

    • +
    • Often, you would need to define multiple helper classes to run the tests. Such classes should be +private (start with an underscore), and placed at the end of the file. The reason for this is that +whenever some test breaks, the first thing one needs to do is to go into the test file and run all +the tests. Having the main() function at the top of the file makes this process much easier.

    • +
    +
    +

    Types of tests

    +
    +

    Simple tests

    +
    test('the name of the test', () {
    +  expect(...);
    +});
    +
    +
    +

    This is the simplest kind of test available, and also the fastest. Use these tests for checking +some classes/methods that can function in isolation from the rest of the Flame framework.

    +
    +
    +

    FlameGame tests

    +

    It is very common to want to have a FlameGame instance inside a test, so that you can add some +components to it and verify various behaviors. The following approach is recommended:

    +
    testWithFlameGame('the name of the test', (game) async {
    +  game.add(...);
    +  await game.ready();
    +
    +  expect(...);
    +});
    +
    +
    +

    Here the game instance that is passed to the test body is a fully initialized game that behaves +as if it was mounted to a GameWidget. The game.ready() method waits until all the scheduled +components are loaded and mounted to the component tree.

    +

    The time within the game can be advanced with game.update(dt).

    +

    If you need to have a custom game inside this test (say, a game with some mixin), then use

    +
    testWithGame<_MyGame>(
    +  'the name of the test',
    +  _MyGame.new,
    +  (game) async {
    +    // test body...
    +  },
    +);
    +
    +
    +
    +
    +

    Widget tests

    +

    Sometimes having a “naked” FlameGame is insufficient, and you want to have access to the Flutter +infrastructure as well. That is, to have a game mounted into a real GameWidget embedded into an +actual Flutter framework. In such cases, use

    +
    testWidgets('test name', (tester) async {
    +  final game = _MyGame();
    +  await tester.pumpWidget(GameWidget(game: game));
    +  await tester.pump();
    +  await tester.pump();
    +
    +  // At this point the game is fully initialized, and you can run your checks
    +  // against it.
    +  expect(...);
    +
    +  // Equivalent to game.update(0)
    +  await tester.pump();
    +
    +  // Advances in-game time by 20 milliseconds
    +  await tester.pump(const Duration(milliseconds: 20));
    +});
    +
    +
    +

    There are some additional methods available on the tester controller, for example in order to +simulate taps, or drags, or key presses.

    +
    +
    +

    Golden tests

    +

    These tests verify that things render as intended. The process of creating a golden test is +simple:

    +
      +
    1. Write the test, using the following template:

      +
      testGolden(
      +  'the name of the test',
      +  (game) async {
      +     // Set up the game by adding the necessary components
      +     // You can add `expect()` checks here too, if you want to
      +  },
      +  size: Vector2(300, 200),
      +  goldenFile: '.../_goldens/my_test_file.png',
      +);
      +
      +
      +

      Here the size parameter determines the size of the game canvas and of the output image. The +goldenFile parameter is the name of the file where you want to store the “golden” results. This +should be a relative path to the test/_goldens directory, starting from your test file.

      +
    2. +
    3. Run

      +
      flutter test --update-goldens
      +
      +
      +

      this would create the golden file for the first time. Open the file to verify that it renders +exactly as you intended. If not, then delete the file and go back to step 1.

      +
    4. +
    5. Subsequent runs of flutter test will check whether the output of the golden test matches the +saved golden file. If not, Flutter will save the image-diff files into the failures/ directory +where your test is located.

    6. +
    +
    +

    Note

    +

    Avoid using text in your golden tests – it does not render reliably across +different platforms, due to font discrepancies and differences in +anti-aliasing algorithms.

    +
    +
    +
    +

    Random tests

    +

    These are the tests that use a random number generator in order to construct a randomized input and +then check its correctness. Use as follows:

    +
    testRandom('test name', (Random random) {
    +  // Use [random] to generate random input
    +});
    +
    +
    +

    You can add repeatCount: 1000 parameter to run this test the specified number of times, each one +with a different seed. It is useful to run a high repeatCount when developing the test, to ensure +that it doesn’t break. However, when submitting the test to the main repository, avoid repeatCounts +higher than 10.

    +

    If the test breaks at some particular seed, then that seed will be shown in the test output. Add it +as the seed: NNN parameter to your test, and you’ll be able to run it for the same seed as long +as you need until the test is fixed. Do not leave the seed: parameter when submitting your code, +as it defeats the purpose of having the test randomized.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/camera_component.html b/docs/1.18.0/flame/camera_component.html new file mode 100644 index 000000000..38fbcaaf6 --- /dev/null +++ b/docs/1.18.0/flame/camera_component.html @@ -0,0 +1,589 @@ + + + + + + + Camera component — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Camera component

    +

    Camera-as-a-component is the new way of structuring a game, an approach that +allows more flexibility in placing the camera, or even having more than one +camera simultaneously.

    +

    In order to understand how this approach works, imagine that your game world is +an entity that exists somewhere independently from your application. Imagine +that your game is merely a window through which you can look into that world. +That you can close that window at any moment, and the game world would still be +there. Or, on the contrary, you can open multiple windows that all look at the +same world (or different worlds) at the same time.

    +

    With this mindset, we can now understand how camera-as-a-component works.

    +

    First, there is the World class, which contains all components that are +inside your game world. The World component can be mounted anywhere, for +example at the root of your game class, like the built-in World is.

    +

    Then, a CameraComponent class that “looks at” the World. The +CameraComponent has a Viewport and a Viewfinder inside, allowing +both the flexibility of rendering the world at any place on the screen, and +also control the viewing location and angle. The CameraComponent also +contains a backdrop component which is statically rendered below the +world.

    +
    +

    World

    +

    This component should be used to host all other components that comprise your +game world. The main property of the World class is that it does not render +through traditional means – instead it is rendered by one or more +CameraComponents to “look at” the world. In the FlameGame class there is +one World called world which is added by default and paired together with +the default CameraComponent called camera.

    +

    A game can have multiple World instances that can be rendered either at the +same time, or at different times. For example, if you have two worlds A and B +and a single camera, then switching that camera’s target from A to B will +instantaneously switch the view to world B without having to unmount A and +then mount B.

    +

    Just like with most Components, children can be added to World by using the +children argument in its constructor, or by using the add or addAll +methods.

    +

    For many games you want to extend the world and create your logic in there, +such a game structure could look like this:

    +
    void main() {
    +  runApp(GameWidget(FlameGame(world: MyWorld())));
    +}
    +
    +class MyWorld extends World {
    +  @override
    +  Future<void> onLoad() async {
    +    // Load all the assets that are needed in this world
    +    // and add components etc.
    +  }
    +}
    +
    +
    +
    +
    +

    CameraComponent

    +

    This is a component through which a World is rendered. It requires a +reference to a World instance during construction; however later the target +world can be replaced with another one. Multiple cameras can observe the same +world at the same time.

    +

    There is a default CameraComponent called camera on the FlameGame class +which is paired together with the default world, so you don’t need to create +or add your own CameraComponent if your game doesn’t need to.

    +

    A CameraComponent has two other components inside: a Viewport and a +Viewfinder. Unlike the World object, the camera owns the viewport and +the viewfinder, which means those components are children of the camera.

    +

    There is also a static property CameraComponent.currentCamera which is not +null only during the rendering stage, and it returns the camera object that +currently performs rendering. This is needed only for certain advanced use +cases where the rendering of a component depends on the camera settings. For +example, some components may decide to skip rendering themselves and their +children if they are outside of the camera’s viewport.

    +

    The FlameGame class has a camera field in its constructor, so you can set +what type of default camera that you want like this for example:

    +
    void main() {
    +  runApp(
    +    GameWidget(
    +      FlameGame(
    +        camera: CameraComponent.withFixedResolution(width: 800, height: 600),
    +      ),
    +    ),
    +  );
    +}
    +
    +
    +
    +

    CameraComponent.withFixedResolution()

    +

    This factory constructor will let you pretend that the user’s device has a fixed resolution of your +choice. For example:

    +
    final camera = CameraComponent.withFixedResolution(
    +  world: myWorldComponent,
    +  width: 800,
    +  height: 600,
    +);
    +
    +
    +

    This will create a camera with a viewport centered in the middle of the screen, taking as much +space as possible while still maintaining the 800:600 aspect ratio, and showing a game world region +of size 800 x 600.

    +

    A “fixed resolution” is very simple to work with, but it will underutilize the user’s available +screen space, unless their device happens to have the same pixel ratio as your chosen dimensions.

    +
    +
    +
    +

    Viewport

    +

    The Viewport is a window through which the World is seen. That window +has a certain size, shape, and position on the screen. There are multiple kinds +of viewports available, and you can always implement your own.

    +

    The Viewport is a component, which means you can add other components to it. +These children components will be affected by the viewport’s position, but not +by its clip mask. Thus, if a viewport is a “window” into the game world, then +its children are things that you can put on top of the window.

    +

    Adding elements to the viewport is a convenient way to implement “HUD” +components.

    +

    The following viewports are available:

    +
      +
    • MaxViewport (default) – this viewport expands to the maximum size allowed +by the game, i.e. it will be equal to the size of the game canvas.

    • +
    • FixedResolutionViewport – keeps the resolution and aspect ratio fixed, with black bars on the +sides if it doesn’t match the aspect ratio.

    • +
    • FixedSizeViewport – a simple rectangular viewport with predefined size.

    • +
    • FixedAspectRatioViewport – a rectangular viewport which expands to fit +into the game canvas, but preserving its aspect ratio.

    • +
    • CircularViewport – a viewport in the shape of a circle, fixed size.

    • +
    +

    If you add children to the Viewport they will appear as static HUDs in front of the world.

    +
    +
    +

    Viewfinder

    +

    This part of the camera is responsible for knowing which location in the +underlying game world we are currently looking at. The Viewfinder also +controls the zoom level, and the rotation angle of the view.

    +

    The anchor property of the viewfinder allows you to designate which point +inside the viewport serves as a “logical center” of the camera. For example, +in side-scrolling action games it is common to have the camera focused on the +main character who is displayed not in the center of the screen but closer to +the lower-left corner. This off-center position would be the “logical center” +of the camera, controlled by the viewfinder’s anchor.

    +

    If you add children to the Viewfinder they will appear will appear in front +of the world, but behind the viewport and with the same transformations as are +applied to the world, so these components are not static.

    +

    You can also add behavioral components as children to the viewfinder, for +example effects or other controllers. If you for example would add a +ScaleEffect you would be able to achieve a smooth zoom in your game.

    +
    +
    +

    Backdrop

    +

    To add static components behind the world you can add them to the backdrop +component, or replace the backdrop component. This is for example useful if +you want to have a static ParallaxComponent beneath a world that you can move +around it.

    +

    Example:

    +
    camera.backdrop.add(MyStaticBackground());
    +
    +
    +

    or

    +
    camera.backdrop = MyStaticBackground();
    +
    +
    +
    +
    +

    Camera controls

    +

    There are several ways to modify camera’s settings at runtime:

    +
      +
    1. Do it manually. You can always override the CameraComponent.update() +method (or the same method on the viewfinder or viewport) and within it +change the viewfinder’s position or zoom as you see fit. This approach may +be viable in some circumstances, but in general it is not recommended.

    2. +
    3. Apply effects and/or behaviors to the camera’s Viewfinder or Viewport. +The effects and behaviors are special kinds of components whose purpose is +to modify over time some property of a component that they attach to.

    4. +
    5. Use special camera functions such as follow(), moveBy() and moveTo(). +Under the hood, this approach uses the same effects/behaviors as in (2).

    6. +
    +

    Camera has several methods for controlling its behavior:

    +
      +
    • Camera.follow() will force the camera to follow the provided target. +Optionally you can limit the maximum speed of movement of the camera, or +allow it to move horizontally/vertically only.

    • +
    • Camera.stop() will undo the effect of the previous call and stop the camera +at its current position.

    • +
    • Camera.moveBy() can be used to move the camera by the specified offset. +If the camera was already following another component or moving towards, +those behaviors would be automatically cancelled.

    • +
    • Camera.moveTo() can be used to move the camera to the designated point on +the world map. If the camera was already following another component or +moving towards another point, those behaviors would be automatically +cancelled.

    • +
    • Camera.setBounds() allows you to add limits to where the camera is allowed to go. These limits +are in the form of a Shape, which is commonly a rectangle, but can also be any other shape.

    • +
    +
    +

    visibleWorldRect

    +

    The camera exposes property visibleWorldRect, which is a rect that describes the world’s region +which is currently visible through the camera. This region can be used in order to avoid rendering +components that are out of view, or updating objects that are far away from the player less +frequently.

    +

    The visibleWorldRect is a cached property, and it updates automatically whenever the camera +moves or the viewport changes its size.

    +
    +
    +

    Check if a component is visible from the camera point of view

    +

    The CameraComponent has a method called canSee which can be used to check +if a component is visible from the camera point of view. +This is useful for example to cull components that are not in view.

    +
    if (!camera.canSee(component)) {
    +   component.removeFromParent(); // Cull the component
    +}
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/collision_detection.html b/docs/1.18.0/flame/collision_detection.html new file mode 100644 index 000000000..77de57b68 --- /dev/null +++ b/docs/1.18.0/flame/collision_detection.html @@ -0,0 +1,1171 @@ + + + + + + + Collision Detection — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Collision Detection

    +

    Collision detection is needed in most games to detect and act upon two components intersecting each +other. For example an arrow hitting an enemy or the player picking up a coin.

    +

    In most collision detection systems you use something called hitboxes to create more precise +bounding boxes of your components. In Flame the hitboxes are areas of the component that can react +to collisions (and make gesture input) more accurate.

    +

    The collision detection system supports three different types of shapes that you can build hitboxes +from, these shapes are Polygon, Rectangle and Circle. Multiple hitbox can be added +to a component to form the area which can be used to either detect collisions +or whether it contains a point or not, +the latter is very useful for accurate gesture detection. The collision detection does not handle +what should happen when two hitboxes collide, so it is up to the user to implement what will happen +when for example two PositionComponents have intersecting hitboxes.

    +

    Do note that the built-in collision detection system does not take collisions between two hitboxes +that overshoot each other into account, this could happen when they either move very fast or +update being called with a large delta time (for example if your app is not in the foreground). +This behavior is called tunneling, if you want to read more about it.

    +

    Also note that the collision detection system has a limitation that makes it not work properly if +you have certain types of combinations of flips and scales of the ancestors of the hitboxes.

    +
    +

    Mixins

    +
    +

    HasCollisionDetection

    +

    If you want to use collision detection in your game you have to add the HasCollisionDetection +mixin to your game so that it can keep track of the components that can collide.

    +

    Example:

    +
    class MyGame extends FlameGame with HasCollisionDetection {
    +  // ...
    +}
    +
    +
    +

    Now when you add ShapeHitboxs to components that are then added to the game, they will +automatically be checked for collisions.

    +

    You can also add HasCollisionDetection directly to another Component instead +of the FlameGame, +for example to the World that is used for the CameraComponent. +If that is done, hitboxes that are added in that component’s tree will only be compared to other +hitboxes in that subtree, which makes it possible to have several worlds with collision detection +within one FlameGame.

    +

    Example:

    +
    class CollisionDetectionWorld extends World with HasCollisionDetection {}
    +
    +
    +
    +

    Note

    +

    Hitboxes will only be connected to one collision detection system and that is +the closest parent that has the HasCollisionDetection mixin.

    +
    +
    +
    +

    CollisionCallbacks

    +

    To react to a collision you should add the CollisionCallbacks mixin to your component. +Example:

    +
    +
    +
    +collision_detection.dart
    +
     1import 'package:doc_flame_examples/ember.dart';
    + 2import 'package:flame/collisions.dart';
    + 3import 'package:flame/components.dart';
    + 4import 'package:flame/effects.dart';
    + 5import 'package:flame/game.dart';
    + 6import 'package:flutter/material.dart' hide Image;
    + 7
    + 8class CollisionDetectionGame extends FlameGame with HasCollisionDetection {
    + 9  @override
    +10  Future<void> onLoad() async {
    +11    final emberPlayer = EmberPlayer(
    +12      position: Vector2(10, (size.y / 2) - 20),
    +13      size: Vector2.all(40),
    +14      onTap: (emberPlayer) {
    +15        emberPlayer.add(
    +16          MoveEffect.to(
    +17            Vector2(size.x - 40, (size.y / 2) - 20),
    +18            EffectController(
    +19              duration: 5,
    +20              reverseDuration: 5,
    +21              repeatCount: 1,
    +22              curve: Curves.easeOut,
    +23            ),
    +24          ),
    +25        );
    +26      },
    +27    );
    +28    add(emberPlayer);
    +29    add(RectangleCollidable(canvasSize / 2));
    +30  }
    +31}
    +32
    +33class RectangleCollidable extends PositionComponent with CollisionCallbacks {
    +34  final _collisionStartColor = Colors.amber;
    +35  final _defaultColor = Colors.cyan;
    +36  late ShapeHitbox hitbox;
    +37
    +38  RectangleCollidable(Vector2 position)
    +39      : super(
    +40          position: position,
    +41          size: Vector2.all(50),
    +42          anchor: Anchor.center,
    +43        );
    +44
    +45  @override
    +46  Future<void> onLoad() async {
    +47    final defaultPaint = Paint()
    +48      ..color = _defaultColor
    +49      ..style = PaintingStyle.stroke;
    +50    hitbox = RectangleHitbox()
    +51      ..paint = defaultPaint
    +52      ..renderShape = true;
    +53    add(hitbox);
    +54  }
    +55
    +56  @override
    +57  void onCollisionStart(
    +58    Set<Vector2> intersectionPoints,
    +59    PositionComponent other,
    +60  ) {
    +61    super.onCollisionStart(intersectionPoints, other);
    +62    hitbox.paint.color = _collisionStartColor;
    +63  }
    +64
    +65  @override
    +66  void onCollisionEnd(PositionComponent other) {
    +67    super.onCollisionEnd(other);
    +68    if (!isColliding) {
    +69      hitbox.paint.color = _defaultColor;
    +70    }
    +71  }
    +72}
    +
    +
    +
    +
    +
    class MyCollidable extends PositionComponent with CollisionCallbacks {
    +  @override
    +  void onCollision(Set<Vector2> points, PositionComponent other) {
    +    if (other is ScreenHitbox) {
    +      //...
    +    } else if (other is YourOtherComponent) {
    +      //...
    +    }
    +  }
    +
    +  @override
    +  void onCollisionEnd(PositionComponent other) {
    +    if (other is ScreenHitbox) {
    +      //...
    +    } else if (other is YourOtherComponent) {
    +      //...
    +    }
    +  }
    +}
    +
    +
    +

    In this example we use Dart’s is keyword to check what kind of component we collided with. +The set of points is where the edges of the hitboxes intersect.

    +

    Note that the onCollision method will be called on both PositionComponents if they have both +implemented the onCollision method, and also on both hitboxes. The same goes for the +onCollisionStart and onCollisionEnd methods, which are called when two components and hitboxes +starts or stops colliding with each other.

    +

    When a PositionComponent (and hitbox) starts to collide with another PositionComponent +both onCollisionStart and onCollision are called, so if you don’t need to do something specific +when a collision starts you only need to override onCollision, and vice versa.

    +

    If you want to check collisions with the screen edges, as we do in the example above, you can use +the predefined ScreenHitbox class.

    +

    By default all hitboxes are hollow, this means that one hitbox can be fully enclosed by another +hitbox without triggering a collision. If you want to set your hitboxes to be solid you can set +isSolid = true. A hollow hitbox inside of a solid hitbox will trigger a collision, but not the +other way around. If there are no intersections with the edges on a solid hitbox the center +position is instead returned.

    +
    +
    +

    Collision order

    +

    If a Hitbox collides with more than one other Hitbox within a given time step, then +the onCollision callbacks will be called in an essentially random order. In some cases this can +be a problem, such as in a bouncing ball game where the trajectory of the ball can differ depending +on which other object was hit first. To help resolve this the collisionsCompletedNotifier +listener can be used - this triggers at the end of the collision detection process.

    +

    An example of how this might be used is to add a local variable in your PositionComponent to save +the other components with which it’s colliding: +List<PositionComponent> collisionComponents = [];. The onCollision callback is then used to +save all the other PositionComponents to this list:

    +
    @override
    +void onCollision(Set<Vector2> intersectionPoints, PositionComponent other) {
    +  collisionComponents.add(other);
    +  super.onCollision(intersectionPoints, other);
    +}
    +
    +
    +

    Finally, one adds a listener to the onLoad method of the PositionComponent to call a function +which will resolve how the collisions should be dealt with:

    +
    (game as HasCollisionDetection)
    +    .collisionDetection
    +    .collisionsCompletedNotifier
    +    .addListener(() {
    +  resolveCollisions();
    +});
    +
    +
    +

    The list collisionComponents would need to be cleared in each call to update.

    +
    +
    +
    +

    ShapeHitbox

    +

    The ShapeHitboxs are normal components, so you add them to the component that you want to add +hitboxes to just like any other component:

    +
    class MyComponent extends PositionComponent {
    +  @override
    +  void onLoad() {
    +    add(RectangleHitbox());
    +  }
    +}
    +
    +
    +

    If you don’t add any arguments to the hitbox, like above, the hitbox will try to fill its parent as +much as possible. Except for having the hitboxes trying to fill their parents, +there are two ways to +initiate hitboxes and it is with the normal constructor where you define the hitbox by itself, with +a size and a position etc. The other way is to use the relative constructor which defines the +hitbox in relation to the size of its intended parent.

    +

    In some specific cases you might want to handle collisions only between hitboxes, without +propagating onCollision* events to the hitbox’s parent component. For example, a vehicle could +have a body hitbox to control collisions and side hitboxes to check the possibility to turn left +or right. +So, colliding with a body hitbox means colliding with the component itself, whereas colliding with +a side hitbox does not mean a real collision and should not be propagated to hitbox’s parent. +For this case you can set triggersParentCollision variable to false:

    +
    class MyComponent extends PositionComponent {
    +
    +  late final MySpecialHitbox utilityHitbox;
    +
    +  @override
    +  void onLoad() {
    +    utilityHitbox = MySpecialHitbox();
    +    add(utilityHitbox);
    +  }
    +
    +  void update(double dt) {
    +    if (utilityHitbox.isColliding) {
    +      // do some specific things if hitbox is colliding
    +    }
    +  }
    +// component's onCollision* functions, ignoring MySpecialHitbox collisions.
    +}
    +
    +class MySpecialHitbox extends RectangleHitbox {
    +  MySpecialHitbox() {
    +    triggersParentCollision = false;
    +  }
    +
    +// hitbox specific onCollision* functions
    +
    +}
    +
    +
    +

    You can read more about how the different shapes are defined in the +ShapeComponents section.

    +

    Remember that you can add as many ShapeHitboxs as you want to your PositionComponent to make up +more complex areas. For example a snowman with a hat could be represented by three CircleHitboxs +and two RectangleHitboxs as its hat.

    +

    A hitbox can be used either for collision detection or for making gesture detection more accurate +on top of components, see more regarding the latter in the section about the +GestureHitboxes mixin.

    +
    +

    CollisionType

    +

    The hitboxes have a field called collisionType which defines when a hitbox should collide with +another. Usually you want to set as many hitboxes as possible to CollisionType.passive to make +the collision detection more performant. By default the CollisionType is active.

    +

    The CollisionType enum contains the following values:

    +
      +
    • active collides with other Hitboxes of type active or passive

    • +
    • passive collides with other Hitboxes of type active

    • +
    • inactive will not collide with any other Hitboxes

    • +
    +

    So if you have hitboxes that you don’t need to check collisions against each other you can mark +them as passive by setting collisionType: CollisionType.passive in the constructor, +this could for example be ground components or maybe your enemies don’t need +to check collisions between each other, then they could be marked as passive too.

    +

    Imagine a game where there are a lot of bullets, that can’t collide with each other, flying towards +the player, then the player would be set to CollisionType.active and the bullets would be set to +CollisionType.passive.

    +

    Then we have the inactive type which simply doesn’t get checked at all +in the collision detection. +This could be used for example if you have components outside of the screen that you don’t care +about at the moment but that might later come back in to view so they are not completely removed +from the game.

    +

    These are just examples of how you could use these types, there will be a lot more use cases for +them so don’t doubt to use them even if your use case isn’t listed here.

    +
    +
    +

    PolygonHitbox

    +

    It should be noted that if you want to use collision detection or containsPoint on the Polygon, +the polygon needs to be convex. So always use convex polygons or you will most likely run into +problems if you don’t really know what you are doing. +It should also be noted that you should always define the vertices in your polygon +in a counter-clockwise order.

    +

    The other hitbox shapes don’t have any mandatory constructor, that is because they can have a +default calculated from the size of the collidable that they are attached to, but since a +polygon can be made in an infinite number of ways inside of a bounding box you have to add the +definition in the constructor for this shape.

    +

    The PolygonHitbox has the same constructors as the PolygonComponent, see that +section for documentation regarding those.

    +
    +
    +

    RectangleHitbox

    +

    The RectangleHitbox has the same constructors as the RectangleComponent, see +that section for documentation regarding those.

    +
    +
    +

    CircleHitbox

    +

    The CircleHitbox has the same constructors as the CircleComponent, see that +section for documentation regarding those.

    +
    +
    +
    +

    ScreenHitbox

    +

    ScreenHitbox is a component which represents the edges of your viewport/screen. If you add a +ScreenHitbox to your game your other components with hitboxes will be notified when they +collide with the edges. It doesn’t take any arguments, it only depends on the size of the game +that it is added to. To add it you can just do add(ScreenHitbox()) in your game, if you don’t +want the ScreenHitbox itself to be notified when something collides with it. Since +ScreenHitbox has the CollisionCallbacks mixin you can add your own onCollisionCallback, +onStartCollisionCallback and onEndCollisionCallback functions to that object if needed.

    +
    +
    +

    CompositeHitbox

    +

    In the CompositeHitbox you can add multiple hitboxes so that +they emulate being one joined hitbox.

    +

    If you want to form a hat for example you might want +to use two RectangleHitboxs to follow that +hat’s edges properly, then you can add those hitboxes to an instance of this class and react to +collisions to the whole hat, instead of for just each hitbox separately.

    +
    +
    +

    Broad phase

    +

    If your game field isn’t huge and does not have a lot of collidable components - you don’t have to +worry about the broad phase system that is used, so if the standard implementation is performant +enough for you, you probably don’t have to read this section.

    +

    A broad phase is the first step of collision detection where potential collisions are calculated. +Calculating these potential collisions is faster than to checking the intersections exactly, +and it removes the need to check all hitboxes against each other and +therefore avoiding O(n²).

    +

    The broad phase produces a set of potential collisions (a set of +CollisionProspects). This set is then used to check the exact intersections between +hitboxes (sometimes called “narrow phase”).

    +

    By default, Flame’s collision detection is using a sweep and prune broadphase step. If your game +requires another type of broadphase you can write your own broadphase by extending Broadphase and +manually setting the collision detection system that should be used.

    +

    For example, if you have implemented a broadphase built on a magic algorithm +instead of the standard sweep and prune, then you would do the following:

    +
    class MyGame extends FlameGame with HasCollisionDetection {
    +  MyGame() : super() {
    +    collisionDetection =
    +        StandardCollisionDetection(broadphase: MagicAlgorithmBroadphase());
    +  }
    +}
    +
    +
    +
    +
    +

    Quad Tree broad phase

    +

    If your game field is large and the game contains a lot of collidable +components (more than a hundred), standard sweep and prune can +become inefficient. If it does, you can try to use the quad tree broad phase.

    +

    To do this, add the HasQuadTreeCollisionDetection mixin to your game instead of +HasCollisionDetection and call the initializeCollisionDetection function on game load:

    +
    class MyGame extends FlameGame with HasQuadTreeCollisionDetection {
    +  @override
    +  void onLoad() {
    +    initializeCollisionDetection(
    +      mapDimensions: const Rect.fromLTWH(0, 0, mapWidth, mapHeight),
    +      minimumDistance: 10,
    +    );
    +  }
    +}
    +
    +
    +

    When calling initializeCollisionDetection you should pass it the correct map dimensions, to make +the quad tree algorithm to work properly. There are also additional parameters to make the system +more efficient:

    +
      +
    • minimumDistance: minimum distance between objects to consider them as possibly colliding. +If null - the check is disabled, it is default behavior

    • +
    • maxObjects: maximum objects count in one quadrant. Default to 25.

    • +
    • maxDepth: maximum nesting levels inside quadrant. Default to 10

    • +
    +

    If you use the quad tree system, you can make it even more efficient by implementing the +onComponentTypeCheck function of the CollisionCallbacks mixin in your components. +It is useful if you need to prevent collisions of items of different types. +The result of the calculation is cached so +you should not check any dynamic parameters here, the function is intended to be used as a pure +type checker:

    +
    class Bullet extends PositionComponent with CollisionCallbacks {
    +
    +  @override
    +  bool onComponentTypeCheck(PositionComponent other) {
    +    if (other is Player || other is Water) {
    +      // do NOT collide with Player or Water
    +      return false;
    +    }
    +    // Just return true if you're not interested in the parent's type check result.
    +    // Or call super and you will be able to override the result with the parent's
    +    // result.
    +    return super.onComponentTypeCheck(other);
    +  }
    +
    +  @override
    +  void onCollisionStart(
    +    Set<Vector2> intersectionPoints,
    +    PositionComponent other,
    +  ) {
    +    // Removes the component when it comes in contact with a Brick.
    +    // Neither Player nor Water would be passed to this function
    +    // because these classes are filtered out by [onComponentTypeCheck]
    +    // in an earlier stage.
    +    if (other is Brick) {
    +      removeFromParent();
    +    }
    +    super.onCollisionStart(intersectionPoints, other);
    +  }
    +}
    +
    +
    +

    After intensive gameplay a map could become over-clusterized with a lot of empty quadrants. +Run QuadTree.optimize() to perform a cleanup of empty quadrants:

    +
    class QuadTreeExample extends FlameGame
    +        with HasQuadTreeCollisionDetection {
    +
    +  /// A function called when intensive gameplay session is over
    +  /// It also might be scheduled, but no need to run it on every update.
    +  /// Use right interval depending on your game circumstances
    +  onGameIdle() {
    +    (collisionDetection as QuadTreeCollisionDetection)
    +            .quadBroadphase
    +            .tree
    +            .optimize();
    +  }
    +}
    +
    +
    +
    +

    Note

    +

    Always experiment with different collision detection approaches +and check how they perform on your game. +It is not unheard of that QuadTreeBroadphase is significantly +slower than the default. +Don’t assume that the more sophisticated approach is always faster.

    +
    +
    +
    +

    Ray casting and Ray tracing

    +

    Ray casting and ray tracing are methods for sending out rays from a point in your game and being +able to see what these rays collide with and how they reflect after hitting something.

    +

    For all of the following methods, if there are any hitboxes that you wish to ignore, +you can add the ignoreHitboxes argument which is a list of the hitboxes +that you wish to disregard for the call. +This can be quite useful for example if you are casting rays from within a hitbox, +which could be on your player or NPC; +or if you don’t want a ray to bounce off a ScreenHitbox.

    +
    +

    Ray casting

    +

    Ray casting is the operation of casting out one or more rays from a point and see if they hit +anything, in Flame’s case, hitboxes.

    +

    We provide two methods for doing so, raycast and raycastAll. The first one just casts out +a single ray and gets back a result with information about what and where the ray hit, and some +extra information like the distance, the normal and the reflection ray. +The second one, raycastAll, +works similarly but sends out multiple rays uniformly around the origin, or within an angle +centered at the origin.

    +

    By default, raycast and raycastAll scan for the nearest hit irrespective of +how far it lies from the ray origin. +But in some use cases, it might be interesting to find hits only within a certain +range. For such cases, an optional maxDistance can be provided.

    +

    To use the ray casting functionality you have to have the HasCollisionDetection mixin on your +game. After you have added that you can call collisionDetection.raycast(...) on your game class.

    +

    Example:

    +
    +
    +
    +ray_cast.dart
    +
     1import 'package:flame/collisions.dart';
    + 2import 'package:flame/components.dart';
    + 3import 'package:flame/game.dart';
    + 4import 'package:flame/geometry.dart';
    + 5import 'package:flame/palette.dart';
    + 6import 'package:flutter/material.dart';
    + 7
    + 8class RayCastExample extends FlameGame with HasCollisionDetection {
    + 9  final origin = Vector2(20, 20);
    +10
    +11  final direction = Vector2(1, 0);
    +12
    +13  final velocity = 60;
    +14  double get resetPosition => -canvasSize.y;
    +15
    +16  Paint paint = Paint()..color = Colors.red.withOpacity(0.6);
    +17
    +18  RaycastResult<ShapeHitbox>? result;
    +19
    +20  @override
    +21  Future<void> onLoad() async {
    +22    final paint = BasicPalette.gray.paint()
    +23      ..style = PaintingStyle.stroke
    +24      ..strokeWidth = 2.0;
    +25
    +26    add(ScreenHitbox());
    +27
    +28    add(
    +29      CircleComponent(
    +30        position: canvasSize / 2,
    +31        radius: 30,
    +32        paint: paint,
    +33        children: [CircleHitbox()],
    +34      ),
    +35    );
    +36  }
    +37
    +38  @override
    +39  void update(double dt) {
    +40    super.update(dt);
    +41    final ray = Ray2(
    +42      origin: origin,
    +43      direction: direction,
    +44    );
    +45    result = collisionDetection.raycast(ray);
    +46
    +47    origin.y += velocity * dt;
    +48
    +49    if (origin.y > canvasSize.y) {
    +50      origin.y += resetPosition;
    +51    }
    +52  }
    +53
    +54  @override
    +55  void render(Canvas canvas) {
    +56    super.render(canvas);
    +57
    +58    if (result != null && result!.isActive) {
    +59      final originOffset = origin.toOffset();
    +60      final intersectionPoint = result!.intersectionPoint!.toOffset();
    +61      canvas.drawLine(
    +62        originOffset,
    +63        intersectionPoint,
    +64        paint,
    +65      );
    +66
    +67      canvas.drawCircle(originOffset, 10, paint);
    +68    }
    +69  }
    +70}
    +
    +
    +
    +
    +
    class MyGame extends FlameGame with HasCollisionDetection {
    +  @override
    +  void update(double dt) {
    +    super.update(dt);
    +    final ray = Ray2(
    +        origin: Vector2(0, 100),
    +        direction: Vector2(1, 0),
    +    );
    +    final result = collisionDetection.raycast(ray);
    +  }
    +}
    +
    +
    +

    In this example one can see that the Ray2 class is being used, this class defines a ray from an +origin position and a direction (which are both defined by Vector2s). This particular ray starts +from 0, 100 and shoots a ray straight to the right.

    +

    The result from this operation will either be null if the ray didn’t hit anything, or a +RaycastResult which contains:

    +
      +
    • Which hitbox the ray hit

    • +
    • The intersection point of the collision

    • +
    • The reflection ray, i.e. how the ray would reflect on the hitbox that it hix

    • +
    • The normal of the collision, i.e. a vector perpendicular to the face of the hitbox that it hits

    • +
    +

    If you are concerned about performance you can pre create a RaycastResult object that you send in +to the method with the out argument, this will make it possible for the method to reuse this +object instead of creating a new one for each iteration. This can be good if you do a lot of +ray casting in your update methods.

    +
    +

    raycastAll

    +

    Sometimes you want to send out rays in all, or a limited range, of directions from an origin. This +can have a lot of applications, for example you could calculate the field of view of a player or +enemy, or it can also be used to create light sources.

    +

    Example:

    +
    class MyGame extends FlameGame with HasCollisionDetection {
    +  @override
    +  void update(double dt) {
    +    super.update(dt);
    +    final origin = Vector2(200, 200);
    +    final result = collisionDetection.raycastAll(
    +      origin,
    +      numberOfRays: 100,
    +    );
    +  }
    +}
    +
    +
    +

    In this example we would send out 100 rays from (200, 200) uniformly spread in all directions.

    +

    If you want to limit the directions you can use the startAngle and the sweepAngle arguments. +Where the startAngle (counting from straight up) is where the rays will start and then the rays +will end at startAngle + sweepAngle.

    +

    If you are concerned about performance you can re-use the RaycastResult objects that are created +by the function by sending them in as a list with the out argument.

    +
    +
    +
    +

    Ray tracing

    +

    Ray tracing is similar to ray casting, but instead of just checking what the ray hits you can +continue to trace the ray and see what its reflection ray (the ray bouncing off the hitbox) will +hit and then what that casted reflection ray’s reflection ray will hit and so on, until you decide +that you have traced the ray for long enough. If you imagine how a pool ball would bounce on a pool +table for example, that information could be retrieved with the help of ray tracing.

    +

    Example:

    +
    +
    +
    +ray_trace.dart
    +
     1import 'dart:math';
    + 2
    + 3import 'package:flame/collisions.dart';
    + 4import 'package:flame/components.dart';
    + 5import 'package:flame/events.dart';
    + 6import 'package:flame/game.dart';
    + 7import 'package:flame/geometry.dart';
    + 8import 'package:flame/palette.dart';
    + 9import 'package:flutter/material.dart';
    +10
    +11class RayTraceExample extends FlameGame
    +12    with HasCollisionDetection, TapDetector {
    +13  Paint paint = Paint()..color = Colors.red.withOpacity(0.6);
    +14  bool isClicked = false;
    +15
    +16  Vector2 get origin => canvasSize / 2;
    +17
    +18  RaycastResult<ShapeHitbox>? result;
    +19
    +20  final Ray2 _ray = Ray2.zero();
    +21
    +22  final boxPaint = BasicPalette.gray.paint()
    +23    ..style = PaintingStyle.stroke
    +24    ..strokeWidth = 2.0;
    +25
    +26  final List<RaycastResult<ShapeHitbox>> results = [];
    +27
    +28  @override
    +29  Future<void> onLoad() async {
    +30    add(
    +31      CircleComponent(
    +32        radius: min(size.x, size.y) / 2,
    +33        paint: boxPaint,
    +34        children: [CircleHitbox()],
    +35      ),
    +36    );
    +37  }
    +38
    +39  var _timePassed = 0.0;
    +40
    +41  @override
    +42  void update(double dt) {
    +43    super.update(dt);
    +44    if (isClicked) {
    +45      _timePassed += dt;
    +46    }
    +47
    +48    result = collisionDetection.raycast(_ray);
    +49
    +50    _ray.origin.setFrom(origin);
    +51    _ray.direction
    +52      ..setValues(1, 1)
    +53      ..normalize();
    +54    collisionDetection
    +55        .raytrace(
    +56          _ray,
    +57          maxDepth: min((_timePassed * 8).ceil(), 1000),
    +58          out: results,
    +59        )
    +60        .toList();
    +61  }
    +62
    +63  @override
    +64  void render(Canvas canvas) {
    +65    super.render(canvas);
    +66    var originOffset = origin.toOffset();
    +67    for (final result in results) {
    +68      if (!result.isActive) {
    +69        continue;
    +70      }
    +71      final intersectionPoint = result.intersectionPoint!.toOffset();
    +72      canvas.drawLine(
    +73        originOffset,
    +74        intersectionPoint,
    +75        paint,
    +76      );
    +77      originOffset = intersectionPoint;
    +78    }
    +79  }
    +80
    +81  @override
    +82  void onTap() {
    +83    super.onTap();
    +84    if (!isClicked) {
    +85      isClicked = true;
    +86      return;
    +87    }
    +88    _timePassed = 0;
    +89  }
    +90}
    +
    +
    +
    +
    +
    class MyGame extends FlameGame with HasCollisionDetection {
    +  @override
    +  void update(double dt) {
    +    super.update(dt);
    +    final ray = Ray2(
    +        origin: Vector2(0, 100),
    +        direction: Vector2(1, 1)..normalize()
    +    );
    +    final results = collisionDetection.raytrace(
    +      ray,
    +      maxDepth: 100,
    +    );
    +    for (final result in results) {
    +      if (result.intersectionPoint.distanceTo(ray.origin) > 300) {
    +        break;
    +      }
    +    }
    +  }
    +}
    +
    +
    +

    In the example above we send out a ray from (0, 100) diagonally down to the right +and we say that we want it the bounce on at most 100 hitboxes, +it doesn’t necessarily have to get 100 results since at +some point one of the reflection rays might not hit a hitbox and then the method is done.

    +

    The method is lazy, which means that it will only do the calculations that you ask for, so you have +to loop through the iterable that it returns to get the results, or do toList() to directly +calculate all the results.

    +

    In the for-loop it can be seen how this can be used, in that loop we check whether the current +reflection rays intersection point (where the previous ray hit the hitbox) is further away than 300 +pixels from the origin of the starting ray, and if it is we don’t care about the rest +of the results (and then they don’t have to be calculated either).

    +

    If you are concerned about performance you can re-use the RaycastResult objects that are created +by the function by sending them in as a list with the out argument.

    +
    +
    +
    +

    Comparison to Forge2D

    +

    If you want to have a full-blown physics engine in your game we recommend that you use +Forge2D by adding flame_forge2d as a dependency. +But if you have a simpler use-case and just want to check for collisions of components and improve +the accuracy of gestures, Flame’s built-in collision detection will serve you very well.

    +

    If you have the following needs you should at least consider to use +Forge2D:

    +
      +
    • Interacting realistic forces

    • +
    • Particle systems that can interact with other bodies

    • +
    • Joints between bodies

    • +
    +

    It is a good idea to just use the Flame collision detection system if you on the other hand only +need some of the following things (since it is simpler to not involve Forge2D):

    +
      +
    • The ability to act on some of your components colliding

    • +
    • The ability to act on your components colliding with the screen boundaries

    • +
    • Complex shapes to act as a hitbox for your component so that gestures will be more accurate

    • +
    • Hitboxes that can tell what part of a component that collided with something

    • +
    +
    +
    +

    Examples

    + +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/components.html b/docs/1.18.0/flame/components.html new file mode 100644 index 000000000..53f6b7169 --- /dev/null +++ b/docs/1.18.0/flame/components.html @@ -0,0 +1,1793 @@ + + + + + + + Components — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Components

    +
    + %%{init: { 'theme': 'dark' } }%% +graph TD + %% Config %% + classDef default fill:#282828,stroke:#F6BE00; + + %% Nodes %% + Component(Component) + Misc(" + TimerComponent + ParticleComponent + SpriteBatchComponent + ") + Effects("Effects<br/>(See the effects section)") + Game(Game) + FlameGame(FlameGame) + PositionComponent(PositionComponent) + + Sprites(" + SpriteComponent + SpriteGroupComponent + SpriteAnimationComponent + SpriteAnimationGroupComponent + ParallaxComponent + IsoMetricTileMapComponent + ") + + HudMarginComponent(HudMarginComponent) + HudComponents(" + HudButtonComponent + JoystickComponent + ") + + OtherPositionComponents(" + ButtonComponent + CustomPainterComponent + ShapeComponent + SpriteButtonComponent + TextComponent + TextBoxComponent + NineTileBoxComponent + ") + + %% Flow %% + Component --> Misc + Component --> Effects + Component --> PositionComponent + Component --> FlameGame + + Game --> FlameGame + PositionComponent --> Sprites + PositionComponent --> HudMarginComponent + PositionComponent --> OtherPositionComponents + HudMarginComponent --> HudComponents +

    This diagram might look intimidating, but don’t worry, it is not as complex as it looks.

    +
    +

    Component

    +

    All components inherit from the abstract class Component and all components can have other +Components as children. This is the base of what we call the Flame Component System, or FCS for +short.

    +

    Children can be added either with the add(Component c) method or directly in the constructor.

    +

    Example:

    +
    void main() {
    +  final component1 = Component(children: [Component(), Component()]);
    +  final component2 = Component();
    +  component2.add(Component());
    +  component2.addAll([Component(), Component()]);
    +}
    +
    +
    +

    The Component() here could of course be any subclass of Component.

    +

    Every Component has a few methods that you can optionally implement, which are used by the +FlameGame class.

    +
    +

    Component lifecycle

    +
    + %%{init: { 'theme': 'dark' } }%% + + graph TD + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + x(Runs Each Tick) + y(Runs On Add & Resize):::lightYellow + z(Runs Once):::yellow + +
    + %%{init: { 'theme': 'dark' } }%% + graph LR + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + + A(onLoad):::yellow + B(onGameResize):::lightYellow + C(onMount):::yellow + D(update) + E(render) + F(onRemove):::yellow + + %% Flow %% + + A-->B + B-->C + C-->D + D-->E + E-->D + E-. If removed .->F + F-. If re-parented .->A + +

    The onGameResize method is called whenever the screen is resized, and also when this component +gets added into the component tree, before the onMount.

    +

    The onParentResize method is similar: it is also called when the component is mounted into the +component tree, and also whenever the parent of the current component changes its size.

    +

    The onRemove method can be overridden to run code before the component is removed from the game, +it is only run once even if the component is removed both by using the parents remove method and +the Component remove method.

    +

    The onLoad method can be overridden to run asynchronous initialization code for the component, +like loading an image for example. This method is executed before onGameResize and +onMount. This method is guaranteed to execute only once during the lifetime of the component, so +you can think of it as an “asynchronous constructor”.

    +

    The onMount method runs every time when the component is mounted into a game tree. This means that +you should not initialize late final variables here, since this method might run several times +throughout the component’s lifetime. This method will only run if the parent is already mounted. +If the parent is not mounted yet, then this method will wait in a queue (this will have no effect +on the rest of the game engine).

    +

    The onChildrenChanged method can be overridden if it’s needed to detect changes in a parent’s +children. This method is called whenever a child is added to or removed from a parent (this includes +if a child is changing its parent). Its parameters contain the targeting child and the type of +change it went through (added or removed).

    +

    A component lifecycle state can be checked by a series of getters:

    +
      +
    • isLoaded: Returns a bool with the current loaded state.

    • +
    • loaded: Returns a future that will complete once the component has finished loading.

    • +
    • isMounted: Returns a bool with the current mounted state.

    • +
    • mounted: Returns a future that will complete once the component has finished mounting.

    • +
    • isRemoved: Returns a bool with the current removed state.

    • +
    • removed: Returns a future that will complete once the component has been removed.

    • +
    +
    +
    +

    Priority

    +

    In Flame every Component has the int priority property, which determines +that component’s sorting order within its parent’s children. This is sometimes referred to +as z-index in other languages and frameworks. The higher the priority is set to, the +closer the component will appear on the screen, since it will be rendered on top of any components +with lower priority that were rendered before it.

    +

    If you add two components and set one of their priorities to 1 for example, then that component will +be rendered on top of the other component (if they overlap), because the default priority is 0.

    +

    All components take in priority as a named argument, so if you know the priority that you want +your component at compile time, then you can pass it in to the constructor.

    +

    Example:

    +
    class MyGame extends FlameGame {
    +  @override
    +  void onLoad() {
    +    final myComponent = PositionComponent(priority: 5);
    +    add(myComponent);
    +  }
    +}
    +
    +
    +

    To update the priority of a component you have to set it to a new value, like +component.priority = 2, and it will be updated in the current tick before the rendering stage.

    +

    In the following example we first initialize the component with priority 1, and then when the +user taps the component we change its priority to 2:

    +
    class MyComponent extends PositionComponent with TapCallbacks {
    +
    +  MyComponent() : super(priority: 1);
    +
    +  @override
    +  void onTapDown(TapDownEvent event) {
    +    priority = 2;
    +  }
    +}
    +
    +
    +
    +
    +

    Composability of components

    +

    Sometimes it is useful to wrap other components inside of your component. For example by grouping +visual components through a hierarchy. You can do this by adding child components to any component, +for example PositionComponent.

    +

    When you have child components on a component every time the parent is updated and rendered, all the +children are rendered and updated with the same conditions.

    +

    Example of usage, where visibility of two components are handled by a wrapper:

    +
    class GameOverPanel extends PositionComponent {
    +  bool visible = false;
    +  final Image spriteImage;
    +
    +  GameOverPanel(this.spriteImage);
    +
    +  @override
    +  void onLoad() {
    +    final gameOverText = GameOverText(spriteImage); // GameOverText is a Component
    +    final gameOverButton = GameOverButton(spriteImage); // GameOverRestart is a SpriteComponent
    +
    +    add(gameOverText);
    +    add(gameOverButton);
    +  }
    +
    +  @override
    +  void render(Canvas canvas) {
    +    if (visible) {
    +    } // If not visible none of the children will be rendered
    +  }
    +}
    +
    +
    +

    There are two methods for adding children components to your component. First, +you have methods add(), addAll(), and addToParent(), which can be used +at any time during the game. Traditionally, children will be created and added +from the component’s onLoad() method, but it is also common to add new +children during the course of the game.

    +

    The second method is to use the children: parameter in the component’s +constructor. This approach more closely resembles the standard Flutter API:

    +
    class MyGame extends FlameGame {
    +  @override
    +  void onLoad() {
    +    add(
    +      PositionComponent(
    +        position: Vector2(30, 0),
    +        children: [
    +          HighScoreDisplay(),
    +          HitPointsDisplay(),
    +          FpsComponent(),
    +        ],
    +      ),
    +    );
    +  }
    +}
    +
    +
    +

    The two approaches can be combined freely: the children specified within the +constructor will be added first, and then any additional child components +after.

    +

    Note that the children added via either methods are only guaranteed to be +available eventually: after they are loaded and mounted. We can only assure +that they will appear in the children list in the same order as they were +scheduled for addition.

    +
    +
    +

    Access to the World from a Component

    +

    If a component that has a World as an ancestor and requires access to that World object, one can +use the HasWorldReference mixin.

    +

    Example:

    +
    class MyComponent extends Component with HasWorldReference<MyWorld>,
    +    TapCallbacks {
    +  @override
    +  void onTapDown(TapDownEvent info) {
    +    // world is of type MyWorld
    +    world.add(AnotherComponent());
    +  }
    +}
    +
    +
    +

    If you try to access world from a component that doesn’t have a World +ancestor of the correct type an assertion error will be thrown.

    +
    +
    +

    Ensuring a component has a given parent

    +

    When a component requires to be added to a specific parent type the +ParentIsA mixin can be used to enforce a strongly typed parent.

    +

    Example:

    +
    class MyComponent extends Component with ParentIsA<MyParentComponent> {
    +  @override
    +  void onLoad() {
    +    // parent is of type MyParentComponent
    +    print(parent.myValue);
    +  }
    +}
    +
    +
    +

    If you try to add MyComponent to a parent that is not MyParentComponent, +an assertion error will be thrown.

    +
    +
    +

    Ensuring a component has a given ancestor

    +

    When a component requires to have a specific ancestor type somewhere in the +component tree, HasAncestor mixin can be used to enforce that relationship.

    +

    The mixin exposes the ancestor field that will be of the given type.

    +

    Example:

    +
    class MyComponent extends Component with HasAncestor<MyAncestorComponent> {
    +  @override
    +  void onLoad() {
    +    // ancestor is of type MyAncestorComponent.
    +    print(ancestor.myValue);
    +  }
    +}
    +
    +
    +

    If you try to add MyComponent to a tree that does not contain MyAncestorComponent, +an assertion error will be thrown.

    +
    +
    +

    Component Keys

    +

    Components can have an identification key that allows them to be retrieved from the component tree, from +any point of the tree.

    +

    To register a component with a key, simply pass a key to the key argument on the component’s +constructor:

    +
    final myComponent = Component(
    +  key: ComponentKey.named('player'),
    +);
    +
    +
    +

    Then, to retrieve it in a different point of the component tree:

    +
    flameGame.findByKey(ComponentKey.named('player'));
    +
    +
    +

    There are two types of keys, unique and named. Unique keys are based on equality of the key +instance, meaning that:

    +
    final key = ComponentKey.unique();
    +final key2 = key;
    +print(key == key2); // true
    +print(key == ComponentKey.unique()); // false
    +
    +
    +

    Named ones are based on the name that it receives, so:

    +
    final key1 = ComponentKey.named('player');
    +final key2 = ComponentKey.named('player');
    +print(key1 == key2); // true
    +
    +
    +

    When named keys are used, the findByKeyName helper can also be used to retrieve the component.

    +
    flameGame.findByKeyName('player');
    +
    +
    +
    +
    +

    Querying child components

    +

    The children that have been added to a component live in a QueryableOrderedSet called +children. To query for a specific type of components in the set, the query<T>() function can be +used. By default strictMode is false in the children set, but if you set it to true, then the +queries will have to be registered with children.register before a query can be used.

    +

    If you know in compile time that you later will run a query of a specific type it is recommended to +register the query, no matter if the strictMode is set to true or false, since there are some +performance benefits to gain from it. The register call is usually done in onLoad.

    +

    Example:

    +
    @override
    +void onLoad() {
    +  children.register<PositionComponent>();
    +}
    +
    +
    +

    In the example above a query is registered for PositionComponents, and an example of how to query +the registered component type can be seen below.

    +
    @override
    +void update(double dt) {
    +  final allPositionComponents = children.query<PositionComponent>();
    +}
    +
    +
    +
    +
    +

    Querying components at a specific point on the screen

    +

    The method componentsAtPoint() allows you to check which components were rendered at some point +on the screen. The returned value is an iterable of components, but you can also obtain the +coordinates of the initial point in each component’s local coordinate space by providing a writable +List<Vector2> as a second parameter.

    +

    The iterable retrieves the components in the front-to-back order, i.e. first the components in the +front, followed by the components in the back.

    +

    This method can only return components that implement the method containsLocalPoint(). The +PositionComponent (which is the base class for many components in Flame) provides such an +implementation. However, if you’re defining a custom class that derives from Component, you’d have +to implement the containsLocalPoint() method yourself.

    +

    Here is an example of how componentsAtPoint() can be used:

    +
    void onDragUpdate(DragUpdateInfo info) {
    +  game.componentsAtPoint(info.widget).forEach((component) {
    +    if (component is DropTarget) {
    +      component.highlight();
    +    }
    +  });
    +}
    +
    +
    +
    +
    +

    PositionType

    +
    +

    Note

    +

    If you are using the CameraComponent you should not use PositionType, but +instead adding your components directly to the viewport for example if you +want to use them as a HUD.

    +
    +

    If you want to create a HUD (Head-up display) or another component that isn’t positioned in relation +to the game coordinates, you can change the PositionType of the component. +The default PositionType is positionType = PositionType.game and that can be changed to +either PositionType.viewport or PositionType.widget depending on how you want to position +the component.

    +
      +
    • PositionType.game (Default) - Respects camera and viewport.

    • +
    • PositionType.viewport - Respects viewport only (ignores camera).

    • +
    • PositionType.widget - Position in relation to the coordinate system of the Flutter game +widget (i.e. the raw canvas).

    • +
    +

    Most of your components will probably be positioned according to PositionType.game, since you +want them to respect the Camera and the Viewport. But quite often you want for example buttons +and text to always show on the screen, no matter if you move the camera, then you want to use +PositionType.viewport. In some rare cases you want to use PositionType.widget to position +your widgets, when you don’t want the component to respect the camera nor the viewport; this could +for example be for controls or joysticks that would not be ergonomic to use if they had to stay +within the viewport.

    +

    Do note that this setting is only respected if the component is added directly to the root +FlameGame and not as a child component of another component.

    +
    +
    +

    Visibility of components

    +

    The recommended way to hide or show a component is usually to add or remove it from the tree +using the add and remove methods.

    +

    However, adding and removing components from the tree will trigger lifecycle steps for that +component (such as calling onRemove and onMount). It is also an asynchronous process and care +needs to be taken to ensure the component has finished removing before it is added again if you +are removing and adding a component in quick succession.

    +
    /// Example of handling the removal and adding of a child component
    +/// in quick succession
    +void show() async {
    +  // Need to await the [removed] future first, just in case the
    +  // component is still in the process of being removed.
    +  await myChildComponent.removed;
    +  add(myChildComponent);
    +}
    +
    +void hide() {
    +  remove(myChildComponent);
    +}
    +
    +
    +

    These behaviors are not always desirable.

    +

    An alternative method to show and hide a component is to use the HasVisibility mixin, which may +be used on any class that inherits from Component. This mixin introduces the isVisible property. +Simply set isVisible to false to hide the component, and true to show it again, without +removing it from the tree. This affects the visibility of the component and all it’s descendants +(children).

    +
    /// Example that implements HasVisibility
    +class MyComponent extends PositionComponent with HasVisibility {}
    +
    +/// Usage of the isVisible property
    +final myComponent = MyComponent();
    +add(myComponent);
    +
    +myComponent.isVisible = false;
    +
    +
    +

    The mixin only affects whether the component is rendered, and will not affect other behaviors.

    +
    +

    Note

    +

    Important! Even when the component is not visible, it is still in the tree and +will continue to receive calls to ‘update’ and all other lifecycle events. It +will still respond to input events, and will still interact with other +components, such as collision detection for example.

    +
    +

    The mixin works by preventing the renderTree method, therefore if renderTree is being +overridden, a manual check for isVisible should be included to retain this functionality.

    +
    class MyComponent extends PositionComponent with HasVisibility {
    +
    +  @override
    +  void renderTree(Canvas canvas) {
    +    // Check for visibility
    +    if (isVisible) {
    +      // Custom code here
    +
    +      // Continue rendering the tree
    +      super.renderTree(canvas);
    +    }
    +  }
    +}
    +
    +
    +
    +
    +
    +

    PositionComponent

    +

    This class represents a positioned object on the screen, being a floating rectangle, a rotating +sprite, or anything else with position and size. It can also represent a group of positioned +components if children are added to it.

    +

    The base of the PositionComponent is that it has a position, size, scale, angle and +anchor which transforms how the component is rendered.

    +
    +

    Position

    +

    The position is just a Vector2 which represents the position of the component’s anchor in +relation to its parent; if the parent is a FlameGame, it is in relation to the viewport.

    +
    +
    +

    Size

    +

    The size of the component when the zoom level of the camera is 1.0 (no zoom, default). +The size is not in relation to the parent of the component.

    +
    +
    +

    Scale

    +

    The scale is how much the component and its children should be scaled. Since it is represented +by a Vector2, you can scale in a uniform way by changing x and y with the same amount, or in a +non-uniform way, by change x or y by different amounts.

    +
    +
    +

    Angle

    +

    The angle is the rotation angle around the anchor, represented as a double in radians. It is +relative to the parent’s angle.

    +
    +
    +

    Native Angle

    +

    The nativeAngle is an angle in radians, measured clockwise, representing the default orientation +of the component. It can be used to define the direction in which the component is facing when +angle is zero.

    +

    It is specially helpful when making a sprite based component look at a specific target. If the +original image of the sprite is not facing in the up/north direction, the calculated angle to make +the component look at the target will need some offset to make it look correct. For such cases, +nativeAngle can be used to let the component know what direction the original image is faces.

    +

    An example could be a bullet image pointing in east direction. In this case nativeAngle can be set +to pi/2 radians. Following are some common directions and their corresponding native angle values.

    + + + + + + + + + + + + + + + + + + + + + + + + + +

    Direction

    Native Angle

    In degrees

    Up/North

    0

    0

    Down/South

    pi or -pi

    180 or -180

    Left/West

    -pi/2

    -90

    Right/East

    pi/2

    90

    +
    +
    +

    Anchor

    +
    +
    +
    +anchor.dart
    +
     1import 'dart:async';
    + 2
    + 3import 'package:flame/components.dart';
    + 4import 'package:flame/events.dart';
    + 5import 'package:flame/game.dart';
    + 6import 'package:flame/palette.dart';
    + 7
    + 8class AnchorGame extends FlameGame {
    + 9  final _parentAnchorText = TextComponent(position: Vector2.all(5));
    +10  final _childAnchorText = TextComponent(position: Vector2(5, 30));
    +11
    +12  late _AnchoredRectangle _redComponent;
    +13  late _AnchoredRectangle _blueComponent;
    +14
    +15  @override
    +16  Future<void> onLoad() async {
    +17    _redComponent = _AnchoredRectangle(
    +18      size: size / 4,
    +19      position: size / 2,
    +20      paint: BasicPalette.red.paint(),
    +21    );
    +22
    +23    _blueComponent = _AnchoredRectangle(
    +24      size: size / 8,
    +25      paint: BasicPalette.blue.paint(),
    +26    );
    +27
    +28    await _redComponent.addAll([
    +29      _blueComponent,
    +30      CircleComponent(radius: 2, anchor: Anchor.center),
    +31    ]);
    +32
    +33    await addAll([
    +34      _redComponent,
    +35      _parentAnchorText,
    +36      _childAnchorText,
    +37      CircleComponent(
    +38        radius: 4,
    +39        position: size / 2,
    +40        anchor: Anchor.center,
    +41      ),
    +42    ]);
    +43  }
    +44
    +45  @override
    +46  void update(double dt) {
    +47    _parentAnchorText.text = 'Parent: ${_redComponent.anchor}';
    +48    _childAnchorText.text = 'Child: ${_blueComponent.anchor}';
    +49    super.update(dt);
    +50  }
    +51}
    +52
    +53class _AnchoredRectangle extends RectangleComponent with TapCallbacks {
    +54  _AnchoredRectangle({
    +55    super.position,
    +56    super.size,
    +57    super.paint,
    +58  });
    +59
    +60  @override
    +61  void onTapDown(TapDownEvent event) {
    +62    var index = Anchor.values.indexOf(anchor) + 1;
    +63    if (index == Anchor.values.length) {
    +64      index = 0;
    +65    }
    +66    anchor = Anchor.values.elementAt(index);
    +67    super.onTapDown(event);
    +68  }
    +69}
    +
    +
    +
    +

    This example shows effect of changing anchor point of parent (red) and child (blue) +components. Tap on them to cycle through the anchor points. Note that the local +position of the child component is (0, 0) at all times.

    +
    +

    The anchor is where on the component that the position and rotation should be defined from (the +default is Anchor.topLeft). So if you have the anchor set as Anchor.center the component’s +position on the screen will be in the center of the component and if an angle is applied, it is +rotated around the anchor, so in this case around the center of the component. You can think of it +as the point within the component by which Flame “grabs” it.

    +

    When position or absolutePosition of a component is queried, the returned coordinates are that of +the anchor of the component. In case if you want to find the position of a specific anchor point +of a component which is not actually the anchor of that component, you can use the positionOfAnchor +and absolutePositionOfAnchor method.

    +
    final comp = PositionComponent(
    +  size: Vector2.all(20),
    +  anchor: Anchor.center,
    +);
    +
    +// Returns (0,0)
    +final p1 = component.position;
    +
    +// Returns (10, 10)
    +final p2 = component.positionOfAnchor(Anchor.bottomRight);
    +
    +
    +

    A common pitfall when using anchor is confusing it for as being the attachment point for children +components. For example, setting anchor to Anchor.center for a parent component does not mean +that the children components will be placed w.r.t the center of parent.

    +
    +

    Note

    +

    Local origin for a child component is always the top-left corner of its parent component, +irrespective of their anchor values.

    +
    +
    +
    +

    PositionComponent children

    +

    All children of the PositionComponent will be transformed in relation to the parent, which means +that the position, angle and scale will be relative to the parents state. +So if you, for example, wanted to position a child in the center of the parent you would do this:

    +
    @override
    +void onLoad() {
    +  final parent = PositionComponent(
    +    position: Vector2(100, 100),
    +    size: Vector2(100, 100),
    +  );
    +  final child = PositionComponent(
    +    position: parent.size / 2,
    +    anchor: Anchor.center,
    +  );
    +  parent.add(child);
    +}
    +
    +
    +

    Remember that most components that are rendered on the screen are PositionComponents, so +this pattern can be used in for example SpriteComponent and SpriteAnimationComponent too.

    +
    +
    +

    Render PositionComponent

    +

    When implementing the render method for a component that extends PositionComponent remember to +render from the top left corner (0.0). Your render method should not handle where on the screen your +component should be rendered. To handle where and how your component should be rendered use the +position, angle and anchor properties and Flame will automatically handle the rest for you.

    +

    If you want to know where on the screen the bounding box of the component is you can use the +toRect method.

    +

    In the event that you want to change the direction of your components rendering, you can also use +flipHorizontally() and flipVertically() to flip anything drawn to canvas during +render(Canvas canvas), around the anchor point. These methods are available on all +PositionComponent objects, and are especially useful on SpriteComponent and +SpriteAnimationComponent.

    +

    In case you want to flip a component around its center without having to change the anchor to +Anchor.center, you can use flipHorizontallyAroundCenter() and flipVerticallyAroundCenter().

    +
    +
    +
    +

    SpriteComponent

    +

    The most commonly used implementation of PositionComponent is SpriteComponent, and it can be +created with a Sprite:

    +
    import 'package:flame/components/component.dart';
    +
    +class MyGame extends FlameGame {
    +  late final SpriteComponent player;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    final sprite = await Sprite.load('player.png');
    +    final size = Vector2.all(128.0);
    +    final player = SpriteComponent(size: size, sprite: sprite);
    +
    +    // Vector2(0.0, 0.0) by default, can also be set in the constructor
    +    player.position = Vector2(10, 20);
    +
    +    // 0 by default, can also be set in the constructor
    +    player.angle = 0;
    +
    +    // Adds the component
    +    add(player);
    +  }
    +}
    +
    +
    +
    +
    +

    SpriteAnimationComponent

    +

    This class is used to represent a Component that has sprites that run in a single cyclic animation.

    +

    This will create a simple three frame animation using 3 different images:

    +
    @override
    +Future<void> onLoad() async {
    +  final sprites = [0, 1, 2]
    +      .map((i) => Sprite.load('player_$i.png'));
    +  final animation = SpriteAnimation.spriteList(
    +    await Future.wait(sprites),
    +    stepTime: 0.01,
    +  );
    +  this.player = SpriteAnimationComponent(
    +    animation: animation,
    +    size: Vector2.all(64.0),
    +  );
    +}
    +
    +
    +

    If you have a sprite sheet, you can use the sequenced constructor from the SpriteAnimationData +class (check more details on Images > Animation):

    +
    @override
    +Future<void> onLoad() async {
    +  final size = Vector2.all(64.0);
    +  final data = SpriteAnimationData.sequenced(
    +    textureSize: size,
    +    amount: 2,
    +    stepTime: 0.1,
    +  );
    +  this.player = SpriteAnimationComponent.fromFrameData(
    +    await images.load('player.png'),
    +    data,
    +  );
    +}
    +
    +
    +

    All animation components internally maintains a SpriteAnimationTicker which ticks the SpriteAnimation. +This allows multiple components to share the same animation object.

    +

    Example:

    +
    final sprites = [/*You sprite list here*/];
    +final animation = SpriteAnimation.spriteList(sprites, stepTime: 0.01);
    +
    +final animationTicker = SpriteAnimationTicker(animation);
    +
    +// or alternatively, you can ask the animation object to create one for you.
    +
    +final animationTicker = animation.createTicker(); // creates a new ticker
    +
    +animationTicker.update(dt);
    +
    +
    +

    To listen when the animation is done (when it reaches the last frame and is not looping) you can +use animationTicker.completed.

    +

    Example:

    +
    await animationTicker.completed;
    +
    +doSomething();
    +
    +// or alternatively
    +
    +animationTicker.completed.whenComplete(doSomething);
    +
    +
    +

    Additionally, SpriteAnimationTicker also has the following optional event callbacks: onStart, onFrame, +and onComplete. To listen to these events, you can do the following:

    +
    final animationTicker = SpriteAnimationTicker(animation)
    +  ..onStart = () {
    +    // Do something on start.
    +  };
    +
    +final animationTicker = SpriteAnimationTicker(animation)
    +  ..onComplete = () {
    +    // Do something on completion.
    +  };
    +
    +final animationTicker = SpriteAnimationTicker(animation)
    +  ..onFrame = (index) {
    +    if (index == 1) {
    +      // Do something for the second frame.
    +    }
    +  };
    +
    +
    +
    +
    +

    SpriteAnimationGroupComponent

    +

    SpriteAnimationGroupComponent is a simple wrapper around SpriteAnimationComponent which enables +your component to hold several animations and change the current playing animation at runtime. Since +this component is just a wrapper, the event listeners can be implemented as described in +SpriteAnimationComponent.

    +

    Its use is very similar to the SpriteAnimationComponent but instead of being initialized with a +single animation, this component receives a Map of a generic type T as key and a +SpriteAnimation as value, and the current animation.

    +

    Example:

    +
    enum RobotState {
    +  idle,
    +  running,
    +}
    +
    +final running = await loadSpriteAnimation(/* omitted */);
    +final idle = await loadSpriteAnimation(/* omitted */);
    +
    +final robot = SpriteAnimationGroupComponent<RobotState>(
    +  animations: {
    +    RobotState.running: running,
    +    RobotState.idle: idle,
    +  },
    +  current: RobotState.idle,
    +);
    +
    +// Changes current animation to "running"
    +robot.current = RobotState.running;
    +
    +
    +

    As this component works with multiple SpriteAnimations, naturally it needs equal number of animation +tickers to make all those animation tick. Use animationsTickers getter to access a map containing tickers +for each animation state. This can be useful if you want to register callbacks for onStart, onComplete +and onFrame.

    +

    Example:

    +
    enum RobotState { idle, running, jump }
    +
    +final running = await loadSpriteAnimation(/* omitted */);
    +final idle = await loadSpriteAnimation(/* omitted */);
    +
    +final robot = SpriteAnimationGroupComponent<RobotState>(
    +  animations: {
    +    RobotState.running: running,
    +    RobotState.idle: idle,
    +  },
    +  current: RobotState.idle,
    +);
    +
    +robot.animationTickers?[RobotState.running]?.onStart = () {
    +  // Do something on start of running animation.
    +};
    +
    +robot.animationTickers?[RobotState.jump]?.onStart = () {
    +  // Do something on start of jump animation.
    +};
    +
    +robot.animationTickers?[RobotState.jump]?.onComplete = () {
    +  // Do something on complete of jump animation.
    +};
    +
    +robot.animationTickers?[RobotState.idle]?.onFrame = (currentIndex) {
    +  // Do something based on current frame index of idle animation.
    +};
    +
    +
    +
    +
    +

    SpriteGroupComponent

    +

    SpriteGroupComponent is pretty similar to its animation counterpart, but especially for sprites.

    +

    Example:

    +
    class PlayerComponent extends SpriteGroupComponent<ButtonState>
    +    with HasGameReference<SpriteGroupExample>, TapCallbacks {
    +  @override
    +  Future<void>? onLoad() async {
    +    final pressedSprite = await gameRef.loadSprite(/* omitted */);
    +    final unpressedSprite = await gameRef.loadSprite(/* omitted */);
    +
    +    sprites = {
    +      ButtonState.pressed: pressedSprite,
    +      ButtonState.unpressed: unpressedSprite,
    +    };
    +
    +    current = ButtonState.unpressed;
    +  }
    +
    +  // tap methods handler omitted...
    +}
    +
    +
    +
    +
    +

    SpawnComponent

    +

    This component is a non-visual component that spawns other components inside of the parent of the +SpawnComponent. It’s great if you for example want to spawn enemies or power-ups randomly within +an area.

    +

    The SpawnComponent takes a factory function that it uses to create new components and an area +where the components should be spawned within (or along the edges of).

    +

    For the area, you can use the Circle, Rectangle or Polygon class, and if you want to only +spawn components along the edges of the shape set the within argument to false (defaults to true).

    +

    This would for example spawn new components of the type MyComponent every 0.5 seconds randomly +within the defined circle:

    +

    The factory function takes an int as an argument, which is the index of the component that is +being spawned, so if for example 4 components have been spawned already the 5th component will have +the index 4, since the indexing starts at 0.

    +
    SpawnComponent(
    +  factory: (i) => MyComponent(size: Vector2(10, 20)),
    +  period: 0.5,
    +  area: Circle(Vector2(100, 200), 150),
    +);
    +
    +
    +

    If you don’t want the spawning rate to be static, you can use the SpawnComponent.periodRange +constructor with the minPeriod and maxPeriod arguments instead. +In the following example the component would be spawned randomly within the circle and the time +between each new spawned component is between 0.5 to 10 seconds.

    +
    SpawnComponent.periodRange(
    +  factory: (i) => MyComponent(size: Vector2(10, 20)),
    +  minPeriod: 0.5,
    +  maxPeriod: 10,
    +  area: Circle(Vector2(100, 200), 150),
    +);
    +
    +
    +

    If you want to set the position yourself within the factory function, you can use set +selfPositioning = true in the constructors and you will be able to set the positions yourself and +ignore the area argument.

    +
    SpawnComponent(
    +  factory: (i) =>
    +    MyComponent(position: Vector2(100, 200), size: Vector2(10, 20)),
    +  selfPositioning: true,
    +  period: 0.5,
    +);
    +
    +
    +
    +
    +

    SvgComponent

    +

    Note: To use SVG with Flame, use the flame_svg +package.

    +

    This component uses an instance of Svg class to represent a Component that has a svg that is +rendered in the game:

    +
    @override
    +Future<void> onLoad() async {
    +  final svg = await Svg.load('android.svg');
    +  final android = SvgComponent.fromSvg(
    +    svg,
    +    position: Vector2.all(100),
    +    size: Vector2.all(100),
    +  );
    +}
    +
    +
    +
    +
    +

    ParallaxComponent

    +

    This Component can be used to render backgrounds with a depth feeling by drawing several +transparent images on top of each other, where each image or animation (ParallaxRenderer) is +moving with a different velocity.

    +

    The rationale is that when you look at the horizon and moving, closer objects seem to move faster +than distant ones.

    +

    This component simulates this effect, making a more realistic background effect.

    +

    The simplest ParallaxComponent is created like this:

    +
    @override
    +Future<void> onLoad() async {
    +  final parallaxComponent = await loadParallaxComponent([
    +    ParallaxImageData('bg.png'),
    +    ParallaxImageData('trees.png'),
    +  ]);
    +  add(parallaxComponent);
    +}
    +
    +
    +

    A ParallaxComponent can also “load itself” by implementing the onLoad method:

    +
    class MyParallaxComponent extends ParallaxComponent<MyGame> {
    +  @override
    +  Future<void> onLoad() async {
    +    parallax = await gameRef.loadParallax([
    +      ParallaxImageData('bg.png'),
    +      ParallaxImageData('trees.png'),
    +    ]);
    +  }
    +}
    +
    +class MyGame extends FlameGame {
    +  @override
    +  void onLoad() {
    +    add(MyParallaxComponent());
    +  }
    +}
    +
    +
    +

    This creates a static background. If you want a moving parallax (which is the whole point of a +parallax), you can do it in a few different ways depending on how fine-grained you want to set the +settings for each layer.

    +

    They simplest way is to set the named optional parameters baseVelocity and +velocityMultiplierDelta in the load helper function. For example if you want to move your +background images along the X-axis with a faster speed the “closer” the image is:

    +
    @override
    +Future<void> onLoad() async {
    +  final parallaxComponent = await loadParallaxComponent(
    +    _dataList,
    +    baseVelocity: Vector2(20, 0),
    +    velocityMultiplierDelta: Vector2(1.8, 1.0),
    +  );
    +}
    +
    +
    +

    You can set the baseSpeed and layerDelta at any time, for example if your character jumps or your +game speeds up.

    +
    @override
    +void onLoad() {
    +  final parallax = parallaxComponent.parallax;
    +  parallax.baseSpeed = Vector2(100, 0);
    +  parallax.velocityMultiplierDelta = Vector2(2.0, 1.0);
    +}
    +
    +
    +

    By default, the images are aligned to the bottom left, repeated along the X-axis and scaled +proportionally so that the image covers the height of the screen. If you want to change this +behavior, for example if you are not making a side-scrolling game, you can set the repeat, +alignment and fill parameters for each ParallaxRenderer and add them to ParallaxLayers that +you then pass in to the ParallaxComponent’s constructor.

    +

    Advanced example:

    +
    final images = [
    +  loadParallaxImage(
    +    'stars.jpg',
    +    repeat: ImageRepeat.repeat,
    +    alignment: Alignment.center,
    +    fill: LayerFill.width,
    +  ),
    +  loadParallaxImage(
    +    'planets.jpg',
    +    repeat: ImageRepeat.repeatY,
    +    alignment: Alignment.bottomLeft,
    +    fill: LayerFill.none,
    +  ),
    +  loadParallaxImage(
    +    'dust.jpg',
    +    repeat: ImageRepeat.repeatX,
    +    alignment: Alignment.topRight,
    +    fill: LayerFill.height,
    +  ),
    +];
    +
    +final layers = images.map(
    +  (image) => ParallaxLayer(
    +    await image,
    +    velocityMultiplier: images.indexOf(image) * 2.0,
    +  )
    +);
    +
    +final parallaxComponent = ParallaxComponent.fromParallax(
    +  Parallax(
    +    await Future.wait(layers),
    +    baseVelocity: Vector2(50, 0),
    +  ),
    +);
    +
    +
    +
      +
    • The stars image in this example will be repeatedly drawn in both axis, align in the center and be +scaled to fill the screen width.

    • +
    • The planets image will be repeated in Y-axis, aligned to the bottom left of the screen and not be +scaled.

    • +
    • The dust image will be repeated in X-axis, aligned to the top right and scaled to fill the screen +height.

    • +
    +

    Once you are done setting up your ParallaxComponent, add it to the game like with any other +component (game.add(parallaxComponent). +Also, don’t forget to add you images to the pubspec.yaml file as assets or they wont be found.

    +

    The Parallax file contains an extension of the game which adds loadParallax, loadParallaxLayer +, loadParallaxImage and loadParallaxAnimation so that it automatically uses your game’s image +cache instead of the global one. The same goes for the ParallaxComponent file, but that provides +loadParallaxComponent.

    +

    If you want a fullscreen ParallaxComponent simply omit the size argument and it will take the +size of the game, it will also resize to fullscreen when the game changes size or orientation.

    +

    Flame provides two kinds of ParallaxRenderer: ParallaxImage and ParallaxAnimation, +ParallaxImage is a static image renderer and ParallaxAnimation is, as it’s name implies, an +animation and frame based renderer. +It is also possible to create custom renderers by extending the ParallaxRenderer class.

    +

    Three example implementations can be found in the +examples directory.

    +
    +
    +

    ShapeComponents

    +

    A ShapeComponent is the base class for representing a scalable geometrical shape. The shapes have +different ways of defining how they look, but they all have a size and angle that can be modified +and the shape definition will scale or rotate the shape accordingly.

    +

    These shapes are meant as a tool for using geometrical shapes in a more general way than together +with the collision detection system, where you want to use the +ShapeHitboxes.

    +
    +

    PolygonComponent

    +

    A PolygonComponent is created by giving it a list of points in the constructor, called vertices. +This list will be transformed into a polygon with a size, which can still be scaled and rotated.

    +

    For example, this would create a square going from (50, 50) to (100, 100), with it’s center in +(75, 75):

    +
    void main() {
    +  PolygonComponent([
    +    Vector2(100, 100),
    +    Vector2(100, 50),
    +    Vector2(50, 50),
    +    Vector2(50, 100),
    +  ]);
    +}
    +
    +
    +

    A PolygonComponent can also be created with a list of relative vertices, which are points defined +in relation to the given size, most often the size of the intended parent.

    +

    For example you could create a diamond shapes polygon like this:

    +
    void main() {
    +  PolygonComponent.relative(
    +    [
    +      Vector2(0.0, 1.0), // Middle of top wall
    +      Vector2(1.0, 0.0), // Middle of right wall
    +      Vector2(0.0, -1.0), // Middle of bottom wall
    +      Vector2(-1.0, 0.0), // Middle of left wall
    +    ],
    +    size: Vector2.all(100),
    +  );
    +}
    +
    +
    +

    The vertices in the example defines percentages of the length from the center to the edge of the +screen in both x and y axis, so for our first item in our list (Vector2(0.0, 1.0)) we are pointing +on the middle of the top wall of the bounding box, since the coordinate system here is defined from +the center of the polygon.

    +

    An example of how to define a polygon shape

    +

    In the image you can see how the polygon shape formed by the purple arrows is defined by the red +arrows.

    +

    Remember to define the lists in a counter clockwise manner (if you think in the screen coordinate +system where the y-axis is flipped, otherwise it is clockwise).

    +
    +
    +

    RectangleComponent

    +

    A RectangleComponent is created very similarly to how a PositionComponent is created, since it +also has a bounding rectangle.

    +

    Something like this for example:

    +
    void main() {
    +  RectangleComponent(
    +    position: Vector2(10.0, 15.0),
    +    size: Vector2.all(10),
    +    angle: pi/2,
    +    anchor: Anchor.center,
    +  );
    +}
    +
    +
    +

    Dart also already has an excellent way to create rectangles and that class is called Rect, you can +create a Flame RectangleComponent from a Rect by using the Rectangle.fromRect factory, and +just like when setting the vertices of the PolygonComponent, your rectangle will be sized +according to the Rect if you use this constructor.

    +

    The following would create a RectangleComponent with its top left corner in (10, 10) and a size +of (100, 50).

    +
    void main() {
    +  RectangleComponent.fromRect(
    +    Rect.fromLTWH(10, 10, 100, 50),
    +  );
    +}
    +
    +
    +

    You can also create a RectangleComponent by defining a relation to the intended parent’s size, +you can use the default constructor to build your rectangle from a position, size and angle. The +relation is a vector defined in relation to the parent size, for example a relation that is +Vector2(0.5, 0.8) would create a rectangle that is 50% of the width of the parent’s size and +80% of its height.

    +

    In the example below a RectangleComponent of size (25.0, 30.0) positioned at (100, 100) would +be created.

    +
    void main() {
    +  RectangleComponent.relative(
    +    Vector2(0.5, 1.0),
    +    position: Vector2.all(100),
    +    size: Vector2(50, 30),
    +  );
    +}
    +
    +
    +

    Since a square is a simplified version of a rectangle, there is also a constructor for creating a +square RectangleComponent, the only difference is that the size argument is a double instead +of a Vector2.

    +
    void main() {
    +  RectangleComponent.square(
    +    position: Vector2.all(100),
    +    size: 200,
    +  );
    +}
    +
    +
    +
    +
    +

    CircleComponent

    +

    If you know how long your circle’s position and/or how long the radius is going to be from the start +you can use the optional arguments radius and position to set those.

    +

    The following would create a CircleComponent with its center in (100, 100) with a radius of 5, +and therefore a size of Vector2(10, 10).

    +
    void main() {
    +  CircleComponent(radius: 5, position: Vector2.all(100), anchor: Anchor.center);
    +}
    +
    +
    +

    When creating a CircleComponent with the relative constructor you can define how long the +radius is in comparison to the shortest edge of the of the bounding box defined by size.

    +

    The following example would result in a CircleComponent that defines a circle with a radius of 40 +(a diameter of 80).

    +
    void main() {
    +  CircleComponent.relative(0.8, size: Vector2.all(100));
    +}
    +
    +
    +
    +
    +
    +

    IsometricTileMapComponent

    +

    This component allows you to render an isometric map based on a cartesian matrix of blocks and an +isometric tileset.

    +

    A simple example on how to use it:

    +
    // Creates a tileset, the block ids are automatically assigned sequentially
    +// starting at 0, from left to right and then top to bottom.
    +final tilesetImage = await images.load('tileset.png');
    +final tileset = SpriteSheet(image: tilesetImage, srcSize: Vector2.all(32));
    +// Each element is a block id, -1 means nothing
    +final matrix = [[0, 1, 0], [1, 0, 0], [1, 1, 1]];
    +add(IsometricTileMapComponent(tileset, matrix));
    +
    +
    +

    It also provides methods for converting coordinates so you can handle clicks, hovers, render +entities on top of tiles, add a selector, etc.

    +

    You can also specify the tileHeight, which is the vertical distance between the bottom and top +planes of each cuboid in your tile. Basically, it’s the height of the front-most edge of your +cuboid; normally it’s half (default) or a quarter of the tile size. On the image below you can see +the height colored in the darker tone:

    +

    An example of how to determine the tileHeight

    +

    This is an example of how a quarter-length map looks like:

    +

    An example of a isometric map with selector

    +

    Flame’s Example app contains a more in-depth example, featuring how to parse coordinates to make a +selector. The code can be found +here, +and a live version can be seen here.

    +
    +
    +

    NineTileBoxComponent

    +

    A Nine Tile Box is a rectangle drawn using a grid sprite.

    +

    The grid sprite is a 3x3 grid and with 9 blocks, representing the 4 corners, the 4 sides and the +middle.

    +

    The corners are drawn at the same size, the sides are stretched on the side direction and the middle +is expanded both ways.

    +

    Using this, you can get a box/rectangle that expands well to any sizes. This is useful for making +panels, dialogs, borders.

    +

    Check the example app +nine_tile_box +for details on how to use it.

    +
    +
    +

    CustomPainterComponent

    +

    A CustomPainter is a Flutter class used with the CustomPaint widget to render custom +shapes inside a Flutter application.

    +

    Flame provides a component that can render a CustomPainter called CustomPainterComponent, it +receives a custom painter and renders it on the game canvas.

    +

    This can be used for sharing custom rendering logic between your Flame game, and your Flutter +widgets.

    +

    Check the example app +custom_painter_component +for details on how to use it.

    +
    +
    +

    ComponentsNotifier

    +

    Most of the time just accessing children and their attributes is enough to build the logic of +your game.

    +

    But sometimes, reactivity can help the developer to simplify and write better code, to help with +that Flame provides the ComponentsNotifier, which is an implementation of a +ChangeNotifier that notifies listeners every time a component is added, removed or manually +changed.

    +

    For example, lets say that we want to show a game over text when the player’s lives reach zero.

    +

    To make the component automatically report when new instances are added or removed, the Notifier +mixin can be applied to the component class:

    +
    class Player extends SpriteComponent with Notifier {}
    +
    +
    +

    Then to listen to changes on that component the componentsNotifier method from FlameGame can +be used:

    +
    class MyGame extends FlameGame {
    +  int lives = 2;
    +
    +  @override
    +  void onLoad() {
    +    final playerNotifier = componentsNotifier<Player>()
    +        ..addListener(() {
    +          final player = playerNotifier.single;
    +          if (player == null) {
    +            lives--;
    +            if (lives == 0) {
    +              add(GameOverComponent());
    +            } else {
    +              add(Player());
    +            }
    +          }
    +        });
    +  }
    +}
    +
    +
    +

    A Notifier component can also manually notify its listeners that something changed. Lets expand +the example above to make a hud component to blink when the player has half of their health. In +order to do so, we need that the Player component notify a change manually, example:

    +
    class Player extends SpriteComponent with Notifier {
    +  double health = 1;
    +
    +  void takeHit() {
    +    health -= .1;
    +    if (health == 0) {
    +      removeFromParent();
    +    } else if (health <= .5) {
    +      notifyListeners();
    +    }
    +  }
    +}
    +
    +
    +

    Then our hud component could look like:

    +
    class Hud extends PositionComponent with HasGameRef {
    +
    +  @override
    +  void onLoad() {
    +    final playerNotifier = gameRef.componentsNotifier<Player>()
    +        ..addListener(() {
    +          final player = playerNotifier.single;
    +          if (player != null) {
    +            if (player.health <= .5) {
    +              add(BlinkEffect());
    +            }
    +          }
    +        });
    +  }
    +}
    +
    +
    +

    ComponentsNotifiers can also come in handy to rebuild widgets when state changes inside a +FlameGame, to help with that Flame provides a ComponentsNotifierBuilder widget.

    +

    To see an example of its use check the running example +here.

    +
    +
    +

    ClipComponent

    +

    A ClipComponent is a component that will clip the canvas to its size and shape. This means that +if the component itself or any child of the ClipComponent renders outside of the +ClipComponent’s boundaries, the part that is not inside the area will not be shown.

    +

    A ClipComponent receives a builder function that should return the Shape that will define the +clipped area, based on its size.

    +

    To make it easier to use that component, there are three factories that offers common shapes:

    +
      +
    • ClipComponent.rectangle: Clips the area in the form a rectangle based on its size.

    • +
    • ClipComponent.circle: Clips the area in the form of a circle based on its size.

    • +
    • ClipComponent.polygon: Clips the area in the form of a polygon based on the points received +in the constructor.

    • +
    +

    Check the example app +clip_component +for details on how to use it.

    +
    +
    +

    Effects

    +

    Flame provides a set of effects that can be applied to a certain type of components, these effects +can be used to animate some properties of your components, like position or dimensions. +You can check the list of those effects here.

    +

    Examples of the running effects can be found here;

    +
    +
    +

    When not using FlameGame

    +

    If you are not using FlameGame, don’t forget that all components needs to be updated every time your +game updates. This lets component perform their internal processing and update their state.

    +

    For example, the SpriteAnimationTicker inside all the SpriteAnimation based components needs to tick +the animation object to decide which animation frame will be displayed next. This can be done by manually +calling component.update() when not using FlameGame. This also means, if you are implementing your +own sprite animation based component, you can directly use a SpriteAnimationTicker to update the SpriteAnimation.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/diagrams/component.html b/docs/1.18.0/flame/diagrams/component.html new file mode 100644 index 000000000..5d91cb204 --- /dev/null +++ b/docs/1.18.0/flame/diagrams/component.html @@ -0,0 +1,405 @@ + + + + + + + <no title> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    + %%{init: { 'theme': 'dark' } }%% +graph TD + %% Config %% + classDef default fill:#282828,stroke:#F6BE00; + + %% Nodes %% + Component(Component) + Misc(" + TimerComponent + ParticleComponent + SpriteBatchComponent + ") + Effects("Effects<br/>(See the effects section)") + Game(Game) + FlameGame(FlameGame) + PositionComponent(PositionComponent) + + Sprites(" + SpriteComponent + SpriteGroupComponent + SpriteAnimationComponent + SpriteAnimationGroupComponent + ParallaxComponent + IsoMetricTileMapComponent + ") + + HudMarginComponent(HudMarginComponent) + HudComponents(" + HudButtonComponent + JoystickComponent + ") + + OtherPositionComponents(" + ButtonComponent + CustomPainterComponent + ShapeComponent + SpriteButtonComponent + TextComponent + TextBoxComponent + NineTileBoxComponent + ") + + %% Flow %% + Component --> Misc + Component --> Effects + Component --> PositionComponent + Component --> FlameGame + + Game --> FlameGame + PositionComponent --> Sprites + PositionComponent --> HudMarginComponent + PositionComponent --> OtherPositionComponents + HudMarginComponent --> HudComponents +
    + +
    + +
    +
    +
    +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/diagrams/component_life_cycle.html b/docs/1.18.0/flame/diagrams/component_life_cycle.html new file mode 100644 index 000000000..d2cebf8cf --- /dev/null +++ b/docs/1.18.0/flame/diagrams/component_life_cycle.html @@ -0,0 +1,394 @@ + + + + + + + <no title> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    + %%{init: { 'theme': 'dark' } }%% + + graph TD + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + x(Runs Each Tick) + y(Runs On Add & Resize):::lightYellow + z(Runs Once):::yellow + +
    + %%{init: { 'theme': 'dark' } }%% + graph LR + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + + A(onLoad):::yellow + B(onGameResize):::lightYellow + C(onMount):::yellow + D(update) + E(render) + F(onRemove):::yellow + + %% Flow %% + + A-->B + B-->C + C-->D + D-->E + E-->D + E-. If removed .->F + F-. If re-parented .->A + +
    + +
    + +
    +
    +
    +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/diagrams/flame_game_life_cycle.html b/docs/1.18.0/flame/diagrams/flame_game_life_cycle.html new file mode 100644 index 000000000..53dca8c63 --- /dev/null +++ b/docs/1.18.0/flame/diagrams/flame_game_life_cycle.html @@ -0,0 +1,394 @@ + + + + + + + <no title> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    + %%{init: { 'theme': 'dark' } }%% + + graph TD + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + x(Runs Each Tick) + y(Runs On Add & Resize):::lightYellow + z(Runs Once):::yellow + +
    + %%{init: { 'theme': 'dark' } }%% + graph LR + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + + A(onGameResize):::lightYellow + B(onLoad):::yellow + C(onMount):::yellow + D(update) + E(render) + F(onRemove):::yellow + + %% Flow %% + + A-->B + B-->C + C-->D + D-->E + E-->D + E-. If removed .->F + F-. If re-parented .->A + +
    + +
    + +
    +
    +
    +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/diagrams/low_level_game_api.html b/docs/1.18.0/flame/diagrams/low_level_game_api.html new file mode 100644 index 000000000..31c432875 --- /dev/null +++ b/docs/1.18.0/flame/diagrams/low_level_game_api.html @@ -0,0 +1,390 @@ + + + + + + + <no title> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    + %%{init: { 'theme': 'dark' } }%% + graph TD + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000; + + %% Nodes %% + + z(Abstract Class):::yellow + x(Normal Class) +
    + %%{init: { 'theme': 'dark' } }%% + + graph BT + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000; + + %% Nodes %% + + A(OxygenGame) + B(Game):::yellow + C(FlameGame) + D(Component) + E(Other Components) + F(GameWidget) + + %% Flow %% + + A-- Extends -->B + F-- Wants -->B + + C-- Extends -->D + E-- Extends -->D + + C-- With -->B +
    + +
    + +
    +
    +
    +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/effects.html b/docs/1.18.0/flame/effects.html new file mode 100644 index 000000000..bb7548050 --- /dev/null +++ b/docs/1.18.0/flame/effects.html @@ -0,0 +1,1773 @@ + + + + + + + Effects — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Effects

    +

    An effect is a special component that can attach to another component in order to modify its +properties or appearance.

    +

    For example, suppose you are making a game with collectible power-up items. You want these power-ups +to generate randomly around the map and then de-spawn after some time. Obviously, you could make a +sprite component for the power-up and then place that component on the map, but we could do even +better!

    +

    Let’s add a ScaleEffect to grow the item from 0 to 100% when the power-up first appears. Add +another infinitely repeating alternating MoveEffect in order to make the item move slightly up +and down. Then add an OpacityEffect that will “blink” the item 3 times, this effect will have a +built-in delay of 30 seconds, or however long you want your power-up to stay in place. Lastly, add +a RemoveEffect that will automatically remove the item from the game tree after the specified +time (you probably want to time it right after the end of the OpacityEffect).

    +

    As you can see, with a few simple effects we have turned a simple lifeless sprite into a much more +interesting item. And what’s more important, it didn’t result in an increased code complexity: the +effects, once added, will work automatically, and then self-remove from the game tree when +finished.

    +
    +

    Overview

    +

    The function of an Effect is to effect a change over time in some component’s property. In order +to achieve that, the Effect must know the initial value of the property, the final value, and how +it should progress over time. The initial value is usually determined by an effect automatically, +the final value is provided by the user explicitly, and progression over time is handled by +EffectControllers.

    +

    There are multiple effects provided by Flame, and you can also +create your own. The following effects are included:

    + +

    An EffectController is an object that describes how the effect should evolve over time. If you +think of the initial value of the effect as 0% progress, and the final value as 100% progress, then +the job of the effect controller is to map from the “physical” time, measured in seconds, into the +“logical” time, which changes from 0 to 1.

    +

    There are multiple effect controllers provided by the Flame framework as well:

    + +
    +
    +

    Built-in effects

    +
    +

    Effect

    +

    The base Effect class is not usable on its own (it is abstract), but it provides some common +functionality inherited by all other effects. This includes:

    +
      +
    • The ability to pause/resume the effect using effect.pause() and effect.resume(). You can +check whether the effect is currently paused using effect.isPaused.

    • +
    • Property removeOnFinish (which is true by default) will cause the effect component to be +removed from the game tree and garbage-collected once the effect completes. Set this to false +if you plan to reuse the effect after it is finished.

    • +
    • Optional user-provided onComplete, which will be invoked when the effect has just +completed its execution but before it is removed from the game.

    • +
    • A completed future that completes when the effect finishes.

    • +
    • The reset() method reverts the effect to its original state, allowing it to run once again.

    • +
    +
    +
    +

    MoveByEffect

    +

    This effect applies to a PositionComponent and shifts it by a prescribed offset amount. This +offset is relative to the current position of the target:

    +
    +
    +
    +move_by_effect.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/effects.dart';
    + 3import 'package:flame/game.dart';
    + 4
    + 5class MoveByEffectGame extends FlameGame {
    + 6  bool reset = false;
    + 7  @override
    + 8  Future<void> onLoad() async {
    + 9    final flower = Flower(
    +10      size: 60,
    +11      position: canvasSize / 2,
    +12      onTap: (flower) {
    +13        if (reset = !reset) {
    +14          flower.add(
    +15            MoveEffect.by(
    +16              Vector2(30, 30),
    +17              EffectController(duration: 1.0),
    +18            ),
    +19          );
    +20        } else {
    +21          flower.add(
    +22            MoveEffect.by(
    +23              Vector2(-30, -30),
    +24              EffectController(duration: 1.0),
    +25            ),
    +26          );
    +27        }
    +28      },
    +29    );
    +30    add(flower);
    +31  }
    +32}
    +
    +
    +
    +
    +
    final effect = MoveByEffect(
    +  Vector2(0, -10),
    +  EffectController(duration: 0.5),
    +);
    +
    +
    +

    If the component is currently at Vector2(250, 200), then at the end of the effect its position +will be Vector2(250, 190).

    +

    Multiple move effects can be applied to a component at the same time. The result will be the +superposition of all the individual effects.

    +
    +
    +

    MoveToEffect

    +

    This effect moves a PositionComponent from its current position to the specified destination +point in a straight line.

    +
    +
    +
    +move_to_effect.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/effects.dart';
    + 3import 'package:flame/game.dart';
    + 4
    + 5class MoveToEffectGame extends FlameGame {
    + 6  bool reset = false;
    + 7  @override
    + 8  Future<void> onLoad() async {
    + 9    final flower = Flower(
    +10      size: 60,
    +11      position: canvasSize / 2,
    +12      onTap: (flower) {
    +13        if (reset = !reset) {
    +14          flower.add(
    +15            MoveEffect.to(
    +16              Vector2(30, 30),
    +17              EffectController(duration: 1.0),
    +18            ),
    +19          );
    +20        } else {
    +21          flower.add(
    +22            MoveEffect.to(
    +23              size / 2,
    +24              EffectController(duration: 1.0),
    +25            ),
    +26          );
    +27        }
    +28      },
    +29    );
    +30    add(flower);
    +31  }
    +32}
    +
    +
    +
    +
    +
    final effect = MoveToEffect(
    +  Vector2(100, 500),
    +  EffectController(duration: 3),
    +);
    +
    +
    +

    It is possible, but not recommended to attach multiple such effects to the same component.

    +
    +
    +

    MoveAlongPathEffect

    +

    This effect moves a PositionComponent along the specified path relative to the component’s +current position. The path can have non-linear segments, but must be singly connected. It is +recommended to start a path at Vector2.zero() in order to avoid sudden jumps in the component’s +position.

    +
    +
    +
    +move_along_path_effect.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:doc_flame_examples/flower.dart';
    + 4import 'package:flame/effects.dart';
    + 5import 'package:flame/game.dart';
    + 6
    + 7class MoveAlongPathEffectGame extends FlameGame {
    + 8  bool reset = false;
    + 9  @override
    +10  Future<void> onLoad() async {
    +11    final flower = Flower(
    +12      size: 60,
    +13      position: canvasSize / 2,
    +14      onTap: (flower) {
    +15        if (reset = !reset) {
    +16          flower.add(
    +17            MoveAlongPathEffect(
    +18              Path()..quadraticBezierTo(100, 0, 50, -50),
    +19              EffectController(duration: 1.5),
    +20            ),
    +21          );
    +22        } else {
    +23          flower.add(
    +24            MoveAlongPathEffect(
    +25              Path()..quadraticBezierTo(-100, 0, -50, 50),
    +26              EffectController(duration: 1.5),
    +27            ),
    +28          );
    +29        }
    +30      },
    +31    );
    +32    add(flower);
    +33  }
    +34}
    +
    +
    +
    +
    +
    final effect = MoveAlongPathEffect(
    +  Path()..quadraticBezierTo(100, 0, 50, -50),
    +  EffectController(duration: 1.5),
    +);
    +
    +
    +

    An optional flag absolute: true will declare the path within the effect as absolute. That is, the +target will “jump” to the beginning of the path at start, and then follow that path as if it was a +curve drawn on the canvas.

    +

    Another flag oriented: true instructs the target not only move along the curve, but also rotate +itself in the direction the curve is facing at each point. With this flag the effect becomes both +the move- and the rotate- effect at the same time.

    +
    +
    +

    RotateEffect.by

    +

    Rotates the target clockwise by the specified angle relative to its current orientation. The angle +is in radians. For example, the following effect will rotate the target 90º (=tau/4 in radians) +clockwise:

    +
    +
    +
    +rotate_by_effect.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/effects.dart';
    + 3import 'package:flame/game.dart';
    + 4import 'package:flame/geometry.dart';
    + 5
    + 6class RotateByEffectGame extends FlameGame {
    + 7  bool reset = false;
    + 8  @override
    + 9  Future<void> onLoad() async {
    +10    final flower = Flower(
    +11      size: 60,
    +12      position: canvasSize / 2,
    +13      onTap: (flower) {
    +14        if (reset = !reset) {
    +15          flower.add(
    +16            RotateEffect.by(
    +17              tau / 4,
    +18              EffectController(duration: 2),
    +19            ),
    +20          );
    +21        } else {
    +22          flower.add(
    +23            RotateEffect.by(
    +24              -tau / 4,
    +25              EffectController(duration: 2),
    +26            ),
    +27          );
    +28        }
    +29      },
    +30    );
    +31    add(flower);
    +32  }
    +33}
    +
    +
    +
    +
    +
    final effect = RotateEffect.by(
    +  tau/4,
    +  EffectController(duration: 2),
    +);
    +
    +
    +
    +
    +

    RotateEffect.to

    +

    Rotates the target clockwise to the specified angle. For example, the following will rotate the +target to look east (0º is north, 90º=tau/4 east, 180º=tau/2 south, and 270º=tau*3/4 west):

    +
    +
    +
    +rotate_to_effect.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/effects.dart';
    + 3import 'package:flame/game.dart';
    + 4import 'package:flame/geometry.dart';
    + 5
    + 6class RotateToEffectGame extends FlameGame {
    + 7  bool reset = false;
    + 8  @override
    + 9  Future<void> onLoad() async {
    +10    final flower = Flower(
    +11      size: 60,
    +12      position: canvasSize / 2,
    +13      onTap: (flower) {
    +14        if (reset = !reset) {
    +15          flower.add(
    +16            RotateEffect.to(
    +17              tau / 4,
    +18              EffectController(duration: 2),
    +19            ),
    +20          );
    +21        } else {
    +22          flower.add(
    +23            RotateEffect.to(
    +24              -tau / 4,
    +25              EffectController(duration: 2),
    +26            ),
    +27          );
    +28        }
    +29      },
    +30    );
    +31    add(flower);
    +32  }
    +33}
    +
    +
    +
    +
    +
    final effect = RotateEffect.to(
    +  tau/4,
    +  EffectController(duration: 2),
    +);
    +
    +
    +
    +
    +

    ScaleEffect.by

    +

    This effect will change the target’s scale by the specified amount. For example, this will cause +the component to grow 50% larger:

    +
    +
    +
    +scale_by_effect.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/effects.dart';
    + 3import 'package:flame/game.dart';
    + 4
    + 5class ScaleByEffectGame extends FlameGame {
    + 6  bool reverse = false;
    + 7  bool hold = false;
    + 8  @override
    + 9  Future<void> onLoad() async {
    +10    final flower = Flower(
    +11      size: 60,
    +12      position: canvasSize / 2,
    +13      onTap: (flower) {
    +14        if (hold) {
    +15          return;
    +16        }
    +17        hold = true;
    +18        if (reverse = !reverse) {
    +19          flower.add(
    +20            ScaleEffect.by(
    +21              Vector2.all(1.5),
    +22              EffectController(duration: 0.3),
    +23              onComplete: () => hold = false,
    +24            ),
    +25          );
    +26        } else {
    +27          flower.add(
    +28            ScaleEffect.by(
    +29              Vector2.all(1 / 1.5),
    +30              EffectController(duration: 0.3),
    +31              onComplete: () => hold = false,
    +32            ),
    +33          );
    +34        }
    +35      },
    +36    );
    +37    add(flower);
    +38  }
    +39}
    +
    +
    +
    +
    +
    final effect = ScaleEffect.by(
    +  Vector2.all(1.5),
    +  EffectController(duration: 0.3),
    +);
    +
    +
    +
    +
    +

    ScaleEffect.to

    +

    This effect works similar to ScaleEffect.by, but sets the absolute value of the target’s scale.

    +
    +
    +
    +scale_to_effect.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/effects.dart';
    + 3import 'package:flame/game.dart';
    + 4
    + 5class ScaleToEffectGame extends FlameGame {
    + 6  bool reverse = false;
    + 7  bool hold = false;
    + 8  @override
    + 9  Future<void> onLoad() async {
    +10    final flower = Flower(
    +11      size: 60,
    +12      position: canvasSize / 2,
    +13      onTap: (flower) {
    +14        if (hold) {
    +15          return;
    +16        }
    +17        hold = true;
    +18        if (reverse = !reverse) {
    +19          flower.add(
    +20            ScaleEffect.to(
    +21              Vector2.all(0.5),
    +22              EffectController(duration: 0.5),
    +23              onComplete: () => hold = false,
    +24            ),
    +25          );
    +26        } else {
    +27          flower.add(
    +28            ScaleEffect.to(
    +29              Vector2.all(1),
    +30              EffectController(duration: 0.5),
    +31              onComplete: () => hold = false,
    +32            ),
    +33          );
    +34        }
    +35      },
    +36    );
    +37    add(flower);
    +38  }
    +39}
    +
    +
    +
    +
    +
    final effect = ScaleEffect.to(
    +  Vector2.all(0.5),
    +  EffectController(duration: 0.5),
    +);
    +
    +
    +
    +
    +

    SizeEffect.by

    +

    This effect will change the size of the target component, relative to its current size. For example, +if the target has size Vector2(100, 100), then after the following effect is applied and runs its +course, the new size will be Vector2(120, 50):

    +
    +
    +
    +size_by_effect.dart
    +
     1import 'package:doc_flame_examples/ember.dart';
    + 2import 'package:flame/components.dart';
    + 3import 'package:flame/effects.dart';
    + 4import 'package:flame/game.dart';
    + 5
    + 6class SizeByEffectGame extends FlameGame {
    + 7  bool reset = false;
    + 8  @override
    + 9  Future<void> onLoad() async {
    +10    final ember = EmberPlayer(
    +11      position: size / 2,
    +12      size: Vector2(45, 40),
    +13      onTap: (ember) {
    +14        if (reset = !reset) {
    +15          ember.add(
    +16            SizeEffect.by(
    +17              Vector2(-15, 30),
    +18              EffectController(duration: 0.75),
    +19            ),
    +20          );
    +21        } else {
    +22          ember.add(
    +23            SizeEffect.by(
    +24              Vector2(15, -30),
    +25              EffectController(duration: 0.75),
    +26            ),
    +27          );
    +28        }
    +29      },
    +30    )..anchor = Anchor.center;
    +31
    +32    add(ember);
    +33  }
    +34}
    +
    +
    +
    +
    +
    final effect = SizeEffect.by(
    +   Vector2(-15, 30),
    +   EffectController(duration: 1),
    +);
    +
    +
    +

    The size of a PositionComponent cannot be negative. If an effect attempts to set the size to a +negative value, the size will be clamped at zero.

    +

    Note that for this effect to work, the target component must implement the SizeProvider interface +and take its size into account when rendering. Only few of the built-in components implement this +API, but you can always make your own component work with size effects by adding +implements SizeEffect to the class declaration.

    +

    An alternative to SizeEffect is the ScaleEffect, which works more generally and scales both the +target component and its children.

    +
    +
    +

    SizeEffect.to

    +

    Changes the size of the target component to the specified size. Target size cannot be negative:

    +
    +
    +
    +size_to_effect.dart
    +
     1import 'package:doc_flame_examples/ember.dart';
    + 2import 'package:flame/components.dart';
    + 3import 'package:flame/effects.dart';
    + 4import 'package:flame/game.dart';
    + 5
    + 6class SizeToEffectGame extends FlameGame {
    + 7  bool reset = false;
    + 8  @override
    + 9  Future<void> onLoad() async {
    +10    final ember = EmberPlayer(
    +11      position: size / 2,
    +12      size: Vector2(45, 40),
    +13      onTap: (ember) {
    +14        if (reset = !reset) {
    +15          ember.add(
    +16            SizeEffect.to(
    +17              Vector2(90, 80),
    +18              EffectController(duration: 0.75),
    +19            ),
    +20          );
    +21        } else {
    +22          ember.add(
    +23            SizeEffect.to(
    +24              Vector2(45, 40),
    +25              EffectController(duration: 0.75),
    +26            ),
    +27          );
    +28        }
    +29      },
    +30    )..anchor = Anchor.center;
    +31
    +32    add(ember);
    +33  }
    +34}
    +
    +
    +
    +
    +
    final effect = SizeEffect.to(
    +  Vector2(90, 80),
    +  EffectController(duration: 1),
    +);
    +
    +
    +
    +
    +

    AnchorByEffect

    +

    Changes the location of the target’s anchor by the specified offset. This effect can also be created +using AnchorEffect.by().

    +
    +
    +
    +anchor_by_effect.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/effects.dart';
    + 3import 'package:flame/game.dart';
    + 4
    + 5class AnchorByEffectGame extends FlameGame {
    + 6  bool reset = false;
    + 7  @override
    + 8  Future<void> onLoad() async {
    + 9    final flower = Flower(
    +10      size: 60,
    +11      position: canvasSize / 2,
    +12      onTap: (flower) {
    +13        if (reset = !reset) {
    +14          flower.add(
    +15            AnchorByEffect(
    +16              Vector2(0.5, 0.5),
    +17              EffectController(speed: 1),
    +18            ),
    +19          );
    +20        } else {
    +21          flower.add(
    +22            AnchorByEffect(
    +23              Vector2(-0.5, -0.5),
    +24              EffectController(speed: 1),
    +25            ),
    +26          );
    +27        }
    +28      },
    +29    );
    +30    add(flower);
    +31  }
    +32}
    +
    +
    +
    +
    +
    final effect = AnchorByEffect(
    +  Vector2(0.1, 0.1),
    +  EffectController(speed: 1),
    +);
    +
    +
    +
    +
    +

    AnchorToEffect

    +

    Changes the location of the target’s anchor. This effect can also be created using +AnchorEffect.to().

    +
    +
    +
    +anchor_to_effect.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/components.dart';
    + 3import 'package:flame/effects.dart';
    + 4import 'package:flame/game.dart';
    + 5
    + 6class AnchorToEffectGame extends FlameGame {
    + 7  @override
    + 8  Future<void> onLoad() async {
    + 9    final flower = Flower(
    +10      size: 60,
    +11      position: canvasSize / 2,
    +12      onTap: (flower) {
    +13        if (flower.anchor == Anchor.center) {
    +14          flower.add(
    +15            AnchorToEffect(
    +16              Anchor.bottomLeft,
    +17              EffectController(speed: 1),
    +18            ),
    +19          );
    +20        } else {
    +21          flower.add(
    +22            AnchorToEffect(
    +23              Anchor.center,
    +24              EffectController(speed: 1),
    +25            ),
    +26          );
    +27        }
    +28      },
    +29    );
    +30    add(flower);
    +31  }
    +32}
    +
    +
    +
    +
    +
    final effect = AnchorToEffect(
    +  Anchor.center,
    +  EffectController(speed: 1),
    +);
    +
    +
    +
    +
    +

    OpacityToEffect

    +

    This effect will change the opacity of the target over time to the specified alpha-value. +It can only be applied to components that implement the OpacityProvider.

    +
    +
    +
    +opacity_to_effect.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/components.dart';
    + 3import 'package:flame/effects.dart';
    + 4import 'package:flame/game.dart';
    + 5
    + 6class OpacityToEffectGame extends FlameGame {
    + 7  bool reset = false;
    + 8
    + 9  @override
    +10  Future<void> onLoad() async {
    +11    final flower = Flower(
    +12      position: size / 2,
    +13      size: 60,
    +14      onTap: _onTap,
    +15    )..anchor = Anchor.center;
    +16
    +17    add(flower);
    +18  }
    +19
    +20  void _onTap(Flower flower) {
    +21    if (reset = !reset) {
    +22      flower.add(
    +23        OpacityEffect.to(
    +24          0.2,
    +25          EffectController(duration: 0.75),
    +26        ),
    +27      );
    +28    } else {
    +29      flower.add(
    +30        OpacityEffect.fadeIn(
    +31          EffectController(duration: 0.75),
    +32        ),
    +33      );
    +34    }
    +35  }
    +36}
    +
    +
    +
    +
    +
    final effect = OpacityEffect.to(
    +  0.2,
    +  EffectController(duration: 0.75),
    +);
    +
    +
    +

    If the component uses multiple paints, the effect can target one more more of those paints +using the target parameter. The HasPaint mixin implements OpacityProvider and exposes APIs +to easily create providers for desired paintIds. For single paintId opacityProviderOf can be used +and for multiple paintIds and opacityProviderOfList can be used.

    +
    +
    +
    +opacity_effect_with_target.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/components.dart';
    + 3import 'package:flame/effects.dart';
    + 4import 'package:flame/game.dart';
    + 5
    + 6class OpacityEffectWithTargetGame extends FlameGame {
    + 7  bool reset = false;
    + 8
    + 9  // This reference needs to be stored because every new instance of
    +10  // OpacityProvider caches the opacity ratios at the time on creation.
    +11  late OpacityProvider _borderOpacityProvider;
    +12
    +13  @override
    +14  Future<void> onLoad() async {
    +15    final flower = Flower(
    +16      position: size / 2,
    +17      size: 60,
    +18      onTap: _onTap,
    +19    )..anchor = Anchor.center;
    +20
    +21    _borderOpacityProvider = flower.opacityProviderOfList(
    +22      paintIds: const [FlowerPaint.paintId1, FlowerPaint.paintId2],
    +23    );
    +24
    +25    add(flower);
    +26  }
    +27
    +28  void _onTap(Flower flower) {
    +29    if (reset = !reset) {
    +30      flower.add(
    +31        OpacityEffect.to(
    +32          0.2,
    +33          EffectController(duration: 0.75),
    +34          target: _borderOpacityProvider,
    +35        ),
    +36      );
    +37    } else {
    +38      flower.add(
    +39        OpacityEffect.fadeIn(
    +40          EffectController(duration: 0.75),
    +41          target: _borderOpacityProvider,
    +42        ),
    +43      );
    +44    }
    +45  }
    +46}
    +
    +
    +
    +
    +
    final effect = OpacityEffect.to(
    +  0.2,
    +  EffectController(duration: 0.75),
    +  target: component.opacityProviderOfList(
    +    paintIds: const [paintId1, paintId2],
    +  ),
    +);
    +
    +
    +

    The opacity value of 0 corresponds to a fully transparent component, and the opacity value of 1 is +fully opaque. Convenience constructors OpacityEffect.fadeOut() and OpacityEffect.fadeIn() will +animate the target into full transparency / full visibility respectively.

    +
    +
    +

    OpacityByEffect

    +

    This effect will change the opacity of the target relative to the specified alpha-value. For example, +the following effect will change the opacity of the target by 90%:

    +
    +
    +
    +opacity_by_effect.dart
    +
     1import 'package:doc_flame_examples/ember.dart';
    + 2import 'package:flame/components.dart';
    + 3import 'package:flame/effects.dart';
    + 4import 'package:flame/game.dart';
    + 5
    + 6class OpacityByEffectGame extends FlameGame {
    + 7  bool reset = false;
    + 8  @override
    + 9  Future<void> onLoad() async {
    +10    final ember = EmberPlayer(
    +11      position: size / 2,
    +12      size: size / 4,
    +13      onTap: (ember) {
    +14        if (reset = !reset) {
    +15          ember.add(
    +16            OpacityEffect.by(
    +17              0.9,
    +18              EffectController(duration: 0.75),
    +19            ),
    +20          );
    +21        } else {
    +22          ember.add(
    +23            OpacityEffect.by(
    +24              -0.9,
    +25              EffectController(duration: 0.75),
    +26            ),
    +27          );
    +28        }
    +29      },
    +30    )..anchor = Anchor.center;
    +31
    +32    add(ember);
    +33  }
    +34}
    +
    +
    +
    +
    +
    final effect = OpacityEffect.by(
    +  0.9,
    +  EffectController(duration: 0.75),
    +);
    +
    +
    +

    Currently this effect can only be applied to components that have a HasPaint mixin. If the target component +uses multiple paints, the effect can target any individual color using the paintId parameter.

    +
    +
    +

    GlowEffect

    +
    +

    Note

    +

    This effect is currently experimental, and its API may change in the future.

    +
    +

    This effect will apply the glowing shade around target relative to the specified +glow-strength. The color of shade will be targets paint color. For example, the following effect +will apply the glowing shade around target by strength of 10:

    +
    +
    +
    +glow_effect.dart
    +
     1import 'package:flame/components.dart';
    + 2import 'package:flame/effects.dart';
    + 3import 'package:flame/game.dart';
    + 4
    + 5import 'package:flutter/material.dart';
    + 6
    + 7class GlowEffectExample extends FlameGame {
    + 8  @override
    + 9  Future<void> onLoad() async {
    +10    final paint = Paint()..color = const Color(0xff39FF14);
    +11
    +12    add(
    +13      CircleComponent(
    +14        radius: size.y / 4,
    +15        position: size / 2,
    +16        anchor: Anchor.center,
    +17        paint: paint,
    +18      )..add(
    +19          GlowEffect(
    +20            10.0,
    +21            EffectController(
    +22              duration: 2,
    +23              infinite: true,
    +24            ),
    +25          ),
    +26        ),
    +27    );
    +28  }
    +29}
    +
    +
    +
    +
    +
    final effect = GlowEffect(
    +  10.0,
    +  EffectController(duration: 3),
    +);
    +
    +
    +

    Currently this effect can only be applied to components that have a HasPaint mixin.

    +
    +
    +

    SequenceEffect

    +

    This effect can be used to run multiple other effects one after another. The constituent effects +may have different types.

    +

    The sequence effect can also be alternating (the sequence will first run forward, and then +backward); and also repeat a certain predetermined number of times, or infinitely.

    +
    +
    +
    +sequence_effect.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/effects.dart';
    + 3import 'package:flame/game.dart';
    + 4
    + 5class SequenceEffectGame extends FlameGame {
    + 6  @override
    + 7  Future<void> onLoad() async {
    + 8    final flower = Flower(
    + 9      size: 40,
    +10      position: canvasSize / 2,
    +11      onTap: (flower) {
    +12        flower.add(
    +13          SequenceEffect([
    +14            ScaleEffect.by(
    +15              Vector2.all(1.5),
    +16              EffectController(duration: 0.2, alternate: true),
    +17            ),
    +18            MoveEffect.by(
    +19              Vector2(30, -50),
    +20              EffectController(duration: 0.5),
    +21            ),
    +22            MoveEffect.by(
    +23              Vector2(-30, 50),
    +24              EffectController(duration: 0.5),
    +25            ),
    +26            ScaleEffect.by(
    +27              Vector2.all(.75),
    +28              EffectController(duration: 0.2, alternate: true),
    +29            ),
    +30          ]),
    +31        );
    +32      },
    +33    );
    +34    add(flower);
    +35  }
    +36}
    +
    +
    +
    +
    +
    final effect = SequenceEffect([
    +  ScaleEffect.by(
    +    Vector2.all(1.5),
    +    EffectController(
    +      duration: 0.2,
    +      alternate: true,
    +    ),
    +  ),
    +  MoveEffect.by(
    +    Vector2(30, -50),
    +    EffectController(
    +      duration: 0.5,
    +    ),
    +  ),
    +  OpacityEffect.to(
    +    0,
    +    EffectController(
    +      duration: 0.3,
    +    ),
    +  ),
    +  RemoveEffect(),
    +]);
    +
    +
    +
    +
    +

    RemoveEffect

    +

    This is a simple effect that can be attached to a component causing it to be removed from the game +tree after the specified delay has passed:

    +
    +
    +
    +remove_effect.dart
    +
     1import 'package:doc_flame_examples/ember.dart';
    + 2import 'package:flame/components.dart';
    + 3import 'package:flame/effects.dart';
    + 4import 'package:flame/events.dart';
    + 5import 'package:flame/game.dart';
    + 6
    + 7class RemoveEffectGame extends FlameGame with TapDetector {
    + 8  static const double delayTime = 3;
    + 9  late EmberPlayer ember;
    +10  late TextComponent textComponent;
    +11  final RemoveEffect effect = RemoveEffect(delay: delayTime);
    +12
    +13  @override
    +14  Future<void> onLoad() async {
    +15    add(
    +16      ember = EmberPlayer(
    +17        position: size / 2,
    +18        size: Vector2(45, 40),
    +19      )..anchor = Anchor.center,
    +20    );
    +21    add(textComponent = TextComponent()..position = Vector2.all(5));
    +22  }
    +23
    +24  @override
    +25  void onTap() {
    +26    if (children.contains(ember)) {
    +27      ember.add(effect);
    +28    } else {
    +29      effect.reset();
    +30      add(ember);
    +31    }
    +32  }
    +33
    +34  @override
    +35  void update(double dt) {
    +36    textComponent.text =
    +37        (effect.controller.progress * delayTime).toStringAsFixed(2);
    +38    super.update(dt);
    +39  }
    +40}
    +
    +
    +
    +
    +
    final effect = RemoveEffect(delay: 3.0);
    +
    +
    +
    +
    +
    +

    ColorEffect

    +

    This effect will change the base color of the paint, causing the rendered component to be tinted by +the provided color between a provided range.

    +

    Usage example:

    +
    +
    +
    +color_effect.dart
    +
     1import 'package:doc_flame_examples/ember.dart';
    + 2import 'package:flame/components.dart';
    + 3import 'package:flame/effects.dart';
    + 4import 'package:flame/game.dart';
    + 5import 'package:flutter/animation.dart';
    + 6import 'package:flutter/cupertino.dart';
    + 7
    + 8class ColorEffectExample extends FlameGame {
    + 9  bool reset = false;
    +10
    +11  @override
    +12  Future<void> onLoad() async {
    +13    final ember = EmberPlayer(
    +14      position: size / 2,
    +15      size: size / 4,
    +16      onTap: (ember) {
    +17        if (reset = !reset) {
    +18          ember.add(
    +19            ColorEffect(
    +20              const Color(0xFF00FF00),
    +21              EffectController(duration: 1.5),
    +22              opacityTo: 0.6,
    +23            ),
    +24          );
    +25        } else {
    +26          ember.add(
    +27            ColorEffect(
    +28              const Color(0xFF1039DB),
    +29              EffectController(duration: 1.5),
    +30              opacityTo: 0.6,
    +31            ),
    +32          );
    +33        }
    +34      },
    +35    )..anchor = Anchor.center;
    +36
    +37    add(ember);
    +38  }
    +39}
    +
    +
    +
    +
    +
    final effect = ColorEffect(
    +  const Color(0xFF00FF00),
    +  EffectController(duration: 1.5),
    +  opacityFrom = 0.2,
    +  opacityTo: 0.8,
    +);
    +
    +
    +

    The opacityFrom and opacityTo arguments will determine “how much” of the color that will be +applied to the component. In this example the effect will start with 20% and will go up to 80%.

    +

    Note: Due to how this effect is implemented, and how Flutter’s ColorFilter class works, this +effect can’t be mixed with other ColorEffects, when more than one is added to the component, only +the last one will have effect.

    +
    +
    +

    Creating new effects

    +

    Although Flame provides a wide array of built-in effects, eventually you may find them to be +insufficient. Luckily, creating new effects is very simple.

    +

    Each effect extends the base Effect class, possibly via one of the more specialized abstract +subclasses such as ComponentEffect<T> or Transform2DEffect.

    +

    The Effect class’ constructor requires an EffectController instance as an argument. In most +cases you may want to pass that controller from your own constructor. Luckily, the effect controller +encapsulates much of the complexity of an effect’s implementation, so you don’t need to worry about +re-creating that functionality.

    +

    Lastly, you will need to implement a single method apply(double progress) that will be called at +each update tick while the effect is active. In this method you are supposed to make changes to the +target of your effect.

    +

    In addition, you may want to implement callbacks onStart() and onFinish() if there are any +actions that must be taken when the effect starts or ends.

    +

    When implementing the apply() method we recommend to use relative updates only. That is, change +the target property by incrementing/decrementing its current value, rather than directly setting +that property to a fixed value. This way multiple effects would be able to act on the same component +without interfering with each other.

    +
    +
    +

    Effect controllers

    +
    +

    EffectController

    +

    The base EffectController class provides a factory constructor capable of creating a variety of +common controllers. The syntax of the constructor is the following:

    +
    EffectController({
    +    required double duration,
    +    Curve curve = Curves.linear,
    +    double? reverseDuration,
    +    Curve? reverseCurve,
    +    bool alternate = false,
    +    double atMaxDuration = 0.0,
    +    double atMinDuration = 0.0,
    +    int? repeatCount,
    +    bool infinite = false,
    +    double startDelay = 0.0,
    +    VoidCallback? onMax,
    +    VoidCallback? onMin,
    +});
    +
    +
    +
      +
    • duration – the length of the main part of the effect, i.e. how long it should take to go +from 0 to 100%. This parameter cannot be negative, but can be zero. If this is the only parameter +specified then the effect will grow linearly over the duration seconds.

    • +
    • curve – if given, creates a non-linear effect that grows from 0 to 100% according to the +provided curve.

    • +
    • reverseDuration – if provided, adds an additional step to the controller: after the effect +has grown from 0 to 100% over the duration seconds, it will then go backwards from 100% to 0 +over the reverseDuration seconds. In addition, the effect will complete at progress level of 0 +(normally the effect completes at progress 1).

    • +
    • reverseCurve – the curve to be used during the “reverse” step of the effect. If not given, +this will default to curve.flipped.

    • +
    • alternate – setting this to true is equivalent to specifying the reverseDuration equal +to the duration. If the reverseDuration is already set, this flag has no effect.

    • +
    • atMaxDuration – if non-zero, this inserts a pause after the effect reaches its max +progress and before the reverse stage. During this time the effect is kept at 100% progress. If +there is no reverse stage, then this will simply be a pause before the effect is marked as +completed.

    • +
    • atMinDuration – if non-zero, this inserts a pause after the reaches its lowest progress +(0) at the end of the reverse stage. During this time, the effect’s progress is at 0%. If there +is no reverse stage, then this pause will still be inserted after the “at-max” pause if it’s +present, or after the forward stage otherwise. In addition, the effect will now complete at +progress level of 0.

    • +
    • repeatCount – if greater than one, it will cause the effect to repeat itself the prescribed +number of times. Each iteration will consists of the forward stage, pause at max, reverse stage, +then pause at min (skipping those that were not specified).

    • +
    • infinite – if true, the effect will repeat infinitely and never reach completion. This is +equivalent to as if repeatCount was set to infinity.

    • +
    • startDelay – an additional wait time inserted before the beginning of the effect. This +wait time is executed only once, even if the effect is repeating. During this time the effect’s +.started property returns false. The effect’s onStart() callback will be executed at the end +of this waiting period.

      +

      Using this parameter is the simplest way to create a chain of effects that execute one after +another (or with an overlap).

      +
    • +
    • onMax – callback function which will be invoked right after reaching its max progress and +before the optional pause and reverse stage.

    • +
    • onMin – callback function which will be invoked right after reaching its lowest progress +at the end of the reverse stage and before the optional pause and forward stage.

    • +
    +

    The effect controller returned by this factory constructor will be composited of multiple simpler +effect controllers described further below. If this constructor proves to be too limited for your +needs, you can always create your own combination from the same building blocks.

    +

    In addition to the factory constructor, the EffectController class defines a number of properties +common for all effect controllers. These properties are:

    +
      +
    • .started – true if the effect has already started. For most effect controllers this property +is always true. The only exception is the DelayedEffectController which returns false while the +effect is in the waiting stage.

    • +
    • .completed – becomes true when the effect controller finishes execution.

    • +
    • .progress – current value of the effect controller, a floating-point value from 0 to 1. This +variable is the main “output” value of an effect controller.

    • +
    • .duration – total duration of the effect, or null if the duration cannot be determined (for +example if the duration is random or infinite).

    • +
    +
    +
    +

    LinearEffectController

    +

    This is the simplest effect controller that grows linearly from 0 to 1 over the specified +duration:

    +
    final ec = LinearEffectController(3);
    +
    +
    +
    +
    +

    ReverseLinearEffectController

    +

    Similar to the LinearEffectController, but it goes in the opposite direction and grows linearly +from 1 to 0 over the specified duration:

    +
    final ec = ReverseLinearEffectController(1);
    +
    +
    +
    +
    +

    CurvedEffectController

    +

    This effect controller grows non-linearly from 0 to 1 over the specified duration and following +the provided curve:

    +
    final ec = CurvedEffectController(0.5, Curves.easeOut);
    +
    +
    +
    +
    +

    ReverseCurvedEffectController

    +

    Similar to the CurvedEffectController, but the controller grows down from 1 to 0 following the +provided curve:

    +
    final ec = ReverseCurvedEffectController(0.5, Curves.bounceInOut);
    +
    +
    +
    +
    +

    PauseEffectController

    +

    This effect controller keeps the progress at a constant value for the specified time duration. +Typically, the progress would be either 0 or 1:

    +
    final ec = PauseEffectController(1.5, progress: 0);
    +
    +
    +
    +
    +

    RepeatedEffectController

    +

    This is a composite effect controller. It takes another effect controller as a child, and repeats +it multiple times, resetting before the start of each next cycle.

    +
    final ec = RepeatedEffectController(LinearEffectController(1), 10);
    +
    +
    +

    The child effect controller cannot be infinite. If the child is random, then it will be +re-initialized with new random values on each iteration.

    +
    +
    +

    InfiniteEffectController

    +

    Similar to the RepeatedEffectController, but repeats its child controller indefinitely.

    +
    final ec = InfiniteEffectController(LinearEffectController(1));
    +
    +
    +
    +
    +

    SequenceEffectController

    +

    Executes a sequence of effect controllers, one after another. The list of controllers cannot be +empty.

    +
    final ec = SequenceEffectController([
    +  LinearEffectController(1),
    +  PauseEffectController(0.2),
    +  ReverseLinearEffectController(1),
    +]);
    +
    +
    +
    +
    +

    SpeedEffectController

    +

    Alters the duration of its child effect controller so that the effect proceeds at the predefined +speed. The initial duration of the child EffectController is irrelevant. The child controller must +be the subclass of DurationEffectController.

    +

    The SpeedEffectController can only be applied to effects for which the notion of speed is +well-defined. Such effects must implement the MeasurableEffect interface. For example, the +following effects qualify: MoveByEffect, MoveToEffect, +MoveAlongPathEffect, RotateEffect.by, +RotateEffect.to.

    +

    The parameter speed is in units per second, where the notion of a “unit” depends on the target +effect. For example, for move effects, they refer to the distance traveled; for rotation effects +the units are radians.

    +
    final ec1 = SpeedEffectController(LinearEffectController(0), speed: 1);
    +final ec2 = EffectController(speed: 1); // same as ec1
    +
    +
    +
    +
    +

    DelayedEffectController

    +

    Effect controller that executes its child controller after the prescribed delay. While the +controller is executing the “delay” stage, the effect will be considered “not started”, i.e. its +.started property will be returning false.

    +
    final ec = DelayedEffectController(LinearEffectController(1), delay: 5);
    +
    +
    +
    +
    +

    NoiseEffectController

    +

    This effect controller exhibits noisy behavior, i.e. it oscillates randomly around zero. Such effect +controller can be used to implement a variety of shake effects.

    +
    final ec = NoiseEffectController(duration: 0.6, frequency: 10);
    +
    +
    +
    +
    +

    RandomEffectController

    +

    This controller wraps another controller and makes its duration random. The actual value for the +duration is re-generated upon each reset, which makes this controller particularly useful within +repeated contexts, such as RepeatedEffectController or InfiniteEffectController.

    +
    final ec = RandomEffectController.uniform(
    +  LinearEffectController(0),  // duration here is irrelevant
    +  min: 0.5,
    +  max: 1.5,
    +);
    +
    +
    +

    The user has the ability to control which Random source to use, as well as the exact distribution +of the produced random durations. Two distributions – .uniform and .exponential are included, +any other can be implemented by the user.

    +
    +
    +

    SineEffectController

    +

    An effect controller that represents a single period of the sine function. Use this to create +natural-looking harmonic oscillations. Two perpendicular move effects governed by +SineEffectControllers with different periods, will create a Lissajous curve.

    +
    final ec = SineEffectController(period: 1);
    +
    +
    +
    +
    +

    ZigzagEffectController

    +

    Simple alternating effect controller. Over the course of one period, this controller will proceed +linearly from 0 to 1, then to -1, and then back to 0. Use this for oscillating effects where the +starting position should be the center of the oscillations, rather than the extreme (as provided +by the standard alternating EffectController).

    +
    final ec = ZigzagEffectController(period: 2);
    +
    +
    +
    +
    +
    +

    See also

    + +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/flame.html b/docs/1.18.0/flame/flame.html new file mode 100644 index 000000000..de69712a9 --- /dev/null +++ b/docs/1.18.0/flame/flame.html @@ -0,0 +1,389 @@ + + + + + + + Flame — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + + + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/game.html b/docs/1.18.0/flame/game.html new file mode 100644 index 000000000..99d3ec58c --- /dev/null +++ b/docs/1.18.0/flame/game.html @@ -0,0 +1,684 @@ + + + + + + + FlameGame — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    FlameGame

    +

    The FlameGame class implements a Component based Game. It has a tree of components +and calls the update and render methods of all components that have been added to the game.

    +

    We refer to this component-based system as the Flame Component System (FCS). Throughout the +documentation, FCS is used to reference this system.

    +

    Components can be added to the FlameGame directly in the constructor with the named children +argument, or from anywhere else with the add/addAll methods. Most of the time however, you want +to add your children to a World, the default world exist under FlameGame.world and you add +components to it just like you would to any other component.

    +

    A simple FlameGame implementation that adds two components, one in onLoad and one directly in +the constructor can look like this:

    +
    import 'package:flame/components.dart';
    +import 'package:flame/game.dart';
    +import 'package:flutter/widgets.dart';
    +
    +/// A component that renders the crate sprite, with a 16 x 16 size.
    +class MyCrate extends SpriteComponent {
    +  MyCrate() : super(size: Vector2.all(16));
    +
    +  @override
    +  Future<void> onLoad() async {
    +    sprite = await Sprite.load('crate.png');
    +  }
    +}
    +
    +class MyWorld extends World {
    +  @override
    +  Future<void> onLoad() async {
    +    await add(MyCrate());
    +  }
    +}
    +
    +void main() {
    +  final myGame = FlameGame(world: MyWorld());
    +  runApp(
    +    GameWidget(game: myGame),
    +  );
    +}
    +
    +
    +
    +

    Note

    +

    If you instantiate your game in a build method your game will be rebuilt every +time the Flutter tree gets rebuilt, which usually is more often than you’d like. +To avoid this, you can either create an instance of your game first and +reference it within your widget structure or use the GameWidget.controlled +constructor.

    +
    +

    To remove components from the list on a FlameGame the remove or removeAll methods can be used. +The first can be used if you just want to remove one component, and the second can be used when you +want to remove a list of components. These methods exist on all Components, including the world.

    +
    +

    Game Loop

    +

    The GameLoop module is a simple abstraction of the game loop concept. Basically, most games are +built upon two methods:

    +
      +
    • The render method takes the canvas for drawing the current state of the game.

    • +
    • The update method receives the delta time in microseconds since the last update and allows you to +move to the next state.

    • +
    +

    The GameLoop is used by all of Flame’s Game implementations.

    +
    +
    +

    Resizing

    +

    Every time the game needs to be resized, for example when the orientation is changed, FlameGame +will call all of the Components onGameResize methods and it will also pass this information to +the camera and viewport.

    +

    The FlameGame.camera controls which point in the coordinate space that should be at the anchor of +your viewfinder, [0,0] is in the center (Anchor.center) of the viewport by default.

    +
    +
    +

    Lifecycle

    +

    The FlameGame lifecycle callbacks, onLoad, render, etc. are called in the following sequence:

    +
    + %%{init: { 'theme': 'dark' } }%% + + graph TD + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + x(Runs Each Tick) + y(Runs On Add & Resize):::lightYellow + z(Runs Once):::yellow + +
    + %%{init: { 'theme': 'dark' } }%% + graph LR + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef lightYellow fill:#523F00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000000; + + %% Nodes %% + + A(onGameResize):::lightYellow + B(onLoad):::yellow + C(onMount):::yellow + D(update) + E(render) + F(onRemove):::yellow + + %% Flow %% + + A-->B + B-->C + C-->D + D-->E + E-->D + E-. If removed .->F + F-. If re-parented .->A + +

    When a FlameGame is first added to a GameWidget the lifecycle methods onGameResize, onLoad +and onMount will be called in that order. Then update and render are called in sequence for +every game tick. If the FlameGame is removed from the GameWidget then onRemove is called. +If the FlameGame is added to a new GameWidget the sequence repeats from onGameResize.

    +
    +

    Note

    +

    The order of onGameResizeand onLoad are reversed from that of other +Components. This is to allow game element sizes to be calculated before +resources are loaded or generated.

    +
    +

    The onRemove callback can be used to clean up children and cached data:

    +
      @override
    +  void onRemove() {
    +    // Optional based on your game needs.
    +    removeAll(children);
    +    processLifecycleEvents();
    +    Flame.images.clearCache();
    +    Flame.assets.clearCache();
    +    // Any other code that you want to run when the game is removed.
    +  }
    +
    +
    +
    +

    Note

    +

    Clean-up of children and resources in a FlameGame is not done automatically +and must be explicitly added to the onRemove call.

    +
    +
    +
    +

    Debug mode

    +

    Flame’s FlameGame class provides a variable called debugMode, which by default is false. It +can, however, be set to true to enable debug features for the components of the game. Be aware +that the value of this variable is passed through to its components when they are added to the +game, so if you change the debugMode at runtime, it will not affect already added components by +default.

    +

    To read more about the debugMode on Flame, please refer to the Debug Docs

    +
    +
    +

    Change background color

    +

    To change the background color of your FlameGame you have to override backgroundColor().

    +

    In the following example, the background color is set to be fully transparent, so that you can see +the widgets that are behind the GameWidget. The default is opaque black.

    +
    class MyGame extends FlameGame {
    +  @override
    +  Color backgroundColor() => const Color(0x00000000);
    +}
    +
    +
    +

    Note that the background color can’t change dynamically while the game is running, but you could +just draw a background that covers the whole canvas if you would want it to change dynamically.

    +
    +
    +

    SingleGameInstance mixin

    +

    An optional mixin SingleGameInstance can be applied to your game if you are making a single-game +application. This is a common scenario when building games: there is a single full-screen +GameWidget that hosts a single Game instance.

    +

    Adding this mixin provides performance advantages in certain scenarios. In particular, a component’s +onLoad method is guaranteed to start when that component is added to its parent, even if the +parent is not yet mounted itself. Consequently, await-ing on parent.add(component) is guaranteed +to always finish loading the component.

    +

    Using this mixin is simple:

    +
    class MyGame extends FlameGame with SingleGameInstance {
    +  // ...
    +}
    +
    +
    +
    +
    +

    Low-level Game API

    +
    + %%{init: { 'theme': 'dark' } }%% + graph TD + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000; + + %% Nodes %% + + z(Abstract Class):::yellow + x(Normal Class) +
    + %%{init: { 'theme': 'dark' } }%% + + graph BT + + %% Node Color %% + classDef default fill:#282828,stroke:#F6BE00,stroke-width:2px; + classDef yellow fill:#F6BE00,color:#000; + + %% Nodes %% + + A(OxygenGame) + B(Game):::yellow + C(FlameGame) + D(Component) + E(Other Components) + F(GameWidget) + + %% Flow %% + + A-- Extends -->B + F-- Wants -->B + + C-- Extends -->D + E-- Extends -->D + + C-- With -->B +

    The abstract Game class is a low-level API that can be used when you want to implement the +functionality of how the game engine should be structured. Game does not implement any update or +render function for example.

    +

    The class also has the lifecycle methods onLoad, onMount and onRemove in it, which are +called from the GameWidget (or another parent) when the game is loaded + mounted, or removed. +onLoad is only called the first time the class is added to a parent, but onMount (which is +called after onLoad) is called every time it is added to a new parent. onRemove is called when +the class is removed from a parent.

    +
    +

    Note

    +

    The Game class allows for more freedom of how to implement things, but you +are also missing out on all of the built-in features in Flame if you use it.

    +
    +

    An example of how a Game implementation could look like is:

    +
    class MyGameSubClass extends Game {
    +  @override
    +  void render(Canvas canvas) {
    +    // ...
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    // ...
    +  }
    +}
    +
    +void main() {
    +  final myGame = MyGameSubClass();
    +  runApp(
    +    GameWidget(
    +      game: myGame,
    +    )
    +  );
    +}
    +
    +
    +
    +
    +

    Pause/Resuming/Stepping game execution

    +

    A Flame Game can be paused and resumed in two ways:

    +
      +
    • With the use of the pauseEngine and resumeEngine methods.

    • +
    • By changing the paused attribute.

    • +
    +

    When pausing a Game, the GameLoop is effectively paused, meaning that no updates or new renders +will happen until it is resumed.

    +

    While the game is paused, it is possible to advanced it frame by frame using the stepEngine +method. +It might not be much useful in the final game, but can be very helpful in inspecting game state step +by step during the development cycle.

    +
    +

    Backgrounding

    +

    The game will be automatically paused when the app is sent to the background, +and resumed when it comes back to the foreground. This behavior can be disabled by setting +pauseWhenBackgrounded to false.

    +
    class MyGame extends FlameGame {
    +  MyGame() {
    +    pauseWhenBackgrounded = false;
    +  }
    +}
    +
    +
    +

    On the current Flutter stable (3.13), this flag is effectively ignored on +non-mobile platforms including the web.

    +
    +
    +
    +

    HasPerformanceTracker mixin

    +

    While optimizing a game, it can be useful to track the time it took for the game to update and render +each frame. This data can help in detecting areas of the code that are running hot. It can also help +in detecting visual areas of the game that are taking the most time to render.

    +

    To get the update and render times, just add the HasPerformanceTracker mixin to the game class.

    +
    class MyGame extends FlameGame with HasPerformanceTracker {
    +  // access `updateTime` and `renderTime` getters.
    +}
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/game_widget.html b/docs/1.18.0/flame/game_widget.html new file mode 100644 index 000000000..78e7f7ef0 --- /dev/null +++ b/docs/1.18.0/flame/game_widget.html @@ -0,0 +1,570 @@ + + + + + + + Game Widget — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Game Widget

    +
    +
    +
    +
    +class GameWidget<T extends Game>
    +
    +extends StatefulWidget
    +
    +
    +

    The GameWidget is a Flutter widget which is used to insert a Game +instance into the Flutter widget tree.

    +

    The GameWidget is sufficiently feature-rich to run as the root of your +Flutter application. Thus, the simplest way to use GameWidget is like +this:

    +
    void main() {
    +  runApp(
    +    GameWidget(game: MyGame()),
    +  );
    +}
    +
    +
    +

    At the same time, GameWidget is a regular Flutter widget, and can be +inserted arbitrarily deep into the widget tree, including the possibility +of having multiple GameWidgets within a single app.

    +

    The layout behavior of this widget is that it will expand to fill all +available space. Thus, when used as a root widget it will make the app +full-screen. Inside any other layout widget it will take as much space as +possible.

    +

    In addition to hosting a Game instance, the GameWidget also provides +some structural support, with the following features:

    + +

    It should be noted that GameWidget does not clip the content of its +canvas, which means the game can potentially draw outside of its boundaries +(not always, depending on which camera is used). If this is not desired, +then consider wrapping the widget in Flutter’s ClipRect.

    +
    +
    +

    Constructors

    +
    +
    +
    +GameWidget({required this.game, this.textDirection, this.loadingBuilder, this.errorBuilder, this.backgroundBuilder, this.overlayBuilderMap, this.initialActiveOverlays, this.focusNode, this.autofocus = true, this.mouseCursor, this.addRepaintBoundary = true, super.key})
    +
    +
    +

    Renders the provided game instance.

    +
    +
    +
    +
    +
    +GameWidget.controlled({required this.gameFactory, this.textDirection, this.loadingBuilder, this.errorBuilder, this.backgroundBuilder, this.overlayBuilderMap, this.initialActiveOverlays, this.focusNode, this.autofocus = true, this.mouseCursor, this.addRepaintBoundary = true, super.key})
    +
    +
    +

    A GameWidget which will create and own a Game instance, using the +provided gameFactory.

    +

    This constructor can be useful when you want to put GameWidget into +another widget, but would like to avoid the need to store the game’s +instance yourself. For example:

    +
    class MyWidget extends StatelessWidget {
    +  @override
    +  Widget build(BuildContext context) {
    +    return Container(
    +      padding: EdgeInsets.all(20),
    +      child: GameWidget.controlled(
    +        gameFactory: MyGame.new,
    +      ),
    +    );
    +  }
    +}
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +game : T?
    +
    +

    The game instance which this widget will render, if it was provided with +the default constructor. Otherwise, if the GameWidget.controlled +constructor was used, this will always be null.

    +
    +
    +
    +
    +gameFactory : GameFactory<T>?
    +
    +

    A function that creates a Game that this widget will render.

    +
    +
    +
    +
    +textDirection : TextDirection?
    +
    +

    The text direction to be used in text elements in a game.

    +
    +
    +
    +
    +loadingBuilder : GameLoadingWidgetBuilder?
    +
    +

    Builder to provide a widget which will be displayed while the game is +loading. By default this is an empty Container.

    +
    +
    +
    +
    +errorBuilder : GameErrorWidgetBuilder?
    +
    +

    If set, errors during the game loading will be caught and this widget +will be shown. If not provided, errors are propagated normally.

    +
    +
    +
    +
    +backgroundBuilder : WidgetBuilder?
    +
    +

    Builder to provide a widget tree to be built between the game elements and +the background color provided via Game.backgroundColor.

    +
    +
    +
    +
    +overlayBuilderMap : Map<String, OverlayWidgetBuilder<T>>?
    +
    +

    A collection of widgets that can be displayed over the game’s surface. +These widgets can be turned on-and-off dynamically from within the game +via the Game.overlays property.

    +
    void main() {
    +  runApp(
    +    GameWidget(
    +      game: MyGame(),
    +      overlayBuilderMap: {
    +        'PauseMenu': (context, game) {
    +          return Container(
    +            color: const Color(0xFF000000),
    +            child: Text('A pause menu'),
    +          );
    +        },
    +      },
    +    ),
    +  );
    +}
    +
    +
    +
    +
    +
    +
    +initialActiveOverlays : List<String>?
    +
    +

    The list of overlays that will be shown when the game starts (but after +it was loaded).

    +
    +
    +
    +
    +focusNode : FocusNode?
    +
    +

    The FocusNode to control the games focus to receive event inputs. +If omitted, defaults to an internally controlled focus node.

    +
    +
    +
    +
    +autofocus : bool
    +
    +

    Whether the focusNode requests focus once the game is mounted. +Defaults to true.

    +
    +
    +
    +
    +mouseCursor : MouseCursor?
    +
    +

    The shape of the mouse cursor when it is hovering over the game canvas. +This property can be changed dynamically via Game.mouseCursor.

    +
    +
    +
    +
    +addRepaintBoundary : bool
    +
    +

    Whether the game should assume the behavior of a RepaintBoundary, +defaults to true.

    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/inputs/drag_events.html b/docs/1.18.0/flame/inputs/drag_events.html new file mode 100644 index 000000000..743f588cc --- /dev/null +++ b/docs/1.18.0/flame/inputs/drag_events.html @@ -0,0 +1,743 @@ + + + + + + + Drag Events — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Drag Events

    +

    Drag events occur when the user moves their finger across the screen of the device, or when they +move the mouse while holding its button down.

    +

    Multiple drag events can occur at the same time, if the user is using multiple fingers. Such cases +will be handled correctly by Flame, and you can even keep track of the events by using their +pointerId property.

    +

    For those components that you want to respond to drags, add the DragCallbacks mixin.

    +
      +
    • This mixin adds four overridable methods to your component: onDragStart, onDragUpdate, +onDragEnd, and onDragCancel. By default, these methods do nothing – they need to be +overridden in order to perform any function.

    • +
    • In addition, the component must implement the containsLocalPoint() method (already implemented +in PositionComponent, so most of the time you don’t need to do anything here) – this method +allows Flame to know whether the event occurred within the component or not.

    • +
    +
    class MyComponent extends PositionComponent with DragCallbacks {
    +  MyComponent() : super(size: Vector2(180, 120));
    +
    +   @override
    +   void onDragStart(DragStartEvent event) {
    +     // Do something in response to a drag event
    +   }
    +}
    +
    +
    +
    +

    Demo

    +

    In this example you can use drag gestures to either drag star-like shapes across the screen, or to +draw curves inside the magenta rectangle.

    +
    +
    +drag_events.dart
    +
      1import 'dart:math';
    +  2
    +  3import 'package:flame/components.dart';
    +  4import 'package:flame/events.dart';
    +  5import 'package:flame/game.dart';
    +  6import 'package:flame/geometry.dart';
    +  7import 'package:flutter/rendering.dart';
    +  8
    +  9class DragEventsGame extends FlameGame {
    + 10  @override
    + 11  Future<void> onLoad() async {
    + 12    addAll([
    + 13      DragTarget(),
    + 14      Star(
    + 15        n: 5,
    + 16        radius1: 40,
    + 17        radius2: 20,
    + 18        sharpness: 0.2,
    + 19        color: const Color(0xffbae5ad),
    + 20        position: Vector2(70, 70),
    + 21      ),
    + 22      Star(
    + 23        n: 3,
    + 24        radius1: 50,
    + 25        radius2: 40,
    + 26        sharpness: 0.3,
    + 27        color: const Color(0xff6ecbe5),
    + 28        position: Vector2(70, 160),
    + 29      ),
    + 30      Star(
    + 31        n: 12,
    + 32        radius1: 10,
    + 33        radius2: 75,
    + 34        sharpness: 1.3,
    + 35        color: const Color(0xfff6df6a),
    + 36        position: Vector2(70, 270),
    + 37      ),
    + 38      Star(
    + 39        n: 10,
    + 40        radius1: 20,
    + 41        radius2: 17,
    + 42        sharpness: 0.85,
    + 43        color: const Color(0xfff82a4b),
    + 44        position: Vector2(110, 110),
    + 45      ),
    + 46    ]);
    + 47  }
    + 48}
    + 49
    + 50/// This component is the pink-ish rectangle in the center of the game window.
    + 51/// It uses the [DragCallbacks] mixin in order to receive drag events.
    + 52class DragTarget extends PositionComponent with DragCallbacks {
    + 53  DragTarget() : super(anchor: Anchor.center);
    + 54
    + 55  final _rectPaint = Paint()..color = const Color(0x88AC54BF);
    + 56
    + 57  /// We will store all current circles into this map, keyed by the `pointerId`
    + 58  /// of the event that created the circle.
    + 59  final Map<int, Trail> _trails = {};
    + 60
    + 61  @override
    + 62  void onGameResize(Vector2 size) {
    + 63    super.onGameResize(size);
    + 64    this.size = size - Vector2(100, 75);
    + 65    if (this.size.x < 100 || this.size.y < 100) {
    + 66      this.size = size * 0.9;
    + 67    }
    + 68    position = size / 2;
    + 69  }
    + 70
    + 71  @override
    + 72  void render(Canvas canvas) {
    + 73    canvas.drawRect(size.toRect(), _rectPaint);
    + 74  }
    + 75
    + 76  @override
    + 77  void onDragStart(DragStartEvent event) {
    + 78    super.onDragStart(event);
    + 79    final trail = Trail(event.localPosition);
    + 80    _trails[event.pointerId] = trail;
    + 81    add(trail);
    + 82  }
    + 83
    + 84  @override
    + 85  void onDragUpdate(DragUpdateEvent event) {
    + 86    _trails[event.pointerId]!.addPoint(event.localEndPosition);
    + 87  }
    + 88
    + 89  @override
    + 90  void onDragEnd(DragEndEvent event) {
    + 91    super.onDragEnd(event);
    + 92    _trails.remove(event.pointerId)!.end();
    + 93  }
    + 94
    + 95  @override
    + 96  void onDragCancel(DragCancelEvent event) {
    + 97    super.onDragCancel(event);
    + 98    _trails.remove(event.pointerId)!.cancel();
    + 99  }
    +100}
    +101
    +102class Trail extends Component {
    +103  Trail(Vector2 origin)
    +104      : _paths = [Path()..moveTo(origin.x, origin.y)],
    +105        _opacities = [1],
    +106        _lastPoint = origin.clone(),
    +107        _color =
    +108            HSLColor.fromAHSL(1, random.nextDouble() * 360, 1, 0.8).toColor();
    +109
    +110  final List<Path> _paths;
    +111  final List<double> _opacities;
    +112  Color _color;
    +113  late final _linePaint = Paint()..style = PaintingStyle.stroke;
    +114  late final _circlePaint = Paint()..color = _color;
    +115  bool _released = false;
    +116  double _timer = 0;
    +117  final _vanishInterval = 0.03;
    +118  final Vector2 _lastPoint;
    +119
    +120  static final random = Random();
    +121  static const lineWidth = 10.0;
    +122
    +123  @override
    +124  void render(Canvas canvas) {
    +125    assert(_paths.length == _opacities.length);
    +126    for (var i = 0; i < _paths.length; i++) {
    +127      final path = _paths[i];
    +128      final opacity = _opacities[i];
    +129      if (opacity > 0) {
    +130        _linePaint.color = _color.withOpacity(opacity);
    +131        _linePaint.strokeWidth = lineWidth * opacity;
    +132        canvas.drawPath(path, _linePaint);
    +133      }
    +134    }
    +135    canvas.drawCircle(
    +136      _lastPoint.toOffset(),
    +137      (lineWidth - 2) * _opacities.last + 2,
    +138      _circlePaint,
    +139    );
    +140  }
    +141
    +142  @override
    +143  void update(double dt) {
    +144    assert(_paths.length == _opacities.length);
    +145    _timer += dt;
    +146    while (_timer > _vanishInterval) {
    +147      _timer -= _vanishInterval;
    +148      for (var i = 0; i < _paths.length; i++) {
    +149        _opacities[i] -= 0.01;
    +150        if (_opacities[i] <= 0) {
    +151          _paths[i].reset();
    +152        }
    +153      }
    +154      if (!_released) {
    +155        _paths.add(Path()..moveTo(_lastPoint.x, _lastPoint.y));
    +156        _opacities.add(1);
    +157      }
    +158    }
    +159    if (_opacities.last < 0) {
    +160      removeFromParent();
    +161    }
    +162  }
    +163
    +164  void addPoint(Vector2 point) {
    +165    if (!point.x.isNaN) {
    +166      for (final path in _paths) {
    +167        path.lineTo(point.x, point.y);
    +168      }
    +169      _lastPoint.setFrom(point);
    +170    }
    +171  }
    +172
    +173  void end() => _released = true;
    +174
    +175  void cancel() {
    +176    _released = true;
    +177    _color = const Color(0xFFFFFFFF);
    +178  }
    +179}
    +180
    +181class Star extends PositionComponent with DragCallbacks {
    +182  Star({
    +183    required int n,
    +184    required double radius1,
    +185    required double radius2,
    +186    required double sharpness,
    +187    required this.color,
    +188    super.position,
    +189  }) {
    +190    _path = Path()..moveTo(radius1, 0);
    +191    for (var i = 0; i < n; i++) {
    +192      final p1 = Vector2(radius2, 0)..rotate(tau / n * (i + sharpness));
    +193      final p2 = Vector2(radius2, 0)..rotate(tau / n * (i + 1 - sharpness));
    +194      final p3 = Vector2(radius1, 0)..rotate(tau / n * (i + 1));
    +195      _path.cubicTo(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
    +196    }
    +197    _path.close();
    +198  }
    +199
    +200  final Color color;
    +201  final Paint _paint = Paint();
    +202  final Paint _borderPaint = Paint()
    +203    ..color = const Color(0xFFffffff)
    +204    ..style = PaintingStyle.stroke
    +205    ..strokeWidth = 3;
    +206  final _shadowPaint = Paint()
    +207    ..color = const Color(0xFF000000)
    +208    ..maskFilter = const MaskFilter.blur(BlurStyle.normal, 4.0);
    +209  late final Path _path;
    +210
    +211  @override
    +212  bool containsLocalPoint(Vector2 point) {
    +213    return _path.contains(point.toOffset());
    +214  }
    +215
    +216  @override
    +217  void render(Canvas canvas) {
    +218    if (isDragged) {
    +219      _paint.color = color.withOpacity(0.5);
    +220      canvas.drawPath(_path, _paint);
    +221      canvas.drawPath(_path, _borderPaint);
    +222    } else {
    +223      _paint.color = color.withOpacity(1);
    +224      canvas.drawPath(_path, _shadowPaint);
    +225      canvas.drawPath(_path, _paint);
    +226    }
    +227  }
    +228
    +229  @override
    +230  void onDragStart(DragStartEvent event) {
    +231    super.onDragStart(event);
    +232    priority = 10;
    +233  }
    +234
    +235  @override
    +236  void onDragEnd(DragEndEvent event) {
    +237    super.onDragEnd(event);
    +238    priority = 0;
    +239  }
    +240
    +241  @override
    +242  void onDragUpdate(DragUpdateEvent event) {
    +243    position += event.localDelta;
    +244  }
    +245}
    +
    +
    +
    +
    +
    +

    Drag anatomy

    +
    +

    onDragStart

    +

    This is the first event that occurs in a drag sequence. Usually, the event will be delivered to the +topmost component at the point of touch with the DragCallbacks mixin. However, by setting the flag +event.continuePropagation to true, you can allow the event to propagate to the components below.

    +

    The DragStartEvent object associated with this event will contain the coordinate of the point +where the event has originated. This point is available in multiple coordinate system: +devicePosition is given in the coordinate system of the entire device, canvasPosition is in the +coordinate system of the game widget, and localPosition provides the position in the component’s +local coordinate system.

    +

    Any component that receives onDragStart will later be receiving onDragUpdate and onDragEnd +events as well.

    +
    +
    +

    onDragUpdate

    +

    This event is fired continuously as user drags their finger across the screen. It will not fire if +the user is holding their finger still.

    +

    The default implementation delivers this event to all the components that received the previous +onDragStart with the same pointer id. If the point of touch is still within the component, then +event.localPosition will give the position of that point in the local coordinate system. However, +if the user moves their finger away from the component, the property event.localPosition will +return a point whose coordinates are NaNs. Likewise, the event.renderingTrace in this case will be +empty. However, the canvasPosition and devicePosition properties of the event will be valid.

    +

    In addition, the DragUpdateEvent will contain delta – the amount the finger has moved since the +previous onDragUpdate, or since the onDragStart if this is the first drag-update after a drag- +start.

    +

    The event.timestamp property measures the time elapsed since the beginning of the drag. It can be +used, for example, to compute the speed of the movement.

    +
    +
    +

    onDragEnd

    +

    This event is fired when the user lifts their finger and thus stops the drag gesture. There is no +position associated with this event.

    +
    +
    +

    onDragCancel

    +

    The precise semantics when this event occurs is not clear, so we provide a default implementation +which simply converts this event into an onDragEnd.

    +
    +
    +
    +

    Mixins

    +
    +

    DragCallbacks

    +

    The DragCallbacks mixin can be added to any Component in order for that component to start +receiving drag events.

    +

    This mixin adds methods onDragStart, onDragUpdate, onDragEnd, and onDragCancel to the +component, which by default don’t do anything, but can be overridden to implement any real +functionality.

    +

    Another crucial detail is that a component will only receive drag events that originate within +that component, as judged by the containsLocalPoint() function. The commonly-used +PositionComponent class provides such an implementation based on its size property. Thus, if +your component derives from a PositionComponent, then make sure that you set its size correctly. +If, however, your component derives from the bare Component, then the containsLocalPoint() +method must be implemented manually.

    +

    If your component is a part of a larger hierarchy, then it will only receive drag events if its +ancestors have all implemented the containsLocalPoint correctly.

    +
    class MyComponent extends PositionComponent with DragCallbacks {
    +  MyComponent({super.size});
    +
    +  final _paint = Paint();
    +  bool _isDragged = false;
    +
    +  @override
    +  void onDragStart(DragStartEvent event) => _isDragged = true;
    +
    +  @override
    +  void onDragUpdate(DragUpdateEvent event) => position += event.delta;
    +
    +  @override
    +  void onDragEnd(DragEndEvent event) => _isDragged = false;
    +
    +  @override
    +  void render(Canvas canvas) {
    +    _paint.color = _isDragged? Colors.red : Colors.white;
    +    canvas.drawRect(size.toRect(), _paint);
    +  }
    +}
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/inputs/gesture_input.html b/docs/1.18.0/flame/inputs/gesture_input.html new file mode 100644 index 000000000..8fdb7864c --- /dev/null +++ b/docs/1.18.0/flame/inputs/gesture_input.html @@ -0,0 +1,590 @@ + + + + + + + Gesture Input — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Gesture Input

    +

    This is documentation for gesture inputs attached directly on the game class, most of the time you +want to detect input on your components instead, see for example the TapCallbacks +and DragCallbacks for that.

    +

    For other input documents, see also:

    + +
    +

    Intro

    +

    Inside package:flame/gestures.dart you can find a whole set of mixins which can be included on +your game class instance to be able to receive touch input events. Below you can see the full list +of these mixins and its methods:

    +
    +
    +

    Touch and mouse detectors

    +
    - TapDetector
    +  - onTap
    +  - onTapCancel
    +  - onTapDown
    +  - onLongTapDown
    +  - onTapUp
    +
    +- SecondaryTapDetector
    +  - onSecondaryTapDown
    +  - onSecondaryTapUp
    +  - onSecondaryTapCancel
    +
    +- TertiaryTapDetector
    +  - onTertiaryTapDown
    +  - onTertiaryTapUp
    +  - onTertiaryTapCancel
    +
    +- DoubleTapDetector
    +  - onDoubleTap
    +
    +- LongPressDetector
    +  - onLongPress
    +  - onLongPressStart
    +  - onLongPressMoveUpdate
    +  - onLongPressUp
    +  - onLongPressEnd
    +
    +- VerticalDragDetector
    +  - onVerticalDragDown
    +  - onVerticalDragStart
    +  - onVerticalDragUpdate
    +  - onVerticalDragEnd
    +  - onVerticalDragCancel
    +
    +- HorizontalDragDetector
    +  - onHorizontalDragDown
    +  - onHorizontalDragStart
    +  - onHorizontalDragUpdate
    +  - onHorizontalDragEnd
    +  - onHorizontalDragCancel
    +
    +- ForcePressDetector
    +  - onForcePressStart
    +  - onForcePressPeak
    +  - onForcePressUpdate
    +  - onForcePressEnd
    +
    +- PanDetector
    +  - onPanDown
    +  - onPanStart
    +  - onPanUpdate
    +  - onPanEnd
    +  - onPanCancel
    +
    +- ScaleDetector
    +  - onScaleStart
    +  - onScaleUpdate
    +  - onScaleEnd
    +
    +- MultiTouchTapDetector
    +  - onTap
    +  - onTapCancel
    +  - onTapDown
    +  - onTapUp
    +
    +- MultiTouchDragDetector
    +  - onReceiveDrag
    +
    +
    +

    Mouse only events

    +
     - MouseMovementDetector
    +  - onMouseMove
    + - ScrollDetector
    +  - onScroll
    +
    +
    +

    It is not possible to mix advanced detectors (MultiTouch*) with basic detectors of the same +kind, since the advanced detectors will always win the gesture arena and the basic detectors will +never be triggered. So for example, you can’t use both MultiTouchTapDetector and PanDetector +together, since no events will be triggered for the latter (there is also an assertion for this).

    +

    Flame’s GestureApi is provided by Flutter’s Gesture Widgets, including +GestureDetector widget, +RawGestureDetector widget +and MouseRegion widget, you can +also read more about Flutter’s gestures +here.

    +
    +
    +

    PanDetector and ScaleDetector

    +

    If you add a PanDetector together with a ScaleDetector you will be prompted with a quite cryptic +assertion from Flutter that says:

    +
    +

    Note

    +

    Having both a pan gesture recognizer and a scale gesture recognizer is +redundant; scale is a superset of pan.

    +

    Just use the scale gesture recognizer.

    +
    +

    This might seem strange, but onScaleUpdate is not only triggered when the scale should be changed, +but for all pan/drag events too. So if you need to use both of those detectors you’ll have to handle +both of their logic inside onScaleUpdate (+onScaleStart and onScaleEnd).

    +

    For example you could do something like this if you want to move the camera on pan events and zoom +on scale events:

    +
      late double startZoom;
    +
    +  @override
    +  void onScaleStart(_) {
    +    startZoom = camera.zoom;
    +  }
    +
    +  @override
    +  void onScaleUpdate(ScaleUpdateInfo info) {
    +    final currentScale = info.scale.global;
    +    if (!currentScale.isIdentity()) {
    +      camera.zoom = startZoom * currentScale.y;
    +    } else {
    +      camera.translateBy(-info.delta.global);
    +      camera.snap();
    +    }
    +  }
    +
    +
    +

    In the example above the pan events are handled with info.delta and the scale events with +info.scale, although they are theoretically both from underlying scale events.

    +

    This can also be seen in the +zoom example.

    +
    +
    +

    Mouse cursor

    +

    It is also possible to change the current mouse cursor displayed on the GameWidget region. To do +so the following code can be used inside the Game class

    +
    mouseCursor.value = SystemMouseCursors.move;
    +
    +
    +

    To already initialize the GameWidget with a custom cursor, the mouseCursor property can be used

    +
    GameWidget(
    +  game: MouseCursorGame(),
    +  mouseCursor: SystemMouseCursors.move,
    +);
    +
    +
    +
    +
    +

    Event coordinate system

    +

    On events that have positions, like for example Tap* or Drag, you will notice that the +eventPosition attribute includes 2 fields: global and widget. Below you will find a brief +explanation about each of them.

    +
    +

    global

    +

    The position where the event occurred considering the entire screen, same as +globalPosition in Flutter’s native events.

    +
    +
    +

    widget

    +

    The position where the event occurred relative to the GameWidget position and size, same as +localPosition in Flutter’s native events.

    +
    +
    +
    +

    Example

    +
    class MyGame extends FlameGame with TapDetector {
    +  // Other methods omitted
    +
    +  @override
    +  bool onTapDown(TapDownInfo info) {
    +    print("Player tap down on ${info.eventPosition.widget}");
    +    return true;
    +  }
    +
    +  @override
    +  bool onTapUp(TapUpInfo info) {
    +    print("Player tap up on ${info.eventPosition.widget}");
    +    return true;
    +  }
    +}
    +
    +
    +

    You can also check more complete examples +here.

    +
    +

    GestureHitboxes

    +

    The GestureHitboxes mixin is used to more accurately recognize gestures on top of your +Components. Say that you have a fairly round rock as a SpriteComponent for example, then you +don’t want to register input that is in the corner of the image where the rock is not displayed, +since a PositionComponent is rectangular by default. Then you can use the GestureHitboxes mixin +to define a more accurate circle or polygon (or another shape) for which the input should be within +for the event to be registered on your component.

    +

    You can add new hitboxes to the component that has the GestureHitboxes mixin just like they are +added in the below Collidable example.

    +

    More information about how to define hitboxes can be found in the hitbox section of the +collision detection docs.

    +

    An example of how to use it can be seen +here.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/inputs/hardware_keyboard_detector.html b/docs/1.18.0/flame/inputs/hardware_keyboard_detector.html new file mode 100644 index 000000000..0ce742e85 --- /dev/null +++ b/docs/1.18.0/flame/inputs/hardware_keyboard_detector.html @@ -0,0 +1,510 @@ + + + + + + + HardwareKeyboardDetector — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    HardwareKeyboardDetector

    +
    +
    +
    +
    +class HardwareKeyboardDetector
    +
    +extends Component
    +
    +
    +

    The HardwareKeyboardDetector component allows you to directly listen +to events from a hardware keyboard, bypassing the Focus widget in Flutter. +It will not listen for events from any on-screen (software) keyboards.

    +

    This component can be placed anywhere in the component tree. For example, +it can be attached to the root level of the Game class, or to the player +being controlled. Multiple HardwareKeyboardDetector components can coexist +within the same game, and they all will receive the key events.

    +

    The component provides the onKeyEvent event handler, which can either be +overridden or passed as a parameter in the constructor. This event handler +fires whenever the user presses or releases any key on a keyboard, and also +when a key is being held.

    +

    The stream of key events will be normalized by Flutter, meaning that for +every KeyDownEvent there will always be the corresponding KeyUpEvent, +possibly with some KeyRepeatEvents in the middle. Depending on the +platform, some of these events may be “synthesized”, i.e. created by the +framework artificially in order to preserve the correct event sequence. See +Flutter’s HardwareKeyboard for more details.

    +

    Similar normalization guarantee exists when this component is added to or +removed from the component tree. If the user was holding any keys when the +HardwareKeyboardDetector was mounted, then artificial KeyDownEvents +will be fired; if the user was holding keys when this component was removed, +then KeyUpEvents will be synthesized.

    +

    Use pauseKeyEvents property to temporarily halt/resume the delivery of +onKeyEvents. The events will also stop being delivered when the component +is removed from the component tree.

    +
    +
    +

    Constructors

    +
    +
    +
    +HardwareKeyboardDetector({void Function(KeyEvent)? onKeyEvent})
    +
    +
    +
    +
    +

    Properties

    +
    +
    +physicalKeysPressedList<PhysicalKeyboardKey>
    +
    +

    The list of keys that are currently being pressed on the keyboard (or a +keyboard-like device). The keys are listed in the order in which they +were pressed, except for the modifier keys which may be listed +out-of-order on some systems.

    +
    +
    +
    +
    +logicalKeysPressedSet<LogicalKeyboardKey>
    +
    +

    The set of logical keys that are currently being pressed on the keyboard. +This set corresponds to the physicalKeysPressed list, and can be used +to search for keys in a keyboard-layout-independent way.

    +
    +
    +
    +
    +isControlPressedbool
    +
    +

    True if the Ctrl key is currently being pressed.

    +
    +
    +
    +
    +isShiftPressedbool
    +
    +

    True if the Shift key is currently being pressed.

    +
    +
    +
    +
    +isAltPressedbool
    +
    +

    True if the Alt key is currently being pressed.

    +
    +
    +
    +
    +isNumLockOnbool
    +
    +

    True if Num Lock currently turned on.

    +
    +
    +
    +
    +isCapsLockOnbool
    +
    +

    True if Caps Lock currently turned on.

    +
    +
    +
    +
    +isScrollLockOnbool
    +
    +

    True if Scroll Lock currently turned on.

    +
    +
    +
    +
    +pauseKeyEvents ←→ bool
    +
    +

    When true, delivery of key events will be suspended.

    +

    When this property is set to true, the system generates KeyUp events for +all keys currently being held, as if the user has released them. +Conversely, when this property is switched back to false, and the user +was holding some keys at the time, the system will generate KeyDown +events as if the user just started pressing those buttons.

    +
    +
    +
    +
    +

    Methods

    +
    +
    +
    +onKeyEvent(KeyEvent event)
    +
    +
    +

    Override this event handler if you want to get notified whenever any key +on a keyboard is pressed, held, or released. The event will be one of +KeyDownEvent, KeyRepeatEvent, or KeyUpEvent, respectively.

    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/inputs/inputs.html b/docs/1.18.0/flame/inputs/inputs.html new file mode 100644 index 000000000..b5c8fa6d5 --- /dev/null +++ b/docs/1.18.0/flame/inputs/inputs.html @@ -0,0 +1,381 @@ + + + + + + + Inputs — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + + + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/inputs/keyboard_input.html b/docs/1.18.0/flame/inputs/keyboard_input.html new file mode 100644 index 000000000..cd6a82a33 --- /dev/null +++ b/docs/1.18.0/flame/inputs/keyboard_input.html @@ -0,0 +1,485 @@ + + + + + + + Keyboard Input — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Keyboard Input

    +

    This includes documentation for keyboard inputs.

    +

    For other input documents, see also:

    + +
    +

    Intro

    +

    The keyboard API on flame relies on the +Flutter’s Focus widget.

    +

    To customize focus behavior, see Controlling focus.

    +

    There are two ways a game can react to key strokes; at the game level and at a component level. +For each we have a mixin that can me added to a Game or Component class.

    +
    +

    Receive keyboard events in a game level

    +

    To make a Game sub class sensitive to key stroke, mix it with KeyboardEvents.

    +

    After that, it will be possible to override an onKeyEvent method.

    +

    This method receives two parameters, first the +KeyEvent +that triggers the callback in the first place. The second is a set of the currently pressed +LogicalKeyboardKey.

    +

    The return value is a +KeyEventResult.

    +

    KeyEventResult.handled will tell the framework that the key stroke was resolved inside of Flame +and skip any other keyboard handler widgets apart of GameWidget.

    +

    KeyEventResult.ignored will tell the framework to keep testing this event in any other keyboard +handler widget apart of GameWidget. If the event is not resolved by any handler, the framework +will trigger SystemSoundType.alert.

    +

    KeyEventResult.skipRemainingHandlers is very similar to .ignored, apart from the fact that will +skip any other handler widget and will straight up play the alert sound.

    +

    Minimal example:

    +
    class MyGame extends FlameGame with KeyboardEvents {
    +  // ...
    +  @override
    +  KeyEventResult onKeyEvent(
    +    KeyEvent event,
    +    Set<LogicalKeyboardKey> keysPressed,
    +  ) {
    +    final isKeyDown = event is KeyDownEvent;
    +
    +    final isSpace = keysPressed.contains(LogicalKeyboardKey.space);
    +
    +    if (isSpace && isKeyDown) {
    +      if (keysPressed.contains(LogicalKeyboardKey.altLeft) ||
    +          keysPressed.contains(LogicalKeyboardKey.altRight)) {
    +        this.shootHarder();
    +      } else {
    +        this.shoot();
    +      }
    +      return KeyEventResult.handled;
    +    }
    +    return KeyEventResult.ignored;
    +  }
    +}
    +
    +
    +
    +
    +

    Receive keyboard events in a component level

    +

    To receive keyboard events directly in components, there is the mixin KeyboardHandler.

    +

    Similarly to TapCallbacks and DragCallbacks, KeyboardHandler can be mixed into any subclass of +Component.

    +

    KeyboardHandlers must only be added to games that are mixed with HasKeyboardHandlerComponents.

    +
    +

    ⚠️ Note: If HasKeyboardHandlerComponents is used, you must remove KeyboardEvents +from the game mixin list to avoid conflicts.

    +
    +

    After applying KeyboardHandler, it will be possible to override an onKeyEvent method.

    +

    This method receives two parameters. First the +KeyEvent +that triggered the callback in the first place. The second is a set of the currently pressed +LogicalKeyboardKeys.

    +

    The returned value should be true to allow the continuous propagation of the key event among other +components. To not allow any other component to receive the event, return false.

    +

    Flame also provides a default implementation called KeyboardListenerComponent which can be used +to handle keyboard events. Like any other component, it can be added as a child to a FlameGame +or another Component:

    +

    For example, imagine a PositionComponent which has methods to move on the X and Y axis, +then the following code could be used to bind those methods to key events:

    +
    add(
    +  KeyboardListenerComponent(
    +    keyUp: {
    +      LogicalKeyboardKey.keyA: (keysPressed) { ... },
    +      LogicalKeyboardKey.keyD: (keysPressed) { ... },
    +      LogicalKeyboardKey.keyW: (keysPressed) { ... },
    +      LogicalKeyboardKey.keyS: (keysPressed) { ... },
    +    },
    +    keyDown: {
    +      LogicalKeyboardKey.keyA: (keysPressed) { ... },
    +      LogicalKeyboardKey.keyD: (keysPressed) { ... },
    +      LogicalKeyboardKey.keyW: (keysPressed) { ... },
    +      LogicalKeyboardKey.keyS: (keysPressed) { ... },
    +    },
    +  ),
    +);
    +
    +
    +
    +
    +

    Controlling focus

    +

    On the widget level, it is possible to use the +FocusNode API to control whether +the game is focused or not.

    +

    GameWidget has an optional focusNode parameter that allow its focus to be controlled externally.

    +

    By default GameWidget has its autofocus set to true, which means it will get focused once it is +mounted. To override that behavior, set autofocus to false.

    +

    For a more complete example see +here.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/inputs/other_inputs.html b/docs/1.18.0/flame/inputs/other_inputs.html new file mode 100644 index 000000000..cc45f0ffc --- /dev/null +++ b/docs/1.18.0/flame/inputs/other_inputs.html @@ -0,0 +1,542 @@ + + + + + + + Other Inputs and Helpers — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Other Inputs and Helpers

    +

    This includes documentation for input methods besides keyboard and mouse.

    +

    For other input documents, see also:

    + +
    +

    Joystick

    +

    Flame provides a component capable of creating a virtual joystick for taking input for your game. +To use this feature, you need to create a JoystickComponent, configure it the way you want, and +add it to your game.

    +

    Check out the following example to get a better understanding:

    +
    class MyGame extends FlameGame {
    +
    +  @override
    +  Future<void> onLoad() async {
    +    super.onLoad();
    +    final image = await images.load('joystick.png');
    +    final sheet = SpriteSheet.fromColumnsAndRows(
    +      image: image,
    +      columns: 6,
    +      rows: 1,
    +    );
    +    final joystick = JoystickComponent(
    +      knob: SpriteComponent(
    +        sprite: sheet.getSpriteById(1),
    +        size: Vector2.all(100),
    +      ),
    +      background: SpriteComponent(
    +        sprite: sheet.getSpriteById(0),
    +        size: Vector2.all(150),
    +      ),
    +      margin: const EdgeInsets.only(left: 40, bottom: 40),
    +    );
    +
    +    final player = Player(joystick);
    +    add(player);
    +    add(joystick);
    +  }
    +}
    +
    +class Player extends SpriteComponent with HasGameRef {
    +  Player(this.joystick)
    +    : super(
    +        anchor: Anchor.center,
    +        size: Vector2.all(100.0),
    +      );
    +
    +  /// Pixels/s
    +  double maxSpeed = 300.0;
    +
    +  final JoystickComponent joystick;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    sprite = await gameRef.loadSprite('layers/player.png');
    +    position = gameRef.size / 2;
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    if (joystick.direction != JoystickDirection.idle) {
    +      position.add(joystick.relativeDelta  * maxSpeed * dt);
    +      angle = joystick.delta.screenAngle();
    +    }
    +  }
    +}
    +
    +
    +

    In this example, we created the classes MyGame and Player. +MyGame creates a joystick which is passed to the Player when the latter is created. +In the Player class we act upon the current state of the joystick.

    +

    The joystick has a few fields that change depending on what state it is in.

    +

    Following fields should be used to know the state of the joystick:

    +
      +
    • intensity: The percentage [0.0, 1.0] that the knob is dragged from the epicenter to the edge of +the joystick (or knobRadius if that is set).

    • +
    • delta: The absolute amount (defined as a Vector2) that the knob is dragged from its epicenter.

    • +
    • relativeDelta: The percentage, presented as a Vector2, and direction that the knob is currently +pulled from its base position to a edge of the joystick.

    • +
    +

    If you want to create buttons to go with your joystick, check out +HudButtonComponent.

    +

    For the complete code on implementing the joystick, check out the +Joystick Example. +You can also view the +JoystickComponent in action +to see a live example of the joystick input function integrated into a game.

    +

    For an additional challenge, explore the +Advanced Joystick Example. +See what else the advanced features can do in the +live demo.

    +
    +
    +

    HudButtonComponent

    +

    A HudButtonComponent is a button that can be defined with margins to the edge of the Viewport +instead of with a position. It takes two PositionComponents. button and buttonDown, the first +is used for when the button is idle and the second is shown when the button is being pressed. The +second one is optional if you don’t want to change the look of the button when it is pressed, or if +you handle this through the button component.

    +

    As the name suggests this button is a hud by default, which means that it will be static on your +screen even if the camera for the game moves around. You can also use this component as a non-hud by +setting hudButtonComponent.respectCamera = true;.

    +

    If you want to act upon the button being pressed (which would be the common thing to do) and released, +you can either pass in callback functions as the onPressed and onReleased arguments, or you can +extend the component and override onTapDown, onTapUp and/or onTapCancel and implement your +logic there.

    +
    +
    +

    SpriteButtonComponent

    +

    A SpriteButtonComponent is a button that is defined by two Sprites, one that represents +when the button is pressed and one that represents when the button is released.

    +
    +
    +

    ButtonComponent

    +

    A ButtonComponent is a button that is defined by two PositionComponents, one that represents +when the button is pressed and one that represents when the button is released. If you only want +to use sprites for the button, use the SpriteButtonComponent instead, but this component can be +good to use if you for example want to have a SpriteAnimationComponent as a button, or anything +else which isn’t a pure sprite.

    +
    +
    +

    Gamepad

    +

    Flame has a dedicated plugin to support external game controllers (gamepads). +Find more information in the Gamepads repository.

    +
    +
    +

    AdvancedButtonComponent

    +

    The AdvancedButtonComponent have separate states for each of the different pointer phases. +The skin can be customized for each state and each skin is represented by a PositionComponent.

    +

    These are the fields that can be used to customize the looks of the AdvancedButtonComponent:

    +
      +
    • defaultSkin: Component that will be displayed by default on the button.

    • +
    • downSkin: Component displayed when the button is clicked or tapped.

    • +
    • hoverSkin: Component displayed when the button is hovered. (desktop and web).

    • +
    • defaultLabel: Component shown on top of skins. Automatically aligned to center.

    • +
    • disabledSkin: Component displayed when button is disabled.

    • +
    • disabledLabel: Component shown on top of skins when button is disabled.

    • +
    +
    +
    +

    ToggleButtonComponent

    +

    The [ToggleButtonComponent] is an [AdvancedButtonComponent] that can switch between selected +and not selected.

    +

    In addition to the already existing skins, the [ToggleButtonComponent] contains the following skins:

    +
      +
    • defaultSelectedSkin: The component to display when the button is selected.

    • +
    • downAndSelectedSkin: The component that is displayed when the selectable button is selected and +pressed.

    • +
    • hoverAndSelectedSkin: Hover on selectable and selected button (desktop and web).

    • +
    • disabledAndSelectedSkin: For when the button is selected and in the disabled state.

    • +
    • defaultSelectedLabel: Component shown on top of the skins when button is selected.

    • +
    +
    +
    +

    IgnoreEvents mixin

    +

    If you don’t want a component subtree to receive events, you can use the IgnoreEvents mixin. +Once you have added this mixin you can turn off events to reach a component and its descendants by +setting ignoreEvents = true (default when the mixin is added), and then set it to false when you +want to receive events again.

    +

    This can be done for optimization purposes, since all events currently go through the whole +component tree.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/inputs/pointer_events.html b/docs/1.18.0/flame/inputs/pointer_events.html new file mode 100644 index 000000000..23074bdf5 --- /dev/null +++ b/docs/1.18.0/flame/inputs/pointer_events.html @@ -0,0 +1,495 @@ + + + + + + + Pointer Events — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Pointer Events

    +
    +

    Note

    +

    This document describes the new events API. The old (legacy) approach, +which is still supported, is described in Gesture Input.

    +
    +

    Pointer events are Flutter’s generalized “mouse-movement”-type events (for desktop or web).

    +

    If you want to interact with mouse movement events within your component or game, you can use the +PointerMoveCallbacks mixin.

    +

    For example:

    +
    class MyComponent extends PositionComponent with PointerMoveCallbacks {
    +  MyComponent() : super(size: Vector2(80, 60));
    +
    +  @override
    +  void onPointerMove(PointerMoveEvent event) {
    +    // Do something in response to the mouse move (e.g. update coordinates)
    +  }
    +}
    +
    +
    +

    The mixin adds two overridable methods to your component:

    +
      +
    • onPointerMove: called when the mouse moves within the component

    • +
    • onPointerMoveStop: called once if the component was being hovered and the mouse leaves

    • +
    +

    By default, each of these methods does nothing, they need to be overridden in order to perform any +function.

    +

    In addition, the component must implement the containsLocalPoint() method (already implemented in +PositionComponent, so most of the time you don’t need to do anything here) – this method allows +Flame to know whether the event occurred within the component or not.

    +

    Note that only mouse events happening within your component will be proxied along. However, +onPointerMoveStop will be fired once on the first mouse movement that leaves your component, so +you can handle any exit conditions there.

    +
    +

    HoverCallbacks

    +

    If you want to specifically know if your component is being hovered or not, or if you want to hook +into hover enter and exist events, you can use a more dedicated mixin called HoverCallbacks.

    +

    For example:

    +
    class MyComponent extends PositionComponent with HoverCallbacks {
    +
    +  MyComponent() : super(size: Vector2(80, 60));
    +
    +  @override
    +  void update(double dt) {
    +    // use `isHovered` to know if the component is being hovered
    +  }
    +
    +  @override
    +  void onHoverEnter() {
    +    // Do something in response to the mouse entering the component
    +  }
    +
    +  @override
    +  void onHoverExit() {
    +    // Do something in response to the mouse leaving the component
    +  }
    +}
    +
    +
    +

    Note that you can still listen to the “raw” onPointerMove methods for additional functionality, just +make sure to call the super version to enable the HoverCallbacks behavior.

    +
    +

    Demo

    +

    Play with the demo below to see the pointer hover events in action.

    +
    +
    +pointer_events.dart
    +
     1import 'dart:math';
    + 2
    + 3import 'package:flame/components.dart';
    + 4import 'package:flame/events.dart';
    + 5import 'package:flame/game.dart';
    + 6import 'package:flutter/rendering.dart';
    + 7
    + 8class PointerEventsGame extends FlameGame with TapCallbacks {
    + 9  @override
    +10  Future<void> onLoad() async {
    +11    add(HoverTarget(Vector2(100, 200)));
    +12    add(HoverTarget(Vector2(300, 300)));
    +13    add(HoverTarget(Vector2(400, 50)));
    +14  }
    +15
    +16  @override
    +17  void onTapDown(TapDownEvent event) {
    +18    add(HoverTarget(event.localPosition));
    +19  }
    +20}
    +21
    +22class HoverTarget extends PositionComponent with HoverCallbacks {
    +23  static final Random _random = Random();
    +24
    +25  HoverTarget(Vector2 position)
    +26      : super(
    +27          position: position,
    +28          size: Vector2.all(50),
    +29          anchor: Anchor.center,
    +30        );
    +31
    +32  final _paint = Paint()
    +33    ..color = HSLColor.fromAHSL(1, _random.nextDouble() * 360, 1, 0.8)
    +34        .toColor()
    +35        .withOpacity(0.5);
    +36
    +37  @override
    +38  void render(Canvas canvas) {
    +39    canvas.drawRect(size.toRect(), _paint);
    +40  }
    +41
    +42  @override
    +43  void onHoverEnter() {
    +44    _paint.color = _paint.color.withOpacity(1);
    +45  }
    +46
    +47  @override
    +48  void onHoverExit() {
    +49    _paint.color = _paint.color.withOpacity(0.5);
    +50  }
    +51}
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/inputs/tap_events.html b/docs/1.18.0/flame/inputs/tap_events.html new file mode 100644 index 000000000..d8f9e9b0a --- /dev/null +++ b/docs/1.18.0/flame/inputs/tap_events.html @@ -0,0 +1,695 @@ + + + + + + + Tap Events — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Tap Events

    +
    +

    Note

    +

    This document describes the new events API. The old (legacy) approach, +which is still supported, is described in Gesture Input.

    +
    +

    Tap events are one of the most basic methods of interaction with a Flame game. These events +occur when the user touches the screen with a finger, or clicks with a mouse, or taps with a stylus. +A tap can be “long”, but the finger isn’t supposed to move during the gesture. Thus, touching the +screen, then moving the finger, and then releasing – is not a tap but a drag. Similarly, clicking +a mouse button while the mouse is moving will also be registered as a drag.

    +

    Multiple tap events can occur at the same time, especially if the user has multiple fingers. Such +cases will be handled correctly by Flame, and you can even keep track of the events by using their +pointerId property.

    +

    For those components that you want to respond to taps, add the TapCallbacks mixin.

    +
      +
    • This mixin adds four overridable methods to your component: onTapDown, onTapUp, +onTapCancel, and onLongTapDown. By default, each of these methods does nothing, they need +to be overridden in order to perform any function.

    • +
    • In addition, the component must implement the containsLocalPoint() method (already implemented +in PositionComponent, so most of the time you don’t need to do anything here) – this method +allows Flame to know whether the event occurred within the component or not.

    • +
    +
    class MyComponent extends PositionComponent with TapCallbacks {
    +  MyComponent() : super(size: Vector2(80, 60));
    +
    +  @override
    +  void onTapUp(TapUpEvent event) {
    +    // Do something in response to a tap event
    +  }
    +}
    +
    +
    +
    +

    Tap anatomy

    +
    +

    onTapDown

    +

    Every tap begins with a “tap down” event, which you receive via the void onTapDown(TapDownEvent) +handler. The event is delivered to the first component located at the point of touch that has the +TapCallbacks mixin. Normally, the event then stops propagation. However, you can force the event +to also be delivered to the components below by setting event.continuePropagation to true.

    +

    The TapDownEvent object that is passed to the event handler, contains the available information +about the event. For example, event.localPosition will contain the coordinate of the event in the +current component’s local coordinate system, whereas event.canvasPosition is in the coordinate +system of the entire game canvas.

    +

    Every component that received an onTapDown event will eventually receive either onTapUp or +onTapCancel with the same pointerId.

    +
    +
    +

    onLongTapDown

    +

    If the user holds their finger down for some time (as configured by the .longTapDelay property +in MultiTapDispatcher), “long tap” will be triggered. This event invokes the +void onLongTapDown(TapDownEvent) handler on those components that previously received the +onTapDown event.

    +

    By default, the .longTapDelay is set to 300 milliseconds, what may be different of the system default. +You can change this value by setting the TapConfig.longTapDelay value. +It may also be useful for specific accessibility needs.

    +
    +
    +

    onTapUp

    +

    This event indicates successful completion of the tap sequence. It is guaranteed to only be +delivered to those components that previously received the onTapDown event with the same pointer +id.

    +

    The TapUpEvent object passed to the event handler contains the information about the event, which +includes the coordinate of the event (i.e. where the user was touching the screen right before +lifting their finger), and the event’s pointerId.

    +

    Note that the device coordinates of the tap-up event will be the same (or very close) to the device +coordinates of the corresponding tap-down event. However, the same cannot be said about the local +coordinates. If the component that you’re tapping is moving (as they often tend to in games), then +you may find that the local tap-up coordinates are quite different from the local tap-down +coordinates.

    +

    In extreme case, when the component moves away from the point of touch, the onTapUp event will not +be generated at all: it will be replaced with onTapCancel. Note, however, that in this case the +onTapCancel will be generated at the moment the user lifts or moves their finger, not at the +moment the component moves away from the point of touch.

    +
    +
    +

    onTapCancel

    +

    This event occurs when the tap fails to materialize. Most often, this will happen if the user moves +their finger, which converts the gesture from “tap” into “drag”. Less often, this may happen when +the component being tapped moves away from under the user’s finger. Even more rarely, the +onTapCancel occurs when another widget pops over the game widget, or when the device turns off, +or similar situations.

    +

    The TapCancelEvent object contains only the pointerId of the previous TapDownEvent which is +now being canceled. There is no position associated with a tap-cancel.

    +
    +
    +

    Demo

    +

    Play with the demo below to see the tap events in action.

    +

    The blue-ish rectangle in the middle is the component that has the TapCallbacks mixin. Tapping +this component would create circles at the points of touch. Specifically, onTapDown event +starts making the circle. The thickness of the circle will be proportional to the duration of the +tap: after onTapUp the circle’s stroke width will no longer grow. There will be a thin white +stripe at the moment the onLongTapDown fires. Lastly, the circle will implode and disappear if +you cause the onTapCancel event by moving the finger.

    +
    +
    +tap_events.dart
    +
      1import 'dart:math';
    +  2
    +  3import 'package:flame/components.dart';
    +  4import 'package:flame/events.dart';
    +  5import 'package:flame/game.dart';
    +  6import 'package:flutter/rendering.dart';
    +  7
    +  8class TapEventsGame extends FlameGame {
    +  9  @override
    + 10  Future<void> onLoad() async {
    + 11    add(TapTarget());
    + 12  }
    + 13}
    + 14
    + 15/// This component is the tappable blue-ish rectangle in the center of the game.
    + 16/// It uses the [TapCallbacks] mixin to receive tap events.
    + 17class TapTarget extends PositionComponent with TapCallbacks {
    + 18  TapTarget() : super(anchor: Anchor.center);
    + 19
    + 20  final _paint = Paint()..color = const Color(0x448BA8FF);
    + 21
    + 22  /// We will store all current circles into this map, keyed by the `pointerId`
    + 23  /// of the event that created the circle.
    + 24  final Map<int, ExpandingCircle> _circles = {};
    + 25
    + 26  @override
    + 27  void onGameResize(Vector2 size) {
    + 28    super.onGameResize(size);
    + 29    this.size = size - Vector2(100, 75);
    + 30    if (this.size.x < 100 || this.size.y < 100) {
    + 31      this.size = size * 0.9;
    + 32    }
    + 33    position = size / 2;
    + 34  }
    + 35
    + 36  @override
    + 37  void render(Canvas canvas) {
    + 38    canvas.drawRect(size.toRect(), _paint);
    + 39  }
    + 40
    + 41  @override
    + 42  void onTapDown(TapDownEvent event) {
    + 43    final circle = ExpandingCircle(event.localPosition);
    + 44    _circles[event.pointerId] = circle;
    + 45    add(circle);
    + 46  }
    + 47
    + 48  @override
    + 49  void onLongTapDown(TapDownEvent event) {
    + 50    _circles[event.pointerId]!.accent();
    + 51  }
    + 52
    + 53  @override
    + 54  void onTapUp(TapUpEvent event) {
    + 55    _circles.remove(event.pointerId)!.release();
    + 56  }
    + 57
    + 58  @override
    + 59  void onTapCancel(TapCancelEvent event) {
    + 60    _circles.remove(event.pointerId)!.cancel();
    + 61  }
    + 62}
    + 63
    + 64class ExpandingCircle extends Component {
    + 65  ExpandingCircle(this._center)
    + 66      : _baseColor =
    + 67            HSLColor.fromAHSL(1, random.nextDouble() * 360, 1, 0.8).toColor();
    + 68
    + 69  final Color _baseColor;
    + 70  final Vector2 _center;
    + 71  double _outerRadius = 0;
    + 72  double _innerRadius = 0;
    + 73  bool _released = false;
    + 74  bool _cancelled = false;
    + 75  late final _paint = Paint()
    + 76    ..style = PaintingStyle.stroke
    + 77    ..color = _baseColor;
    + 78
    + 79  /// "Accent" is thin white circle generated by `onLongTapDown`. We use
    + 80  /// negative radius to indicate that the circle should not be drawn yet.
    + 81  double _accentRadius = -1e10;
    + 82  late final _accentPaint = Paint()
    + 83    ..style = PaintingStyle.stroke
    + 84    ..strokeWidth = 0
    + 85    ..color = const Color(0xFFFFFFFF);
    + 86
    + 87  /// At this radius the circle will disappear.
    + 88  static const maxRadius = 175;
    + 89  static final random = Random();
    + 90
    + 91  double get radius => (_innerRadius + _outerRadius) / 2;
    + 92
    + 93  void release() => _released = true;
    + 94  void cancel() => _cancelled = true;
    + 95  void accent() => _accentRadius = 0;
    + 96
    + 97  @override
    + 98  void render(Canvas canvas) {
    + 99    canvas.drawCircle(_center.toOffset(), radius, _paint);
    +100    if (_accentRadius >= 0) {
    +101      canvas.drawCircle(_center.toOffset(), _accentRadius, _accentPaint);
    +102    }
    +103  }
    +104
    +105  @override
    +106  void update(double dt) {
    +107    if (_cancelled) {
    +108      _innerRadius += dt * 100; // implosion
    +109    } else {
    +110      _outerRadius += dt * 20;
    +111      _innerRadius += dt * (_released ? 20 : 6);
    +112      _accentRadius += dt * 20;
    +113    }
    +114    if (radius >= maxRadius || _innerRadius > _outerRadius) {
    +115      removeFromParent();
    +116    } else {
    +117      final opacity = 1 - radius / maxRadius;
    +118      _paint.color = _baseColor.withOpacity(opacity);
    +119      _paint.strokeWidth = _outerRadius - _innerRadius;
    +120    }
    +121  }
    +122}
    +
    +
    +
    +
    +
    +
    +

    Mixins

    +

    This section describes in more details several mixins needed for tap event handling.

    +
    +

    TapCallbacks

    +

    The TapCallbacks mixin can be added to any Component in order for that component to start +receiving tap events.

    +

    This mixin adds methods onTapDown, onLongTapDown, onTapUp, and onTapCancel to the component, +which by default don’t do anything, but can be overridden to implement any real functionality. There +is no need to override all of them either: for example, you can override only onTapUp if you wish +to respond to “real” taps only.

    +

    Another crucial detail is that a component will only receive tap events that occur within that +component, as judged by the containsLocalPoint() function. The commonly-used PositionComponent +class provides such an implementation based on its size property. Thus, if your component derives +from a PositionComponent, then make sure that you set its size correctly. If, however, your +component derives from the bare Component, then the containsLocalPoint() method must be +implemented manually.

    +

    If your component is a part of a larger hierarchy, then it will only receive tap events if its +parent has implemented the containsLocalPoint correctly.

    +
    class MyComponent extends Component with TapCallbacks {
    +  final _rect = const Rect.fromLTWH(0, 0, 100, 100);
    +  final _paint = Paint();
    +  bool _isPressed = false;
    +
    +  @override
    +  bool containsLocalPoint(Vector2 point) => _rect.contains(point.toOffset());
    +
    +  @override
    +  void onTapDown(TapDownEvent event) => _isPressed = true;
    +
    +  @override
    +  void onTapUp(TapUpEvent event) => _isPressed = false;
    +
    +  @override
    +  void onTapCancel(TapCancelEvent event) => _isPressed = false;
    +
    +  @override
    +  void render(Canvas canvas) {
    +    _paint.color = _isPressed? Colors.red : Colors.white;
    +    canvas.drawRect(_rect, _paint);
    +  }
    +}
    +
    +
    +
    +
    +

    DoubleTapCallbacks

    +

    Flame also offers a mixin named DoubleTapCallbacks to receive a double-tap event from the +component. To start receiving double tap events in a component, add the +DoubleTapCallbacks mixin to your PositionComponent.

    +
    class MyComponent extends PositionComponent with DoubleTapCallbacks {
    +  @override
    +  void onDoubleTapUp(DoubleTapEvent event) {
    +    /// Do something
    +  }
    +
    +  @override
    +  void onDoubleTapCancel(DoubleTapCancelEvent event) {
    +    /// Do something
    +  }
    +
    +  @override
    +  void onDoubleTapDown(DoubleTapDownEvent event) {
    +    /// Do something
    +  }
    +
    +
    +
    +
    +
    +

    Migration

    +

    If you have an existing game that uses Tappable/Draggable mixins, then this section will +describe how to transition to the new API described in this document. Here’s what you need to do:

    +

    Take all of your components that uses these mixins, and replace them with +TapCallbacks/DragCallbacks. +The methods onTapDown, onTapUp, onTapCancel and onLongTapDown will need to be adjusted +for the new API:

    +
      +
    • The argument pair such as (int pointerId, TapDownDetails details) was replaced with a single +event object TapDownEvent event.

    • +
    • There is no return value anymore, but if you need to make a component to pass-through the taps +to the components below, then set event.continuePropagation to true. This is only needed for +onTapDown events – all other events will pass-through automatically.

    • +
    • If your component needs to know the coordinates of the point of touch, use +event.localPosition instead of computing it manually. Properties event.canvasPosition and +event.devicePosition are also available.

    • +
    • If the component is attached to a custom ancestor then make sure that ancestor also have the +correct size or implement containsLocalPoint().

    • +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/layout/align_component.html b/docs/1.18.0/flame/layout/align_component.html new file mode 100644 index 000000000..a3c87b572 --- /dev/null +++ b/docs/1.18.0/flame/layout/align_component.html @@ -0,0 +1,487 @@ + + + + + + + AlignComponent — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    AlignComponent

    +
    +
    +
    +
    +class AlignComponent
    +
    +extends PositionComponent
    +
    +
    +

    AlignComponent is a layout component that positions its child within +itself using relative placement. It is similar to Flutter’s Align widget.

    +

    The component requires a single child, which will be the target of this +component’s alignment. Of course, other children can be added to this +component too, but only the initial child will be aligned.

    +

    The alignment parameter describes where the child should be placed within +the current component. For example, if the alignment is Anchor.center, +then the child will be centered.

    +

    Normally, this component’s size will match the size of its parent. However, +if you provide properties widthFactor or heightFactor, then the size of +this component in that direction will be equal to the size of the child +times the corresponding factor. For example, if you set heightFactor to +1 then the width of this component will be equal to the width of the parent, +but the height will match the height of the child.

    +
    AlignComponent(
    +  child: TextComponent('hello'),
    +  alignment: Anchor.centerLeft,
    +);
    +
    +
    +

    By default, the child’s anchor is set equal to the alignment value. This +achieves traditional alignment behavior: for example, the center of the +child will be placed at the center of the current component, or bottom +right corner of the child can be placed in the bottom right corner of the +component. However, it is also possible to achieve more extravagant +placement by giving the child a different anchor and setting +keepChildAnchor to true. For example, if you set alignment to +topCenter, and child’s anchor to bottomCenter, then the child will +effectively be placed above the current component:

    +
    PlayerSprite().add(
    +  AlignComponent(
    +    child: HealthBar()..anchor = Anchor.bottomCenter,
    +    alignment: Anchor.topCenter,
    +    keepChildAnchor: true,
    +  ),
    +);
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +AlignComponent({PositionComponent? child, Anchor alignment = Anchor.topLeft, this.widthFactor, this.heightFactor, this.keepChildAnchor = false})
    +
    +
    +

    Creates a component that keeps its child positioned according to the +alignment within this component’s bounding box.

    +

    More precisely, the child will be placed at alignment relative position +within the current component’s bounding box. The child’s anchor will also +be set to the alignment, unless keepChildAnchor parameter is true.

    +
    +
    +
    +
    +

    Properties

    +
    +
    +child ←→ PositionComponent?
    +
    +

    The component that will be positioned by this component. The child will +be automatically mounted to the current component.

    +
    +
    +
    +
    +alignment ←→ Anchor
    +
    +

    How the child will be positioned within the current component.

    +

    Note: unlike Flutter’s Alignment, the top-left corner of the component +has relative coordinates (0, 0), while the bottom-right corner has +coordinates (1, 1).

    +
    +
    +
    +
    +widthFactor : double?
    +
    +

    If null, then the component’s width will be equal to the width of the +parent. Otherwise, the width will be equal to the child’s width multiplied +by this factor.

    +
    +
    +
    +
    +heightFactor : double?
    +
    +

    If null, then the component’s height will be equal to the height of the +parent. Otherwise, the height will be equal to the child’s height +multiplied by this factor.

    +
    +
    +
    +
    +keepChildAnchor : bool
    +
    +

    If false (default), then the child’s anchor will be kept equal to the +alignment value. If true, then the child will be allowed to have +its own anchor value independent from the parent.

    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/layout/layout.html b/docs/1.18.0/flame/layout/layout.html new file mode 100644 index 000000000..35e5b544a --- /dev/null +++ b/docs/1.18.0/flame/layout/layout.html @@ -0,0 +1,376 @@ + + + + + + + Layout — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Layout

    + +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/other/debug.html b/docs/1.18.0/flame/other/debug.html new file mode 100644 index 000000000..74ea07861 --- /dev/null +++ b/docs/1.18.0/flame/other/debug.html @@ -0,0 +1,446 @@ + + + + + + + Debug features — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Debug features

    +
    +

    FlameGame features

    +

    Flame provides some debugging features for the FlameGame class. These features are enabled when +the debugMode property is set to true (or overridden to be true). +When debugMode is enabled, each PositionComponent will be rendered with their bounding size, and +have their positions written on the screen. This way, you can visually verify the components +boundaries and positions.

    +

    Check out this working example of the debugging features of the FlameGame.

    +
    +
    +

    Devtools extension

    +

    If you open the Flutter DevTools, you will see a +new tab called “Flame”. This tab will show you information about the current game, for example a +visualization of the component tree, the ability to play, pause and step the game, information +about the selected component, and more.

    +
    +
    +

    FPS

    +

    The FPS reported from Flame might be a bit lower than what is reported from for example the Flutter +DevTools, depending on which platform you are targeting. The source of truth for how many FPS your +game is running in should be the FPS that we are reporting, since that is what our game loop is +bound by.

    +
    +

    FpsComponent

    +

    The FpsComponent can be added to anywhere in the component tree and will keep track of how many +FPS that the game is currently rendering in. If you want to display this as text in the game, use +the FpsTextComponent.

    +
    +
    +

    FpsTextComponent

    +

    The FpsTextComponent is simply a TextComponent that wraps an FpsComponent, since you most +commonly want to show the current FPS somewhere when the FpsComponent is used.

    +
    +
    +

    ChildCounterComponent

    +

    ChildCounterComponent is a component that renders the number of children of +type T from a component (target) every second. So for example:

    +

    So for example, the following will render the number of SpriteAnimationComponent that are +children of the game world:

    +
    add(
    +  ChildCounterComponent<SpriteAnimationComponent>(
    +    target: world,
    +  ),
    +);
    +
    +
    +
    +
    +

    TimeTrackComponent

    +

    This component allows developers to track time spent inside their code. This can be useful for +performance debugging time spent in certain parts of the code.

    +

    To use it, add it to your game somewhere (since this is a debug feature, we advise to only add the +component in a debug build/flavor):

    +
    add(TimeTrackComponent());
    +
    +
    +

    Then in the code section that you want to track time, do the following:

    +
    void update(double dt) {
    +  TimeTrackComponent.start('MyComponent.update');
    +  // ...
    +  TimeTrackComponent.end('MyComponent.update');
    +}
    +
    +
    +

    With the calls above, the added TimeTrackComponent will render the elapsed time in +microseconds.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/other/other.html b/docs/1.18.0/flame/other/other.html new file mode 100644 index 000000000..864024b1d --- /dev/null +++ b/docs/1.18.0/flame/other/other.html @@ -0,0 +1,378 @@ + + + + + + + Other — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Other

    + +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/other/util.html b/docs/1.18.0/flame/other/util.html new file mode 100644 index 000000000..226e6127c --- /dev/null +++ b/docs/1.18.0/flame/other/util.html @@ -0,0 +1,734 @@ + + + + + + + Util — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Util

    +

    On this page you can find documentation for some utility classes and methods.

    +
    +

    Device Class

    +

    This class can be accessed from Flame.device and it has some methods that can be used to control +the state of the device, for instance you can change the screen orientation and set whether the +application should be fullscreen or not.

    +
    +

    Flame.device.fullScreen()

    +

    When called, this disables all SystemUiOverlay making the app full screen. +When called in the main method, it makes your app full screen (no top nor bottom bars).

    +

    Note: It has no effect when called on the web.

    +
    +
    +

    Flame.device.setLandscape()

    +

    This method sets the orientation of the whole application (effectively, also the game) to landscape +and depending on operating system and device setting, should allow both left and right landscape +orientations. To set the app orientation to landscape on a specific direction, use either +Flame.device.setLandscapeLeftOnly or Flame.device.setLandscapeRightOnly.

    +

    Note: It has no effect when called on the web.

    +
    +
    +

    Flame.device.setPortrait()

    +

    This method sets the orientation of the whole application (effectively, also the game) to portrait +and depending on operating system and device setting, it should allow for both up and down portrait +orientations. To set the app orientation to portrait for a specific direction, use either +Flame.device.setPortraitUpOnly or Flame.device.setPortraitDownOnly.

    +

    Note: It has no effect when called on the web.

    +
    +
    +

    Flame.device.setOrientation() and Flame.device.setOrientations()

    +

    If a finer control of the allowed orientations is required (without having to deal with +SystemChrome directly), setOrientation (accepts a single DeviceOrientation as a parameter) and +setOrientations (accepts a List<DeviceOrientation> for possible orientations) can be used.

    +

    Note: It has no effect when called on the web.

    +
    +
    +
    +

    Timer

    +

    Flame provides a simple utility class to help you handle countdowns and timer state changes like +events.

    +

    Countdown example:

    +
    import 'package:flame/components.dart';
    +import 'package:flame/game.dart';
    +import 'package:flame/input.dart';
    +import 'package:flutter/material.dart';
    +
    +class MyGame extends Game {
    +  final TextPaint textPaint = TextPaint(
    +    style: const TextStyle(color: Colors.white, fontSize: 20),
    +  );
    +
    +  final countdown = Timer(2);
    +
    +  @override
    +  void update(double dt) {
    +    countdown.update(dt);
    +    if (countdown.finished) {
    +      // Prefer the timer callback, but this is better in some cases
    +    }
    +  }
    +
    +  @override
    +  void render(Canvas canvas) {
    +    textPaint.render(
    +      canvas,
    +      "Countdown: ${countdown.current.toString()}",
    +      Vector2(10, 100),
    +    );
    +  }
    +}
    +
    +
    +

    Interval example:

    +
    import 'package:flame/components.dart';
    +import 'package:flame/game.dart';
    +import 'package:flame/input.dart';
    +import 'package:flutter/material.dart';
    +
    +class MyGame extends Game {
    +  final TextPaint textPaint = TextPaint(
    +    style: const TextStyle(color: Colors.white, fontSize: 20),
    +  );
    +  Timer interval;
    +
    +  int elapsedSecs = 0;
    +
    +  MyGame() {
    +    interval = Timer(
    +      1,
    +      onTick: () => elapsedSecs += 1,
    +      repeat: true,
    +    );
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    interval.update(dt);
    +  }
    +
    +  @override
    +  void render(Canvas canvas) {
    +    textPaint.render(canvas, "Elapsed time: $elapsedSecs", Vector2(10, 150));
    +  }
    +}
    +
    +
    +

    Timer instances can also be used inside a FlameGame game by using the TimerComponent class.

    +

    TimerComponent example:

    +
    import 'package:flame/timer.dart';
    +import 'package:flame/components.dart';
    +import 'package:flame/game.dart';
    +
    +class MyFlameGame extends FlameGame {
    +  MyFlameGame() {
    +    add(
    +      TimerComponent(
    +        period: 10,
    +        repeat: true,
    +        onTick: () => print('10 seconds elapsed'),
    +      )
    +    );
    +  }
    +}
    +
    +
    +
    +
    +

    Time Scale

    +

    In many games it is often desirable to create slow-motion or fast-forward effects based on some in +game events. A very common approach to achieve these results is to manipulate the in game time or +tick rate.

    +

    To make this manipulation easier, Flame provides a HasTimeScale mixin. This mixin can be attached +to any Flame Component and exposes a simple get/set API for timeScale. The default value of +timeScale is 1, implying in-game time of the component is running at the same speed as real life +time. Setting it to 2 will make the component tick twice as fast and setting it to 0.5 will make +it tick at half the speed as compared to real life time.

    +

    Since FlameGame is a Component too, this mixin can be attached to the FlameGame as well. Doing +so will allow controlling time scale for all the component of the game from a single place.

    +
    +
    +
    +time_scale.dart
    +
     1import 'dart:async';
    + 2
    + 3import 'package:doc_flame_examples/ember.dart';
    + 4import 'package:flame/components.dart';
    + 5import 'package:flame/game.dart';
    + 6
    + 7class TimeScaleGame extends FlameGame with HasTimeScale {
    + 8  final _timeScales = [0.5, 1.0, 2.0];
    + 9  var _index = 1;
    +10
    +11  @override
    +12  Future<void> onLoad() async {
    +13    await add(
    +14      EmberPlayer(
    +15        position: size / 2,
    +16        size: size / 4,
    +17        onTap: (p0) => timeScale = getNextTimeScale(),
    +18      ),
    +19    );
    +20    return super.onLoad();
    +21  }
    +22
    +23  double getNextTimeScale() {
    +24    ++_index;
    +25    if (_index >= _timeScales.length) {
    +26      _index = 0;
    +27    }
    +28    return _timeScales[_index];
    +29  }
    +30}
    +
    +
    +
    +
    +
    import 'package:flame/components.dart';
    +import 'package:flame/game.dart';
    +
    +class MyFlameGame extends FlameGame with HasTimeScale {
    +  void speedUp(){
    +    timeScale = 2.0;
    +  }
    +
    +  void slowDown(){
    +    timeScale = 1.0;
    +  }
    +}
    +
    +
    +
    +
    +

    Extensions

    +

    Flame bundles a collection of utility extensions, these extensions are meant to help the developer +with shortcuts and conversion methods, here you can find the summary of those extensions.

    +

    They can all be imported from package:flame/extensions.dart

    +
    +

    Canvas

    +

    Methods:

    +
      +
    • scaleVector: Just like canvas scale method, but takes a Vector2 as an argument.

    • +
    • translateVector: Just like canvas translate method, but takes a Vector2 as an argument.

    • +
    • renderPoint: renders a single point on the canvas (mostly for debugging purposes).

    • +
    • renderAt and renderRotated: if you are directly rendering to the Canvas, you can use these +functions to easily manipulate coordinates to render things on the correct places. They change the +Canvas transformation matrix but reset afterwards.

    • +
    +
    +
    +

    Color

    +

    Methods:

    +
      +
    • darken: Darken the shade of the color by an amount between 0 to 1.

    • +
    • brighten: Brighten the shade of the color by an amount between 0 to 1.

    • +
    +

    Factories:

    +
      +
    • ColorExtension.fromRGBHexString: Parses an RGB color from a valid hex string (e.g. #1C1C1C).

    • +
    • ColorExtension.fromARGBHexString: Parses an ARGB color from a valid hex string (e.g. #FF1C1C1C).

    • +
    +
    +
    +

    Image

    +

    Methods:

    +
      +
    • pixelsInUint8: Retrieves the pixel data as a Uint8List, in the ImageByteFormat.rawRgba +pixel format, for the image.

    • +
    • getBoundingRect: Get the bounding rectangle of the Image as a Rect.

    • +
    • size: The size of an Image as Vector2.

    • +
    • darken: Darken each pixel of the Image by an amount between 0 to 1.

    • +
    • brighten: Brighten each pixel of the Image by an amount between 0 to 1.

    • +
    +
    +
    +

    Offset

    +

    Methods;

    +
      +
    • toVector2; Creates an Vector2 from the Offset.

    • +
    • toSize: Creates a Size from the Offset.

    • +
    • toPoint: Creates a Point from the Offset.

    • +
    • toRect: Creates a Rect starting in (0,0) and its bottom right corner is the [Offset].

    • +
    +
    +
    +

    Rect

    +

    Methods:

    +
      +
    • toOffset: Creates an Offset from the Rect.

    • +
    • toVector2: Creates a Vector2 starting in (0,0) and goes to the size of the Rect.

    • +
    • containsPoint Whether this Rect contains a Vector2 point or not.

    • +
    • intersectsSegment; Whether the segment formed by two Vector2s intersects this Rect.

    • +
    • intersectsLineSegment: Whether the LineSegment intersects the Rect.

    • +
    • toVertices: Turns the four corners of the Rect into a list of Vector2.

    • +
    • toFlameRectangle: Converts this Rect into a Flame Rectangle.

    • +
    • toMathRectangle: Converts this Rect into a math.Rectangle.

    • +
    • toGeometryRectangle: Converts this Rect into a Rectangle from flame-geom.

    • +
    • transform: Transforms the Rect using a Matrix4.

    • +
    +

    Factories:

    +
      +
    • RectExtension.getBounds: Construct a Rect that represents the bounds of a list of Vector2s.

    • +
    • RectExtension.fromCenter: Construct a Rect from a center point (using Vector2).

    • +
    +
    +
    +

    math.Rectangle

    +

    Methods:

    +
      +
    • toRect: Converts this math Rectangle into an ui Rect.

    • +
    +
    +
    +

    Size

    +

    Methods:

    +
      +
    • toVector2; Creates an Vector2 from the Size.

    • +
    • toOffset: Creates a Offset from the Size.

    • +
    • toPoint: Creates a Point from the Size.

    • +
    • toRect: Creates a Rect starting in (0,0) with the size of Size.

    • +
    +
    +
    +

    Vector2

    +

    This class comes from the vector_math package and we have some useful extension methods on top of +what is offered by that package.

    +

    Methods:

    +
      +
    • toOffset: Creates a Offset from the Vector2.

    • +
    • toPoint: Creates a Point from the Vector2.

    • +
    • toRect: Creates a Rect starting in (0,0) with the size of Vector2.

    • +
    • toPositionedRect: Creates a Rect starting from [x, y] in the Vector2 and has the size of +the Vector2 argument.

    • +
    • lerp: Linearly interpolates the Vector2 towards another Vector2.

    • +
    • rotate: Rotates the Vector2 with an angle specified in radians, it rotates around the +optionally defined Vector2, otherwise around the center.

    • +
    • scaleTo: Changes the length of the Vector2 to the length provided, without changing +direction.

    • +
    • moveToTarget: Smoothly moves a Vector2 in the target direction by a given distance.

    • +
    +

    Factories:

    +
      +
    • Vector2Extension.fromInts: Create a Vector2 with ints as input.

    • +
    +

    Operators:

    +
      +
    • &: Combines two Vector2s to form a Rect, the origin should be on the left and the size on the +right.

    • +
    • %: Modulo/Remainder of x and y separately of two Vector2s.

    • +
    +
    +
    +

    Matrix4

    +

    This class comes from the vector_math package. We have created a few extension methods on top +of what is already offered by vector_math.

    +

    Methods:

    +
      +
    • translate2: Translate the Matrix4 by the given Vector2.

    • +
    • transform2: Create a new Vector2 by transforming the given Vector2 using the Matrix4.

    • +
    • transformed2: Transform the input Vector2 into the output Vector2.

    • +
    +

    Getters:

    +
      +
    • m11: The first row and first column.

    • +
    • m12: The first row and second column.

    • +
    • m13: The first row and third column.

    • +
    • m14: The first row and fourth column.

    • +
    • m21: The second row and first column.

    • +
    • m22: The second row and second column.

    • +
    • m23: The second row and third column.

    • +
    • m24: The second row and fourth column.

    • +
    • m31: The third row and first column.

    • +
    • m32: The third row and second column.

    • +
    • m33: The third row and third column.

    • +
    • m34: The third row and fourth column.

    • +
    • m41: The fourth row and first column.

    • +
    • m42: The fourth row and second column.

    • +
    • m43: The fourth row and third column.

    • +
    • m44: The fourth row and fourth column.

    • +
    +

    Factories:

    +
      +
    • Matrix4Extension.scale: Create a scaled Matrix4. Either by passing a Vector4 or Vector2 +as it’s first argument, or by passing x y z doubles.

    • +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/other/widgets.html b/docs/1.18.0/flame/other/widgets.html new file mode 100644 index 000000000..7029d27ce --- /dev/null +++ b/docs/1.18.0/flame/other/widgets.html @@ -0,0 +1,451 @@ + + + + + + + Widgets — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Widgets

    +

    One advantage when developing games with Flutter is the ability to use Flutter’s extensive toolset +for building UIs, Flame tries to expand on that by introducing widgets that are made with games in +mind.

    +

    Here you can find all the available widgets provided by Flame.

    +

    You can also see all the widgets showcased inside a +Dashbook sandbox +here

    +
    +

    NineTileBoxWidget

    +

    A Nine Tile Box is a rectangle drawn using a grid sprite.

    +

    The grid sprite is a 3x3 grid and with 9 blocks, representing the 4 corners, the 4 sides and the +middle.

    +

    The corners are drawn at the same size, the sides are stretched on the side direction and the middle +is expanded both ways.

    +

    The NineTileBoxWidget implements a Container using that standard. This pattern is also +implemented as a component in the NineTileBoxComponent so that you can add this feature directly +to your FlameGame. To get to know more about this, check the component docs +here.

    +

    Here you can find an example of how to use it (without using the NineTileBoxComponent):

    +
    import 'package:flame/widgets';
    +
    +NineTileBoxWidget(
    +    image: image, // dart:ui image instance
    +    tileSize: 16, // The width/height of the tile on your grid image
    +    destTileSize: 50, // The dimensions to be used when drawing the tile on the canvas
    +    child: SomeWidget(), // Any Flutter widget
    +)
    +
    +
    +
    +
    +

    SpriteButton

    +

    SpriteButton is a simple widget that creates a button based on Flame sprites. This can be very +useful when trying to create non-default looking buttons. For example when it is easier for you to +achieve your wanted look by drawing the button in a graphics editor, instead of making it directly +in Flutter.

    +

    How to use it:

    +
    SpriteButton(
    +    onPressed: () {
    +      print('Pressed');
    +    },
    +    label: const Text('Sprite Button', style: const TextStyle(color: const Color(0xFF5D275D))),
    +    sprite: _spriteButton,
    +    pressedSprite: _pressedSprite,
    +    height: _height,
    +    width: _width,
    +)
    +
    +
    +
    +
    +

    SpriteWidget

    +

    SpriteWidget is a widget used to display a Sprite inside a widget +tree.

    +

    This is how to use it:

    +
    SpriteWidget(
    +    sprite: yourSprite,
    +    anchor: Anchor.center,
    +)
    +
    +
    +
    +
    +

    SpriteAnimationWidget

    +

    SpriteAnimationWidget is a widget used to display +SpriteAnimations inside a widget tree.

    +

    This is how to use it:

    +
    SpriteAnimationWidget(
    +    animation: _animation,
    +    animationTicker: _animationTicker,
    +    playing: true,
    +    anchor: Anchor.center,
    +)
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/overlays.html b/docs/1.18.0/flame/overlays.html new file mode 100644 index 000000000..d51437381 --- /dev/null +++ b/docs/1.18.0/flame/overlays.html @@ -0,0 +1,408 @@ + + + + + + + Overlays — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Overlays

    +

    Since a Flame game can be wrapped in a widget, it is quite easy to use it alongside other Flutter +widgets in your tree. However, if you want to easily show widgets on top of your Flame game, like +messages, menu screens or something of that nature, you can use the Widgets Overlay API to make +things even easier.

    +

    Game.overlays enables any Flutter widget to be shown on top of a game instance. This makes it very +easy to create things like a pause menu or an inventory screen for example.

    +

    The feature can be used via the game.overlays.add and game.overlays.remove methods that mark an +overlay to be shown or hidden, respectively, via a String argument that identifies the overlay. +After that, you can map each overlay to their corresponding Widget in your GameWidget declaration +by providing an overlayBuilderMap.

    +
      // Inside your game:
    +  final pauseOverlayIdentifier = 'PauseMenu';
    +
    +  // Marks 'PauseMenu' to be rendered.
    +  overlays.add(pauseOverlayIdentifier);
    +  // Marks 'PauseMenu' to not be rendered.
    +  overlays.remove(pauseOverlayIdentifier);
    +
    +
    +
    // On the widget declaration
    +final game = MyGame();
    +
    +Widget build(BuildContext context) {
    +  return GameWidget(
    +    game: game,
    +    overlayBuilderMap: {
    +      'PauseMenu': (BuildContext context, MyGame game) {
    +        return Text('A pause menu');
    +      },
    +    },
    +  );
    +}
    +
    +
    +

    The order of rendering for an overlay is determined by the order of the keys in the +overlayBuilderMap.

    +

    See an example of the Overlays feature.

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/platforms.html b/docs/1.18.0/flame/platforms.html new file mode 100644 index 000000000..edc727dbb --- /dev/null +++ b/docs/1.18.0/flame/platforms.html @@ -0,0 +1,466 @@ + + + + + + + Supported Platforms — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Supported Platforms

    +

    Since Flame runs on top of Flutter, so its supported platforms depend on which platforms that are +supported by Flutter.

    +

    At the moment, Flame supports web, mobile(Android and iOS) and desktop (Windows, MacOS and Linux).

    +
    +

    Flutter channels

    +

    Flame keeps it support on the stable channel. The dev, beta and master channel should work, but we +don’t support them. This means that issues happening outside the stable channel are not a priority.

    +
    +
    +

    Flame web

    +

    To use Flame on web you need to make sure your game is using the CanvasKit/Skia +renderer. This will increase performance on the web, as it will use the canvas element instead of +separate DOM elements.

    +

    To run your game using skia, use the following command:

    +
    flutter run -d chrome --web-renderer canvaskit
    +
    +
    +

    To build the game for production, using skia, use the following:

    +
    flutter build web --release --web-renderer canvaskit
    +
    +
    +
    +
    +

    Deploy your game to GitHub Pages

    +

    One easy way to deploy your game online, is to use GitHub Pages. +It is a cool feature from GitHub, by which you can easily host web content from your repository.

    +

    Here we will explain the easiest way to get your game hosted using GitHub pages.

    +

    First thing, lets create the branch where your deployed files will live:

    +
    git checkout -b gh-pages
    +
    +
    +

    This branch can be created from main or any other place, it doesn’t matter much. After you push that +branch go back to your main branch.

    +

    Now you should add the flutter-gh-pages +action to your repository, you can do that by creating a file gh-pages.yaml under the folder +.github/workflows.

    +
    name: Gh-Pages
    +
    +on:
    +  push:
    +    branches: [ main ]
    +
    +jobs:
    +  build:
    +    runs-on: ubuntu-latest
    +
    +    steps:
    +      - uses: actions/checkout@v3
    +      - uses: subosito/flutter-action@v2
    +      - uses: bluefireteam/flutter-gh-pages@v8
    +        with:
    +          baseHref: /NAME_OF_YOUR_REPOSITORY/
    +          webRenderer: canvaskit
    +
    +
    +

    Be sure to change NAME_OF_YOUR_REPOSITORY to the name of your GitHub repository.

    +

    Now, whenever you push something to the main branch, the action will run and update your +deployed game.

    +

    The game should be available at an URL like this: +https://YOUR_GITHUB_USERNAME.github.io/YOUR_REPO_NAME/

    +
    +
    +

    Deploy your game to itch.io

    +
      +
    1. Create a web build, either from your IDE or by running flutter build web +(If it complains about Missing index.html run flutter create . --platforms=web)

    2. +
    3. Go into index.html and remove the line that says <base href="/">

    4. +
    5. zip the build/web folder and upload to itch.io

    6. +
    +

    Remember that it shouldn’t be the web directory in your project’s root, but in build/web!

    +

    If you are submitting your game to a game jam, remember to make it public and submit it on the +game jam page too (many get confused by this).

    +

    Further instructions can be found on +itch.io.

    +
    +

    Web support

    +

    When using Flame on the web some methods may not work. For example Flame.device.setOrientation and +Flame.device.fullScreen won’t work on web, they can be called, but nothing will happen.

    +

    Another example: pre caching audio using flame_audio package also doesn’t work due to Audioplayers +not supporting it on web. This can be worked around by using the http package, and requesting a +get to the audio file, that will make the browser cache the file producing the same effect as on +mobile.

    +

    If you want to create instances of ui.Image on the web you can use our +Flame.images.decodeImageFromPixels method. This wraps the decodeImageFromPixels from the ui +library, but with support for the web platform. If the runAsWeb argument is set to true (by +default it is set to kIsWeb) it will decode the image using an internal image method. When the +runAsWeb is false it will use the decodeImageFromPixels, which is currently not supported on +the web.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/rendering/decorators.html b/docs/1.18.0/flame/rendering/decorators.html new file mode 100644 index 000000000..f43bbc49d --- /dev/null +++ b/docs/1.18.0/flame/rendering/decorators.html @@ -0,0 +1,759 @@ + + + + + + + Decorators — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Decorators

    +

    Decorators are classes that can encapsulate certain visual effects and then apply those visual +effects to a sequence of canvas drawing operations. Decorators are not Components, but they can +be applied to components either manually or via the HasDecorator mixin. Likewise, decorators are +not Effects, although they can be used to implement certain Effects.

    +

    There are a certain number of decorators available in Flame, and it is simple to add one’s own if +necessary. We are planning to add shader-based decorators once Flutter fully supports them on the +web.

    +
    +

    Flame built-in decorators

    +
    +

    PaintDecorator.blur

    +
    +
    +
    +decorator_blur.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/game.dart';
    + 3import 'package:flame/rendering.dart';
    + 4
    + 5class DecoratorBlurGame extends FlameGame {
    + 6  @override
    + 7  Future<void> onLoad() async {
    + 8    var step = 0;
    + 9    add(
    +10      Flower(
    +11        size: 100,
    +12        position: canvasSize / 2,
    +13        onTap: (flower) {
    +14          final decorator = flower.decorator;
    +15          step++;
    +16          if (step == 1) {
    +17            decorator.addLast(PaintDecorator.blur(3.0));
    +18          } else if (step == 2) {
    +19            decorator.replaceLast(PaintDecorator.blur(5.0));
    +20          } else if (step == 3) {
    +21            decorator.replaceLast(PaintDecorator.blur(0.0, 20.0));
    +22          } else {
    +23            decorator.replaceLast(null);
    +24            step = 0;
    +25          }
    +26        },
    +27      )..onTapUp(),
    +28    );
    +29  }
    +30}
    +
    +
    +
    +
    +

    This decorator applies a Gaussian blur to the underlying component. The amount of blur can be +different in the X and Y direction, though this is not very common.

    +
    final decorator = PaintDecorator.blur(3.0);
    +
    +
    +

    Possible uses:

    +
      +
    • soft shadows;

    • +
    • “out-of-focus” objects in the distance or very close to the camera;

    • +
    • motion blur effects;

    • +
    • deemphasize/obscure content when showing a popup dialog;

    • +
    • blurred vision when the character is drunk.

    • +
    +
    +
    +

    PaintDecorator.grayscale

    +
    +
    +
    +decorator_grayscale.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/game.dart';
    + 3import 'package:flame/rendering.dart';
    + 4
    + 5class DecoratorGrayscaleGame extends FlameGame {
    + 6  @override
    + 7  Future<void> onLoad() async {
    + 8    var step = 0;
    + 9    add(
    +10      Flower(
    +11        size: 100,
    +12        position: canvasSize / 2,
    +13        onTap: (flower) {
    +14          final decorator = flower.decorator;
    +15          step++;
    +16          if (step == 1) {
    +17            decorator.addLast(PaintDecorator.grayscale());
    +18          } else if (step == 2) {
    +19            decorator.replaceLast(PaintDecorator.grayscale(opacity: 0.5));
    +20          } else if (step == 3) {
    +21            decorator.replaceLast(PaintDecorator.grayscale(opacity: 0.2));
    +22          } else if (step == 4) {
    +23            decorator.replaceLast(PaintDecorator.grayscale(opacity: 0.1));
    +24          } else {
    +25            decorator.removeLast();
    +26            step = 0;
    +27          }
    +28        },
    +29      )..onTapUp(),
    +30    );
    +31  }
    +32}
    +
    +
    +
    +
    +

    This decorator converts the underlying image into the shades of grey, as if it was a +black-and-white photograph. In addition, you can make the image semi-transparent to the desired +level of opacity.

    +
    final decorator = PaintDecorator.grayscale(opacity: 0.5);
    +
    +
    +

    Possible uses:

    +
      +
    • apply to an NPC to turn them into stone, or into a ghost!

    • +
    • apply to a scene to indicate that it is a memory of the past;

    • +
    • black-and-white photos.

    • +
    +
    +
    +

    PaintDecorator.tint

    +
    +
    +
    +decorator_tint.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:doc_flame_examples/flower.dart';
    + 4import 'package:flame/game.dart';
    + 5import 'package:flame/rendering.dart';
    + 6
    + 7class DecoratorTintGame extends FlameGame {
    + 8  @override
    + 9  Future<void> onLoad() async {
    +10    var step = 0;
    +11    add(
    +12      Flower(
    +13        size: 100,
    +14        position: canvasSize / 2,
    +15        onTap: (flower) {
    +16          final decorator = flower.decorator;
    +17          step++;
    +18          if (step == 1) {
    +19            decorator.addLast(PaintDecorator.tint(const Color(0x88FF0000)));
    +20          } else if (step == 2) {
    +21            decorator.replaceLast(PaintDecorator.tint(const Color(0x8800FF00)));
    +22          } else if (step == 3) {
    +23            decorator.replaceLast(PaintDecorator.tint(const Color(0x88000088)));
    +24          } else if (step == 4) {
    +25            decorator.replaceLast(PaintDecorator.tint(const Color(0x66FFFFFF)));
    +26          } else if (step == 5) {
    +27            decorator.replaceLast(PaintDecorator.tint(const Color(0xAA000000)));
    +28          } else {
    +29            decorator.removeLast();
    +30            step = 0;
    +31          }
    +32        },
    +33      )..onTapUp(),
    +34    );
    +35  }
    +36}
    +
    +
    +
    +
    +

    This decorator tints the underlying image with the specified color, as if watching it through a +colored glass. It is recommended that the color used by this decorator was semi-transparent, so +that you can see the details of the image below.

    +
    final decorator = PaintDecorator.tint(const Color(0xAAFF0000);
    +
    +
    +

    Possible uses:

    +
      +
    • NPCs affected by certain types of magic;

    • +
    • items/characters in the shadows can be tinted black;

    • +
    • tint the scene red to show bloodlust, or that the character is low on health;

    • +
    • tint green to show that the character is poisoned or sick;

    • +
    • tint the scene deep blue during the night time;

    • +
    +
    +
    +

    Rotate3DDecorator

    +
    +
    +
    +decorator_rotate3d.dart
    +
     1import 'package:doc_flame_examples/flower.dart';
    + 2import 'package:flame/game.dart';
    + 3import 'package:flame/rendering.dart';
    + 4
    + 5class DecoratorRotate3DGame extends FlameGame {
    + 6  @override
    + 7  Future<void> onLoad() async {
    + 8    var step = 0;
    + 9    final decorator = Rotate3DDecorator()
    +10      ..center = Vector2.all(50)
    +11      ..perspective = 0.01;
    +12    add(
    +13      Flower(
    +14        size: 100,
    +15        position: canvasSize / 2,
    +16        decorator: decorator,
    +17        onTap: (flower) {
    +18          step++;
    +19          if (step == 1) {
    +20            decorator.angleY = -0.8;
    +21          } else if (step == 2) {
    +22            decorator.angleX = 1.0;
    +23          } else if (step == 3) {
    +24            decorator.angleZ = 0.2;
    +25          } else if (step == 4) {
    +26            decorator.angleX = 10;
    +27          } else if (step == 5) {
    +28            decorator.angleY = 2;
    +29          } else {
    +30            decorator
    +31              ..angleX = 0
    +32              ..angleY = 0
    +33              ..angleZ = 0;
    +34            step = 0;
    +35          }
    +36        },
    +37      )..onTapUp(),
    +38    );
    +39  }
    +40}
    +
    +
    +
    +
    +

    This decorator applies a 3D rotation to the underlying component. You can specify the angles of the +rotation, as well as the pivot point and the amount of perspective distortion to apply.

    +

    The decorator also supplies the isFlipped property, which allows you to determine whether the +component is currently being viewed from the front side or from the back. This is useful if you want +to draw a component whose appearance is different in the front and in the back.

    +
    final decorator = Rotate3DDecorator(
    +  center: component.center,
    +  angleX: rotationAngle,
    +  perspective: 0.002,
    +);
    +
    +
    +

    Possible uses:

    +
      +
    • a card that can be flipped over;

    • +
    • pages in a book;

    • +
    • transitions between app routes;

    • +
    • 3d falling particles such as snowflakes or leaves.

    • +
    +
    +
    +

    Shadow3DDecorator

    +
    +
    +
    +decorator_shadow3d.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:doc_flame_examples/flower.dart';
    + 4import 'package:flame/components.dart';
    + 5import 'package:flame/game.dart';
    + 6import 'package:flame/rendering.dart';
    + 7
    + 8class DecoratorShadowGame extends FlameGame {
    + 9  @override
    +10  Color backgroundColor() => const Color(0xFFC7C7C7);
    +11
    +12  @override
    +13  Future<void> onLoad() async {
    +14    final decorator = Shadow3DDecorator(base: Vector2(0, 100));
    +15    var step = 0;
    +16    add(Grid());
    +17    add(
    +18      Flower(
    +19        size: 100,
    +20        position: canvasSize / 2,
    +21        decorator: decorator,
    +22        onTap: (flower) {
    +23          step++;
    +24          if (step == 1) {
    +25            decorator.xShift = 200;
    +26            decorator.opacity = 0.5;
    +27          } else if (step == 2) {
    +28            decorator.xShift = 400;
    +29            decorator.yScale = 3;
    +30            decorator.blur = 1;
    +31          } else if (step == 3) {
    +32            decorator.angle = 1.7;
    +33            decorator.blur = 2;
    +34          } else if (step == 4) {
    +35            decorator.ascent = 20;
    +36            decorator.angle = 1.7;
    +37            decorator.blur = 2;
    +38            flower.y -= 20;
    +39          } else {
    +40            decorator.ascent = 0;
    +41            decorator.xShift = 0;
    +42            decorator.yScale = 1;
    +43            decorator.angle = -1.4;
    +44            decorator.opacity = 0.8;
    +45            decorator.blur = 0;
    +46            flower.y += 20;
    +47            step = 0;
    +48          }
    +49        },
    +50      )..onTapUp(),
    +51    );
    +52  }
    +53}
    +54
    +55class Grid extends Component {
    +56  final paint = Paint()
    +57    ..color = const Color(0xffa9a9a9)
    +58    ..style = PaintingStyle.stroke
    +59    ..strokeWidth = 1;
    +60  @override
    +61  void render(Canvas canvas) {
    +62    for (var i = 0; i < 50; i++) {
    +63      canvas.drawLine(Offset(0, i * 25), Offset(500, i * 25), paint);
    +64      canvas.drawLine(Offset(i * 25, 0), Offset(i * 25, 500), paint);
    +65    }
    +66  }
    +67}
    +
    +
    +
    +
    +

    This decorator renders a shadow underneath the component, as if the component was a 3D object +standing on a plane. This effect works best for games that use isometric camera projection.

    +

    The shadow produced by this generator is quite flexible: you can control its angle, length, opacity, +blur, etc. For a full description of what properties this decorator has and their meaning, see the +class documentation.

    +
    final decorator = Shadow3DDecorator(
    +  base: Vector2(100, 150),
    +  angle: -1.4,
    +  xShift: 200,
    +  yScale: 1.5,
    +  opacity: 0.5,
    +  blur: 1.5,
    +);
    +
    +
    +

    The primary purpose of this decorator is to add shadows on the ground to your components. The main +limitation is that the shadows are flat and cannot interact with the environment. For example, this +decorator cannot handle shadows that fall onto walls or other vertical structures.

    +
    +
    +
    +

    Using decorators

    +
    +

    HasDecorator mixin

    +

    This Component mixin adds the decorator property, which is initially null. If you set this +property to an actual Decorator object, then that decorator will apply its visual effect during +the rendering of the component. In order to remove this visual effect, simply set the decorator +property back to null.

    +
    +
    +

    PositionComponent

    +

    PositionComponent (and all the derived classes) already has a decorator property, so for these +components the HasDecorator mixin is not needed.

    +

    In fact, the PositionComponent uses its decorator in order to properly position the component on +the screen. Thus, any new decorators that you’d want to apply to the PositionComponent will need +to be chained (see the Multiple decorators section below).

    +

    It is also possible to replace the root decorator of the PositionComponent, if you want to create +an alternative logic for how the component shall be positioned on the screen.

    +
    +
    +

    Multiple decorators

    +

    It is possible to apply several decorators simultaneously to the same component: the Decorator +class supports chaining. That is, if you have an existing decorator on a component and you want to +add another one, then you can call component.decorator.addLast(newDecorator) – this will add +the new decorator at the end of the existing chain. The method removeLast() can remove that +decorator later.

    +

    Several decorators can be chain that way. For example, if A is an initial decorator, then +A.addLast(B) can be followed by either A.addLast(C) or B.addLast(C) – and in both cases the +chain A -> B -> C will be created. In practice, it means that the entire chain can be manipulated +from its root, which usually is component.decorator.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/rendering/images.html b/docs/1.18.0/flame/rendering/images.html new file mode 100644 index 000000000..c5f46fedb --- /dev/null +++ b/docs/1.18.0/flame/rendering/images.html @@ -0,0 +1,673 @@ + + + + + + + Images — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Images

    +

    To start off you must have an appropriate folder structure and add the files to the pubspec.yaml +file, like this:

    +
    flutter:
    +  assets:
    +    - assets/images/player.png
    +    - assets/images/enemy.png
    +
    +
    +

    Images can be in any format supported by Flutter, which include: JPEG, WebP, PNG, GIF, animated GIF, +animated WebP, BMP, and WBMP. Other formats would require additional libraries. For example, SVG +images can be loaded via the flame_svg library.

    +
    +

    Loading images

    +

    Flame bundles an utility class called Images that allows you to easily load and cache images from +the assets directory into memory.

    +

    Flutter has a handful of types related to images, and converting everything properly from a local +asset to an Image that can be drawn on Canvas is a bit convoluted. This class allows you to obtain +an Image that can be drawn on the Canvas using the drawImageRect method.

    +

    It automatically caches any image loaded by filename, so you can safely call it many times.

    +

    The methods for loading and clearing the cache are: load, loadAll, clear and clearCache. +They return Futures for loading the images. These futures must be awaited for before the images +can be used in any way. If you do not want to await these futures right away, you can initiate +multiple load() operations and then await for all of them at once using Images.ready() method.

    +

    To synchronously retrieve a previously cached image, the fromCache method can be used. If an image +with that key was not previously loaded, it will throw an exception.

    +

    To add an already loaded image to the cache, the add method can be used and you can set the key +that the image should have in the cache.

    +

    You can also use ImageExtension.fromPixels() to dynamically create an image during the game.

    +

    For clear and clearCache, do note that dispose is called for each removed image from the +cache, so make sure that you don’t use the image afterwards.

    +
    +

    Standalone usage

    +

    It can manually be used by instantiating it:

    +
    import 'package:flame/cache.dart';
    +final imagesLoader = Images();
    +Image image = await imagesLoader.load('yourImage.png');
    +
    +
    +

    But Flame also offers two ways of using this class without instantiating it yourself.

    +
    +
    +

    Flame.images

    +

    There is a singleton, provided by the Flame class, that can be used as a global image cache.

    +

    Example:

    +
    import 'package:flame/flame.dart';
    +import 'package:flame/sprite.dart';
    +
    +// inside an async context
    +Image image = await Flame.images.load('player.png');
    +
    +final playerSprite = Sprite(image);
    +
    +
    +
    +
    +

    Game.images

    +

    The Game class offers some utility methods for handling images loading too. It bundles an instance +of the Images class, that can be used to load image assets to be used during the game. The game +will automatically free the cache when the game widget is removed from the widget tree.

    +

    The onLoad method from the Game class is a great place for the initial assets to be loaded.

    +

    Example:

    +
    class MyGame extends Game {
    +
    +  Sprite player;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    // Note that you could also use Sprite.load for this.
    +    final playerImage = await images.load('player.png');
    +    player = Sprite(playerImage);
    +  }
    +}
    +
    +
    +

    Loaded assets can also be retrieved while the game is running by images.fromCache, for example:

    +
    class MyGame extends Game {
    +
    +  // attributes omitted
    +
    +  @override
    +  Future<void> onLoad() async {
    +    // other loads omitted
    +    await images.load('bullet.png');
    +  }
    +
    +  void shoot() {
    +    // This is just an example, in your game you probably don't want to
    +    // instantiate new [Sprite] objects every time you shoot.
    +    final bulletSprite = Sprite(images.fromCache('bullet.png'));
    +    _bullets.add(bulletSprite);
    +  }
    +}
    +
    +
    +
    +
    +
    +

    Loading images over the network

    +

    The Flame core package doesn’t offer a built in method to loading images from the network.

    +

    The reason for that is that Flutter/Dart does not have a built in http client, which requires +a package to be used and since there are a couple of packages available out there, we refrain +from forcing the user to use a specific package.

    +

    With that said, it is quite simple to load images from the network once a http client package +is chosen by the user. The following snippet shows how an Image can be fetched from the web +using the http package.

    +
    import 'package:http/http.dart' as http;
    +import 'package:flutter/painting.dart';
    +
    +final response = await http.get('https://url.com/image.png');
    +final image = await decodeImageFromList(response.bytes);
    +
    +
    +
    +

    Note

    +

    Check flame_network_assets +for a ready to use network assets solution that provides a built in cache.

    +
    +
    +
    +

    Sprite

    +

    Flame offers a Sprite class that represents an image, or a region of an image.

    +

    You can create a Sprite by providing it an Image and coordinates that defines the piece of the +image that that sprite represents.

    +

    For example, this will create a sprite representing the whole image of the file passed:

    +
    final image = await images.load('player.png');
    +Sprite player = Sprite(image);
    +
    +
    +

    You can also specify the coordinates in the original image where the sprite is located. This allows +you to use sprite sheets and reduce the number of images in memory, for example:

    +
    final image = await images.load('player.png');
    +final playerFrame = Sprite(
    +  image,
    +  srcPosition: Vector2(32.0, 0),
    +  srcSize: Vector2(16.0, 16.0),
    +);
    +
    +
    +

    The default values are (0.0, 0.0) for srcPosition and null for srcSize (meaning it will use +the full width/height of the source image).

    +

    The Sprite class has a render method, that allows you to render the sprite onto a Canvas:

    +
    final image = await images.load('block.png');
    +Sprite block = Sprite(image);
    +
    +// in your render method
    +block.render(canvas, 16.0, 16.0); //canvas, width, height
    +
    +
    +

    You must pass the size to the render method, and the image will be resized accordingly.

    +

    All render methods from the Sprite class can receive a Paint instance as the optional named +parameter overridePaint that parameter will override the current Sprite paint instance for that +render call.

    +

    Sprites can also be used as widgets, to do so just use SpriteWidget class. +Here is a complete +example using sprite as widgets.

    +
    +
    +

    SpriteBatch

    +

    If you have a sprite sheet (also called an image atlas, which is an image with smaller images +inside), and would like to render it effectively - SpriteBatch handles that job for you.

    +

    Give it the filename of the image, and then add rectangles which describes various part of the +image, in addition to transforms (position, scale and rotation) and optional colors.

    +

    You render it with a Canvas and an optional Paint, BlendMode and CullRect.

    +

    A SpriteBatchComponent is also available for your convenience.

    +

    See how to use it in the +SpriteBatch examples

    +
    +
    +

    ImageComposition

    +

    In some cases you may want to merge multiple images into a single image; this is called +Compositing. This can be useful for example when +working with the SpriteBatch API to optimize your drawing calls.

    +

    For such use cases Flame comes with the ImageComposition class. This allows you to add multiple +images, each at their own position, onto a new image:

    +
    final composition = ImageComposition()
    +  ..add(image1, Vector2(0, 0))
    +  ..add(image2, Vector2(64, 0));
    +  ..add(image3,
    +    Vector2(128, 0),
    +    source: Rect.fromLTWH(32, 32, 64, 64),
    +  );
    +  
    +Image image = await composition.compose();
    +Image imageSync = composition.composeSync();
    +
    +
    +

    As you can see, two versions of composing image are available. Use ImageComposition.compose() for +the async approach. Or use the new ImageComposition.composeSync() function to rasterize the +image into GPU context using the benefits of the Picture.toImageSync function.

    +

    Note: Composing images is expensive, we do not recommend you run this every tick as it affect +the performance badly. Instead we recommend to have your compositions pre-rendered so you can just +reuse the output image.

    +
    +
    +

    Animation

    +

    The Animation class helps you create a cyclic animation of sprites.

    +

    You can create it by passing a list of equally sized sprites and the stepTime (that is, how many +seconds it takes to move to the next frame):

    +
    final a = SpriteAnimationTicker(SpriteAnimation.spriteList(sprites, stepTime: 0.02));
    +
    +
    +

    After the animation is created, you need to call its update method and render the current frame’s +sprite on your game instance.

    +

    Example:

    +
    class MyGame extends Game {
    +  SpriteAnimationTicker a;
    +
    +  MyGame() {
    +    a = SpriteAnimationTicker(SpriteAnimation(...));
    +  }
    +
    +  void update(double dt) {
    +    a.update(dt);
    +  }
    +
    +  void render(Canvas c) {
    +    a.getSprite().render(c);
    +  }
    +}
    +
    +
    +

    A better alternative to generate a list of sprites is to use the fromFrameData constructor:

    +
    const amountOfFrames = 8;
    +final a = SpriteAnimation.fromFrameData(
    +    imageInstance,
    +    SpriteAnimationFrame.sequenced(
    +      amount: amountOfFrames,
    +      textureSize: Vector2(16.0, 16.0),
    +      stepTime: 0.1,
    +    ),
    +);
    +
    +
    +

    This constructor makes creating an Animation very easy when using sprite sheets.

    +

    In the constructor you pass an image instance and the frame data, which contains some parameters +that can be used to describe the animation. Check the documentation on the constructors available on +the SpriteAnimationFrameData class to see all the parameters.

    +

    If you use Aseprite for your animations, Flame does provide some support for Aseprite animation’s +JSON data. To use this feature you will need to export the Sprite Sheet’s JSON data, and use +something like the following snippet:

    +
    final image = await images.load('chopper.png');
    +final jsonData = await assets.readJson('chopper.json');
    +final animation = SpriteAnimation.fromAsepriteData(image, jsonData);
    +
    +
    +

    Note: trimmed sprite sheets are not supported by flame, so if you export your sprite sheet this +way, it will have the trimmed size, not the sprite original size.

    +

    Animations, after created, have an update and render method; the latter renders the current frame, +and the former ticks the internal clock to update the frames.

    +

    Animations are normally used inside SpriteAnimationComponents, but custom components with several +Animations can be created as well.

    +

    To learn more, check out the full example code of +using animations as widgets.

    +
    +
    +

    SpriteSheet

    +

    Sprite sheets are big images with several frames of the same sprite on it and is a very good way to +organize and store your animations. Flame provides a very simple utility class to deal with +SpriteSheets, using which you can load your sprite sheet image and extract animations from it as +well. Following is a simple example of how to use it:

    +
    import 'package:flame/sprite.dart';
    +
    +final spriteSheet = SpriteSheet(
    +  image: imageInstance,
    +  srcSize: Vector2.all(16.0),
    +);
    +
    +final animation = spriteSheet.createAnimation(0, stepTime: 0.1);
    +
    +
    +

    Now you can use the animation directly or use it in an animation component.

    +

    You can also create a custom animation by retrieving individual SpriteAnimationFrameData using +either SpriteSheet.createFrameData or SpriteSheet.createFrameDataFromId:

    +
    final animation = SpriteAnimation.fromFrameData(
    +  imageInstance, 
    +  SpriteAnimationData([
    +    spriteSheet.createFrameDataFromId(1, stepTime: 0.1), // by id
    +    spriteSheet.createFrameData(2, 3, stepTime: 0.3), // row, column
    +    spriteSheet.createFrameDataFromId(4, stepTime: 0.1), // by id
    +  ]),
    +);
    +
    +
    +

    If you don’t need any kind of animation and instead only want an instance of a Sprite on the +SpriteSheet you can use the getSprite or getSpriteById methods:

    +
    spriteSheet.getSpriteById(2); // by id
    +spriteSheet.getSprite(0, 0); // row, column
    +
    +
    +

    See a full example of the SpriteSheet class +for more details on how to work with it.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/rendering/layers.html b/docs/1.18.0/flame/rendering/layers.html new file mode 100644 index 000000000..60f769154 --- /dev/null +++ b/docs/1.18.0/flame/rendering/layers.html @@ -0,0 +1,618 @@ + + + + + + + Layers and Snapshots — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Layers and Snapshots

    +

    Layers and snapshots share some common features, including the ability to pre-render and cache +objects for improved performance. However, they also have unique features which make them better +suited for different use-cases.

    +

    Snapshot is a mixin that can be added to any PositionComponent. Use this for:

    +
      +
    • Mixing in to existing game objects (that are PositionComponents).

    • +
    • Caching game objects, such as sprites, that are complex to render.

    • +
    • Drawing the same object many times without rendering it each time.

    • +
    • Capturing an image snapshot to save as a screenshot (for example).

    • +
    +

    Layer is a class. Use or extend this class for:

    +
      +
    • Structuring your game with logical layers (e.g. UI, foreground, main, background).

    • +
    • Grouping objects to form a complex scene, and then caching it (e.g. a background layer).

    • +
    • Processor support. Layers allow user-defined processors to run pre- and post- render.

    • +
    +
    +

    Layers

    +

    Layers allow you to group rendering by context, as well as allow you to pre-render things. This +enables, for example, rendering parts of your game that don’t change much in memory, like a +background. By doing this, you’ll free processing power for more dynamic content that needs to be +rendered every game tick.

    +

    There are two types of layers on Flame:

    +
      +
    • DynamicLayer: For things that are moving or changing.

    • +
    • PreRenderedLayer: For things that are static.

    • +
    +
    +

    DynamicLayer

    +

    Dynamic layers are layers that are rendered every time that they are drawn on the canvas. As the +name suggests, it is meant for dynamic content and is most useful for grouping rendering of objects +that have the same context.

    +

    Usage example:

    +
    class GameLayer extends DynamicLayer {
    +  final MyGame game;
    +
    +  GameLayer(this.game);
    +
    +  @override
    +  void drawLayer() {
    +    game.playerSprite.render(
    +      canvas,
    +      position: game.playerPosition,
    +    );
    +    game.enemySprite.render(
    +      canvas,
    +      position: game.enemyPosition,
    +    );
    +  }
    +}
    +
    +class MyGame extends Game {
    +  // Other methods omitted...
    +
    +  @override
    +  void render(Canvas canvas) {
    +    gameLayer.render(canvas); // x and y can be provided as optional position arguments
    +  }
    +}
    +
    +
    +
    +
    +

    PreRenderedLayer

    +

    Pre-rendered layers are rendered only once, cached in memory and then just +replicated on the game canvas afterwards. They are useful for caching content that doesn’t change +during the game, like a background for example.

    +

    Usage example:

    +
    class BackgroundLayer extends PreRenderedLayer {
    +  final Sprite sprite;
    +
    +  BackgroundLayer(this.sprite);
    +
    +  @override
    +  void drawLayer() {
    +    sprite.render(
    +      canvas,
    +      position: Vector2(50, 200),
    +    );
    +  }
    +}
    +
    +class MyGame extends Game {
    +  // Other methods omitted...
    +
    +  @override
    +  void render(Canvas canvas) {
    +    // x and y can be provided as optional position arguments.
    +    backgroundLayer.render(canvas);
    +  }
    +}
    +
    +
    +
    +
    +

    Layer Processors

    +

    Flame also provides a way to add processors on your layer, which are ways to add effects on the +entire layer. At the moment, out of the box, only the ShadowProcessor is available, this processor +renders a back drop shadow on your layer.

    +

    To add processors to your layer, just add them to the layer preProcessors or postProcessors +list, like so:

    +
    // Works the same for both DynamicLayer and PreRenderedLayer
    +class BackgroundLayer extends PreRenderedLayer {
    +  final Sprite sprite;
    +
    +  BackgroundLayer(this.sprite) {
    +    preProcessors.add(ShadowProcessor());
    +  }
    +
    +  @override
    +  void drawLayer() { /* omitted */ }
    +
    +  // ...
    +
    +
    +

    Custom processors can be created by extending the LayerProcessor class.

    +

    See a working example of layers.

    +
    +
    +
    +

    Snapshots

    +

    Snapshots are an alternative to layers. The Snapshot mixin can be applied to any PositionComponent.

    +
    class SnapshotComponent extends PositionComponent with Snapshot {}
    +
    +class MyGame extends FlameGame {
    +  late final SnapshotComponent root;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    // Add a snapshot component.
    +    root = SnapshotComponent();
    +    add(root);
    +  }
    +}
    +
    +
    +
    +

    Render as a snapshot

    +

    Setting renderSnapshot to true (the default) on a snapshot-enabled component behaves similarly +to a PreRenderedLayer. The component is rendered only once, cached in memory and then just +replicated on the game canvas afterwards. This is useful for caching content that doesn’t change +during the game, like a background.

    +
    class SnapshotComponent extends PositionComponent with Snapshot {}
    +
    +class MyGame extends FlameGame {
    +  late final SnapshotComponent root;
    +  late final SpriteComponent background1;
    +  late final SpriteComponent background2;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    // Add a snapshot component.
    +    root = SnapshotComponent();
    +    add(root);
    +
    +    // Add some children.
    +    final background1Sprite = Sprite(await images.load('background1.png'));
    +    background1 = SpriteComponent(sprite: background1Sprite);
    +    root.add(background1);
    +
    +    final background2Sprite = Sprite(await images.load('background2.png'));
    +    background2 = SpriteComponent(sprite: background2Sprite);
    +    root.add(background2);
    +
    +    // root will now render once (itself and all its children) and then cache
    +    // the result. On subsequent render calls, root itself, nor any of its
    +    // children, will be rendered. The snapshot will be used instead for
    +    // improved performance.
    +  }
    +}
    +
    +
    +
    +

    Regenerating a snapshot

    +

    A snapshot-enabled component will generate a snapshot of its entire tree, including its children. +If any of the children change (for example, their position changes, or they are animated), call +takeSnapshot to update the cached snapshot. If they are changing very frequently, it’s best not +to use a Snapshot because there will be no performance benefit.

    +

    A component rendering a snapshot can still be transformed without incurring any performance cost. +Once a snapshot has been taken, the component may still be scaled, moved and rotated. However, if +the content of the component changes (what it is rendering) then the snapshot must be regenerated +by calling takeSnapshot.

    +
    +
    +
    +

    Taking a snapshot

    +

    A snapshot-enabled component can be used to generate a snapshot at any time, even if +renderSnapshot is set to false. This is useful for taking screen-grabs or any other purpose when +it may be useful to have a static snapshot of all or part of your game.

    +

    A snapshot is always generated with no transform applied - i.e. as if the snapshot-enabled +component is at position (0,0) and has no scale or rotation applied.

    +

    A snapshot is saved as a Picture, but it can be converted to an Image using snapshotToImage.

    +
    class SnapshotComponent extends PositionComponent with Snapshot {}
    +
    +class MyGame extends FlameGame {
    +  late final SnapshotComponent root;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    // Add a snapshot component, but don't use its render mode.
    +    root = SnapshotComponent()..renderSnapshot = false;
    +    add(root);
    +
    +    // Other code omitted.
    +  }
    +
    +  // Call something like this to take an image snapshot at any time.
    +  void takeSnapshot() {
    +    root.takeSnapshot();
    +    final image = root.snapshotToImage(200, 200);
    +  }
    +}
    +
    +
    +
    +
    +

    Snapshots that are cropped or off-center

    +

    Sometimes your snapshot Image may appear cropped, or not in the position you expected.

    +

    This is because the contents of a Picture can be positioned anywhere with respect to the origin, +but when it is converted to an Image, the image always starts from 0,0. This means that +anything with a -ve position will be cropped.

    +

    The best way to deal with this is to ensure that your Snapshot component is always at position +0,0 with respect to your game and you never move it. This means that the image will usually +contain what you expect it to.

    +

    However, this is not always possible. To move (or rotate, or scale etc) the snapshot before +converting it to an image, pass a transformation matrix to snapshotToImage like so:

    +
    // Call something like this to take an image snapshot at any time.
    +void takeSnapshot() {
    +  // Prepare a matrix to move the snapshot by 200,50.
    +  final matrix = Matrix4.identity()..translate(200.0,50.0);
    +
    +  root.takeSnapshot();
    +  final image = root.snapshotToImage(200, 200, transform: matrix);
    +}
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/rendering/palette.html b/docs/1.18.0/flame/rendering/palette.html new file mode 100644 index 000000000..10da1b18b --- /dev/null +++ b/docs/1.18.0/flame/rendering/palette.html @@ -0,0 +1,441 @@ + + + + + + + Palette — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Palette

    +

    Throughout your game you are going to need to use colors in lots of places. There are two classes on +dart:ui that can be used, Color and Paint.

    +

    The Color class represents a ARGB color in a hexadecimal integer +format. So to create a Color instance, you just need to pass the color as an integer in the ARGB +format.

    + +

    You can use Dart’s hexadecimal notation to make it really easy; for instance: 0xFF00FF00 is fully +opaque green (the “mask” would be 0xAARRGGBB).

    +

    Note: The first two hexadecimal digits are for +the alpha channel (transparency), unlike on regular (non-A) RGB. The max(FF = 255) for the two first +digits means fully opaque, and the min (00 = 0) means fully transparent.

    +

    In the Material Flutter package there is a Colors class that provides common colors as constants:

    +
    import 'package:flutter/material.dart' show Colors;
    +
    +const black = Colors.black;
    +
    +
    +

    Some more complex methods might also take a Paint object, which is a more complete structure that +allows you to configure aspects related to stroke, colors, filters and blends. +However, normally when using even the more complex APIs, you just want an instance of a Paint +object representing just a single simple plain solid color.

    +

    Note: we don’t recommend that you create a new Paint object every time you need a specific +Paint, since it could potentially lead to a lot of unnecessary objects being created. A better way +is to either define the Paint object somewhere and re-use it (however, do note that the Paint +class is mutable, unlike Color), or to use the Palette class to define all the colors that you +want to use in your game.

    +

    You can create such an object like this:

    +
    Paint green = Paint()..color = const Color(0xFF00FF00);
    +
    +
    +

    To help you with this and also keep your game’s color palette consistent, Flame adds the Palette +class. You can use it to easily access both Colors and Paints where needed and also define +the colors your game use as constants, so that you don’t get those mixed up.

    +

    The BasicPalette class is an example of what a palette can look like, and adds black and white as +colors. So you can access black or white directly from the BasicPalette; for example, +using color:

    +
    TextConfig regular = TextConfig(color: BasicPalette.white.color);
    +
    +
    +

    Or using paint:

    +
    canvas.drawRect(rect, BasicPalette.black.paint);
    +
    +
    +

    However, the idea is that you can create your own palette, following the BasicPalette example, and +add the color palette/scheme of your game. Then you will be able to statically access any color in +your components and classes. Below is an example of a Palette implementation, from the example +game BGUG:

    +
    import 'dart:ui';
    +
    +import 'package:flame/palette.dart';
    +
    +class Palette {
    +  static PaletteEntry white = BasicPalette.white;
    +
    +  static PaletteEntry toastBackground = PaletteEntry(Color(0xFFAC3232));
    +  static PaletteEntry toastText = PaletteEntry(Color(0xFFDA9A00));
    +
    +  static PaletteEntry grey = PaletteEntry(Color(0xFF404040));
    +  static PaletteEntry green = PaletteEntry(Color(0xFF54a286));
    +}
    +
    +
    +

    A PaletteEntry is a const class that holds information of a color and it has the following +members:

    +
      +
    • color: returns the Color specified

    • +
    • paint: creates a new Paint with the color specified. Paint is a non-const class, so this +method actually creates a brand new instance every time it’s called. It’s safe to cascade +mutations to this.

    • +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/rendering/particles.html b/docs/1.18.0/flame/rendering/particles.html new file mode 100644 index 000000000..7f541f44d --- /dev/null +++ b/docs/1.18.0/flame/rendering/particles.html @@ -0,0 +1,792 @@ + + + + + + + Particles — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Particles

    +

    Flame offers a basic, yet robust and extendable particle system. The core concept of this system is +the Particle class, which is very similar in its behavior to the ParticleSystemComponent.

    +

    The most basic usage of a Particle with FlameGame would look as in the following:

    +
    import 'package:flame/components.dart';
    +
    +// ...
    +
    +game.add(
    +  // Wrapping a Particle with ParticleSystemComponent
    +  // which maps Component lifecycle hooks to Particle ones
    +  // and embeds a trigger for removing the component.
    +  ParticleSystemComponent(
    +    particle: CircleParticle(),
    +  ),
    +);
    +
    +
    +

    When using Particle with a custom Game implementation, please ensure that both the update and +render methods are called during each game loop tick.

    +

    Main approaches to implement desired particle effects:

    +
      +
    • Composition of existing behaviors.

    • +
    • Use behavior chaining (just a syntactic sugar of the first one).

    • +
    • Using ComputedParticle.

    • +
    +

    Composition works in a similar fashion to those of Flutter widgets by defining the effect from top +to bottom. Chaining allows to express the same composition trees more fluently by defining behaviors +from bottom to top. Computed particles in their turn fully delegate implementation of the behavior +to your code. Any of the approaches could be used in conjunction with existing behaviors where +needed.

    +
    Random rnd = Random();
    +
    +Vector2 randomVector2() => (Vector2.random(rnd) - Vector2.random(rnd)) * 200;
    +
    +// Composition.
    +//
    +// Defining a particle effect as a set of nested behaviors from top to bottom,
    +// one within another:
    +//
    +// ParticleSystemComponent
    +//   > ComposedParticle
    +//     > AcceleratedParticle
    +//       > CircleParticle
    +game.add(
    +  ParticleSystemComponent(
    +    particle: Particle.generate(
    +      count: 10,
    +      generator: (i) => AcceleratedParticle(
    +        acceleration: randomVector2(),
    +        child: CircleParticle(
    +          paint: Paint()..color = Colors.red,
    +        ),
    +      ),
    +    ),
    +  ),
    +);
    +
    +// Chaining.
    +//
    +// Expresses the same behavior as above, but with a more fluent API.
    +// Only Particles with SingleChildParticle mixin can be used as chainable behaviors.
    +game.add(
    +  ParticleSystemComponent(
    +    particle: Particle.generate(
    +      count: 10,
    +      generator: (i) => pt.CircleParticle(paint: Paint()..color = Colors.red)
    +    )
    +  )
    +);
    +
    +// Computed Particle.
    +//
    +// All the behaviors are defined explicitly. Offers greater flexibility
    +// compared to built-in behaviors.
    +game.add(
    +  ParticleSystemComponent(
    +      particle: Particle.generate(
    +        count: 10,
    +        generator: (i) {
    +          Vector2 position = Vector2.zero();
    +          Vector2 speed = Vector2.zero();
    +          final acceleration = randomVector2();
    +          final paint = Paint()..color = Colors.red;
    +
    +          return ComputedParticle(
    +            renderer: (canvas, _) {
    +              speed += acceleration;
    +              position += speed;
    +              canvas.drawCircle(Offset(position.x, position.y), 1, paint);
    +            }
    +        );
    +      }
    +    )
    +  )
    +);
    +
    +
    +

    See more examples of how to use built-in particles in various +combinations.

    +
    +

    Lifecycle

    +

    A behavior common to all Particles is that all of them accept a lifespan argument. This value is +used to make the ParticleSystemComponent remove itself once its internal Particle has reached +the end of its life. Time within the Particle itself is tracked using the Flame Timer class. It +can be configured with a double, represented in seconds (with microsecond precision) by passing +it into the corresponding Particle constructor.

    +
    Particle(lifespan: .2); // will live for 200ms.
    +Particle(lifespan: 4); // will live for 4s.
    +
    +
    +

    It is also possible to reset a Particle’s lifespan by using the setLifespan method, which also +accepts a double of seconds.

    +
    final particle = Particle(lifespan: 2);
    +
    +// ... after some time.
    +particle.setLifespan(2) // will live for another 2s.
    +
    +
    +

    During its lifetime, a Particle tracks the time it was alive and exposes it through the progress +getter, which returns a value between 0.0 and 1.0. This value can be used in a similar fashion +as the value property of the AnimationController class in Flutter.

    +
    final particle = Particle(lifespan: 2.0);
    +
    +game.add(ParticleSystemComponent(particle: particle));
    +
    +// Will print values from 0 to 1 with step of .1: 0, 0.1, 0.2 ... 0.9, 1.0.
    +Timer.periodic(duration * .1, () => print(particle.progress));
    +
    +
    +

    The lifespan is passed down to all the descendants of a given Particle, if it supports any of +the nesting behaviors.

    +
    +
    +

    Built-in particles

    +

    Flame ships with a few built-in Particle behaviors:

    +
      +
    • The TranslatedParticle translates its child by given Vector2

    • +
    • The MovingParticle moves its child between two predefined Vector2, supports Curve

    • +
    • The AcceleratedParticle allows basic physics based effects, like gravitation or speed dampening

    • +
    • The CircleParticle renders circles of all shapes and sizes

    • +
    • The SpriteParticle renders Flame Sprite within a Particle effect

    • +
    • The ImageParticle renders dart:ui Image within a Particle effect

    • +
    • The ComponentParticle renders Flame Component within a Particle effect

    • +
    • The FlareParticle renders Flare animation within a Particle effect

    • +
    +

    See more examples of how to use built-in Particle behaviors +together. +All the implementations are available in the particles folder on the +Flame repository.

    +
    +
    +

    TranslatedParticle

    +

    Simply translates the underlying Particle to a specified Vector2 within the rendering Canvas. +Does not change or alter its position, consider using MovingParticle or AcceleratedParticle +where change of position is required. Same effect could be achieved by translating the Canvas +layer.

    +
    game.add(
    +  ParticleSystemComponent(
    +    particle: TranslatedParticle(
    +      // Will translate the child Particle effect to the center of game canvas.
    +      offset: game.size / 2,
    +      child: Particle(),
    +    ),
    +  ),
    +);
    +
    +
    +
    +
    +

    MovingParticle

    +

    Moves the child Particle between the from and to Vector2s during its lifespan. Supports +Curve via CurvedParticle.

    +
    game.add(
    +  ParticleSystemComponent(
    +    particle: MovingParticle(
    +      // Will move from corner to corner of the game canvas.
    +      from: Vector2.zero(),
    +      to: game.size,
    +      child: CircleParticle(
    +        radius: 2.0,
    +        paint: Paint()..color = Colors.red,
    +      ),
    +    ),
    +  ),
    +);
    +
    +
    +
    +
    +

    AcceleratedParticle

    +

    A basic physics particle which allows you to specify its initial position, speed and +acceleration and lets the update cycle do the rest. All three are specified as Vector2s, which +you can think of as vectors. It works especially well for physics-based “bursts”, but it is not +limited to that. Unit of the Vector2 value is logical px/s. So a speed of Vector2(0, 100) will +move a child Particle by 100 logical pixels of the device every second of game time.

    +
    final rnd = Random();
    +Vector2 randomVector2() => (Vector2.random(rnd) - Vector2.random(rnd)) * 100;
    +
    +game.add(
    +  ParticleSystemComponent(
    +    particle: AcceleratedParticle(
    +      // Will fire off in the center of game canvas
    +      position: game.canvasSize/2,
    +      // With random initial speed of Vector2(-100..100, 0..-100)
    +      speed: Vector2(rnd.nextDouble() * 200 - 100, -rnd.nextDouble() * 100),
    +      // Accelerating downwards, simulating "gravity"
    +      // speed: Vector2(0, 100),
    +      child: CircleParticle(
    +        radius: 2.0,
    +        paint: Paint()..color = Colors.red,
    +      ),
    +    ),
    +  ),
    +);
    +
    +
    +
    +
    +

    CircleParticle

    +

    A Particle which renders a circle with given Paint at the zero offset of passed Canvas. Use in +conjunction with TranslatedParticle, MovingParticle or AcceleratedParticle in order to achieve +desired positioning.

    +
    game.add(
    +  ParticleSystemComponent(
    +    particle: CircleParticle(
    +      radius: game.size.x / 2,
    +      paint: Paint()..color = Colors.red.withOpacity(.5),
    +    ),
    +  ),
    +);
    +
    +
    +
    +
    +

    SpriteParticle

    +

    Allows you to embed a Sprite into your particle effects.

    +
    game.add(
    +  ParticleSystemComponent(
    +    particle: SpriteParticle(
    +      sprite: Sprite('sprite.png'),
    +      size: Vector2(64, 64),
    +    ),
    +  ),
    +);
    +
    +
    +
    +
    +

    ImageParticle

    +

    Renders given dart:ui image within the particle tree.

    +
    // During game initialization
    +await Flame.images.loadAll(const [
    +  'image.png',
    +]);
    +
    +// ...
    +
    +// Somewhere during the game loop
    +final image = await Flame.images.load('image.png');
    +
    +game.add(
    +  ParticleSystemComponent(
    +    particle: ImageParticle(
    +      size: Vector2.all(24),
    +      image: image,
    +    );
    +  ),
    +);
    +
    +
    +
    +
    +

    ScalingParticle

    +

    Scales the child Particle between 1 and to during its lifespan.

    +
    game.add(
    +  ParticleSystemComponent(
    +    particle: ScalingParticle(
    +      lifespan: 2,
    +      to: 0,
    +      child: CircleParticle(
    +        radius: 2.0,
    +        paint: Paint()..color = Colors.red,
    +      )
    +    );
    +  ),
    +);
    +
    +
    +
    +
    +

    SpriteAnimationParticle

    +

    A Particle which embeds a SpriteAnimation. +By default, aligns the SpriteAnimation’s stepTime so that +it’s fully played during the Particle lifespan. It’s possible to override this behavior with the +alignAnimationTime argument.

    +
    final spriteSheet = SpriteSheet(
    +  image: yourSpriteSheetImage,
    +  srcSize: Vector2.all(16.0),
    +);
    +
    +game.add(
    +  ParticleSystemComponent(
    +    particle: SpriteAnimationParticle(
    +      animation: spriteSheet.createAnimation(0, stepTime: 0.1),
    +    );
    +  ),
    +);
    +
    +
    +
    +
    +

    ComponentParticle

    +

    This Particle allows you to embed a Component within the particle effects. The Component could +have its own update lifecycle and could be reused across different effect trees. If the only thing +you need is to add some dynamics to an instance of a certain Component, please consider adding it +to the game directly, without the Particle in the middle.

    +
    final longLivingRect = RectComponent();
    +
    +game.add(
    +  ParticleSystemComponent(
    +    particle: ComponentParticle(
    +      component: longLivingRect
    +    );
    +  ),
    +);
    +
    +class RectComponent extends Component {
    +  void render(Canvas c) {
    +    c.drawRect(
    +      Rect.fromCenter(center: Offset.zero, width: 100, height: 100),
    +      Paint()..color = Colors.red
    +    );
    +  }
    +
    +  void update(double dt) {
    +    /// Will be called by parent [Particle]
    +  }
    +}
    +
    +
    +
    +
    +

    ComputedParticle

    +

    A Particle which could help you when:

    +
      +
    • Default behavior is not enough

    • +
    • Complex effects optimization

    • +
    • Custom easings

    • +
    +

    When created, it delegates all the rendering to a supplied ParticleRenderDelegate which is called +on each frame to perform necessary computations and render something to the Canvas.

    +
    game.add(
    +  ParticleSystemComponent(
    +    // Renders a circle which gradually changes its color and size during the
    +    // particle lifespan.
    +    particle: ComputedParticle(
    +      renderer: (canvas, particle) => canvas.drawCircle(
    +        Offset.zero,
    +        particle.progress * 10,
    +        Paint()
    +          ..color = Color.lerp(
    +            Colors.red,
    +            Colors.blue,
    +            particle.progress,
    +          ),
    +      ),
    +    ),
    +  ),
    +)
    +
    +
    +
    +
    +

    Nesting behavior

    +

    Flame’s implementation of particles follows the same pattern of extreme composition as Flutter +widgets. That is achieved by encapsulating small pieces of behavior in every particle and then +nesting these behaviors together to achieve the desired visual effect.

    +

    Two entities that allow Particles to nest each other are: SingleChildParticle mixin and +ComposedParticle class.

    +

    A SingleChildParticle may help you with creating Particles with a custom behavior. For example, +randomly positioning its child during each frame:

    +

    The SingleChildParticle may help you with creating Particles with a custom behavior.

    +

    For example, randomly positioning it’s child during each frame:

    +
    var rnd = Random();
    +
    +class GlitchParticle extends Particle with SingleChildParticle {
    +  Particle child;
    +
    +  GlitchParticle({
    +    required this.child,
    +    super.lifespan,
    +  });
    +
    +  @override
    +  render(Canvas canvas)  {
    +    canvas.save();
    +    canvas.translate(rnd.nextDouble() * 100, rnd.nextDouble() * 100);
    +
    +    // Will also render the child
    +    super.render();
    +
    +    canvas.restore();
    +  }
    +}
    +
    +
    +

    The ComposedParticle could be used either as a standalone or within an existing Particle tree.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/rendering/rendering.html b/docs/1.18.0/flame/rendering/rendering.html new file mode 100644 index 000000000..9510b7d6a --- /dev/null +++ b/docs/1.18.0/flame/rendering/rendering.html @@ -0,0 +1,381 @@ + + + + + + + Rendering — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + + + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/rendering/text_rendering.html b/docs/1.18.0/flame/rendering/text_rendering.html new file mode 100644 index 000000000..7a01e5e07 --- /dev/null +++ b/docs/1.18.0/flame/rendering/text_rendering.html @@ -0,0 +1,925 @@ + + + + + + + Text Rendering — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Text Rendering

    +

    Flame has some dedicated classes to help you render text.

    +
    +

    Text Components

    +

    The simplest way to render text with Flame is to leverage one of the provided text-rendering +components:

    +
      +
    • TextComponent for rendering a single line of text

    • +
    • TextBoxComponent for bounding multi-line text within a sized box, including the possibility of a +typing effect. You can use the newLineNotifier to be notified when a new line is added. Use the +onComplete callback to execute a function when the text is completely printed.

    • +
    • ScrollTextBoxComponent enhances the functionality of TextBoxComponent by adding vertical +scrolling capability when the text exceeds the boundaries of the enclosing box.

    • +
    +

    All components are showcased in this example.

    +
    +

    TextComponent

    +

    TextComponent is a simple component that renders a single line of text.

    +

    Simple usage:

    +
    class MyGame extends FlameGame {
    +  @override
    +  void onLoad() {
    +    add(
    +      TextComponent(
    +        text: 'Hello, Flame',
    +        position: Vector2.all(16.0),
    +      ),
    +    );
    +  }
    +}
    +
    +
    +

    In order to configure aspects of the rendering like font family, size, color, etc, you need to +provide (or amend) a TextRenderer with such information; while you can read more details about +this interface below, the simplest implementation you can use is the TextPaint, which takes a +Flutter TextStyle:

    +
    final regular = TextPaint(
    +  style: TextStyle(
    +    fontSize: 48.0,
    +    color: BasicPalette.white.color,
    +  ),
    +);
    +
    +class MyGame extends FlameGame {
    +  @override
    +  void onLoad() {
    +    add(
    +      TextComponent(
    +        text: 'Hello, Flame',
    +        textRenderer: regular,
    +        anchor: Anchor.topCenter,
    +        position: Vector2(size.width / 2, 32.0),
    +      ),
    +    );
    +  }
    +}
    +
    +
    +

    You can find all the options under TextComponent’s +API.

    +
    +
    +

    TextBoxComponent

    +

    TextBoxComponent is very similar to TextComponent, but as its name suggest it is used to render +text inside a bounding box, creating line breaks according to the provided box size.

    +

    You can decide if the box should grow as the text is written or if it should be static by the +growingBox variable in the TextBoxConfig. A static box could either have a fixed size (setting +the size property of the TextBoxComponent), or to automatically shrink to fit the text content.

    +

    In addition, the align property allows you to control the horizontal and vertical alignment of +the text content. For example, setting align to Anchor.center will center the text within its +bounding box both vertically and horizontally.

    +

    If you want to change the margins of the box use the margins variable in the TextBoxConfig.

    +

    Finally, if you want to simulate a “typing” effect, by showing each character of the string one by +one as if being typed in real-time, you can provide the boxConfig.timePerChar parameter.

    +

    Example usage:

    +
    class MyTextBox extends TextBoxComponent {
    +  MyTextBox(String text) : super(
    +    text: text,
    +    textRenderer: tiny,
    +    boxConfig: TextBoxConfig(timePerChar: 0.05),
    +  );
    +
    +  final bgPaint = Paint()..color = Color(0xFFFF00FF);
    +  final borderPaint = Paint()..color = Color(0xFF000000)..style = PaintingStyle.stroke;
    +
    +  @override
    +  void render(Canvas canvas) {
    +    Rect rect = Rect.fromLTWH(0, 0, width, height);
    +    canvas.drawRect(rect, bgPaint);
    +    canvas.drawRect(rect.deflate(boxConfig.margin), borderPaint);
    +    super.render(canvas);
    +  }
    +}
    +
    +
    +

    You can find all the options under TextBoxComponent’s +API.

    +
    +
    +

    ScrollTextBoxComponent

    +

    The ScrollTextBoxComponent is an advanced version of the TextBoxComponent, +designed for displaying scrollable text within a defined area. +This component is particularly useful for creating interfaces where large amounts of text +need to be presented in a constrained space, such as dialogues or information panels.

    +

    Note that the align property of TextBoxComponent is not available.

    +

    Example usage:

    +
    class MyScrollableText extends ScrollTextBoxComponent {
    +  MyScrollableText(Vector2 frameSize, String text) : super(
    +    size: frameSize,
    +    text: text,
    +    textRenderer: regular, 
    +    boxConfig: TextBoxConfig(timePerChar: 0.05),
    +  );
    +}
    +
    +
    +
    +
    +

    TextElementComponent

    +

    If you want to render an arbitrary TextElement, ranging from a single InlineTextElement to a +formatted DocumentRoot, you can use the TextElementComponent.

    +

    A simple example is to create a DocumentRoot to render a sequence of block elements (think of an +HTML “div”) containing rich text:

    +
      final document = DocumentRoot([
    +    HeaderNode.simple('1984', level: 1),
    +    ParagraphNode.simple(
    +      'Anything could be true. The so-called laws of nature were nonsense.',
    +    ),
    +    // ...
    +  ]);
    +  final element = TextElementComponent.fromDocument(
    +    document: document,
    +    position: Vector2(100, 50),
    +    size: Vector2(400, 200),
    +  );
    +
    +
    +

    Note that the size can be specified in two ways; either via:

    +
      +
    • the size property common to all PositionComponents; or

    • +
    • the width/height included within the DocumentStyle applied.

    • +
    +

    An example applying a style to the document (which can include the size but other parameters as +well):

    +
      final style = DocumentStyle(
    +    width: 400,
    +    height: 200,
    +    padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 14),
    +    background: BackgroundStyle(
    +      color: const Color(0xFF4E322E),
    +      borderColor: const Color(0xFF000000),
    +      borderWidth: 2.0,
    +    ),
    +  );
    +  final document = DocumentRoot([ ... ]);
    +  final element = TextElementComponent.fromDocument(
    +    document: document,
    +    style: style,
    +    position: Vector2(100, 50),
    +  );
    +
    +
    +

    See a more elaborate example of rich-text, formatted +text blocks rendering.

    +

    For more details about the underlying mechanics of the text rendering pipeline, see “Text Elements, +Text Nodes, and Text Styles” below.

    +
    +
    +

    Flame Markdown

    +

    In order to more easily create rich-text-based DocumentRoots, from simple strings with bold/italics +to complete structured documents, Flame provides the flame_markdown bridge package that connects +the markdown library with Flame’s text rendering infrastructure.

    +

    Just use the FlameMarkdown helper class and the toDocument method to convert a markdown string +into a DocumentRoot (which can then be used to create a TextElementComponent):

    +
    import 'package:flame/text.dart';
    +import 'package:flame_markdown/flame_markdown.dart';
    +
    +// ...
    +final component = await TextElementComponent.fromDocument(
    +  document: FlameMarkdown.toDocument(
    +    '# Header\n'
    +    '\n'
    +    'This is a **bold** text, and this is *italic*.\n'
    +    '\n'
    +    'This is a second paragraph.\n',
    +  ),
    +  style: ...,
    +  position: ...,
    +  size: ...,
    +);
    +
    +
    +
    +
    +
    +

    Infrastructure

    +

    If you are not using the Flame Component System, want to understand the infrastructure behind text +rendering, want to customize fonts and styles used, or want to create your own custom renderers, +this section is for you.

    +
      +
    • TextRenderer: renderers know “how” to render text; in essence they contain the style information +to render any string

    • +
    • TextElement: an element is formatted, “laid-out” piece of text, include the string (“what”) and +the style (“how”)

    • +
    +

    The following diagram showcases the class and inheritance structure of the text rendering pipeline:

    +
    + %%{init: { 'theme': 'dark' } }%% +classDiagram + %% renderers + note for TextRenderer "This just the style (how). + It knows how to take a text string and create a TextElement. + `render` is just a helper to `format(text).render(...)`. Same for `getLineMetrics`." + class TextRenderer { + TextElement format(String text) + LineMetrics getLineMetrics(String text) + void render(Canvas canvas, String text, ...) + } + class TextPaint + class SpriteFontRenderer + class DebugTextRenderer + + %% elements + class TextElement { + LineMetrics metrics + render(Canvas canvas, ...) + } + class TextPainterTextElement + + TextRenderer --> TextPaint + TextRenderer --> SpriteFontRenderer + TextRenderer --> DebugTextRenderer + + TextRenderer *-- TextElement + TextPaint *-- TextPainterTextElement + SpriteFontRenderer *-- SpriteFontTextElement + + note for TextElement "This is the text (what) and the style (how); + laid out and ready to render." + TextElement --> TextPainterTextElement + TextElement --> SpriteFontTextElement + TextElement --> Others +
    +

    TextRenderer

    +

    TextRenderer is the abstract class used by Flame to render text. Implementations of TextRenderer +must include the information about the “how” the text is rendered. Font style, size, color, etc. It +should be able to combine that information with a given string of text, via the format method, to +generate a TextElement.

    +

    Flame provides two concrete implementations:

    +
      +
    • TextPaint: most used, uses Flutter TextPainter to render regular text

    • +
    • SpriteFontRenderer: uses a SpriteFont (a sprite sheet-based font) to render bitmap text

    • +
    • DebugTextRenderer: only intended to be used for Golden Tests

    • +
    +

    But you can also provide your own if you want to extend to other customized forms of text rendering.

    +

    The main job of a TextRenderer is to format a string of text into a TextElement, that then can +be rendered onto the screen:

    +
    final textElement = textRenderer.format("Flame is awesome")
    +textElement.render(...) 
    +
    +
    +

    However the renderer provides a helper method to directly create the element and render it:

    +
    textRenderer.render(
    +  canvas,
    +  'Flame is awesome',
    +  Vector2(10, 10),
    +  anchor: Anchor.topCenter,
    +);
    +
    +
    +
    +

    TextPaint

    +

    TextPaint is the built-in implementation of text rendering in Flame. It is based on top of +Flutter’s TextPainter class (hence the name), and it can be configured by the style class +TextStyle, which contains all typographical information required to render text; i.e., font size +and color, font family, etc.

    +

    Outside of the style you can also optionally provide one extra parameter which is the +textDirection (but that is typically already set to ltr or left-to-right).

    +

    Example usage:

    +
    const TextPaint textPaint = TextPaint(
    +  style: TextStyle(
    +    fontSize: 48.0,
    +    fontFamily: 'Awesome Font',
    +  ),
    +);
    +
    +
    +

    Note: there are several packages that contain the class TextStyle. We export the right one (from +Flutter) via the text module:

    +
    import 'package:flame/text.dart';
    +
    +
    +

    But if you want to import it explicitly, make sure that you import it from +package:flutter/painting.dart (or from material or widgets). If you also need to import dart:ui, +you might need to hide its version of TextStyle, since that module contains a different class with +the same name:

    +
    import 'package:flutter/painting.dart';
    +import 'dart:ui' hide TextStyle;
    +
    +
    +

    Following are some common properties of TextStyle(see the full +list of TextStyle properties):

    +
      +
    • fontFamily: a commonly available font, like Arial (default), or a custom font added in your +pubspec (see how to add a custom font).

    • +
    • fontSize: font size, in pts (default 24.0).

    • +
    • height: height of text line, as a multiple of font size (default null).

    • +
    • color: the color, as a ui.Color (default white).

    • +
    +

    For more information regarding colors and how to create them, see the Colors and +Palette guide.

    +
    +
    +

    SpriteFontRenderer

    +

    The other renderer option provided out of the box is SpriteFontRenderer, which allows you to +provide a SpriteFont based off of a sprite sheet. TODO

    +
    +
    +

    DebugTextRenderer

    +

    This renderer is intended to be used for Golden Tests. Rendering normal font-based text in Golden +Tests is unreliable due to differences in font definitions across platforms and different algorithms +used for anti-aliasing. This renderer will render text as if each word was a solid rectangle, making +it possible to test the layout, positioning and sizing of the elements without having to rely on +font-based rendering.

    +
    +
    +
    +
    +

    Inline Text Elements

    +

    A TextElement is a “pre-compiled”, formatted and laid-out piece of text with a specific styling +applied, ready to be rendered at any given position.

    +

    A InlineTextElement implements the TextElement interface and must implement their two methods, +one that teaches how to translate it around and another on how to draw it to the canvas:

    +
      void translate(double dx, double dy);
    +  void draw(Canvas canvas);
    +
    +
    +

    These methods are intended to be overwritten by the implementations of InlineTextElement, and +probably will not be called directly by users; because a convenient render method is provided:

    +
      void render(
    +    Canvas canvas,
    +    Vector2 position, {
    +    Anchor anchor = Anchor.topLeft,
    +  })
    +
    +
    +

    That allows the element to be rendered at a specific position, using a given anchor.

    +

    The interface also mandates (and provides) a getter for the LineMetrics object associated with +that InlineTextElement, which allows you (and the render implementation) to access sizing +information related to the element (width, height, ascend, etc).

    +
      LineMetrics get metrics;
    +
    +
    +
    +
    +

    Text Elements, Text Nodes, and Text Styles

    +

    While normal renderers always work with a InlineTextElement directly, there is a bigger underlying +infrastructure that can be used to render more rich or formatter text.

    +

    Text Elements are a superset of Inline Text Elements that represent an arbitrary rendering block +within a rich-text document. Essentially, they are concrete and “physical”: they are objects that +are ready to be rendered on a canvas.

    +

    This property distinguishes them from Text Nodes, which are structured pieces of text, and from Text +Styles (called FlameTextStyle in code to make it easier to work alongside Flutter’s TextStyle), +which are descriptors for how arbitrary pieces of text ought to be rendered.

    +

    So, in the most general case, a user would use a TextNode to describe a desired piece of rich +text; define a FlameTextStyle to apply to it; and use that to generate a TextElement. Depending +on the type of rendering, the TextElement generated will be an InlineTextElement, which brings +us back to the normal flow of the rendering pipeline. The unique property of the Inline-Text-type +element is that it exposes a LineMetrics that can be used for advanced rendering; while the other +elements only expose a simpler draw method which is unaware of sizing and positioning.

    +

    However, the other types of Text Elements, Text Nodes, and Text Styles must be used if the intent is +to create an entire document (multiple blocks or paragraphs), enriched with formatted text. In order +to render an arbitrary TextElement, you can alternatively use the TextElementComponent (see above).

    +

    See examples of such usage.

    +
    +

    Text Nodes and the Document Root

    +

    A DocumentRoot is not a TextNode (inheritance-wise) in itself but represents a grouping of +BlockNodes that layout a “page” or “document” of rich text laid out in multiple blocks or +paragraphs. It represents the entire document and can receive a global Style.

    +

    The first step to define your rich-text document is to create a Node, which will likely be a +DocumentRoot.

    +

    It will first contain the top-most list of Block Nodes that can define headers, paragraphs or +columns.

    +

    Then each of those blocks can contain other blocks or the Inline Text Nodes, either Plain Text Nodes +or some rich-text with specific formatting.

    +

    Note that the hierarchy defined by the node structure is also used for styling purposes as per +defined in the FlameTextStyle class.

    +

    The actual nodes all inherit from TextNode and are broken down by the following diagram:

    +
    + %%{init: { 'theme': 'dark' } }%% +graph TD + %% Config %% + classDef default fill:#282828,stroke:#F6BE00; + + %% Nodes %% + TextNode(" + <big><strong>TextNode</strong></big> + Can be thought of as an HTML DOM node; + each subclass can be thought of as a specific tag. + ") + BlockNode(" + <big><strong>BlockNode</strong></big> + #quot;div#quot; + ") + InlineTextNode(" + <big><strong>InlineTextNode</strong></big> + #quot;span#quot; + ") + ColumnNode(" + <big><strong>ColumnNode</strong></big> + column-arranged group of other Block Nodes + ") + TextBlockNode(" + <big><strong>TextBlockNode</strong></big> + a #quot;div#quot; with an InlineTextNode as a direct child + ") + HeaderNode(" + <big><strong>HeaderNode</strong></big> + #quot;h1#quot; / #quot;h2#quot; / etc + ") + ParagraphNode(" + <big><strong>ParagraphNode</strong></big> + #quot;p#quot; + ") + GroupTextNode(" + <big><strong>GroupTextNode</strong></big> + groups other TextNodes in a single line + ") + PlainTextNode(" + <big><strong>PlainTextNode</strong></big> + just plain text, unformatted + ") + ItalicTextNode(" + <big><strong>ItalicTextNode</strong></big> + #quot;i#quot; / #quot;em#quot; + ") + BoldTextNode(" + <big><strong>BoldTextNode</strong></big> + #quot;b#quot; / #quot;strong#quot; + ") + TextNode ----> BlockNode + TextNode --------> InlineTextNode + BlockNode --> ColumnNode + BlockNode --> TextBlockNode + TextBlockNode --> HeaderNode + TextBlockNode --> ParagraphNode + InlineTextNode --> GroupTextNode + InlineTextNode --> PlainTextNode + InlineTextNode --> BoldTextNode + InlineTextNode --> ItalicTextNode +
    +
    +

    (Flame) Text Styles

    +

    Text Styles can be applied to nodes to generate elements. They all inherit from FlameTextStyle +abstract class (which is named as is to avoid confusion with Flutter’s TextStyle).

    +

    They follow a tree-like structure, always having DocumentStyle as the root; this structure is +leveraged to apply cascading style to the analogous Node structure. In fact, they are pretty similar +to, and can be thought of as, CSS definitions.

    +

    The full inheritance chain can be seen on the following diagram:

    +
    + %%{init: { 'theme': 'dark' } }%% +classDiagram + %% Nodes %% + class FlameTextStyle { + copyWith() + merge() + } + + note for FlameTextStyle "Root for all styles. + Not to be confused with Flutter's TextStyle." + + class DocumentStyle { + <<for the entire Document Root>> + size + padding + background [BackgroundStyle] + specific styles [for blocks & inline] + } + + class BlockStyle { + <<for Block Nodes>> + margin, padding + background [BackgroundStyle] + text [InlineTextStyle] + } + + class BackgroundStyle { + <<for Block or Document>> + color + border + } + + class InlineTextStyle { + <<for any nodes>> + font, color + } + + FlameTextStyle <|-- DocumentStyle + FlameTextStyle <|-- BlockStyle + FlameTextStyle <|-- BackgroundStyle + FlameTextStyle <|-- InlineTextStyle +
    +
    +

    Text Elements

    +

    Finally, we have the elements, that represent a combination of a node (“what”) with a style (“how”), +and therefore represent a pre-compiled, laid-out piece of rich text to be rendered on the Canvas.

    +

    Inline Text Elements specifically can alternatively be thought of as a combination of a +TextRenderer (simplified “how”) and a string (single line of “what”).

    +

    That is because an InlineTextStyle can be converted to a specific TextRenderer via the +asTextRenderer method, which is then used to lay out each line of text into a unique +InlineTextElement.

    +

    When using the renderer directly, the entire layout process is skipped, and a single +TextPainterTextElement or SpriteFontTextElement is returned.

    +

    As you can see, both definitions of an Element are, essentially, equivalent, all things considered. +But it still leaves us with two paths for rendering text. Which one to pick? How to solve this +conundrum?

    +

    When in doubt, the following guidelines can help you picking the best path for you:

    +
      +
    • for the simplest way to render text, use TextPaint (basic renderer implementation)

      +
        +
      • you can use the FCS provided component TextComponent for that.

      • +
      +
    • +
    • for rendering Sprite Fonts, you must use SpriteFontRenderer (a renderer implementation that +accepts a SpriteFont);

    • +
    • for rendering multiple lines of text, with automatic line breaks, you have two options:

      +
        +
      • use the FCS TextBoxComponent, which uses any text renderer to draw each line of text as an +Element, and does its own layout and line breaking;

      • +
      • use the Text Node & Style system to create your pre-laid-out Elements. Note: there is no current +FCS component for it.

      • +
      +
    • +
    • finally, in order to have formatted (or rich) text, you must use Text Nodes & Styles.

    • +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/router.html b/docs/1.18.0/flame/router.html new file mode 100644 index 000000000..c0abb646c --- /dev/null +++ b/docs/1.18.0/flame/router.html @@ -0,0 +1,1087 @@ + + + + + + + RouterComponent — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +
    +
    +router.dart
    +
      1import 'package:flame/components.dart';
    +  2import 'package:flame/effects.dart';
    +  3import 'package:flame/events.dart';
    +  4import 'package:flame/game.dart';
    +  5import 'package:flame/geometry.dart';
    +  6import 'package:flame/rendering.dart';
    +  7import 'package:flutter/rendering.dart';
    +  8
    +  9class RouterGame extends FlameGame {
    + 10  late final RouterComponent router;
    + 11
    + 12  @override
    + 13  Future<void> onLoad() async {
    + 14    add(
    + 15      router = RouterComponent(
    + 16        routes: {
    + 17          'splash': Route(SplashScreenPage.new),
    + 18          'home': Route(StartPage.new),
    + 19          'level1': Route(Level1Page.new),
    + 20          'level2': Route(Level2Page.new),
    + 21          'pause': PauseRoute(),
    + 22        },
    + 23        initialRoute: 'splash',
    + 24      ),
    + 25    );
    + 26  }
    + 27}
    + 28
    + 29class SplashScreenPage extends Component
    + 30    with TapCallbacks, HasGameReference<RouterGame> {
    + 31  @override
    + 32  Future<void> onLoad() async {
    + 33    addAll([
    + 34      Background(const Color(0xff282828)),
    + 35      TextBoxComponent(
    + 36        text: '[Router demo]',
    + 37        textRenderer: TextPaint(
    + 38          style: const TextStyle(
    + 39            color: Color(0x66ffffff),
    + 40            fontSize: 16,
    + 41          ),
    + 42        ),
    + 43        align: Anchor.center,
    + 44        size: game.canvasSize,
    + 45      ),
    + 46    ]);
    + 47  }
    + 48
    + 49  @override
    + 50  bool containsLocalPoint(Vector2 point) => true;
    + 51
    + 52  @override
    + 53  void onTapUp(TapUpEvent event) => game.router.pushNamed('home');
    + 54}
    + 55
    + 56class StartPage extends Component with HasGameReference<RouterGame> {
    + 57  StartPage() {
    + 58    addAll([
    + 59      _logo = TextComponent(
    + 60        text: 'Syzygy',
    + 61        textRenderer: TextPaint(
    + 62          style: const TextStyle(
    + 63            fontSize: 64,
    + 64            color: Color(0xFFC8FFF5),
    + 65            fontWeight: FontWeight.w800,
    + 66          ),
    + 67        ),
    + 68        anchor: Anchor.center,
    + 69      ),
    + 70      _button1 = RoundedButton(
    + 71        text: 'Level 1',
    + 72        action: () => game.router.pushNamed('level1'),
    + 73        color: const Color(0xffadde6c),
    + 74        borderColor: const Color(0xffedffab),
    + 75      ),
    + 76      _button2 = RoundedButton(
    + 77        text: 'Level 2',
    + 78        action: () => game.router.pushNamed('level2'),
    + 79        color: const Color(0xffdebe6c),
    + 80        borderColor: const Color(0xfffff4c7),
    + 81      ),
    + 82    ]);
    + 83  }
    + 84
    + 85  late final TextComponent _logo;
    + 86  late final RoundedButton _button1;
    + 87  late final RoundedButton _button2;
    + 88
    + 89  @override
    + 90  void onGameResize(Vector2 size) {
    + 91    super.onGameResize(size);
    + 92    _logo.position = Vector2(size.x / 2, size.y / 3);
    + 93    _button1.position = Vector2(size.x / 2, _logo.y + 80);
    + 94    _button2.position = Vector2(size.x / 2, _logo.y + 140);
    + 95  }
    + 96}
    + 97
    + 98class Background extends Component {
    + 99  Background(this.color);
    +100  final Color color;
    +101
    +102  @override
    +103  void render(Canvas canvas) {
    +104    canvas.drawColor(color, BlendMode.srcATop);
    +105  }
    +106}
    +107
    +108class RoundedButton extends PositionComponent with TapCallbacks {
    +109  RoundedButton({
    +110    required this.text,
    +111    required this.action,
    +112    required Color color,
    +113    required Color borderColor,
    +114    super.position,
    +115    super.anchor = Anchor.center,
    +116  }) : _textDrawable = TextPaint(
    +117          style: const TextStyle(
    +118            fontSize: 20,
    +119            color: Color(0xFF000000),
    +120            fontWeight: FontWeight.w800,
    +121          ),
    +122        ).toTextPainter(text) {
    +123    size = Vector2(150, 40);
    +124    _textOffset = Offset(
    +125      (size.x - _textDrawable.width) / 2,
    +126      (size.y - _textDrawable.height) / 2,
    +127    );
    +128    _rrect = RRect.fromLTRBR(0, 0, size.x, size.y, Radius.circular(size.y / 2));
    +129    _bgPaint = Paint()..color = color;
    +130    _borderPaint = Paint()
    +131      ..style = PaintingStyle.stroke
    +132      ..strokeWidth = 2
    +133      ..color = borderColor;
    +134  }
    +135
    +136  final String text;
    +137  final void Function() action;
    +138  final TextPainter _textDrawable;
    +139  late final Offset _textOffset;
    +140  late final RRect _rrect;
    +141  late final Paint _borderPaint;
    +142  late final Paint _bgPaint;
    +143
    +144  @override
    +145  void render(Canvas canvas) {
    +146    canvas.drawRRect(_rrect, _bgPaint);
    +147    canvas.drawRRect(_rrect, _borderPaint);
    +148    _textDrawable.paint(canvas, _textOffset);
    +149  }
    +150
    +151  @override
    +152  void onTapDown(TapDownEvent event) {
    +153    scale = Vector2.all(1.05);
    +154  }
    +155
    +156  @override
    +157  void onTapUp(TapUpEvent event) {
    +158    scale = Vector2.all(1.0);
    +159    action();
    +160  }
    +161
    +162  @override
    +163  void onTapCancel(TapCancelEvent event) {
    +164    scale = Vector2.all(1.0);
    +165  }
    +166}
    +167
    +168abstract class SimpleButton extends PositionComponent with TapCallbacks {
    +169  SimpleButton(this._iconPath, {super.position}) : super(size: Vector2.all(40));
    +170
    +171  final Paint _borderPaint = Paint()
    +172    ..style = PaintingStyle.stroke
    +173    ..color = const Color(0x66ffffff);
    +174  final Paint _iconPaint = Paint()
    +175    ..style = PaintingStyle.stroke
    +176    ..color = const Color(0xffaaaaaa)
    +177    ..strokeWidth = 7;
    +178  final Path _iconPath;
    +179
    +180  void action();
    +181
    +182  @override
    +183  void render(Canvas canvas) {
    +184    canvas.drawRRect(
    +185      RRect.fromRectAndRadius(size.toRect(), const Radius.circular(8)),
    +186      _borderPaint,
    +187    );
    +188    canvas.drawPath(_iconPath, _iconPaint);
    +189  }
    +190
    +191  @override
    +192  void onTapDown(TapDownEvent event) {
    +193    _iconPaint.color = const Color(0xffffffff);
    +194  }
    +195
    +196  @override
    +197  void onTapUp(TapUpEvent event) {
    +198    _iconPaint.color = const Color(0xffaaaaaa);
    +199    action();
    +200  }
    +201
    +202  @override
    +203  void onTapCancel(TapCancelEvent event) {
    +204    _iconPaint.color = const Color(0xffaaaaaa);
    +205  }
    +206}
    +207
    +208class BackButton extends SimpleButton with HasGameReference<RouterGame> {
    +209  BackButton()
    +210      : super(
    +211          Path()
    +212            ..moveTo(22, 8)
    +213            ..lineTo(10, 20)
    +214            ..lineTo(22, 32)
    +215            ..moveTo(12, 20)
    +216            ..lineTo(34, 20),
    +217          position: Vector2.all(10),
    +218        );
    +219
    +220  @override
    +221  void action() => game.router.pop();
    +222}
    +223
    +224class PauseButton extends SimpleButton with HasGameReference<RouterGame> {
    +225  PauseButton()
    +226      : super(
    +227          Path()
    +228            ..moveTo(14, 10)
    +229            ..lineTo(14, 30)
    +230            ..moveTo(26, 10)
    +231            ..lineTo(26, 30),
    +232          position: Vector2(60, 10),
    +233        );
    +234  @override
    +235  void action() => game.router.pushNamed('pause');
    +236}
    +237
    +238class Level1Page extends Component {
    +239  @override
    +240  Future<void> onLoad() async {
    +241    final game = findGame()!;
    +242    addAll([
    +243      Background(const Color(0xbb2a074f)),
    +244      BackButton(),
    +245      PauseButton(),
    +246      Planet(
    +247        radius: 25,
    +248        color: const Color(0xfffff188),
    +249        position: game.size / 2,
    +250        children: [
    +251          Orbit(
    +252            radius: 110,
    +253            revolutionPeriod: 6,
    +254            planet: Planet(
    +255              radius: 10,
    +256              color: const Color(0xff54d7b1),
    +257              children: [
    +258                Orbit(
    +259                  radius: 25,
    +260                  revolutionPeriod: 5,
    +261                  planet: Planet(radius: 3, color: const Color(0xFFcccccc)),
    +262                ),
    +263              ],
    +264            ),
    +265          ),
    +266        ],
    +267      ),
    +268    ]);
    +269  }
    +270}
    +271
    +272class Level2Page extends Component {
    +273  @override
    +274  Future<void> onLoad() async {
    +275    final game = findGame()!;
    +276    addAll([
    +277      Background(const Color(0xff052b44)),
    +278      BackButton(),
    +279      PauseButton(),
    +280      Planet(
    +281        radius: 30,
    +282        color: const Color(0xFFFFFFff),
    +283        position: game.size / 2,
    +284        children: [
    +285          Orbit(
    +286            radius: 60,
    +287            revolutionPeriod: 5,
    +288            planet: Planet(radius: 10, color: const Color(0xffc9ce0d)),
    +289          ),
    +290          Orbit(
    +291            radius: 110,
    +292            revolutionPeriod: 10,
    +293            planet: Planet(
    +294              radius: 14,
    +295              color: const Color(0xfff32727),
    +296              children: [
    +297                Orbit(
    +298                  radius: 26,
    +299                  revolutionPeriod: 3,
    +300                  planet: Planet(radius: 5, color: const Color(0xffffdb00)),
    +301                ),
    +302                Orbit(
    +303                  radius: 35,
    +304                  revolutionPeriod: 4,
    +305                  planet: Planet(radius: 3, color: const Color(0xffdc00ff)),
    +306                ),
    +307              ],
    +308            ),
    +309          ),
    +310        ],
    +311      ),
    +312    ]);
    +313  }
    +314}
    +315
    +316class Planet extends PositionComponent {
    +317  Planet({
    +318    required this.radius,
    +319    required this.color,
    +320    super.position,
    +321    super.children,
    +322  }) : _paint = Paint()..color = color;
    +323
    +324  final double radius;
    +325  final Color color;
    +326  final Paint _paint;
    +327
    +328  @override
    +329  void render(Canvas canvas) {
    +330    canvas.drawCircle(Offset.zero, radius, _paint);
    +331  }
    +332}
    +333
    +334class Orbit extends PositionComponent {
    +335  Orbit({
    +336    required this.radius,
    +337    required this.planet,
    +338    required this.revolutionPeriod,
    +339    double initialAngle = 0,
    +340  })  : _paint = Paint()
    +341          ..style = PaintingStyle.stroke
    +342          ..color = const Color(0x888888aa),
    +343        _angle = initialAngle {
    +344    add(planet);
    +345  }
    +346
    +347  final double radius;
    +348  final double revolutionPeriod;
    +349  final Planet planet;
    +350  final Paint _paint;
    +351  double _angle;
    +352
    +353  @override
    +354  void render(Canvas canvas) {
    +355    canvas.drawCircle(Offset.zero, radius, _paint);
    +356  }
    +357
    +358  @override
    +359  void update(double dt) {
    +360    _angle += dt / revolutionPeriod * tau;
    +361    planet.position = Vector2(radius, 0)..rotate(_angle);
    +362  }
    +363}
    +364
    +365class PauseRoute extends Route {
    +366  PauseRoute() : super(PausePage.new, transparent: true);
    +367
    +368  @override
    +369  void onPush(Route? previousRoute) {
    +370    previousRoute!
    +371      ..stopTime()
    +372      ..addRenderEffect(
    +373        PaintDecorator.grayscale(opacity: 0.5)..addBlur(3.0),
    +374      );
    +375  }
    +376
    +377  @override
    +378  void onPop(Route nextRoute) {
    +379    nextRoute
    +380      ..resumeTime()
    +381      ..removeRenderEffect();
    +382  }
    +383}
    +384
    +385class PausePage extends Component
    +386    with TapCallbacks, HasGameReference<RouterGame> {
    +387  @override
    +388  Future<void> onLoad() async {
    +389    final game = findGame()!;
    +390    addAll([
    +391      TextComponent(
    +392        text: 'PAUSED',
    +393        position: game.canvasSize / 2,
    +394        anchor: Anchor.center,
    +395        children: [
    +396          ScaleEffect.to(
    +397            Vector2.all(1.1),
    +398            EffectController(
    +399              duration: 0.3,
    +400              alternate: true,
    +401              infinite: true,
    +402            ),
    +403          ),
    +404        ],
    +405      ),
    +406    ]);
    +407  }
    +408
    +409  @override
    +410  bool containsLocalPoint(Vector2 point) => true;
    +411
    +412  @override
    +413  void onTapUp(TapUpEvent event) => game.router.pop();
    +414}
    +
    +
    +
    +

    This example app shows the use of the RouterComponent to move across multiple +screens within the game. In addition, the “pause” button stops time and applies +visual effects to the content of the page below it.

    +
    +
    +

    RouterComponent

    +

    The RouterComponent’s job is to manage navigation across multiple screens within the game. It is +similar in spirit to Flutter’s Navigator class, except that it works with Flame +components instead of Flutter widgets.

    +

    A typical game will usually consist of multiple pages: the splash screen, the starting menu page, +the settings page, credits, the main game page, several pop-ups, etc. The router will organize +all these destinations and allow you to transition between them.

    +

    Internally, the RouterComponent contains a stack of routes. When you request it to show a route, +it will be placed on top of all other pages in the stack. Later you can pop() to remove the +topmost page from the stack. The pages of the router are addressed by their unique names.

    +

    Each page in the router can be either transparent or opaque. If a page is opaque, then the pages +below it in the stack are not rendered and do not receive pointer events (such as taps or drags). +On the contrary, if a page is transparent, then the page below it will be rendered and receive +events normally. Such transparent pages are useful for implementing modal dialogs, inventory or +dialogue UIs, etc. If you want your route to be visually transparent but for the routes below it +to not receive events, make sure to add a background component to your route that captures the +events by using one of the event capturing mixins.

    +

    Usage example:

    +
    class MyGame extends FlameGame {
    +  late final RouterComponent router;
    +
    +  @override
    +  void onLoad() {
    +    add(
    +      router = RouterComponent(
    +        routes: {
    +          'home': Route(HomePage.new),
    +          'level-selector': Route(LevelSelectorPage.new),
    +          'settings': Route(SettingsPage.new, transparent: true),
    +          'pause': PauseRoute(),
    +          'confirm-dialog': OverlayRoute.existing(),
    +        },
    +        initialRoute: 'home',
    +      ),
    +    );
    +  }
    +}
    +
    +class PauseRoute extends Route { ... }
    +
    +
    +
    +

    Note

    +

    Use hide Route if any of your imported packages export another class called Route

    +

    eg: import 'package:flutter/material.dart' hide Route;

    +
    +
    +

    Route

    +

    The Route component holds information about the content of a particular page. Routes are +mounted as children to the RouterComponent.

    +

    The main property of a Route is its builder – the function that creates the component with +the content of its page.

    +

    In addition, the routes can be either transparent or opaque (default). An opaque prevents the route +below it from rendering or receiving pointer events, a transparent route doesn’t. As a rule of +thumb, declare the route opaque if it is full-screen, and transparent if it is supposed to cover +only a part of the screen.

    +

    By default, routes maintain the state of the page component after being popped from the stack +and the builder function is only called the first time a route is activated. Setting +maintainState to false drops the page component after the route is popped from the route stack +and the builder function is called each time the route is activated.

    +

    The current route can be replaced using pushReplacementNamed or pushReplacement. Each method +simply executes pop on the current route and then pushNamed or pushRoute.

    +
    +
    +

    OverlayRoute

    +

    The OverlayRoute is a special route that allows adding game overlays via the router. These +routes are transparent by default.

    +

    There are two constructors for the OverlayRoute. The first constructor requires a builder function +that describes how the overlay’s widget is to be built. The second constructor can be used when the +builder function was already specified within the GameWidget:

    +
    final router = RouterComponent(
    +  routes: {
    +    'ok-dialog': OverlayRoute(
    +      (context, game) {
    +        return Center(
    +          child: DecoratedContainer(...),
    +        );
    +      },
    +    ),  // OverlayRoute
    +    'confirm-dialog': OverlayRoute.existing(),
    +  },
    +);
    +
    +
    +

    Overlays that were defined within the GameWidget don’t even need to be declared within the routes +map beforehand: the RouterComponent.pushOverlay() method can do it for you. Once an overlay route +was registered, it can be activated either via the regular .pushNamed() method, or via the +.pushOverlay() – the two methods will do exactly the same, though you can use the second one to +make it more clear in your code that an overlay is being added instead of a regular route.

    +

    The current overlay can be replaced using pushReplacementOverlay. This method executes +pushReplacementNamed or pushReplacement based on the status of the overlay being pushed.

    +
    +
    +

    ValueRoute

    +
    +
    +
    +value_route.dart
    +
      1import 'dart:math';
    +  2import 'dart:ui';
    +  3
    +  4import 'package:doc_flame_examples/router.dart';
    +  5import 'package:flame/components.dart';
    +  6import 'package:flame/events.dart';
    +  7import 'package:flame/game.dart';
    +  8import 'package:flame/geometry.dart';
    +  9
    + 10class ValueRouteExample extends FlameGame {
    + 11  late final RouterComponent router;
    + 12
    + 13  @override
    + 14  Future<void> onLoad() async {
    + 15    router = RouterComponent(
    + 16      routes: {'home': Route(HomePage.new)},
    + 17      initialRoute: 'home',
    + 18    );
    + 19    add(router);
    + 20  }
    + 21}
    + 22
    + 23class HomePage extends Component with HasGameReference<ValueRouteExample> {
    + 24  @override
    + 25  Future<void> onLoad() async {
    + 26    add(
    + 27      RoundedButton(
    + 28        text: 'Rate me',
    + 29        action: () async {
    + 30          final score = await game.router.pushAndWait(RateRoute());
    + 31          firstChild<TextComponent>()!.text = 'Score: $score';
    + 32        },
    + 33        color: const Color(0xff758f9a),
    + 34        borderColor: const Color(0xff60d5ff),
    + 35      )..position = game.size / 2,
    + 36    );
    + 37    add(
    + 38      TextComponent(
    + 39        text: 'Score: –',
    + 40        anchor: Anchor.topCenter,
    + 41        position: game.size / 2 + Vector2(0, 30),
    + 42        scale: Vector2.all(0.7),
    + 43      ),
    + 44    );
    + 45  }
    + 46}
    + 47
    + 48class RateRoute extends ValueRoute<int>
    + 49    with HasGameReference<ValueRouteExample> {
    + 50  RateRoute() : super(value: -1, transparent: true);
    + 51
    + 52  @override
    + 53  Component build() {
    + 54    final size = Vector2(250, 130);
    + 55    const radius = 18.0;
    + 56    final starGap = (size.x - 5 * 2 * radius) / 6;
    + 57    return DialogBackground(
    + 58      position: game.size / 2,
    + 59      size: size,
    + 60      children: [
    + 61        RoundedButton(
    + 62          text: 'Ok',
    + 63          position: position = Vector2(size.x / 2, 100),
    + 64          action: () {
    + 65            completeWith(
    + 66              descendants().where((c) => c is Star && c.active).length,
    + 67            );
    + 68          },
    + 69          color: const Color(0xFFFFFFFF),
    + 70          borderColor: const Color(0xFF000000),
    + 71        ),
    + 72        for (var i = 0; i < 5; i++)
    + 73          Star(
    + 74            value: i + 1,
    + 75            radius: radius,
    + 76            position: Vector2(starGap * (i + 1) + radius * (2 * i + 1), 40),
    + 77          ),
    + 78      ],
    + 79    );
    + 80  }
    + 81}
    + 82
    + 83class DialogBackground extends RectangleComponent with TapCallbacks {
    + 84  DialogBackground({super.position, super.size, super.children})
    + 85      : super(
    + 86          anchor: Anchor.center,
    + 87          paint: Paint()..color = const Color(0xee858585),
    + 88        );
    + 89}
    + 90
    + 91class Star extends PositionComponent with TapCallbacks {
    + 92  Star({required this.value, required this.radius, super.position})
    + 93      : super(size: Vector2.all(2 * radius), anchor: Anchor.center);
    + 94
    + 95  final int value;
    + 96  final double radius;
    + 97  final Path path = Path();
    + 98  final Paint borderPaint = Paint()
    + 99    ..style = PaintingStyle.stroke
    +100    ..color = const Color(0xffffe395)
    +101    ..strokeWidth = 2;
    +102  final Paint fillPaint = Paint()..color = const Color(0xffffe395);
    +103  bool active = false;
    +104
    +105  @override
    +106  Future<void> onLoad() async {
    +107    path.moveTo(radius, 0);
    +108    for (var i = 0; i < 5; i++) {
    +109      path.lineTo(
    +110        radius + 0.6 * radius * sin(tau / 5 * (i + 0.5)),
    +111        radius - 0.6 * radius * cos(tau / 5 * (i + 0.5)),
    +112      );
    +113      path.lineTo(
    +114        radius + radius * sin(tau / 5 * (i + 1)),
    +115        radius - radius * cos(tau / 5 * (i + 1)),
    +116      );
    +117    }
    +118    path.close();
    +119  }
    +120
    +121  @override
    +122  void render(Canvas canvas) {
    +123    if (active) {
    +124      canvas.drawPath(path, fillPaint);
    +125    }
    +126    canvas.drawPath(path, borderPaint);
    +127  }
    +128
    +129  @override
    +130  void onTapDown(TapDownEvent event) {
    +131    var on = true;
    +132    for (final star in parent!.children.whereType<Star>()) {
    +133      star.active = on;
    +134      if (star == this) {
    +135        on = false;
    +136      }
    +137    }
    +138  }
    +139}
    +
    +
    +
    +
    +

    A ValueRoute is a route that will return a value when it is eventually popped from the stack. +Such routes can be used, for example, for dialog boxes that ask for some feedback from the user.

    +

    In order to use ValueRoutes, two steps are required:

    +
      +
    1. Create a route derived from the ValueRoute<T> class, where T is the type of the value that +your route will return. Inside that class override the build() method to construct the +component that will be displayed. The component should use the completeWith(value) method to +pop the route and return the specified value.

      +
      class YesNoDialog extends ValueRoute<bool> {
      +  YesNoDialog(this.text) : super(value: false);
      +  final String text;
      +
      +  @override
      +  Component build() {
      +    return PositionComponent(
      +      children: [
      +        RectangleComponent(),
      +        TextComponent(text: text),
      +        Button(
      +          text: 'Yes',
      +          action: () => completeWith(true),
      +        ),
      +        Button(
      +          text: 'No',
      +          action: () => completeWith(false),
      +        ),
      +      ],
      +    );
      +  }
      +}
      +
      +
      +
    2. +
    3. Display the route using Router.pushAndWait(), which returns a future that resolves with the +value returned from the route.

      +
      Future<void> foo() async {
      +  final result = await game.router.pushAndWait(YesNoDialog('Are you sure?'));
      +  if (result) {
      +    // ... the user is sure
      +  } else {
      +    // ... the user was not so sure
      +  }
      +}
      +
      +
      +
    4. +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/flame/structure.html b/docs/1.18.0/flame/structure.html new file mode 100644 index 000000000..13b8e3ca6 --- /dev/null +++ b/docs/1.18.0/flame/structure.html @@ -0,0 +1,420 @@ + + + + + + + Structure — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Structure

    +

    Flame has a proposed structure for your project that includes the standard Flutter assets +directory in addition to some children: audio, images and tiles.

    +

    If using the following example code:

    +
    void main() {
    +  FlameAudio.play('explosion.mp3');
    +
    +  Flame.images.load('player.png');
    +  Flame.images.load('enemy.png');
    +  
    +  final map1 = TiledComponent.load('level.tmx', tileSize);
    +  
    +  final map2 = await SpriteFusionTilemapComponent.load(
    +    mapJsonFile: 'map.json',
    +    spriteSheetFile: 'spritesheet.png'
    +  );
    +}
    +
    +
    +

    The following file structure is where Flame would expect to find the files:

    +
    .
    +└── assets
    +    ├── audio
    +    │   └── explosion.mp3
    +    ├── images
    +    │   ├── enemy.png
    +    │   ├── player.png
    +    │   └── spritesheet.png
    +    └── tiles
    +        ├── level.tmx
    +        └── map.json
    +
    +
    +

    Optionally you can split your audio folder into two subfolders, one for music and one for sfx.

    +

    Don’t forget to add these files to your pubspec.yaml file:

    +
    flutter:
    +  assets:
    +    - assets/audio/explosion.mp3
    +    - assets/images/player.png
    +    - assets/images/enemy.png
    +    - assets/tiles/level.tmx
    +
    +
    +

    If you want to change this structure, this is possible by using the prefix parameter and creating +your instances of AssetsCache, Images, and AudioCache, instead of using the +global ones provided by Flame.

    +

    Additionally, AssetsCache and Images can receive a custom +AssetBundle. +This can be used to make Flame look for assets in a different location other the rootBundle, +like the file system for example.

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/genindex.html b/docs/1.18.0/genindex.html new file mode 100644 index 000000000..bbc17a922 --- /dev/null +++ b/docs/1.18.0/genindex.html @@ -0,0 +1,357 @@ + + + + + + + Index — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + + +

    Index

    + +
    + +
    + + +
    + +
    +
    +
    +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/index.html b/docs/1.18.0/index.html new file mode 100644 index 000000000..a45d24360 --- /dev/null +++ b/docs/1.18.0/index.html @@ -0,0 +1,424 @@ + + + + + + + Getting Started — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Getting Started

    +
    +

    About Flame

    +

    Flame is a modular Flutter game engine that provides a complete set of out-of-the-way solutions for +games. It takes advantage of the powerful infrastructure provided by Flutter but simplifies the code +you need to build your projects.

    +

    It provides you with a simple yet effective game loop implementation, and the necessary +functionalities that you might need in a game. For instance; input, images, sprites, sprite sheets, +animations, collision detection, and a component system that we call Flame Component System (FCS for +short).

    +

    We also provide stand-alone packages that extend the Flame functionality which can be found in the +Bridge Packages section.

    +

    You can pick and choose whichever parts you want, as they are all independent and modular.

    +

    The engine and its ecosystem are constantly being improved by the community, so please feel free to +reach out, open issues and PRs as well as make suggestions.

    +

    Give us a star if you want to help give the engine exposure and grow the community. :)

    +
    +
    +

    Installation

    +

    Add the flame package as a dependency in your pubspec.yaml by running the following command:

    +
    flutter pub add flame
    +
    +
    +

    The latest version can be found on pub.dev.

    +

    then run flutter pub get and you are ready to start using it!

    +
    +
    +

    Getting started

    +

    There is a set of tutorials that you can follow to get started in the +tutorials folder.

    +

    Simple examples for all features can be found in the +examples folder.

    +

    You can also check out the awesome flame +repository, +it contains quite a lot of good tutorials and articles written by the community +to get you started with Flame.

    +
    +
    +

    Outside of the scope of the engine

    +

    Games sometimes require complex feature sets depending on what the game is all about. Some of these +feature sets are outside of the scope of the Flame Engine ecosystem, in this section you can find +them, and also some recommendations of packages/services that can be used:

    +
    +

    Multiplayer (netcode)

    +

    Flame doesn’t bundle any network feature, which may be needed to write online multiplayer games.

    +

    If you are building a multiplayer game, here are some recommendations of packages/services:

    +
      +
    • Nakama: An open-source server designed +to power modern games and apps.

    • +
    • Firebase: Provides dozens of services that can be used to write +simpler multiplayer experiences.

    • +
    • Supabase: A cheaper alternative to Firebase, based on Postgres.

    • +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/objects.inv b/docs/1.18.0/objects.inv new file mode 100644 index 000000000..496bcb4cf Binary files /dev/null and b/docs/1.18.0/objects.inv differ diff --git a/docs/1.18.0/other_modules/jenny/jenny.html b/docs/1.18.0/other_modules/jenny/jenny.html new file mode 100644 index 000000000..11c17beb4 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/jenny.html @@ -0,0 +1,483 @@ + + + + + + + Jenny — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + + +
    +

    Jenny

    +

    The jenny library is a toolset for adding dialogue into a game. The dialogue may be quite +complex, including user-controlled interactions, branching, dynamically-generated content, commands, +markup, state controlled either from Jenny or from the game, custom functions and commands, etc. +The jenny library is an unofficial port of the Yarn Spinner library for Unity. The name of the +library comes from spinning jenny, a kind of yarn-spinning machine.

    +

    Adding dialogue into any game generally consists of two stages:

    +
      +
    1. Writing the text of the dialogue;

    2. +
    3. Interactively displaying it within the game.

    4. +
    +

    With jenny, these two tasks are completely separate, allowing the creation of game content and +development of the game engine to be independent.

    +
    +

    Writing dialogue

    +

    In jenny, the dialogue is written in plain text and stored in .yarn files that are added +to the game as assets. The .yarn file format is developed by the authors of Yarn Spinner, and +is specifically designed for writing dialogue.

    +

    The simplest form of the yarn dialogue looks like a play:

    +
    title: Scene1_Gregory_and_Sampson
    +---
    +Sampson: Gregory, on my word, we'll not carry coals.
    +Gregory: No, for then we should be colliers.
    +Sampson: I mean, an we be in choler, we'll draw.
    +Gregory: Ay, while you live, draw your neck out of collar.
    +Sampson: I strike quickly being moved.
    +Gregory: But thou art not quickly moved to strike.
    +===
    +
    +
    +

    This simple exchange, when rendered within a game, will be shown as a sequence of phrases spoken +in turn by the two characters. The DialogRunner will allow you to control whether the dialogue +proceeds automatically or requires “clicking-through” by the user.

    +

    The .yarn format supports many more advanced features too, allowing the dialogue to proceed +non-linearly, supporting variables and conditional execution, giving the player an ability to +select their response, etc. Most importantly, the format is so intuitive that it can be generally +understood without having to learn it:

    +
    title: Slughorn_encounter
    +---
    +<<if visited("Horcrux_question")>>
    +  Slughorn: Sorry, Tom, I don't have time right now.
    +  <<stop>>
    +<<endif>>
    +
    +Slughorn: Oh hello, Tom, is there anything I can help you with?
    +Tom: Good {time_of_day()}, Professor.
    +-> I was curious about the 12 uses of the dragon blood.
    +    Slughorn: Such an inquisitive mind! You can read about that in the "Moste \
    +              Potente Potions" in the Restricted Section of the library.
    +    <<give restricted_library_pass>>
    +    Tom: Thank you, Professor, this is very munificent of you.
    +-> I wanted to ask... about Horcruxes <<if $knows_about_horcruxes>>
    +    <<jump Horcrux_question>>
    +-> I just wanted to say how much I always admire your lectures.
    +    Slughorn: Thank you, Tom. I do enjoy flattery, even if it is well-deserved.
    +===
    +
    +title: Horcrux_question
    +---
    +Slughorn: Where... did you hear that?
    +-> Tom: It was mentioned in an old book in the library...
    +    Slughorn: I see that you have read more books from the Restricted Section \
    +              than is wise.
    +    Slughorn: I'm sorry, Tom, I should have seen you'd be tempted...
    +    <<take restricted_library_pass>>
    +    -> But Professor!..
    +        Slughorn: This is for your good, Tom. Many of those books are dangerous!
    +        Slughorn: Now off you go. And do your best to forget about what you \
    +                  asked...
    +        <<stop>>
    +-> Tom: I overheard it... And the word felt sharp and frigid, like it was the \
    +   embodiment of Dark Art <<if luck() >= 80>>
    +    Slughorn: It is a very Dark Art indeed, it is not good for you to know \
    +              about it...
    +    Tom: But if I don't know about this Dark Art, how can I defend myself \
    +         against it?
    +    Slughorn: It is a Ritual, one of the darkest known to wizard-kind ...
    +    ...
    +    <<achievement "The Darkest Secret">>
    +===
    +
    +
    +

    This fragment demonstrates many of the features of the .yarn language, including:

    +
      +
    • ability to divide the text into smaller chunks called nodes;

    • +
    • control the flow of the dialog via commands such as <<if>> or <<jump>>;

    • +
    • different dialogue path depending on player’s choices;

    • +
    • disable certain menu choices dynamically;

    • +
    • keep state information in variables;

    • +
    • user-defined functions (time_of_day, luck) and commands (<<give>>, <<take>>).

    • +
    +

    For more information, see the Yarn Language section.

    +
    +
    +

    Using the dialogue in a game

    +

    By itself, the jenny library does not integrate with any game engine. However, it provides a +runtime that can be used to build such an integration. This runtime consists of the following +components:

    +
      +
    • YarnProject – the central repository of information, which knows +about all your yarn scripts, variables, custom functions and commands, settings, etc.

    • +
    • DialogueRunner – an executor that can run a specific dialogue +node. This executor will send the dialogue lines into one or more DialogueViews.

    • +
    • DialogueView – an abstract interface describing how the dialogue +will be presented to the end user. Implementing this interface is the primary way of integrating +jenny into a specific environment.

    • +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/commands/character.html b/docs/1.18.0/other_modules/jenny/language/commands/character.html new file mode 100644 index 000000000..b8a16a1c1 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/commands/character.html @@ -0,0 +1,423 @@ + + + + + + + <<character>> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    <<character>>

    +

    The <<character>> command declares a character with the given name, and one or more aliases +that can be used in the scripts.

    +

    The command has several purposes:

    +
      +
    • it protects you from accidentally misspelling a character’s name in your script;

    • +
    • it allows a character to have full name, which doesn’t have to be an ID;

    • +
    • it allows declaring multiple aliases for the same character, which can be used in different +nodes (an alias may even be in a different language than the full name);

    • +
    • you can associate additional data with each character, which will then be available at runtime.

    • +
    +

    The format of this command is the following:

    +
    <<character "FULL NAME" alias1 alias2...>>
    +
    +
    +

    The full name here is optional: if given, it will be considered the name of the character. +However, if the name is omitted, then the first alias will be considered the true character’s name. +Each alias must be a valid ID, and at least one alias must be provided. For example:

    +
    // A well-mannered seven-year-old girl, who nevertheless always gets into
    +// all kinds of zany adventures.
    +<<character Alice>>
    +
    +// A magical cat known for his ability to grin majestically, and partially
    +// vanish. He is mad (by his own admission).
    +<<character "Cheshire Cat" Cat Cheshire>>
    +
    +// A foul-tempered Queen, who is also a playing card. Described as
    +// "a blind fury", her favorite saying is "Off with their heads!".
    +// Not to be confused with Red Queen.
    +<<character "Queen of Hearts" Queen QoH QH>>
    +
    +
    +

    After a character is declared, any of its aliases can be used in the script: they will all refer +to the same Character object. At the same time, using a character without declaring it first is +not allowed (unless a special flag in YarnProject is set to allow this).

    +
    title: Alice_and_the_Cat
    +---
    +Alice: But I don't want to go among mad people.
    +Cat:   Oh, you can't help that, we're all mad here. I'm mad. You're mad.
    +Alice: How do you know I'm mad?
    +Cat:   You must be, or you wouldn't have come here.
    +Alice: And how do you know that you're mad?
    +Cat:   To begin with, a dog's not mad. You grant that?
    +Alice: I suppose so.
    +Cat:   Well then, you see a dog growls when it's angry, and wags its tail \
    +       when it's pleased.
    +Cat:   Now, [i]I[/i] growl when I'm pleased, and wag my tail when I'm angry. \
    +       Therefore, I'm mad.
    +Alice: [i]I[/i] call it purring, not growling.
    +Cat:   Call it what you like.
    +===
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/commands/commands.html b/docs/1.18.0/other_modules/jenny/language/commands/commands.html new file mode 100644 index 000000000..239803e07 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/commands/commands.html @@ -0,0 +1,415 @@ + + + + + + + Commands — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Commands

    +

    The commands are special instructions surrounded with double angle-brackets: <<stop>>. There +are both built-in and user-defined commands.

    +

    The built-in commands are those that are supported by the YarnSpinner runtime itself. Typically +they would alter the execution of the dialogue, or perform a similar dialogue-related function. The +full list of such commands is given below.

    +

    The user-defined commands are those that you yourself create and then use within your yarn +scripts. For a full description of these commands, see the document on user-defined commands.

    +
    +

    Built-in commands

    +
    +

    Variables

    +
    +
    <<character>>

    Declares a character (person).

    +
    +
    <<declare>>

    Declares a global variable.

    +
    +
    <<local>>

    Declares a local variable.

    +
    +
    <<set>>

    Updates the value of a variable (either local or global).

    +
    +
    +
    +
    +

    Control flow

    +
    +
    <<if>>

    Conditionally executes certain statements. This is equivalent to the if keyword in most +programming languages.

    +
    +
    <<jump>>

    Switches execution to another node.

    +
    +
    <<stop>>

    Stops executing the current node.

    +
    +
    <<visit>>

    Temporarily jumps to another node, and then comes back.

    +
    +
    <<wait>>

    Pauses the dialogue for the specified amount of time.

    +
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/commands/declare.html b/docs/1.18.0/other_modules/jenny/language/commands/declare.html new file mode 100644 index 000000000..ac5ee158b --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/commands/declare.html @@ -0,0 +1,446 @@ + + + + + + + <<declare>> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    <<declare>>

    +

    The <<declare>> command creates a new global variable and assigns an initial value to it. +After this command is encountered, the declared variable will be available for use anywhere a +variable might be needed, including in inline expressions, other commands, and even other declare +statements.

    +

    Unlike most other commands, the <<declare>> command is executed at compile time, i.e. when the +yarn scripts are parsed. When the dialogue runs, it has no effect, since by that time the variable +is already initialized and ready for use. For this reason, the <<declare>> commands must be +placed outside of nodes, at the root level of the script, making it clear that these commands do +not execute when a node runs.

    +

    For example:

    +
    <<declare $monicker = "boy">>
    +
    +---------------
    +title: Greeting
    +---------------
    +Teacher: Welcome to the class, {$monicker}!
    +===
    +
    +
    +

    Here the <<declare>> command introduces a new variable called $monicker, of type String, and +assigns it an initial value of "boy". Later on, this variable is used inside the “Greeting” node. +By that time, the value of the variable can be anything: it could be changed in some other node, or +by the game itself. The <<declare>> statement, however, is necessary to tell Jenny that this is +a valid variable name, and what type it has.

    +

    From the project organization standpoint, the recommended approach is to put all the <<declare>> +statements into a separate file, and then make sure that this yarn file is parsed first. This will +ensure that all global variables are declared before they are used in subsequent nodes.

    +

    If your game supports save-games, then you would probably want to store the values of yarn global +variables too. In this case restoring the saved values should be done after all yarn scripts are +parsed (otherwise the engine will think that a variable is declared twice).

    +
    +

    Syntax

    +

    There are several forms of the <<declare>> statement. The most common one is the following:

    +
    <<declare $VARIABLE = EXPRESSION>>
    +
    +
    +

    Here $VARIABLE is the name of the variable being declared (all variables in Yarn start with a $ +sign), and EXPRESSION is either a literal or a more complicated expression that will be +evaluated at compile time in order to provide the initial value for the variable. The type of the +variable will be deduced from the type of the EXPRESSION.

    +

    Another possible syntax for the <<declare>> command is this:

    +
    <<declare $VARIABLE as TYPE>>
    +
    +
    +

    where TYPE is one of Bool, Number, or String. This will create a variable of the given type, +and initialize it with values false, 0, or "" respectively.

    +

    Finally, it is possible to combine these two syntaxes:

    +
    <<declare $VARIABLE = EXPRESSION as TYPE>>
    +
    +
    +

    This can be useful when the type of the EXPRESSION is not immediately obvious, and you want to +make the declaration more explicit. The compiler will check that the type of the EXPRESSION is +the same as TYPE, and will throw a compile-time error otherwise.

    +
    +
    +

    Examples

    +
    <<declare $prefix = "Mr.">>
    +<<declare $gold = 100>>
    +<<declare $been_to_hell = false>>
    +
    +<<declare $name as String>>
    +<<declare $distanceTraveled as Number>>
    +
    +<<declare $birthDay = randomRange(1, 365) as Number>>
    +<<declare $vulgarity = GetObscenitySetting() as Bool>>
    +
    +
    +
    +

    Note

    +

    It is a good idea to accompany each <<declare>> with a doc-comment explaining the purpose of the +variable, similarly to how you would document public members of a class.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/commands/if.html b/docs/1.18.0/other_modules/jenny/language/commands/if.html new file mode 100644 index 000000000..f8c0b989c --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/commands/if.html @@ -0,0 +1,421 @@ + + + + + + + <<if>> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    <<if>>

    +

    The <<if>> command evaluates its condition, and based on that decides which statements to +execute next. This is equivalent to if keyword in most programming languages. This command may +have multiple parts, which look as follows:

    +
    <<if condition1>>
    +  statements1...
    +<<elseif condition2>>
    +  statements2...
    +<<else>>
    +  statementsN...
    +<<endif>>
    +
    +
    +
      +
    • The conditions within each command must have boolean type.

    • +
    • There could be any number of <<elseif>> blocks.

    • +
    • The <<elseif>> blocks and <<else>> are optional.

    • +
    • The final <<endif>> is mandatory.

    • +
    • The statements within each block must be indented.

    • +
    +

    At runtime, the condition within the if block is evaluated first. If it turns out to be true, +then the dialogue proceeds with executing statements1, and no other conditions are evaluated nor +other statement blocks executed. However, if condition1 evaluated to false, then condition2 +is calculated. If it is true, then the dialogue runner will execute statements2, and if false it +will fall-through into the else block and execute statementsN. In the end, the dialogue will +proceed to statements that occur after the final <<endif>>.

    +
    +

    Example

    +

    In this dialogue a Guard will greet you differently depending on your reputation with the +citizens of the area. If your reputation falls below −100, you’ll be attacked on sight.

    +
    title: GuardGreeting
    +---
    +<<if $reputation >= 100>>
    +  Guard: Hail to the savior of the people!
    +<<elseif $reputation >= 30>>
    +  Guard: Nice to meet you, sir!
    +<<elseif $reputation >= 0>>
    +  Guard: Hello
    +<<elseif $reputation > -30>>
    +  Guard: I'm keeping an eye on you...
    +<<elseif $reputation > -100>>
    +  Guard: You filthy scum!
    +<<else>>
    +  Guard: You'll pay for your crimes! #auto
    +  <<attack>>
    +<<endif>>
    +===
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/commands/jump.html b/docs/1.18.0/other_modules/jenny/language/commands/jump.html new file mode 100644 index 000000000..2b79f3ac1 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/commands/jump.html @@ -0,0 +1,391 @@ + + + + + + + <<jump>> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    <<jump>>

    +

    The <<jump>> command stops executing the current node, and then immediately starts running +the target node. This is similar to a goto in many programming languages. For example:

    +
    <<jump FarewellScene>>
    +
    +
    +

    The argument of this command is the id of the node to jump to. It can be given either as a plain +node ID, or as an expression in curly braces:

    +
    <<jump {"Ending_" + $ending}>>
    +
    +
    +

    If the expression evaluates at runtime to an unknown name, then a NameError exception will be +thrown.

    +
    +

    See Also

    +
      +
    • <<visit>> command, which jumps into the destination node temporarily and then +returns to the same place in the dialogue as before.

    • +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/commands/local.html b/docs/1.18.0/other_modules/jenny/language/commands/local.html new file mode 100644 index 000000000..2071de704 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/commands/local.html @@ -0,0 +1,411 @@ + + + + + + + <<local>> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    <<local>>

    +

    The <<local>> command creates a new variable within the current node, and initializes it +to some starting value. Thus, it is similar to <<declare>>, except that the variable +it creates is visible within a single node only.

    +

    The syntax of the <<local>> command can be one of the following:

    +
    <<local $VARIABLE = EXPRESSION>>
    +<<local $VARIABLE = EXPRESSION as TYPE>>
    +
    +
    +

    This would create a variable with the name $VARIABLE (all variables in YarnSpinner start with a +$ sign), and assign it the value of EXPRESSION. In the second form, it will ensure that the +type of the expression is equal to TYPE, otherwise a compile-time error will be thrown. Thus, the +second form serves as the explicit annotation for the type of the variable created.

    +

    The following restrictions apply:

    +
      +
    • each local variable can be declared only once within a node;

    • +
    • the name of a local variable cannot coincide with the name of any global variable.

    • +
    +
    +

    Examples

    +

    In this example the variable $roll will only be needed temporarily within this one node, so it +wouldn’t make sense to declare it as global.

    +
    title: a_dice_roll
    +---
    +<<local $roll = dice(6)>>
    +<<if $roll == 1>>
    +  You've rolled 1, rotten luck...
    +<<elseif $roll == 2>>
    +  You've rolled 2, which is still below the average. Try harder!
    +<<elseif $roll == 3>>
    +  You've rolled 3.14159265 (well, almost).
    +<<elseif $roll == 4>>
    +  Your roll is an unlucky number. Please roll again
    +<<else>>
    +  You've rolled 10 (when rounded to the nearest ten). Good job!
    +<<endif>>
    +===
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/commands/set.html b/docs/1.18.0/other_modules/jenny/language/commands/set.html new file mode 100644 index 000000000..ca609671e --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/commands/set.html @@ -0,0 +1,428 @@ + + + + + + + <<set>> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    <<set>>

    +

    The <<set>> command is used to update the value of an existing variable. The variable +must be declared with <<declare>> or <<local>> before it can be used +in <<set>>.

    +

    The command <<set>> allows either regular assignment, or modifying assignment, like follows:

    +
    // Regular assignment
    +<<set $VARIABLE = EXPRESSION>>
    +<<set $VARIABLE to EXPRESSION>>
    +
    +// Modifying assignments
    +<<set $VARIABLE += EXPRESSION>>
    +<<set $VARIABLE -= EXPRESSION>>
    +<<set $VARIABLE *= EXPRESSION>>
    +<<set $VARIABLE /= EXPRESSION>>
    +<<set $VARIABLE %= EXPRESSION>>
    +
    +// These modifying assignments are equivalent to the following:
    +<<set $VARIABLE = $VARIABLE + EXPRESSION>>
    +<<set $VARIABLE = $VARIABLE - EXPRESSION>>
    +<<set $VARIABLE = $VARIABLE * EXPRESSION>>
    +<<set $VARIABLE = $VARIABLE / EXPRESSION>>
    +<<set $VARIABLE = $VARIABLE % EXPRESSION>>
    +
    +
    +

    In all cases, the EXPRESSION must have the same type as the $VARIABLE. If not, a compile-time +error will be thrown.

    +
    +

    Examples

    +
    <<declare $favorite_color as String>>
    +
    +title: ColorQuiz
    +---
    +What is your favorite color?
    +-> White
    +   <<set $favorite_color to "White">>
    +-> Red
    +   <<set $favorite_color to "Red">>
    +-> Yellow
    +   <<set $favorite_color = "Yellow">>
    +-> Blue
    +   Oh, Nice! Which shade of blue?
    +   -> Azure
    +   -> Cerulean
    +   -> Lapis Lazuli
    +   Umm, I don't know how to spell that. I'll just put you down as "blue".
    +   <<set $favorite_color = "Blue">>
    +-> Black
    +   <<set $favorite_color = "Black">>
    +   That's mine too!
    +   <<set $affinity += 3>>
    +-> Prefer not to tell
    +   Aww... Maybe if I ask again really nicely?
    +   <<jump ColorQuiz>>
    +===
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/commands/stop.html b/docs/1.18.0/other_modules/jenny/language/commands/stop.html new file mode 100644 index 000000000..97db6d33e --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/commands/stop.html @@ -0,0 +1,380 @@ + + + + + + + <<stop>> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    <<stop>>

    +

    The <<stop>> command: immediately stops evaluating the current node, as if you jumped to +its end. This command takes no arguments.

    +

    Normally, the effect of this command is that it stops the dialogue. However, if you’re only +visiting the current node from a different one, then <<stop>> will only exit the current node, +and the execution flow will return to the parent. Thus, the <<stop>> command is similar to +return; in many programming languages.

    +
    <<stop>>
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/commands/user_defined_commands.html b/docs/1.18.0/other_modules/jenny/language/commands/user_defined_commands.html new file mode 100644 index 000000000..1d9018c5d --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/commands/user_defined_commands.html @@ -0,0 +1,402 @@ + + + + + + + User-defined commands — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    User-defined commands

    +

    In addition to the built-in commands, you can also declare your own user-defined commands for +use in your yarn scripts. Typically, these commands would perform some in-game action that can be +viewed as a natural part of the dialogue. For example, you can create commands for such action as +<<wave>>, <<smile>>, <<frown>>, <<moveCamera>>, <<zoom>>, <<shakeCamera>>, +<<fadeOut>>, <<walk>>, <<give>>, <<take>>, <<achievement>>, <<GainExperience>>, +<<startQuest>>, <<finishQuest>>, <<openTrade>>, <<drawWeapon>>, and so on.

    +

    In many cases, the commands will need to take arguments. The arguments of a user-defined command +are processed according to the following rules:

    +
      +
    • First, all content after the command name and until the closing >> is parsed according to the +rules of regular line parsing, where interpolated expressions are allowed but markup and hashtags +are not.

    • +
    • At runtime, the content of that line is evaluated, meaning that we substitute the values of all +expressions.

    • +
    • The evaluated argument string is then broken into individual arguments at whitespace, and the +types of these arguments are checked against the signature of the backing function.

    • +
    • Then, the backing function is called with the parsed arguments.

    • +
    • Lastly, all dialogue views in the dialogue runner receive the onCommand() event.

    • +
    +

    As a concrete example, consider the following command:

    +
    <<give Gold {round(100 * $multiplier)}>>
    +
    +
    +

    First note that, unlike builtin commands, the arguments of the command are treated as text, and any +expressions need to be placed in curly brackets.

    +

    Then, at runtime the expression is evaluated, and (assuming $multiplier is 1.5) the command’s +argument string becomes "Gold 150". The string is then broken at white spaces and each argument +is parsed according to its type in the backing Dart function. For example, if the function’s +signature is void give(String item, int? amount), then it will be invoked as give("Gold", 150). +If, on the other hand, the number or types of arguments do not match the expected signature, then +a DialogueException will be raised.

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/commands/visit.html b/docs/1.18.0/other_modules/jenny/language/commands/visit.html new file mode 100644 index 000000000..f4f30d4ad --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/commands/visit.html @@ -0,0 +1,402 @@ + + + + + + + <<visit>> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    <<visit>>

    +

    The <<visit>> command temporarily puts the current node on hold, executes the target node, +and after it finishes, resumes execution of the previous node. This is similar to a function call +in many programming languages.

    +

    The <<visit>> command can be useful for splitting a large dialogue into several smaller nodes, +or for reusing some common dialogue lines in several nodes. For example:

    +
    title: RoamingTrader1
    +---
    +<<if $roaming_trader_introduced>>
    +  Hello again, {$player}!
    +<<else>>
    +  <<visit RoamingTraderIntro>>
    +<<endif>>
    +
    +-> What do you think about the Calamity?  <<if $calamity_started>>
    +   <<visit RoamingTrader_Calamity>>
    +-> Have you seen a weird-looking girl running by? <<if $quest_little_girl>>
    +   <<visit RoamingTrader_LittleGirl>>
    +-> What do you have for trade?
    +   <<OpenTrade>>
    +
    +Pleasure doing business with you! #auto
    +===
    +
    +
    +

    The argument of this command is the id of the node to jump to. It can be given either as a plain +node ID, or as an expression in curly braces:

    +
    <<visit {"RewardChoice_" + string($choice)}>>
    +
    +
    +

    If the expression evaluates at runtime to an unknown name, then a NameError exception will be +thrown.

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/commands/wait.html b/docs/1.18.0/other_modules/jenny/language/commands/wait.html new file mode 100644 index 000000000..5a43eaa61 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/commands/wait.html @@ -0,0 +1,381 @@ + + + + + + + <<wait>> — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    <<wait>>

    +

    The <<wait>> command forces the dialogue engine to wait for the specified duration +(in seconds) before resuming the dialogue. The number of seconds can be 0, but cannot be negative. +This command takes a single argument, which must be a numeric expression. For example:

    +
    // Wait for a quarter of a second
    +<<wait 0.25>>
    +
    +// Wait for the amount of time given by the $delay variable
    +<<wait $delay>>
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/expressions/expressions.html b/docs/1.18.0/other_modules/jenny/language/expressions/expressions.html new file mode 100644 index 000000000..658debc0c --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/expressions/expressions.html @@ -0,0 +1,387 @@ + + + + + + + Expressions — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Expressions

    +

    The expressions in YarnSpinner provide a way to dynamically change the flow or the content +of the dialogue, based on variables, combined with operators or function calls. They are +used in several places:

    +
      +
    • to insert a dynamic text into a line;

    • +
    • to create or update a variable;

    • +
    • as part of a command such as <<if>> or <<set>>;

    • +
    • to compute the values of markup attributes.

    • +
    +

    An expression always evaluates synchronously, meaning that it cannot wait for user’s input, nor +perform an action over time, nor carry out any computationally intensive calculations in a +different thread. If such functionality is really desired, then it can be achieved via a +user-defined command that waits for the calculation to succeed and then stores the result into +some global variable, which can then be accessed from an expression.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/expressions/functions/functions.html b/docs/1.18.0/other_modules/jenny/language/expressions/functions/functions.html new file mode 100644 index 000000000..ff897f548 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/expressions/functions/functions.html @@ -0,0 +1,470 @@ + + + + + + + Functions — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Functions

    +

    A function in YarnSpinner is the same notion as in any other programming language, or in math: +it takes a certain number of arguments, and then computes and returns the result. A function call +is indicated by the name of the function, followed by its arguments in parentheses. The parentheses +are required, even when there are no arguments:

    +
    <<set $roll_2d6 = dice(6) + dice(6)>>
    +<<set $random = random()>>
    +
    +
    +

    There are around 20 built-in functions in Jenny, listed below; and it is also possible to add +user-defined functions as well.

    +
    +

    Built-in functions

    + +
    +
    +

    User-defined functions

    +

    In addition to the built-in functions, you can also define any number of user-defined functions +which can later be used in your yarn scripts. The syntax for these functions is exactly the same +as for the built-in functions: it consists of a function name, followed by the arguments in +parentheses.

    +

    Each user-defined function has a fixed signature, declared at the time when the function is added +to the YarnProject. A function must have a fixed number of arguments of specific types, and a +fixed return type.

    +

    All user-defined functions must be added to the YarnProject before they can be used. A compile +error will be raised if the parser encounters an unknown function, or if the number or types of +arguments do not match.

    +

    User-defined functions can be used for a variety of purposes, such as:

    +
      +
    • implement functionality that is currently missing in Jenny;

    • +
    • interface with the game engine;

    • +
    • provide access to “variables” stored outside of Jenny;

    • +
    • etc.

    • +
    +
    title: Blacksmith
    +---
    +// This example showcases several hypothetical user-defined functions:
    +// - broken(slot): checks whether the item in the given slot is broken;
    +// - name(slot): gives the name for an item in a slot, e.g. "sword" or "bow";
    +// - money(): returns the current amount of money that the player has.
    +// At the same time, functions `round()` and `plural()` are built-in.
    +
    +<<if broken("main_hand")>>
    +  <<local $repair_cost = round(value("main_hand") / 5)>>
    +
    +  Blacksmith: Your {name("main_hand")} seems to be completely broken!
    +  Blacksmith: I can fix it for just {plural($repair_cost, "% coin")}
    +  -> Ok, do it  <<if money() >= $repair_cost>>
    +  -> I'll be fine...
    +<<endif>>
    +===
    +
    +
    +
    +

    See also

    +
      +
    • FunctionStorage – document +describing how to add user-defined functions to a YarnProject.

    • +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/expressions/functions/misc.html b/docs/1.18.0/other_modules/jenny/language/expressions/functions/misc.html new file mode 100644 index 000000000..cfe95d8a3 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/expressions/functions/misc.html @@ -0,0 +1,489 @@ + + + + + + + Miscellaneous functions — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Miscellaneous functions

    +
    +

    if(condition, then, else)

    +

    This function implements the ternary-if condition, it is equivalent to the ?: operator in Dart.

    +

    The function evaluates its condition (which must be a boolean), and then returns either the value +of then if the condition was true, or the value of else if the condition was false. The +types of arguments then and else must be the same.

    +

    Note: Only one of the then/else values will be evaluated, depending on the condition. This +may be important in cases when evaluating those expressions may produce a side-effect.

    +
    title: Birth
    +---
    +Doctor: Congratulations, you have a { if($gender == "m", "boy", "girl") }!
    +===
    +
    +
    +
    +
    +

    plural(x, words…)

    +

    Returns the correct plural form depending on the value of variable x.

    +

    This function is locale-dependent, and its implementation and signature changes depending on the +locale property in the YarnProject. In all cases, the first argument x must be numeric, +while all other arguments should be strings.

    +

    The purpose of this function is to form correct plural phrases, according to the rules of the +current language. For example, suppose you need to say {$n} items, where $n is a variable. If +you simply plug in the value of the variable like that, you’ll end up getting phrases like +“23 items”, or “1 items” – which is not what you want. So instead, the plural() function can be +used, which will select the correct plural form of the word “item”:

    +
    I have {plural($n, "% item")}.
    +
    +
    +

    In English locale (en), the function plural() takes either 1 or 2 words after the numeral +$x. The first word is the singular form, and the second is the plural. The second word can be +omitted if the singular form is simple enough that its plural form can be obtained by adding either +-s or -es. For example:

    +
    // Here "foot" is an irregular noun, so its plural form must be specified
    +// explicitly. At the same time, "inch" is regular, and the function
    +// plural() will know to add "es" to make its plural form.
    +The distance is {plural($ft, "% foot", "% feet")} and {plural($in, "% inch")}.
    +
    +
    +

    In locales other than English, the number of plural words can be anywhere from 1 to 3. Usually, +the first word is the singular form, while others are different plurals – their meaning would +depend on a particular language. For example, in Ukrainian locale (uk) the function plural() +requires 3 words: the singular form, the “few” plural form, and the “many” plural form:

    + +
    // Assuming locale == 'uk'
    +У мене є {plural($coins, "% монета", "% монети", "% монет")}.
    +
    +// Produces phrases like this:
    +//   У мене є 21 монета
    +//   У мене є 23 монети
    +//   У мене є 25 монет
    +
    +
    +

    Note that in all examples above the words contain the % sign. This is used as a placeholder where +the numeral itself should be placed. It is allowed for some (or all) of the words to not contain +the % sign.

    +
    +
    +

    visit_count(node)

    +

    Returns the number of times that the node was visited.

    +

    A node is considered “visited” if the dialogue enters and then exits that node. The node can be +exited either through the normal dialogue flow, or via the <<stop>> command. However, if a +runtime exception occurs while running the node, then the visit will not count.

    +

    The node argument must be a string, and it must contain a valid node name. If a node with the +given name does not exist in the project, an exception will be thrown.

    +
    title: LuckyWheel
    +---
    +<<if visit_count("LuckyWheel") < 5>>
    +  Clown: Would you like to spin a wheel and get fabulous prizes?
    +  -> I sure do!
    +     <<jump SpinLuckyWheel>>
    +  -> I don't talk to strangers...
    +     <<stop>>
    +<<else>>
    +  Clown: Sorry kid, we're all out of prizes for now.
    +<<endif>>
    +===
    +
    +
    +
    +

    See also

    + +
    +
    +
    +

    visited(node)

    +

    Returns true if the node with the given title was visited, and false otherwise.

    +

    For a node to be considered “visited”, the dialogue must enter and then exit the node at least +once. For example, within a node “X” the expression visited("X") will return false during the +first run of this node, and true upon all subsequent runs.

    +

    The node argument must be a string, and it must contain a valid node name. If a node with the +given name does not exist in the project, an exception will be thrown.

    +
    title: MerchantDialogue
    +---
    +<<if not visited("MerchantDialogue")>>
    +  // This part of the dialogue will run only during the first interaction
    +  // with the merchant.
    +  Merchant: Greetings! My name is Linn.
    +  Merchant: I offer exquisite wares for the most fastidious customers!
    +  Player: Hi. I'm Bob. I like stuff.
    +<<endif>>
    +...
    +===
    +
    +
    +
    +

    See also

    + +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/expressions/functions/numeric.html b/docs/1.18.0/other_modules/jenny/language/expressions/functions/numeric.html new file mode 100644 index 000000000..5b310918b --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/expressions/functions/numeric.html @@ -0,0 +1,571 @@ + + + + + + + Numeric functions — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Numeric functions

    +

    These functions are used to manipulate numeric values. Most of them take a single numeric argument +and produce a numeric result.

    +
    +

    ceil(x)

    +

    Returns the value x rounded up towards positive infinity. In other words, this returns the +smallest integer value greater than or equal to x.

    +
    title: ceil
    +---
    +{ ceil(0)     }  // 0
    +{ ceil(0.3)   }  // 1
    +{ ceil(5)     }  // 5
    +{ ceil(5.001) }  // 6
    +{ ceil(5.999) }  // 6
    +{ ceil(-2.07) }  // -2
    +===
    +
    +
    +
    +

    See also

    + +
    +
    +
    +

    dec(x)

    +

    Returns the value x reduced towards the previous integer. Thus, if x is already an integer +this returns x - 1, but if x is not an integer then this returns floor(x).

    +
    title: dec
    +---
    +{ dec(0)     }  // -1
    +{ dec(0.3)   }  // 0
    +{ dec(5.0)   }  // 4
    +{ dec(5.001) }  // 5
    +{ dec(5.999) }  // 5
    +{ dec(-2.07) }  // -3
    +===
    +
    +
    +
    +

    See also

    + +
    +
    +
    +

    decimal(x)

    +

    Returns a fractional part of x.

    +

    If x is positive, then the returned value will be between 0 (inclusive) and 1 (exclusive). +If x is negative, then the returned value will be between 0 and -1. In all cases it should +hold that x == int(x) + decimal(x).

    +
    title: decimal
    +---
    +{ decimal(0)     }  // 0
    +{ decimal(0.3)   }  // 0.3
    +{ decimal(5.0)   }  // 0
    +{ decimal(5.001) }  // 0.001
    +{ decimal(5.999) }  // 0.999
    +{ decimal(-2.07) }  // -0.07
    +===
    +
    +
    +
    +

    See also

    + +
    +
    +
    +

    floor(x)

    +

    Returns the value x rounded down towards negative infinity. In other words, this returns the +largest integer value less than or equal to x.

    +
    title: floor
    +---
    +{ floor(0)     }  // 0
    +{ floor(0.3)   }  // 0
    +{ floor(5)     }  // 5
    +{ floor(5.001) }  // 5
    +{ floor(5.999) }  // 5
    +{ floor(-2.07) }  // -3
    +===
    +
    +
    +
    +

    See also

    + +
    +
    +
    +

    inc(x)

    +

    Returns the value x increased towards the next integer. Thus, if x is already an integer +this returns x + 1, but if x is not an integer then this returns ceil(x).

    +
    title: inc
    +---
    +{ inc(0)     }  // 1
    +{ inc(0.3)   }  // 1
    +{ inc(5.0)   }  // 6
    +{ inc(5.001) }  // 6
    +{ inc(5.999) }  // 6
    +{ inc(-2.07) }  // -2
    +===
    +
    +
    +
    +

    See also

    + +
    +
    +
    +

    int(x)

    +

    Truncates the fractional part of x, rounding it towards zero, and returns just the integer part +of the argument x.

    +
    title: int
    +---
    +{ int(0)     }  // 0
    +{ int(0.3)   }  // 0
    +{ int(5.0)   }  // 5
    +{ int(5.001) }  // 5
    +{ int(5.999) }  // 5
    +{ int(-2.07) }  // -2
    +===
    +
    +
    +
    +

    See also

    + +
    +
    +
    +

    round(x)

    +

    Rounds the value x towards a nearest integer.

    +

    The values that end with .5 are rounded up if x is positive, and down if x is negative.

    +
    title: round
    +---
    +{ round(0)     }  // 0
    +{ round(0.3)   }  // 0
    +{ round(5.0)   }  // 5
    +{ round(5.001) }  // 5
    +{ round(5.5)   }  // 6
    +{ round(5.999) }  // 6
    +{ round(-2.07) }  // -2
    +{ round(-2.5) }   // -3
    +===
    +
    +
    +
    +

    See also

    + +
    +
    +
    +

    round_places(x, n)

    +

    Rounds the value x to n decimal places.

    +

    The value x can be either positive, negative, or zero, but it must be an integer. Rounding to +0 decimal places is equivalent to the regular round(x) function. If n is positive, then the +function will attempt to keep that many digits after the decimal point in x. If n is negative, +then round_places() will round x to nearest tens, hundreds, thousands, etc:

    +
    title: round_places
    +---
    +{ round_places(0, 1)     }  // 0
    +{ round_places(0.3, 1)   }  // 0.3
    +{ round_places(5.001, 1) }  // 5.0
    +{ round_places(5.001, 2) }  // 5.0
    +{ round_places(5.001, 3) }  // 5.001
    +{ round_places(5.5, 1)   }  // 5.5
    +{ round_places(5.999, 1) }  // 6.0
    +{ round_places(-2.07, 1) }  // -2.1
    +{ round_places(13, -1)   }  // 10
    +{ round_places(252, -2)  }  // 200
    +===
    +
    +
    +
    +

    See also

    + +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/expressions/functions/random.html b/docs/1.18.0/other_modules/jenny/language/expressions/functions/random.html new file mode 100644 index 000000000..9448c1a72 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/expressions/functions/random.html @@ -0,0 +1,411 @@ + + + + + + + Random functions — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Random functions

    +

    These functions produce random results each time they run.

    +

    Internally, each function uses YarnSpinner.random random generator, which can be replaced with a +custom generator if you need reproducible draws for debug purposes, or to prevent the player from +getting different results upon reload.

    +
    +

    dice(n)

    +

    Returns a random integer between 1 and n, inclusive. For example, dice(6) will return a +random integer from 1 to 6, as if throwing a regular six-sided die.

    +

    The argument n must be numeric, and greater or equal than 1. If n is a non-integer, then it +will be truncated to an integer value at runtime. Thus, dice(3.5) is equivalent to dice(3).

    +
    <<set $roll = dice(6)>>
    +<<set $coin_flip = if(dice(2) == 1, "H", "T")>>
    +
    +
    +
    +
    +

    random()

    +

    Returns a random floating-point between 0 and 1.

    +

    This function can be used to implement events with a prescribed probability. For example:

    +
    <<if random() < 0.001>>
    +  // This happens only with 0.1% probability
    +  You found it! The Holy Grail!
    +<<endif>>
    +
    +
    +
    +
    +

    random_range(a, b)

    +

    Returns a random integer between a and b inclusive.

    +

    Both arguments a and b must be numeric, and they will be truncated to integers upon evaluation. +The value of a must be less than or equal to b, or otherwise a runtime exception will be thrown.

    +

    The purpose of this function is similar to dice(), but it can be used in situations where a +custom range is desired.

    +
    <<set $coin_flip = bool(random_range(0, 1))>>
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/expressions/functions/type.html b/docs/1.18.0/other_modules/jenny/language/expressions/functions/type.html new file mode 100644 index 000000000..1f06e7d94 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/expressions/functions/type.html @@ -0,0 +1,425 @@ + + + + + + + Type conversion functions — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Type conversion functions

    +

    These functions convert values of one type into another type, if possible. All of these functions +take a single argument of arbitrary type, and return the result of the type corresponding to the +name of the function.

    +
    +

    bool(x)

    +

    Converts its argument into a boolean value.

    +
      +
    • If x is already a boolean, then it returns the argument as-is.

    • +
    • If x is numeric, then the result is false when x is 0, and true for all other values +of x.

    • +
    • If x is string, then the function will check whether that string can be found within +YarnProject.trueValues or YarnProject.falseValues sets. If yes, then it will return the +true / false value respectively. Otherwise, an error will be thrown.

    • +
    +
    +
    +

    number(x)

    +

    Converts its argument x into a numeric value.

    +
      +
    • If x is boolean, then it returns 1 for true and 0 for false.

    • +
    • If x is numeric, then it is returned unmodified.

    • +
    • If x is string, then the function attempts to parse that string as a number. A runtime +exception will be raised if x does not have a valid format for a number. The following formats +are recognized:

      +
        +
      • integer: "-3", "214"

      • +
      • decimal: "0.745", "3.14159", ".1", "-3."

      • +
      • scientific: "2e5", "3.11e-05"

      • +
      • hexadecimal: "0xDEAD", "0x7F"

      • +
      +
    • +
    +
    +
    +

    string(x)

    +

    Converts its argument x into a string value.

    +
      +
    • If x is boolean, returns strings "true" or "false".

    • +
    • If x is numeric, converts it into a string representation using the standard Dart’s +.toString() method, which attempts to produce the shortest string that can represent +the number x. In particular,

      +
        +
      • if x is integer-valued, returns its decimal representation without a decimal point;

      • +
      • if x is a double in the range 1e-6 to 1e21, returns its decimal representation +with a decimal point;

      • +
      • for all other doubles, returns x written in the scientific (exponential) format.

      • +
      +
    • +
    • If x is a string, then it is returned as-is.

    • +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/expressions/operators.html b/docs/1.18.0/other_modules/jenny/language/expressions/operators.html new file mode 100644 index 000000000..c92a865c9 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/expressions/operators.html @@ -0,0 +1,592 @@ + + + + + + + Operators — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Operators

    +

    The operators are special symbols that perform common mathematical operations. For example, +operator + performs summation, and thus we can write $x + $y to denote the sum of variables +$x and $y. There are over 20 different operators in YarnSpinner, which can be loosely grouped +into the following categories:

    +
    +

    Operator types

    +
    +

    Arithmetic

    +

    The arithmetic operators, have the same meaning as in regular math. These apply to numeric +arguments (with the exception of + which can also be used with strings):

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    operator

    name

    notes

    +

    addition

    -

    subtraction

    Also, a unary minus

    *

    multiplication

    /

    division

    Division by 0 is not allowed, and will throw a runtime error if it occurs.

    %

    modulo

    This operator can apply to both integer and decimal numbers, and it returns +the remainder of integer division of two numbers. The right-hand side of +% cannot be zero or a negative number, otherwise a runtime error will be +thrown. The result of x % y is always a number in the range [0; y), +regardless of the sign of x.

    +

    concatenation

    When applied to strings, the + operator simply glues them together. For +example, "Hello" + "World" produces string "HelloWorld".

    +
    +
    +

    Logical

    +

    The logical operators apply to boolean values. These operators can be written either in +symbolic or word form – both forms are equivalent:

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

    operator

    name

    notes

    !, not

    logical NOT

    This is a unary operator that inverts its operand: !true is false, +and !false is true.

    &&, and

    logical AND

    Returns true if both of its arguments are true.

    ||, or

    logical OR

    Returns true if at least one of its arguments is true.

    ^, xor

    logical XOR

    Returns true if the arguments are different, and false if they are +the same.

    +
    +
    +

    Assignment

    +

    The assignment operators modify the value of a variable. The left-hand side of such an operator +is the variable that shall be modified, the right-hand side is the expression of the same type as +the variable on the left:

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    operator

    name

    notes

    =, to

    assign

    $var = X stores the value of X into the variable $var

    +=

    increase

    $var += X is equivalent to $var = $var + X

    -=

    decrease

    $var -= X is equivalent to $var = $var - X

    *=

    multiply

    $var *= X is equivalent to $var = $var * X

    /=

    divide

    $var /= X is equivalent to $var = $var / X

    %=

    reduce modulo

    $var %= X is equivalent to $var = $var % X

    +

    Unlike all other operators, the assignment operators do not produce a value. This means they +cannot be used inside a larger expression, for example the following is invalid: 3 + ($x += 7). +Instead, the assignment operators are only usable at the top level of commands such as +<<set>>, <<declare>>, and <<local>>.

    +
    +
    +

    Relational

    +

    The relational operators compare various values. The first two operators in this list can be +applied to operands of any types, as long as the types are the same. The remaining four operators +can only be used with numbers. Regardless of the types of operands, the result of every +relational operator is a boolean value, which can be either assigned to a variable, or used in a +larger expression:

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    operator

    name

    notes

    ==

    equality

    !=

    inequality

    <

    less than

    <=

    less than or equal

    >

    greater than

    >=

    greater than or equal

    +

    Note that operator chaining is not supported. Thus, for example, $x == $y == $z will first +compare variables $x and $y, then the result of that comparison, which is either true or +false, will be compared with variable $z. Given that such expressions would be highly +confusing to a reader, we recommend against using them. If you need to compare that all three +values $x, $y and $z are the same, then you should use the && operator instead: +$x == $y && $x == $z.

    +
    +
    +
    +

    Precedence

    +

    Just as in mathematics, the operators have precedence ordering among them, meaning that some +operators will always evaluate before the others. For example, if you write 3 + 4 * 5, then +the result will be 23 instead of 35 because multiplication has higher precedence than addition +and thus evaluates first.

    +

    The precedence order is as follows, from highest to lowest:

    +
      +
    • *, /, %;

    • +
    • -, +;

    • +
    • ==, !=, <, <=, >=, >;

    • +
    • !;

    • +
    • &&, ^;

    • +
    • ||;

    • +
    • =, +=, -=, *=, /=, %=.

    • +
    +

    You can use parentheses () in order to alter the order of evaluation. For example, (3 + 4) * 5 +is 35 instead of 23.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/expressions/variables.html b/docs/1.18.0/other_modules/jenny/language/expressions/variables.html new file mode 100644 index 000000000..f472aff03 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/expressions/variables.html @@ -0,0 +1,446 @@ + + + + + + + Variables — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Variables

    +

    A variable is a place to store some piece of information – it is the same notion as in any +other programming language. Each variable has a name, value, type, and a scope.

    +
    +

    Name

    +

    The name of a variable is how you refer to it in a .yarn script. The names of all variables +start with a $ sign, followed by a letter or an underscore, and then by any number of letters, +digits, or underscores. Thus, the following are all valid variables names:

    +
    $i
    +$WARNING
    +$_secret_
    +$door10
    +$climbed_over_wall_and_avoided_all_guard_patrols
    +$DoorPassword
    +
    +
    +

    while the following are NOT valid names:

    +
    $2000_years
    +$[main]
    +@today
    +victory
    +
    +
    +
    +
    +

    Type

    +

    Each variable has a certain type associated with it. The type of a variable is determined when +the variable is first declared, and it never changes afterwards.

    +

    There are three types of variables in YarnSpinner: string, number, and bool.

    +
      +
    • bool variables can store either true or false and nothing else;

    • +
    • number variables may contain either integer or decimal numbers, such as 0, 42, 2.5;

    • +
    • string variables contain arbitrary text, for example "the most random number is 4".

    • +
    +
    // Creates a variable $money of type number, and gives it initial value of 100
    +<<declare $money = 100>>
    +
    +// Creates variable $name of type string, the initial value will be ""
    +<<declare $name as String>>
    +
    +
    +
    +
    +

    Value

    +

    Each variable stores a single value. This value can be replaced with another value at any time, +but the type of the new value must be the same.

    +

    Each variable will have an initial value assigned to it when the variable is first created, and +then new values can be assigned with the <<set>> command.

    +
    <<set $money += 10>>  // increases the value of $money by 10
    +
    +
    +
    +
    +

    Scope

    +

    The scope of a variable is where exactly it can be accessed. In YarnSpinner, the variables can +be either global or local.

    +
      +
    • The global variables are introduced via the <<declare>> command, and once +created can be accessed anywhere. The names of all global variables are unique.

    • +
    • The local variables are created with the <<local>> command, and can only be used +within the node where they were created. It is possible to have a local variable with the same +name in different nodes, and they will be considered different variables.

    • +
    +
    <<declare $global_variable = 0>>
    +
    +title: MyNode
    +---
    +<<local $local_variable = 1>>
    +===
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/language.html b/docs/1.18.0/other_modules/jenny/language/language.html new file mode 100644 index 000000000..090dccd5d --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/language.html @@ -0,0 +1,433 @@ + + + + + + + YarnSpinner language — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    YarnSpinner language

    +

    YarnSpinner is the language in which .yarn files are written. You can check out the +official documentation for the YarnSpinner language, however, here we will be describing the +Jenny implementation, which may not contain all the original features, but may also contain +some that were not implemented in the YarnSpinner yet.

    +
    +

    Yarn files

    +

    Any Yarn project will contain one or more .yarn files. These are plain text files in UTF-8 +encoding. As such, they can be edited in any text editor or IDE.

    +

    Having multiple .yarn files helps you better organize your project, but Jenny doesn’t impose any +requirements on the number of files or their relationship.

    +

    Each .yarn file may contain comments, tags, commands, and nodes. +For example:

    +
    // This is a comment
    +// The line below, however, is a tag:
    +# Chapter 1d
    +
    +<<declare $visited_graveyard = false>>
    +<<declare $money = 25>>  // is this too much?
    +
    +title: Start
    +---
    +// Node content
    +===
    +
    +
    +
    +

    Comments

    +

    A comment starts with // and continues until the end of the line. All the text inside a comment +will be completely ignored by Jenny as if it wasn’t there.

    +

    There are no multi-line comments in YarnSpinner.

    +
    +
    +

    Tags

    +

    File-level tags start with a # and continue until the end of the line. A tag can be used to +include some per-file custom project metadata. These tags are not interpreted by Jenny in any way.

    +
    +
    +

    Commands

    +

    The commands are explained in more details later, but at this point it is +worth pointing out that only a limited number of commands are allowed at the root level of a file +(that is, outside of nodes). Currently, these commands are:

    +
      +
    • <<declare>>

    • +
    • <<character>>

    • +
    +

    The commands outside of nodes are compile-time instructions, that is they are executed during the +compilation of a YarnProject.

    +
    +
    +

    Nodes

    +

    Nodes represent the main bulk of content in a yarn file, and are explained in a dedicated +section. There could be multiple nodes in a single file, placed one after another. +No special separator is needed between nodes: as soon as one node ends, the next one can begin.

    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/lines.html b/docs/1.18.0/other_modules/jenny/language/lines.html new file mode 100644 index 000000000..5accecb10 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/lines.html @@ -0,0 +1,538 @@ + + + + + + + Lines — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Lines

    +

    A line is the most common element of the Yarn dialogue. It’s just a single phrase that a +character in the game says. In a .yarn file, a line is represented by a single line of text +in a node body. A line may contain the following elements:

    +
      +
    • A character ID;

    • +
    • Normal text;

    • +
    • Escaped text;

    • +
    • Interpolated expressions;

    • +
    • Markup;

    • +
    • Hashtags;

    • +
    • A comment at the end of the line;

    • +
    • (a line, however, cannot contain commands).

    • +
    +

    A line is represented with the DialogueLine class in Jenny runtime.

    +
    +

    Character ID

    +

    If a line starts with a single word followed by a :, then that word is presumed to be the name +of the character who is speaking that line. In the following example there are two characters +talking to each other: Prosser and Ford, and the last line has no character ID.

    +
    title: Bulldozer_Conversation
    +---
    +Prosser: You want me to come and lie there...
    +Ford: Yes
    +Prosser: In front of the bulldozer?
    +Ford: Yes
    +Prosser: In the mud.
    +Ford: In, as you say, the mud.
    +(low rumbling noise...)
    +===
    +
    +
    +

    It is worth emphasizing that a character ID must be a valid ID – that is, it cannot contain +spaces or other special characters. In the example below “Harry Potter” is not a valid character ID, +while all other alternatives are ok.

    +
    title: Hello
    +---
    +Harry Potter: Hello, Hermione!
    +Harry_Potter: Hello, Hermione!
    +HarryPotter: Hello, Hermione!
    +Harry: Hello, Hermione!
    +===
    +
    +
    +

    If you want to have a line that starts with a WORD + ':', but you don’t want that word to be +interpreted as a character name, then the colon can be escaped:

    +
    title: Warning
    +---
    +Attention\: The cake is NOT a lie
    +===
    +
    +
    +
    +

    Note

    +

    All characters must be declared using the [<<character>>] command +before they can be used in a script.

    +
    +
    +
    +

    Interpolated expressions

    +

    You can insert dynamic text into a line with the help of interpolated expressions. These +expressions are surrounded with curly braces {}, and everything inside the braces will be +evaluated, and then the result of the evaluation will be inserted into the text.

    +
    title: Greeting
    +---
    +Trader: Hello, {$player_name}! Would you like to see my wares?
    +Player: I have only {plural($money, "% coin")}, do you have anything I can afford?
    +===
    +
    +
    +

    The expressions will be evaluated at runtime when the line is delivered, which means it can produce +different text during different runs of the line.

    +
    title: Exam_Greeting
    +---
    +<<if $n_attempts == 0>>
    +  Professor: Welcome to the exam!
    +  <<jump Exam>>
    +<<elseif $n_attempts < 5>>
    +  Professor: You have tried {plural($n_attempts, "% time")} already, but I \
    +             can give you another try.
    +  <<jump Exam>>
    +<<else>>
    +  Professor: You've failed 5 times in a row! How is this even possible?
    +<<endif>> 
    +===
    +
    +
    +

    After evaluation, the text of the expression will be inserted into the line as-is, without any +further processing. Which means that the text of the expression may contain special characters +(such as [, ], {, }, \, etc), and they don’t need to be escaped. It also means that the +expression cannot contain markup, or produce a hashtag, etc.

    +

    Read more about expressions in the Expressions section.

    +
    +
    +

    Markup

    +

    The markup is a mechanism for text annotation. It is somewhat similar to HTML tags, except that +it uses square brackets [] instead of angular ones:

    +
    title: Markup
    +---
    +Wizard: No, no, no! [em]This is insanity![/em]
    +===
    +
    +
    +

    The markup tags do not alter the text of the line, they merely insert annotations in it. Thus, the +line above will be delivered in game as “No, no, no! This is insanity!”, however there will be +additional information attached to the line that shows that the last 17 characters were marked with +the em tag.

    +

    Markup tags can be nested, or be zero-width, they can also include parameters whose values can be +dynamic. Read more about this in the Markup document.

    +
    +
    +

    Hashtags

    +

    Hashtags may appear at the end of the line, and take the following form: #text. That is, a hashtag +is a # symbol followed by any text that doesn’t contain whitespace.

    +

    Hashtags are used to add line-level metadata. There can be no line content after a hashtag (though +comments are allowed). A line can have multiple hashtags associated with it.

    + +
    title: Hashtags
    +---
    +Harry: There is no justice in the laws of Nature, Headmaster, no term for \
    +       fairness in the equations of motion. #sad // HPMOR.39
    +Harry: The universe is neither evil, nor good, it simply does not care.
    +Harry: The stars don't care, or the Sun, or the sky.
    +Harry: But they don't have to! We care! #elated #volume:+1
    +Harry: There is light in the world, and it is us! #volume:+2
    +===
    +
    +
    +

    In most cases the Jenny engine does not interpret the tags, but merely stores them as part of the +line information. It is up to the programmer to examine these tags at runtime.

    +
    +
    +

    Escaped text

    +

    Whenever you have a line that needs to include a character that would normally be interpreted as +one of the special syntaxes mentioned above, then such a character can be escaped with a +backslash \.

    +

    The following escape sequences are recognized: \\, \/, \#, \<, \>, \[, \], \{, \}, +\:, \-, \n. In addition, there is also \⏎ (i.e. backslash followed immediately by a +newline).

    +
    title: Escapes
    +---
    +\// This is not a comment  // but this is
    +This is not a \#hashtag
    +This is not a \<<command>>
    +\{This line\} does not contain an expression
    +Not a \[markup\]
    +===
    +
    +
    +

    The \⏎ escape can be used to split a single long line into multiple physical lines, that would +still be treated by Jenny as if it was a single line. This escape sequence consumes both the +newline symbol and all the whitespace at the start of the next line:

    +
    title: One_long_line
    +---
    +This line is so long that it becomes uncomfortable to read in a text editor. \
    +    Therefore, we use the backslash-newline escape sequence to split it into \
    +    several physical lines. The indentation at the start of the continuation \
    +    lines is for convenience only, and will be removed from the resulting \
    +    text.
    +===
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/markup.html b/docs/1.18.0/other_modules/jenny/language/markup.html new file mode 100644 index 000000000..3075dcb2e --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/markup.html @@ -0,0 +1,475 @@ + + + + + + + Markup — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + + + +
    +

    Markup

    +

    Markup is a mechanism for annotating fragments of a dialogue line. They are somewhat similar to +HTML tags, or you can imagine them as comments in a google document. Importantly, markup tags +only annotate the text, but do not alter its content or display in the game. It is up to the +developer to actually use the markup information in their game.

    +
    +

    Syntax

    +

    Markup tags are denoted with the name of the tag, placed in square brackets: [tag_name]. The +corresponding closing tag would be [/tag_name]. Every markup tag must have a corresponding +closing tag:

    +
    Hello, [wavy]world[/wavy]!
    +
    +
    +

    Markup tags may nest within each other, though they must nest properly, in the sense that one +markup range must be fully inside or fully outside another:

    +
    Lorem [S]ipsum dolor [A]sit[/A] amet[/S], consectetur [B]adipiscing[/B] elit
    +
    +
    +

    The special close-all markup tag [/] closes all currently opened markup ranges. It is also +handy in situations where the name of the markup tag is long and you don’t want to repeat it:

    +
    Lorem ipsum dolor sit amet, [bold]consectetur adipiscing elit[/]
    +
    +
    +

    The self-closing markup tags have the form [tag_name/]. These tags mark a single location +within the text. In addition, if such tag is surrounded by spaces on both sides, then a single +space after the tag will be removed from the resulting text. If this is undesired, then simply +add an extra space after the markup tag:

    +
    Lorem ipsum dolor sit amet, [wave/] consectetur adipiscing elit.
    +
    +
    +

    Markup tags also accept parameters, which are similar to HTML tag attributes. The names of these +parameters can be arbitrary IDs, and the values are expressions that will be evaluated each time +the line is executed. Thus, the values of attributes can be dynamic:

    +
    Lorem ipsum [color name=$color]dolor sit amet[/color]
    +
    +
    +

    Markup tags can surround dynamic text (interpolated expressions), which will cause the length of +the marked up span to be different every time the line is run. At the same time, markup cannot be +generated dynamically – in the sense that the interpolated expressions will always be inserted +as-is, even if they contain some text in square brackets.

    +
    Hello, [b]{$player}[/b]!
    +
    +
    +

    Lastly, it should be noted that if you want to have an actual text in square brackets within a +line, then in order to prevent it from being parsed as markup you can escape the square brackets +with a backslash \:

    +
    Hello, \[world\]!
    +
    +
    +
    +

    See also

    +
      +
    • MarkupAttribute: the runtime representation +of a markup attribute within a line.

    • +
    +
    +
    +
    +

    Examples

    +
    +

    Mark a piece of text with a different style

    +

    In this example the word “Voldemort” is rendered with a special “cursed” markup, indicating that +the word itself is cursed (it is up to you how to actually render this in a game). Similarly, the +word “stupid” in the second line has an emphasis, which may be rendered as italic text.

    +
    title: Scene117_Harry_MrMalfoy
    +---
    +Harry: I'm not afraid of [cursed]Voldemort[/cursed]!
    +MrMalfoy: You must be really brave... or really [i]stupid[/i]?
    +===
    +
    +
    +
    +
    +

    Provide additional information about a text fragment

    +

    In this example the word “Llewellyn” has a tooltip information associated with it. A game might +render this with a special style suggesting that the user may hover over that word to see a +tooltip with a minimap for where to find this NPC.

    +
    title: MonkDialogue
    +---
    +Monk: Visit [tooltip place="TS" x=23 y=-74]Llewellyn[/] in Thunderstorm, \
    +      he will be able to help you.
    +===
    +
    +
    +
    +
    +

    Indicate where special non-text tokens may be inserted

    +

    The [item/] markup tag will be replaced by the item’s name, which will also be interactive: +tapping this name would bring up the item’s description card.

    +
    title: BlacksmithQuest
    +---
    +<<local $reward = if($chapter==1, "A0325", "A1018")>>
    +Smith: Find me my lost ring, and I'll give you this [item id=$reward/].
    +===
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/nodes.html b/docs/1.18.0/other_modules/jenny/language/nodes.html new file mode 100644 index 000000000..7777a0fe9 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/nodes.html @@ -0,0 +1,439 @@ + + + + + + + Nodes — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Nodes

    +

    A node is a small section of text, that represents a single conversation or interaction with +an NPC. Each node has a title, which can be used to run that node in a DialogueRunner, or to +jump to that node from another node.

    +

    You can think of a node as if it was a function in a regular programming language. Running a node +is equivalent to calling a function, and it is not possible to start execution in the middle of a +node/function. When a function becomes too large, we will usually want to split it into multiple +smaller ones – the same is true for nodes, when a node becomes too long it is a good idea to split +it into several smaller nodes.

    +

    Each node consists of a header and a body. The header is separated from the body with 3 +(or more) dashes, and the body is terminated with 3 “=” signs:

    +
    // NODE HEADER
    +---
    +// NODE BODY
    +===
    +
    +
    +

    In addition, you can use 3 (or more) dashes to separate the header from the previous content, which +means the following is also a valid node:

    +
    ---------------
    +// NODE HEADER
    +---------------
    +// NODE BODY
    +===
    +
    +
    +

    A node is represented with a Node class in Jenny runtime.

    + +
    +

    Body

    +

    The body of a node is where the dialogue itself is located. The body is just a sequence of +statements, where each statement is either a Line, an Option, or a Command. For example:

    +
    title: Gloomy_Morning
    +camera_zoom: 2
    +---
    +You  : Good morning!
    +Guard: You call this good? 'Tis as crappy as could be
    +You  : Why, what happened?
    +Guard: Don't you see the fog? Chills me through to the bones
    +You  : Sorry to hear that... 
    +You  : So, can I pass?
    +Guard: Can I get some exercise cutting you into pieces? Maybe that'll warm me up!
    +You  : Ok, I think I'll be going. Hope you feel better soon!
    +===
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/language/options.html b/docs/1.18.0/other_modules/jenny/language/options.html new file mode 100644 index 000000000..7f3db24b4 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/language/options.html @@ -0,0 +1,423 @@ + + + + + + + Options — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Options

    +

    Options are special lines that display a menu of choices for the player, and the player must +select one of them in order to continue. The options are indicated with an arrow -> at the start +of the line:

    +
    title: Adventure
    +---
    +You arrive at the edge of the forest. The road dives in, but there is another \
    +one going around the edge.
    +-> Go straight ahead, on the beaten path (x)
    +-> Take the road along the forest's edge
    +-> Turn back
    +===
    +
    +
    +

    An option is typically followed by an indented list of statements (which may, again, be lines, +options, or commands). These statements indicate how the dialogue should proceed if the player +chooses that particular option. After the control flow finishes running through the block +corresponding to the selected option, the dialogue resumes after the option set.

    +

    Other than the arrow indicator, an option follows the same syntax as the line. Thus, it can have +a character name, the main text, interpolated expressions, markup, and hashtags. One additional +feature that an option can have is the conditional. A conditional is a short-form <<if>> +command after the text of an option (but before the hashtags):

    +
    title: Bridge
    +---
    +Guard: 50 coins and you can cross the bridge.
    +-> Alright, take the money  <<if $gold >= 50>>
    +   <<take gold 50>>
    +   <<grant bridge_pass>>
    +-> I have so much money, here, take a 100  <<if $gold >= 10000>>
    +   <<take gold 100>>
    +   <<grant bridge_pass>>
    +   Guard: Wow, so generous!
    +   Guard: But I wouldn't recommend going around telling everyone that you \
    +          have "so much money"
    +-> That's too expensive!
    +   Guard: Is it? My condolences
    +-> How about I [s]kick your butt[/s] instead?
    +   <<if $power < 1000>>
    +      <<fight>>
    +   <<else>>
    +      You make a very reasonable point, sir, my apologies.
    +      <<grant bridge_pass>>
    +   <<endif>>
    +===
    +
    +
    +

    When the conditional evaluates to true, the option is delivered to the game normally. If the +conditional turns out to be false, the option is still delivered, but is marked as unavailable. +It is up to the game whether to display such option as greyed out, or crossed, or not show it at +all; however, such option cannot be selected.

    +

    As you have noticed, options always come in groups: after all, the player must select among several +possible choices. Thus, any sequence of options that are adjacent to each other in the dialogue, +will always be delivered as a single bundle to the frontend. This is called the choice set.

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/character.html b/docs/1.18.0/other_modules/jenny/runtime/character.html new file mode 100644 index 000000000..5981a687f --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/character.html @@ -0,0 +1,435 @@ + + + + + + + Character — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Character

    +
    +
    +
    +
    +class Character
    +
    +
    +

    A Character represents a person who is speaking a particular line in a +dialogue. This object is available as the .character property of a +DialogueLine delivered to your DialogueView.

    +

    All characters must be declared with the help of the <<character>> +command, unless YarnProject’s setting strictCharacterNames is set to +false.

    +
    +
    +

    Constructors

    +
    +
    +
    +Character(this.name, {List<String>? aliases})
    +
    +
    +
    +
    +

    Properties

    +
    +
    +name : String
    +
    +

    The canonical name of the character, which was the first argument in the +<<character>> command.

    +
    +
    +
    +
    +aliases : List<String>
    +
    +

    Additional names (IDs) that may be used for this character in yarn +scripts.

    +
    +
    +
    +
    +dataMap<String, dynamic>
    +
    +

    Additional information associated with this character. This may include +their short bio, portrait, affiliation, color, etc. This information +must be stored for each character manually, and then it will be +accessible from DialogueViews.

    +

    You can store any key-value pairs here that you want, or nothing at all.

    +
    +
    +
    +
    +
    +
    +

    See Also

    +
      +
    • CharacterStorage: the container where all Character objects within a YarnProject are cached.

    • +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/character_storage.html b/docs/1.18.0/other_modules/jenny/runtime/character_storage.html new file mode 100644 index 000000000..25e15d284 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/character_storage.html @@ -0,0 +1,466 @@ + + + + + + + CharacterStorage — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    CharacterStorage

    +
    +
    +
    +
    +class CharacterStorage
    +
    +
    +

    The CharacterStorage is a cache for all Characters defined in your +yarn scripts. This container is populated from the <<character>> +commands as the YarnProject parses the input scripts.

    +
    +
    +

    Properties

    +
    +
    +isEmptybool
    +
    +
    +
    +isNotEmptybool
    +
    +
    +
    +

    Methods

    +
    +
    +
    +contains(String name)bool
    +
    +
    +

    Returns true if a character with the given name or alias was defined.

    +
    +
    +
    +
    +
    +operator[](String name)Character?
    +
    +
    +

    Retrieves the character with the given name/alias, or returns null if +such character was not present.

    +
    +
    +
    +
    +
    +clear()
    +
    +
    +

    Clear all characters from storage.

    +

    This could be used between scenes in preparation for loading a new +set of characters. It would not generally be used while a dialog is +in progress.

    +
    +
    +
    +
    +
    +remove(String name)
    +
    +
    +

    Remove a character by name. Its aliases will also be removed.

    +

    This could be used if you are certain a character is no longer required. +It would not generally be used while a dialog is in progress.

    +
    +
    +
    +
    +
    +
    +

    Accessing character storage

    +

    Character storage is accessed via the YarnProject.

    +
    final characters = yarnProject.characters;
    +
    +
    +
    +
    +

    Removing characters

    +

    There may be situations where characters need to be removed from storage. For example, in a game +with many scenes, characters could be removed after a scene and new characters loaded for the next +scene.

    +

    Remove all characters with clear.

    +
    yarnProject.characters.clear();
    +
    +
    +

    Use remove to remove a single character. Pass in the name of the character or any of its +aliases. The character and all its aliases will be removed.

    +
    yarnProject.characters.remove('Jenny');
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/command_storage.html b/docs/1.18.0/other_modules/jenny/runtime/command_storage.html new file mode 100644 index 000000000..c38cca879 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/command_storage.html @@ -0,0 +1,543 @@ + + + + + + + CommandStorage — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    CommandStorage

    +

    The CommandStorage is a part of YarnProject responsible for storing all user-defined +commands. You can access it as the YarnProject.commands property.

    +

    The command storage can be used to register any number of custom commands, making them available to +use in yarn scripts. Such commands must be registered before parsing the yarn scripts, or the +compiler will throw an error that the command is not recognized.

    +

    In order to register a function as a yarn command, the function must satisfy several requirements:

    +
      +
    • The function’s return value must be void or Future<void>. If the function returns a future, +then that future will be awaited before proceeding to the next step of the dialogue. This makes it +possible to create commands that take a certain time to unfold in the game, for example +<<walk>>, <<moveCamera>>, or <<prompt>>.

    • +
    • The function’s arguments must be of types that are known to Yarn: String, num, int, +double, or bool. All arguments must be positional, with no defaults.

    • +
    • In order to register the function, use methods addCommand0()addCommand5(), according to +the number of function’s arguments.

    • +
    • If the function’s signature has 1 or more booleans at the end, then those arguments will be +considered optional and will default to false.

    • +
    +
    +

    Methods

    +
    +
    hasCommand(String name) → bool

    Returns the status of whether the command name has been added to the storage.

    +
    +
    addCommand0(String name, FutureOr<void> Function() fn)

    Registers a no-argument function fn as the command name.

    +
    +
    addCommand1(String name, FutureOr<void> Function(T1) fn)

    Registers a single-argument function fn as the command name.

    +
    +
    addCommand2(String name, FutureOr<void> Function(T1, T2) fn)

    Registers a two-argument function fn as the command name.

    +
    +
    addCommand3(String name, FutureOr<void> Function(T1, T2, T3) fn)

    Registers a three-argument function fn as the command name.

    +
    +
    addCommand4(String name, FutureOr<void> Function(T1, T2, T3, T4) fn)

    Registers a four-argument function fn as the command name.

    +
    +
    addCommand5(String name, FutureOr<void> Function(T1, T2, T3, T4, T5) fn)

    Registers a five-argument function fn as the command name.

    +
    +
    addOrphanedCommand(name)

    Registers a command name which is not backed by any Dart function. Such command will still be +delivered to DialogueViews via the onCommand() callback, but its arguments will not be parsed.

    +
    +
    clear

    Removes all user-defined commands

    +
    +
    remove(String name)

    Removes the user-defined command with the specified name.

    +
    +
    +
    +
    +

    Properties

    +
    +
    lengthint

    The number of user-defined commands registered so far.

    +
    +
    isEmptybool

    Returns true if no user-defined commands were registered.

    +
    +
    isNotEmptybool

    Returns true if any commands have been registered

    +
    +
    +
    +
    +

    Examples

    +
    +

    <<StartQuest>>

    +

    Suppose we want to have a yarn command <<StartQuest>>, which would initiate a quest. The command +would take the quest name and quest ID as arguments. Technically, just the ID should be enough – +but then it would be really difficult to read the yarn script and understand what quest is being +initiated. So, instead we’ll pass both the ID and the name, and then check at runtime that the ID +of the quest matches its name.

    +

    A typical invocation of this command might look like this (note that the name of the quest is in +quotes, otherwise it would be parsed as four different arguments "Get", "rid", "of", and +"bandits"):

    +
    <<StartQuest Q037 "Get rid of bandits">>
    +
    +
    +

    In order to implement this command, we create a Dart function startQuest() with two string +arguments. The function will do a brief animated “Started quest X” message, but we don’t want the +game dialogue to wait for that message, so we’ll make the function return void, not a future. +Finally, we register the command with commands.addCommand2().

    +
    class MyGame {
    +  late YarnProject yarnProject;
    +
    +  void startQuest(String questId, String questName) {
    +    assert(quests.containsKey(questId));
    +    assert(quests[questId]!.name == questName);
    +    // ...
    +  }
    +  @override
    +  void onLoad() {
    +    yarnProject = YarnProject()
    +      ..commands.addCommand2('StartQuest', startQuest);
    +  }
    +}
    +
    +
    +

    Note that the name of the Dart function is different from the name of the command – you can choose +whatever names suit your programming style best.

    +
    +
    +

    <<prompt>>

    +

    The <<prompt>> function will open a modal dialogue and ask the user to enter their response. This +command will be waiting for the user’s input, so it must return a future. Also, we want to return +the result of the prompt into the dialogue – but, unfortunately, the commands are not expressions, +and are not supposed to return values. So instead we will write the result into a global variable +$prompt, and then the dialogue can access that variable in order to read the result of the prompt.

    +
    class MyGame {
    +  final YarnProject yarnProject = YarnProject();
    +
    +  Future<void> prompt(String message) async {
    +    // This will wait until the modal dialog is popped from the router stack
    +    final name = await router.pushAndWait(KeyboardDialog(message));
    +    yarnProject.variables.setVariable(r'$prompt', name);
    +  }
    +
    +  @override
    +  void onLoad() {
    +    yarnProject
    +      ..variables.setVariable(r'$prompt', '')
    +      ..commands.addCommand1('prompt', prompt);
    +  }
    +}
    +
    +
    +

    Then in a yarn script this command can be used like this:

    +
    <<declare $name as String>>
    +
    +title: Greeting
    +---
    +Guide: Hello, my name is Jenny, and you?
    +<<prompt "Enter your name:">>
    +<<set $player = $prompt>>  // Store the name for later
    +Guide: Nice to meet you, {$player}
    +===
    +
    +
    +
    +
    +

    <<give>>

    +

    Suppose that we want to make a command that will give the player a certain item, or a number of +items. This command would take 3 arguments: the person who gives the items, the name of the item, +and the quantity. For example:

    +
    <<give {$quest_reward} TraderJoe>>
    +
    +
    +

    Note that the quest reward variable will contain both the reward item and its amount, for example +it could be "100 gold", "5 potion_of_healing", or '1 "Sword of Darkness"'. When such +variable is substituted into the command at runtime, the command becomes equivalent to

    +
    <<give 100 gold TraderJoe>>
    +<<give 5 potion_of_healing TraderJoe>>
    +<<give 1 "Sword of Darkness" TraderJoe>>
    +
    +
    +

    which will then be parsed as a regular 3-argument command corresponding to the following Dart +function:

    +
    /// Takes [amount] of [item]s from [source] and gives them to the player.
    +void give(int amount, String item, String source) {
    +  // ...
    +}
    +
    +
    +
    +
    +
    +

    See also

    + +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/dialogue_choice.html b/docs/1.18.0/other_modules/jenny/runtime/dialogue_choice.html new file mode 100644 index 000000000..d16207d5d --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/dialogue_choice.html @@ -0,0 +1,383 @@ + + + + + + + DialogueChoice — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    DialogueChoice

    +

    The DialogueChoice class represents multiple Option lines in the .yarn script, which will be +presented to the user so that they can make a choice for how the dialogue should proceed. The +DialogueChoice objects will be delivered to your DialogueView with the method +onChoiceStart().

    +
    +

    Properties

    +
    +
    options List<DialogueOption>

    The list of DialogueOptions comprising this choice set.

    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/dialogue_line.html b/docs/1.18.0/other_modules/jenny/runtime/dialogue_line.html new file mode 100644 index 000000000..550c90d80 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/dialogue_line.html @@ -0,0 +1,498 @@ + + + + + + + DialogueLine — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    DialogueLine

    +
    +
    +
    +
    +class DialogueLine
    +
    +extends DialogueEntry
    +
    +
    +

    The DialogueLine class represents a single line of text within the +dialogue Line.

    +

    The DialogueLine objects will be delivered to your DialogueView with +methods onLineStart(), onLineSignal(), onLineStop(), and +onLineFinish().

    +

    A dialogue line may contain a character (the name of the entity who is +speaking), and tags – a list of hashtag tokens that specify some meta +information about the line.

    +

    Example of a dialogue line in yarn script:

    +
    Hermione: Holy cricket! You're Harry Potter.  #surprised
    +
    +
    +

    Here the character is “Hermione”, the text of the line is “Holy +cricket! You’re Harry Potter.”, and the tags list will contain a single +entry “#surprised”.

    +

    A dialogue line may also contain inline expressions, which will be +re-evaluated every time the line is executed by the dialogue runner:

    +
    Jenny: My favorite color is {$favoriteColor}, what about you?
    +
    +
    +

    After evaluation, the resulting string may be “My favorite color is +vantablack, what about you?”.

    +

    Lastly, a dialogue line may have markup attributes. These are similar to +HTML tags, only they use square brackets:

    +
    Jenny: My [i]favorite[/i] color is [bb color=$color]{$color}[/bb].
    +
    +
    +

    These markup attributes will not be visible in the output (i.e. the +resulting text is still “My favorite color is vantablack”), but they can be +queried in the attributes list, which will specify that there is an +attribute [i] around the word “favorite”, and another attribute [bb] +with parameter color around the word “vantablack”.

    +

    Inline expressions cannot contain markup attributes.

    +
    +
    +

    Constructors

    +
    +
    +
    +DialogueLine({required LineContent content, Character? character, List<String>? tags})
    +
    +
    +
    +
    +

    Properties

    +
    +
    +contentLineContent?
    +
    +

    The content of this Line.

    +
    +
    +
    +
    +characterCharacter?
    +
    +

    The character who is speaking the line. This can be null if the line does +not contain a speaker.

    +
    +
    +
    +
    +textString
    +
    +

    The computed text of the line, after substituting all inline expressions, +stripping the markup, and processing the escape sequences.

    +

    This value can only be accessed after the line was evaluated. It may +change upon subsequent re-evaluations of the line (which occur each time +the line goes through a DialogueRunner).

    +
    +
    +
    +
    +tagsList<String>
    +
    +

    The list of hashtags associated with the line. If there are no hashtags, +the list will be empty.

    +

    Each value in the list will start with the # symbol.

    +
    +
    +
    +
    +attributesList<MarkupAttribute>
    +
    +

    The list of markup spans associated with the line.

    +
    +
    +
    +
    +isConstbool
    +
    +

    True if the line will never change upon subsequent reruns. That is, when +the line does not depend on any dynamic expressions.

    +
    +
    +
    +
    +

    Methods

    +
    +
    +
    +evaluate()
    +
    +
    +

    Computes the text of the line, substituting the current values of all +inline expressions.

    +

    Normally, you wouldn’t need to call this method manually – the +DialogueRunner will take care to do that for you. However, it may be +necessary to call this if you need to access DialogueLines outside of +a dialogue runner.

    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/dialogue_option.html b/docs/1.18.0/other_modules/jenny/runtime/dialogue_option.html new file mode 100644 index 000000000..46e2c8eee --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/dialogue_option.html @@ -0,0 +1,393 @@ + + + + + + + DialogueOption — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    DialogueOption

    +

    The DialogueOption class represents a single Option line in the .yarn script. Multiple +options will be grouped into DialogueChoice objects.

    +
    +

    Properties

    +
    +
    text String

    The computed text of the option, after evaluating the inline expressions, stripping the markup, +and processing the escape sequences.

    +
    +
    tags List<String>

    The list of hashtags for this option. If there are no hashtags, the list will be empty. Each entry +in the list will be a simple string starting with #.

    +
    +
    attributes List<MarkupAttribute>

    The list of markup spans associated with the option. Each [MarkupAttribute] corresponds to a +single span within the text, delineated with markup tags.

    +
    +
    isAvailable bool

    The result of evaluating the conditional of this option. If the option has no conditional, this +will return true.

    +
    +
    isDisabled bool

    Same as !isAvailable.

    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/dialogue_runner.html b/docs/1.18.0/other_modules/jenny/runtime/dialogue_runner.html new file mode 100644 index 000000000..fe72c12f6 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/dialogue_runner.html @@ -0,0 +1,507 @@ + + + + + + + DialogueRunner — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    DialogueRunner

    +
    +
    +
    +
    +class DialogueRunner
    +
    +
    +

    The DialogueRunner is the engine that executes Jenny’s dialogue at +runtime.

    +

    If you imagine YarnProject as a “program”, consisting of multiple Nodes +as “functions”, then DialogueRunner is a virtual machine, capable of +executing a single “function” in that “program”.

    +

    A single DialogueRunner may only execute one dialogue node at a time. It +is an error to try to run another node before the first one concludes. +However, it is possible to create multiple DialogueRunners for the same +YarnProject, and then they would be able to execute multiple dialogues +simultaneously (for example, in a crowded room there could be multiple +dialogues occurring at once within different groups of people).

    +

    The job of a DialogueRunner is to fetch the dialogue lines in the correct +order and at the appropriate pace, to execute the logic in dialogue +scripts, and to branch according to user input in DialogueChoices. The +output of a DialogueRunner, therefore, is a stream of dialogue statements +that need to be presented to the player. Such presentation, is handled by +DialogueViews.

    +
    +
    +

    Constructors

    +
    +
    +
    +DialogueRunner({required YarnProject yarnProject, required List<DialogueView> dialogueViews})
    +
    +
    +

    Creates a DialogueRunner for executing the yarnProject. The dialogue +will be delivered to all the provided dialogueViews. Each of these +dialogue views may only be assigned to a single DialogueRunner at a +time.

    +
    +
    +
    +
    +

    Properties

    +
    +
    +project : YarnProject
    +
    +

    The YarnProject that this dialogue runner is executing.

    +
    +
    +
    +
    +

    Methods

    +
    +
    +
    +startDialogue(String nodeName)Future<void>
    +
    +
    +

    Starts the dialogue with the node nodeName, and returns a future that +completes once the dialogue finishes running. While this future is +pending, the DialogueRunner cannot start any other dialogue.

    +
    +
    +
    +
    +
    +sendSignal(dynamic signal)
    +
    +
    +

    Delivers the given signal to all dialogue views, in the form of a +DialogueView method onLineSignal(line, signal). This can be used, for +example, as a means of communication between the dialogue views.

    +

    The signal object here is completely arbitrary, and it is up to the +implementations to decide which signals to send and to receive. +Implementations should ignore any signals they do not understand.

    +
    +
    +
    +
    +
    +stopLine()
    +
    +
    +

    Requests (via onLineStop()) that the presentation of the current line +be finished as quickly as possible. The dialogue will then proceed +normally to the next line.

    +
    +
    +
    +
    +
    +
    +

    Execution model

    +

    The DialogueRunner uses futures as a main mechanism for controlling the timing of the dialogue +progression. For each event, the dialogue runner will invoke the corresponding callback on all its +DialogueViews, and each of those callbacks may return a future. The dialogue runner then awaits +on all of these futures (in parallel), before proceeding to the next event.

    +

    For a simple .yarn script like this

    +
    title: main
    +---
    +Hello
    +-> Hi
    +-> Go away
    +   <<jump Away>>
    +===
    +
    +title: Away
    +---
    +<<OhNo>>
    +===
    +
    +
    +

    the sequence of emitted events will be as follows (assuming the second option is selected):

    +
      +
    • onDialogueStart()

    • +
    • onNodeStart(Node("main"))

    • +
    • onLineStart(Line("Hello"))

    • +
    • onLineFinish(Line("Hello"))

    • +
    • onChoiceStart(Choice(["Hi", "Go away"]))

    • +
    • onChoiceFinish(Option("Go away"))

    • +
    • onNodeFinish(Node("main"))

    • +
    • onNodeStart(Node("Away"))

    • +
    • onCommand(Command("OhNo"))

    • +
    • onNodeFinish(Node("Away"))

    • +
    • onDialogueFinish()

    • +
    +
    +

    Note

    +

    Keep in mind that if a DialogueError is thrown while running the dialogue, then the dialogue will +terminate immediately and none of the *Finish callbacks will run.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/dialogue_view.html b/docs/1.18.0/other_modules/jenny/runtime/dialogue_view.html new file mode 100644 index 000000000..066ae9a80 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/dialogue_view.html @@ -0,0 +1,612 @@ + + + + + + + DialogueView — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    DialogueView

    +
    +
    +
    +
    +class DialogueView
    +
    +
    +

    The DialogueView class is the main mechanism for integrating Jenny with +a game engine. This class describes how lines and +options are presented to the user.

    +

    There are two ways to use this class:

    +
      +
    • Extending DialogueView

    • +
    • Adding DialogueView as a mixin

    • +
    +

    In both cases you will need to create concrete implementations of the +abstract event handler methods in order to use Jenny’s dialogue system. +The concrete DialogueView objects will then be passed to a +DialogueRunner, which will orchestrate the dialogue’s progression.

    +

    The class defines a number of “event handler” methods, which can be +overridden in subclasses in order to respond to the corresponding event. +Each method has a default no-op implementation, which means you only need +to override those methods that you care about.

    +

    Most of the event handler methods return FutureOr, which means they can +be implemented either synchronously or asynchronously. In the latter case +the dialogue runner will wait for the future to resolve before proceeding +(futures from several dialogue views will be awaited simultaneously).

    +
    +
    +

    Properties

    +
    +
    +dialogueRunnerDialogueRunner?
    +
    +

    The owner of this DialogueView. This property will be null when the +dialogue view hasn’t been attached to any DialogueRunner yet.

    +

    This property can be used in order to access the parent YarnProject, +or to send signals into the sibling DialogueViews.

    +
    +
    +
    +
    +

    Methods

    +
    +
    +
    +onDialogueStart()FutureOr<void>
    +
    +
    +

    Called before the start of a new dialogue, i.e. before any lines, options, +or commands are delivered.

    +

    This method is a good place to prepare the game’s UI, such as fading in/ +animating dialogue panels, or loading resources. If this method returns a +future, then the dialogue will start running only after the future +completes.

    +
    +
    +
    +
    +
    +onDialogueFinish()FutureOr<void>
    +
    +
    +

    Called when the dialogue has ended.

    +

    This method can be used to clean up any of the dialogue UI. The returned +future will be awaited before the dialogue runner considers its job +finished.

    +
    +
    +
    +
    +
    +onNodeStart(Node node)FutureOr<void>
    +
    +
    +

    Called when the dialogue enters a new node.

    +

    This will be called immediately after the onDialogueStart, and then +possibly several times more over the course of the dialogue if it jumps +to other nodes. This method is a good place to perform node-specific +initialization, for example by querying the node’s properties or +metadata.

    +

    If this method returns a future, then the dialogue runner will wait for it +to complete before proceeding with the actual dialogue.

    +
    +
    +
    +
    +
    +onNodeFinish(Node node)FutureOr<void>
    +
    +
    +

    Called when the dialogue exits the node.

    +

    For example, during a <<jump>> this callback will be called with the +current node, and then onNodeStart will be called with the new node. +Similarly, the command <<stop>> will trigger this callback too. At the +same time, during <<visit>> this callback will not be invoked.

    +

    This callback can be used to clean up any preparations that were +performed in onNodeStart.

    +
    +
    +
    +
    +
    +onLineStart(DialogueLine line)FutureOr<bool>
    +
    +
    +

    Called when the next dialogue line should be presented to the user.

    +

    The DialogueView may decide to present the line in whatever way it +wants, or to not present the line at all. For example, the dialogue view +may: augment the line object, render the line at a certain place on the +screen, render only the character’s name, show the portrait of whoever is +speaking, show the text within a chat bubble, play a voice-over audio +file, store the text into the player’s conversation log, move the camera +to show the speaker, etc.

    +

    Some of these methods of delivery can be considered “primary”, while +others are “auxiliary”. A “primary” DialogueView should return true, +while all others false (especially if a dialogue view ignores the line +completely). This is used as a robustness check: if none of the dialogue +views return true, then a DialogueError will be thrown because the +line was not shown to the user in a meaningful way.

    +

    If this method returns a future, then the dialogue runner will wait for +that future to complete before advancing to the next line. If multiple +DialogueViews return such futures, then the dialogue runner will wait +for all of them to complete before proceeding.

    +

    Returning a future is quite common for non-trivial DialogueViews. After +all, if this method were to return immediately, the dialogue runner would +immediately advance to the next line, and the player wouldn’t have time +to read the first one. A common scenario then is to reveal the line +gradually, and then wait some time before returning; or, alternatively, +return a Completer-based future that completes based on some user action +such as clicking a button or pressing a keyboard key.

    +

    Note that this method is supposed to only show the line to the player, +so do not try to hide it at the end – for that, there is a dedicated +method onLineFinish.

    +

    Also, given that this method may take a significant amount of time, there +are two additional methods that may attempt to interfere into this +process: onLineSignal and onLineStop.

    +
    +
    +
    +
    +
    +onLineSignal(DialogueLine line, dynamic signal)
    +
    +
    +

    Called when the dialogue runner sends a signal to all dialogue views.

    +

    The signal will be sent to all views, regardless of whether they have +finished running onLineStart or not. The interpretation of the signal +and the appropriate response is up to each dialogue view.

    +

    For example, one possible scenario would be to speed up a typewriter +effect and reveal the text immediately in response to the RUSH signal. +Or make some kind of an interjection in response to an OMG event. Or +pause presentation in response to a PAUSE signal. Or give a warning if +the player makes a hostile gesture such as drawing a weapon.

    +
    +
    +
    +
    +
    +onLineStop(DialogueLine line)FutureOr<void>
    +
    +
    +

    Called when the game demands that the line finished presenting as soon +as possible.

    +

    By itself, the dialogue runner will never call this method. However, it +may be invoked as a result of an explicit request by the game (or by one +of the dialogue views). Examples when this could be appropriate: (a) the +player was hit while talking to an NPC – better stop talking and fight +for your life, (b) the user has pressed a “skip dialogue” button, so we +should stop the current line and proceed to the next one ASAP.

    +

    This method returns a future that will be awaited before continuing to +the next line of the dialogue. At the same time, any future that’s still +pending from the onLineStart call will be discarded and will no longer +be awaited. The onLineFinish method will not be called either.

    +
    +
    +
    +
    +
    +onLineFinish(DialogueLine line)FutureOr<void>
    +
    +
    +

    Called when the line has finished presenting in all dialogue views.

    +

    Some dialogue views may need to clear their display when this event +happens, or make some other preparations to receive the next dialogue +line. If this method returns a future, that future will be awaited +before proceeding to the next line in the dialogue.

    +
    +
    +
    +
    +
    +onChoiceStart(DialogueChoice choice)FutureOr<int?>
    +
    +
    +

    Called when the dialogue arrives at an option set, and the player must now +make a choice on how to proceed. If a dialogue view presents this choice +to the player and allows them to make a selection, then it must return a +future that completes when the choice is made. If the dialogue view does +not display menu choice, then it should return null (possibly in a +Future).

    +

    The future returned by this method should deliver an integer value of the +index of the option that was selected. This index must not exceed the +length of the choice list, and the indicated option must not be marked +as “unavailable”. If these conditions are violated, an exception will be +thrown.

    +
    +
    +
    +
    +
    +onChoiceFinish(DialogueOption option)FutureOr<void>
    +
    +
    +

    Called when the choice has been made, and the option was selected.

    +

    The option will be the one returned from the onChoiceStart method by +one of the dialogue views.

    +
    +
    +
    +
    +
    +onCommand(UserDefinedCommand command)FutureOr<void>
    +
    +
    +

    Called when the dialogue encounters a user-defined command.

    +

    This method is invoked immediately after the command itself is executed, +but before the result of the execution was awaited. Thus, if the command’s +effect is asynchronous, then it will be send to dialogue views and +executed at the same time.

    +

    In cases when the command’s effect occurs within the game, implementing +this method may not be necessary. However, if you want to have a command +that affects the dialogue views themselves, then this method provides +a way of achieving that.

    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/function_storage.html b/docs/1.18.0/other_modules/jenny/runtime/function_storage.html new file mode 100644 index 000000000..2600bf294 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/function_storage.html @@ -0,0 +1,435 @@ + + + + + + + FunctionStorage — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    FunctionStorage

    +

    The FunctionStorage is a part of [YarnProject] responsible for storing all user-defined +functions. You can access it as the YarnProject.functions property.

    +

    The function storage can be used to register any number of custom functions, making them +available to use in yarn scripts. Such functions must be registered before parsing the yarn +scripts, or the compiler will throw an error that the function name is not recognized.

    +

    A Dart function can be registered as a user-defined function in Jenny, if it satisfies the +following requirements:

    +
      +
    • its return type is one of int, double, num, bool, or String;

    • +
    • all its arguments are positional, i.e. there are no named arguments;

    • +
    • all its arguments have types int, int?, double, double?, num, num?, bool, bool?, +String, or String?;

    • +
    • the nullable arguments, if any, must come after the non-nullable ones. These arguments become +optional in Yarn scripts, and if not provided they will be passed as null values;

    • +
    • the first argument in a function can also be YarnProject. If such argument is present, then +it will be passed automatically. For example, if you have a function fn(YarnProject, int), +then it can be invoked from the yarn script simply as fn(1).

    • +
    +

    A Dart function can then be added using one of the methods addFunction0, …, addFunction4, +depending on how many arguments the function has (this is a limitation of Dart’s template language). +When registering a function, you give it a name, under this function will be known in Yarn +scripts. This name can be the same, or different from the real function’s name. For example, you +may have a function hasVisitedTheWizard() in your game, but you’d register it under the name +has_visited_the_wizard() in your YarnProject.

    +

    Keep in mind that the name of the user-defined function must be:

    +
      +
    • unique;

    • +
    • a valid ID;

    • +
    • cannot be the same as any built-in function.

    • +
    +
    +

    Methods

    +
    +
    hasFunction(String name) → bool

    Returns the status of whether the function name has been already registered.

    +
    +
    addFunction0(String name, T0 Function() fn)

    Registers a no-argument function fn as the user-defined function name.

    +
    +
    addFunction1(String name, T0 Function(T1) fn1)

    Registers a single-argument function fn1 under the name name.

    +
    +
    addFunction2(String name, T0 Function(T1, T2) fn2)

    Registers a two-argument function fn2 with the given name.

    +
    +
    addFunction3(String name, T0 Function(T1, T2, T3) fn3)

    Registers a three-argument function fn3 with the name name.

    +
    +
    addFunction4(String name, T0 Function(T1, T2, T3, T4) fn4)

    Registers a four-argument function fn4 as name.

    +
    +
    clear

    Removes all user-defined functions

    +
    +
    remove(String name)

    Removes the user-defined function with the specified name.

    +
    +
    +
    +
    +

    Properties

    +
    +
    lengthint

    The number of user-defined functions registered so far.

    +
    +
    isEmptybool

    Returns true if no user-defined functions were registered.

    +
    +
    isNotEmptybool

    Has any functions been registered at all?

    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/jenny_runtime.html b/docs/1.18.0/other_modules/jenny/runtime/jenny_runtime.html new file mode 100644 index 000000000..a6ae731db --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/jenny_runtime.html @@ -0,0 +1,373 @@ + + + + + + + Jenny Runtime — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Jenny Runtime

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/markup_attribute.html b/docs/1.18.0/other_modules/jenny/runtime/markup_attribute.html new file mode 100644 index 000000000..79f2ab386 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/markup_attribute.html @@ -0,0 +1,405 @@ + + + + + + + MarkupAttribute — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    MarkupAttribute

    +

    A MarkupAttribute is a descriptor of a subrange of text in a line, demarcated with markup +tags. For example, in a .yarn line below there are two ranges of text surrounded by markup tags, +and therefore there will be two MarkupAttributes associated with this line:

    +
    [b]Jenny[/b] is a library based on \
    +    [link url="docs.yarnspinner.dev"]YarnSpinner[/link] for Unity.
    +
    +
    +

    These MarkupAttributes can be found in the .attributes property of a DialogueLine.

    +
    +

    Properties

    +
    +
    name String

    The name of the markup tag. In the example above, the name of the first attribute is "b", and +the second is "link".

    +
    +
    start, end int

    The location of the marked-up span within the final text of the line. The first index is +inclusive, while the second is exclusive. The start may be equal to end for a zero-width +markup attribute.

    +
    +
    length int

    The length of marked-up text. This is always equal to end - start.

    +
    +
    parameters Map<String, dynamic>

    The set of parameters associated with this markup attribute. In the example above, the first +markup attribute has no parameters, so this map will be empty. The second markup attribute has a +single parameter, so this map will be equal to {"url": "docs.yarnspinner.dev"}.

    +

    The type of each parameter will be either String, num, or bool, depending on the type of +expression give in the .yarn script. The expressions for parameter values can be dynamic, that +is they can be evaluated at runtime. In the example below, the parameter color will be equal to +the value of the variable $color, which may change each time the line is run.

    +
    My [i]favorite[/i] color is [bb color=$color]{$color}[/bb].
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/node.html b/docs/1.18.0/other_modules/jenny/runtime/node.html new file mode 100644 index 000000000..7823f3ae8 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/node.html @@ -0,0 +1,387 @@ + + + + + + + Node — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Node

    +

    The Node class represents a single node within the .yarn script. The objects of this class +will be delivered to your DialogueViews with the methods onNodeStart(), onNodeFinish().

    +
    +

    Properties

    +
    +
    title String

    The title (name) of the node.

    +
    +
    tags Map<String, String>

    Additional tags specified in the header of the node. The map will be empty if there were no tags +besides the required title tag.

    +
    +
    iterator Iterator<DialogueEntry>

    The content of the node, which is a sequence of DialogueLines, DialogueChoices, or +Commands.

    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/user_defined_command.html b/docs/1.18.0/other_modules/jenny/runtime/user_defined_command.html new file mode 100644 index 000000000..7e1ecfc47 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/user_defined_command.html @@ -0,0 +1,403 @@ + + + + + + + UserDefinedCommand — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    UserDefinedCommand

    +

    The UserDefinedCommand class represents a single invocation of a custom (non-built-in) command +within a yarn script. Objects of this type will be delivered to a DialogueView in its +.onCommand() method.

    +
    +

    Properties

    +
    +
    name String

    The name of the command, without the angle brackets. For example, if the command is <<smile>> +in the yarn script, then its name will be "smile".

    +
    +
    argumentString String

    Command arguments, as a single string. For example, if the command is <<move Hippo {$delta}>>, +and the value of variable $delta is 3.17, then the argument string will be "Hippo 3.17".

    +

    The argumentString is re-evaluated every time the command is executed, however, it is an error +to access this property before the command was executed by the dialogue runner.

    +
    +
    arguments List<dynamic>?

    Command arguments, as a list of parsed values. This property will be null if the command was +declared without a signature (i.e. as an “orphaned command”). However, if the command was linked +as an external function, then the number and types of arguments in the list will correspond to +the arguments of that function.

    +

    In the same example as above, the arguments will be ['Hippo', 3.17], assuming the linked Dart +function is move(String target, double distance).

    +
    +
    +
    +
    +

    See also

    + +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/variable_storage.html b/docs/1.18.0/other_modules/jenny/runtime/variable_storage.html new file mode 100644 index 000000000..7c0399a6f --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/variable_storage.html @@ -0,0 +1,504 @@ + + + + + + + VariableStorage — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    VariableStorage

    +
    +
    +
    +
    +class VariableStorage
    +
    +
    +

    Properties

    +
    +
    +variables : Map<String, dynamic>
    +
    +
    +
    +lengthint
    +
    +
    +
    +isEmptybool
    +
    +
    +
    +isNotEmptybool
    +
    +
    +
    +

    Methods

    +
    +
    +
    +getBooleanValue(String name)bool
    +
    +
    +
    +
    +
    +getNumericValue(String name)num
    +
    +
    +
    +
    +
    +getStringValue(String name)String
    +
    +
    +
    +
    +
    +hasVariable(String name)bool
    +
    +
    +
    +
    +
    +getVariable(String name)dynamic
    +
    +
    +
    +
    +
    +getVariableAsExpression(String name)Expression
    +
    +
    +
    +
    +
    +getVariableType(String name)ExpressionType
    +
    +
    +
    +
    +
    +setVariable(String name, dynamic value)
    +
    +
    +
    +
    +
    +clear({bool clearNodeVisits = false})
    +
    +
    +

    Clear all variables. By default node visit counts will not be cleared. +To remove node visit counts as well, set clearNodeVisits to true.

    +

    Note that node visit variable names are prefixed with an @ symbol. +If you have custom variables that start with an @ symbol these will +also be retained if clearNodeVisits is false. These will need to be +removed individually using remove.

    +
    +
    +
    +
    +
    +remove(String name)
    +
    +
    +

    Remove a variable by name.

    +
    +
    +
    +
    +
    +
    +

    Accessing variable storage

    +

    Variable storage is accessed via the YarnProject.

    +
    final variables = yarnProject.variables;
    +
    +
    +
    +
    +

    Removing variables

    +

    In most cases variables should be retained for the life of the YarnProject. However there may be +situations where variables need to be removed from storage. For example, in a game with many +scenes, variables specific to that scene could be removed if they are no longer required.

    +

    Remove all variables with clear. By default this will retain node visit counts, which are also +stored as variables. Node visit counts are used by Yarn for logic such as ‘do this if the node has +already been visited’, so it’s best to leave these alone. However, to remove them as well set +clearNodeVisits to true.

    +
    /// Clear all variables except node visit counts.
    +yarnProject.variables.clear();
    +
    +/// Clear all variables including node visit counts.
    +yarnProject.variables.clear(clearNodeVisits: true);
    +
    +
    +

    Use remove to remove a single variable.

    +
    yarnProject.variables.remove('money');
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/jenny/runtime/yarn_project.html b/docs/1.18.0/other_modules/jenny/runtime/yarn_project.html new file mode 100644 index 000000000..a6b4211d8 --- /dev/null +++ b/docs/1.18.0/other_modules/jenny/runtime/yarn_project.html @@ -0,0 +1,452 @@ + + + + + + + Yarn Project — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Yarn Project

    +

    A YarnProject is the central hub for all yarn scripts and the accompanying information. +Generally, there would be a single YarnProject in a game, though it is also possible to make +several yarn projects if their content is completely independent.

    +

    The standard sequence of initializing a YarnProject is the following:

    +
      +
    • link user-defined functions;

    • +
    • link user-defined commands;

    • +
    • set the locale (if different from en);

    • +
    • parse a .yarn script containing declarations of global variables and characters;

    • +
    • parse all other .yarn scripts;

    • +
    • restore the variables from a save-game storage.

    • +
    +

    For example:

    +
    final yarn = YarnProject()
    +  ..functions.addFunction0('money', player.getMoney)
    +  ..commands.addCommand1('achievement', player.earnAchievement)
    +  ..parse(readFile('project.yarn'))
    +  ..parse(readFile('chapter1.yarn'))
    +  ..parse(readFile('chapter2.yarn'));
    +
    +
    +
    +

    Properties

    +
    +
    locale String

    The language used in this YarnProject (the default is 'en'). Selecting a different language +changes the builtin plural() function.

    +
    +
    random Random

    The random number generator. This can be replaced with a different generator, if, for example, +you need to control the seed.

    +
    +
    nodes Map<String, Node>

    All Nodes loaded into the project, keyed by their titles.

    +
    +
    variables VariableStorage

    The container for all global variables used in this yarn project. There could be several reasons +to access this storage:

    + +
      +
    • to change the value of a yarn variable from the game. This enables you to pass the information +from the game into the dialogue. For example, your dialogue may have variable $gold, which +you may want to update whenever the player’s amount of money changes within the game.

    • +
    • to store the values of all yarn variables during the save game, and to restore them when +loading the game.

    • +
    + +
    +
    functions FunctionStorage

    The container for all user-defined functions linked into the project. The main +reason to access this property is to register new custom function to be available at runtime.

    +

    Note that all custom functions must be added to the YarnProject before they can be used in a +dialogue script – otherwise a compile error will occur when encountering an unknown function.

    +
    +
    commands CommandStorage

    The container for all user-defined commands linked into the project. The main +reason to access this container is to register new custom commands.

    +

    All custom commands must be added before they can be used in the dialogue script.

    +
    +
    characters CharacterStorage

    The container for all Character objects declared in your yarn scripts.

    +
    +
    strictCharacterNames bool

    If true (default), the validity of character names will be strictly enforced. That is, all +characters must be declared before they can be used, using the <<character>> commands. If +this property is set to false, then new Character objects will be created automatically as +they are encountered in scripts.

    +
    +
    trueValues, falseValues Set<String>

    The strings that can be recognized as true/false values respectively.

    +
    +
    variables VariableStorage

    The container for all variables declared and manipulated in your yarn scripts. +This is also used for maintaining the visit counts for nodes that the user has visited. To +implement a ‘save game’ feature it is possible to save the variables from +VariableStorage.variables and later restore them again.

    +
    +
    +
    +
    +

    Methods

    +
    +
    parse(String text)

    Parses and compiles the text of a yarn script. After this command, the nodes contained within +the script will be runnable.

    +

    This method can be executed multiple times, and each time the new nodes will be added to the +existing ones.

    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/other_modules.html b/docs/1.18.0/other_modules/other_modules.html new file mode 100644 index 000000000..40dae8711 --- /dev/null +++ b/docs/1.18.0/other_modules/other_modules.html @@ -0,0 +1,388 @@ + + + + + + + Other Modules — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Other Modules

    +
    +

    jenny

    +
    +

    This module lets you add interactive dialogue into your game. The module itself handles Yarn scripts +and the dialogue runtime; use bridge package flame_jenny in order to add it into a Flame game.

    +
    +
    +
    +

    oxygen

    +
    +

    Oxygen is a lightweight Entity Component System framework written in Dart, with a focus on +performance and ease of use. This package replaces the Flame Component System with the Oxygen +Entity Component System.

    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/oxygen/components.html b/docs/1.18.0/other_modules/oxygen/components.html new file mode 100644 index 000000000..c2914cef3 --- /dev/null +++ b/docs/1.18.0/other_modules/oxygen/components.html @@ -0,0 +1,554 @@ + + + + + + + Components — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Components

    +

    Components in Oxygen are different than the ones from FCS mainly because instead of containing logic +they only contain data. This data is then used in systems which in turn define the logic. To +accommodate people who are switching from FCS to Oxygen we implemented a few components to help you +get started. Some of these components are based on the multiple functionalities that the +PositionComponent from FCS has. Others are just easy wrappers around certain Flame API +functionality, they are often accompanied by predefined systems that you can use.

    +

    Components can be registered to the world using the world.registerComponent method on +OxygenGame.

    +
    +

    PositionComponent

    +

    The PositionComponent as its name implies is a component that describes the position of an +entity. And it is registered to the world by default.

    +

    Creating a positioned entity using OxygenGame:

    +
    game.createEntity(
    +  position: Vector2(100, 100),
    +  size: // ...
    +);
    +
    +
    +

    Creating a positioned entity using the World:

    +
    world.createEntity()
    +  ..add<PositionComponent, Vector2>(Vector2(100, 100));
    +
    +
    +
    +
    +

    SizeComponent

    +

    The SizeComponent as its name implies is a component that describes the size of an entity. +And it is registered to the world by default.

    +

    Creating a sized entity using OxygenGame:

    +
    game.createEntity(
    +  position: // ...
    +  size: Vector2(50, 50),
    +);
    +
    +
    +

    Creating a sized entity using the World:

    +
    world.createEntity()
    +  ..add<SizeComponent, Vector2>(Vector2(50, 50));
    +
    +
    +
    +
    +

    AnchorComponent

    +

    The AnchorComponent as its name implies is a component that describes the anchor position of an +entity. And it is registered to the world by default.

    +

    This component is especially useful when you are using the BaseSystem. But can also +be used for your anchoring logic.

    +

    Creating an anchored entity using OxygenGame:

    +
    game.createEntity(
    +  position: // ...
    +  size: // ...
    +  anchor: Anchor.center,
    +);
    +
    +
    +

    Creating an anchored entity using the World:

    +
    world.createEntity()
    +  ..add<AnchorComponent, Anchor>(Anchor.center);
    +
    +
    +
    +

    AngleComponent

    +

    The AngleComponent as its name implies is a component that describes the angle of an entity and +it is registered to the world by default. The angle is in radians.

    +

    This component is especially useful when you are using the BaseSystem. But can also +be used for your angle logic.

    +

    Creating an angled entity using OxygenGame:

    +
    game.createEntity(
    +  position: // ...
    +  size: // ...
    +  angle: 1.570796,
    +);
    +
    +
    +

    Creating an angled entity using the World:

    +
    world.createEntity()
    +  ..add<AngleComponent, double>(1.570796);
    +
    +
    +
    +
    +
    +

    FlipComponent

    +

    The FlipComponent can be used to flip your rendering on either the X or Y axis. It is registered +to the world by default.

    +

    This component is especially useful when you are using the BaseSystem. But can also +be used for your flipping logic.

    +

    Creating an entity that is flipped on its X-axis using OxygenGame:

    +
    game.createEntity(
    +  position: // ...
    +  size: // ...
    +  flipX: true
    +);
    +
    +
    +

    Creating an entity that is flipped on its X-axis using the World:

    +
    world.createEntity()
    +  ..add<FlipComponent, FlipInit>(FlipInit(flipX: true));
    +
    +
    +
    +
    +

    SpriteComponent

    +

    The SpriteComponent as its name implies is a component that describes the sprite of an entity and +it is registered to the world by default.

    +

    This allows you to assign a Sprite to an Entity.

    +

    Creating an entity with a sprite using OxygenGame:

    +
    game.createEntity(
    +  position: // ...
    +  size: // ...
    +)..add<SpriteComponent, SpriteInit>(
    +  SpriteInit(await game.loadSprite('pizza.png')),
    +);
    +
    +
    +

    Creating an entity with a sprite using World:

    +
    world.createEntity()
    +  ..add<SpriteComponent, SpriteInit>(
    +    SpriteInit(await game.loadSprite('pizza.png')),
    +  );
    +
    +
    +
    +
    +

    TextComponent

    +

    The TextComponent as its name implies is a component that adds a text component to an entity. +And it is registered to the world by default.

    +

    This allows you to add text to your entity, combined with the PositionComponent you can use it +as a text entity.

    +

    Creating an entity with text using OxygenGame:

    +
    game.createEntity(
    +  position: // ...
    +  size: // ...
    +)..add<TextComponent, TextInit>(
    +  TextInit(
    +    'Your text',
    +    config: const TextPaintConfig(),
    +  ),
    +);
    +
    +
    +

    Creating an entity with text using World:

    +
    world.createEntity()
    +  ..add<TextComponent, TextInit>(
    +    TextInit(
    +      'Your text',
    +      config: const TextPaintConfig(),
    +    ),
    +  );
    +
    +
    +
    +
    +

    ParticleComponent

    +

    The ParticleComponent wraps a Particle from Flame. Combined with the ParticleSystem you can +easily add particles to your game without having to worry about how to render a particle or when/how +to update one.

    +

    Creating an entity with a particle using OxygenGame:

    +
    game.createEntity(
    +  position: // ...
    +  size: // ...
    +)..add<ParticleComponent, Particle>(
    +  // Your Particle.
    +);
    +
    +
    +

    Creating an entity with a particle using World:

    +
    world.createEntity()
    +  ..add<ParticleComponent, Particle>(
    +    // Your Particle.
    +  );
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/other_modules/oxygen/oxygen.html b/docs/1.18.0/other_modules/oxygen/oxygen.html new file mode 100644 index 000000000..49f5278c8 --- /dev/null +++ b/docs/1.18.0/other_modules/oxygen/oxygen.html @@ -0,0 +1,531 @@ + + + + + + + Oxygen — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Oxygen

    +

    We (the Flame organization) built an ECS (Entity Component System) named Oxygen.

    +

    If you want to use Oxygen specifically for Flame as a replacement for the +FCS(Flame Component System) you should use our bridge library +flame_oxygen and if you +just want to use it in a Dart project you can use the +oxygen library directly.

    +

    If you are not familiar with Oxygen yet we recommend you read up on its +documentation.

    +

    To use it in your game you just need to add flame_oxygen to your pubspec.yaml, as can be seen +in the +Oxygen example +and in the pub.dev installation instructions.

    +
    +

    OxygenGame (Game extension)

    +

    If you are going to use Oxygen in your project it can be a good idea to use the Oxygen specific +extension of the Game class.

    +

    It is called OxygenGame and it will give you full access to the Oxygen framework while also +having full access to the Flame game loop.

    +

    Instead of using onLoad, as you are used to with Flame, OxygenGame comes with the init +method. This method is called in the onLoad but before the world initialization, allowing you +to register components and systems and do anything else that you normally would do in onLoad.

    +

    A simple OxygenGame implementation example can be seen in the +example folder.

    +

    The OxygenGame also comes with it’s own createEntity method that automatically adds certain +default components on the entity. This is especially helpful when you are using the +BaseSystem as your base.

    +
    +
    +

    Systems

    +

    Systems define the logic of your game. In FCS you normally would add your logic inside a component +with Oxygen we use systems for that. Oxygen itself is completely platform agnostic, meaning it has +no render loop. It only knows execute, which is a method equal to the update method in Flame.

    +

    On each execute Oxygen automatically calls all the systems that were registered in order. But in +Flame we can have different logic for different loops (render/update). So in flame_oxygen we +introduced the RenderSystem and UpdateSystem mixin. These mixins allow you to add the render +method and the update method respectively to your custom system. For more information see the +RenderSystem and UpdateSystem section.

    +

    If you are coming from FCS you might expect certain default functionality that you normally got +from the PositionComponent. As mentioned before components do not contain any kind of logic, but +to give you the same default functionality we also created a class called BaseSystem. This system +acts almost identical to the prerender logic from the PositionComponent in FCS. You only have +to subclass it to your own system. For more information see the +BaseSystem section.

    +

    Systems can be registered to the world using the world.registerSystem method on +OxygenGame.

    +
    +

    mixin GameRef

    +

    The GameRef mixin allows a system to become aware of the OxygenGame instance its attached to. +This allows easy access to the methods on the game class.

    +
    class YourSystem extends System with GameRef<YourGame> {
    +  @override
    +  void init() {
    +    // Access to game using the .game property
    +  }
    +
    +  // ...
    +}
    +
    +
    +
    +
    +

    mixin RenderSystem

    +

    The RenderSystem mixin allows a system to be registered for the render loop. +By adding a render method to the system you get full access to the canvas as +you normally would in Flame.

    +
    class SimpleRenderSystem extends System with RenderSystem {
    +  Query? _query;
    +
    +  @override
    +  void init() {
    +    _query = createQuery([/* Your filters */]);
    +  }
    +
    +  void render(Canvas canvas) {
    +    for (final entity in _query?.entities ?? <Entity>[]) {
    +      // Render entity based on components
    +    }
    +  }
    +}
    +
    +
    +
    +
    +

    mixin UpdateSystem

    +

    The MixinSystem mixin allows a system to be registered for the update loop. +By adding a update method to the system you get full access to the delta time as you +normally would in Flame.

    +
    class SimpleUpdateSystem extends System with UpdateSystem {
    +  Query? _query;
    +
    +  @override
    +  void init() {
    +    _query = createQuery([/* Your filters */]);
    +  }
    +
    +  void update(double dt) {
    +    for (final entity in _query?.entities ?? <Entity>[]) {
    +      // Update components values
    +    }
    +  }
    +}
    +
    +
    +
    +
    +

    BaseSystem

    +

    The BaseSystem is an abstract class whose logic can be compared to the PositionComponent +from FCS. The BaseSystem automatically filters all entities that have the PositionComponent +and SizeComponent from flame_oxygen. On top of that you can add your own filters by defining +a getter called filters. These filters are then used to filter down the entities you are +interested in.

    +

    The BaseSystem is also fully aware of the game instance. You can access the game instance by using +the game property. This also gives you access to the createEntity helper method on OxygenGame.

    +

    On each render loop the BaseSystem will prepare your canvas the same way the PositionComponent +from FCS would (translating, rotating and setting the anchor. After that it will call the +renderEntity method so you can add your own render logic for that entity on a prepared canvas.

    +

    The following components will be checked by BaseSystem for the preparation of the canvas:

    +
      +
    • PositionComponent (required)

    • +
    • SizeComponent (required)

    • +
    • AnchorComponent (optional, defaults to Anchor.topLeft)

    • +
    • AngleComponent (optional, defaults to 0)

    • +
    +
    class SimpleBaseSystem extends BaseSystem {
    +  @override
    +  List<Filter<Component>> get filters => [];
    +
    +  @override
    +  void renderEntity(Canvas canvas, Entity entity) {
    +    // The canvas is translated, rotated and fully prepared for rendering.
    +  }
    +}
    +
    +
    +
    +
    +

    ParticleSystem

    +

    The ParticleSystem is a simple system that brings the Particle API from Flame to Oxygen. This +allows you to use the ParticleComponent without having to worry +about how it will render or when to update it. As most of that logic is already contained in the +Particle itself.

    +

    Simply register the ParticleSystem and the ParticleComponent to your world like so:

    +
    world.registerSystem(ParticleSystem());
    +
    +world.registerComponent<ParticleComponent, Particle>(() => ParticleComponent);
    +
    +
    +

    You can now create a new entity with a ParticleComponent. For more info about that see the +ParticleComponent section.

    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/resources/resources.html b/docs/1.18.0/resources/resources.html new file mode 100644 index 000000000..442265008 --- /dev/null +++ b/docs/1.18.0/resources/resources.html @@ -0,0 +1,369 @@ + + + + + + + Resources — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Resources

    + +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/search.html b/docs/1.18.0/search.html new file mode 100644 index 000000000..e59a56a83 --- /dev/null +++ b/docs/1.18.0/search.html @@ -0,0 +1,368 @@ + + + + + + + Search — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + + + +
    +
    + +
    + +
    +
    +
    +
    + + + +
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/searchindex.js b/docs/1.18.0/searchindex.js new file mode 100644 index 000000000..00829f2d9 --- /dev/null +++ b/docs/1.18.0/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["README", "bridge_packages/bridge_packages", "bridge_packages/flame_audio/audio", "bridge_packages/flame_audio/audio_pool", "bridge_packages/flame_audio/bgm", "bridge_packages/flame_audio/flame_audio", "bridge_packages/flame_bloc/bloc", "bridge_packages/flame_bloc/bloc_components", "bridge_packages/flame_bloc/flame_bloc", "bridge_packages/flame_fire_atlas/fire_atlas", "bridge_packages/flame_fire_atlas/flame_fire_atlas", "bridge_packages/flame_forge2d/flame_forge2d", "bridge_packages/flame_forge2d/forge2d", "bridge_packages/flame_forge2d/joints", "bridge_packages/flame_isolate/flame_isolate", "bridge_packages/flame_isolate/isolate", "bridge_packages/flame_lottie/flame_lottie", "bridge_packages/flame_network_assets/flame_network_assets", "bridge_packages/flame_oxygen/flame_oxygen", "bridge_packages/flame_rive/flame_rive", "bridge_packages/flame_rive/rive", "bridge_packages/flame_riverpod/component", "bridge_packages/flame_riverpod/flame_riverpod", "bridge_packages/flame_riverpod/riverpod", "bridge_packages/flame_riverpod/widget", "bridge_packages/flame_spine/flame_spine", "bridge_packages/flame_splash_screen/flame_splash_screen", "bridge_packages/flame_svg/flame_svg", "bridge_packages/flame_svg/svg", "bridge_packages/flame_tiled/flame_tiled", "bridge_packages/flame_tiled/layers", "bridge_packages/flame_tiled/tiled", "development/contributing", "development/development", "development/documentation", "development/style_guide", "development/testing_guide", "flame/camera_component", "flame/collision_detection", "flame/components", "flame/diagrams/component", "flame/diagrams/component_life_cycle", "flame/diagrams/flame_game_life_cycle", "flame/diagrams/low_level_game_api", "flame/effects", "flame/flame", "flame/game", "flame/game_widget", "flame/inputs/drag_events", "flame/inputs/gesture_input", "flame/inputs/hardware_keyboard_detector", "flame/inputs/inputs", "flame/inputs/keyboard_input", "flame/inputs/other_inputs", "flame/inputs/pointer_events", "flame/inputs/tap_events", "flame/layout/align_component", "flame/layout/layout", "flame/other/debug", "flame/other/other", "flame/other/util", "flame/other/widgets", "flame/overlays", "flame/platforms", "flame/rendering/decorators", "flame/rendering/images", "flame/rendering/layers", "flame/rendering/palette", "flame/rendering/particles", "flame/rendering/rendering", "flame/rendering/text_rendering", "flame/router", "flame/structure", "index", "other_modules/jenny/jenny", "other_modules/jenny/language/commands/character", "other_modules/jenny/language/commands/commands", "other_modules/jenny/language/commands/declare", "other_modules/jenny/language/commands/if", "other_modules/jenny/language/commands/jump", "other_modules/jenny/language/commands/local", "other_modules/jenny/language/commands/set", "other_modules/jenny/language/commands/stop", "other_modules/jenny/language/commands/user_defined_commands", "other_modules/jenny/language/commands/visit", "other_modules/jenny/language/commands/wait", "other_modules/jenny/language/expressions/expressions", "other_modules/jenny/language/expressions/functions/functions", "other_modules/jenny/language/expressions/functions/misc", "other_modules/jenny/language/expressions/functions/numeric", "other_modules/jenny/language/expressions/functions/random", "other_modules/jenny/language/expressions/functions/type", "other_modules/jenny/language/expressions/operators", "other_modules/jenny/language/expressions/variables", "other_modules/jenny/language/language", "other_modules/jenny/language/lines", "other_modules/jenny/language/markup", "other_modules/jenny/language/nodes", "other_modules/jenny/language/options", "other_modules/jenny/runtime/character", "other_modules/jenny/runtime/character_storage", "other_modules/jenny/runtime/command_storage", "other_modules/jenny/runtime/dialogue_choice", "other_modules/jenny/runtime/dialogue_line", "other_modules/jenny/runtime/dialogue_option", "other_modules/jenny/runtime/dialogue_runner", "other_modules/jenny/runtime/dialogue_view", "other_modules/jenny/runtime/function_storage", "other_modules/jenny/runtime/jenny_runtime", "other_modules/jenny/runtime/markup_attribute", "other_modules/jenny/runtime/node", "other_modules/jenny/runtime/user_defined_command", "other_modules/jenny/runtime/variable_storage", "other_modules/jenny/runtime/yarn_project", "other_modules/other_modules", "other_modules/oxygen/components", "other_modules/oxygen/oxygen", "resources/resources", "tutorials/bare_flame_game", "tutorials/klondike/klondike", "tutorials/klondike/step1", "tutorials/klondike/step2", "tutorials/klondike/step3", "tutorials/klondike/step4", "tutorials/klondike/step5", "tutorials/platformer/platformer", "tutorials/platformer/step_1", "tutorials/platformer/step_2", "tutorials/platformer/step_3", "tutorials/platformer/step_4", "tutorials/platformer/step_5", "tutorials/platformer/step_6", "tutorials/platformer/step_7", "tutorials/space_shooter/space_shooter", "tutorials/space_shooter/step_1", "tutorials/space_shooter/step_2", "tutorials/space_shooter/step_3", "tutorials/space_shooter/step_4", "tutorials/space_shooter/step_5", "tutorials/space_shooter/step_6", "tutorials/tutorials"], "filenames": ["README.md", "bridge_packages/bridge_packages.md", "bridge_packages/flame_audio/audio.md", "bridge_packages/flame_audio/audio_pool.md", "bridge_packages/flame_audio/bgm.md", "bridge_packages/flame_audio/flame_audio.md", "bridge_packages/flame_bloc/bloc.md", "bridge_packages/flame_bloc/bloc_components.md", "bridge_packages/flame_bloc/flame_bloc.md", "bridge_packages/flame_fire_atlas/fire_atlas.md", "bridge_packages/flame_fire_atlas/flame_fire_atlas.md", "bridge_packages/flame_forge2d/flame_forge2d.md", "bridge_packages/flame_forge2d/forge2d.md", "bridge_packages/flame_forge2d/joints.md", "bridge_packages/flame_isolate/flame_isolate.md", "bridge_packages/flame_isolate/isolate.md", "bridge_packages/flame_lottie/flame_lottie.md", "bridge_packages/flame_network_assets/flame_network_assets.md", "bridge_packages/flame_oxygen/flame_oxygen.md", "bridge_packages/flame_rive/flame_rive.md", "bridge_packages/flame_rive/rive.md", "bridge_packages/flame_riverpod/component.md", "bridge_packages/flame_riverpod/flame_riverpod.md", "bridge_packages/flame_riverpod/riverpod.md", "bridge_packages/flame_riverpod/widget.md", "bridge_packages/flame_spine/flame_spine.md", "bridge_packages/flame_splash_screen/flame_splash_screen.md", "bridge_packages/flame_svg/flame_svg.md", "bridge_packages/flame_svg/svg.md", "bridge_packages/flame_tiled/flame_tiled.md", "bridge_packages/flame_tiled/layers.md", "bridge_packages/flame_tiled/tiled.md", "development/contributing.md", "development/development.md", "development/documentation.md", "development/style_guide.md", "development/testing_guide.md", "flame/camera_component.md", "flame/collision_detection.md", "flame/components.md", "flame/diagrams/component.md", "flame/diagrams/component_life_cycle.md", "flame/diagrams/flame_game_life_cycle.md", "flame/diagrams/low_level_game_api.md", "flame/effects.md", "flame/flame.md", "flame/game.md", "flame/game_widget.md", "flame/inputs/drag_events.md", "flame/inputs/gesture_input.md", "flame/inputs/hardware_keyboard_detector.md", "flame/inputs/inputs.md", "flame/inputs/keyboard_input.md", "flame/inputs/other_inputs.md", "flame/inputs/pointer_events.md", "flame/inputs/tap_events.md", "flame/layout/align_component.md", "flame/layout/layout.md", "flame/other/debug.md", "flame/other/other.md", "flame/other/util.md", "flame/other/widgets.md", "flame/overlays.md", "flame/platforms.md", "flame/rendering/decorators.md", "flame/rendering/images.md", "flame/rendering/layers.md", "flame/rendering/palette.md", "flame/rendering/particles.md", "flame/rendering/rendering.md", "flame/rendering/text_rendering.md", "flame/router.md", "flame/structure.md", "index.md", "other_modules/jenny/jenny.md", "other_modules/jenny/language/commands/character.md", "other_modules/jenny/language/commands/commands.md", "other_modules/jenny/language/commands/declare.md", "other_modules/jenny/language/commands/if.md", "other_modules/jenny/language/commands/jump.md", "other_modules/jenny/language/commands/local.md", "other_modules/jenny/language/commands/set.md", "other_modules/jenny/language/commands/stop.md", "other_modules/jenny/language/commands/user_defined_commands.md", "other_modules/jenny/language/commands/visit.md", "other_modules/jenny/language/commands/wait.md", "other_modules/jenny/language/expressions/expressions.md", "other_modules/jenny/language/expressions/functions/functions.md", "other_modules/jenny/language/expressions/functions/misc.md", "other_modules/jenny/language/expressions/functions/numeric.md", "other_modules/jenny/language/expressions/functions/random.md", "other_modules/jenny/language/expressions/functions/type.md", "other_modules/jenny/language/expressions/operators.md", "other_modules/jenny/language/expressions/variables.md", "other_modules/jenny/language/language.md", "other_modules/jenny/language/lines.md", "other_modules/jenny/language/markup.md", "other_modules/jenny/language/nodes.md", "other_modules/jenny/language/options.md", "other_modules/jenny/runtime/character.md", "other_modules/jenny/runtime/character_storage.md", "other_modules/jenny/runtime/command_storage.md", "other_modules/jenny/runtime/dialogue_choice.md", "other_modules/jenny/runtime/dialogue_line.md", "other_modules/jenny/runtime/dialogue_option.md", "other_modules/jenny/runtime/dialogue_runner.md", "other_modules/jenny/runtime/dialogue_view.md", "other_modules/jenny/runtime/function_storage.md", "other_modules/jenny/runtime/jenny_runtime.md", "other_modules/jenny/runtime/markup_attribute.md", "other_modules/jenny/runtime/node.md", "other_modules/jenny/runtime/user_defined_command.md", "other_modules/jenny/runtime/variable_storage.md", "other_modules/jenny/runtime/yarn_project.md", "other_modules/other_modules.md", "other_modules/oxygen/components.md", "other_modules/oxygen/oxygen.md", "resources/resources.md", "tutorials/bare_flame_game.md", "tutorials/klondike/klondike.md", "tutorials/klondike/step1.md", "tutorials/klondike/step2.md", "tutorials/klondike/step3.md", "tutorials/klondike/step4.md", "tutorials/klondike/step5.md", "tutorials/platformer/platformer.md", "tutorials/platformer/step_1.md", "tutorials/platformer/step_2.md", "tutorials/platformer/step_3.md", "tutorials/platformer/step_4.md", "tutorials/platformer/step_5.md", "tutorials/platformer/step_6.md", "tutorials/platformer/step_7.md", "tutorials/space_shooter/space_shooter.md", "tutorials/space_shooter/step_1.md", "tutorials/space_shooter/step_2.md", "tutorials/space_shooter/step_3.md", "tutorials/space_shooter/step_4.md", "tutorials/space_shooter/step_5.md", "tutorials/space_shooter/step_6.md", "tutorials/tutorials.md"], "titles": ["Getting Started", "Bridge Packages", "Audio", "AudioPool", "Looping Background Music", "flame_audio", "flame_bloc", "Components", "flame_bloc", "Flame fire atlas", "flame_fire_atlas", "flame_forge2d", "Forge2D", "Joints", "flame_isolate", "FlameIsolate", "flame_lottie", "FlameNetworkAssets", "flame_oxygen", "flame_rive", "flame_rive", "Component", "flame_riverpod", "flame_riverpod", "Widget", "flame_spine", "flame_splash_screen", "flame_svg", "Flame SVG", "flame_tiled", "Layers", "Tiled", "Contribution Guidelines", "Development", "Documentation Site", "Flame Style Guide", "Writing tests", "Camera component", "Collision Detection", "Components", "<no title>", "<no title>", "<no title>", "<no title>", "Effects", "Flame", "FlameGame", "Game Widget", "Drag Events", "Gesture Input", "HardwareKeyboardDetector", "Inputs", "Keyboard Input", "Other Inputs and Helpers", "Pointer Events", "Tap Events", "AlignComponent", "Layout", "Debug features", "Other", "Util", "Widgets", "Overlays", "Supported Platforms", "Decorators", "Images", "Layers and Snapshots", "Palette", "Particles", "Rendering", "Text Rendering", "RouterComponent", "Structure", "Getting Started", "Jenny", "<<character>>", "Commands", "<<declare>>", "<<if>>", "<<jump>>", "<<local>>", "<<set>>", "<<stop>>", "User-defined commands", "<<visit>>", "<<wait>>", "Expressions", "Functions", "Miscellaneous functions", "Numeric functions", "Random functions", "Type conversion functions", "Operators", "Variables", "YarnSpinner language", "Lines", "Markup", "Nodes", "Options", "Character", "CharacterStorage", "CommandStorage", "DialogueChoice", "DialogueLine", "DialogueOption", "DialogueRunner", "DialogueView", "FunctionStorage", "Jenny Runtime", "MarkupAttribute", "Node", "UserDefinedCommand", "VariableStorage", "Yarn Project", "Other Modules", "Components", "Oxygen", "Resources", "Bare Flame game", "Klondike game tutorial", "1. Preparation", "2. Scaffolding", "3. Cards", "4. Gameplay", "5. Animations, restarting, buttons and a New World", "Ember Quest Game Tutorial", "1. Preparation", "2. Start Coding", "3. Building the World", "4. Adding the Remaining Components", "5. Controlling Movement", "6. Adding the HUD", "7. Adding Menus", "Space Shooter Game Tutorial", "Getting Started", "Controlling the player and adding some graphics", "Adding animations and depth", "Adding bullets", "Adding Enemies", "Enemies and Bullets collision", "Tutorials"], "terms": {"i": [0, 2, 3, 4, 6, 7, 9, 12, 13, 15, 16, 17, 20, 21, 23, 24, 26, 28, 29, 31, 32, 34, 35, 36, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140], "modular": [0, 73], "flutter": [0, 1, 2, 13, 16, 23, 29, 32, 34, 35, 36, 38, 39, 44, 46, 47, 48, 49, 50, 52, 54, 55, 56, 58, 60, 61, 62, 64, 65, 67, 68, 70, 71, 72, 73, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "game": [0, 1, 2, 4, 6, 7, 9, 12, 13, 15, 16, 20, 21, 23, 25, 26, 28, 31, 32, 34, 36, 37, 38, 39, 44, 45, 48, 49, 50, 53, 54, 55, 58, 60, 61, 62, 64, 66, 67, 68, 71, 73, 77, 83, 87, 95, 96, 98, 100, 101, 106, 107, 112, 113, 114, 115, 120, 122, 123, 126, 127, 128, 129, 130, 131, 134, 135, 136, 137, 138, 139, 140], "provid": [0, 2, 3, 6, 7, 9, 12, 13, 17, 21, 23, 24, 28, 31, 32, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 55, 56, 58, 60, 61, 62, 65, 66, 67, 70, 72, 73, 74, 75, 77, 86, 87, 105, 106, 107, 122, 123, 124, 126, 128, 130, 132, 135, 136, 137, 138, 139], "complet": [0, 29, 32, 38, 39, 44, 49, 52, 53, 55, 65, 67, 70, 73, 74, 87, 94, 105, 106, 113, 116, 118, 120, 124, 126, 137], "set": [0, 2, 12, 13, 25, 29, 32, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 55, 56, 58, 60, 63, 64, 65, 66, 68, 70, 71, 73, 74, 75, 76, 86, 87, 90, 91, 92, 93, 98, 99, 100, 101, 102, 106, 109, 112, 113, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 132, 136, 137, 139, 140], "out": [0, 12, 20, 23, 34, 37, 38, 46, 50, 53, 58, 64, 65, 66, 70, 73, 74, 78, 86, 88, 94, 98, 118, 120, 122, 123, 124, 126, 127, 131, 136, 137, 139], "wai": [0, 6, 12, 13, 15, 16, 31, 35, 37, 38, 39, 44, 46, 47, 50, 52, 53, 58, 61, 63, 64, 65, 66, 67, 70, 73, 74, 86, 94, 97, 106, 116, 120, 122, 123, 124, 126, 127, 128, 132, 134, 135, 136, 138], "solut": [0, 12, 17, 34, 65, 73], "It": [0, 7, 12, 13, 15, 16, 29, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 53, 55, 56, 60, 63, 64, 65, 67, 68, 70, 71, 73, 74, 77, 79, 84, 88, 93, 95, 96, 98, 100, 103, 105, 115, 116, 118, 121, 124, 128, 129, 130, 132], "take": [0, 4, 7, 9, 32, 34, 35, 37, 38, 39, 44, 46, 47, 53, 55, 60, 65, 67, 70, 73, 74, 82, 83, 85, 87, 88, 89, 91, 95, 98, 101, 103, 106, 118, 121, 122, 123, 124, 126, 127, 128, 135, 136, 137, 138, 139], "advantag": [0, 3, 46, 61, 73, 137], "power": [0, 1, 15, 31, 39, 44, 66, 73, 98, 124], "infrastructur": [0, 36, 73], "simplifi": [0, 39, 70, 73], "code": [0, 13, 15, 20, 32, 34, 36, 38, 39, 44, 46, 48, 49, 52, 53, 54, 55, 58, 60, 64, 65, 66, 68, 70, 71, 72, 73, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139], "you": [0, 2, 3, 4, 6, 7, 9, 12, 13, 15, 16, 17, 20, 21, 23, 25, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81, 82, 83, 84, 87, 88, 90, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 105, 106, 107, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 139], "need": [0, 2, 6, 7, 9, 12, 13, 15, 16, 17, 20, 25, 29, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 53, 54, 55, 63, 64, 65, 66, 67, 68, 70, 71, 73, 77, 80, 83, 88, 90, 92, 94, 95, 100, 103, 105, 106, 112, 113, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 135, 137, 138, 139], "build": [0, 21, 32, 38, 39, 44, 46, 47, 58, 61, 62, 63, 71, 73, 74, 123, 130, 132, 139, 140], "your": [0, 2, 3, 4, 6, 9, 12, 15, 16, 20, 21, 23, 25, 26, 28, 29, 31, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 53, 54, 55, 58, 60, 61, 62, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81, 83, 87, 94, 98, 99, 100, 101, 102, 103, 106, 107, 110, 113, 114, 115, 116, 118, 121, 124, 127, 128, 129, 130, 131, 134, 135, 140], "project": [0, 12, 31, 32, 34, 35, 63, 64, 72, 73, 77, 88, 94, 97, 105, 116, 120, 121, 124, 126], "simpl": [0, 2, 6, 12, 15, 28, 31, 34, 35, 37, 39, 44, 46, 60, 61, 64, 65, 67, 70, 73, 74, 88, 104, 105, 116, 120, 121, 122, 124, 126, 129, 132, 134, 136, 137, 138, 140], "yet": [0, 30, 34, 39, 46, 55, 68, 73, 94, 106, 116, 121, 123, 124], "effect": [0, 2, 3, 13, 29, 34, 35, 36, 37, 38, 45, 46, 56, 60, 63, 64, 65, 66, 68, 70, 71, 73, 77, 82, 88, 106, 123, 124, 129, 130, 132, 136], "loop": [0, 2, 9, 16, 25, 32, 38, 39, 45, 58, 68, 73, 116, 121, 123, 124, 128, 131, 137, 139], "implement": [0, 12, 29, 32, 35, 37, 38, 39, 44, 46, 48, 52, 53, 54, 55, 61, 64, 67, 68, 70, 71, 73, 74, 87, 88, 90, 94, 101, 105, 106, 113, 115, 116, 121, 122, 123, 124, 127, 128, 130, 134, 135, 136, 137, 139], "necessari": [0, 36, 64, 68, 73, 77, 103, 106, 120, 123, 126, 128, 130, 131, 139], "function": [0, 2, 4, 7, 15, 21, 35, 36, 37, 38, 39, 44, 46, 47, 48, 50, 53, 54, 55, 60, 65, 70, 71, 73, 74, 76, 83, 84, 86, 97, 101, 105, 107, 111, 113, 115, 116, 118, 121, 122, 123, 124, 128, 129, 137, 138], "might": [0, 2, 12, 13, 29, 32, 35, 38, 39, 46, 49, 58, 67, 70, 73, 77, 96, 101, 116, 122, 124, 129, 136], "For": [0, 2, 4, 7, 12, 13, 32, 34, 35, 36, 37, 38, 39, 44, 47, 48, 49, 50, 52, 53, 54, 55, 56, 61, 63, 64, 65, 66, 68, 70, 73, 74, 75, 76, 77, 79, 83, 84, 85, 88, 90, 92, 94, 97, 100, 101, 105, 106, 107, 109, 111, 112, 113, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 134, 135, 136, 137, 139], "instanc": [0, 2, 3, 4, 7, 9, 12, 36, 37, 38, 39, 44, 46, 47, 49, 60, 61, 62, 63, 65, 67, 68, 72, 73, 116, 121, 124, 135, 138, 139], "input": [0, 35, 36, 38, 39, 45, 47, 54, 55, 60, 73, 86, 100, 101, 105, 124, 132, 134, 135, 136, 137, 138, 139], "imag": [0, 9, 17, 28, 31, 36, 38, 39, 46, 49, 53, 61, 63, 64, 66, 68, 69, 72, 73, 120, 121, 122, 123, 124, 126, 127, 128, 129, 131, 132, 135, 136], "sprite": [0, 9, 39, 44, 46, 53, 61, 66, 68, 69, 70, 73, 115, 120, 121, 122, 123, 124, 126, 128, 129, 131, 132, 135, 136], "sheet": [0, 39, 53, 65, 70, 73, 120, 121, 122, 126], "anim": [0, 1, 9, 12, 13, 16, 20, 25, 29, 30, 39, 44, 61, 66, 68, 69, 73, 101, 106, 120, 123, 126, 127, 129, 132, 134, 135, 137, 138, 139], "collis": [0, 39, 45, 49, 73, 128, 129, 132, 134, 138], "detect": [0, 35, 39, 45, 46, 49, 73, 124, 134, 138, 139], "compon": [0, 1, 6, 8, 9, 12, 13, 15, 22, 23, 24, 28, 29, 31, 32, 34, 35, 36, 38, 44, 45, 46, 48, 49, 50, 53, 54, 55, 56, 57, 58, 60, 61, 64, 65, 66, 67, 68, 71, 73, 74, 114, 116, 120, 121, 123, 124, 127, 128, 131, 132, 134, 135, 136, 137, 138, 139], "system": [0, 1, 12, 32, 34, 38, 39, 46, 48, 50, 55, 60, 68, 70, 72, 73, 106, 114, 115, 122, 124, 127, 130, 132, 134, 139], "we": [0, 2, 6, 13, 23, 29, 32, 34, 35, 37, 38, 39, 44, 46, 48, 52, 53, 55, 58, 60, 63, 64, 65, 67, 70, 73, 74, 75, 83, 88, 92, 94, 95, 97, 101, 106, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140], "call": [0, 4, 7, 12, 13, 21, 25, 29, 37, 38, 39, 44, 46, 52, 54, 58, 60, 63, 64, 65, 66, 67, 68, 70, 71, 73, 74, 75, 77, 83, 84, 86, 87, 97, 98, 103, 106, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 131, 132, 135, 136, 137], "fc": [0, 1, 39, 46, 70, 73, 115, 116], "short": [0, 13, 39, 73, 98, 99, 121, 123, 124, 129, 138], "also": [0, 2, 4, 12, 13, 15, 29, 31, 32, 34, 35, 36, 37, 38, 39, 46, 47, 49, 50, 52, 53, 55, 56, 60, 61, 63, 64, 65, 66, 67, 68, 70, 73, 75, 83, 87, 92, 94, 95, 96, 97, 100, 103, 106, 107, 112, 113, 115, 116, 118, 120, 121, 122, 123, 124, 126, 128, 132, 135, 136, 139], "stand": [0, 64, 73, 124], "alon": [0, 73, 112], "packag": [0, 2, 4, 9, 12, 13, 15, 16, 17, 20, 25, 26, 28, 29, 31, 32, 34, 35, 38, 39, 44, 46, 48, 49, 54, 55, 60, 61, 63, 64, 65, 67, 68, 70, 71, 73, 114, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "extend": [0, 6, 7, 9, 12, 13, 15, 16, 17, 20, 21, 23, 25, 28, 34, 35, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 60, 64, 65, 66, 68, 70, 71, 73, 103, 106, 116, 121, 122, 123, 124, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "which": [0, 2, 4, 7, 12, 13, 15, 16, 21, 23, 31, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 58, 63, 64, 65, 66, 67, 68, 70, 71, 73, 74, 75, 78, 79, 80, 81, 85, 86, 87, 88, 90, 91, 92, 94, 95, 96, 97, 98, 99, 101, 102, 103, 105, 106, 109, 110, 112, 113, 115, 116, 118, 120, 121, 122, 123, 124, 127, 128, 129, 130, 132, 134, 135, 136, 138, 139], "can": [0, 2, 3, 4, 6, 7, 9, 12, 13, 15, 16, 20, 23, 25, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 77, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 102, 103, 105, 106, 107, 109, 113, 115, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "found": [0, 2, 15, 16, 29, 39, 49, 63, 73, 90, 91, 109, 118, 122, 124, 127], "bridg": [0, 2, 6, 9, 12, 13, 17, 20, 28, 29, 70, 73, 98, 114, 116], "section": [0, 2, 13, 34, 35, 38, 49, 55, 58, 64, 70, 73, 74, 94, 95, 97, 116, 121, 123, 126, 127, 130, 132], "pick": [0, 38, 70, 73, 123], "choos": [0, 31, 73, 98, 101, 118, 120, 124, 126, 127, 137], "whichev": [0, 73, 124], "part": [0, 34, 37, 38, 39, 44, 48, 55, 58, 65, 66, 71, 73, 78, 83, 86, 88, 89, 95, 101, 107, 118, 121, 122, 123, 124, 134, 137, 139], "want": [0, 2, 4, 12, 13, 15, 28, 29, 32, 34, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 53, 54, 55, 58, 61, 62, 63, 64, 65, 67, 70, 71, 72, 73, 74, 75, 77, 88, 95, 96, 97, 99, 101, 106, 113, 116, 121, 122, 123, 124, 126, 127, 128, 129, 134, 136, 137, 139], "thei": [0, 2, 12, 13, 23, 29, 32, 34, 35, 37, 38, 39, 44, 46, 48, 49, 50, 54, 55, 60, 63, 64, 65, 66, 70, 73, 75, 76, 77, 86, 87, 90, 92, 93, 94, 95, 96, 102, 103, 105, 106, 107, 109, 112, 113, 115, 121, 122, 123, 124, 126, 127, 128, 130, 136, 138, 139], "ar": [0, 2, 3, 9, 12, 13, 15, 16, 23, 29, 30, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 58, 60, 61, 63, 64, 65, 67, 68, 70, 71, 73, 74, 76, 77, 78, 81, 83, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 103, 104, 106, 107, 109, 112, 113, 115, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 135, 136, 137, 138, 139, 140], "all": [0, 2, 6, 13, 15, 16, 20, 21, 28, 29, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 53, 54, 55, 60, 61, 64, 65, 66, 67, 68, 70, 71, 73, 74, 75, 77, 80, 81, 83, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 105, 106, 107, 112, 113, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140], "independ": [0, 37, 50, 56, 73, 74, 113, 120, 121, 124], "The": [0, 2, 3, 4, 7, 12, 13, 15, 16, 17, 21, 23, 24, 30, 31, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 110, 111, 113, 114, 115, 116, 118, 120, 121, 122, 126, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140], "its": [0, 7, 13, 15, 30, 31, 34, 36, 37, 38, 39, 44, 46, 47, 48, 49, 52, 53, 55, 56, 60, 63, 64, 65, 66, 68, 70, 71, 73, 75, 78, 82, 83, 87, 88, 91, 92, 96, 100, 101, 105, 106, 107, 111, 115, 116, 118, 121, 122, 123, 124, 128, 129, 135, 136, 137], "ecosystem": [0, 73], "constantli": [0, 73], "being": [0, 12, 34, 35, 36, 38, 39, 50, 53, 54, 55, 64, 67, 70, 71, 73, 74, 77, 96, 101, 123, 124, 129, 131, 134, 136], "improv": [0, 32, 35, 38, 66, 73, 135, 136], "commun": [0, 73, 105, 118], "so": [0, 2, 4, 7, 12, 13, 29, 32, 34, 35, 36, 37, 38, 39, 44, 46, 48, 49, 54, 55, 58, 60, 61, 63, 64, 65, 66, 67, 68, 70, 71, 73, 74, 75, 80, 83, 88, 95, 97, 98, 101, 102, 106, 107, 109, 112, 116, 118, 120, 121, 122, 123, 124, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "pleas": [0, 32, 34, 35, 46, 68, 73, 75, 80, 120, 126], "feel": [0, 15, 32, 39, 73, 97, 120, 126, 136], "free": [0, 29, 31, 32, 65, 66, 73, 118, 122, 126], "reach": [0, 13, 39, 44, 53, 68, 73, 124, 127, 130, 137], "open": [0, 9, 29, 34, 35, 36, 37, 58, 73, 96, 101, 121, 123, 128, 129, 131, 132], "issu": [0, 29, 63, 73, 118], "pr": [0, 32, 73], "well": [0, 12, 13, 21, 29, 31, 32, 36, 38, 39, 44, 48, 60, 64, 65, 66, 68, 70, 73, 74, 75, 80, 87, 112, 120, 122, 123, 124, 126, 127, 130], "make": [0, 2, 6, 12, 13, 17, 32, 34, 35, 36, 38, 39, 44, 46, 47, 48, 52, 54, 55, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 77, 80, 88, 98, 101, 102, 106, 107, 113, 118, 121, 122, 123, 126, 127, 128, 129, 130, 132, 134, 135, 137, 138, 139, 140], "suggest": [0, 32, 53, 66, 70, 73, 96, 130], "give": [0, 9, 13, 35, 39, 48, 56, 65, 73, 74, 83, 87, 93, 95, 96, 106, 107, 109, 116, 120, 121, 124, 126, 136, 139], "u": [0, 13, 32, 70, 73, 95, 118, 121, 122, 123, 124, 127, 128, 132, 135, 136, 137, 138, 139], "star": [0, 39, 48, 71, 73, 95, 126, 127, 128, 130, 131, 132, 136], "help": [0, 13, 29, 31, 34, 35, 38, 39, 46, 60, 65, 67, 68, 70, 73, 74, 75, 94, 95, 96, 99, 115, 116, 123, 129, 135], "exposur": [0, 73], "grow": [0, 15, 44, 55, 70, 73], "add": [0, 1, 2, 4, 6, 9, 12, 13, 15, 16, 20, 21, 23, 25, 28, 29, 30, 32, 34, 35, 36, 37, 38, 39, 44, 46, 48, 49, 52, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 87, 88, 95, 96, 97, 114, 115, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "depend": [0, 2, 7, 13, 32, 35, 37, 38, 39, 44, 47, 50, 53, 58, 60, 63, 70, 73, 74, 78, 88, 103, 107, 109, 118, 121, 122, 123, 124], "pubspec": [0, 2, 4, 6, 9, 12, 15, 16, 20, 25, 28, 32, 34, 39, 65, 70, 72, 73, 116, 118, 120, 121, 126], "yaml": [0, 2, 4, 6, 9, 12, 15, 16, 20, 25, 32, 34, 39, 63, 65, 72, 73, 116, 118, 120, 121, 126], "run": [0, 4, 13, 15, 32, 34, 35, 36, 38, 39, 44, 46, 47, 58, 60, 63, 65, 66, 73, 74, 77, 79, 84, 88, 90, 95, 96, 97, 98, 105, 106, 109, 121, 122, 124, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "follow": [0, 2, 4, 9, 13, 28, 29, 30, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 49, 52, 53, 58, 63, 64, 65, 67, 68, 70, 72, 73, 74, 75, 77, 78, 80, 81, 83, 87, 91, 92, 93, 95, 97, 98, 101, 105, 107, 113, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 138, 139, 140], "command": [0, 32, 34, 35, 63, 73, 74, 75, 77, 78, 79, 80, 81, 82, 84, 85, 86, 88, 92, 93, 95, 97, 98, 99, 100, 101, 105, 106, 110, 111, 113, 118, 120], "pub": [0, 2, 6, 9, 12, 16, 20, 26, 28, 32, 73, 116, 118], "latest": [0, 2, 63, 73], "version": [0, 2, 12, 32, 34, 39, 54, 65, 70, 73, 118, 121, 124], "dev": [0, 2, 6, 9, 12, 16, 20, 28, 63, 73, 109, 116], "readi": [0, 36, 65, 70, 73, 77, 123, 124, 137], "us": [0, 1, 2, 3, 4, 7, 8, 9, 12, 13, 15, 16, 17, 19, 21, 23, 24, 25, 27, 29, 31, 32, 34, 35, 36, 37, 38, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 58, 60, 61, 62, 63, 65, 66, 67, 68, 70, 71, 72, 73, 75, 76, 77, 81, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 99, 100, 101, 103, 105, 106, 107, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139], "There": [0, 2, 12, 13, 32, 34, 36, 37, 38, 39, 44, 48, 52, 55, 64, 65, 66, 67, 71, 73, 76, 77, 78, 87, 92, 93, 94, 95, 100, 106, 113, 120, 121, 122, 123, 124, 126, 127, 128, 135, 136, 139], "tutori": [0, 32, 73, 118, 120, 121, 123, 124, 126, 127, 132, 134, 135, 136], "folder": [0, 4, 12, 20, 35, 63, 65, 68, 72, 73, 116, 120, 121, 126, 127, 128, 131, 132], "exampl": [0, 2, 4, 8, 10, 12, 13, 15, 16, 19, 23, 25, 29, 32, 35, 36, 37, 39, 44, 46, 47, 48, 50, 52, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 75, 79, 83, 84, 85, 87, 88, 90, 92, 93, 94, 95, 97, 100, 103, 105, 106, 107, 109, 111, 112, 113, 116, 117, 118, 123, 124, 136], "featur": [0, 2, 29, 31, 35, 39, 46, 47, 53, 61, 62, 63, 65, 66, 73, 74, 94, 98, 113, 123, 124, 130, 134, 135, 136, 137, 139], "check": [0, 2, 6, 9, 20, 23, 26, 29, 30, 32, 34, 35, 36, 38, 39, 44, 49, 53, 58, 61, 65, 73, 77, 83, 87, 91, 94, 101, 106, 116, 121, 122, 123, 124, 126, 131, 136, 139], "awesom": [0, 70, 73], "repositori": [0, 34, 36, 53, 63, 68, 73, 74, 118, 121], "contain": [0, 2, 9, 31, 32, 34, 35, 36, 37, 38, 39, 44, 47, 48, 52, 53, 55, 60, 61, 65, 66, 70, 71, 73, 88, 93, 94, 95, 96, 97, 99, 100, 101, 103, 113, 115, 116, 120, 121, 122, 123, 124, 126, 130, 132], "quit": [0, 38, 39, 49, 55, 62, 64, 65, 73, 74, 106, 120, 122, 123, 124, 135, 136], "lot": [0, 12, 15, 35, 38, 67, 73, 118, 120, 122, 123, 124, 135, 136], "good": [0, 12, 35, 38, 53, 65, 73, 74, 77, 80, 95, 97, 106, 116, 120, 123, 139], "articl": [0, 29, 73, 136], "written": [0, 34, 58, 70, 73, 74, 91, 92, 94, 114, 123], "sometim": [0, 32, 35, 36, 38, 39, 66, 73], "requir": [0, 4, 13, 24, 34, 35, 37, 38, 39, 44, 47, 48, 56, 60, 65, 68, 70, 71, 73, 74, 87, 88, 94, 100, 101, 103, 105, 107, 110, 112, 116, 118, 121, 122, 124, 127, 128, 129, 131, 132], "complex": [0, 13, 38, 39, 44, 66, 67, 68, 73, 74, 121, 124, 129], "what": [0, 15, 32, 34, 35, 37, 38, 39, 44, 53, 55, 58, 60, 64, 66, 67, 70, 73, 74, 75, 77, 81, 84, 88, 97, 101, 103, 120, 121, 122, 123, 124, 126, 127, 128, 132, 139], "some": [0, 2, 3, 12, 13, 32, 34, 35, 36, 37, 38, 39, 44, 47, 50, 55, 58, 60, 63, 65, 66, 67, 68, 70, 71, 72, 73, 77, 80, 83, 84, 86, 88, 92, 93, 94, 96, 97, 103, 106, 115, 119, 120, 121, 122, 123, 124, 125, 130, 131, 133, 134, 136, 139], "thi": [0, 2, 4, 7, 9, 12, 13, 15, 16, 17, 21, 25, 29, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 84, 85, 87, 88, 89, 90, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140], "find": [0, 32, 34, 38, 39, 44, 49, 53, 55, 60, 61, 70, 72, 73, 96, 118, 120, 121, 124], "them": [0, 2, 3, 9, 12, 13, 15, 21, 25, 32, 34, 35, 36, 37, 38, 39, 44, 49, 50, 55, 63, 64, 65, 66, 68, 70, 71, 73, 89, 92, 95, 96, 97, 98, 101, 106, 107, 112, 113, 118, 120, 121, 122, 123, 124, 126, 127, 135, 138, 139], "recommend": [0, 2, 4, 29, 34, 36, 37, 38, 39, 44, 64, 65, 67, 73, 77, 92, 98, 116, 118], "servic": [0, 73, 122, 130, 132], "doesn": [0, 12, 13, 32, 36, 37, 38, 39, 63, 65, 66, 71, 73, 75, 94, 95, 123, 126, 130, 137], "t": [0, 12, 13, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 53, 54, 55, 58, 63, 65, 66, 67, 71, 72, 73, 74, 75, 80, 81, 88, 90, 94, 95, 96, 97, 98, 101, 103, 106, 120, 121, 122, 123, 124, 126, 128, 129, 130, 137, 138], "bundl": [0, 17, 31, 34, 60, 65, 73, 98], "ani": [0, 2, 12, 13, 23, 29, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 50, 52, 54, 55, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 73, 74, 75, 78, 80, 83, 86, 87, 92, 93, 94, 95, 97, 98, 99, 100, 101, 103, 105, 106, 107, 116, 118, 120, 121, 123, 124, 126, 127, 128, 134, 135, 137, 139], "network": [0, 1, 16, 17, 73, 118], "mai": [0, 13, 32, 34, 35, 37, 39, 44, 50, 55, 63, 65, 66, 68, 73, 74, 75, 78, 88, 93, 94, 95, 98, 99, 100, 103, 105, 106, 107, 109, 112, 113, 118, 120, 121, 122, 123, 124, 126, 127, 130, 132, 135], "write": [0, 32, 35, 38, 39, 73, 92, 101, 121, 124, 137, 138], "onlin": [0, 63, 73, 122, 126], "If": [0, 6, 7, 12, 13, 15, 28, 29, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 58, 60, 63, 64, 65, 66, 68, 70, 71, 72, 73, 77, 78, 79, 81, 83, 84, 86, 88, 89, 90, 91, 92, 95, 96, 98, 101, 103, 104, 105, 106, 107, 112, 113, 116, 118, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 139], "here": [0, 6, 7, 9, 12, 13, 20, 29, 30, 34, 36, 38, 39, 44, 48, 49, 52, 54, 55, 60, 61, 63, 65, 73, 75, 77, 88, 94, 98, 99, 103, 105, 120, 121, 122, 123, 124, 127, 137, 138, 139], "nakama": [0, 73], "an": [0, 2, 3, 4, 6, 7, 9, 12, 13, 15, 16, 17, 20, 23, 29, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 52, 53, 55, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 73, 74, 75, 77, 78, 79, 80, 81, 84, 86, 87, 88, 89, 90, 91, 92, 93, 95, 96, 97, 98, 101, 103, 105, 106, 107, 111, 112, 113, 115, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 132, 134, 135, 136, 137, 138, 139], "sourc": [0, 29, 32, 34, 36, 38, 44, 58, 65, 73, 101, 120], "server": [0, 34, 73], "design": [0, 13, 20, 31, 37, 70, 73, 74, 122, 124, 126, 128], "modern": [0, 73], "app": [0, 4, 34, 38, 39, 46, 47, 60, 64, 71, 73, 124], "firebas": [0, 73], "dozen": [0, 73], "simpler": [0, 38, 44, 70, 73, 120, 122, 123], "experi": [0, 38, 73], "supabas": [0, 73], "A": [0, 1, 3, 9, 12, 13, 15, 29, 31, 34, 35, 37, 38, 39, 44, 46, 47, 53, 55, 60, 61, 62, 64, 65, 66, 67, 68, 70, 71, 73, 75, 87, 88, 91, 93, 94, 95, 96, 97, 98, 99, 101, 103, 105, 106, 107, 109, 113, 116, 120, 122, 123, 130, 134, 135, 139], "cheaper": [0, 73], "altern": [0, 7, 39, 44, 64, 65, 66, 70, 71, 73, 95, 106, 121, 122, 124, 129, 130, 131, 132], "base": [0, 7, 16, 29, 39, 44, 46, 48, 53, 55, 60, 61, 63, 64, 68, 70, 71, 73, 78, 86, 106, 109, 115, 116, 121, 124, 126, 128, 129, 130, 132, 134, 135, 136, 138], "postgr": [0, 73], "flame_audio": [1, 2, 4, 63], "plai": [1, 2, 3, 5, 13, 39, 52, 54, 55, 58, 61, 68, 72, 74, 75, 106, 120, 123, 124, 127, 130, 132, 136], "multipl": [1, 2, 7, 12, 13, 29, 34, 35, 36, 37, 38, 39, 44, 47, 48, 50, 55, 65, 70, 71, 75, 78, 92, 94, 95, 97, 102, 104, 105, 106, 113, 115, 120, 121, 123, 124, 126, 127, 128, 132, 136], "audio": [1, 3, 4, 5, 63, 72, 106], "file": [1, 2, 5, 9, 16, 20, 25, 28, 29, 31, 32, 34, 35, 36, 39, 45, 63, 65, 72, 74, 77, 95, 106, 120, 121, 122, 124, 126, 127, 128, 129, 130, 132], "simultan": [1, 2, 37, 64, 105, 106], "audioplay": [1, 2, 3, 63], "flame_bloc": 1, "predict": [1, 6], "state": [1, 4, 6, 7, 20, 23, 24, 34, 35, 39, 44, 46, 53, 60, 71, 74, 118, 121, 122, 124, 131, 140], "manag": [1, 2, 4, 15, 20, 21, 23, 32, 71, 129, 132], "librari": [1, 2, 6, 9, 12, 15, 16, 20, 32, 35, 63, 65, 70, 74, 109, 116, 118], "bloc": [1, 6, 7], "flame_fire_atla": [1, 9], "creat": [1, 2, 3, 4, 6, 7, 10, 12, 13, 15, 17, 20, 25, 29, 31, 34, 35, 36, 37, 38, 39, 46, 47, 48, 50, 53, 55, 56, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 76, 77, 80, 83, 86, 93, 101, 105, 106, 113, 115, 116, 120, 121, 122, 123, 124, 126, 127, 130, 131, 132, 134, 136, 137, 138, 139], "textur": [1, 10, 29, 120], "atlas": [1, 9], "fireatla": [1, 10], "flame_forge2d": [1, 12, 13, 38], "box2d": [1, 12], "physic": [1, 12, 13, 38, 44, 68, 70, 95, 120, 130], "engin": [1, 12, 29, 34, 38, 39, 46, 74, 77, 85, 87, 95, 105, 106, 119, 122, 124, 125, 126, 128, 133], "forge2d": [1, 13], "flame_isol": [1, 15], "isol": [1, 15, 32, 36], "offload": 1, "heavi": 1, "comput": [1, 15, 29, 34, 48, 55, 68, 86, 87, 103, 104, 118, 124], "anoth": [1, 13, 32, 35, 37, 38, 39, 44, 46, 47, 48, 49, 52, 55, 60, 63, 64, 68, 70, 71, 76, 77, 91, 93, 94, 95, 96, 97, 98, 103, 105, 120, 121, 122, 123, 124, 128], "thread": [1, 34, 86], "flame_lotti": 1, "lotti": [1, 16], "flame": [1, 2, 4, 6, 12, 13, 15, 16, 20, 23, 24, 25, 26, 29, 31, 32, 34, 36, 38, 39, 44, 46, 48, 49, 52, 53, 54, 55, 58, 61, 62, 66, 67, 68, 71, 72, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140], "flame_network_asset": [1, 65], "fetch": [1, 17, 65, 105], "asset": [1, 2, 3, 9, 16, 17, 20, 25, 37, 39, 46, 65, 72, 74, 121, 135], "over": [1, 2, 7, 37, 38, 39, 44, 47, 55, 64, 86, 92, 96, 106, 120, 122, 123, 124, 127, 128, 130, 131, 136], "flame_oxygen": [1, 116], "replac": [1, 32, 37, 55, 64, 71, 90, 93, 96, 113, 114, 116, 118, 121, 123, 124, 135, 136], "oxygen": [1, 114, 115], "entiti": [1, 12, 32, 37, 39, 68, 103, 114, 115, 116, 121], "flame_r": 1, "interact": [1, 12, 13, 20, 23, 31, 38, 39, 54, 55, 64, 74, 88, 96, 97, 114, 122, 123, 126, 128, 135], "rive": [1, 20], "flame_riverpod": 1, "reactiv": [1, 23, 39], "cach": [1, 5, 17, 23, 34, 37, 38, 39, 44, 46, 63, 65, 66, 99, 100, 121, 122, 126, 127, 128, 135], "data": [1, 9, 23, 25, 35, 39, 46, 60, 65, 75, 99, 115, 120, 124], "bind": [1, 13, 23, 52], "framework": [1, 23, 35, 36, 39, 44, 50, 52, 114, 116], "riverpod": [1, 21, 22], "flame_spin": 1, "spine": [1, 25], "skelet": [1, 25], "flame_splash_screen": 1, "splash": [1, 26, 71], "screen": [1, 13, 25, 26, 31, 37, 38, 46, 47, 48, 49, 50, 53, 55, 58, 60, 62, 64, 66, 70, 71, 106, 118, 121, 122, 123, 124, 127, 128, 129, 130, 132, 134, 135, 136, 137, 138, 139], "flame_svg": [1, 39, 65], "draw": [1, 29, 39, 46, 47, 48, 61, 64, 65, 66, 70, 74, 90, 106, 120, 121, 122], "svg": [1, 39, 65], "flutter_svg": 1, "flame_til": [1, 31], "2d": [1, 13, 31], "tilemap": [1, 29, 30], "level": [1, 2, 4, 6, 12, 20, 29, 31, 35, 36, 37, 38, 39, 44, 50, 64, 70, 71, 72, 77, 92, 94, 95, 120, 121, 123, 127, 128, 130], "editor": [1, 9, 29, 61, 94, 95], "tile": [1, 9, 39, 61, 72], "essenti": [2, 13, 38, 70, 124], "most": [2, 13, 29, 32, 35, 37, 38, 39, 44, 46, 48, 49, 54, 55, 58, 66, 68, 70, 74, 76, 77, 78, 88, 89, 93, 95, 106, 112, 116, 121, 122, 123, 126, 134], "made": [2, 7, 38, 61, 106, 118, 124, 128, 132], "first": [2, 6, 13, 20, 32, 34, 35, 36, 37, 38, 39, 44, 46, 48, 52, 53, 54, 55, 60, 63, 67, 68, 70, 71, 75, 77, 78, 83, 88, 92, 93, 99, 105, 106, 107, 109, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 134, 135, 136, 137, 138, 139], "have": [2, 4, 6, 7, 9, 12, 13, 25, 29, 30, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 52, 53, 55, 56, 58, 60, 64, 65, 66, 68, 70, 74, 75, 78, 81, 84, 87, 88, 91, 92, 93, 94, 95, 96, 97, 98, 101, 103, 106, 107, 112, 113, 115, 116, 118, 119, 120, 121, 122, 123, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139], "list": [2, 12, 35, 38, 39, 44, 46, 47, 48, 49, 50, 52, 60, 65, 66, 70, 76, 87, 92, 98, 99, 102, 103, 104, 105, 106, 111, 116, 121, 122, 123, 124, 127, 128, 136], "after": [2, 12, 13, 20, 32, 35, 38, 39, 44, 46, 47, 48, 52, 55, 62, 63, 65, 68, 71, 75, 77, 78, 83, 84, 88, 89, 94, 95, 96, 98, 100, 103, 104, 106, 107, 113, 116, 118, 121, 122, 123, 124, 129, 136], "instal": [2, 6, 9, 12, 20, 27, 32, 34, 116], "sure": [2, 12, 28, 29, 32, 34, 35, 48, 54, 55, 63, 65, 70, 71, 77, 88, 118, 121, 123, 124], "exist": [2, 4, 7, 30, 32, 37, 46, 50, 53, 54, 55, 64, 66, 68, 71, 81, 88, 113, 121, 123, 124, 127, 130], "path": [2, 4, 34, 36, 44, 48, 70, 71, 74, 98], "default": [2, 4, 12, 13, 17, 23, 32, 34, 37, 38, 39, 44, 46, 47, 48, 49, 52, 53, 54, 55, 56, 60, 61, 63, 65, 66, 68, 70, 71, 101, 106, 112, 113, 115, 116, 118, 121, 124, 127, 134, 137], "directori": [2, 25, 34, 36, 39, 63, 65, 72, 121], "flameaudio": [2, 3, 4, 72], "chang": [2, 4, 6, 7, 12, 13, 23, 34, 35, 37, 39, 44, 47, 49, 53, 55, 60, 63, 66, 68, 70, 72, 77, 86, 88, 93, 103, 109, 113, 118, 121, 122, 123, 124, 127, 128, 129, 130, 131, 134, 136, 139], "own": [2, 4, 15, 29, 32, 34, 36, 37, 38, 39, 44, 47, 56, 64, 65, 67, 68, 70, 75, 83, 116, 121, 123, 124, 139], "audiocach": [2, 3, 4, 72], "below": [2, 12, 34, 35, 37, 39, 44, 48, 49, 54, 55, 64, 67, 70, 71, 76, 78, 80, 87, 94, 95, 109, 120, 122, 123, 124, 126, 132], "someth": [2, 12, 32, 35, 38, 39, 47, 48, 49, 54, 55, 62, 63, 65, 66, 68, 124, 136, 138, 139], "like": [2, 3, 12, 13, 15, 32, 34, 35, 37, 38, 39, 46, 47, 48, 49, 50, 52, 60, 62, 63, 65, 66, 67, 68, 70, 72, 74, 75, 81, 88, 95, 101, 105, 116, 118, 120, 121, 123, 124, 126, 127, 128, 129, 130, 132, 134, 135, 136, 139], "explos": [2, 72, 139], "mp3": [2, 4, 72], "music": [2, 5, 72], "Then": [2, 9, 20, 32, 37, 38, 39, 44, 46, 49, 58, 67, 70, 83, 101, 122, 123, 124, 128], "method": [2, 3, 5, 9, 13, 16, 20, 21, 25, 30, 32, 35, 36, 37, 38, 39, 44, 46, 48, 49, 52, 53, 54, 55, 60, 62, 63, 64, 65, 66, 67, 68, 70, 71, 91, 102, 110, 111, 115, 116, 121, 122, 123, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "dispos": [2, 4, 9, 21, 23, 25, 29, 35, 65, 124], "import": [2, 4, 9, 13, 20, 23, 28, 32, 34, 38, 39, 44, 46, 48, 54, 55, 60, 61, 64, 65, 67, 68, 70, 71, 88, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "dart": [2, 4, 9, 12, 13, 20, 23, 28, 29, 31, 32, 34, 35, 36, 38, 39, 44, 46, 48, 49, 54, 55, 60, 61, 64, 65, 67, 68, 70, 71, 83, 88, 91, 101, 107, 111, 114, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139], "shorter": 2, "reus": [2, 38, 44, 65, 68, 84], "clip": [2, 37, 39, 47], "sound": [2, 3, 52, 120, 123, 126], "longer": [2, 55, 100, 106, 112], "playlongaudio": 2, "looplongaudio": 2, "background": [2, 5, 39, 47, 53, 66, 70, 71, 120, 122, 128, 136], "should": [2, 4, 7, 12, 13, 17, 23, 29, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 49, 52, 53, 55, 56, 58, 60, 63, 65, 70, 71, 74, 77, 88, 89, 92, 96, 98, 101, 102, 105, 106, 112, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138], "paus": [2, 5, 44, 47, 58, 62, 71, 76, 106], "when": [2, 4, 6, 7, 9, 12, 13, 15, 23, 29, 32, 34, 35, 36, 38, 44, 46, 47, 48, 49, 50, 53, 54, 55, 58, 60, 61, 63, 64, 65, 66, 67, 68, 70, 71, 74, 75, 77, 80, 87, 88, 91, 92, 93, 95, 97, 98, 101, 103, 106, 107, 113, 115, 116, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 135, 137, 139], "resum": [2, 5, 44, 50, 84, 85, 98], "bgm": [2, 4], "differ": [2, 4, 13, 17, 29, 34, 36, 37, 38, 39, 44, 53, 55, 56, 64, 66, 68, 70, 72, 74, 75, 78, 82, 86, 88, 90, 92, 93, 95, 101, 105, 107, 113, 115, 116, 118, 120, 121, 122, 123, 124, 126, 129, 135, 136, 138, 139], "between": [2, 13, 38, 39, 44, 47, 53, 60, 64, 68, 71, 89, 90, 94, 100, 105, 121, 123, 124, 129, 137, 139], "optim": [2, 32, 38, 46, 53, 65, 68, 120], "allow": [2, 3, 7, 12, 13, 15, 16, 25, 29, 31, 32, 34, 35, 36, 37, 39, 44, 46, 48, 50, 52, 54, 55, 56, 58, 60, 64, 65, 66, 67, 68, 70, 71, 74, 75, 81, 83, 88, 92, 94, 95, 106, 115, 116, 124, 127, 128, 130, 132, 135], "without": [2, 32, 35, 37, 38, 39, 44, 60, 61, 65, 66, 68, 70, 74, 75, 91, 95, 111, 115, 116, 120, 121, 123, 124, 127], "gap": [2, 121, 129], "iter": [2, 13, 38, 39, 44, 110], "almost": [2, 80, 116, 123, 124, 130, 132], "drop": [2, 29, 66, 71, 124, 129, 130, 132], "frame": [2, 9, 39, 46, 65, 68, 123, 127, 136], "rate": [2, 13, 39, 60, 71, 136, 137], "happen": [2, 37, 38, 46, 54, 55, 63, 90, 97, 106, 121, 123, 124, 128, 129, 137], "whenev": [2, 12, 36, 37, 39, 50, 63, 95, 113, 118], "possibl": [2, 29, 32, 35, 36, 37, 38, 39, 44, 46, 47, 49, 52, 56, 60, 64, 66, 68, 70, 72, 77, 87, 91, 93, 95, 97, 98, 101, 105, 106, 113, 122, 124, 126, 138], "prefer": [2, 35, 60, 81, 124], "former": [2, 13, 65, 124], "length": [2, 13, 35, 39, 44, 48, 60, 64, 71, 96, 101, 106, 107, 109, 112, 123, 124, 127, 128, 129, 130, 132], "do": [2, 6, 7, 12, 13, 15, 29, 32, 35, 36, 37, 38, 39, 44, 48, 49, 53, 54, 55, 58, 60, 63, 65, 66, 67, 68, 71, 74, 75, 77, 83, 84, 87, 88, 92, 95, 96, 101, 103, 105, 106, 112, 116, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 139], "small": [2, 35, 68, 97, 120, 123, 135, 139], "class": [2, 4, 6, 7, 9, 12, 13, 15, 16, 17, 20, 21, 23, 25, 28, 30, 31, 34, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 58, 64, 65, 66, 67, 68, 70, 71, 77, 95, 97, 99, 100, 101, 102, 103, 104, 105, 106, 110, 111, 112, 116, 120, 122, 123, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "via": [2, 13, 24, 34, 35, 39, 44, 47, 55, 62, 64, 65, 68, 70, 71, 74, 86, 88, 93, 100, 101, 105, 112, 120, 123, 130], "track": [2, 4, 25, 38, 46, 48, 55, 58, 68, 130], "let": [2, 6, 13, 37, 39, 44, 63, 68, 114, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 132, 134, 135, 136, 137, 138, 139], "automat": [2, 4, 32, 34, 35, 37, 38, 39, 44, 46, 53, 55, 56, 65, 70, 74, 107, 113, 116, 124, 127, 136, 139], "sent": [2, 4, 32, 46, 106, 124], "come": [2, 12, 13, 38, 39, 46, 60, 65, 74, 75, 76, 95, 98, 107, 116, 118, 120, 122, 123, 124, 126, 128, 131, 132, 139], "back": [2, 4, 15, 36, 38, 39, 44, 46, 50, 63, 64, 66, 70, 76, 83, 98, 101, 120, 122, 123, 124, 126, 127, 128, 129, 130, 139], "foreground": [2, 38, 46, 66], "audiopool": [2, 5], "fire": [2, 12, 48, 50, 54, 55, 68], "quick": [2, 3, 39, 123, 128], "veri": [2, 12, 13, 26, 34, 35, 36, 37, 38, 39, 44, 46, 52, 55, 60, 61, 62, 64, 65, 66, 68, 70, 74, 98, 118, 120, 121, 122, 123, 124, 126, 127, 128, 130, 135, 137, 139], "effici": [2, 38], "manner": [2, 39, 75, 122], "keep": [2, 4, 12, 13, 15, 34, 37, 38, 44, 48, 52, 55, 56, 58, 63, 67, 74, 78, 89, 105, 107, 123, 124, 127, 128, 130], "pool": [2, 3, 38], "": [2, 4, 12, 13, 20, 21, 23, 24, 26, 31, 34, 35, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 60, 61, 63, 64, 65, 66, 67, 68, 70, 71, 74, 75, 81, 83, 86, 88, 91, 95, 96, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 109, 110, 112, 113, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 132, 134, 135, 136, 137, 138, 139], "preload": [2, 3], "given": [2, 4, 9, 34, 38, 44, 48, 60, 68, 70, 75, 76, 77, 79, 84, 85, 87, 88, 92, 100, 105, 106, 107, 122, 123, 124, 128], "fast": [2, 12, 38, 60, 124, 130, 132, 135], "success": [2, 39, 55], "format": [2, 32, 60, 65, 67, 70, 74, 75, 91, 128], "work": [2, 12, 13, 29, 30, 32, 34, 35, 37, 38, 39, 44, 58, 63, 64, 65, 66, 68, 70, 71, 118, 120, 122, 123, 124, 126, 127, 128, 130, 132, 138], "across": [2, 36, 48, 68, 70, 71, 122, 123, 128], "devic": [2, 37, 48, 50, 55, 63, 68, 118, 120, 121, 124], "ogg": 2, "wav": 2, "order": [2, 4, 17, 23, 31, 34, 35, 36, 37, 39, 44, 46, 48, 50, 54, 55, 62, 64, 68, 70, 71, 77, 92, 96, 98, 101, 105, 106, 114, 116, 120, 121, 122, 123, 124, 139], "crucial": [2, 48, 55], "link": [2, 32, 34, 35, 109, 111, 113, 118], "more": [2, 6, 13, 15, 20, 26, 28, 29, 32, 34, 35, 37, 38, 39, 44, 46, 47, 49, 50, 52, 53, 54, 55, 56, 58, 61, 65, 66, 67, 68, 70, 71, 74, 75, 77, 94, 95, 97, 101, 106, 116, 120, 121, 122, 123, 128, 129, 130, 135, 136, 137, 138, 139], "depth": [2, 31, 39, 135], "explan": [2, 49], "both": [2, 12, 13, 34, 35, 37, 38, 39, 44, 49, 60, 61, 64, 66, 67, 68, 70, 76, 90, 92, 95, 96, 101, 106, 120, 121, 122, 123, 124, 128, 129, 134, 139], "pass": [2, 4, 12, 29, 32, 34, 36, 38, 39, 44, 46, 50, 53, 55, 60, 65, 66, 67, 68, 97, 100, 101, 106, 107, 113, 122, 123, 124, 128, 129, 135, 136, 139], "addit": [2, 4, 32, 36, 38, 39, 44, 47, 48, 53, 54, 55, 64, 65, 70, 71, 72, 75, 83, 87, 92, 95, 97, 98, 99, 106, 110, 120, 122, 124, 129], "option": [2, 4, 7, 12, 13, 17, 32, 34, 37, 38, 39, 44, 46, 52, 53, 60, 65, 66, 70, 72, 75, 78, 97, 101, 102, 104, 105, 106, 107, 116, 118, 122, 124], "doubl": [2, 4, 13, 15, 20, 34, 38, 39, 44, 46, 48, 49, 53, 54, 55, 56, 58, 60, 65, 68, 70, 71, 76, 91, 101, 107, 111, 115, 116, 121, 122, 123, 124, 128, 129, 130, 131, 132, 137, 138, 139], "paramet": [2, 4, 13, 32, 35, 36, 38, 39, 44, 50, 52, 56, 60, 65, 70, 72, 95, 96, 103, 109, 124, 128, 129, 132], "volum": [2, 4, 13, 95], "1": [2, 4, 12, 13, 20, 29, 34, 35, 36, 38, 39, 44, 48, 53, 54, 55, 56, 60, 64, 65, 68, 70, 71, 77, 80, 83, 88, 89, 90, 91, 93, 95, 96, 101, 107, 115, 121, 122, 124, 127, 128, 130, 131, 132, 138, 139], "0": [2, 4, 9, 12, 13, 21, 23, 25, 29, 32, 34, 35, 36, 38, 39, 44, 46, 48, 53, 54, 55, 56, 60, 64, 65, 66, 67, 68, 70, 71, 77, 78, 85, 89, 90, 91, 92, 93, 95, 97, 116, 118, 121, 122, 123, 124, 127, 128, 129, 130, 131, 132, 134, 136, 137, 138, 139], "return": [2, 7, 12, 13, 30, 37, 38, 39, 44, 47, 48, 49, 52, 55, 60, 62, 65, 67, 68, 70, 71, 79, 82, 87, 88, 89, 90, 91, 92, 100, 101, 104, 105, 106, 107, 121, 122, 123, 124, 128, 130, 132, 136, 137, 138, 139], "from": [2, 3, 4, 9, 12, 13, 16, 17, 20, 21, 23, 25, 28, 29, 30, 31, 32, 34, 35, 36, 38, 44, 46, 47, 48, 49, 50, 52, 53, 55, 56, 58, 60, 63, 64, 65, 66, 67, 68, 70, 71, 74, 75, 77, 82, 86, 88, 90, 92, 95, 96, 97, 99, 100, 101, 106, 107, 112, 113, 115, 116, 118, 120, 121, 122, 124, 126, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "lib": [2, 9, 29, 118, 120, 121, 126, 127, 128, 129, 130, 131, 132], "stop": [2, 5, 13, 37, 38, 48, 50, 55, 71, 74, 76, 79, 88, 106, 137, 138, 139], "configur": [2, 3, 13, 23, 31, 32, 53, 55, 67, 68, 70, 118], "other": [2, 12, 13, 29, 32, 34, 35, 37, 38, 39, 44, 45, 46, 47, 49, 51, 52, 55, 56, 62, 63, 64, 65, 66, 68, 70, 71, 72, 77, 78, 83, 87, 88, 89, 91, 92, 93, 95, 96, 97, 98, 105, 106, 113, 115, 118, 120, 123, 124, 129, 130, 131, 132, 136, 139, 140], "In": [2, 4, 12, 13, 23, 31, 32, 34, 36, 37, 38, 39, 44, 46, 47, 48, 49, 53, 54, 55, 60, 64, 65, 67, 70, 71, 74, 77, 78, 80, 81, 83, 87, 88, 89, 91, 93, 95, 96, 97, 101, 106, 109, 111, 112, 116, 118, 119, 120, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139], "fact": [2, 52, 64, 70], "alwai": [2, 3, 32, 35, 37, 38, 39, 44, 46, 47, 49, 50, 66, 70, 74, 75, 86, 92, 96, 98, 109, 120, 123, 124, 126, 127, 128, 132, 137], "directli": [2, 12, 21, 34, 35, 38, 39, 44, 46, 49, 50, 52, 60, 61, 65, 67, 68, 70, 116, 123, 136, 139], "gain": [2, 39], "full": [2, 8, 10, 19, 29, 38, 44, 46, 47, 49, 60, 64, 65, 70, 71, 75, 76, 116, 122, 123, 124, 128, 129, 134], "control": [2, 7, 13, 15, 20, 25, 35, 36, 38, 39, 46, 47, 50, 53, 60, 64, 70, 74, 98, 105, 113, 122, 124, 127, 129, 132, 134, 136, 137], "how": [2, 8, 13, 19, 27, 29, 35, 37, 38, 39, 44, 46, 49, 55, 56, 58, 61, 64, 65, 68, 70, 71, 74, 75, 77, 81, 87, 93, 95, 96, 98, 102, 106, 107, 111, 115, 116, 121, 122, 123, 124, 127, 128, 130, 134, 136, 137], "just": [2, 4, 6, 9, 12, 15, 16, 17, 25, 28, 35, 37, 38, 39, 44, 46, 49, 50, 54, 60, 65, 66, 67, 68, 70, 74, 81, 87, 89, 92, 95, 97, 101, 115, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 131, 132, 135, 136, 137], "wrapper": [2, 12, 16, 31, 39, 115, 136], "common": [2, 12, 13, 36, 37, 39, 44, 46, 53, 60, 64, 66, 67, 68, 70, 77, 84, 92, 95, 106, 119, 121, 123, 124, 125, 133], "pre": [2, 3, 4, 35, 38, 63, 65, 66, 70, 122], "load": [2, 3, 4, 9, 13, 16, 17, 20, 25, 28, 29, 31, 36, 37, 38, 39, 46, 47, 53, 66, 68, 72, 100, 106, 113, 120, 121, 122, 123, 124, 130, 135, 136, 137], "store": [2, 4, 9, 15, 17, 34, 36, 44, 47, 48, 55, 65, 74, 77, 86, 87, 92, 93, 95, 97, 99, 101, 106, 107, 112, 113, 120, 122, 123, 124, 126, 130], "memori": [2, 16, 64, 65, 66, 124], "time": [2, 3, 4, 9, 12, 13, 20, 32, 34, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 54, 55, 56, 58, 64, 65, 66, 67, 68, 70, 71, 74, 75, 76, 77, 80, 81, 85, 86, 87, 88, 90, 93, 94, 95, 96, 101, 103, 105, 106, 109, 111, 113, 116, 120, 121, 122, 123, 124, 126, 128, 129, 130, 135, 136, 137, 138], "request": [2, 17, 30, 47, 63, 71, 105, 106, 124], "therefor": [2, 38, 39, 70, 75, 95, 105, 109, 123], "each": [2, 12, 13, 29, 32, 34, 36, 38, 39, 44, 46, 49, 52, 53, 54, 55, 58, 60, 62, 65, 66, 68, 70, 71, 75, 77, 78, 80, 83, 87, 90, 93, 94, 95, 96, 97, 98, 99, 103, 104, 105, 106, 109, 113, 116, 120, 121, 122, 123, 124, 128, 136, 139], "get": [2, 9, 13, 15, 17, 32, 34, 35, 38, 39, 46, 50, 52, 53, 55, 60, 61, 63, 65, 67, 70, 75, 88, 90, 97, 101, 115, 116, 118, 121, 122, 123, 124, 126, 127, 128, 129, 130, 132, 136, 137, 138], "delai": [2, 3, 44, 85, 121, 124], "await": [2, 6, 9, 13, 16, 17, 20, 23, 25, 28, 29, 36, 39, 46, 53, 60, 65, 66, 68, 70, 71, 72, 101, 105, 106, 115, 121, 122, 123, 124, 127, 128, 131, 132, 134, 135, 136, 137, 138, 139], "begin": [2, 12, 35, 44, 48, 55, 75, 94, 120, 122, 123, 124, 126, 127, 128, 135], "onload": [2, 4, 6, 9, 12, 13, 16, 20, 23, 25, 28, 29, 34, 37, 38, 39, 44, 46, 48, 53, 54, 55, 60, 64, 65, 66, 70, 71, 101, 116, 121, 122, 123, 124, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "smoothli": [2, 60], "To": [2, 4, 6, 9, 12, 13, 15, 16, 17, 20, 25, 28, 29, 37, 38, 39, 46, 49, 52, 53, 55, 58, 60, 61, 63, 65, 66, 67, 75, 112, 113, 115, 116, 118, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 139], "loadal": [2, 65, 68, 127, 128, 132], "final": [2, 7, 9, 12, 13, 16, 17, 20, 25, 28, 29, 34, 36, 37, 38, 39, 44, 46, 48, 49, 52, 53, 54, 55, 60, 62, 64, 65, 66, 68, 70, 71, 72, 77, 78, 100, 101, 109, 112, 113, 116, 118, 120, 121, 122, 123, 124, 126, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "clear": [2, 32, 35, 38, 48, 65, 71, 77, 100, 101, 106, 107, 112, 123, 124], "remov": [2, 4, 13, 23, 29, 32, 34, 38, 39, 44, 46, 48, 50, 52, 55, 62, 63, 64, 65, 68, 71, 95, 96, 101, 107, 118, 122, 123, 124, 128, 129, 130, 132, 135, 137, 139], "ha": [2, 12, 13, 15, 29, 32, 34, 35, 37, 38, 44, 46, 48, 49, 50, 52, 53, 55, 56, 60, 64, 65, 66, 67, 68, 70, 72, 75, 77, 87, 92, 93, 95, 96, 97, 101, 104, 106, 107, 109, 112, 113, 115, 116, 121, 122, 123, 124, 128, 130, 132, 135, 136, 137, 138], "been": [2, 9, 25, 32, 35, 39, 46, 66, 101, 106, 107, 112, 121, 123, 124, 137], "clearcach": [2, 29, 46, 65], "whole": [2, 12, 29, 38, 39, 46, 49, 53, 60, 65, 124, 129, 137], "local": [3, 13, 17, 32, 38, 39, 48, 55, 65, 76, 81, 87, 88, 92, 93, 96, 113, 118, 122], "minim": [3, 52], "singl": [3, 6, 7, 13, 29, 31, 34, 35, 36, 37, 38, 39, 44, 46, 47, 55, 56, 60, 65, 67, 70, 80, 85, 89, 91, 93, 94, 95, 96, 97, 98, 100, 101, 103, 104, 105, 107, 109, 110, 111, 112, 113, 120, 121, 122, 123, 124, 127], "same": [3, 4, 12, 13, 32, 34, 36, 37, 38, 39, 44, 47, 48, 49, 50, 55, 60, 61, 63, 64, 65, 66, 68, 70, 71, 75, 77, 79, 81, 87, 88, 92, 93, 96, 97, 98, 104, 105, 106, 107, 111, 116, 118, 121, 122, 123, 124, 127, 128, 129, 131, 134, 139], "usual": [3, 13, 34, 38, 39, 44, 46, 48, 64, 66, 71, 88, 97, 120, 121, 124, 139], "laser": 3, "shoot": [3, 38, 52, 65, 137, 138, 139, 140], "ship": [3, 68, 136, 137], "jump": [3, 39, 44, 74, 76, 81, 82, 84, 88, 95, 97, 105, 106, 124, 127, 128, 130, 132], "platform": [3, 29, 36, 45, 46, 50, 58, 70, 116, 126, 127, 129, 130, 140], "minimum": [3, 38, 121, 139], "start": [3, 15, 20, 30, 32, 35, 36, 38, 39, 44, 46, 47, 48, 50, 55, 58, 60, 65, 66, 71, 77, 79, 80, 93, 94, 95, 97, 98, 101, 103, 104, 105, 106, 109, 112, 115, 120, 122, 123, 126, 128, 129, 130, 131, 132, 136, 137, 138, 139, 140], "size": [3, 9, 13, 15, 16, 20, 25, 28, 29, 34, 36, 37, 38, 44, 46, 48, 49, 53, 54, 55, 56, 58, 61, 64, 65, 68, 70, 71, 115, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "maximum": [3, 13, 35, 37, 38, 124], "player": [3, 6, 12, 37, 38, 39, 49, 50, 53, 65, 72, 74, 84, 87, 88, 90, 95, 96, 98, 101, 105, 106, 113, 124, 126, 127, 128, 129, 130, 134, 136, 137, 138, 139], "re": [3, 4, 34, 35, 36, 38, 39, 44, 55, 67, 75, 82, 88, 103, 111, 118, 120, 122, 123], "mani": [3, 13, 31, 35, 37, 38, 39, 58, 60, 63, 65, 66, 74, 79, 82, 83, 84, 88, 89, 100, 107, 112, 120, 124, 126, 127, 132, 135, 136], "helper": [3, 35, 36, 39, 51, 70, 116, 121, 122, 136], "createpool": 3, "global": [3, 32, 39, 65, 70, 72, 76, 77, 80, 86, 93, 101, 113, 121, 122, 128, 129, 135, 136, 137, 138, 139], "With": [4, 6, 9, 37, 44, 46, 58, 65, 68, 74, 118, 128, 136, 137, 139], "regard": [4, 38, 70], "applic": [4, 15, 32, 34, 37, 38, 39, 46, 47, 60], "lifecycl": [4, 21, 23], "termin": [4, 32, 97, 105, 118, 124], "current": [4, 7, 13, 15, 29, 32, 34, 35, 37, 38, 39, 44, 46, 48, 49, 50, 52, 53, 55, 56, 58, 60, 63, 64, 65, 70, 71, 76, 79, 80, 82, 84, 87, 88, 94, 96, 103, 105, 106, 121, 122, 123, 124, 129, 131, 132, 134, 135, 139], "similarli": [4, 13, 38, 39, 52, 55, 66, 77, 96, 106], "manual": [4, 13, 32, 34, 35, 37, 38, 39, 48, 55, 64, 65, 99, 103, 137, 138], "support": [4, 12, 13, 15, 28, 29, 30, 31, 38, 47, 53, 54, 55, 64, 65, 66, 68, 74, 76, 77, 92, 124], "properli": [4, 12, 38, 64, 65, 96, 122, 123, 124], "observ": [4, 13, 37], "must": [4, 12, 13, 21, 32, 34, 35, 36, 44, 46, 48, 52, 54, 55, 65, 66, 70, 75, 77, 78, 81, 85, 87, 88, 89, 90, 93, 95, 96, 97, 98, 99, 101, 106, 107, 113, 118, 121, 124, 128, 130, 132], "regist": [4, 13, 39, 49, 55, 71, 101, 107, 111, 113, 115, 116, 129, 130], "initi": [4, 12, 13, 23, 26, 32, 36, 38, 39, 44, 49, 56, 64, 65, 68, 77, 80, 93, 101, 106, 113, 116, 121, 122, 123, 124, 135, 137, 140], "note": [4, 6, 14, 29, 32, 34, 35, 38, 39, 44, 46, 47, 52, 54, 55, 56, 60, 65, 67, 70, 83, 88, 92, 96, 101, 106, 112, 113, 120, 121, 122, 123, 124, 127, 132, 135, 136, 137, 138], "point": [4, 13, 29, 36, 38, 44, 46, 48, 55, 60, 64, 71, 89, 90, 91, 94, 98, 118, 120, 121, 122, 123, 124, 126, 128, 134, 135, 139, 140], "where": [4, 12, 13, 15, 29, 32, 34, 35, 36, 37, 38, 39, 44, 48, 49, 55, 56, 63, 65, 67, 68, 70, 71, 72, 74, 77, 83, 88, 90, 93, 97, 99, 100, 112, 120, 121, 122, 123, 124, 127, 128, 129, 130, 131, 134, 135, 136, 138, 139], "widgetsbind": 4, "alreadi": [4, 32, 34, 35, 37, 39, 44, 46, 48, 49, 53, 54, 55, 60, 64, 65, 70, 71, 77, 89, 91, 95, 107, 112, 116, 118, 120, 121, 123, 124, 126, 136, 137], "best": [4, 34, 64, 66, 70, 74, 101, 112, 124, 126, 128, 129], "practic": [4, 64], "put": [4, 13, 15, 28, 35, 37, 47, 77, 81, 84, 121, 123, 124, 131, 137], "insid": [4, 6, 7, 9, 21, 23, 35, 36, 37, 38, 39, 47, 48, 49, 52, 58, 60, 61, 62, 65, 70, 71, 77, 92, 94, 95, 96, 116, 120, 121, 123, 126, 135], "case": [4, 13, 29, 32, 34, 35, 36, 37, 38, 39, 44, 48, 55, 60, 64, 65, 66, 70, 77, 81, 83, 88, 89, 95, 106, 112, 120, 121, 122, 123, 124, 128, 129, 135, 136, 138, 139], "done": [4, 6, 9, 34, 35, 38, 39, 46, 53, 77, 121, 124, 127, 130, 131, 134], "still": [4, 32, 37, 39, 44, 48, 54, 55, 66, 70, 80, 95, 98, 101, 103, 106, 120, 123, 124], "adventur": [4, 75, 98], "appropri": [4, 35, 65, 105, 106, 127, 128, 130, 131], "structur": [4, 32, 34, 37, 45, 46, 47, 64, 65, 66, 67, 70, 120, 123, 126, 135], "explain": [4, 35, 63, 77, 94, 127, 128, 129], "document": [4, 31, 33, 38, 46, 49, 52, 53, 54, 55, 60, 64, 65, 76, 77, 87, 94, 95, 96, 111, 116, 121, 124, 130], "static": [4, 13, 34, 37, 39, 44, 48, 53, 54, 55, 66, 67, 70, 121, 122, 123, 124, 134, 135, 136, 138, 139], "desir": [4, 13, 39, 44, 47, 60, 64, 68, 70, 86, 90, 126], "string": [4, 47, 60, 62, 70, 71, 77, 81, 83, 84, 87, 88, 92, 93, 99, 100, 101, 103, 104, 105, 107, 109, 110, 111, 112, 113, 120, 122, 123, 124], "locat": [4, 13, 34, 35, 36, 37, 44, 55, 65, 72, 96, 97, 109, 118, 122, 124], "boss": 4, "fight": [4, 98, 106], "382": 4, "world": [4, 12, 13, 38, 46, 58, 92, 95, 96, 115, 116, 121, 122, 123, 129, 130, 132], "map": [4, 9, 12, 13, 31, 34, 37, 38, 39, 44, 47, 48, 55, 62, 68, 71, 72, 99, 109, 110, 112, 113, 129, 130], "25": [4, 38, 39, 64, 71, 85, 88, 94, 122, 123, 124, 137, 138, 139], "handl": [4, 6, 9, 13, 15, 38, 39, 44, 48, 49, 52, 53, 54, 55, 60, 64, 65, 105, 114, 123, 124, 137], "prevent": [4, 13, 38, 39, 71, 90, 96, 129, 130, 132], "auto": [4, 32, 78, 84, 124, 128, 129, 130, 131, 132, 137], "focu": [4, 34, 47, 50, 64, 114, 126, 127], "gener": [5, 13, 31, 32, 34, 35, 36, 37, 39, 44, 46, 50, 54, 55, 64, 65, 66, 68, 70, 74, 90, 96, 98, 100, 113, 120, 121, 122, 123, 130], "offer": [6, 39, 55, 60, 65, 68, 88, 139], "natur": [6, 39, 44, 62, 70, 83, 95], "similar": [6, 7, 13, 38, 39, 44, 50, 52, 55, 56, 68, 70, 71, 76, 79, 80, 82, 84, 90, 95, 96, 103, 122, 123, 124, 132, 138], "flutter_bloc": 6, "cubit": 6, "flamegam": [6, 9, 12, 15, 16, 20, 23, 25, 28, 32, 34, 37, 38, 44, 48, 49, 52, 53, 54, 55, 60, 61, 64, 66, 68, 70, 71, 118, 120, 121, 122, 123, 124, 126, 127, 130, 132, 134, 135, 136, 137, 138, 139], "regul": 6, "occur": [6, 12, 13, 23, 34, 35, 48, 49, 54, 55, 78, 88, 92, 103, 105, 106, 113, 123, 124, 130, 131, 139], "throughout": [6, 39, 46, 67], "entir": [6, 34, 48, 49, 55, 64, 66, 70, 121, 123, 127, 128], "seen": [6, 9, 12, 20, 35, 37, 38, 39, 49, 70, 74, 84, 116, 124, 138], "instruct": [6, 9, 12, 20, 32, 44, 63, 76, 94, 116], "assum": [6, 13, 34, 38, 47, 83, 88, 105, 111, 118, 119, 121, 125, 127, 128, 132, 133, 140], "inventori": [6, 62, 71], "avail": [6, 7, 21, 35, 36, 37, 39, 47, 48, 55, 61, 63, 64, 65, 66, 68, 70, 75, 77, 99, 101, 107, 113, 118, 121, 123, 124, 126, 131, 132], "our": [6, 12, 34, 39, 58, 63, 116, 120, 121, 123, 124, 126, 127, 128, 129, 130, 132, 134, 135, 136, 137, 138, 139], "flameblocprovid": [6, 8], "mygam": [6, 15, 16, 28, 38, 39, 46, 47, 49, 52, 53, 60, 62, 65, 66, 70, 71, 101, 124], "overrid": [6, 7, 9, 12, 13, 15, 16, 20, 21, 23, 25, 28, 29, 34, 37, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55, 60, 64, 65, 66, 68, 70, 71, 101, 106, 116, 121, 122, 123, 124, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "futur": [6, 9, 13, 16, 20, 23, 25, 28, 32, 34, 35, 36, 37, 38, 39, 44, 46, 48, 53, 54, 55, 60, 64, 65, 66, 71, 101, 105, 106, 118, 121, 122, 123, 124, 127, 128, 131, 132, 134, 135, 136, 137, 138, 139], "void": [6, 7, 9, 12, 13, 15, 16, 20, 21, 23, 25, 28, 29, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 53, 54, 55, 58, 60, 64, 65, 66, 68, 70, 71, 72, 83, 101, 105, 106, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "async": [6, 9, 13, 16, 20, 23, 25, 28, 34, 36, 37, 38, 39, 44, 46, 48, 53, 54, 55, 60, 64, 65, 66, 71, 101, 121, 122, 123, 124, 127, 128, 131, 132, 134, 135, 136, 137, 138, 139], "playerinventorybloc": 6, "playerinventoryst": 6, "children": [6, 7, 12, 37, 38, 44, 46, 56, 58, 66, 71, 72, 124, 131, 132], "abov": [6, 12, 38, 39, 49, 56, 58, 68, 70, 88, 95, 109, 111, 118, 122, 123, 124, 128, 136, 137, 138], "now": [6, 9, 29, 35, 37, 38, 44, 55, 63, 65, 66, 74, 75, 88, 106, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "access": [6, 9, 21, 24, 29, 30, 31, 34, 36, 46, 55, 60, 67, 70, 86, 87, 93, 97, 99, 101, 103, 106, 107, 111, 113, 116, 118, 121, 124, 127, 128, 135, 137], "than": [6, 12, 13, 15, 29, 35, 36, 37, 38, 39, 44, 46, 58, 74, 75, 88, 89, 90, 92, 98, 115, 120, 122, 123, 124, 129, 131, 137, 139], "one": [6, 7, 9, 13, 15, 29, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 50, 53, 55, 64, 68, 70, 71, 72, 74, 75, 77, 80, 82, 88, 91, 92, 94, 95, 96, 97, 98, 105, 106, 107, 115, 122, 123, 124, 126, 135, 136, 137, 138, 139], "flamemultiblocprovid": [6, 8], "fashion": [6, 68], "playerstatsbloc": 6, "playerstatsst": 6, "listen": [6, 7, 12, 21, 23, 38, 39, 50, 54, 135, 139], "two": [6, 12, 13, 32, 34, 37, 38, 39, 44, 46, 52, 53, 54, 60, 65, 66, 67, 68, 70, 71, 72, 74, 77, 92, 95, 101, 106, 107, 109, 121, 122, 123, 124, 127, 128, 129, 137, 139], "approach": [6, 17, 36, 37, 38, 39, 54, 55, 60, 65, 68, 77, 121, 123, 124, 128], "By": [6, 9, 13, 17, 23, 38, 39, 46, 47, 48, 52, 54, 55, 56, 66, 68, 71, 74, 77, 106, 112, 116, 118, 120, 128, 134, 139], "flamebloclisten": [6, 8], "positioncompon": [6, 21, 23, 32, 34, 38, 44, 48, 49, 52, 53, 54, 55, 56, 58, 66, 70, 71, 116, 121, 122, 123, 124, 130, 131, 132, 134, 135, 139], "updategear": 6, "Or": [6, 35, 37, 38, 65, 67, 106], "mixin": [6, 7, 12, 15, 21, 23, 34, 36, 39, 44, 49, 52, 54, 60, 66, 68, 71, 106, 123, 124, 127, 128, 130, 135, 137, 139], "onnewst": [6, 7], "simpli": [6, 16, 35, 38, 39, 44, 48, 58, 64, 68, 71, 88, 92, 95, 96, 107, 116, 118, 120, 123, 128, 129, 130, 132, 135, 138, 139], "flameblocread": [6, 8], "appli": [6, 13, 35, 37, 39, 44, 46, 52, 64, 66, 70, 71, 80, 92, 118, 124, 130, 132, 136], "takehit": [6, 39], "const": [6, 13, 25, 34, 36, 38, 44, 46, 47, 48, 53, 55, 60, 61, 64, 65, 67, 68, 70, 71, 115, 121, 122, 123, 124, 127, 128, 131, 132, 138, 139], "playerdamag": 6, "limit": [6, 11, 12, 37, 38, 44, 64, 68, 94, 107], "onli": [6, 7, 29, 32, 34, 35, 37, 38, 39, 44, 46, 48, 49, 52, 53, 54, 55, 56, 58, 65, 66, 68, 70, 71, 80, 82, 88, 90, 92, 93, 94, 95, 96, 103, 105, 106, 115, 116, 118, 121, 122, 124, 127, 128, 129, 132, 134, 136, 137, 138], "live": [7, 12, 39, 53, 63, 68, 74, 123, 124, 127, 132], "while": [7, 13, 31, 37, 44, 46, 47, 48, 55, 56, 65, 70, 74, 88, 93, 95, 100, 105, 106, 109, 116, 122, 123, 124, 127, 128, 129, 132, 138], "aliv": [7, 68], "inject": 7, "di": 7, "widget": [7, 22, 23, 34, 35, 39, 45, 46, 48, 50, 52, 55, 56, 59, 62, 65, 68, 70, 71, 118, 120, 121, 122, 123, 124, 126, 132, 134, 135], "within": [7, 13, 31, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 49, 50, 54, 55, 56, 68, 70, 71, 74, 76, 78, 80, 88, 91, 93, 96, 97, 99, 103, 104, 105, 106, 109, 110, 111, 113, 121, 122], "subtre": [7, 38, 53], "new": [7, 9, 13, 15, 25, 34, 35, 36, 37, 38, 39, 46, 47, 49, 54, 55, 58, 60, 64, 65, 67, 70, 71, 77, 80, 93, 100, 106, 111, 113, 116, 118, 121, 122, 123, 126, 127, 128, 129, 130, 132, 134, 135, 136, 137, 138, 139, 140], "rest": [7, 13, 36, 38, 39, 68, 122, 124, 128, 130, 131, 137], "bloca": 7, "blocast": 7, "portion": [7, 9, 135], "tree": [7, 28, 29, 36, 39, 44, 46, 47, 50, 53, 58, 61, 62, 65, 66, 68, 70, 121, 134, 135], "valu": [7, 13, 20, 21, 23, 29, 35, 38, 39, 44, 46, 49, 52, 55, 56, 60, 65, 68, 71, 76, 77, 80, 81, 83, 86, 87, 88, 89, 90, 91, 92, 95, 96, 99, 101, 103, 106, 107, 109, 111, 112, 113, 116, 121, 122, 123, 124, 128, 129, 130, 132, 136, 137], "down": [7, 13, 25, 34, 38, 39, 44, 48, 49, 55, 60, 68, 70, 81, 89, 116, 120, 122, 123, 127, 128, 136, 137, 139, 140], "blocb": 7, "blocbstat": 7, "invok": [7, 30, 44, 55, 83, 105, 106, 107, 122, 124], "respons": [7, 13, 37, 48, 54, 55, 65, 74, 101, 106, 107, 135], "fine": [7, 39, 87, 124, 135], "grain": [7, 39], "listenwhen": 7, "previou": [7, 29, 32, 34, 37, 38, 48, 55, 84, 89, 97, 121, 122, 123, 124, 129, 135], "boolean": [7, 78, 88, 91, 92, 101, 122], "true": [7, 12, 13, 16, 25, 29, 34, 38, 39, 44, 46, 47, 48, 49, 50, 52, 53, 55, 56, 58, 60, 61, 63, 66, 70, 71, 75, 78, 88, 91, 92, 93, 97, 98, 100, 101, 103, 104, 106, 107, 112, 113, 115, 121, 122, 123, 124, 129, 130, 131, 132, 137, 138, 139], "fals": [7, 12, 13, 29, 34, 38, 39, 44, 46, 48, 50, 52, 53, 55, 56, 63, 66, 71, 77, 78, 88, 91, 92, 93, 94, 98, 99, 101, 106, 112, 113, 122, 123, 124, 130, 131, 132, 137, 138, 139], "gamestatsbloc": 7, "gamestatsst": 7, "previousst": 7, "newstat": 7, "determin": [7, 13, 36, 39, 44, 62, 64, 93, 121, 122, 123, 124, 128, 130, 132], "whether": [7, 34, 35, 36, 38, 39, 44, 47, 48, 52, 54, 55, 60, 64, 74, 87, 91, 98, 101, 106, 107, 122, 123, 124, 139], "stuff": [7, 88], "componenta": 7, "bool": [7, 13, 34, 38, 39, 44, 47, 48, 49, 50, 55, 56, 71, 77, 87, 90, 93, 100, 101, 103, 104, 106, 107, 109, 112, 113, 121, 122, 123, 124, 130, 132], "playerst": 7, "super": [7, 12, 13, 17, 20, 21, 23, 34, 38, 39, 44, 46, 47, 48, 53, 54, 55, 60, 68, 70, 71, 122, 123, 124, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "read": [7, 30, 32, 35, 38, 46, 49, 70, 74, 95, 101, 106, 116, 130, 136], "trigger": [7, 30, 35, 38, 39, 49, 52, 55, 68, 106, 124, 130], "event": [7, 12, 13, 20, 34, 38, 39, 44, 47, 50, 51, 53, 60, 71, 83, 90, 105, 106, 121, 123, 124, 130, 132, 135, 136, 137, 138, 139], "reader": [7, 35, 92], "inventoryread": 7, "inventorycubit": 7, "inventoryst": 7, "var": [7, 13, 38, 39, 48, 60, 64, 68, 71, 92, 122, 123, 124, 128, 131, 132], "overview": [8, 10, 11, 14, 19, 22, 27, 35], "fa": 9, "refer": [9, 35, 37, 39, 44, 46, 75, 93, 120, 121, 123, 124, 132], "name": [9, 29, 34, 35, 36, 39, 46, 53, 55, 63, 65, 66, 70, 71, 74, 75, 77, 79, 80, 83, 84, 87, 88, 91, 92, 95, 96, 97, 98, 99, 100, 101, 103, 106, 107, 109, 110, 111, 112, 113, 115, 116, 118, 120, 124, 126, 127, 139], "kei": [9, 16, 34, 36, 47, 48, 50, 52, 55, 62, 65, 99, 106, 113, 129, 130, 132], "tool": [9, 20, 31, 32, 34, 39, 122, 126], "select": [9, 29, 53, 58, 74, 88, 98, 105, 106, 113, 118, 124], "width": [9, 13, 34, 37, 39, 55, 56, 61, 65, 68, 70, 71, 95, 109, 121, 122, 123, 124, 128, 129, 132, 134, 135], "height": [9, 13, 34, 37, 39, 56, 61, 65, 68, 70, 71, 121, 122, 123, 124, 128, 132, 134, 135, 137, 138, 139], "press": [9, 36, 39, 50, 52, 53, 61, 106, 118, 123, 124, 130, 132], "okai": 9, "click": [9, 39, 53, 55, 74, 106, 118, 120, 123, 126], "plu": [9, 122, 129], "button": [9, 34, 39, 48, 50, 53, 55, 61, 71, 106, 118, 123, 132], "top": [9, 12, 13, 32, 35, 36, 37, 38, 39, 47, 49, 53, 56, 60, 62, 63, 68, 70, 71, 92, 116, 118, 121, 122, 123, 124, 127, 128, 129, 130, 131, 134, 137, 138, 140], "left": [9, 13, 34, 37, 38, 39, 53, 56, 60, 70, 92, 118, 122, 123, 124, 127, 128, 129, 130, 131, 132, 134, 137], "type": [9, 13, 24, 29, 30, 37, 38, 39, 44, 54, 58, 64, 65, 66, 70, 71, 77, 78, 80, 81, 83, 87, 88, 101, 107, 109, 111, 118, 124, 128, 132, 136, 139], "see": [9, 13, 32, 34, 35, 37, 38, 39, 46, 49, 50, 52, 53, 54, 55, 58, 61, 62, 64, 65, 66, 68, 70, 74, 75, 76, 95, 96, 97, 116, 118, 120, 121, 122, 123, 124, 127, 128, 129, 130, 131, 132, 134, 135, 139], "preview": 9, "right": [9, 15, 35, 38, 39, 44, 55, 56, 60, 65, 70, 74, 92, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 132, 135, 137, 139], "panel": [9, 39, 70, 106, 118], "spriteanim": [9, 39, 61, 65, 68, 127, 129, 132, 136], "count": [9, 38, 68, 88, 112, 113, 124], "step": [9, 36, 38, 39, 44, 58, 63, 64, 68, 70, 71, 101, 118, 119, 120, 121, 123, 124, 125, 126, 130, 131, 132, 133, 134, 135, 136, 137, 138], "millisecond": [9, 36, 55, 124], "checkbox": 9, "onc": [9, 12, 29, 32, 34, 39, 44, 47, 52, 53, 54, 64, 65, 66, 68, 71, 80, 88, 93, 105, 121, 122, 123, 124, 127, 128, 129, 130, 138], "edit": [9, 31, 94, 118], "download": [9, 31, 118], "icon": [9, 123], "sever": [9, 13, 35, 37, 38, 39, 55, 64, 65, 70, 71, 75, 77, 84, 86, 87, 95, 97, 98, 101, 106, 113, 121, 122, 123, 124], "smaller": [9, 13, 35, 65, 74, 84, 97, 123, 137], "pack": [9, 29], "togeth": [9, 13, 37, 39, 49, 68, 92, 120, 121, 123, 126, 130, 131], "reduc": [9, 65, 89, 92, 127, 129, 139], "overal": [9, 34, 35, 121], "dimens": [9, 29, 37, 38, 39, 61, 120, 121, 122, 134], "number": [9, 29, 32, 36, 38, 39, 44, 58, 64, 65, 77, 78, 80, 83, 85, 87, 88, 92, 93, 94, 97, 101, 106, 107, 111, 113, 122, 123, 128, 129, 130, 131, 139], "speed": [9, 12, 13, 37, 39, 44, 48, 60, 68, 106, 124, 127, 128, 136], "up": [9, 13, 32, 36, 38, 39, 44, 46, 49, 52, 55, 60, 67, 71, 88, 89, 95, 96, 97, 98, 105, 106, 109, 116, 120, 121, 122, 123, 124, 128, 134, 137, 140], "loadasset": 9, "loadfireatla": 9, "getsprit": [9, 65], "sprite_nam": 9, "getanim": 9, "animation_nam": 9, "either": [9, 12, 30, 31, 35, 37, 38, 39, 44, 46, 48, 50, 53, 55, 60, 63, 64, 65, 67, 68, 70, 71, 74, 76, 77, 79, 81, 84, 88, 89, 92, 93, 97, 106, 109, 115, 121, 122, 124], "retriev": [9, 30, 38, 39, 60, 65, 100, 122, 123, 128], "examplegam": 9, "late": [9, 13, 20, 21, 23, 25, 34, 38, 39, 44, 48, 49, 55, 66, 71, 101, 122, 123, 124, 127, 128, 129, 131, 132, 135, 136, 137, 138, 139], "_atla": 9, "spritecompon": [9, 46, 49, 53, 66, 128, 129, 131, 132, 135, 136], "vector2": [9, 12, 13, 16, 20, 21, 23, 25, 28, 29, 34, 35, 36, 38, 39, 44, 46, 48, 53, 54, 55, 64, 65, 66, 68, 70, 71, 115, 121, 122, 123, 124, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "50": [9, 13, 38, 39, 44, 48, 54, 61, 64, 66, 70, 98, 115, 134, 135, 137, 138, 139], "posit": [9, 12, 13, 21, 23, 25, 28, 29, 32, 34, 37, 38, 44, 48, 49, 53, 54, 55, 56, 58, 60, 64, 65, 66, 68, 70, 71, 89, 101, 107, 115, 120, 121, 122, 123, 124, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "spriteanimationcompon": [9, 53, 58, 65, 127, 129, 130, 132, 136, 137, 138, 139], "150": [9, 39, 53, 60, 64, 71, 83, 121, 130, 132, 135, 136, 137, 138, 139], "100": [9, 13, 28, 32, 34, 35, 36, 38, 39, 44, 48, 53, 54, 55, 60, 64, 68, 70, 71, 77, 78, 83, 93, 98, 101, 115, 121, 122, 123, 124, 131, 132, 134, 135, 136, 137, 138, 139], "atla": [10, 25, 29, 65], "usag": [10, 13, 14, 22, 39, 44, 66, 68, 70, 71], "forge2dgam": [11, 13], "bodycompon": [11, 13], "contact": [11, 13, 38, 139], "callback": [11, 38, 39, 44, 46, 52, 53, 60, 70, 101, 105, 106, 123, 124], "joint": [11, 38], "built": [11, 12, 34, 37, 38, 46, 47, 65, 70, 71, 83, 107, 111, 116, 121, 122, 127, 128, 129, 130, 132, 134], "constantvolumejoint": 11, "distancejoint": 11, "frictionjoint": 11, "gearjoint": 11, "motorjoint": 11, "mousejoint": 11, "prismaticjoint": 11, "prismat": 11, "motor": 11, "pulleyjoint": 11, "revolutejoint": 11, "revolut": 11, "ropejoint": 11, "weldjoint": 11, "breakabl": 11, "bodi": [11, 12, 36, 38, 95], "blue": [12, 34, 39, 55, 64, 68, 81, 120, 123, 128, 135], "maintain": [12, 13, 16, 35, 37, 39, 71, 113, 130, 138, 140], "port": [12, 34, 74], "specif": [12, 13, 17, 38, 54, 55, 60, 65, 67, 70, 74, 87, 106, 112, 116, 123, 126], "http": [12, 17, 34, 63, 65, 118], "go": [12, 13, 32, 35, 36, 37, 39, 44, 53, 63, 67, 74, 75, 97, 98, 105, 116, 118, 123, 124, 126, 127, 128, 129, 130, 131, 132, 135, 137], "idea": [12, 38, 67, 77, 97, 116, 118, 121, 126, 127, 136], "special": [12, 34, 37, 39, 44, 71, 75, 76, 92, 94, 95, 98, 121, 122, 124, 128, 130, 136], "normal": [12, 36, 38, 39, 44, 47, 48, 50, 55, 56, 65, 67, 70, 71, 82, 88, 95, 98, 103, 105, 116, 120, 124, 126, 130, 132], "cameracompon": [12, 38, 39, 121], "zoom": [12, 37, 39, 49, 83, 121, 123, 124], "10": [12, 13, 36, 38, 39, 44, 48, 60, 64, 68, 70, 71, 80, 89, 93, 118, 120, 122, 123, 124, 128, 129, 131, 132], "bigger": [12, 29, 32, 70, 120], "due": [12, 13, 34, 36, 44, 63, 70, 124, 129], "would": [12, 13, 15, 32, 34, 35, 36, 37, 38, 39, 44, 46, 47, 53, 55, 65, 67, 68, 70, 72, 76, 77, 80, 83, 88, 92, 95, 96, 100, 101, 105, 106, 113, 116, 120, 121, 122, 123, 124, 128, 130], "hit": [12, 38, 106, 124, 127, 130, 131, 132, 139], "quickli": [12, 13, 35, 74, 105, 124, 127], "easili": [12, 30, 44, 60, 62, 63, 65, 67, 70, 115, 127, 131], "yourzoom": 12, "constructor": [12, 17, 29, 35, 37, 38, 39, 44, 46, 65, 68, 71, 121, 122, 124, 136, 139], "viewfind": [12, 46, 121, 122, 123, 124, 127, 128, 132], "later": [12, 13, 32, 35, 37, 38, 39, 48, 64, 71, 77, 87, 94, 101, 113, 121, 122, 123, 124, 128], "stage": [12, 21, 37, 38, 39, 44, 74, 124], "previous": [12, 55, 65, 123], "familiar": [12, 34, 116, 118, 119, 125, 133], "know": [12, 28, 35, 37, 38, 39, 44, 48, 53, 54, 55, 61, 70, 74, 75, 81, 88, 116, 122, 123, 124, 126, 127, 139], "concept": [12, 46, 68, 119, 125, 133, 137], "everi": [12, 13, 15, 34, 36, 38, 39, 44, 46, 50, 55, 58, 65, 66, 67, 68, 92, 96, 103, 111, 122, 123, 124, 126, 130, 135, 137, 140], "wrap": [12, 39, 44, 47, 58, 62, 63, 68, 115, 128, 135], "ad": [12, 13, 15, 20, 23, 32, 34, 35, 36, 37, 38, 39, 44, 46, 48, 49, 50, 52, 53, 55, 56, 58, 66, 68, 70, 71, 74, 87, 88, 101, 106, 107, 113, 116, 118, 121, 123, 124, 128, 134, 139], "non": [12, 13, 35, 39, 44, 46, 53, 61, 67, 74, 90, 106, 107, 111, 118, 122, 123, 124], "relat": [12, 13, 35, 38, 39, 65, 67, 70, 76, 128, 132], "along": [12, 13, 39, 44, 54, 98, 124, 130, 132], "updat": [12, 13, 15, 32, 34, 36, 37, 38, 39, 44, 46, 48, 53, 54, 55, 58, 60, 63, 65, 66, 68, 71, 76, 81, 86, 113, 115, 116, 123, 124, 128, 129, 130, 132, 135, 137, 138, 139], "accord": [12, 13, 23, 34, 39, 44, 56, 70, 83, 88, 101, 105, 120], "graviti": [12, 13, 68, 130, 132], "flip": [12, 31, 38, 39, 44, 64, 115, 122, 123, 132], "compar": [12, 21, 38, 60, 68, 92, 116, 139], "coordin": [12, 13, 39, 46, 48, 54, 55, 56, 60, 65, 121, 122, 123], "y": [12, 13, 29, 34, 38, 39, 44, 48, 49, 52, 55, 60, 64, 66, 68, 71, 92, 96, 115, 121, 122, 123, 124, 127, 128, 129, 130, 132, 134, 135, 136, 137, 138, 139], "axi": [12, 13, 39, 52, 115, 128, 129, 136, 137, 138], "pull": [12, 13, 53], "downward": [12, 68], "meanwhil": 12, "neg": [12, 13, 34, 35, 44, 55, 85, 89, 92, 137], "upward": [12, 130, 132], "createbodi": [12, 13], "bodydef": [12, 13], "fixturedef": [12, 13], "assign": [12, 32, 39, 77, 80, 81, 93, 105, 115, 128], "renderbodi": 12, "sinc": [12, 13, 32, 34, 38, 39, 46, 48, 49, 53, 58, 60, 62, 63, 65, 67, 70, 77, 120, 121, 122, 123, 128, 137, 139], "otherwis": [12, 34, 39, 44, 47, 56, 60, 77, 80, 88, 90, 91, 92, 101, 113, 124], "wouldn": [12, 75, 80, 98, 103, 106, 123], "show": [12, 13, 34, 35, 37, 39, 47, 58, 62, 64, 65, 67, 70, 71, 95, 98, 106, 118, 123, 124, 127, 128, 130], "anyth": [12, 38, 39, 48, 53, 54, 55, 66, 70, 74, 77, 95, 116, 121, 124, 135], "turn": [12, 15, 38, 44, 47, 50, 53, 55, 60, 64, 68, 74, 78, 98, 115, 118, 120, 121, 122, 123, 124], "off": [12, 13, 37, 38, 47, 53, 55, 65, 68, 70, 74, 75, 124, 128, 129, 130, 137], "defin": [12, 13, 17, 34, 35, 36, 38, 39, 44, 49, 53, 60, 65, 66, 67, 68, 70, 71, 74, 76, 86, 100, 101, 106, 107, 111, 113, 115, 116, 122, 123, 124, 127, 128, 130, 136, 138, 139], "exclam": [12, 32], "shouldn": [12, 63], "nest": [12, 36, 38, 95, 96], "instead": [12, 13, 29, 32, 34, 35, 37, 38, 39, 49, 53, 55, 61, 63, 65, 66, 71, 72, 88, 92, 95, 98, 101, 115, 116, 118, 120, 121, 122, 129, 136, 137], "weapon": [12, 106], "cours": [12, 39, 44, 56, 106, 120, 123, 124, 136], "bullet": [12, 38, 39, 65, 136, 138], "sens": [12, 80, 96, 136], "move": [12, 13, 35, 37, 38, 39, 44, 46, 48, 49, 52, 53, 54, 55, 60, 65, 66, 68, 71, 74, 106, 111, 127, 128, 129, 130, 132, 135, 136, 137, 138, 139], "isbullet": 12, "avoid": [12, 32, 34, 35, 36, 37, 38, 44, 46, 47, 52, 70, 124, 127, 132, 138], "tunnel": [12, 38], "problem": [12, 15, 32, 35, 38, 123, 124, 135], "box": [12, 13, 38, 39, 56, 61, 66, 70, 71, 132, 136, 137, 139], "propag": [12, 38, 47, 48, 52, 55], "fixtur": [12, 13], "meet": [12, 32, 78, 101], "These": [12, 29, 30, 32, 36, 37, 38, 39, 44, 46, 47, 53, 55, 58, 65, 70, 71, 81, 89, 90, 91, 92, 94, 95, 96, 98, 103, 107, 109, 112, 116, 120, 121, 124, 126], "begincontact": 12, "ceas": 12, "endcontact": 12, "One": [12, 13, 61, 63, 97, 98, 128, 134], "contactcallback": 12, "interest": [12, 38, 44, 116, 122], "ball": [12, 13, 38], "object": [12, 13, 24, 29, 30, 31, 37, 38, 39, 44, 48, 55, 64, 65, 66, 67, 70, 75, 99, 102, 103, 104, 105, 106, 110, 111, 113, 120, 121, 122, 123, 124, 127, 128, 129, 132, 139], "wall": [12, 13, 39, 64], "userdata": 12, "And": [12, 44, 74, 75, 115, 120, 121, 122, 124, 134, 135, 137, 138, 139], "null": [12, 13, 20, 30, 37, 38, 39, 44, 47, 56, 64, 65, 70, 100, 103, 106, 107, 111, 124], "ignor": [12, 29, 38, 39, 46, 52, 94, 105, 106], "conveni": [12, 37, 44, 65, 70, 95, 121, 123], "connect": [13, 29, 38, 44, 70, 118, 124, 135], "variou": [13, 16, 31, 35, 36, 44, 65, 68, 92, 120, 121, 122, 124], "simul": [13, 36, 39, 68, 70, 123], "hing": 13, "wheel": [13, 88], "rope": 13, "chain": [13, 44, 64, 68, 70, 92], "etc": [13, 32, 37, 38, 39, 46, 49, 52, 64, 66, 70, 71, 74, 87, 89, 95, 99, 106, 124, 126, 128], "bodytyp": 13, "kinemat": 13, "process": [13, 36, 38, 39, 66, 70, 83, 95, 103, 104, 106, 119, 124, 125, 133, 137], "construct": [13, 35, 36, 37, 60, 71, 124, 127], "correspond": [13, 23, 36, 39, 44, 50, 55, 56, 62, 68, 91, 96, 98, 101, 104, 105, 106, 111, 121, 122], "subclass": [13, 39, 44, 52, 106, 116, 123], "jointdef": 13, "createjoint": 13, "destroyjoint": 13, "wheeljoint": 13, "group": [13, 30, 36, 39, 66, 70, 92, 98, 104, 105], "constant": [13, 44, 67, 121, 122, 124], "soft": [13, 64], "constantvolumejointdef": 13, "frequencyhz": 13, "dampingratio": 13, "8": [13, 34, 38, 39, 44, 48, 54, 55, 64, 65, 71, 94, 121, 122, 123, 124, 128, 132, 137, 138, 139], "foreach": [13, 39, 123, 124], "addbodi": 13, "constant_volume_joint": 13, "math": [13, 34, 38, 48, 54, 55, 71, 87, 92, 122, 123, 124, 129, 132], "stori": [13, 124], "bridge_librari": 13, "util": [13, 15, 59, 65, 126], "boundari": [13, 38, 39, 47, 58, 70], "constantvolumejointexampl": 13, "descript": [13, 32, 35, 64, 76, 96, 101, 111, 118], "tap": [13, 34, 36, 39, 49, 51, 53, 71, 96, 124], "bunch": 13, "spritebodyworld": 13, "forge2dworld": 13, "tapcallback": [13, 34, 39, 49, 52, 54, 71, 123, 124], "hasgamerefer": [13, 39, 71, 124, 127, 128, 129, 130, 131, 132, 135, 136, 137, 138, 139], "addal": [13, 37, 39, 46, 48, 71, 121, 122, 123, 124], "createboundari": 13, "ontapdown": [13, 34, 39, 49, 53, 54, 71], "tapdownev": [13, 34, 39, 54, 55, 71], "info": [13, 39, 49, 116, 135, 136, 137, 138, 139], "center": [13, 25, 34, 37, 38, 39, 44, 46, 48, 53, 54, 55, 56, 60, 61, 64, 68, 70, 71, 115, 121, 122, 123, 124, 127, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139], "localposit": [13, 34, 48, 49, 54, 55], "numpiec": 13, "20": [13, 29, 34, 36, 38, 39, 44, 47, 48, 55, 60, 64, 71, 87, 92, 122, 123, 124, 131, 132], "radiu": [13, 34, 38, 39, 44, 55, 68, 71, 122, 123, 124, 132], "5": [13, 29, 32, 38, 39, 44, 48, 54, 60, 64, 68, 71, 83, 87, 88, 89, 90, 92, 93, 95, 101, 121, 122, 123, 128, 129, 131, 132, 136, 137, 138, 139], "x": [13, 29, 34, 35, 37, 38, 39, 46, 48, 52, 55, 60, 64, 66, 68, 71, 87, 92, 96, 98, 101, 115, 121, 122, 123, 124, 128, 129, 130, 131, 132, 134, 135, 136, 138, 139], "co": [13, 23, 71], "2": [13, 25, 29, 34, 35, 37, 38, 39, 44, 48, 49, 53, 55, 60, 64, 65, 68, 70, 71, 80, 88, 89, 90, 93, 95, 97, 120, 122, 124, 128, 129, 130, 132, 134, 135, 136, 137, 138, 139], "pi": [13, 39, 122, 123, 124], "sin": [13, 71], "wait": [13, 32, 36, 39, 44, 76, 86, 101, 106, 121, 129, 130], "e": [13, 21, 23, 32, 35, 37, 38, 39, 44, 50, 54, 55, 60, 66, 70, 77, 87, 88, 95, 103, 106, 107, 111, 122, 123, 124], "physicsworld": 13, "least": [13, 32, 35, 38, 75, 88, 92, 118, 119, 123, 124, 125, 128, 133], "3": [13, 20, 29, 32, 34, 39, 44, 46, 48, 64, 65, 71, 80, 81, 88, 89, 90, 91, 92, 97, 101, 111, 120, 121, 124, 127, 129, 130, 131, 132], "frequenc": [13, 29, 44], "oscil": [13, 44], "higher": [13, 34, 36, 39, 92, 122, 123, 139], "less": [13, 35, 37, 55, 89, 90, 92, 124, 131], "springi": 13, "compound": 13, "distantjoint": 13, "rang": [13, 35, 38, 44, 70, 90, 91, 92, 96, 109, 124], "mean": [13, 15, 29, 34, 35, 37, 38, 39, 46, 47, 50, 52, 53, 63, 64, 65, 66, 67, 74, 83, 86, 88, 92, 95, 97, 105, 106, 116, 121, 122, 123, 126, 128, 129, 130, 134, 136, 137], "damp": 13, "indic": [13, 32, 34, 35, 55, 64, 87, 98, 106, 122, 123], "critic": 13, "constrain": [13, 70], "remain": [13, 34, 92, 123, 124, 128], "fix": [13, 35, 36, 37, 44, 70, 87, 118, 123, 124, 130], "distanc": [13, 31, 38, 39, 44, 60, 64, 88, 111, 121, 123, 124, 130, 132], "view": [13, 34, 38, 53, 64, 83, 105, 106, 118], "massless": 13, "rigid": 13, "rod": 13, "distancejointdef": 13, "firstbodi": 13, "secondbodi": 13, "worldcent": 13, "distance_joint": 13, "distancejointexampl": 13, "pair": [13, 37, 55, 99], "join": [13, 32, 38], "distancejointworld": 13, "second": [13, 34, 38, 39, 44, 46, 52, 53, 58, 60, 65, 68, 70, 71, 80, 85, 88, 96, 105, 109, 118, 121, 123, 124, 127, 128, 129, 136, 137], "anchor": [13, 25, 34, 37, 38, 44, 46, 48, 53, 54, 55, 56, 61, 70, 71, 115, 116, 121, 122, 123, 127, 128, 129, 131, 132, 134, 135, 136, 137, 138, 139], "definit": [13, 35, 38, 39, 70, 123, 124], "slight": [13, 139], "violat": [13, 35, 106], "constraint": 13, "save": [13, 36, 38, 66, 68, 77, 113, 118, 120, 122, 123, 124, 126, 135], "three": [13, 38, 39, 68, 92, 93, 101, 107, 121, 123, 124, 139], "greater": [13, 44, 68, 89, 90, 92, 129], "becom": [13, 35, 38, 44, 83, 95, 97, 101, 107, 116, 121, 123, 124, 135], "zero": [13, 29, 38, 39, 44, 68, 71, 89, 92, 95, 109, 124, 128, 129, 130, 132], "friction": 13, "translat": [13, 60, 66, 68, 70, 116, 122, 123, 124, 128], "angular": [13, 95], "isn": [13, 38, 39, 53, 55, 121], "shape": [13, 35, 37, 38, 39, 47, 48, 49, 68], "collid": [13, 38, 49, 130, 139], "plane": [13, 39, 64], "z": [13, 39, 60, 92], "perpendicular": [13, 38, 44], "forc": [13, 37, 38, 55, 65, 85, 124], "floor": [13, 87], "frictionjointdef": 13, "third": [13, 60], "howev": [13, 32, 35, 36, 37, 39, 44, 46, 48, 54, 55, 56, 62, 66, 67, 70, 74, 75, 77, 78, 82, 88, 94, 95, 98, 103, 105, 106, 111, 112, 121, 123, 124], "ballbodi": 13, "floorbodi": 13, "maxforc": 13, "maxtorqu": 13, "friction_joint": 13, "frictionjointexampl": 13, "around": [13, 37, 38, 39, 44, 53, 60, 63, 70, 87, 98, 103, 115, 122, 123, 124, 127, 130], "slow": [13, 60, 121, 124], "frictionjointworld": 13, "border": [13, 39, 122, 123], "createfrictionjoint": 13, "applylinearimpuls": 13, "random": [13, 34, 38, 44, 48, 54, 55, 68, 87, 93, 113, 122, 123, 127, 130, 132, 138], "5000": 13, "collideconnect": 13, "500": [13, 44, 64, 124, 137, 138, 139], "torqu": 13, "word": [13, 70, 74, 89, 92, 95, 96, 103, 118], "slide": [13, 123, 124], "latter": [13, 35, 38, 49, 53, 65, 106, 124], "spin": [13, 74, 88], "combin": [13, 34, 38, 39, 44, 60, 68, 70, 77, 86, 115, 124, 126], "attach": [13, 37, 38, 39, 44, 49, 50, 55, 60, 95, 106, 116, 121, 123, 124], "dynam": [13, 34, 38, 46, 47, 65, 66, 68, 74, 86, 95, 96, 99, 103, 105, 106, 109, 111, 112, 136], "expect": [13, 35, 36, 66, 72, 83, 116, 118, 123], "bodya": 13, "those": [13, 17, 29, 37, 38, 39, 44, 48, 49, 50, 52, 55, 60, 64, 67, 68, 70, 74, 76, 88, 101, 105, 106, 121, 123, 124, 128, 135, 137, 139], "gearjointdef": 13, "firstjoint": 13, "bodyb": 13, "secondjoint": 13, "joint1": 13, "joint2": 13, "ratio": [13, 37, 44, 120], "gear_joint": 13, "ui": [13, 35, 44, 60, 61, 63, 64, 66, 67, 68, 70, 71, 106, 122, 123, 124], "gearjointexampl": 13, "drag": [13, 36, 49, 51, 53, 55, 71, 123, 124, 135, 137], "specifi": [13, 15, 32, 34, 36, 37, 39, 44, 60, 64, 65, 67, 68, 70, 71, 76, 85, 88, 101, 103, 107, 110, 121, 122, 124], "gear": 13, "respond": [13, 39, 48, 55, 106, 121], "gearjointworld": 13, "boxanchor": 13, "boxwidth": 13, "ball1radiu": 13, "4": [13, 25, 29, 39, 44, 48, 60, 61, 64, 65, 68, 71, 80, 89, 92, 93, 120, 121, 122, 124, 127, 128, 132, 136, 137, 138, 139], "ball2radiu": 13, "draggablebox": 13, "startposit": 13, "ball1anchor": 13, "ball1": 13, "ball2anchor": 13, "ball2": 13, "createprismaticjoint": 13, "revolutejoint1": 13, "createrevolutejoint": 13, "revolutejoint2": 13, "creategearjoint": 13, "jointrender": 13, "groundbodi": 13, "prismaticjointdef": 13, "enablelimit": 13, "lowertransl": 13, "uppertransl": 13, "revolutejointdef": 13, "gearratio": 13, "p1": [13, 21, 23, 39, 48], "p2": [13, 39, 48], "render": [13, 28, 29, 31, 34, 35, 36, 37, 38, 44, 45, 46, 47, 48, 54, 55, 58, 60, 62, 63, 64, 65, 68, 71, 74, 96, 106, 115, 116, 120, 121, 123, 124, 128, 134, 135, 136], "canva": [13, 28, 34, 35, 36, 37, 38, 39, 44, 46, 47, 48, 54, 55, 61, 63, 64, 65, 66, 67, 68, 70, 71, 116, 122, 123, 124, 134, 135], "setfrom": [13, 38, 48, 123, 124], "getlocalaxisa": 13, "scale": [13, 25, 38, 44, 49, 65, 66, 68, 71, 120, 122, 123, 124, 130, 131, 132], "getlowerlimit": 13, "getupperlimit": 13, "drawlin": [13, 38, 64], "tooffset": [13, 34, 38, 48, 55, 60], "debugpaint": 13, "form": [13, 31, 37, 38, 39, 60, 66, 70, 74, 77, 80, 88, 92, 95, 96, 97, 98, 105, 118, 121], "long": [13, 15, 35, 36, 38, 39, 44, 55, 92, 95, 96, 97, 122, 124], "motion": [13, 60, 64, 95, 124], "coordinate1": 13, "coordinate2": 13, "unit": [13, 44, 68, 121], "destroi": [13, 35], "rel": [13, 34, 36, 38, 39, 44, 49, 56, 121, 122], "typic": [13, 44, 70, 71, 76, 83, 98, 101], "movement": [13, 37, 48, 54, 128, 129, 132, 135, 136, 137], "respect": [13, 23, 39, 44, 50, 62, 66, 77, 91, 113, 116, 128], "target": [13, 29, 34, 37, 39, 44, 56, 58, 60, 79, 84, 111, 126], "rotat": [13, 29, 31, 37, 39, 44, 48, 60, 64, 65, 66, 71, 116, 122, 123, 124], "offset": [13, 30, 31, 37, 39, 44, 64, 68, 71, 123, 124, 128, 129], "block": [13, 34, 35, 39, 44, 61, 65, 70, 78, 98, 126, 130, 132], "proport": [13, 55], "motorjointdef": 13, "1000": [13, 36, 38, 98, 120, 121, 122, 123, 124], "correctionfactor": 13, "motor_joint": 13, "motorjointexampl": 13, "direct": [13, 32, 34, 38, 39, 44, 47, 53, 56, 60, 61, 64, 124, 129, 130], "motorjointworld": 13, "motorspe": 13, "clockwis": [13, 38, 39, 44], "createmotorjoint": 13, "linearoffset": 13, "dt": [13, 15, 34, 36, 38, 39, 44, 46, 48, 53, 54, 55, 58, 60, 65, 68, 71, 116, 124, 128, 129, 130, 131, 132, 137, 138, 139], "deltaoffset": 13, "linearoffsetx": 13, "getlinearoffset": 13, "linearoffseti": 13, "setvalu": [13, 38], "angularoffset": 13, "getangularoffset": 13, "setlinearoffset": 13, "setangularoffset": 13, "anchora": 13, "anchorb": 13, "correct": [13, 32, 36, 38, 39, 50, 55, 60, 88, 105, 123, 124, 127, 128, 129], "factor": [13, 30, 56, 123], "adjust": [13, 55, 118, 120, 121, 123, 124, 129, 130, 132], "deviat": 13, "faster": [13, 38, 39, 120], "lower": [13, 37, 39, 58, 122, 127], "slower": [13, 38, 136], "too": [13, 32, 34, 36, 38, 39, 44, 49, 56, 60, 63, 65, 74, 77, 81, 94, 97, 98, 106, 120, 121, 123, 124, 130, 136], "high": [13, 35, 36, 120, 121], "overcompens": 13, "unstabl": 13, "low": [13, 64, 95], "slowli": 13, "linear": [13, 44], "angl": [13, 37, 38, 44, 53, 60, 64, 76, 111, 115, 131, 132], "achiev": [13, 36, 37, 44, 56, 60, 61, 68, 74, 83, 86, 106, 113, 122, 123, 135, 136], "increment": [13, 44, 131], "cycl": [13, 39, 44, 46, 68, 129], "caus": [13, 29, 44, 55, 96, 124, 129, 139], "manipul": [13, 60, 64, 89, 113], "mous": [13, 47, 48, 52, 53, 54, 55, 123, 134, 135, 137], "attempt": [13, 44, 89, 91, 106, 123], "drive": [13, 34], "toward": [13, 37, 38, 60, 89, 124, 137], "cursor": [13, 47], "restrict": [13, 74, 80, 123, 128, 130], "coincid": [13, 35, 80], "violent": 13, "reaction": 13, "larg": [13, 29, 38, 70, 84, 97, 120, 123], "spring": 13, "damper": 13, "user": [13, 21, 32, 34, 35, 37, 38, 39, 44, 48, 50, 55, 65, 66, 70, 71, 74, 76, 86, 96, 101, 102, 105, 106, 107, 111, 113, 121, 123, 124, 126, 128, 132], "tri": [13, 61, 95, 122], "adapt": [13, 124, 127, 130], "often": [13, 35, 36, 39, 46, 55, 60, 115, 124], "precis": [13, 38, 48, 56, 68, 120], "instantan": [13, 37, 124], "context": [13, 26, 29, 44, 47, 62, 65, 66, 71, 132], "wish": [13, 34, 38, 55, 124, 128], "consid": [13, 29, 34, 35, 38, 44, 47, 49, 68, 70, 75, 83, 88, 93, 101, 106, 123], "mousejointdef": 13, "3000": 13, "mass": 13, "mouse_joint": 13, "revolute_joint_with_motor_exampl": 13, "mousejointexampl": 13, "mousejointworld": 13, "dragcallback": [13, 49, 52, 55, 123, 124], "cornerramp": 13, "ismirror": 13, "ondragstart": [13, 123, 124], "dragstartev": [13, 48, 123, 124], "ondragupd": [13, 39, 123, 124], "dragupdateev": [13, 48, 123, 124], "settarget": 13, "localendposit": [13, 48], "ondragend": [13, 123, 124], "dragendev": [13, 48, 123, 124], "exert": 13, "candid": 13, "express": [13, 68, 77, 79, 80, 81, 83, 84, 85, 88, 92, 96, 98, 101, 103, 104, 109, 112, 124], "weight": 13, "multipli": [13, 56, 83, 92, 128], "degre": [13, 39], "freedom": [13, 46, 122], "line": [13, 34, 35, 44, 63, 70, 74, 83, 84, 86, 94, 96, 97, 98, 99, 102, 103, 104, 105, 106, 109, 118, 120, 121, 123, 124, 126, 127, 129, 130, 132, 139], "slightli": [13, 44, 118], "space": [13, 34, 35, 37, 39, 46, 47, 52, 70, 83, 95, 96, 121, 123, 124, 130, 132, 134, 137, 139, 140], "At": [13, 30, 31, 34, 36, 47, 55, 63, 66, 75, 78, 83, 87, 88, 96, 106, 118, 120, 121, 123, 124, 126, 128, 135], "dynamicbodi": 13, "prismatic_joint": 13, "prismaticjointexampl": 13, "bound": [13, 38, 39, 56, 58, 60, 70, 122, 123, 124, 132], "upper": [13, 128, 131, 132], "enabl": [13, 21, 34, 39, 46, 54, 58, 62, 66, 113], "6": [13, 34, 38, 44, 53, 55, 71, 80, 87, 89, 90, 91, 121, 122, 123, 124, 128, 130, 132, 139], "enablemotor": 13, "maxmotorforc": 13, "b1": 13, "b2": 13, "through": [13, 15, 32, 35, 37, 38, 39, 46, 53, 55, 64, 68, 74, 78, 88, 97, 98, 103, 123, 124, 127, 128, 130, 137], "meter": 13, "wa": [13, 32, 36, 37, 38, 44, 47, 50, 52, 54, 55, 64, 65, 68, 70, 71, 74, 88, 95, 97, 99, 100, 103, 106, 111, 118, 122, 123, 124, 126, 128, 129, 130, 139], "setlimit": 13, "model": 13, "infinit": [13, 32, 38, 44, 71, 127, 128, 129, 132], "radian": [13, 39, 44, 60, 115], "per": [13, 32, 34, 35, 44, 70, 94, 124, 127, 136, 137], "n": [13, 48, 70, 87, 88, 95, 123, 124], "m": [13, 32, 74, 75, 78, 88, 96, 118, 120, 122], "setmotorspe": 13, "setmaxmotorforc": 13, "200": [13, 36, 38, 39, 44, 54, 64, 66, 68, 70, 89, 121, 130, 132], "getjointtransl": 13, "getjointspe": 13, "ideal": [13, 35], "pullei": 13, "ground": [13, 38, 64, 126, 127, 128, 130, 132, 134], "As": [13, 29, 32, 39, 44, 53, 65, 66, 70, 71, 83, 94, 98, 116, 121, 122, 124, 126, 127, 128, 130, 132, 139], "goe": [13, 38, 39, 44, 60, 103, 124], "total": [13, 15, 44, 118, 121, 123, 124, 127, 128], "conserv": 13, "length1": 13, "length2": 13, "suppli": [13, 64, 68, 124], "tackl": [13, 124, 129], "side": [13, 35, 37, 38, 39, 61, 64, 88, 90, 92, 96, 118, 124, 127, 128, 140], "mechan": [13, 70, 95, 96, 105, 106, 127, 132], "leverag": [13, 70, 127, 132], "vari": 13, "twice": [13, 60, 77], "half": [13, 39, 60, 123, 124, 129, 130, 132], "pulleyjointdef": 13, "firstpullei": 13, "secondpullei": 13, "pulley_joint": 13, "pulleyjointexampl": 13, "distancefromcent": 13, "camera": [13, 32, 39, 45, 46, 47, 49, 53, 64, 106, 121, 122, 123, 124, 127, 128, 131, 132, 136], "visibleworldrect": 13, "firstbox": 13, "secondbox": 13, "7": [13, 64, 71, 92, 121, 122, 123, 124, 128, 131], "pulleyrender": 13, "worldpoint": 13, "getgroundanchora": 13, "getgroundanchorb": 13, "ga1": 13, "ga2": 13, "anchor1": 13, "anchor2": 13, "r": [13, 39, 101], "getcurrentlengtha": 13, "getcurrentlengthb": 13, "bit": [13, 58, 65, 123, 124, 128, 135], "troublesom": 13, "itself": [13, 35, 38, 39, 44, 46, 56, 66, 68, 70, 74, 76, 77, 88, 96, 97, 106, 114, 116, 122, 123, 124, 137], "better": [13, 39, 44, 53, 60, 65, 66, 67, 94, 97, 106, 123, 136, 139], "cover": [13, 39, 46, 71, 124], "share": [13, 39, 66], "revolute_joint": 13, "revolutejointexampl": 13, "stuck": [13, 34], "revolutejointworld": 13, "circleshuffl": 13, "clone": [13, 32, 48, 124], "xpo": 13, "ypo": 13, "circleshap": 13, "densiti": 13, "restitut": 13, "9": [13, 30, 34, 39, 44, 48, 55, 61, 68, 121, 122, 123, 124, 128, 129, 130, 132], "createfixtur": 13, "lowerangl": 13, "upperangl": 13, "about": [13, 28, 29, 32, 35, 38, 44, 46, 49, 55, 58, 61, 63, 70, 71, 74, 84, 95, 98, 103, 106, 115, 116, 120, 121, 122, 123, 124, 126, 127, 136], "maxmotortorqu": 13, "setmaxmotortorqu": 13, "jointangl": 13, "jointspe": 13, "ropejointdef": 13, "localanchora": 13, "getlocalcent": 13, "localanchorb": 13, "maxlength": 13, "rope_joint": 13, "materi": [13, 35, 38, 44, 55, 60, 67, 70, 71, 124, 127, 128, 129, 131, 132, 134, 135, 136, 137, 138, 139], "ropejointexampl": 13, "ropejointworld": 13, "handlewidth": 13, "handlebodi": 13, "createhandl": 13, "createrop": 13, "screentoworld": 13, "prevbodi": 13, "newposit": 13, "color": [13, 30, 34, 38, 39, 44, 47, 48, 54, 55, 61, 64, 65, 67, 68, 69, 70, 71, 81, 96, 99, 103, 109, 120, 122, 123, 124, 128, 131, 132, 134, 135], "white": [13, 34, 48, 55, 60, 64, 67, 70, 81, 83, 134, 135], "createropejoint": 13, "halfwidth": 13, "ab": 13, "origin": [13, 29, 32, 38, 39, 44, 48, 60, 65, 66, 94, 118, 122, 123, 124], "larger": [13, 34, 36, 44, 48, 55, 92, 120, 123, 126], "linearslop": 13, "dure": [13, 32, 34, 37, 39, 44, 46, 47, 55, 64, 65, 66, 68, 88, 94, 95, 106, 113, 121, 122, 123, 124, 129], "weldjointdef": 13, "weld_joint": 13, "weldjointexampl": 13, "test": [13, 20, 32, 33, 35, 52, 70, 118, 124], "weldjointworld": 13, "pillarheight": 13, "pillarwidth": 13, "leftpillar": 13, "rightpillar": 13, "createbridg": 13, "sectionscount": 13, "middl": [13, 37, 39, 50, 55, 61, 68, 97, 122, 123, 124, 129, 130], "corner": [13, 37, 39, 49, 56, 60, 61, 68, 118, 122, 123, 124, 127, 128, 131, 132, 134, 137], "halfsiz": 13, "absolut": [13, 44, 53, 129], "sectionwidth": 13, "ceiltodoubl": 13, "prevsect": 13, "createweldjoint": 13, "weld": 13, "solver": 13, "somewhat": [13, 95, 96, 120, 123], "flexibl": [13, 31, 37, 64, 68], "bend": 13, "break": [13, 35, 36, 38, 70, 123, 127, 128, 136, 137], "recreat": 13, "reli": [13, 17, 52, 70], "perform": [14, 24, 29, 37, 38, 39, 46, 48, 54, 55, 58, 63, 65, 66, 68, 76, 83, 86, 92, 106, 114, 122, 127, 139], "backpressur": 14, "strategi": 14, "integral_isol": 15, "neatli": [15, 122], "ve": [15, 66, 80, 95, 121, 123], "ever": [15, 34], "befor": [15, 32, 39, 44, 46, 55, 65, 66, 77, 79, 81, 85, 87, 92, 95, 98, 101, 105, 106, 107, 111, 113, 116, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 135, 136], "home": [15, 71], "cpu": 15, "intens": [15, 38, 53, 86], "shouldrecalcul": 15, "recalculateworld": 15, "worlddata": 15, "updateworld": 15, "mind": [15, 61, 74, 105, 107, 120, 121, 123], "probabl": [15, 38, 39, 44, 65, 70, 77, 90, 120, 122, 123, 127, 128], "dumber": 15, "think": [15, 32, 35, 39, 44, 68, 70, 77, 84, 97, 121, 127, 130], "ant": 15, "queen": [15, 75, 120, 122, 124], "worker": 15, "individu": [15, 21, 31, 36, 44, 65, 83, 112, 126, 127, 128, 136], "got": [15, 116, 120], "wast": [15, 120, 121, 122, 124], "henc": [15, 70, 121], "tell": [15, 38, 52, 77, 81, 98, 120, 122, 124, 126, 136], "cope": 15, "job": [15, 44, 63, 65, 70, 71, 80, 105, 106, 123], "queue": [15, 39], "item": [15, 38, 39, 44, 64, 83, 87, 88, 96, 101, 123, 124], "produc": [15, 34, 38, 44, 63, 64, 88, 89, 90, 91, 92, 95, 122, 124], "rapidli": [15, 124], "present": [15, 35, 44, 53, 70, 74, 100, 102, 105, 106, 107, 123, 124], "backlog": 15, "unhandl": 15, "mitig": 15, "funnel": 15, "handler": [15, 17, 39, 50, 52, 55, 106, 121], "known": [15, 35, 74, 75, 101, 107, 124], "backpressurestrategi": 15, "ones": [15, 32, 39, 68, 72, 95, 97, 107, 113, 115, 120, 124], "nobackpressurestrategi": 15, "basic": [15, 34, 39, 46, 49, 55, 68, 70, 118, 121, 124, 126, 127, 128, 129, 130, 132, 134], "doe": [15, 30, 32, 35, 36, 37, 38, 39, 46, 47, 54, 55, 65, 68, 70, 74, 88, 91, 95, 103, 106, 121, 123, 124, 126, 128, 129, 137], "pressur": 15, "fifo": 15, "stack": [15, 29, 71, 101, 123], "replacebackpressurestrategi": 15, "discard": [15, 106], "upon": [15, 35, 38, 44, 46, 53, 88, 90, 103, 121], "discardnewbackpressurestrategi": 15, "popul": [15, 100, 123], "field": [15, 32, 37, 38, 39, 49, 53, 123], "mount": [15, 23, 36, 37, 39, 46, 47, 50, 52, 56, 71, 121, 123, 124], "nativ": [16, 25, 49], "android": [16, 28, 39, 63], "airbnb": 16, "develop": [16, 31, 32, 35, 36, 39, 46, 58, 60, 61, 74, 96, 118, 120, 123, 124, 128, 134, 135], "xaha": 16, "loadlotti": 16, "lottiebuild": 16, "obtain": [16, 39, 65, 88, 121, 122], "assetbundl": [16, 72], "url": [16, 17, 63, 65, 109, 118], "uint8list": [16, 60], "lottiecompon": 16, "lottielogo1": 16, "json": [16, 32, 65, 72], "repeat": [16, 39, 44, 46, 60, 96, 128, 136, 137, 138, 139], "continu": [16, 32, 38, 39, 48, 52, 94, 95, 98, 106, 123, 124], "400": [16, 54, 64, 70], "focus": [17, 31, 37, 52, 128, 140], "abstract": [17, 39, 44, 46, 70, 71, 74, 106, 116, 123, 124], "path_provid": 17, "place": [17, 35, 36, 37, 39, 44, 50, 52, 56, 60, 63, 65, 67, 71, 77, 79, 83, 86, 88, 89, 93, 94, 96, 106, 122, 123, 124, 128, 132, 138], "argument": [17, 24, 32, 37, 38, 39, 44, 46, 53, 55, 60, 62, 63, 66, 68, 79, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 99, 101, 107, 111, 136, 137, 138], "networkasset": 17, "flamenetworkimag": 17, "playersprit": [17, 56, 65, 66, 135], "com": [17, 32, 65, 118, 122], "png": [17, 36, 39, 46, 53, 65, 66, 68, 72, 115, 120, 121, 122, 123, 124, 126, 127, 128, 129, 131, 132, 135, 136, 137, 138, 139], "decodeasset": 17, "encodeasset": 17, "flamenetworkcustomasset": 17, "customasset": 17, "getappdirectori": 17, "cacheinmemori": 17, "cacheinstorag": 17, "byte": [17, 65], "decod": [17, 63], "encod": [17, 94], "real": [20, 36, 38, 48, 55, 60, 70, 107, 118, 122, 124, 128, 137], "riv": 20, "artboard": 20, "loadartboard": 20, "statemachinecontrol": 20, "rivecompon": 20, "rive_exampl": 20, "riveexamplegam": 20, "tapdetector": [20, 25, 38, 44, 49], "smiinput": 20, "levelinput": 20, "skillsartboard": 20, "rivefil": 20, "skill": [20, 35], "fromartboard": 20, "addcontrol": 20, "findinput": 20, "canvass": [20, 38, 44, 64, 68, 71, 127, 128, 130, 132], "ontap": [20, 38, 44, 49, 60, 64], "550": 20, "inform": [20, 31, 38, 46, 49, 53, 55, 58, 67, 70, 71, 74, 93, 95, 99, 101, 103, 113, 116, 123, 124, 128, 129, 130, 132, 136, 138], "expos": [21, 35, 37, 39, 44, 60, 68, 70], "flutter_riverpod": [21, 23, 24], "widgetref": 21, "behalf": 21, "addtogamewidgetbuild": [21, 23], "onmount": [21, 23, 39, 46, 124], "g": [21, 32, 54, 60, 66, 87, 122, 123, 124], "ref": [21, 23], "watch": [21, 64], "prior": 21, "onremov": [21, 39, 46], "riverpodawaretextcompon": [21, 23], "textcompon": [21, 23, 39, 44, 56, 58, 71, 124, 131, 132], "int": [21, 23, 34, 35, 39, 44, 48, 55, 60, 71, 83, 87, 101, 106, 107, 109, 112, 122, 123, 124, 128, 130, 131, 132], "currentvalu": [21, 23], "countingstreamprovid": [21, 23], "p0": [21, 23, 60], "hasvalu": [21, 23], "text": [21, 23, 32, 34, 35, 36, 39, 44, 47, 58, 61, 62, 69, 71, 74, 83, 86, 93, 94, 97, 98, 103, 104, 106, 109, 113, 115, 120, 122, 124, 131, 132], "27": [21, 23], "riverpodawaregamewidget": [21, 22, 23], "componentref": 22, "riverpodcomponentmixin": [22, 23, 24], "riverpodgamemixin": [22, 23], "riverpodawaregamewidgetst": 22, "rebuild": [23, 34, 39, 124], "facilit": 23, "gamewidget": [23, 24, 25, 36, 37, 46, 47, 49, 52, 62, 71, 118, 120, 121, 122, 123, 124, 126, 127, 132, 134, 135, 136, 137, 138, 139], "subscript": 23, "rebuilt": [23, 46, 124], "awar": [23, 46, 116, 123, 130], "excerpt": 23, "refexamplegam": 23, "oper": [23, 38, 60, 64, 65, 86, 88, 100, 121, 122, 124, 126], "ordin": 23, "globalkei": 24, "duti": 24, "associ": [24, 48, 55, 70, 75, 93, 95, 96, 99, 103, 104, 109], "consumerstatefulel": 24, "gamewidgetst": 24, "spinecompon": 25, "rememb": [25, 35, 38, 39, 63, 122, 128, 137], "initspineflutt": 25, "main": [25, 32, 34, 36, 37, 39, 44, 46, 47, 60, 63, 64, 66, 68, 70, 71, 72, 93, 94, 98, 105, 106, 113, 118, 120, 121, 122, 123, 124, 126, 127, 131, 134, 135, 136, 137, 138, 139], "widgetsflutterbind": 25, "ensureiniti": 25, "runapp": [25, 37, 46, 47, 118, 120, 121, 122, 123, 124, 126, 127, 132, 134, 135, 136, 137, 138, 139], "gamefactori": [25, 47, 127, 132], "spineexampl": 25, "flamespineexampl": 25, "spineboi": 25, "skeleton": 25, "fromasset": 25, "atlasfil": 25, "skeletonfil": 25, "pro": 25, "skel": 25, "walk": [25, 30, 83, 101], "mode": [25, 34, 36, 66, 121, 122, 123, 124], "animationst": 25, "setanimationbynam": 25, "ondetach": 25, "resourc": [25, 46, 106, 118, 121, 122, 129], "style": [26, 32, 33, 34, 38, 48, 55, 60, 61, 64, 71, 101, 122, 123, 124, 131, 132], "beauti": 26, "customiz": 26, "flamesplashscreen": 26, "theme": [26, 34], "flamesplashthem": 26, "dark": [26, 74, 101, 120], "onfinish": [26, 44], "buildcontext": [26, 47, 62, 132], "navig": [26, 34, 35, 36, 71, 118], "pushnam": [26, 71], "repo": 26, "page": [26, 32, 34, 60, 64, 70, 71, 118, 122, 124], "detail": [26, 32, 35, 39, 48, 50, 55, 64, 65, 70, 94, 118, 126, 137], "api": [28, 29, 32, 35, 39, 44, 52, 54, 55, 60, 62, 65, 67, 68, 70, 115, 116, 117, 123, 124], "visit": [28, 74, 76, 79, 82, 87, 96, 106, 112, 113, 123], "snippet": [28, 65, 122], "svginstanc": 28, "300": [28, 36, 38, 53, 54, 55, 132], "renderposit": 28, "svgcompon": 28, "pars": [29, 31, 39, 60, 77, 83, 91, 96, 100, 101, 107, 111, 113], "tmx": [29, 30, 31, 72], "xml": [29, 31], "everyth": [29, 31, 65, 95, 118, 121, 124, 127, 137], "my_map": 29, "32": [29, 39, 65, 70, 71, 124, 131, 132, 136, 137, 138, 139], "rpg": 29, "progress": [29, 32, 44, 68, 100, 105, 106], "visibl": [29, 30, 44, 80, 103, 121, 122, 123, 124, 137], "layer": [29, 31, 39, 53, 68, 69, 136], "spritebatch": 29, "includ": [29, 32, 34, 35, 39, 44, 46, 47, 49, 52, 53, 55, 65, 66, 70, 72, 74, 77, 94, 95, 99, 112, 120, 121, 123, 124, 128], "orthogon": 29, "isometr": [29, 31, 39, 64], "hexagon": [29, 31], "stagger": [29, 31], "isomorph": 29, "column": [29, 53, 60, 65, 70, 122, 124, 132], "floor_und": 29, "sequenceeffect": 29, "moveeffect": [29, 32, 38, 44, 129, 132], "noiseeffectcontrol": 29, "durat": [29, 36, 38, 44, 55, 68, 71, 85, 124, 129, 130, 131, 132], "lineareffectcontrol": 29, "repeatcount": [29, 36, 38, 44, 130, 131, 132], "oncomplet": [29, 39, 44, 70, 124, 130, 131, 132], "removefrompar": [29, 34, 37, 38, 39, 48, 55, 128, 129, 130, 131, 132, 137, 138, 139], "tileset": [29, 31, 39], "big": [29, 35, 65, 122], "k": [29, 120, 122, 123, 124], "But": [29, 38, 39, 65, 70, 74, 75, 95, 98, 115, 116, 123, 124, 135, 136], "hardwar": [29, 50, 51], "queri": [29, 103, 106, 116, 123], "max": [29, 44, 67, 129], "4096x4096": 29, "web": [29, 46, 53, 54, 60, 64, 65, 118, 126], "8192x8192": 29, "atlasmaxx": 29, "huge": [29, 38, 124], "resiz": [29, 39, 65, 121, 126], "fit": [29, 35, 37, 70, 121], "9216": 29, "atlasmaxi": 29, "horizont": [29, 30, 37, 70, 121, 134], "vertic": [29, 30, 37, 38, 39, 64, 70, 118, 121, 123, 124, 134], "even": [29, 35, 37, 38, 39, 44, 46, 48, 53, 55, 62, 66, 67, 71, 74, 75, 77, 87, 95, 96, 120, 121, 123, 124], "ignoreflip": 29, "sum": [29, 92], "thousand": [29, 89], "tiledatla": 29, "next": [29, 32, 39, 44, 46, 65, 78, 89, 94, 95, 100, 101, 105, 106, 118, 121, 122, 123, 124, 128, 130, 132, 134, 135, 136, 137, 138, 139], "imprecis": 29, "float": [29, 34, 39, 44, 90], "scienc": 29, "learn": [29, 35, 65, 74, 121, 124, 134, 139], "solv": [29, 70, 124, 128, 130], "simplest": [30, 36, 39, 44, 47, 70, 74, 118, 139], "getlay": 30, "objectgroup": 30, "myobjectgrouplay": 30, "imagelay": 30, "myimagelay": 30, "tilelay": 30, "mytilelay": 30, "mygrouplay": 30, "opac": [30, 34, 35, 44, 48, 55, 64, 71, 130, 132], "tint": [30, 44, 122], "parallax": [30, 39, 136, 137, 138, 139], "custom": [30, 31, 34, 36, 39, 49, 52, 53, 55, 65, 66, 68, 70, 72, 74, 88, 90, 94, 101, 107, 111, 112, 113, 116], "v1": [30, 32, 34], "advanc": [30, 36, 37, 39, 46, 49, 53, 70, 74, 106, 138], "behavior": [30, 36, 37, 38, 39, 44, 46, 47, 52, 54, 56, 124, 137], "eg": [30, 71], "region": [30, 35, 37, 49, 65, 123, 124], "area": [30, 38, 39, 46, 70, 78, 124, 134, 138, 139], "great": [31, 35, 39, 65], "content": [31, 35, 47, 63, 64, 66, 70, 71, 74, 83, 86, 94, 95, 96, 97, 103, 110, 113, 118, 120, 121, 124, 126], "Its": [31, 39, 100], "primari": [31, 64, 74, 106], "placement": [31, 56], "annot": [31, 35, 80, 95, 96, 122], "extra": [31, 32, 38, 70, 96, 97, 121, 123, 124], "try": [31, 32, 35, 36, 38, 39, 61, 80, 95, 105, 106, 121, 123, 124, 126, 136, 137], "stai": [31, 39, 44, 124], "intuit": [31, 74], "term": [31, 95], "straight": [31, 38, 44, 52, 98, 137], "rectangular": [31, 35, 37, 49, 139], "collect": [31, 44, 47, 60, 120, 124, 126, 127, 130, 132, 136, 139], "certain": [31, 37, 38, 39, 44, 46, 58, 64, 68, 74, 76, 87, 93, 100, 101, 106, 115, 116, 121, 122, 123], "fake": 31, "techniqu": [31, 124, 136], "tiledcompon": [31, 72], "core": [31, 65, 68, 123], "close": [32, 37, 39, 48, 55, 64, 71, 83, 96, 123, 124, 131, 135, 137, 139], "carefulli": 32, "github": [32, 34, 126], "duplic": 32, "d": [32, 39, 46, 63, 64, 74, 103, 107, 123, 124, 130], "submit": [32, 36, 63], "send": [32, 38, 74, 105, 106], "xxxx": 32, "verifi": [32, 35, 36, 58, 118, 123], "describ": [32, 37, 39, 44, 54, 55, 56, 65, 70, 71, 74, 75, 87, 94, 106, 115, 121, 124, 136], "discord": 32, "discuss": [32, 122, 123], "thought": [32, 70, 124], "feedback": [32, 71], "spend": 32, "much": [32, 35, 36, 37, 38, 39, 44, 46, 47, 63, 66, 74, 94, 98, 120, 123, 124, 137, 139], "enhanc": [32, 70], "align": [32, 39, 53, 56, 57, 68, 70, 71, 121, 124, 129], "els": [32, 34, 38, 39, 44, 46, 48, 49, 52, 53, 55, 64, 71, 78, 80, 84, 87, 93, 95, 98, 116, 121, 122, 123, 124, 130, 131, 132], "love": 32, "hear": [32, 74, 97], "accept": [32, 35, 60, 68, 70, 96, 124], "guid": [32, 33, 34, 70, 101, 111, 134], "melo": [32, 34, 36], "analyz": [32, 35], "titl": [32, 74, 75, 77, 78, 80, 81, 84, 87, 88, 89, 93, 94, 95, 96, 97, 98, 101, 105, 110, 113], "convent": [32, 34, 35, 124], "commit": [32, 118], "prefix": [32, 72, 77, 112], "feat": 32, "criteria": 32, "branch": [32, 63, 74, 105, 118], "reflect": [32, 38], "machin": [32, 74, 105], "git": [32, 63, 118], "your_github_us": 32, "recent": [32, 123], "stabl": [32, 46, 63, 118], "match": [32, 36, 37, 56, 83, 87, 101, 118], "channel": [32, 67, 118], "activ": [32, 38, 44, 71, 124, 130, 139], "root": [32, 34, 37, 39, 47, 50, 63, 64, 66, 77, 94], "bootstrap": 32, "dependency_overrid": 32, "plugin": [32, 34, 53], "spellcheck": 32, "npm": 32, "yarn": [32, 74, 76, 77, 83, 87, 93, 95, 99, 100, 101, 102, 103, 104, 105, 107, 109, 110, 111, 112, 114], "c": [32, 39, 64, 65, 68, 71], "md": [32, 34, 118], "markdownlint": 32, "cli": 32, "rule": [32, 35, 71, 83, 88, 122, 128], "error": [32, 34, 35, 39, 47, 77, 80, 81, 87, 91, 92, 101, 105, 107, 111, 113, 118, 124, 128], "sadli": 32, "particularli": [32, 44, 70], "labori": 32, "md013": 32, "circumv": 32, "extens": [32, 34, 35, 39, 61, 121, 124], "rewrap": 32, "vscode": 32, "wrappingcolumn": 32, "trick": [32, 123], "checkout": [32, 63], "b": [32, 37, 63, 64, 87, 96, 106, 109], "my": [32, 74, 75, 88, 95, 96, 98, 101, 103, 109, 120, 121, 122, 123, 126, 127, 128], "split": [32, 72, 84, 95, 97, 123], "messag": [32, 35, 62, 101], "push": [32, 63, 71, 118], "remot": [32, 118], "usernam": [32, 118], "deprec": 32, "tag": [32, 95, 96, 97, 103, 104, 109, 110], "convei": 32, "task": [32, 74, 120, 130], "warn": [32, 34, 93, 95, 97, 106, 124], "Will": [32, 68, 126], "nondeprecatedfeatur": 32, "deprecatedfeatur": 32, "ask": [32, 38, 39, 71, 74, 81, 101, 126], "newli": [32, 127], "patch": 32, "introduc": [32, 39, 61, 77, 93, 116, 134, 137, 139], "doc": [32, 34, 46, 49, 61, 77, 109, 129], "refactor": [32, 35, 123, 128, 135], "public": [32, 35, 36, 63, 77, 122, 123], "perf": 32, "affect": [32, 37, 39, 46, 64, 65, 106, 121], "extern": [32, 35, 52, 53, 111], "ci": 32, "script": [32, 34, 74, 75, 76, 77, 83, 87, 93, 95, 99, 100, 101, 102, 103, 104, 105, 107, 109, 110, 111, 113, 114], "chore": 32, "don": [32, 34, 37, 38, 39, 44, 48, 49, 53, 54, 55, 63, 65, 66, 67, 71, 72, 74, 75, 81, 88, 95, 96, 97, 101, 120, 121, 122, 123, 128, 129, 138], "modifi": [32, 35, 37, 39, 44, 50, 81, 92, 122, 123, 124, 127, 134], "revert": [32, 44], "end": [32, 36, 38, 44, 48, 58, 64, 68, 74, 78, 79, 82, 88, 89, 94, 95, 101, 106, 109, 120, 123, 127, 128, 129, 130, 134, 137], "mark": [32, 34, 38, 44, 62, 95, 98, 106, 109, 120, 122, 123, 139], "childrenfactori": 32, "componentset": 32, "factori": [32, 37, 39, 44, 60, 122, 123, 124, 137, 138, 139], "joystickcompon": [32, 53], "mandarin": 32, "readm": [32, 118], "infin": [32, 44, 89], "life": [32, 60, 68, 106, 112, 122, 123, 129, 134], "migrat": 32, "copi": [32, 35, 124, 129], "few": [32, 39, 44, 53, 60, 68, 88, 115, 124, 130, 139], "thing": [32, 34, 35, 36, 37, 38, 46, 53, 60, 62, 63, 66, 68, 70, 118, 121, 123, 124, 127, 128, 129, 130, 131, 135, 137], "search": [32, 50], "codebas": 32, "intend": [32, 36, 38, 39, 70, 118, 123], "v": [32, 118], "package1": 32, "package2": 32, "changelog": 32, "haven": [32, 121], "publish": [32, 34], "aren": [32, 122], "satisfi": [32, 101, 107], "result": [32, 34, 36, 38, 39, 44, 60, 66, 71, 86, 87, 89, 90, 91, 92, 95, 96, 101, 103, 104, 106, 121, 123, 132, 139], "dry": 32, "contribut": [33, 34], "html": [34, 36, 63, 70, 95, 96, 103], "sphinx": 34, "myst": 34, "serv": [34, 35, 37, 38, 80, 118, 120, 121], "syntax": [34, 44, 80, 87, 95, 98], "plenti": 34, "internet": 34, "toctre": 34, "subdirectori": 34, "hidden": [34, 62], "topic": [34, 123, 124], "relative_path": 34, "to_topic1": 34, "topic2": 34, "mention": [34, 35, 74, 95, 116, 121, 127, 130, 135], "orphan": [34, 111, 121], "emphas": [34, 95], "distinct": [34, 122], "appear": [34, 37, 39, 44, 64, 66, 95, 124, 138], "tripl": 34, "backtick": 34, "caveat": 34, "look": [34, 35, 37, 39, 44, 46, 53, 61, 67, 68, 72, 74, 78, 84, 101, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 132, 134, 135, 136, 137], "encount": [34, 77, 87, 106, 113], "told": 34, "seealso": 34, "cool": [34, 63, 135, 136], "thingi": 34, "embed": [34, 36], "alongsid": [34, 62, 70], "insert": [34, 44, 47, 86, 95, 124, 134], "emb": [34, 68], "tap_ev": [34, 55], "popup": [34, 64], "180": [34, 39, 48], "160": [34, 48], "_sphinx": 34, "sub": [34, 52, 121], "append": 34, "secondli": [34, 123], "displai": [34, 37, 39, 47, 49, 53, 58, 61, 70, 71, 74, 96, 98, 106, 121, 123, 124, 127, 129], "purpos": [34, 35, 36, 37, 53, 60, 64, 66, 70, 75, 77, 87, 88, 90, 121, 124], "abl": [34, 36, 37, 38, 39, 44, 49, 67, 70, 96, 97, 105, 118, 121, 122, 123, 127, 128, 130, 136, 138, 139], "execut": [34, 36, 39, 44, 70, 71, 74, 76, 77, 78, 79, 82, 84, 94, 96, 97, 101, 103, 106, 111, 113, 116, 118, 124], "rout": [34, 64], "proper": [34, 124], "subset": 34, "infobox": 34, "ifram": 34, "overlai": [34, 45, 47, 71, 124, 131, 132], "window": [34, 37, 48, 63, 118, 121], "suitabl": 34, "demo": [34, 53, 71], "integ": [34, 67, 89, 90, 91, 92, 93, 106, 122, 128, 129], "350px": 34, "tapeventsgam": [34, 55], "taptarget": [34, 55], "tappabl": [34, 55, 122, 123], "ish": [34, 48, 55], "rectangl": [34, 37, 38, 39, 48, 55, 61, 65, 70, 134, 135, 138, 139], "receiv": [34, 39, 46, 47, 48, 49, 50, 53, 55, 65, 70, 71, 72, 83, 105, 106, 124, 127, 135, 137, 138, 139], "_paint": [34, 48, 54, 55, 71, 124, 134, 135], "paint": [34, 38, 39, 44, 48, 54, 55, 64, 65, 67, 68, 70, 71, 122, 123, 124, 134, 135], "0x448ba8ff": [34, 55], "circl": [34, 37, 38, 39, 48, 49, 55, 68, 123], "pointerid": [34, 48, 55], "expandingcircl": [34, 55], "_circl": [34, 55], "ongameres": [34, 39, 46, 48, 55, 71], "75": [34, 39, 44, 48, 55, 129, 132], "drawrect": [34, 48, 54, 55, 67, 68, 70, 134, 135], "torect": [34, 39, 48, 54, 55, 60, 71, 122, 123, 124, 134, 135], "onlongtapdown": [34, 49], "accent": [34, 55], "ontapup": [34, 49, 53, 64, 71, 123, 124], "tapupev": [34, 55, 71, 123, 124], "releas": [34, 50, 53, 55, 63, 124, 140], "ontapcancel": [34, 49, 53, 71, 124], "tapcancelev": [34, 55, 71, 124], "cancel": [34, 37, 48, 55], "_center": [34, 55], "_basecolor": [34, 55], "hslcolor": [34, 48, 54, 55], "fromahsl": [34, 48, 54, 55], "nextdoubl": [34, 48, 54, 55, 68, 122], "360": [34, 48, 54, 55], "tocolor": [34, 48, 54, 55], "_outerradiu": [34, 55], "_innerradiu": [34, 55], "_releas": [34, 48, 55], "_cancel": [34, 55], "paintingstyl": [34, 38, 48, 55, 64, 70, 71, 122, 123, 124], "stroke": [34, 38, 48, 52, 55, 64, 67, 70, 71, 121, 122, 123, 124], "thin": [34, 55, 124], "drawn": [34, 39, 44, 55, 61, 65, 66, 122, 124], "_accentradiu": [34, 55], "1e10": [34, 55], "_accentpaint": [34, 55], "strokewidth": [34, 38, 48, 55, 64, 71, 122, 123, 124], "0xffffffff": [34, 48, 55, 71], "disappear": [34, 55, 130], "maxradiu": [34, 55], "175": [34, 55, 121, 122, 123, 124], "drawcircl": [34, 38, 48, 55, 68, 71, 123, 124], "implos": [34, 55], "withopac": [34, 38, 48, 54, 55, 68], "entri": [34, 103, 104, 128], "parent": [34, 38, 46, 55, 56, 68, 71, 82, 106, 122, 123, 124, 132], "sidebar": 34, "menu": [34, 47, 62, 71, 74, 98, 106, 118, 124, 127, 131], "logic": [34, 37, 39, 44, 49, 50, 53, 64, 66, 68, 105, 112, 115, 116, 121, 122, 123, 124, 127, 134, 138, 139], "alphabet": 34, "addition": [34, 39, 72, 128, 130], "organ": [34, 65, 71, 77, 94, 116, 123, 127], "bridge_packag": 34, "package_nam": 34, "documentation_sect": 34, "bug": [34, 35, 36], "fairli": [34, 49, 124, 130, 131, 132], "python": 34, "environ": [34, 35, 64, 74, 118, 124, 127, 140], "dedic": [34, 53, 54, 70, 94, 106, 123], "virtual": [34, 53, 105], "setup": [34, 126, 127], "prerequisit": 34, "met": 34, "luckili": [34, 44], "smart": [34, 139], "enough": [34, 38, 39, 68, 88, 101, 120, 124, 126], "recompil": 34, "browser": [34, 36, 63, 121], "becaus": [34, 35, 38, 39, 44, 66, 70, 92, 106, 115, 118, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 132, 135], "compil": [34, 39, 70, 77, 80, 81, 87, 94, 101, 107, 113, 124], "host": [34, 35, 37, 46, 47, 63], "localhost": 34, "8000": 34, "occasion": [34, 123], "clean": [34, 35, 46, 106, 123, 135], "bad": 34, "linkcheck": 34, "broken": [34, 70, 83, 87], "kill": [34, 127], "tcp": 34, "_build": 34, "index": [34, 36, 39, 63, 106, 109, 122, 123, 124, 128, 137, 138, 139], "drawback": 34, "won": [34, 63, 120, 121, 124], "restart": 34, "delet": [34, 36, 124, 135], "adjac": [35, 98], "strive": 35, "readabl": 35, "benefit": [35, 39, 65, 66, 124], "who": [35, 37, 75, 95, 99, 101, 103, 115, 123], "studi": 35, "understand": [35, 37, 53, 70, 101, 105, 126, 128, 129, 130, 139], "particular": [35, 36, 38, 46, 71, 88, 91, 98, 99, 118], "debug": [35, 59, 60, 90, 121, 122, 123], "offici": [35, 94], "program": [35, 76, 78, 79, 82, 84, 87, 93, 97, 101, 105, 118, 119, 124, 125, 133], "enforc": [35, 39, 113, 122], "linter": 35, "ensur": [35, 36, 66, 68, 77, 80, 121, 123], "conform": 35, "easi": [35, 62, 63, 65, 67, 115, 116, 124], "symbol": [35, 92, 95, 103, 112, 120, 122], "smallest": [35, 89], "meta": [35, 103], "protect": [35, 75], "never": [35, 44, 49, 66, 93, 103, 106, 123, 130, 136], "cupertino": [35, 44], "strongli": [35, 39, 118], "privat": [35, 36, 118, 122, 124], "perfectli": 35, "reason": [35, 36, 65, 77, 98, 113, 120, 121, 127], "except": [35, 38, 44, 50, 65, 71, 79, 80, 84, 88, 90, 91, 92, 95, 106, 112, 123, 124, 129, 132], "immedi": [35, 77, 79, 82, 95, 105, 106, 123, 124], "typedef": 35, "explicitli": [35, 44, 46, 68, 70, 88], "statement": [35, 76, 77, 78, 97, 98, 105, 122, 124], "src": [35, 36], "provider_interfac": 35, "anchorprovid": 35, "angleprovid": 35, "positionprovid": 35, "scaleprovid": 35, "sizeprovid": [35, 44], "contract": 35, "condit": [35, 39, 54, 74, 78, 87, 98, 104, 106, 124], "post": [35, 66], "failur": [35, 36], "thumb": [35, 71], "easier": [35, 36, 39, 60, 61, 62, 70, 120, 124, 134], "earli": [35, 124, 130, 131], "valid": [35, 48, 60, 75, 77, 88, 91, 93, 95, 97, 107, 113, 118, 124, 126], "setter": 35, "invalid": [35, 92, 124], "cannot": [35, 44, 55, 64, 80, 85, 86, 92, 95, 96, 98, 103, 105, 107, 118, 123, 124, 127], "Such": [35, 36, 44, 48, 55, 71, 74, 101, 105, 107, 123], "mini": 35, "against": [35, 36, 38, 74, 83, 92], "could": [35, 37, 38, 39, 44, 46, 49, 52, 65, 67, 68, 70, 77, 78, 94, 97, 100, 101, 105, 106, 112, 113, 118, 120, 123, 124, 127, 130, 134, 137, 138], "erron": 35, "intern": [35, 39, 47, 63, 65, 68, 71, 90, 121, 123, 124], "deliber": 35, "explicit": [35, 77, 80, 106], "outsid": [35, 37, 38, 39, 47, 63, 70, 77, 87, 94, 96, 103, 122, 123, 124, 132], "decid": [35, 37, 38, 39, 70, 78, 105, 106, 120, 121, 122, 123, 124, 126], "question": [35, 123], "product": [35, 63], "ought": [35, 70], "member": [35, 67, 77], "harder": [35, 80], "burden": 35, "variabl": [35, 38, 39, 44, 46, 70, 74, 77, 80, 81, 85, 86, 87, 88, 92, 101, 109, 111, 113, 121, 122, 123, 124, 127, 128, 129, 130, 131, 134, 135, 137], "properti": [35, 37, 39, 44, 48, 49, 55, 58, 64, 68, 70, 71, 88, 116, 122, 123, 124], "NOT": [35, 38, 92, 93, 95, 124], "invit": 35, "unless": [35, 37, 56, 75, 99], "sai": [35, 36, 38, 39, 49, 63, 74, 75, 88, 95, 118, 121, 123, 129], "suffici": [35, 47, 121, 123], "collaps": 35, "lack": 35, "endregion": [35, 123, 124], "getter": [35, 39, 46, 60, 68, 70, 116, 122, 123], "myclass": 35, "_variabl": 35, "gather": [35, 126], "regular": [35, 47, 67, 70, 71, 81, 83, 88, 89, 90, 92, 97, 101, 123, 124], "comment": [35, 77, 95, 96, 124, 134], "fragment": [35, 74], "That": [35, 36, 37, 44, 64, 68, 70, 81, 95, 98, 103, 113, 118, 123, 124, 134, 135], "markdown": 35, "especi": [35, 39, 55, 68, 106, 115, 116], "advic": 35, "disregard": [35, 38], "passiv": [35, 38, 128, 129, 132, 139], "voic": [35, 106], "pattern": [35, 39, 61, 68, 122], "appar": 35, "exactli": [35, 36, 38, 71, 87, 93, 121, 124], "verb": 35, "tens": 35, "implicit": 35, "subject": 35, "paragraph": [35, 70], "sentenc": 35, "unclear": 35, "child": [35, 44, 47, 52, 56, 61, 68, 71, 123, 132], "owner": [35, 106], "belong": [35, 123, 124], "addchild": 35, "obviou": [35, 77], "omit": [35, 39, 47, 49, 65, 66, 75, 88, 118, 135, 136, 137, 139], "macro": 35, "answer": [35, 121, 122], "wherea": [35, 38, 55, 122, 123], "websit": 35, "site": [35, 126], "peopl": [35, 75, 78, 105, 115], "discover": 35, "excit": [35, 123, 127], "charact": [35, 37, 39, 64, 70, 74, 76, 94, 98, 103, 106, 113, 120], "bottom": [35, 39, 53, 56, 60, 68, 121, 122, 123, 124, 128, 129, 130, 132, 138], "plain": [35, 67, 70, 74, 79, 84, 94], "separ": [35, 38, 53, 60, 63, 74, 77, 94, 97, 122, 124, 130, 132], "header": [35, 70, 110], "preced": [35, 124], "blank": [35, 118, 127], "sublist": 35, "indent": [35, 78, 95, 98], "reappear": 36, "coverag": 36, "_test": 36, "suffix": 36, "spookyeffect": 36, "spooky_effect": 36, "spooky_effect_test": 36, "mirror": 36, "whose": [36, 37, 48, 64, 95, 116, 123], "suit": [36, 66, 101, 120, 123, 124, 130], "capit": 36, "lowercas": [36, 118], "underscor": [36, 93, 97, 118, 122], "kind": [36, 37, 38, 39, 49, 65, 74, 75, 106, 116, 120, 124, 126], "fastest": 36, "testwithflamegam": 36, "fulli": [36, 38, 44, 46, 64, 67, 68, 96, 116, 121, 123], "behav": [36, 66], "until": [36, 38, 46, 83, 94, 101, 121], "schedul": [36, 38, 39], "testwithgam": 36, "_mygam": 36, "nake": 36, "insuffici": [36, 44], "actual": [36, 39, 44, 64, 67, 70, 96, 106, 118, 120, 121, 122, 123, 124, 128, 136], "testwidget": 36, "tester": 36, "pumpwidget": 36, "pump": 36, "equival": [36, 44, 70, 76, 78, 81, 88, 89, 90, 92, 97, 101], "templat": [36, 107], "testgolden": 36, "goldenfil": 36, "_golden": 36, "my_test_fil": 36, "output": [36, 44, 60, 65, 103, 105, 118], "subsequ": [36, 66, 77, 88, 103, 121, 123], "diff": 36, "reliabl": 36, "font": [36, 70, 120], "discrep": 36, "anti": [36, 70], "alias": [36, 70, 75, 99, 100], "algorithm": [36, 38, 70], "testrandom": 36, "seed": [36, 113], "shown": [36, 39, 47, 53, 62, 74, 106, 120, 121, 124], "nnn": 36, "ll": [36, 49, 66, 74, 78, 81, 87, 88, 96, 97, 101, 121, 123, 124], "leav": [36, 54, 64, 70, 112, 124], "defeat": [36, 139], "imagin": [37, 38, 52, 96, 105, 120, 121, 135], "somewher": [37, 39, 58, 67, 68, 121, 123, 124], "mere": [37, 95, 123], "moment": [37, 38, 55, 63, 66, 121], "contrari": [37, 71], "mindset": 37, "anywher": [37, 46, 50, 58, 66, 77, 88, 93, 123], "compris": [37, 102, 121], "tradit": [37, 56, 127, 130], "switch": [37, 50, 53, 76, 115, 122, 123, 124, 128, 132], "unmount": 37, "myworld": [37, 39, 46], "unlik": [37, 56, 67, 77, 83, 92, 135], "currentcamera": 37, "skip": [37, 44, 52, 70, 106, 124], "themselv": [37, 106, 139], "800": 37, "600": [37, 130, 132], "pretend": 37, "resolut": [37, 120, 121], "choic": [37, 74, 84, 98, 102, 105, 106, 121, 122], "myworldcompon": 37, "aspect": [37, 67, 70, 120, 122, 124], "underutil": 37, "pixel": [37, 38, 53, 60, 68, 120, 121, 122, 126, 128, 129, 136, 137], "chosen": [37, 65], "mask": [37, 67], "thu": [37, 47, 48, 55, 64, 80, 82, 89, 90, 92, 93, 95, 96, 98, 106, 118, 120, 121, 123, 124, 128], "element": [37, 39, 46, 47, 63, 95, 121, 139], "hud": [37, 39, 53, 126, 130, 132], "maxviewport": [37, 121], "expand": [37, 39, 47, 61, 123, 124], "equal": [37, 39, 44, 56, 65, 80, 89, 90, 92, 109, 116, 121, 122], "fixedresolutionviewport": 37, "black": [37, 46, 64, 67, 81, 118, 120, 122, 123, 124, 128, 134, 136], "bar": [37, 60, 118, 132], "fixedsizeviewport": 37, "predefin": [37, 38, 44, 68, 115], "fixedaspectratioviewport": 37, "preserv": [37, 50], "circularviewport": 37, "front": [37, 39, 64, 95, 124, 128], "underli": [37, 49, 64, 68, 70, 121], "scroll": [37, 39, 50, 70, 121, 127, 128, 136, 140], "action": [37, 44, 53, 54, 55, 63, 71, 83, 86, 106, 123, 137, 139], "closer": [37, 39, 137], "behind": [37, 46, 47, 70, 121], "transform": [37, 39, 60, 65, 66], "scaleeffect": [37, 71, 124], "smooth": [37, 123, 124], "parallaxcompon": [37, 136], "beneath": [37, 123], "mystaticbackground": 37, "runtim": [37, 39, 46, 74, 75, 76, 78, 79, 83, 84, 88, 90, 91, 92, 95, 96, 97, 101, 105, 109, 113, 114], "viabl": 37, "circumst": [37, 38], "movebi": 37, "moveto": [37, 48, 71], "under": [37, 46, 55, 63, 70, 107, 124], "hood": 37, "undo": 37, "setbound": 37, "commonli": [37, 39, 48, 55, 58, 70], "rect": [37, 38, 39, 55, 65, 67, 68, 70, 123, 124], "far": [37, 38, 101, 107, 121, 123, 124, 128, 136, 137], "awai": [37, 38, 48, 55, 65, 105, 123, 124], "frequent": [37, 66, 124], "canse": 37, "cull": 37, "act": [38, 44, 53, 116, 124], "intersect": [38, 60], "arrow": [38, 39, 98, 118, 130, 132], "enemi": [38, 39, 65, 72, 126, 127, 128, 130, 132, 137], "coin": [38, 87, 88, 95, 98], "hitbox": [38, 49, 123, 139], "react": [38, 52], "gestur": [38, 48, 51, 52, 53, 54, 55, 106, 123, 134, 135, 137], "accur": [38, 49], "polygon": [38, 39, 49], "overshoot": 38, "account": [38, 44, 118, 121, 139], "delta": [38, 46, 48, 49, 53, 111, 116, 123, 124, 135, 136, 137, 138, 139], "ancestor": [38, 48, 55, 124], "collisiondetectionworld": 38, "closest": 38, "collision_detect": 38, "doc_flame_exampl": [38, 44, 60, 64, 71], "ember": [38, 44, 60, 124, 126, 128, 129, 130, 131, 132, 140], "hide": [38, 39, 70, 71, 106], "collisiondetectiongam": 38, "emberplay": [38, 44, 60, 127, 128, 130, 132], "40": [38, 39, 44, 48, 53, 71, 122, 123, 124, 131, 132], "effectcontrol": [38, 71, 124, 129, 130, 131, 132], "reversedur": [38, 44, 124, 129, 132], "curv": [38, 44, 48, 68, 124, 129, 132], "easeout": [38, 44, 129, 132], "rectanglecollid": 38, "_collisionstartcolor": 38, "amber": 38, "_defaultcolor": 38, "cyan": 38, "defaultpaint": 38, "rendershap": 38, "oncollisionstart": [38, 139], "intersectionpoint": [38, 130, 132, 139], "oncollisionend": [38, 139], "iscollid": 38, "mycollid": 38, "oncollis": [38, 130, 131, 132], "yourothercompon": 38, "keyword": [38, 76, 78, 118, 121, 122], "edg": [38, 39, 53, 98, 118, 121, 130, 132], "vice": [38, 124], "versa": [38, 124], "hollow": 38, "enclos": [38, 70], "solid": [38, 67, 70, 122], "issolid": 38, "bounc": 38, "trajectori": 38, "resolv": [38, 52, 71, 106, 124, 130, 132], "collisionscompletednotifi": 38, "collisioncompon": 38, "dealt": [38, 123, 124], "collisiondetect": 38, "addlisten": [38, 39], "resolvecollis": 38, "mycompon": [38, 39, 48, 54, 55, 58], "fill": [38, 39, 47], "vehicl": 38, "triggersparentcollis": 38, "myspecialhitbox": 38, "utilityhitbox": 38, "shapecompon": 38, "snowman": 38, "hat": 38, "repres": [38, 39, 44, 53, 60, 61, 65, 67, 68, 70, 91, 94, 95, 97, 99, 102, 103, 104, 110, 111, 122, 136, 137, 138], "gesturehitbox": 38, "enum": [38, 39, 122, 124, 131, 132], "inact": [38, 139], "mayb": [38, 81, 97, 124, 126, 139], "fly": [38, 124], "care": [38, 39, 95, 103, 106, 123, 135, 139], "doubt": [38, 70], "containspoint": [38, 60], "convex": 38, "realli": [38, 67, 81, 86, 96, 101, 120, 123, 128, 136, 139], "counter": [38, 39], "mandatori": [38, 78], "calcul": [38, 39, 46, 78, 86, 121, 124, 128, 130, 132], "polygoncompon": 38, "rectanglecompon": [38, 71], "circlecompon": [38, 44], "viewport": [38, 39, 46, 53, 121, 131, 132], "notifi": [38, 39, 50, 70], "oncollisioncallback": 38, "onstartcollisioncallback": 38, "onendcollisioncallback": 38, "emul": [38, 124], "worri": [38, 39, 44, 115, 116, 122, 128], "standard": [38, 39, 44, 61, 72, 91, 113, 120, 122, 132], "potenti": [38, 47, 67, 129], "o": [38, 121], "n\u00b2": 38, "collisionprospect": 38, "exact": [38, 44, 120, 127], "narrow": 38, "sweep": 38, "prune": 38, "broadphas": 38, "magic": [38, 64, 75, 128], "standardcollisiondetect": 38, "magicalgorithmbroadphas": 38, "hundr": [38, 89], "ineffici": 38, "hasquadtreecollisiondetect": 38, "initializecollisiondetect": 38, "mapdimens": 38, "fromltwh": [38, 39, 55, 65, 70, 123, 124, 138, 139], "mapwidth": 38, "mapheight": 38, "minimumdist": 38, "possibli": [38, 44, 50, 106, 124], "disabl": [38, 46, 53, 60, 74], "maxobject": 38, "quadrant": 38, "maxdepth": 38, "oncomponenttypecheck": 38, "pure": [38, 53], "checker": 38, "water": [38, 126], "brick": 38, "neither": [38, 95], "nor": [38, 39, 60, 66, 78, 86, 95], "filter": [38, 67, 116], "earlier": [38, 123, 124, 127, 128, 130], "gameplai": [38, 122, 124], "cluster": 38, "empti": [38, 44, 47, 48, 103, 104, 109, 110, 123, 124, 128, 134, 137], "quadtre": 38, "cleanup": 38, "quadtreeexampl": 38, "session": 38, "interv": [38, 60, 137, 138], "ongameidl": 38, "quadtreecollisiondetect": 38, "quadbroadphas": 38, "unheard": 38, "quadtreebroadphas": 38, "significantli": 38, "sophist": 38, "ignorehitbox": 38, "npc": [38, 64, 96, 97, 106], "raycast": 38, "uniformli": 38, "scan": 38, "nearest": [38, 80, 89, 123], "irrespect": [38, 39], "li": 38, "maxdist": 38, "ray_cast": 38, "geometri": [38, 44, 48, 71], "palett": [38, 39, 69, 70], "raycastexampl": 38, "veloc": [38, 39, 128, 129, 130, 132], "60": [38, 44, 54, 55, 71, 131, 132], "resetposit": 38, "red": [38, 39, 48, 55, 64, 68, 75, 81, 120, 122, 123, 124], "raycastresult": 38, "basicpalett": [38, 39, 67, 70], "grai": 38, "30": [38, 39, 44, 71, 78, 118], "ray2": 38, "isact": 38, "originoffset": 38, "didn": [38, 44, 124], "hix": 38, "vector": [38, 39, 68, 123, 128, 130, 136], "face": [38, 39, 44, 122, 123, 124], "concern": [38, 124], "light": [38, 95], "numberofrai": 38, "spread": [38, 122, 124], "startangl": 38, "sweepangl": 38, "tabl": [38, 122, 123], "ray_trac": 38, "raytraceexampl": 38, "isclick": 38, "_rai": 38, "boxpaint": 38, "min": [38, 44, 67], "_timepass": 38, "raytrac": 38, "ceil": [38, 87, 128, 132], "tolist": [38, 123, 124], "distanceto": 38, "diagon": 38, "necessarili": [38, 123, 124], "lazi": 38, "further": [38, 44, 63, 95, 120, 123, 124], "blown": 38, "accuraci": 38, "realist": [38, 39, 124], "particl": [38, 64, 69, 115, 116], "hand": [38, 65, 83, 92, 121, 127, 131], "involv": [38, 124, 127], "abil": [38, 44, 58, 61, 66, 74, 75, 123, 126, 130, 139], "animationcompon": 38, "diagram": [39, 70], "intimid": 39, "inherit": [39, 44, 70, 135], "component1": 39, "component2": 39, "onparentres": 39, "overridden": [39, 48, 50, 54, 55, 58, 106, 135], "asynchron": [39, 106, 121], "guarante": [39, 46, 50, 55], "lifetim": [39, 68, 122], "onchildrenchang": 39, "went": 39, "seri": [39, 124, 130], "isload": 39, "finish": [39, 44, 46, 60, 84, 98, 105, 106, 121, 124, 128, 131, 132, 139], "ismount": 39, "isremov": 39, "sort": 39, "languag": [39, 74, 75, 76, 78, 79, 82, 84, 87, 88, 93, 97, 101, 107, 111, 113, 119, 125, 133], "were": [39, 44, 50, 70, 71, 93, 94, 95, 101, 106, 107, 110, 116, 118, 120, 123, 124, 126, 128, 130, 131], "overlap": [39, 44, 123, 129], "tick": [39, 44, 46, 60, 65, 66, 68, 124], "visual": [39, 46, 58, 64, 68, 71, 118, 121, 135, 136], "hierarchi": [39, 48, 55, 70], "gameoverpanel": 39, "spriteimag": 39, "gameovertext": 39, "gameoverbutton": 39, "gameoverrestart": 39, "none": [39, 105, 106, 118], "addtopar": [39, 122], "tradition": 39, "resembl": 39, "highscoredisplai": 39, "hitpointsdisplai": 39, "fpscompon": 39, "freeli": 39, "eventu": [39, 44, 55, 71], "assur": 39, "hasworldrefer": [39, 124], "anothercompon": 39, "assert": [39, 48, 49, 101, 122, 123, 124], "thrown": [39, 79, 80, 81, 84, 88, 90, 91, 92, 105, 106], "parentisa": 39, "myparentcompon": 39, "print": [39, 49, 60, 61, 68, 70], "myvalu": 39, "hasancestor": [39, 124], "relationship": [39, 94], "myancestorcompon": 39, "identif": 39, "componentkei": 39, "findbykei": 39, "uniqu": [39, 66, 70, 71, 93, 97, 107, 131], "key2": 39, "key1": 39, "findbykeynam": 39, "queryableorderedset": 39, "strictmod": 39, "matter": [39, 63, 121, 124, 126], "allpositioncompon": 39, "componentsatpoint": [39, 123, 124], "writabl": 39, "containslocalpoint": [39, 48, 54, 55, 71], "deriv": [39, 48, 55, 64, 71, 120, 126], "yourself": [39, 47, 65, 76, 130], "dragupdateinfo": [39, 135, 136, 137, 138, 139], "droptarget": 39, "highlight": 39, "head": [39, 75, 120, 121, 122, 123], "raw": [39, 54], "rare": [39, 55], "joystick": [39, 49, 52], "ergonom": 39, "had": [39, 120, 123, 126], "taken": [39, 44, 66, 123, 124, 139], "again": [39, 44, 53, 80, 81, 84, 98, 113, 120, 123, 124, 127, 132, 138], "mychildcompon": 39, "hasvis": 39, "isvis": 39, "descend": [39, 53, 68, 71, 123, 130], "rendertre": 39, "retain": [39, 112], "uniform": [39, 44], "amount": [39, 44, 48, 53, 60, 64, 65, 70, 76, 83, 85, 87, 101, 106, 113, 121, 123, 127, 128, 129, 131, 132, 136, 137, 138, 139], "nativeangl": 39, "measur": [39, 44, 48, 120, 121, 124], "orient": [39, 44, 46, 60], "north": [39, 44], "east": [39, 44], "south": [39, 44], "west": [39, 44], "90": [39, 44, 122], "anchorgam": 39, "_parentanchortext": 39, "_childanchortext": 39, "_anchoredrectangl": 39, "_redcompon": 39, "_bluecompon": 39, "indexof": [39, 123, 124], "elementat": [39, 130, 132], "topleft": [39, 56, 70, 116, 124, 127, 128, 132], "grab": [39, 66, 123], "absoluteposit": 39, "positionofanchor": 39, "absolutepositionofanchor": 39, "comp": 39, "bottomright": 39, "pitfal": 39, "confus": [39, 63, 70, 75, 92], "w": [39, 122, 123, 124], "fliphorizont": [39, 130, 132], "flipvert": 39, "fliphorizontallyaroundcent": 39, "flipverticallyaroundcent": 39, "128": [39, 65, 122, 123, 124, 127, 128, 129, 130, 132], "cyclic": [39, 65], "player_": 39, "spritelist": [39, 65], "steptim": [39, 65, 68, 127, 129, 132, 136, 137, 138, 139], "01": [39, 48, 64], "64": [39, 65, 68, 71, 127, 128, 129, 130, 132], "sequenc": [39, 44, 46, 48, 50, 55, 64, 65, 70, 74, 95, 97, 98, 103, 104, 105, 110, 113, 124, 127, 129, 132, 136, 137, 138, 139], "spriteanimationdata": [39, 65, 127, 129, 132, 136, 137, 138, 139], "textures": [39, 65, 127, 129, 132, 136, 137, 138, 139], "fromframedata": [39, 65, 127, 129, 132], "spriteanimationtick": [39, 65], "animationtick": [39, 61], "createtick": 39, "ticker": 39, "last": [39, 44, 46, 48, 95, 118, 122, 123, 124, 128, 129, 130, 131, 132], "dosometh": 39, "whencomplet": 39, "onstart": [39, 44, 124], "onfram": 39, "hold": [39, 44, 48, 50, 55, 67, 71, 84, 89, 123, 124, 134, 136], "robotst": 39, "idl": [39, 53], "loadspriteanim": [39, 136, 137, 138, 139], "robot": 39, "animationstick": 39, "currentindex": 39, "pretti": [39, 70, 123, 129, 132], "counterpart": 39, "playercompon": 39, "buttonst": 39, "spritegroupexampl": 39, "pressedsprit": [39, 61], "gameref": [39, 53, 135], "loadsprit": [39, 53, 115, 131, 132, 135, 136], "unpressedsprit": 39, "unpress": 39, "spawn": [39, 44, 137, 138], "randomli": [39, 44, 68, 127, 129], "5th": 39, "period": [39, 44, 60, 68, 137, 138, 139], "periodrang": 39, "minperiod": 39, "maxperiod": 39, "selfposit": [39, 137, 138, 139], "fromsvg": 39, "transpar": [39, 44, 46, 64, 67, 71, 132], "parallaxrender": 39, "rational": 39, "horizon": 39, "seem": [39, 49, 87, 120, 121, 122, 124, 127, 135], "distant": 39, "loadparallaxcompon": [39, 136, 137, 138, 139], "parallaximagedata": [39, 136, 137, 138, 139], "bg": 39, "myparallaxcompon": 39, "loadparallax": 39, "baseveloc": [39, 136, 137, 138, 139], "velocitymultiplierdelta": [39, 136, 137, 138, 139], "_datalist": 39, "basespe": 39, "layerdelta": 39, "proportion": 39, "parallaxlay": 39, "loadparallaximag": 39, "jpg": 39, "imagerepeat": [39, 136, 137, 138, 139], "layerfil": 39, "planet": [39, 71], "repeati": 39, "bottomleft": [39, 44, 128, 129, 132], "dust": 39, "repeatx": 39, "topright": 39, "velocitymultipli": 39, "fromparallax": 39, "repeatedli": 39, "forget": [39, 72, 74, 129], "wont": 39, "loadparallaxlay": 39, "loadparallaxanim": 39, "fullscreen": [39, 63], "parallaximag": 39, "parallaxanim": 39, "impli": [39, 60, 115, 139], "scalabl": [39, 135], "geometr": 39, "accordingli": [39, 65, 122, 123, 127], "meant": [39, 60, 66], "shapehitbox": 39, "squar": [39, 95, 96, 103, 134], "diamond": [39, 122, 123, 124], "percentag": [39, 53, 124], "purpl": 39, "15": [39, 44, 118, 122, 123, 124, 130, 132], "excel": [39, 128], "fromrect": 39, "80": [39, 44, 54, 55, 71, 74, 122, 123, 124], "comparison": [39, 92], "shortest": [39, 91], "diamet": 39, "cartesian": 39, "matrix": [39, 60, 66], "id": [39, 48, 55, 63, 65, 75, 79, 84, 94, 96, 97, 99, 101, 107, 118], "sequenti": 39, "tilesetimag": 39, "spritesheet": [39, 53, 68, 72], "srcsize": [39, 65, 68, 121, 122, 123, 124, 131, 132], "noth": [39, 48, 54, 55, 63, 93, 99, 124, 129, 138, 139], "convert": [39, 48, 55, 60, 64, 65, 66, 70, 91, 123], "hover": [39, 47, 53, 54, 96], "selector": [39, 71], "tileheight": 39, "cuboid": 39, "quarter": [39, 85], "On": [39, 46, 49, 52, 60, 62, 66, 71, 116, 128], "darker": 39, "tone": [39, 126], "nine": [39, 61], "grid": [39, 61, 64, 128, 129], "3x3": [39, 61], "stretch": [39, 61], "dialog": [39, 64, 71, 74, 100, 101], "nine_tile_box": 39, "custompaint": 39, "painter": 39, "custom_painter_compon": 39, "attribut": [39, 46, 49, 65, 86, 96, 103, 104, 109, 126, 134, 135, 136, 137], "changenotifi": 39, "report": [39, 58, 118], "playernotifi": 39, "gameovercompon": 39, "blink": [39, 44, 130, 132], "health": [39, 64, 126, 127, 130, 131], "notifylisten": 39, "hasgameref": [39, 53, 127, 128, 135], "blinkeffect": 39, "handi": [39, 96, 122], "componentsnotifierbuild": 39, "builder": [39, 47, 71], "clip_compon": 39, "suppos": [44, 55, 71, 75, 88, 101, 106, 123], "de": 44, "obvious": [44, 120, 123], "opacityeffect": [44, 130, 131, 132], "lastli": [44, 55, 83, 96, 103, 118, 121, 122, 128], "lifeless": 44, "increas": [44, 63, 89, 92, 93, 124], "self": [44, 96, 132], "evolv": 44, "usabl": [44, 92], "ispaus": 44, "removeonfinish": [44, 139], "garbag": [44, 124], "plan": [44, 64, 121, 123, 128], "reset": [44, 48, 60, 68, 124, 132], "shift": [44, 50, 123], "prescrib": [44, 90], "move_by_effect": 44, "flower": [44, 64], "movebyeffectgam": 44, "250": [44, 71, 132, 138, 139], "190": 44, "superposit": 44, "destin": [44, 71, 79, 123, 124], "move_to_effect": 44, "movetoeffectgam": 44, "segment": [44, 60, 130, 132], "singli": 44, "sudden": 44, "move_along_path_effect": 44, "movealongpatheffectgam": 44, "quadraticbezierto": 44, "flag": [44, 46, 48, 75, 122, 123], "declar": [44, 62, 71, 75, 76, 80, 81, 83, 87, 92, 93, 94, 95, 99, 101, 111, 113, 118, 121, 122, 123, 124, 128, 129, 137, 139], "90\u00ba": 44, "tau": [44, 48, 71], "rotate_by_effect": 44, "rotatebyeffectgam": 44, "0\u00ba": 44, "180\u00ba": [44, 122], "270\u00ba": 44, "rotate_to_effect": 44, "rotatetoeffectgam": 44, "scale_by_effect": 44, "scalebyeffectgam": 44, "revers": [44, 46, 123, 124], "scale_to_effect": 44, "scaletoeffectgam": 44, "120": [44, 48, 122, 123, 124], "size_by_effect": 44, "sizebyeffectgam": 44, "45": 44, "clamp": [44, 123, 128, 130, 132], "interfac": [44, 70, 74, 87, 123], "size_to_effect": 44, "sizetoeffectgam": 44, "anchoreffect": 44, "anchor_by_effect": 44, "anchorbyeffectgam": 44, "anchor_to_effect": 44, "anchortoeffectgam": 44, "alpha": [44, 67], "opacityprovid": 44, "opacity_to_effect": 44, "opacitytoeffectgam": 44, "_ontap": 44, "fadein": 44, "haspaint": 44, "paintid": 44, "opacityproviderof": 44, "opacityprovideroflist": 44, "opacity_effect_with_target": 44, "opacityeffectwithtargetgam": 44, "creation": [44, 74, 122], "_borderopacityprovid": 44, "flowerpaint": 44, "paintid1": 44, "paintid2": 44, "opaqu": [44, 46, 67, 71], "fadeout": [44, 83, 130, 131, 132], "opacity_by_effect": 44, "opacitybyeffectgam": 44, "experiment": [44, 138, 139], "glow": 44, "shade": [44, 60, 64, 81], "strength": 44, "glow_effect": 44, "gloweffectexampl": 44, "0xff39ff14": 44, "constitu": 44, "forward": [44, 60, 124, 128, 137], "backward": [44, 130, 132], "predetermin": 44, "sequence_effect": 44, "sequenceeffectgam": 44, "remove_effect": 44, "removeeffectgam": 44, "delaytim": 44, "tostringasfix": 44, "color_effect": 44, "coloreffectexampl": 44, "0xff00ff00": [44, 67], "opacityto": 44, "0xff1039db": 44, "opacityfrom": 44, "colorfilt": [44, 122, 123, 124], "mix": [44, 49, 52, 66, 67, 135], "although": [44, 49, 64, 124], "wide": [44, 121, 124, 128], "arrai": 44, "componenteffect": 44, "transform2deffect": 44, "encapsul": [44, 64, 68], "decrement": 44, "rather": 44, "interf": 44, "capabl": [44, 53, 70, 105], "varieti": [44, 87], "reversecurv": 44, "atmaxdur": 44, "atmindur": 44, "startdelai": [44, 124], "voidcallback": [44, 124], "onmax": [44, 124], "onmin": [44, 124], "linearli": [44, 60, 74], "grown": 44, "kept": [44, 56], "lowest": [44, 92], "consist": [44, 67, 71, 74, 87, 97, 105, 121, 122, 136], "composit": [44, 65, 68], "prove": 44, "ec": [44, 116], "opposit": [44, 122], "bounceinout": 44, "indefinit": 44, "alter": [44, 68, 76, 92, 95, 96], "proce": [44, 74, 78, 98, 102, 105, 106, 118, 121, 122, 127, 128], "irrelev": [44, 120], "durationeffectcontrol": 44, "notion": [44, 87, 93], "measurableeffect": 44, "qualifi": 44, "travel": [44, 124, 130, 138], "ec1": 44, "ec2": 44, "exhibit": 44, "noisi": 44, "shake": 44, "distribut": 44, "exponenti": [44, 91], "sine": [44, 124], "harmon": 44, "govern": 44, "lissaj": 44, "extrem": [44, 55, 68], "router": [45, 71, 101], "layout": [45, 47, 50, 56, 70, 120, 121], "crate": 46, "16": [46, 61, 65, 68, 70, 71, 127, 129, 132, 137, 138, 139], "mycrat": 46, "instanti": [46, 65, 128], "removeal": 46, "gameloop": 46, "modul": [46, 70], "microsecond": [46, 58, 68], "processlifecycleev": 46, "debugmod": [46, 58, 121, 122, 132], "Be": [46, 63], "backgroundcolor": [46, 47, 64, 128, 132], "0x00000000": 46, "scenario": [46, 106], "consequ": 46, "ing": [46, 121], "miss": [46, 63, 87, 123, 124, 137], "mygamesubclass": 46, "pauseengin": 46, "resumeengin": 46, "stepengin": 46, "inspect": 46, "pausewhenbackground": 46, "13": [46, 89, 118, 122, 123, 124], "mobil": [46, 63, 126], "took": [46, 120], "hot": 46, "updatetim": 46, "rendertim": 46, "statefulwidget": [47, 124], "rich": [47, 70], "arbitrarili": 47, "deep": [47, 64], "loadingbuild": 47, "errorbuild": 47, "throw": [47, 65, 77, 90, 92, 101, 107, 123, 124, 132], "backgroundbuild": 47, "decor": [47, 69, 122, 132], "overlaybuildermap": [47, 62, 132], "cliprect": 47, "textdirect": [47, 70], "initialactiveoverlai": [47, 132], "focusnod": [47, 52], "autofocu": [47, 52], "mousecursor": [47, 49], "addrepaintboundari": 47, "mywidget": 47, "statelesswidget": [47, 132], "pad": [47, 49, 52, 70, 121, 132], "edgeinset": [47, 53, 70, 132], "gameloadingwidgetbuild": 47, "gameerrorwidgetbuild": 47, "caught": 47, "widgetbuild": 47, "overlaywidgetbuild": 47, "surfac": 47, "pausemenu": [47, 62], "0xff000000": [47, 48, 70, 71, 122, 123, 124], "node": [47, 74, 75, 76, 77, 79, 80, 82, 84, 87, 93, 95, 105, 106, 112, 113], "repaintboundari": 47, "finger": [48, 55, 123, 124, 137], "correctli": [48, 55, 118, 127], "four": [48, 55, 60, 92, 101, 107, 120, 121, 122, 123, 124], "magenta": 48, "drag_ev": 48, "drageventsgam": 48, "dragtarget": 48, "radius1": 48, "radius2": 48, "sharp": [48, 74], "0xffbae5ad": 48, "70": [48, 127, 128, 129, 132], "0xff6ecbe5": 48, "12": [48, 71, 74, 122, 123, 124, 127, 132], "0xfff6df6a": 48, "270": 48, "17": [48, 95, 111, 122, 123, 124], "85": [48, 122, 123, 124], "0xfff82a4b": 48, "110": [48, 71], "pink": 48, "_rectpaint": 48, "0x88ac54bf": 48, "trail": 48, "_trail": 48, "addpoint": 48, "dragcancelev": 48, "_path": 48, "_opac": 48, "_lastpoint": 48, "_color": 48, "_linepaint": 48, "_circlepaint": [48, 123, 124], "_timer": 48, "_vanishinterv": 48, "03": 48, "linewidth": 48, "drawpath": [48, 71], "isnan": 48, "lineto": [48, 71], "p3": 48, "cubicto": 48, "_borderpaint": [48, 71, 123, 124], "_shadowpaint": 48, "maskfilt": 48, "blur": 48, "blurstyl": 48, "isdrag": [48, 123], "prioriti": [48, 63, 123, 124, 131, 132], "localdelta": [48, 123, 124], "deliv": [48, 50, 55, 95, 98, 99, 101, 102, 103, 105, 106, 110, 111], "topmost": [48, 71], "touch": [48, 52, 53, 55, 123, 135, 139], "continuepropag": [48, 55], "deviceposit": [48, 55], "canvasposit": [48, 55], "pointer": [48, 52, 53, 55, 71], "nan": 48, "likewis": [48, 64, 121], "renderingtrac": 48, "timestamp": 48, "elaps": [48, 58, 60], "lift": [48, 55], "semant": 48, "judg": [48, 55, 120], "bare": [48, 55, 126, 140], "_isdrag": [48, 123, 124], "keyboard": [49, 50, 51, 53, 106, 126, 134], "keystrok": [49, 53], "secondarytapdetector": 49, "onsecondarytapdown": 49, "onsecondarytapup": 49, "onsecondarytapcancel": 49, "tertiarytapdetector": 49, "ontertiarytapdown": 49, "ontertiarytapup": 49, "ontertiarytapcancel": 49, "doubletapdetector": 49, "ondoubletap": 49, "longpressdetector": 49, "onlongpress": 49, "onlongpressstart": 49, "onlongpressmoveupd": 49, "onlongpressup": 49, "onlongpressend": 49, "verticaldragdetector": 49, "onverticaldragdown": 49, "onverticaldragstart": 49, "onverticaldragupd": 49, "onverticaldragend": 49, "onverticaldragcancel": 49, "horizontaldragdetector": 49, "onhorizontaldragdown": 49, "onhorizontaldragstart": 49, "onhorizontaldragupd": 49, "onhorizontaldragend": 49, "onhorizontaldragcancel": 49, "forcepressdetector": 49, "onforcepressstart": 49, "onforcepresspeak": 49, "onforcepressupd": 49, "onforcepressend": 49, "onpandown": 49, "onpanstart": [49, 137, 138, 139], "onpanupd": [49, 135, 136, 137, 138, 139], "onpanend": [49, 137, 138, 139], "onpancancel": 49, "onscalestart": 49, "onscaleupd": 49, "onscaleend": 49, "multitouchtapdetector": 49, "multitouchdragdetector": 49, "onreceivedrag": 49, "mousemovementdetector": 49, "onmousemov": 49, "scrolldetector": 49, "onscrol": 49, "multitouch": 49, "win": 49, "arena": 49, "gestureapi": 49, "gesturedetector": 49, "rawgesturedetector": 49, "mouseregion": 49, "prompt": 49, "cryptic": 49, "pan": [49, 135], "recogn": [49, 91, 95, 101, 107, 113, 124], "redund": 49, "superset": [49, 70], "strang": 49, "startzoom": 49, "_": [49, 68, 122, 123, 124, 132], "scaleupdateinfo": 49, "currentscal": 49, "isident": 49, "translatebi": 49, "snap": 49, "theoret": 49, "systemmousecursor": 49, "mousecursorgam": 49, "notic": [49, 98, 123, 124, 127, 130, 132, 135, 136], "eventposit": 49, "brief": [49, 101], "globalposit": 49, "tapdowninfo": 49, "tapupinfo": 49, "round": [49, 80, 83, 87, 128], "rock": 49, "bypass": [50, 132], "softwar": 50, "coexist": 50, "onkeyev": [50, 52, 130, 132], "held": [50, 124], "stream": [50, 105], "keydownev": [50, 52], "keyupev": 50, "keyrepeatev": 50, "synthes": 50, "artifici": 50, "hardwarekeyboard": 50, "pausekeyev": 50, "temporarili": [50, 76, 79, 80, 84, 122, 123], "halt": 50, "deliveri": [50, 106], "keyev": [50, 52, 130, 132], "physicalkeyspress": 50, "physicalkeyboardkei": 50, "logicalkeyspress": 50, "logicalkeyboardkei": [50, 52, 130, 132], "iscontrolpress": 50, "ctrl": 50, "isshiftpress": 50, "isaltpress": 50, "alt": 50, "isnumlockon": 50, "num": [50, 101, 107, 109, 112], "lock": [50, 118], "iscapslockon": 50, "cap": 50, "isscrolllockon": 50, "suspend": 50, "keyup": [50, 52], "convers": [50, 60, 87, 97, 106], "keydown": [50, 52], "detector": [51, 135], "me": [52, 71, 95, 96, 97], "sensit": 52, "keyboardev": 52, "keyeventresult": 52, "apart": [52, 124], "systemsoundtyp": 52, "alert": [52, 97], "skipremaininghandl": 52, "keyspress": [52, 130, 132], "iskeydown": 52, "isspac": 52, "altleft": 52, "altright": 52, "shoothard": 52, "keyboardhandl": [52, 130, 132], "haskeyboardhandlercompon": [52, 130, 132], "conflict": 52, "among": [52, 75, 92, 98], "keyboardlistenercompon": 52, "keya": [52, 130, 132], "keyd": [52, 130, 132], "keyw": 52, "besid": [53, 97, 110], "fromcolumnsandrow": 53, "row": [53, 60, 65, 95, 121, 122], "knob": 53, "getspritebyid": [53, 65], "margin": [53, 70], "maxspe": 53, "joystickdirect": 53, "relativedelta": 53, "screenangl": 53, "epicent": 53, "knobradiu": 53, "integr": [53, 74, 106], "challeng": [53, 120, 127], "explor": [53, 136], "buttondown": [53, 124], "respectcamera": 53, "onpress": [53, 61, 132], "onreleas": [53, 124], "phase": [53, 124], "skin": 53, "defaultskin": 53, "downskin": 53, "hoverskin": 53, "desktop": [53, 54, 63, 126], "defaultlabel": 53, "disabledskin": 53, "disabledlabel": 53, "defaultselectedskin": 53, "downandselectedskin": 53, "hoverandselectedskin": 53, "disabledandselectedskin": 53, "defaultselectedlabel": 53, "old": [54, 55, 74, 75, 123], "legaci": [54, 55], "pointermovecallback": 54, "onpointermov": 54, "pointermoveev": 54, "onpointermovestop": 54, "proxi": 54, "exit": [54, 82, 88, 106], "hook": [54, 68, 128, 137], "enter": [54, 88, 97, 101, 106, 118], "ishov": 54, "onhoverent": 54, "onhoverexit": 54, "pointer_ev": 54, "pointereventsgam": 54, "hovertarget": 54, "_random": 54, "stylu": 55, "longtapdelai": 55, "multitapdispatch": 55, "tapconfig": 55, "said": [55, 65], "tend": 55, "fail": [55, 95, 124], "pop": [55, 71, 101], "situat": [55, 90, 96, 100, 112], "thick": [55, 130], "stripe": 55, "implod": 55, "_rect": 55, "_ispress": 55, "ondoubletapup": 55, "doubletapev": 55, "ondoubletapcancel": 55, "doubletapcancelev": 55, "ondoubletapdown": 55, "doubletapdownev": 55, "draggabl": [55, 122], "transit": [55, 64, 71], "tapdowndetail": 55, "anymor": [55, 137], "Of": [56, 124, 136], "widthfactor": 56, "heightfactor": 56, "hello": [56, 70, 74, 78, 84, 92, 95, 96, 101, 105], "centerleft": 56, "extravag": 56, "keepchildanchor": 56, "topcent": [56, 70, 71, 121, 122, 123, 124], "bottomcent": 56, "healthbar": 56, "tab": 58, "truth": 58, "spent": 58, "advis": 58, "flavor": [58, 124], "systemuioverlai": 60, "landscap": 60, "setlandscapeleftonli": 60, "setlandscaperightonli": 60, "portrait": [60, 99, 106], "setportraituponli": 60, "setportraitdownonli": 60, "finer": 60, "deal": [60, 65, 66, 136], "systemchrom": 60, "deviceorient": 60, "countdown": 60, "textpaint": [60, 71, 124, 131, 132], "textstyl": [60, 61, 70, 71, 124, 131, 132], "fontsiz": [60, 70, 71, 124, 131, 132], "tostr": [60, 91, 122, 123, 124], "elapsedsec": 60, "ontick": 60, "timercompon": 60, "myflamegam": 60, "hastimescal": 60, "timescal": 60, "time_scal": 60, "timescalegam": 60, "_timescal": 60, "_index": 60, "getnexttimescal": 60, "speedup": 60, "slowdown": 60, "shortcut": [60, 124], "summari": [60, 118], "scalevector": 60, "translatevector": 60, "renderpoint": 60, "mostli": 60, "renderat": 60, "renderrot": 60, "afterward": [60, 65, 66, 93], "darken": 60, "brighten": 60, "colorextens": 60, "fromrgbhexstr": 60, "rgb": [60, 67], "hex": 60, "1c1c1c": 60, "fromargbhexstr": 60, "argb": [60, 67], "ff1c1c1c": 60, "pixelsinuint8": 60, "imagebyteformat": 60, "rawrgba": 60, "getboundingrect": 60, "tovector2": 60, "tosiz": 60, "topoint": 60, "intersectsseg": 60, "intersectslineseg": 60, "lineseg": 60, "tovertic": 60, "toflamerectangl": 60, "tomathrectangl": 60, "togeometryrectangl": 60, "geom": 60, "rectextens": 60, "getbound": 60, "fromcent": [60, 68], "vector_math": 60, "topositionedrect": 60, "lerp": [60, 68], "interpol": [60, 83, 96, 98], "scaleto": 60, "movetotarget": 60, "vector2extens": 60, "fromint": [60, 122, 123, 124], "modulo": [60, 92], "remaind": [60, 92], "translate2": 60, "transform2": 60, "transformed2": 60, "m11": 60, "m12": 60, "m13": 60, "m14": 60, "fourth": 60, "m21": 60, "m22": 60, "m23": 60, "m24": 60, "m31": 60, "m32": 60, "m33": 60, "m34": 60, "m41": 60, "m42": 60, "m43": 60, "m44": 60, "matrix4extens": 60, "vector4": 60, "toolset": [61, 74], "showcas": [61, 70, 87, 127], "dashbook": 61, "sandbox": 61, "ninetileboxcompon": 61, "tiles": [61, 72], "desttiles": 61, "somewidget": 61, "graphic": [61, 120, 134, 136], "label": [61, 122, 123, 124], "0xff5d275d": 61, "_spritebutton": 61, "_pressedsprit": 61, "_height": 61, "_width": 61, "yoursprit": 61, "_anim": 61, "_animationtick": 61, "identifi": [62, 118, 129, 139], "pauseoverlayidentifi": 62, "maco": [63, 118], "linux": 63, "beta": 63, "master": 63, "canvaskit": 63, "skia": 63, "dom": 63, "chrome": [63, 118], "easiest": [63, 124, 128, 130], "gh": 63, "workflow": 63, "ubuntu": 63, "v3": 63, "subosito": 63, "v2": 63, "bluefireteam": 63, "v8": 63, "basehref": 63, "name_of_your_repositori": 63, "webrender": 63, "your_github_usernam": 63, "your_repo_nam": 63, "complain": 63, "href": 63, "zip": 63, "upload": [63, 118], "jam": 63, "setorient": 63, "decodeimagefrompixel": 63, "runasweb": 63, "kisweb": 63, "shader": 64, "decorator_blur": 64, "decoratorblurgam": 64, "addlast": 64, "replacelast": 64, "gaussian": 64, "though": [64, 71, 95, 96, 113, 121, 123, 126], "shadow": [64, 66], "deemphas": 64, "obscur": 64, "vision": [64, 127], "drunk": 64, "decorator_grayscal": 64, "decoratorgrayscalegam": 64, "removelast": [64, 123, 124], "grei": [64, 67, 98, 123], "photograph": 64, "semi": 64, "stone": 64, "ghost": 64, "scene": [64, 66, 100, 112], "past": [64, 123, 136], "photo": 64, "decorator_tint": 64, "decoratortintgam": 64, "0x88ff0000": 64, "0x8800ff00": 64, "0x88000088": 64, "0x66ffffff": [64, 71], "0xaa000000": 64, "glass": 64, "0xaaff0000": 64, "bloodlust": 64, "green": [64, 67, 118], "poison": 64, "sick": 64, "night": 64, "decorator_rotate3d": 64, "decoratorrotate3dgam": 64, "perspect": 64, "anglei": 64, "anglex": 64, "anglez": 64, "3d": 64, "pivot": 64, "distort": 64, "isflip": 64, "rotationangl": 64, "002": 64, "card": [64, 75, 96, 119, 120, 121, 140], "book": [64, 74], "fall": [64, 78, 127, 130], "snowflak": 64, "decorator_shadow3d": 64, "decoratorshadowgam": 64, "0xffc7c7c7": 64, "xshift": 64, "yscale": 64, "ascent": 64, "0xffa9a9a9": 64, "underneath": 64, "flat": [64, 124], "onto": [64, 65, 70, 123, 124], "shall": [64, 92, 118], "newdecor": 64, "jpeg": 65, "webp": 65, "gif": 65, "bmp": 65, "wbmp": 65, "convolut": 65, "drawimagerect": 65, "filenam": 65, "safe": [65, 67], "synchron": [65, 86, 106], "fromcach": [65, 121, 122, 123, 124, 127, 128, 129, 132], "imageextens": 65, "frompixel": 65, "imagesload": 65, "yourimag": 65, "singleton": [65, 122], "playerimag": 65, "bulletsprit": 65, "_bullet": 65, "client": 65, "coupl": [65, 134, 135, 136, 138], "refrain": 65, "decodeimagefromlist": 65, "piec": [65, 68, 70, 93, 97, 123, 137], "playerfram": 65, "srcposit": [65, 121, 122, 123, 124], "overridepaint": [65, 123, 124], "spritewidget": 65, "blendmod": [65, 71, 122, 123, 124], "cullrect": 65, "spritebatchcompon": 65, "merg": 65, "image1": 65, "image2": 65, "image3": 65, "compos": [65, 136], "imagesync": 65, "composesync": 65, "raster": 65, "gpu": 65, "pictur": [65, 66, 120], "toimagesync": 65, "expens": [65, 98], "badli": 65, "02": [65, 124], "amountoffram": 65, "imageinst": 65, "spriteanimationfram": 65, "spriteanimationframedata": 65, "aseprit": 65, "export": [65, 70, 71, 126], "chopper": 65, "jsondata": 65, "readjson": 65, "fromasepritedata": 65, "trim": 65, "clock": 65, "extract": [65, 120, 121], "createanim": [65, 68], "createframedata": 65, "createframedatafromid": 65, "captur": [66, 71], "screenshot": [66, 118], "gamelay": 66, "drawlay": 66, "playerposit": 66, "enemysprit": 66, "enemyposit": 66, "replic": 66, "backgroundlay": 66, "shadowprocessor": 66, "preprocessor": 66, "postprocessor": 66, "layerprocessor": 66, "snapshotcompon": 66, "rendersnapshot": 66, "background1": 66, "background2": 66, "background1sprit": 66, "background2sprit": 66, "takesnapshot": 66, "incur": 66, "cost": 66, "snapshottoimag": 66, "prepar": [66, 100, 106, 116, 124, 127, 130, 131], "matrix4": 66, "ident": [66, 116], "hexadecim": [67, 91], "notat": 67, "0xaarrggbb": 67, "digit": [67, 89, 93, 97, 118], "ff": 67, "255": [67, 128, 132], "00": 67, "blend": [67, 122], "lead": [67, 124], "unnecessari": 67, "mutabl": 67, "textconfig": 67, "scheme": [67, 120], "bgug": 67, "paletteentri": 67, "toastbackground": 67, "0xffac3232": 67, "toasttext": 67, "0xffda9a00": 67, "0xff404040": 67, "0xff54a286": 67, "brand": 67, "cascad": [67, 70], "mutat": [67, 122], "robust": [68, 106], "particlesystemcompon": 68, "syntact": 68, "sugar": 68, "fluentli": 68, "deleg": 68, "conjunct": 68, "rnd": 68, "randomvector2": 68, "composedparticl": 68, "acceler": [68, 124], "fluent": 68, "singlechildparticl": 68, "chainabl": 68, "pt": [68, 70], "lifespan": 68, "timer": [68, 137, 138, 139], "200m": 68, "setlifespan": 68, "animationcontrol": 68, "gravit": 68, "dampen": 68, "flareparticl": 68, "flare": 68, "curvedparticl": 68, "burst": 68, "px": 68, "24": [68, 70, 123, 124, 129, 132], "alignanimationtim": 68, "yourspritesheetimag": 68, "longlivingrect": 68, "rectcompon": 68, "eas": [68, 114], "particlerenderdeleg": 68, "gradual": [68, 106], "glitchparticl": 68, "restor": [68, 77, 113, 122, 123, 124], "standalon": 68, "multi": [70, 94, 124], "newlinenotifi": 70, "exce": [70, 106], "famili": 70, "amend": 70, "48": [70, 136, 137, 138, 139], "growingbox": 70, "textboxconfig": 70, "shrink": [70, 124], "boxconfig": 70, "timeperchar": 70, "mytextbox": 70, "tini": 70, "05": [70, 71, 91, 123, 124], "bgpaint": 70, "0xffff00ff": 70, "borderpaint": [70, 71], "deflat": [70, 122, 123, 124], "scrollabl": 70, "dialogu": [70, 71, 76, 77, 78, 79, 82, 83, 84, 85, 86, 88, 95, 96, 97, 98, 99, 101, 102, 103, 105, 106, 111, 113, 114], "myscrollabletext": 70, "frames": 70, "arbitrari": [70, 91, 93, 96, 105], "textel": 70, "inlinetextel": 70, "documentroot": 70, "div": 70, "headernod": 70, "1984": 70, "paragraphnod": 70, "law": [70, 95], "nonsens": 70, "fromdocu": 70, "documentstyl": 70, "symmetr": 70, "14": [70, 71, 120, 122, 123, 124, 132], "backgroundstyl": 70, "0xff4e322": 70, "bordercolor": [70, 71], "borderwidth": 70, "elabor": 70, "pipelin": 70, "bold": [70, 96, 124], "ital": [70, 96], "flame_markdown": 70, "flamemarkdown": 70, "todocu": 70, "essenc": 70, "laid": [70, 122, 136], "concret": [70, 83, 106], "spritefont": 70, "bitmap": 70, "golden": 70, "typograph": 70, "ltr": 70, "fontfamili": 70, "arial": 70, "todo": [70, 123, 137], "unreli": 70, "teach": 70, "dx": 70, "dy": 70, "overwritten": 70, "mandat": 70, "linemetr": 70, "ascend": [70, 123], "metric": 70, "formatt": 70, "distinguish": 70, "flametextstyl": 70, "descriptor": [70, 109], "textnod": 70, "bring": [70, 96, 116, 124], "flow": [70, 74, 82, 86, 88, 98], "unawar": 70, "intent": 70, "enrich": 70, "wise": [70, 74], "blocknod": 70, "analog": 70, "css": 70, "inlinetextstyl": 70, "astextrender": 70, "lai": [70, 122], "textpaintertextel": 70, "spritefonttextel": 70, "conundrum": 70, "guidelin": 70, "routergam": 71, "splashscreenpag": 71, "startpag": 71, "level1": 71, "level1pag": 71, "level2": 71, "level2pag": 71, "pauserout": 71, "initialrout": 71, "0xff282828": 71, "textboxcompon": 71, "textrender": [71, 124, 131, 132], "_logo": 71, "syzygi": [71, 118], "0xffc8fff5": 71, "fontweight": [71, 124], "w800": 71, "_button1": 71, "roundedbutton": 71, "0xffadde6c": 71, "0xffedffab": 71, "_button2": 71, "0xffdebe6c": 71, "0xfffff4c7": 71, "140": 71, "drawcolor": 71, "srcatop": [71, 122, 123, 124], "_textdraw": 71, "totextpaint": 71, "_textoffset": 71, "_rrect": 71, "rrect": [71, 122, 123, 124], "fromltrbr": 71, "circular": [71, 122, 123, 124, 132], "_bgpaint": 71, "drawrrect": [71, 122, 123, 124], "simplebutton": 71, "_iconpath": 71, "_iconpaint": 71, "0xffaaaaaa": 71, "fromrectandradiu": [71, 122, 123, 124], "backbutton": 71, "22": 71, "34": 71, "pausebutton": 71, "26": 71, "findgam": 71, "0xbb2a074f": 71, "0xfffff188": 71, "orbit": 71, "revolutionperiod": 71, "0xff54d7b1": 71, "0xffcccccc": 71, "0xff052b44": 71, "0xffc9ce0d": 71, "0xfff32727": 71, "0xffffdb00": 71, "35": [71, 92, 122, 123, 124], "0xffdc00ff": 71, "initialangl": 71, "0x888888aa": 71, "_angl": 71, "pausepag": 71, "onpush": 71, "previousrout": 71, "stoptim": 71, "addrendereffect": 71, "paintdecor": 71, "grayscal": [71, 123], "addblur": 71, "onpop": 71, "nextrout": 71, "resumetim": 71, "removerendereffect": 71, "spirit": 71, "credit": 71, "address": [71, 129], "modal": [71, 97, 101], "homepag": 71, "levelselectorpag": 71, "settingspag": 71, "confirm": 71, "maintainst": 71, "pushreplacementnam": 71, "pushreplac": 71, "pushrout": 71, "ok": [71, 87, 95, 97, 123, 124, 129], "decoratedcontain": 71, "beforehand": 71, "pushoverlai": 71, "pushreplacementoverlai": 71, "statu": [71, 101, 107], "value_rout": 71, "valuerouteexampl": 71, "score": [71, 130], "pushandwait": [71, 101], "raterout": 71, "firstchild": [71, 123, 124], "0xff758f9a": 71, "0xff60d5ff": 71, "130": [71, 122, 123, 124], "18": [71, 118, 122, 123, 124], "stargap": 71, "dialogbackground": 71, "completewith": 71, "0xee858585": 71, "0xffffe395": 71, "fillpaint": 71, "wheretyp": [71, 123, 124], "yesnodialog": 71, "ye": [71, 91, 95], "No": [71, 74, 94, 95, 118, 124, 127], "foo": 71, "propos": [72, 124], "map1": 72, "map2": 72, "spritefusiontilemapcompon": 72, "mapjsonfil": 72, "spritesheetfil": 72, "subfold": 72, "sfx": 72, "assetscach": 72, "rootbundl": 72, "markup": [74, 83, 86, 98, 103, 104, 109], "unoffici": 74, "spinner": 74, "uniti": [74, 109], "author": 74, "scene1_gregory_and_sampson": 74, "sampson": 74, "gregori": 74, "carri": [74, 86], "coal": 74, "collier": 74, "choler": 74, "ai": 74, "neck": 74, "collar": 74, "strike": 74, "thou": 74, "art": [74, 126], "exchang": 74, "phrase": [74, 88, 95], "spoken": 74, "dialogrunn": 74, "importantli": [74, 96], "understood": 74, "slughorn_encount": 74, "horcrux_quest": 74, "slughorn": 74, "sorri": [74, 88, 97], "tom": 74, "endif": [74, 78, 80, 84, 87, 88, 90, 95, 98], "oh": [74, 75, 81, 123], "time_of_dai": 74, "professor": [74, 95], "curiou": [74, 123], "dragon": 74, "blood": 74, "inquisit": 74, "potent": 74, "potion": 74, "restricted_library_pass": 74, "thank": 74, "munific": 74, "horcrux": 74, "knows_about_horcrux": 74, "admir": 74, "lectur": 74, "enjoi": 74, "flatteri": 74, "deserv": 74, "did": [74, 123, 124, 127, 128, 130, 131, 132], "tempt": [74, 123, 124], "danger": 74, "overheard": 74, "felt": 74, "frigid": 74, "embodi": 74, "luck": [74, 80, 118], "inde": 74, "defend": 74, "myself": 74, "ritual": 74, "darkest": 74, "wizard": [74, 95], "secret": [74, 128], "demonstr": [74, 126], "divid": [74, 92, 128], "chunk": [74, 121], "yarnproject": [74, 75, 87, 88, 91, 94, 99, 100, 101, 105, 106, 107, 112, 113], "central": [74, 113, 121, 124], "dialoguerunn": [74, 97, 103, 106], "executor": 74, "dialogueview": [74, 99, 101, 102, 103, 105, 110, 111], "accident": [75, 124], "misspel": 75, "alia": [75, 100], "alias1": 75, "alias2": 75, "seven": [75, 120, 121, 123], "year": 75, "girl": [75, 84, 88], "nevertheless": 75, "zani": 75, "alic": 75, "cat": [75, 124], "hi": [75, 88, 105], "grin": 75, "majest": 75, "partial": 75, "vanish": 75, "he": [75, 96], "mad": 75, "admiss": 75, "cheshir": 75, "foul": 75, "temper": 75, "blind": 75, "furi": 75, "her": 75, "favorit": [75, 81, 103, 109], "Not": [75, 95], "heart": [75, 122, 123, 124, 126, 127, 128, 131, 132], "qoh": 75, "qh": 75, "alice_and_the_cat": 75, "dog": 75, "grant": [75, 98], "growl": 75, "angri": 75, "wag": 75, "tail": 75, "pur": 75, "surround": [76, 95, 96, 109], "bracket": [76, 83, 95, 96, 103, 111], "yarnspinn": [76, 80, 86, 87, 90, 92, 93, 101, 109, 111], "person": [76, 99, 101], "condition": 76, "inlin": [77, 103, 104, 124], "monick": 77, "boi": [77, 88], "greet": [77, 78, 88, 95, 101, 132], "teacher": 77, "welcom": [77, 95], "jenni": [77, 87, 94, 95, 97, 100, 101, 103, 105, 106, 107, 109, 114], "standpoint": 77, "sign": [77, 80, 88, 92, 93, 97], "liter": 77, "complic": [77, 123, 136], "evalu": [77, 78, 79, 82, 83, 84, 86, 88, 90, 92, 95, 96, 98, 103, 104, 109, 111, 122], "deduc": 77, "mr": 77, "gold": [77, 83, 98, 101, 113], "been_to_hel": 77, "distancetravel": 77, "birthdai": 77, "randomrang": 77, "365": 77, "vulgar": 77, "getobscenityset": 77, "accompani": [77, 113, 115], "condition1": 78, "statements1": 78, "elseif": [78, 80, 95], "condition2": 78, "statements2": 78, "statementsn": 78, "runner": [78, 83, 103, 105, 106, 111], "guard": [78, 97, 98], "reput": 78, "citizen": 78, "attack": 78, "sight": 78, "guardgreet": 78, "hail": 78, "savior": 78, "nice": [78, 81, 101, 120, 123, 124, 128], "sir": [78, 98], "ey": 78, "filthi": 78, "scum": 78, "pai": 78, "crime": 78, "goto": 79, "farewellscen": 79, "curli": [79, 83, 84, 95], "brace": [79, 84, 95], "ending_": 79, "unknown": [79, 84, 87, 113], "nameerror": [79, 84], "roll": [80, 90], "a_dice_rol": 80, "dice": [80, 87], "rotten": 80, "averag": 80, "14159265": 80, "unlucki": 80, "ten": [80, 89], "favorite_color": 81, "colorquiz": 81, "yellow": [81, 120, 123], "azur": 81, "cerulean": 81, "lapi": 81, "lazuli": 81, "umm": 81, "spell": 81, "mine": [81, 126], "affin": 81, "aww": 81, "wave": [83, 96], "smile": [83, 111], "frown": 83, "movecamera": [83, 101], "shakecamera": 83, "gainexperi": 83, "startquest": 83, "finishquest": 83, "opentrad": [83, 84], "drawweapon": 83, "hashtag": [83, 98, 103, 104], "substitut": [83, 101, 103], "whitespac": [83, 95], "signatur": [83, 87, 88, 101, 111], "oncommand": [83, 101, 105, 106, 111], "builtin": [83, 113], "treat": [83, 95, 124], "dialogueexcept": 83, "rais": [83, 87, 91, 123], "roamingtrader1": 84, "roaming_trader_introduc": 84, "roamingtraderintro": 84, "calam": 84, "calamity_start": 84, "roamingtrader_calam": 84, "weird": 84, "quest_little_girl": 84, "roamingtrader_littlegirl": 84, "trade": 84, "pleasur": 84, "busi": 84, "rewardchoice_": 84, "numer": [85, 87, 88, 90, 91, 92, 120, 122, 126], "computation": 86, "succe": 86, "parenthes": [87, 92], "roll_2d6": 87, "random_rang": 87, "dec": 87, "decim": [87, 91, 92, 93], "inc": 87, "round_plac": 87, "plural": [87, 95, 113], "visit_count": 87, "parser": 87, "blacksmith": 87, "hypothet": 87, "slot": 87, "sword": [87, 101], "bow": 87, "monei": [87, 93, 94, 95, 98, 112, 113], "main_hand": 87, "repair_cost": 87, "functionstorag": [87, 113], "ternari": 88, "birth": 88, "doctor": [88, 118], "congratul": 88, "gender": 88, "plug": 88, "23": [88, 92, 96], "english": 88, "en": [88, 113, 118], "singular": 88, "foot": 88, "irregular": 88, "noun": 88, "inch": 88, "ft": 88, "feet": 88, "ukrainian": 88, "uk": 88, "\u0443": 88, "\u043c\u0435\u043d\u0435": 88, "\u0454": 88, "\u043c\u043e\u043d\u0435\u0442\u0430": 88, "\u043c\u043e\u043d\u0435\u0442\u0438": 88, "\u043c\u043e\u043d\u0435\u0442": 88, "21": [88, 122, 123, 124], "placehold": [88, 121, 123], "luckywheel": 88, "clown": 88, "fabul": 88, "prize": 88, "spinluckywheel": 88, "talk": [88, 95, 106], "stranger": 88, "kid": 88, "merchantdialogu": 88, "merchant": 88, "linn": 88, "exquisit": 88, "ware": [88, 95], "fastidi": 88, "bob": 88, "001": [89, 90], "999": 89, "07": 89, "fraction": 89, "inclus": [89, 90, 109, 129], "exclus": [89, 109, 129], "largest": 89, "truncat": [89, 90], "252": 89, "reproduc": [90, 124], "reload": [90, 128, 130], "six": 90, "die": 90, "coin_flip": 90, "h": [90, 122, 123, 124], "holi": [90, 103], "grail": 90, "truevalu": [91, 113], "falsevalu": [91, 113], "unmodifi": 91, "214": 91, "745": 91, "14159": 91, "scientif": 91, "2e5": 91, "11e": 91, "0xdead": 91, "0x7f": 91, "represent": [91, 96], "1e": 91, "1e21": 91, "mathemat": 92, "summat": 92, "denot": [92, 96], "loos": [92, 123], "categori": 92, "subtract": [92, 128], "unari": 92, "minu": 92, "divis": 92, "regardless": [92, 106, 126], "concaten": 92, "glue": 92, "helloworld": 92, "invert": 92, "operand": 92, "AND": [92, 129], "OR": 92, "xor": 92, "decreas": 92, "inequ": 92, "highli": [92, 130], "highest": 92, "letter": [93, 97, 118], "_secret_": 93, "door10": 93, "climbed_over_wall_and_avoided_all_guard_patrol": 93, "doorpassword": 93, "2000_year": 93, "todai": 93, "victori": 93, "42": 93, "global_vari": 93, "mynod": 93, "local_vari": 93, "utf": 94, "impos": [94, 123], "chapter": [94, 96, 121, 122, 123, 124, 128, 130], "1d": 94, "visited_graveyard": 94, "wasn": 94, "metadata": [94, 95, 97, 106], "interpret": [94, 95, 97, 106], "worth": [94, 95, 124, 134, 135], "bulk": 94, "soon": [94, 97, 106, 121, 124], "dialoguelin": [95, 99, 106, 109, 110], "presum": 95, "speak": [95, 99, 103, 106, 123, 137], "prosser": 95, "ford": 95, "bulldozer_convers": 95, "lie": 95, "bulldoz": 95, "mud": 95, "rumbl": 95, "nois": 95, "harri": [95, 96, 103], "potter": [95, 103], "hermion": [95, 103], "harry_pott": 95, "harrypott": 95, "colon": [95, 124], "attent": [95, 124], "cake": 95, "trader": 95, "player_nam": 95, "afford": 95, "exam_greet": 95, "n_attempt": 95, "exam": 95, "em": 95, "insan": 95, "justic": 95, "headmast": 95, "fair": 95, "equat": 95, "sad": 95, "hpmor": 95, "39": 95, "univers": [95, 121], "evil": 95, "sun": 95, "sky": [95, 128], "elat": 95, "programm": 95, "examin": 95, "backslash": [95, 96], "newlin": 95, "consum": 95, "one_long_lin": 95, "uncomfort": 95, "googl": 96, "tag_nam": 96, "wavi": 96, "lorem": 96, "ipsum": 96, "dolor": 96, "sit": 96, "amet": 96, "consectetur": 96, "adipisc": 96, "elit": 96, "undesir": 96, "span": [96, 103, 104, 109], "escap": [96, 103, 104], "markupattribut": [96, 103, 104], "voldemort": 96, "curs": 96, "stupid": 96, "emphasi": 96, "scene117_harry_mrmalfoi": 96, "afraid": 96, "mrmalfoi": 96, "brave": 96, "llewellyn": 96, "tooltip": 96, "minimap": 96, "monkdialogu": 96, "monk": 96, "74": 96, "thunderstorm": 96, "blacksmithquest": 96, "reward": [96, 101, 124], "a0325": 96, "a1018": 96, "smith": 96, "lost": [96, 124], "ring": 96, "dash": 97, "nodenam": [97, 105], "programmat": 97, "colorid": 97, "radioact": 97, "zone": 97, "gloomy_morn": 97, "camera_zoom": 97, "morn": 97, "ti": [97, 120], "crappi": 97, "why": [97, 120, 123, 124, 126, 127], "fog": 97, "chill": 97, "bone": 97, "exercis": 97, "cut": 97, "warm": 97, "hope": 97, "arriv": [98, 106, 124, 138], "forest": 98, "road": 98, "dive": [98, 130], "ahead": 98, "beaten": 98, "cross": [98, 136], "alright": [98, 120, 121, 123, 126], "bridge_pass": 98, "10000": 98, "wow": [98, 124], "everyon": 98, "condol": 98, "kick": 98, "butt": 98, "apologi": 98, "unavail": [98, 106, 131, 132], "frontend": 98, "strictcharacternam": [99, 113], "canon": 99, "bio": 99, "affili": 99, "characterstorag": [99, 113], "isempti": [100, 101, 107, 112, 123, 124], "isnotempti": [100, 101, 107, 112, 123, 124], "storag": [101, 107, 113, 124], "proceed": [101, 105, 106], "unfold": 101, "addcommand0": 101, "addcommand5": 101, "hascommand": 101, "futureor": [101, 106], "fn": [101, 107], "addcommand1": [101, 113], "t1": [101, 107], "addcommand2": 101, "t2": [101, 107], "addcommand3": 101, "t3": [101, 107], "addcommand4": 101, "t4": [101, 107], "t5": 101, "five": [101, 124], "addorphanedcommand": 101, "quest": [101, 126, 127, 128, 132, 140], "technic": [101, 132], "difficult": [101, 121, 123, 124], "invoc": [101, 111], "quot": 101, "rid": [101, 118], "bandit": 101, "q037": 101, "questid": 101, "questnam": 101, "containskei": 101, "whatev": [101, 106, 124, 128], "unfortun": 101, "keyboarddialog": 101, "setvari": [101, 112], "quantiti": 101, "quest_reward": 101, "traderjo": 101, "potion_of_h": 101, "userdefinedcommand": [101, 106], "onchoicestart": [102, 105, 106], "dialogueopt": [102, 106], "dialogueentri": [103, 110], "onlinestart": [103, 105, 106], "onlinesign": [103, 105, 106], "onlinestop": [103, 105, 106], "onlinefinish": [103, 105, 106], "token": 103, "cricket": 103, "surpris": [103, 124], "favoritecolor": 103, "vantablack": 103, "bb": [103, 109], "linecont": 103, "speaker": [103, 106], "strip": [103, 104], "isconst": 103, "rerun": 103, "dialoguechoic": [104, 105, 106, 110], "delin": 104, "isavail": 104, "isdis": 104, "conclud": [105, 123, 138], "crowd": 105, "room": 105, "pace": 105, "startdialogu": 105, "pend": [105, 106], "sendsign": 105, "signal": [105, 106], "stoplin": 105, "parallel": 105, "ohno": 105, "emit": 105, "ondialoguestart": [105, 106], "onnodestart": [105, 106, 110], "onchoicefinish": [105, 106], "onnodefinish": [105, 106, 110], "ondialoguefinish": [105, 106], "dialogueerror": [105, 106], "orchestr": 106, "op": 106, "hasn": 106, "sibl": 106, "fade": 106, "augment": 106, "whoever": 106, "chat": 106, "bubbl": 106, "log": [106, 118], "auxiliari": 106, "meaning": 106, "trivial": [106, 123, 130], "reveal": [106, 123], "signific": [106, 124], "interfer": 106, "typewrit": 106, "rush": [106, 127], "interject": 106, "omg": 106, "hostil": 106, "demand": 106, "asap": 106, "nullabl": 107, "addfunction0": [107, 113], "addfunction4": 107, "hasvisitedthewizard": 107, "has_visited_the_wizard": 107, "hasfunct": 107, "t0": 107, "addfunction1": 107, "fn1": 107, "addfunction2": 107, "fn2": 107, "addfunction3": 107, "fn3": 107, "fn4": 107, "subrang": 109, "demarc": 109, "argumentstr": 111, "hippo": 111, "commandstorag": [111, 113], "getbooleanvalu": 112, "getnumericvalu": 112, "getstringvalu": 112, "hasvari": 112, "getvari": 112, "getvariableasexpress": 112, "getvariabletyp": 112, "expressiontyp": 112, "clearnodevisit": 112, "hub": 113, "getmonei": 113, "earnachiev": 113, "readfil": 113, "chapter1": 113, "chapter2": 113, "variablestorag": 113, "strictli": 113, "runnabl": 113, "flame_jenni": 114, "lightweight": [114, 128], "mainli": [115, 121], "accommod": 115, "registercompon": [115, 116], "oxygengam": 115, "createent": [115, 116], "basesystem": 115, "570796": 115, "flipx": 115, "flipinit": 115, "spriteinit": 115, "pizza": 115, "textinit": 115, "config": 115, "textpaintconfig": 115, "particlesystem": 115, "init": [116, 118], "agnost": 116, "prerend": 116, "registersystem": 116, "yoursystem": 116, "yourgam": 116, "simplerendersystem": 116, "_queri": 116, "createqueri": 116, "mixinsystem": 116, "simpleupdatesystem": 116, "sizecompon": 116, "renderent": 116, "anchorcompon": 116, "anglecompon": 116, "simplebasesystem": 116, "particlecompon": 116, "sdk": 118, "22g120": 118, "darwin": 118, "arm64": 118, "toolchain": 118, "33": 118, "xcode": 118, "io": 118, "2021": 118, "intellij": 118, "2022": 118, "83": [118, 122, 123, 124], "latin": 118, "mkdir": 118, "p": 118, "cd": 118, "barren": 118, "breviti": [118, 129], "successfulli": 118, "l": 118, "analysis_opt": [118, 121], "iml": 118, "launch": 118, "dropdown": [118, 124], "publish_to": 118, "widget_test": 118, "backup": 118, "profil": 118, "opt": 118, "licens": [118, 126], "gitignor": 118, "happi": [118, 139], "popular": 119, "solitair": [119, 120, 124, 140], "klondik": [120, 121, 122, 123, 126, 140], "overwhelm": [120, 126], "rough": [120, 121, 126, 127, 128], "sketch": [120, 121, 126, 128], "am": [120, 121, 126, 127, 129], "terminologi": 120, "lucki": 120, "figur": [120, 123], "stock": [120, 121, 122, 124], "tableau": [120, 121, 124], "pile": [120, 121, 122, 124], "foundat": [120, 121, 122, 124], "deck": [120, 123, 124], "klondikegam": [120, 122, 123], "fanci": 120, "63mm": 120, "88mm": 120, "approxim": [120, 121], "1400": [120, 121, 122, 123, 124], "phone": 120, "ipad": 120, "ado": [120, 123], "artist": [120, 122, 126], "harshli": 120, "drawatla": 120, "theori": 120, "unicod": 120, "wonder": [120, 121, 122], "logo": [120, 122], "jack": [120, 122], "king": [120, 122, 123, 124], "tire": 120, "onward": [120, 126], "broad": 121, "outlin": [121, 124, 128], "cornerston": 121, "dispatch": 121, "klondike_gam": [121, 122, 123, 124], "klondikesprit": [121, 122, 123, 124], "incorpor": [121, 124], "effort": 121, "defer": [121, 123], "decis": [121, 122], "philosophi": 121, "inter": 121, "cardgap": [121, 122, 123, 124], "simplic": [121, 124], "cardwidth": [121, 122, 123, 124], "cardheight": [121, 122, 123, 124], "cardradiu": [121, 122, 123, 124], "cardsiz": [121, 122, 123, 124], "arithmet": 121, "hurt": 121, "anywai": 121, "accomplish": [121, 126, 128, 132], "visiblegames": [121, 122, 123, 124], "tall": [121, 123], "estim": 121, "thrice": 121, "52": [122, 123, 124], "ac": [122, 123, 124], "club": [122, 123, 124], "spade": [122, 123, 124], "faceup": [122, 124], "immut": [122, 123, 124], "hint": 122, "_singleton": [122, 123, 124], "lazili": 122, "1176": [122, 123, 124], "172": [122, 123, 124], "183": [122, 123, 124], "973": [122, 123, 124], "177": [122, 123, 124], "182": [122, 123, 124], "974": [122, 123, 124], "226": [122, 123, 124], "184": [122, 123, 124], "1178": [122, 123, 124], "220": [122, 123, 124], "176": [122, 123, 124], "spritecow": 122, "isr": [122, 123, 124], "isblack": [122, 123, 124], "x1": [122, 123, 124], "y1": [122, 123, 124], "x2": [122, 123, 124], "y2": [122, 123, 124], "redsprit": [122, 123, 124], "blacksprit": [122, 123, 124], "335": [122, 123, 124], "164": [122, 123, 124], "789": [122, 123, 124], "161": [122, 123, 124], "129": [122, 123, 124], "19": [122, 123, 124], "322": [122, 123, 124], "125": [122, 123, 124], "122": [122, 123, 124], "117": [122, 123, 124], "127": [122, 123, 124], "213": [122, 123, 124], "208": [122, 123, 124], "315": [122, 123, 124], "93": [122, 123, 124], "132": [122, 123, 124], "314": [122, 123, 124], "309": [122, 123, 124], "324": [122, 123, 124], "419": [122, 123, 124], "414": [122, 123, 124], "320": [122, 123, 124], "84": [122, 123, 124], "509": [122, 123, 124], "505": [122, 123, 124], "92": [122, 123, 124], "612": [122, 123, 124], "607": [122, 123, 124], "78": [122, 123, 124], "709": [122, 123, 124], "704": [122, 123, 124], "810": [122, 123, 124], "805": [122, 123, 124], "137": [122, 123, 124], "11": [122, 123, 124], "j": [122, 123, 124], "170": [122, 123, 124], "469": [122, 123, 124], "167": [122, 123, 124], "56": [122, 123, 124], "126": [122, 123, 124], "q": [122, 123, 124], "168": [122, 123, 124], "547": [122, 123, 124], "165": [122, 123, 124], "243": [122, 123, 124], "696": [122, 123, 124], "123": [122, 123, 124], "intrank": [122, 123, 124], "intsuit": [122, 123, 124], "_faceup": [122, 123, 124], "accessor": 122, "isfaceup": [122, 123, 124], "isfacedown": [122, 123, 124], "nextint": [122, 124, 129, 132], "1150": 122, "1500": 122, "temporari": [122, 124], "28": [122, 123, 124, 132], "_renderfront": [122, 123, 124], "_renderback": [122, 123, 124], "cardrrect": [122, 123, 124], "backbackgroundpaint": [122, 123, 124], "backborderpaint1": [122, 123, 124], "backrrectinn": [122, 123, 124], "backborderpaint2": [122, 123, 124], "flamesprit": [122, 123, 124], "0xff380c02": [122, 123, 124], "0xffdbaf58": [122, 123, 124], "0x5cef971b": [122, 123, 124], "1367": [122, 123, 124], "357": [122, 123, 124], "501": [122, 123, 124], "pip": 122, "court": 122, "frontbackgroundpaint": [122, 123, 124], "redborderpaint": [122, 123, 124], "0xffece8a3": [122, 123, 124], "blackborderpaint": [122, 123, 124], "0xff7ab2e8": [122, 123, 124], "redjack": [122, 123, 124], "81": [122, 123, 124], "565": [122, 123, 124], "562": [122, 123, 124], "488": [122, 123, 124], "redqueen": [122, 123, 124], "717": [122, 123, 124], "541": [122, 123, 124], "486": [122, 123, 124], "515": [122, 123, 124], "redk": [122, 123, 124], "1305": [122, 123, 124], "532": [122, 123, 124], "407": [122, 123, 124], "549": [122, 123, 124], "trial": 122, "blueish": 122, "hue": 122, "bluefilt": [122, 123, 124], "0x880d8bff": [122, 123, 124], "blackjack": [122, 123, 124], "blackqueen": [122, 123, 124], "blackk": [122, 123, 124], "_drawsprit": [122, 123, 124], "relativex": [122, 123, 124], "relativei": [122, 123, 124], "ranksprit": [122, 123, 124], "suitsprit": [122, 123, 124], "08": [122, 123, 124], "repetit": 122, "refresh": 122, "scatter": [123, 124], "eras": 123, "renam": 123, "stockpil": [123, 124], "wastepil": [123, 124], "foundationpil": [123, 124], "tableaupil": [123, 124], "architectur": 123, "imposs": 123, "anxiou": 123, "habit": 123, "believ": 123, "stick": 123, "_card": [123, 124], "acquirecard": [123, 124], "rank": [123, 124], "detour": 123, "fan": [123, 124], "neat": [123, 124], "_fanouttopcard": [123, 124], "_fanoffset": [123, 124], "addscal": [123, 124], "unnatur": 123, "till": 123, "shuffl": [123, 124], "cue": 123, "0xff3f5b5d": [123, 124], "0x883f5b5d": [123, 124], "removeallcard": [123, 124], "_suitpaint": [123, 124], "0x50ffffff": [123, 124], "0x3a000000": [123, 124], "0x64000000": [123, 124], "luminos": [123, 124], "major": 123, "cardtod": [123, 124], "fliptopcard": [123, 124], "recal": 123, "acquir": [123, 124], "removelist": 123, "ownership": 123, "kinda": 123, "breaker": 123, "displac": 123, "seemingli": 123, "straightforward": 123, "resid": 123, "canmovecard": [123, 124], "revis": [123, 124], "droppil": [123, 124], "puzzl": 123, "canacceptcard": [123, 124], "topcardrank": [123, 124], "topcard": [123, 124], "removecard": [123, 124], "stateerror": [123, 124], "removerang": [123, 124], "pseudo": 123, "guess": 123, "returncard": [123, 124], "layoutcard": [123, 124], "_fanoffset1": [123, 124], "_fanoffset2": [123, 124], "taller": 123, "hard": 123, "inconsist": 123, "littl": [123, 124, 129, 130, 135], "attachedcard": [123, 124], "cardsontop": [123, 124], "getrang": [123, 124], "extracard": [123, 124], "101": [123, 124], "playabl": [123, 124, 138, 139], "tableau_pil": [123, 124], "foundation_pil": [123, 124], "stock_pil": [123, 124], "waste_pil": [123, 124], "autom": 124, "celebr": 124, "patienc": 124, "usa": 124, "variant": 124, "clearli": 124, "klondikedraw": 124, "wherev": 124, "holder": 124, "ultim": 124, "deceler": 124, "domov": 124, "easeoutquad": 124, "human": 124, "movetoeffect": 124, "gracefulli": 124, "came": 124, "_wherecardstart": 124, "ord": 124, "mistak": 124, "nowher": 124, "detach": 124, "settl": 124, "octob": 124, "2023": 124, "turnfaceup": 124, "_isfaceupview": 124, "_isanimatedflip": 124, "easeoutsin": 124, "unchang": 124, "fancier": 124, "shrunk": 124, "ugli": 124, "yeah": 124, "ride": 124, "neighborhood": 124, "asid": 124, "pose": 124, "schr\u00f6dinger": 124, "dilemma": 124, "facedown": 124, "impati": 124, "rapid": 124, "transfer": 124, "catch": 124, "beyond": [124, 128, 129, 130, 132], "scope": [124, 132], "setstat": 124, "startup": [124, 134], "undertaken": 124, "subtl": 124, "leak": 124, "crash": [124, 130], "messi": 124, "fixabl": 124, "review": [124, 138], "scratch": 124, "newdeal": 124, "samed": 124, "changedraw": 124, "havefun": 124, "topgap": 124, "cardspacewidth": 124, "cardspaceheight": 124, "maxint": 124, "0xfffffffe": 124, "persist": 124, "replai": 124, "huh": 124, "addbutton": 124, "buttoncompon": 124, "flatbutton": 124, "spritebuttoncompon": 124, "hudbuttoncompon": 124, "advancedbuttoncompon": 124, "radio": 124, "slider": 124, "playareas": 124, "gamemidx": 124, "centr": 124, "odd": 124, "arrang": 124, "insight": 124, "checkwin": 124, "letscelebr": 124, "nmovingcard": 124, "delayfactor": 124, "depart": 124, "aris": 124, "wrong": 124, "mess": [124, 135], "printout": 124, "domoveandflip": 124, "suitindex": 124, "formerli": 124, "abruptli": 124, "instantli": 124, "difficulti": 124, "dropcard": 124, "mimic": 124, "dovetail": 124, "lesson": 124, "scaffold": 124, "isful": 124, "ncomplet": 124, "f": 124, "vital": 124, "winnabl": 124, "klondike_world": 124, "isbasecard": 124, "toler": 124, "dragtoler": 124, "handletapup": 124, "_renderbasecard": 124, "movemethod": 124, "shortdrag": 124, "dropposit": 124, "friendli": 124, "startprior": 124, "cardmoveeffect": 124, "transitprior": 124, "whendon": 124, "tim": 124, "flat_button": 124, "buttonbackground": 124, "cornerradiu": 124, "_background": 124, "firstcard": 124, "cardlist": 124, "nextposit": 124, "ncardstomov": 124, "calculatehitarea": 124, "fewer": 124, "tapup": 124, "basecard": 124, "buttonx": 124, "dealprior": 124, "camerazoom": 124, "zoomedscreen": 124, "screencent": 124, "ncard": 124, "offscreenheight": 124, "offscreenwidth": 124, "offscreen": 124, "cardstomov": 124, "offscreenposit": 124, "cardnum": 124, "cardindex": 124, "riffl": 124, "04": 124, "excess": 124, "perfect": 126, "brought": 126, "emberquestgam": [126, 127, 128, 129, 130, 131, 132], "mascot": 126, "compli": 126, "creator": 126, "chanc": 126, "artwork": 126, "assist": 126, "emberquest": 126, "heart_half": [126, 127, 128, 131, 132], "water_enemi": [126, 127, 128, 129, 130, 132], "troubl": 126, "16x16": [126, 127], "32x32": 126, "64x64": [126, 127], "goal": 127, "lose": 127, "pit": [127, 132], "clutter": 127, "ember_quest": [127, 128, 129, 130, 131, 132], "impact": [127, 139], "actor": [127, 128, 129, 130, 131, 132], "_ember": [127, 128, 130, 132], "flicker": 127, "10x10": 128, "640": [128, 132], "travers": 128, "forth": [128, 138], "referenc": 128, "ground_block": [128, 130, 132], "platform_block": [128, 130, 132], "boilerpl": 128, "groundblock": [128, 129, 130, 132], "platformblock": [128, 130, 132], "waterenemi": [128, 129, 130, 132], "segment_manag": [128, 129, 132], "soul": 128, "creativ": 128, "gridposit": [128, 129, 132], "blocktyp": [128, 132], "segment0": [128, 132], "segment1": [128, 132], "cell": 128, "segment2": [128, 132], "segment3": [128, 132], "segment4": [128, 132], "loadseg": 128, "loadgameseg": [128, 129, 132], "segmentindex": [128, 132], "xpositionoffset": [128, 129, 132], "initializegam": [128, 130, 131, 132], "3200": [128, 132], "segmentstoload": [128, 132], "todoubl": [128, 131, 132], "xoffset": [128, 129, 132], "objectspe": [128, 129, 130, 132], "ax": 128, "platformimag": [128, 132], "rectanglehitbox": [128, 129, 132, 139], "collisiontyp": [128, 129, 132, 139], "dungeon": 128, "fromargb": [128, 132], "173": [128, 132], "223": [128, 132], "247": [128, 132], "puls": 129, "starimag": [129, 132], "sizeeffect": [129, 132], "pulsat": 129, "groundimag": [129, 132], "lastblockxposit": [129, 132], "uniquekei": [129, 132], "lastblockkei": [129, 132], "_blockkei": [129, 132], "10th": 129, "varianc": 129, "seriou": 130, "horizontaldirect": [130, 132], "arrowleft": [130, 132], "arrowright": [130, 132], "movespe": [130, 132], "establish": 130, "hascollisiondetect": [130, 132, 139], "collisioncallback": [130, 132, 139], "mid": [130, 132], "collisionnorm": [130, 132], "absolutecent": [130, 132], "separationdist": [130, 132], "fromabov": [130, 132], "dot": [130, 132], "isonground": [130, 132], "circlehitbox": [130, 132], "jumpspe": [130, 132], "terminalveloc": [130, 132], "hasjump": [130, 132], "tie": 130, "crazi": [130, 132], "grass": 130, "hitbyenemi": [130, 131, 132], "36": [130, 132], "door": 130, "relai": 130, "starscollect": [131, 132], "monitor": 131, "heartstat": [131, 132], "hearthealthcompon": [131, 132], "spritegroupcompon": [131, 132], "heartnumb": [131, 132], "availablesprit": [131, 132], "unavailablesprit": [131, 132], "_scoretextcompon": [131, 132], "fromrgbo": [131, 132], "starsprit": [131, 132], "positionx": [131, 132], "main_menu": 132, "mainmenu": 132, "blacktextcolor": 132, "whitetextcolor": 132, "boxdecor": 132, "borderradiu": 132, "mainaxisalign": 132, "sizedbox": 132, "elevatedbutton": 132, "stylefrom": 132, "wasd": 132, "textalign": 132, "explanatori": 132, "trap": 132, "game_ov": 132, "gameov": 132, "loadhud": 132, "wipe": 132, "fell": 132, "cloudspe": 132, "uncom": 132, "unimplementederror": 132, "classic": [134, 140], "shooter": [134, 137, 139, 140], "spaceshootergam": [134, 135, 136, 137, 138, 139], "pandetector": [135, 136, 137, 138, 139], "bore": [135, 136], "spaceship": [135, 136], "starship": [136, 137, 138], "glanc": 136, "energi": 136, "heard": 136, "sensat": 136, "wikipedia": 136, "stars_0": [136, 137, 138, 139], "stars_1": [136, 137, 138, 139], "stars_2": [136, 137, 138, 139], "parallaxdata": 136, "convinc": 136, "shot": 137, "startshoot": [137, 138, 139], "stopshoot": [137, 138, 139], "dragstartinfo": [137, 138, 139], "dragendinfo": [137, 138, 139], "routin": [137, 138], "spawncompon": [137, 138, 139], "_bulletspawn": [137, 138, 139], "autostart": [137, 138, 139], "hopefulli": 137, "ourselv": [137, 138], "enemys": [138, 139], "drastic": 139, "anticip": 139, "overrod": 139, "crawl": 139, "biggest": 139, "suffer": 139, "damag": 139, "clash": 139, "hunt": 139, "pilot": 139}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"get": [0, 73, 134], "start": [0, 73, 124, 127, 134], "about": [0, 73, 96], "flame": [0, 9, 28, 35, 45, 60, 63, 64, 65, 70, 73, 118], "instal": [0, 28, 73, 118], "outsid": [0, 73], "scope": [0, 73, 93], "engin": [0, 73], "multiplay": [0, 73], "netcod": [0, 73], "bridg": 1, "packag": 1, "audio": 2, "cach": [2, 4, 29], "audiopool": 3, "loop": [4, 46], "background": [4, 46], "music": 4, "file": [4, 94, 118], "method": [4, 50, 100, 101, 103, 105, 106, 107, 112, 113, 124], "plai": 4, "stop": [4, 82], "paus": [4, 46], "resum": [4, 46], "flame_audio": 5, "flame_bloc": [6, 8], "how": [6, 20, 28, 32], "us": [6, 20, 28, 39, 64, 74, 124], "full": [6, 9, 20, 30], "exampl": [6, 9, 20, 30, 34, 38, 49, 77, 78, 80, 81, 96, 101], "compon": [7, 21, 37, 39, 52, 70, 115, 122, 129], "flameblocprovid": 7, "flamemultiblocprovid": 7, "flamebloclisten": 7, "flameblocread": 7, "fire": 9, "atla": 9, "fireatla": 9, "creat": [9, 32, 44, 118, 128], "textur": 9, "usag": [9, 15, 16, 23, 25, 65], "flame_fire_atla": 10, "flame_forge2d": 11, "forge2d": [12, 38], "forge2dgam": 12, "bodycompon": 12, "contact": 12, "callback": 12, "joint": 13, "built": [13, 44, 64, 68, 76, 87], "constantvolumejoint": 13, "distancejoint": 13, "frictionjoint": 13, "gearjoint": 13, "motorjoint": 13, "mousejoint": 13, "prismaticjoint": 13, "prismat": 13, "limit": [13, 29], "motor": 13, "pulleyjoint": 13, "revolutejoint": 13, "revolut": 13, "ropejoint": 13, "weldjoint": 13, "breakabl": 13, "bodi": [13, 97], "flame_isol": 14, "flameisol": 15, "perform": [15, 32], "note": 15, "backpressur": 15, "strategi": 15, "flame_lotti": 16, "flamenetworkasset": 17, "flame_oxygen": 18, "flame_r": [19, 20], "componentref": 21, "riverpodcomponentmixin": 21, "riverpodgamemixin": 21, "flame_riverpod": [22, 23], "riverpod": 23, "widget": [24, 36, 47, 49, 61], "riverpodawaregamewidget": 24, "riverpodawaregamewidgetst": 24, "flame_spin": 25, "flame_splash_screen": 26, "flame_svg": [27, 28], "svg": 28, "flame_til": 29, "tiledcompon": 29, "tilestack": 29, "tileatla": 29, "flip": [29, 124], "clear": 29, "imag": [29, 60, 65], "troubleshoot": 29, "my": 29, "game": [29, 46, 47, 52, 63, 65, 74, 116, 118, 119, 121, 124, 125, 132, 133], "show": 29, "line": [29, 95], "artifact": 29, "between": 29, "map": 29, "tile": [29, 30, 31], "layer": [30, 66], "properti": [30, 47, 50, 56, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113], "other": [30, 53, 59, 114, 121], "featur": [30, 32, 58], "editor": 31, "contribut": 32, "guidelin": 32, "type": [32, 36, 91, 92, 93], "bug": 32, "report": 32, "fix": 32, "new": [32, 44, 124], "document": [32, 34, 35, 70], "miscellan": [32, 88], "To": 32, "requir": 32, "open": [32, 118], "an": 32, "issu": 32, "fork": 32, "repositori": 32, "environ": 32, "setup": 32, "cspell": 32, "markdown": [32, 34, 70], "lint": 32, "chang": [32, 46], "break": 32, "pull": 32, "request": 32, "maintain": 32, "merg": 32, "releas": 32, "develop": 33, "site": 34, "tabl": 34, "content": 34, "admonit": 34, "deprec": 34, "live": 34, "standard": 34, "templat": 34, "build": [34, 127, 128], "local": [34, 80], "style": [35, 70, 96], "guid": 35, "code": [35, 127], "format": 35, "structur": [35, 72, 121], "import": 35, "export": 35, "assert": 35, "class": [35, 60, 121, 124], "dartdoc": 35, "main": [35, 132], "doc": 35, "write": [36, 74], "test": 36, "simpl": [36, 123], "flamegam": [36, 39, 46, 58], "golden": 36, "random": [36, 90, 124, 129], "camera": 37, "world": [37, 39, 124, 127, 128], "cameracompon": [37, 127], "withfixedresolut": 37, "viewport": 37, "viewfind": 37, "backdrop": 37, "control": [37, 44, 52, 76, 130, 135], "visibleworldrect": 37, "check": [37, 118, 132], "i": 37, "visibl": [37, 39], "from": [37, 39, 123], "point": [37, 39], "view": [37, 124], "collis": [38, 130, 139], "detect": 38, "mixin": [38, 46, 48, 53, 55, 64, 116], "hascollisiondetect": 38, "collisioncallback": 38, "order": 38, "shapehitbox": 38, "collisiontyp": 38, "polygonhitbox": 38, "rectanglehitbox": 38, "circlehitbox": 38, "screenhitbox": 38, "compositehitbox": 38, "broad": 38, "phase": 38, "quad": 38, "tree": 38, "rai": 38, "cast": 38, "trace": 38, "raycastal": 38, "comparison": 38, "lifecycl": [39, 46, 68], "prioriti": 39, "compos": 39, "access": [39, 100, 112], "ensur": 39, "ha": 39, "given": 39, "parent": 39, "ancestor": 39, "kei": 39, "queri": 39, "child": 39, "specif": 39, "screen": 39, "positiontyp": 39, "positioncompon": [39, 64, 115], "posit": 39, "size": [39, 60], "scale": [39, 60], "angl": 39, "nativ": 39, "anchor": [39, 124], "children": 39, "render": [39, 66, 69, 70, 122], "spritecompon": [39, 115], "spriteanimationcompon": 39, "spriteanimationgroupcompon": 39, "spritegroupcompon": 39, "spawncompon": 39, "svgcompon": 39, "parallaxcompon": 39, "shapecompon": 39, "polygoncompon": 39, "rectanglecompon": 39, "circlecompon": 39, "isometrictilemapcompon": 39, "ninetileboxcompon": 39, "custompaintercompon": 39, "componentsnotifi": 39, "clipcompon": 39, "effect": [39, 44], "when": 39, "overview": 44, "movebyeffect": 44, "movetoeffect": 44, "movealongpatheffect": 44, "rotateeffect": 44, "scaleeffect": 44, "sizeeffect": 44, "anchorbyeffect": 44, "anchortoeffect": 44, "opacitytoeffect": 44, "opacitybyeffect": 44, "gloweffect": 44, "sequenceeffect": 44, "removeeffect": 44, "coloreffect": 44, "effectcontrol": 44, "lineareffectcontrol": 44, "reverselineareffectcontrol": 44, "curvedeffectcontrol": 44, "reversecurvedeffectcontrol": 44, "pauseeffectcontrol": 44, "repeatedeffectcontrol": 44, "infiniteeffectcontrol": 44, "sequenceeffectcontrol": 44, "speedeffectcontrol": 44, "delayedeffectcontrol": 44, "noiseeffectcontrol": 44, "randomeffectcontrol": 44, "sineeffectcontrol": 44, "zigzageffectcontrol": 44, "see": [44, 79, 99, 101, 111], "also": [44, 79, 99, 101, 111], "resiz": 46, "debug": [46, 58], "mode": 46, "color": [46, 60], "singlegameinst": 46, "low": 46, "level": [46, 52], "api": 46, "step": 46, "execut": [46, 105], "hasperformancetrack": 46, "constructor": [47, 50, 56, 99, 103, 105], "drag": 48, "event": [48, 49, 52, 54, 55], "demo": [48, 54, 55], "anatomi": [48, 55], "ondragstart": 48, "ondragupd": 48, "ondragend": 48, "ondragcancel": 48, "dragcallback": 48, "gestur": 49, "input": [49, 51, 52, 53], "intro": [49, 52], "touch": 49, "mous": 49, "detector": 49, "pandetector": 49, "scaledetector": 49, "cursor": 49, "coordin": 49, "system": [49, 116], "global": 49, "gesturehitbox": 49, "hardwarekeyboarddetector": 50, "keyboard": [52, 130], "receiv": 52, "focu": 52, "helper": 53, "joystick": 53, "hudbuttoncompon": 53, "spritebuttoncompon": 53, "buttoncompon": 53, "gamepad": 53, "advancedbuttoncompon": 53, "togglebuttoncompon": 53, "ignoreev": 53, "pointer": 54, "hovercallback": 54, "tap": [55, 123], "ontapdown": 55, "onlongtapdown": 55, "ontapup": 55, "ontapcancel": 55, "tapcallback": 55, "doubletapcallback": 55, "migrat": 55, "aligncompon": 56, "layout": 57, "devtool": 58, "extens": [58, 60, 116], "fp": 58, "fpscompon": 58, "fpstextcompon": 58, "childcountercompon": 58, "timetrackcompon": 58, "util": 60, "devic": 60, "fullscreen": 60, "setlandscap": 60, "setportrait": 60, "setorient": 60, "timer": 60, "time": [60, 127], "canva": 60, "offset": 60, "rect": 60, "math": 60, "rectangl": 60, "vector2": 60, "matrix4": 60, "ninetileboxwidget": 61, "spritebutton": 61, "spritewidget": 61, "spriteanimationwidget": 61, "overlai": 62, "support": 63, "platform": [63, 128], "flutter": [63, 118], "channel": 63, "web": 63, "deploi": 63, "your": 63, "github": [63, 118], "page": 63, "itch": 63, "io": 63, "decor": 64, "paintdecor": 64, "blur": 64, "grayscal": 64, "tint": 64, "rotate3ddecor": 64, "shadow3ddecor": 64, "hasdecor": 64, "multipl": 64, "load": [65, 127, 128, 129], "standalon": 65, "over": [65, 132], "network": 65, "sprite": 65, "spritebatch": 65, "imagecomposit": 65, "anim": [65, 124, 136], "spritesheet": 65, "snapshot": 66, "dynamiclay": 66, "prerenderedlay": 66, "processor": 66, "regener": 66, "take": 66, "ar": 66, "crop": 66, "off": 66, "center": 66, "palett": 67, "particl": 68, "translatedparticl": 68, "movingparticl": 68, "acceleratedparticl": 68, "circleparticl": 68, "spriteparticl": 68, "imageparticl": 68, "scalingparticl": 68, "spriteanimationparticl": 68, "componentparticl": 68, "computedparticl": 68, "nest": 68, "behavior": 68, "text": [70, 95, 96], "textcompon": [70, 115], "textboxcompon": 70, "scrolltextboxcompon": 70, "textelementcompon": 70, "infrastructur": 70, "textrender": 70, "textpaint": 70, "spritefontrender": 70, "debugtextrender": 70, "inlin": 70, "element": 70, "node": [70, 88, 94, 97, 110], "root": 70, "routercompon": 71, "rout": 71, "overlayrout": 71, "valuerout": 71, "jenni": [74, 108], "dialogu": 74, "charact": [75, 95, 99, 100], "command": [76, 83, 94], "variabl": [76, 93, 112], "flow": 76, "declar": 77, "syntax": [77, 96], "jump": 79, "set": [81, 131], "user": [83, 87], "defin": [83, 87], "visit": [84, 88], "wait": 85, "express": [86, 95], "function": [87, 88, 89, 90, 91], "condit": 88, "els": 88, "plural": 88, "x": [88, 89, 91], "word": 88, "visit_count": 88, "numer": 89, "ceil": 89, "dec": 89, "decim": 89, "floor": 89, "inc": 89, "int": 89, "round": 89, "round_plac": 89, "n": [89, 90], "dice": 90, "random_rang": 90, "b": 90, "convers": 91, "bool": 91, "number": [91, 124], "string": 91, "oper": 92, "arithmet": 92, "logic": 92, "assign": 92, "relat": 92, "preced": 92, "name": 93, "valu": 93, "yarnspinn": 94, "languag": 94, "yarn": [94, 113], "comment": 94, "tag": 94, "id": 95, "interpol": 95, "markup": [95, 96], "hashtag": 95, "escap": 95, "mark": 96, "piec": 96, "differ": 96, "provid": 96, "addit": 96, "inform": 96, "fragment": 96, "indic": 96, "where": 96, "special": 96, "non": 96, "token": 96, "mai": 96, "insert": 96, "header": 97, "option": 98, "characterstorag": 100, "storag": [100, 112], "remov": [100, 112], "commandstorag": 101, "startquest": 101, "prompt": 101, "give": 101, "dialoguechoic": 102, "dialoguelin": 103, "dialogueopt": 104, "dialoguerunn": 105, "model": [105, 124], "dialogueview": 106, "functionstorag": 107, "runtim": 108, "markupattribut": 109, "userdefinedcommand": 111, "variablestorag": 112, "project": [113, 118], "modul": 114, "sizecompon": 115, "anchorcompon": 115, "anglecompon": 115, "flipcompon": 115, "particlecompon": 115, "oxygen": 116, "oxygengam": 116, "gameref": 116, "rendersystem": 116, "updatesystem": 116, "basesystem": 116, "particlesystem": 116, "resourc": 117, "bare": 118, "1": [118, 120, 123, 126], "2": [118, 121, 123, 127], "directori": 118, "3": [118, 122, 123, 128], "initi": 118, "empti": 118, "4": [118, 123, 129], "android": 118, "studio": 118, "5": [118, 124, 130], "clean": 118, "up": [118, 131], "6": [118, 131], "run": [118, 123], "7": [118, 132], "sync": 118, "8": 118, "done": 118, "klondik": [119, 124], "tutori": [119, 125, 133, 140], "prepar": [120, 126], "plan": [120, 126, 127], "asset": [120, 126, 127], "scaffold": [121, 127], "klondikegam": [121, 124], "card": [122, 123, 124], "suit": 122, "rank": 122, "renderback": 122, "renderfront": 122, "gameplai": 123, "The": [123, 124, 127, 128], "pile": 123, "stock": 123, "wast": 123, "deal": [123, 124], "visual": 123, "represent": 123, "refil": 123, "foundat": 123, "tableau": 123, "move": [123, 124], "movement": [123, 130], "onli": 123, "allow": 123, "drop": 123, "proper": 123, "locat": 123, "restart": 124, "button": 124, "draw": 124, "make": 124, "end": 124, "A": 124, "action": 124, "strip": 124, "down": 124, "gener": 124, "seed": 124, "introduc": 124, "klondikeworld": 124, "co": 124, "ordin": 124, "more": 124, "graphic": [124, 135], "glitch": 124, "win": 124, "re": 124, "have": 124, "fun": 124, "ember": [125, 127], "quest": 125, "block": [127, 128, 129], "segment": [128, 129], "manag": 128, "displai": [128, 132], "ad": [129, 130, 131, 132, 135, 136, 137, 138], "remain": 129, "star": 129, "water": 129, "enemi": [129, 138, 139], "ground": 129, "next": 129, "object": 130, "scroll": 130, "hud": 131, "updat": 131, "data": 131, "menu": 132, "health": 132, "congratul": 132, "space": 133, "shooter": 133, "player": 135, "some": 135, "depth": 136, "bullet": [137, 139]}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "extensions.flutter_app": 1, "extensions.package": 1, "extensions.yarn_lexer": 1, "sphinx": 60}, "alltitles": {"Getting Started": [[0, "getting-started"], [73, "getting-started"], [134, "getting-started"]], "About Flame": [[0, "about-flame"], [73, "about-flame"]], "Installation": [[0, "installation"], [73, "installation"], [28, "installation"]], "Getting started": [[0, "id1"], [73, "id1"]], "Outside of the scope of the engine": [[0, "outside-of-the-scope-of-the-engine"], [73, "outside-of-the-scope-of-the-engine"]], "Multiplayer (netcode)": [[0, "multiplayer-netcode"], [73, "multiplayer-netcode"]], "AlignComponent": [[56, "aligncomponent"]], "Constructors": [[56, "constructors"], [99, "constructors"], [103, "constructors"], [105, "constructors"], [47, "constructors"], [50, "constructors"]], "Properties": [[56, "properties"], [99, "properties"], [100, "properties"], [101, "properties"], [102, "properties"], [103, "properties"], [104, "properties"], [105, "properties"], [106, "properties"], [107, "properties"], [47, "properties"], [50, "properties"], [109, "properties"], [110, "properties"], [111, "properties"], [112, "properties"], [113, "properties"]], "Audio": [[2, "audio"]], "Caching": [[2, "caching"]], "AudioPool": [[3, "audiopool"]], "Bare Flame game": [[118, "bare-flame-game"]], "1. Check flutter installation": [[118, "check-flutter-installation"]], "2. Create the Project Directory": [[118, "create-the-project-directory"]], "3. Initialize empty Flutter project": [[118, "initialize-empty-flutter-project"]], "4. Open the project in Android Studio": [[118, "open-the-project-in-android-studio"]], "5. Clean up the project files": [[118, "clean-up-the-project-files"]], "6. Run the project": [[118, "run-the-project"]], "7. Sync to GitHub": [[118, "sync-to-github"]], "8. Done": [[118, "done"]], "Looping Background Music": [[4, "looping-background-music"]], "Caching music files": [[4, "caching-music-files"]], "Methods": [[4, "methods"], [100, "methods"], [101, "methods"], [103, "methods"], [105, "methods"], [106, "methods"], [107, "methods"], [50, "methods"], [112, "methods"], [113, "methods"]], "Play": [[4, "play"]], "Stop": [[4, "stop"]], "Pause and Resume": [[4, "pause-and-resume"]], "flame_bloc": [[6, "flame-bloc"], [8, "flame-bloc"]], "How to use": [[6, "how-to-use"]], "Full Example": [[6, "full-example"], [9, "full-example"], [30, "full-example"], [20, "full-example"]], "Components": [[7, "components"], [39, "components"], [115, "components"]], "FlameBlocProvider": [[7, "flameblocprovider"]], "FlameMultiBlocProvider": [[7, "flamemultiblocprovider"]], "FlameBlocListener": [[7, "flamebloclistener"]], "FlameBlocListenable": [[7, "flamebloclistenable"]], "FlameBlocReader": [[7, "flameblocreader"]], "Bridge Packages": [[1, "bridge-packages"]], "Camera component": [[37, "camera-component"]], "World": [[37, "world"]], "CameraComponent": [[37, "cameracomponent"]], "CameraComponent.withFixedResolution()": [[37, "cameracomponent-withfixedresolution"]], "Viewport": [[37, "viewport"]], "Viewfinder": [[37, "viewfinder"]], "Backdrop": [[37, "backdrop"]], "Camera controls": [[37, "camera-controls"]], "visibleWorldRect": [[37, "visibleworldrect"]], "Check if a component is visible from the camera point of view": [[37, "check-if-a-component-is-visible-from-the-camera-point-of-view"]], "<>": [[75, "character"]], "Character": [[99, "character"]], "See Also": [[99, "see-also"], [79, "see-also"]], "CharacterStorage": [[100, "characterstorage"]], "Accessing character storage": [[100, "accessing-character-storage"]], "Removing characters": [[100, "removing-characters"]], "Collision Detection": [[38, "collision-detection"]], "Mixins": [[38, "mixins"], [48, "mixins"], [55, "mixins"]], "HasCollisionDetection": [[38, "hascollisiondetection"]], "CollisionCallbacks": [[38, "collisioncallbacks"]], "Collision order": [[38, "collision-order"]], "ShapeHitbox": [[38, "shapehitbox"]], "CollisionType": [[38, "collisiontype"]], "PolygonHitbox": [[38, "polygonhitbox"]], "RectangleHitbox": [[38, "rectanglehitbox"]], "CircleHitbox": [[38, "circlehitbox"]], "ScreenHitbox": [[38, "screenhitbox"]], "CompositeHitbox": [[38, "compositehitbox"]], "Broad phase": [[38, "broad-phase"]], "Quad Tree broad phase": [[38, "quad-tree-broad-phase"]], "Ray casting and Ray tracing": [[38, "ray-casting-and-ray-tracing"]], "Ray casting": [[38, "ray-casting"]], "raycastAll": [[38, "raycastall"]], "Ray tracing": [[38, "ray-tracing"]], "Comparison to Forge2D": [[38, "comparison-to-forge2d"]], "Examples": [[38, "examples"], [101, "examples"], [77, "examples"], [80, "examples"], [96, "examples"], [81, "examples"]], "CommandStorage": [[101, "commandstorage"]], "<>": [[101, "startquest"]], "<>": [[101, "prompt"]], "<>": [[101, "give"]], "See also": [[101, "see-also"], [44, "see-also"], [111, "see-also"]], "Commands": [[76, "commands"], [94, "commands"]], "Built-in commands": [[76, "built-in-commands"]], "Variables": [[76, "variables"], [93, "variables"]], "Control flow": [[76, "control-flow"]], "Component": [[21, "component"], [39, "component"]], "ComponentRef": [[21, "componentref"]], "RiverpodComponentMixin": [[21, "riverpodcomponentmixin"]], "RiverpodGameMixin": [[21, "riverpodgamemixin"]], "Component lifecycle": [[39, "component-lifecycle"]], "Priority": [[39, "priority"]], "Composability of components": [[39, "composability-of-components"]], "Access to the World from a Component": [[39, "access-to-the-world-from-a-component"]], "Ensuring a component has a given parent": [[39, "ensuring-a-component-has-a-given-parent"]], "Ensuring a component has a given ancestor": [[39, "ensuring-a-component-has-a-given-ancestor"]], "Component Keys": [[39, "component-keys"]], "Querying child components": [[39, "querying-child-components"]], "Querying components at a specific point on the screen": [[39, "querying-components-at-a-specific-point-on-the-screen"]], "PositionType": [[39, "positiontype"]], "Visibility of components": [[39, "visibility-of-components"]], "PositionComponent": [[39, "positioncomponent"], [115, "positioncomponent"], [64, "positioncomponent"]], "Position": [[39, "position"]], "Size": [[39, "size"], [60, "size"]], "Scale": [[39, "scale"]], "Angle": [[39, "angle"]], "Native Angle": [[39, "native-angle"]], "Anchor": [[39, "anchor"]], "PositionComponent children": [[39, "positioncomponent-children"]], "Render PositionComponent": [[39, "render-positioncomponent"]], "SpriteComponent": [[39, "spritecomponent"], [115, "spritecomponent"]], "SpriteAnimationComponent": [[39, "spriteanimationcomponent"]], "SpriteAnimationGroupComponent": [[39, "spriteanimationgroupcomponent"]], "SpriteGroupComponent": [[39, "spritegroupcomponent"]], "SpawnComponent": [[39, "spawncomponent"]], "SvgComponent": [[39, "svgcomponent"]], "ParallaxComponent": [[39, "parallaxcomponent"]], "ShapeComponents": [[39, "shapecomponents"]], "PolygonComponent": [[39, "polygoncomponent"]], "RectangleComponent": [[39, "rectanglecomponent"]], "CircleComponent": [[39, "circlecomponent"]], "IsometricTileMapComponent": [[39, "isometrictilemapcomponent"]], "NineTileBoxComponent": [[39, "ninetileboxcomponent"]], "CustomPainterComponent": [[39, "custompaintercomponent"]], "ComponentsNotifier": [[39, "componentsnotifier"]], "ClipComponent": [[39, "clipcomponent"]], "Effects": [[39, "effects"], [44, "effects"]], "When not using FlameGame": [[39, "when-not-using-flamegame"]], "SizeComponent": [[115, "sizecomponent"]], "AnchorComponent": [[115, "anchorcomponent"]], "AngleComponent": [[115, "anglecomponent"]], "FlipComponent": [[115, "flipcomponent"]], "TextComponent": [[115, "textcomponent"], [70, "textcomponent"]], "ParticleComponent": [[115, "particlecomponent"]], "Contribution Guidelines": [[32, "contribution-guidelines"]], "Contribution types": [[32, "contribution-types"]], "Bug Reports": [[32, "bug-reports"]], "Bug Fix": [[32, "bug-fix"]], "New Features": [[32, "new-features"]], "Documentation & Miscellaneous": [[32, "documentation-miscellaneous"]], "How To Contribute": [[32, "how-to-contribute"]], "Requirements": [[32, "requirements"]], "Open an issue and fork the repository": [[32, "open-an-issue-and-fork-the-repository"]], "Environment Setup": [[32, "environment-setup"]], "CSpell": [[32, "cspell"]], "Markdown Lint": [[32, "markdown-lint"]], "Performing changes": [[32, "performing-changes"]], "Breaking changes": [[32, "breaking-changes"]], "Open a pull request": [[32, "open-a-pull-request"]], "Maintainers": [[32, "maintainers"]], "Merging a pull request": [[32, "merging-a-pull-request"]], "Creating a release": [[32, "creating-a-release"]], "Debug features": [[58, "debug-features"]], "FlameGame features": [[58, "flamegame-features"]], "Devtools extension": [[58, "devtools-extension"]], "FPS": [[58, "fps"]], "FpsComponent": [[58, "fpscomponent"]], "FpsTextComponent": [[58, "fpstextcomponent"]], "ChildCounterComponent": [[58, "childcountercomponent"]], "TimeTrackComponent": [[58, "timetrackcomponent"]], "<>": [[77, "declare"]], "Syntax": [[77, "syntax"], [96, "syntax"]], "Decorators": [[64, "decorators"]], "Flame built-in decorators": [[64, "flame-built-in-decorators"]], "PaintDecorator.blur": [[64, "paintdecorator-blur"]], "PaintDecorator.grayscale": [[64, "paintdecorator-grayscale"]], "PaintDecorator.tint": [[64, "paintdecorator-tint"]], "Rotate3DDecorator": [[64, "rotate3ddecorator"]], "Shadow3DDecorator": [[64, "shadow3ddecorator"]], "Using decorators": [[64, "using-decorators"]], "HasDecorator mixin": [[64, "hasdecorator-mixin"]], "Multiple decorators": [[64, "multiple-decorators"]], "Development": [[33, "development"]], "DialogueChoice": [[102, "dialoguechoice"]], "DialogueLine": [[103, "dialogueline"]], "DialogueOption": [[104, "dialogueoption"]], "DialogueRunner": [[105, "dialoguerunner"]], "Execution model": [[105, "execution-model"]], "DialogueView": [[106, "dialogueview"]], "Documentation Site": [[34, "documentation-site"]], "Markdown": [[34, "markdown"]], "Table of contents": [[34, "table-of-contents"]], "Admonitions": [[34, "admonitions"]], "Deprecations": [[34, "deprecations"]], "Live examples": [[34, "live-examples"]], "Standardization and Templates": [[34, "standardization-and-templates"]], "Building documentation locally": [[34, "building-documentation-locally"]], "Drag Events": [[48, "drag-events"]], "Demo": [[48, "demo"], [54, "demo"], [55, "demo"]], "Drag anatomy": [[48, "drag-anatomy"]], "onDragStart": [[48, "ondragstart"]], "onDragUpdate": [[48, "ondragupdate"]], "onDragEnd": [[48, "ondragend"]], "onDragCancel": [[48, "ondragcancel"]], "DragCallbacks": [[48, "dragcallbacks"]], "Overview": [[44, "overview"]], "Built-in effects": [[44, "built-in-effects"]], "Effect": [[44, "effect"]], "MoveByEffect": [[44, "movebyeffect"]], "MoveToEffect": [[44, "movetoeffect"]], "MoveAlongPathEffect": [[44, "movealongpatheffect"]], "RotateEffect.by": [[44, "rotateeffect-by"]], "RotateEffect.to": [[44, "rotateeffect-to"]], "ScaleEffect.by": [[44, "scaleeffect-by"]], "ScaleEffect.to": [[44, "scaleeffect-to"]], "SizeEffect.by": [[44, "sizeeffect-by"]], "SizeEffect.to": [[44, "sizeeffect-to"]], "AnchorByEffect": [[44, "anchorbyeffect"]], "AnchorToEffect": [[44, "anchortoeffect"]], "OpacityToEffect": [[44, "opacitytoeffect"]], "OpacityByEffect": [[44, "opacitybyeffect"]], "GlowEffect": [[44, "gloweffect"]], "SequenceEffect": [[44, "sequenceeffect"]], "RemoveEffect": [[44, "removeeffect"]], "ColorEffect": [[44, "coloreffect"]], "Creating new effects": [[44, "creating-new-effects"]], "Effect controllers": [[44, "effect-controllers"]], "EffectController": [[44, "effectcontroller"]], "LinearEffectController": [[44, "lineareffectcontroller"]], "ReverseLinearEffectController": [[44, "reverselineareffectcontroller"]], "CurvedEffectController": [[44, "curvedeffectcontroller"]], "ReverseCurvedEffectController": [[44, "reversecurvedeffectcontroller"]], "PauseEffectController": [[44, "pauseeffectcontroller"]], "RepeatedEffectController": [[44, "repeatedeffectcontroller"]], "InfiniteEffectController": [[44, "infiniteeffectcontroller"]], "SequenceEffectController": [[44, "sequenceeffectcontroller"]], "SpeedEffectController": [[44, "speedeffectcontroller"]], "DelayedEffectController": [[44, "delayedeffectcontroller"]], "NoiseEffectController": [[44, "noiseeffectcontroller"]], "RandomEffectController": [[44, "randomeffectcontroller"]], "SineEffectController": [[44, "sineeffectcontroller"]], "ZigzagEffectController": [[44, "zigzageffectcontroller"]], "Expressions": [[86, "expressions"]], "Flame fire atlas": [[9, "flame-fire-atlas"]], "FireAtlas": [[9, "fireatlas"]], "Creating Atlas": [[9, "creating-atlas"]], "Texture atlas": [[9, "texture-atlas"]], "Usage": [[9, "usage"], [16, "usage"], [25, "usage"], [15, "usage"], [23, "usage"]], "Flame": [[45, "flame"]], "flame_audio": [[5, "flame-audio"]], "flame_fire_atlas": [[10, "flame-fire-atlas"]], "flame_forge2d": [[11, "flame-forge2d"]], "flame_isolate": [[14, "flame-isolate"]], "flame_lottie": [[16, "flame-lottie"]], "FlameNetworkAssets": [[17, "flamenetworkassets"]], "flame_oxygen": [[18, "flame-oxygen"]], "flame_rive": [[19, "flame-rive"], [20, "flame-rive"]], "flame_riverpod": [[22, "flame-riverpod"], [23, "flame-riverpod"]], "flame_spine": [[25, "flame-spine"]], "flame_splash_screen": [[26, "flame-splash-screen"]], "flame_svg": [[27, "flame-svg"]], "flame_tiled": [[29, "flame-tiled"]], "TiledComponent": [[29, "tiledcomponent"]], "TileStack": [[29, "tilestack"]], "TileAtlas": [[29, "tileatlas"]], "Limitations": [[29, "limitations"]], "Flip": [[29, "flip"]], "Clearing images cache": [[29, "clearing-images-cache"]], "Troubleshooting": [[29, "troubleshooting"]], "My game shows \u201clines\u201d and artifacts between the map tiles": [[29, "my-game-shows-lines-and-artifacts-between-the-map-tiles"]], "Forge2D": [[12, "forge2d"]], "Forge2DGame": [[12, "forge2dgame"]], "BodyComponent": [[12, "bodycomponent"]], "Contact callbacks": [[12, "contact-callbacks"]], "FunctionStorage": [[107, "functionstorage"]], "Functions": [[87, "functions"]], "Built-in functions": [[87, "built-in-functions"]], "User-defined functions": [[87, "user-defined-functions"]], "FlameGame": [[46, "flamegame"]], "Game Loop": [[46, "game-loop"]], "Resizing": [[46, "resizing"]], "Lifecycle": [[46, "lifecycle"], [68, "lifecycle"]], "Debug mode": [[46, "debug-mode"]], "Change background color": [[46, "change-background-color"]], "SingleGameInstance mixin": [[46, "singlegameinstance-mixin"]], "Low-level Game API": [[46, "low-level-game-api"]], "Pause/Resuming/Stepping game execution": [[46, "pause-resuming-stepping-game-execution"]], "Backgrounding": [[46, "backgrounding"]], "HasPerformanceTracker mixin": [[46, "hasperformancetracker-mixin"]], "Game Widget": [[47, "game-widget"]], "Gesture Input": [[49, "gesture-input"]], "Intro": [[49, "intro"], [52, "intro"]], "Touch and mouse detectors": [[49, "touch-and-mouse-detectors"]], "PanDetector and ScaleDetector": [[49, "pandetector-and-scaledetector"]], "Mouse cursor": [[49, "mouse-cursor"]], "Event coordinate system": [[49, "event-coordinate-system"]], "global": [[49, "global"]], "widget": [[49, "widget"]], "Example": [[49, "example"], [78, "example"]], "GestureHitboxes": [[49, "gesturehitboxes"]], "HardwareKeyboardDetector": [[50, "hardwarekeyboarddetector"]], "<>": [[78, "if"]], "Images": [[65, "images"]], "Loading images": [[65, "loading-images"]], "Standalone usage": [[65, "standalone-usage"]], "Flame.images": [[65, "flame-images"]], "Game.images": [[65, "game-images"]], "Loading images over the network": [[65, "loading-images-over-the-network"]], "Sprite": [[65, "sprite"]], "SpriteBatch": [[65, "spritebatch"]], "ImageComposition": [[65, "imagecomposition"]], "Animation": [[65, "animation"]], "SpriteSheet": [[65, "spritesheet"]], "Inputs": [[51, "inputs"]], "FlameIsolate": [[15, "flameisolate"]], "Performance note": [[15, "performance-note"]], "Backpressure Strategies": [[15, "backpressure-strategies"]], "Jenny": [[74, "jenny"]], "Writing dialogue": [[74, "writing-dialogue"]], "Using the dialogue in a game": [[74, "using-the-dialogue-in-a-game"]], "Jenny Runtime": [[108, "jenny-runtime"]], "Joints": [[13, "joints"]], "Built-in joints": [[13, "built-in-joints"]], "ConstantVolumeJoint": [[13, "constantvolumejoint"]], "DistanceJoint": [[13, "distancejoint"]], "FrictionJoint": [[13, "frictionjoint"]], "GearJoint": [[13, "gearjoint"]], "MotorJoint": [[13, "motorjoint"]], "MouseJoint": [[13, "mousejoint"]], "PrismaticJoint": [[13, "prismaticjoint"]], "Prismatic Joint Limit": [[13, "prismatic-joint-limit"]], "Prismatic Joint Motor": [[13, "prismatic-joint-motor"]], "PulleyJoint": [[13, "pulleyjoint"]], "RevoluteJoint": [[13, "revolutejoint"]], "Revolute Joint Limit": [[13, "revolute-joint-limit"]], "Revolute Joint Motor": [[13, "revolute-joint-motor"]], "RopeJoint": [[13, "ropejoint"]], "WeldJoint": [[13, "weldjoint"]], "Breakable Bodies and WeldJoint": [[13, "breakable-bodies-and-weldjoint"]], "<>": [[79, "jump"]], "Keyboard Input": [[52, "keyboard-input"]], "Receive keyboard events in a game level": [[52, "receive-keyboard-events-in-a-game-level"]], "Receive keyboard events in a component level": [[52, "receive-keyboard-events-in-a-component-level"]], "Controlling focus": [[52, "controlling-focus"]], "Klondike game tutorial": [[119, "klondike-game-tutorial"]], "YarnSpinner language": [[94, "yarnspinner-language"]], "Yarn files": [[94, "yarn-files"]], "Comments": [[94, "comments"]], "Tags": [[94, "tags"]], "Nodes": [[94, "nodes"], [97, "nodes"]], "Layers": [[30, "layers"], [66, "layers"]], "Layer properties": [[30, "layer-properties"]], "Tiles properties": [[30, "tiles-properties"]], "Other features": [[30, "other-features"]], "Layers and Snapshots": [[66, "layers-and-snapshots"]], "DynamicLayer": [[66, "dynamiclayer"]], "PreRenderedLayer": [[66, "prerenderedlayer"]], "Layer Processors": [[66, "layer-processors"]], "Snapshots": [[66, "snapshots"]], "Render as a snapshot": [[66, "render-as-a-snapshot"]], "Regenerating a snapshot": [[66, "regenerating-a-snapshot"]], "Taking a snapshot": [[66, "taking-a-snapshot"]], "Snapshots that are cropped or off-center": [[66, "snapshots-that-are-cropped-or-off-center"]], "Layout": [[57, "layout"]], "Lines": [[95, "lines"]], "Character ID": [[95, "character-id"]], "Interpolated expressions": [[95, "interpolated-expressions"]], "Markup": [[95, "markup"], [96, "markup"]], "Hashtags": [[95, "hashtags"]], "Escaped text": [[95, "escaped-text"]], "<>": [[80, "local"]], "Mark a piece of text with a different style": [[96, "mark-a-piece-of-text-with-a-different-style"]], "Provide additional information about a text fragment": [[96, "provide-additional-information-about-a-text-fragment"]], "Indicate where special non-text tokens may be inserted": [[96, "indicate-where-special-non-text-tokens-may-be-inserted"]], "MarkupAttribute": [[109, "markupattribute"]], "Miscellaneous functions": [[88, "miscellaneous-functions"]], "if(condition, then, else)": [[88, "if-condition-then-else"]], "plural(x, words\u2026)": [[88, "plural-x-words"]], "visit_count(node)": [[88, "visit-count-node"]], "visited(node)": [[88, "visited-node"]], "Node": [[110, "node"]], "Header": [[97, "header"]], "Body": [[97, "body"]], "Numeric functions": [[89, "numeric-functions"]], "ceil(x)": [[89, "ceil-x"]], "dec(x)": [[89, "dec-x"]], "decimal(x)": [[89, "decimal-x"]], "floor(x)": [[89, "floor-x"]], "inc(x)": [[89, "inc-x"]], "int(x)": [[89, "int-x"]], "round(x)": [[89, "round-x"]], "round_places(x, n)": [[89, "round-places-x-n"]], "Operators": [[92, "operators"]], "Operator types": [[92, "operator-types"]], "Arithmetic": [[92, "arithmetic"]], "Logical": [[92, "logical"]], "Assignment": [[92, "assignment"]], "Relational": [[92, "relational"]], "Precedence": [[92, "precedence"]], "Options": [[98, "options"]], "Other": [[59, "other"]], "Other Inputs and Helpers": [[53, "other-inputs-and-helpers"]], "Joystick": [[53, "joystick"]], "HudButtonComponent": [[53, "hudbuttoncomponent"]], "SpriteButtonComponent": [[53, "spritebuttoncomponent"]], "ButtonComponent": [[53, "buttoncomponent"]], "Gamepad": [[53, "gamepad"]], "AdvancedButtonComponent": [[53, "advancedbuttoncomponent"]], "ToggleButtonComponent": [[53, "togglebuttoncomponent"]], "IgnoreEvents mixin": [[53, "ignoreevents-mixin"]], "Other Modules": [[114, "other-modules"]], "Overlays": [[62, "overlays"]], "Oxygen": [[116, "oxygen"]], "OxygenGame (Game extension)": [[116, "oxygengame-game-extension"]], "Systems": [[116, "systems"]], "mixin GameRef": [[116, "mixin-gameref"]], "mixin RenderSystem": [[116, "mixin-rendersystem"]], "mixin UpdateSystem": [[116, "mixin-updatesystem"]], "BaseSystem": [[116, "basesystem"]], "ParticleSystem": [[116, "particlesystem"]], "Palette": [[67, "palette"]], "Particles": [[68, "particles"]], "Built-in particles": [[68, "built-in-particles"]], "TranslatedParticle": [[68, "translatedparticle"]], "MovingParticle": [[68, "movingparticle"]], "AcceleratedParticle": [[68, "acceleratedparticle"]], "CircleParticle": [[68, "circleparticle"]], "SpriteParticle": [[68, "spriteparticle"]], "ImageParticle": [[68, "imageparticle"]], "ScalingParticle": [[68, "scalingparticle"]], "SpriteAnimationParticle": [[68, "spriteanimationparticle"]], "ComponentParticle": [[68, "componentparticle"]], "ComputedParticle": [[68, "computedparticle"]], "Nesting behavior": [[68, "nesting-behavior"]], "Ember Quest Game Tutorial": [[125, "ember-quest-game-tutorial"]], "Supported Platforms": [[63, "supported-platforms"]], "Flutter channels": [[63, "flutter-channels"]], "Flame web": [[63, "flame-web"]], "Deploy your game to GitHub Pages": [[63, "deploy-your-game-to-github-pages"]], "Deploy your game to itch.io": [[63, "deploy-your-game-to-itch-io"]], "Web support": [[63, "web-support"]], "Pointer Events": [[54, "pointer-events"]], "HoverCallbacks": [[54, "hovercallbacks"]], "Random functions": [[90, "random-functions"]], "dice(n)": [[90, "dice-n"]], "random()": [[90, "random"]], "random_range(a, b)": [[90, "random-range-a-b"]], "Rendering": [[69, "rendering"], [122, "rendering"]], "Resources": [[117, "resources"]], "How to use it": [[20, "how-to-use-it"]], "Riverpod": [[23, "riverpod"]], "RouterComponent": [[71, "routercomponent"]], "Route": [[71, "route"]], "OverlayRoute": [[71, "overlayroute"]], "ValueRoute": [[71, "valueroute"]], "<>": [[81, "set"]], "Space Shooter Game Tutorial": [[133, "space-shooter-game-tutorial"]], "1. Preparation": [[120, "preparation"], [126, "preparation"]], "Planning": [[120, "planning"], [126, "planning"]], "Assets": [[120, "assets"], [126, "assets"]], "2. Scaffolding": [[121, "scaffolding"]], "KlondikeGame": [[121, "klondikegame"]], "Other classes": [[121, "other-classes"]], "Game structure": [[121, "game-structure"]], "3. Cards": [[122, "cards"]], "Suit": [[122, "suit"]], "Rank": [[122, "rank"]], "Card component": [[122, "card-component"]], "renderBack()": [[122, "renderback"]], "renderFront()": [[122, "renderfront"]], "4. Gameplay": [[123, "gameplay"]], "The piles": [[123, "the-piles"]], "Stock pile": [[123, "stock-pile"]], "Waste pile": [[123, "waste-pile"]], "Stock pile \u2013 tap to deal cards": [[123, "stock-pile-tap-to-deal-cards"]], "Stock pile \u2013 visual representation": [[123, "stock-pile-visual-representation"]], "Stock pile \u2013 refill from the waste": [[123, "stock-pile-refill-from-the-waste"]], "Foundation piles": [[123, "foundation-piles"]], "Tableau Piles": [[123, "tableau-piles"]], "Moving the cards": [[123, "moving-the-cards"]], "1. Simple movement": [[123, "simple-movement"]], "2. Move only allowed cards": [[123, "move-only-allowed-cards"]], "3. Dropping the cards at proper locations": [[123, "dropping-the-cards-at-proper-locations"]], "4. Moving a run of cards": [[123, "moving-a-run-of-cards"]], "5. Animations, restarting, buttons and a New World": [[124, "animations-restarting-buttons-and-a-new-world"]], "The Klondike draw": [[124, "the-klondike-draw"]], "Making cards move": [[124, "making-cards-move"]], "Animating a card-flip": [[124, "animating-a-card-flip"]], "Model and View": [[124, "model-and-view"]], "Ending and restarting the game": [[124, "ending-and-restarting-the-game"]], "A New World": [[124, "a-new-world"]], "Start and restart actions": [[124, "start-and-restart-actions"]], "A stripped-down KlondikeGame class": [[124, "a-stripped-down-klondikegame-class"]], "Using a Random Number Generator seed": [[124, "using-a-random-number-generator-seed"]], "Introducing the new KlondikeWorld class": [[124, "introducing-the-new-klondikeworld-class"]], "Buttons": [[124, "buttons"]], "Anchors and co-ordinates": [[124, "anchors-and-co-ordinates"]], "The deal() method": [[124, "the-deal-method"]], "More animations of moves": [[124, "more-animations-of-moves"]], "A graphics glitch": [[124, "a-graphics-glitch"]], "Winning the game": [[124, "winning-the-game"]], "Ending a game and re-starting it": [[124, "ending-a-game-and-re-starting-it"]], "The Have fun button": [[124, "the-have-fun-button"]], "2. Start Coding": [[127, "start-coding"]], "The Plan": [[127, "the-plan"]], "Loading Assets": [[127, "loading-assets"]], "Scaffolding": [[127, "scaffolding"]], "CameraComponent and World": [[127, "cameracomponent-and-world"]], "Ember Time": [[127, "ember-time"]], "Building Blocks": [[127, "building-blocks"]], "Controlling the player and adding some graphics": [[135, "controlling-the-player-and-adding-some-graphics"]], "3. Building the World": [[128, "building-the-world"]], "Creating Segments": [[128, "creating-segments"]], "Segment Manager": [[128, "segment-manager"]], "Loading the Segments into the World": [[128, "loading-the-segments-into-the-world"]], "The Platform Block": [[128, "the-platform-block"]], "Display the Platform": [[128, "display-the-platform"]], "Adding animations and depth": [[136, "adding-animations-and-depth"]], "4. Adding the Remaining Components": [[129, "adding-the-remaining-components"]], "Star": [[129, "star"]], "Water Enemy": [[129, "water-enemy"]], "Ground Blocks": [[129, "ground-blocks"]], "Loading the Next Random Segment": [[129, "loading-the-next-random-segment"]], "Adding bullets": [[137, "adding-bullets"]], "5. Controlling Movement": [[130, "controlling-movement"]], "Keyboard Controls": [[130, "keyboard-controls"]], "Collisions": [[130, "collisions"]], "Collisions with Objects": [[130, "collisions-with-objects"]], "Adding the Scrolling": [[130, "adding-the-scrolling"]], "Adding Enemies": [[138, "adding-enemies"]], "6. Adding the HUD": [[131, "adding-the-hud"]], "Setting up the HUD": [[131, "setting-up-the-hud"]], "Updating the HUD Data": [[131, "updating-the-hud-data"]], "Enemies and Bullets collision": [[139, "enemies-and-bullets-collision"]], "7. Adding Menus": [[132, "adding-menus"]], "Main Menu": [[132, "main-menu"]], "Game Over Menu": [[132, "game-over-menu"]], "Displaying the Menus": [[132, "displaying-the-menus"]], "Health Check for Game Over": [[132, "health-check-for-game-over"]], "Congratulations": [[132, "congratulations"]], "<>": [[82, "stop"]], "Structure": [[72, "structure"]], "Flame Style Guide": [[35, "flame-style-guide"]], "Code Formatting": [[35, "code-formatting"]], "Code Structure": [[35, "code-structure"]], "Imports": [[35, "imports"]], "Exports": [[35, "exports"]], "Assertions": [[35, "assertions"]], "Class structure": [[35, "class-structure"]], "Documentation": [[35, "documentation"]], "Dartdocs": [[35, "dartdocs"]], "Main docs": [[35, "main-docs"]], "Flame SVG": [[28, "flame-svg"]], "How to use flame_svg": [[28, "how-to-use-flame-svg"]], "Tap Events": [[55, "tap-events"]], "Tap anatomy": [[55, "tap-anatomy"]], "onTapDown": [[55, "ontapdown"]], "onLongTapDown": [[55, "onlongtapdown"]], "onTapUp": [[55, "ontapup"]], "onTapCancel": [[55, "ontapcancel"]], "TapCallbacks": [[55, "tapcallbacks"]], "DoubleTapCallbacks": [[55, "doubletapcallbacks"]], "Migration": [[55, "migration"]], "Writing tests": [[36, "writing-tests"]], "Types of tests": [[36, "types-of-tests"]], "Simple tests": [[36, "simple-tests"]], "FlameGame tests": [[36, "flamegame-tests"]], "Widget tests": [[36, "widget-tests"]], "Golden tests": [[36, "golden-tests"]], "Random tests": [[36, "random-tests"]], "Text Rendering": [[70, "text-rendering"]], "Text Components": [[70, "text-components"]], "TextBoxComponent": [[70, "textboxcomponent"]], "ScrollTextBoxComponent": [[70, "scrolltextboxcomponent"]], "TextElementComponent": [[70, "textelementcomponent"]], "Flame Markdown": [[70, "flame-markdown"]], "Infrastructure": [[70, "infrastructure"]], "TextRenderer": [[70, "textrenderer"]], "TextPaint": [[70, "textpaint"]], "SpriteFontRenderer": [[70, "spritefontrenderer"]], "DebugTextRenderer": [[70, "debugtextrenderer"]], "Inline Text Elements": [[70, "inline-text-elements"]], "Text Elements, Text Nodes, and Text Styles": [[70, "text-elements-text-nodes-and-text-styles"]], "Text Nodes and the Document Root": [[70, "text-nodes-and-the-document-root"]], "(Flame) Text Styles": [[70, "flame-text-styles"]], "Text Elements": [[70, "text-elements"]], "Tiled": [[31, "tiled"]], "Tiled Editor": [[31, "tiled-editor"]], "Tutorials": [[140, "tutorials"]], "Type conversion functions": [[91, "type-conversion-functions"]], "bool(x)": [[91, "bool-x"]], "number(x)": [[91, "number-x"]], "string(x)": [[91, "string-x"]], "UserDefinedCommand": [[111, "userdefinedcommand"]], "User-defined commands": [[83, "user-defined-commands"]], "Util": [[60, "util"]], "Device Class": [[60, "device-class"]], "Flame.device.fullScreen()": [[60, "flame-device-fullscreen"]], "Flame.device.setLandscape()": [[60, "flame-device-setlandscape"]], "Flame.device.setPortrait()": [[60, "flame-device-setportrait"]], "Flame.device.setOrientation() and Flame.device.setOrientations()": [[60, "flame-device-setorientation-and-flame-device-setorientations"]], "Timer": [[60, "timer"]], "Time Scale": [[60, "time-scale"]], "Extensions": [[60, "extensions"]], "Canvas": [[60, "canvas"]], "Color": [[60, "color"]], "Image": [[60, "image"]], "Offset": [[60, "offset"]], "Rect": [[60, "rect"]], "math.Rectangle": [[60, "math-rectangle"]], "Vector2": [[60, "vector2"]], "Matrix4": [[60, "matrix4"]], "VariableStorage": [[112, "variablestorage"]], "Accessing variable storage": [[112, "accessing-variable-storage"]], "Removing variables": [[112, "removing-variables"]], "Name": [[93, "name"]], "Type": [[93, "type"]], "Value": [[93, "value"]], "Scope": [[93, "scope"]], "<>": [[84, "visit"]], "<>": [[85, "wait"]], "Widget": [[24, "widget"]], "RiverpodAwareGameWidget": [[24, "riverpodawaregamewidget"]], "RiverpodAwareGameWidgetState": [[24, "riverpodawaregamewidgetstate"]], "Widgets": [[61, "widgets"]], "NineTileBoxWidget": [[61, "ninetileboxwidget"]], "SpriteButton": [[61, "spritebutton"]], "SpriteWidget": [[61, "spritewidget"]], "SpriteAnimationWidget": [[61, "spriteanimationwidget"]], "Yarn Project": [[113, "yarn-project"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/docs/1.18.0/tutorials/bare_flame_game.html b/docs/1.18.0/tutorials/bare_flame_game.html new file mode 100644 index 000000000..3aeaa245b --- /dev/null +++ b/docs/1.18.0/tutorials/bare_flame_game.html @@ -0,0 +1,524 @@ + + + + + + + Bare Flame game — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Bare Flame game

    +

    This tutorial assumes that you have basic familiarity with using the command line, and the following +programs on your computer (all of them are free):

    + +
    +

    1. Check flutter installation

    +

    First, let’s verify that your Flutter SDK was installed correctly and is accessible from the command +line:

    +
    $ flutter doctor
    +Doctor summary (to see all details, run flutter doctor -v):
    +[] Flutter (Channel stable, 3.13.7, on macOS 13.6 22G120 darwin-arm64, locale en)
    +[] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    +[] Xcode - develop for iOS and macOS (Xcode 15.0)
    +[] Chrome - develop for the web
    +[] Android Studio (version 2021.2)
    +[] IntelliJ IDEA Community Edition (version 2022.2.2)
    +[] VS Code (version 1.83.0)
    +[] Connected device (2 available)
    +[] Network resources
    +
    +• No issues found!
    +
    +
    +

    Your output will be slightly different, but the important thing is to verify that no errors are +reported and that your Flutter version is at least 3.13.0.

    +
    +
    +

    2. Create the Project Directory

    +

    Now you need to come up with a name for your project. The name can only use lowercase Latin letters, +digits, and underscores. It must also be a valid Dart identifier (thus, for example, it cannot be a +keyword). In this tutorial, we’re going to call the project syzygy, which is a totally real +non-made-up word.

    +

    Create the directory for your new project:

    +
    mkdir -p ~/projects/syzygy
    +cd ~/projects/syzygy
    +
    +
    +
    +
    +

    3. Initialize empty Flutter project

    +

    To turn this barren directory into an actual Flutter project, run the following command:

    +
    flutter create .
    +
    +
    +

    (I have omitted the output for brevity, but there will be lots of output).

    +

    You can verify that the project files were created successfully:

    +
    $ ls
    +README.md               android/   lib/           pubspec.yaml   test/
    +analysis_options.yaml   ios/       pubspec.lock   syzygy.iml     web/
    +
    +
    +
    +
    +

    4. Open the project in Android Studio

    +

    Launch Android Studio, then in the project selection window choose [Open] and navigate to your +project directory. With any luck, the project will now look like this:

    +

    Project in Android Studio

    +

    If you see only the main.dart file but not the side panel, then click the vertical [Project] +button at the left edge of the window.

    +

    Before we proceed, let’s fix the view in the left panel. Locate the button in the top left corner +that says [Android] in the screenshot. In this dropdown select the first option “Project”. Your +project window should now look like this:

    +

    Project in Android Studio

    +

    The important part is that you should be able to see all files in your project directory.

    +
    +
    +

    5. Clean up the project files

    +

    The default project created by Flutter is not very useful for making a Flame game, so we should get +rid of it.

    +

    First, open the file pubspec.yaml and replace it with the following code (adjusting the name and +description to match your project):

    +
    name: syzygy
    +description: Syzygy Flame game
    +version: 0.0.0
    +publish_to: none
    +
    +environment:
    +  sdk: ^3.0.0
    +  flutter: ^3.13.0
    +
    +dependencies:
    +  flutter:
    +    sdk: flutter
    +  flame: ^1.18.0
    +
    +
    +

    After that, press the [Pub get] button at the top of the window, or you could run command flutter pub get from the terminal. This will “apply” the changes in pubspec file to your project, in +particular, it will download the Flame library which we have declared as a dependency. In the +future, you should run flutter pub get whenever you make changes to this file.

    +

    Now, open the file lib/main.dart and replace its content with the following:

    +
    import 'package:flame/game.dart';
    +import 'package:flutter/widgets.dart';
    +
    +void main() {
    +  final game = FlameGame();
    +  runApp(GameWidget(game: game));
    +}
    +
    +
    +

    Lastly, remove the file test/widget_test.dart completely.

    +
    +
    +

    6. Run the project

    +

    Let’s verify that everything is working as intended, and the project can run.

    +

    In the menu bar at the top of the window find a dropdown that says <no device selected>. In that +dropdown choose <Chrome (web)> instead.

    +

    After that open the main.dart file and press the green arrow next to the void main() function in +line 4. Select [Run main.dart] from the menu.

    +

    This should open a new Chrome window (which may take 10-30 seconds) and run your project in that +window. For now, it will simply show a black screen, which is expected because we created the game +in its simplest blank configuration.

    +
    +
    +

    7. Sync to GitHub

    +

    The last step is to upload your project to GitHub. This is not required but strongly recommended as +it will serve as a backup for your code. This step assumes that you already have a GitHub account.

    +

    Log into your GitHub account, select [Your repositories] from your profile dropdown, and press the +green [New] button. In the form, enter the repository name the same as your project name; select +type “private”; and opt out of adding initial files like README, license, and .gitignore.

    +

    Now go to your project’s directory in the terminal and execute the following commands (make sure to +replace the URL with the link to the repository that you just created):

    +
    git init
    +git add --all
    +git commit -m 'Initial commit'
    +git remote add origin https://github.com/your-github-username/syzygy.git
    +git branch -M main
    +git push -u origin main
    +
    +
    +

    At this point, if you go to your repository page on GitHub, you shall see that all your project +files are there.

    +
    +
    +

    8. Done

    +

    That’s it! By this point you have

    +
      +
    • Created an initial blank state Flame project;

    • +
    • Set up the Android Studio IDE for that project;

    • +
    • Created a GitHub repository for the project.

    • +
    +

    Happy coding!

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/klondike/klondike.html b/docs/1.18.0/tutorials/klondike/klondike.html new file mode 100644 index 000000000..e5024a30a --- /dev/null +++ b/docs/1.18.0/tutorials/klondike/klondike.html @@ -0,0 +1,377 @@ + + + + + + + Klondike game tutorial — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Klondike game tutorial

    +

    Klondike is a popular solitaire card game. In this tutorial we will follow the step-by-step +process for coding this game using the Flame engine.

    +

    This tutorial assumes that you have at least some familiarity with common programming concepts, and +with the Dart programming language.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/klondike/step1.html b/docs/1.18.0/tutorials/klondike/step1.html new file mode 100644 index 000000000..fef1082f9 --- /dev/null +++ b/docs/1.18.0/tutorials/klondike/step1.html @@ -0,0 +1,467 @@ + + + + + + + 1. Preparation — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    1. Preparation

    +

    Before you begin any kind of game project, you need to give it a name. For +this tutorial the name will be simply klondike.

    +

    Having this name in mind, please head over to the tutorial +and complete the necessary set up steps. When you come back, you should +already have the main.dart file with the following content:

    +
    import 'package:flame/game.dart';
    +import 'package:flutter/widgets.dart';
    +
    +void main() {
    +  final game = FlameGame();
    +  runApp(GameWidget(game: game));
    +}
    +
    +
    +
    +

    Planning

    +

    The start of any project usually feels overwhelming. Where even to begin? +I always find it useful to create a rough sketch of what I am about to code, +so that it can serve as a reference point. My sketch for the Klondike game is +shown below:

    +

    Sketch of the klondike card game

    +

    Here you can see both the general layout of the game, as well as names of +various objects. These names are the standard terminology for solitaire games. +Which is really lucky, because normally figuring out good names for various +classes is quite a challenging task.

    +

    Looking at this sketch, we can already imagine the high-level structure of the +game. Obviously, there will be a Card class, but also the Stock class, the +Waste class, a Tableau containing seven Piles, and 4 Foundations. There +may also be a Deck. All of these components will be tied together via the +KlondikeGame derived from the FlameGame.

    +
    +
    +

    Assets

    +

    Another important aspect in any game development is the game’s assets. These +includes images, sprites, animations, sounds, textures, data files, and so on. +In such a simple game as Klondike we won’t need lots of fancy graphics, but +still some sprites will be needed in order to draw the cards.

    +

    In order to prepare the graphic assets, I first took a physical playing card and +measured it to be 63mm × 88mm, which is the ratio of approximately 10:14. +Thus, I decided that my in-game cards should be rendered at 1000×1400 pixels, +and I should draw all my images with this scale in mind.

    +

    Note that the exact pixel dimensions are somewhat irrelevant here, since the +images will in the end be scaled up or down, according to the device’s actual +resolution. Here I’m using probably a bigger resolution than necessary for +phones, but it would also work nicely for larger devices like an iPad.

    +

    And now, without further ado, here’s my graphic asset for the Klondike game +(I’m not an artist, so don’t judge too harshly):

    +

    Klondike sprites

    +

    Right-click the image, choose “Save as…”, and store it in the assets/images +folder of the project. At this point our project’s structure looks like this +(there are other files too, of course, but these are the important ones):

    +
    klondike/
    + ├─assets/
    + │  └─images/
    + │     └─klondike-sprites.png
    + ├─lib/
    + │  └─main.dart
    + └─pubspec.yaml
    +
    +
    +

    By the way, this kind of file is called the sprite sheet: it’s just a +collection of multiple independent images in a single file. We are using a +sprite sheet here for the simple reason that loading a single large image is +faster than many small images. In addition, rendering sprites that were +extracted from a single source image can be faster too, since Flutter will +optimize multiple such drawing commands into a single drawAtlas command.

    +

    Here are the contents of my sprite sheet:

    +
      +
    • Numerals 2, 3, 4, …, K, A. In theory, we could have rendered these in the +game as text strings, but then we would need to also include a font as an +asset – seems simpler to just have them as images instead.

    • +
    • Suit marks: ♥, ♦, ♣, ♠. Again, we could have used Unicode characters for +these, but images are much easier to position precisely.

      +
        +
      • In case you’re wondering why these are yellow/blue instead of red/black +– turns out, black symbols don’t look very nice on a dark background, +so I had to adjust the color scheme.

      • +
      +
    • +
    • Flame logo, for use on the backs of the cards.

    • +
    • Pictures of a Jack, a Queen, and a King. Normally there would be four times +more of these, with a different character for each suite, but I got too +tired drawing these.

    • +
    +

    Also, you need to tell Flutter about this image (just having it inside the +assets folder is not enough). In order to do this, let’s add the following +lines into the pubspec.yaml file:

    +
    flutter:
    +  assets:
    +    - assets/images/
    +
    +
    +

    Alright, enough with preparing – onward to coding!

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/klondike/step2.html b/docs/1.18.0/tutorials/klondike/step2.html new file mode 100644 index 000000000..bd1c335c5 --- /dev/null +++ b/docs/1.18.0/tutorials/klondike/step2.html @@ -0,0 +1,746 @@ + + + + + + + 2. Scaffolding — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    2. Scaffolding

    +

    In this section we will use broad strokes to outline the main elements of the +game. This includes the main game class, and the general layout.

    +
    +

    KlondikeGame

    +

    In Flame universe, the FlameGame class is the cornerstone of most games. +This class runs the game loop, dispatches events, owns all the components that +comprise the game (the component tree), and usually also serves as the central +repository for the game’s state.

    +

    So, create a new file called klondike_game.dart inside the lib/ folder, and +declare the KlondikeGame class inside:

    +
    import 'package:flame/game.dart';
    +import 'package:flame/flame.dart';
    +
    +class KlondikeGame extends FlameGame {
    +  @override
    +  Future<void> onLoad() async {
    +    await Flame.images.load('klondike-sprites.png');
    +  }
    +}
    +
    +
    +

    For now we only declared the onLoad method, which is a special handler that +is called when the game instance is attached to the Flutter widget tree for the +first time. You can think of it as a delayed asynchronous constructor. +Currently, the only thing that onLoad does is that it loads the sprites image +into the game; but we will be adding more soon. Any image or other resource that +you want to use in the game needs to be loaded first, which is a relatively slow +I/O operation, hence the need for await keyword.

    +

    I am loading the image into the global Flame.images cache here. An alternative +approach is to load it into the Game.images cache instead, but then it would +have been more difficult to access that image from other classes.

    +

    Also note that I am awaiting the image to finish loading before initializing +anything else in the game. This is for convenience: it means that by the time +all other components are initialized, they can assume the sprite sheet is already +loaded. We can even add a helper function to extract a sprite from the common +sprite sheet:

    +
    Sprite klondikeSprite(double x, double y, double width, double height) {
    +  return Sprite(
    +    Flame.images.fromCache('klondike-sprites.png'),
    +    srcPosition: Vector2(x, y),
    +    srcSize: Vector2(width, height),
    +  );
    +}
    +
    +
    +

    This helper function won’t be needed in this chapter, but will be used +extensively in the next.

    +

    Let’s incorporate this class into the project so that it isn’t orphaned. Open +the main.dart find the line which says final game = FlameGame(); and replace +the FlameGame with KlondikeGame. You will need to import the class too. +After all is done, the file should look like this:

    +
    import 'package:flame/game.dart';
    +import 'package:flutter/widgets.dart';
    +import 'klondike_game.dart';
    +
    +void main() {
    +  final game = KlondikeGame();
    +  runApp(GameWidget(game: game));
    +}
    +
    +
    +
    +
    +

    Other classes

    +

    So far we have the main KlondikeGame class, and now we need to create objects +that we will add to the game. In Flame these objects are called components, +and when added to the game they form a “game component tree”. All entities that +exist in the game must be components.

    +

    As we already mentioned in the previous chapter, our game mainly consists of +Card components. However, since drawing the cards will take some effort, we +will defer implementation of that class to the next chapter.

    +

    For now, let’s create the container classes, as shown on the sketch. These are: +Stock, Waste, Pile and Foundation. Inside the lib/ folder create a +sub-directory components, and then the file lib/components/stock.dart. In that +file write

    +
    import 'package:flame/components.dart';
    +
    +class Stock extends PositionComponent {
    +  @override
    +  bool get debugMode => true;
    +}
    +
    +
    +

    Here we declare the Stock class as a PositionComponent (which is a component +that has a position and size). We also turn on the debug mode for this class so +that we can see it on the screen even though we don’t have any rendering logic +yet.

    +

    Likewise, create three more classes Foundation, Pile and Waste, each in +its corresponding file. For now all four classes will have exactly the same +logic inside, we’ll be adding more functionality into those classes in +subsequent chapters.

    +

    At this moment the directory structure of your game should look like this:

    +
    klondike/
    + ├─assets/
    + │  └─images/
    + │     └─klondike-sprites.png
    + ├─lib/
    + │  ├─components/
    + │  │  ├─foundation.dart
    + │  │  ├─pile.dart
    + │  │  ├─stock.dart
    + │  │  └─waste.dart
    + │  ├─klondike_game.dart
    + │  └─main.dart
    + ├─analysis_options.yaml
    + └─pubspec.yaml
    +
    +
    +
    +
    +

    Game structure

    +

    Once we have some basic components, they need to be added to the game. It is +time to make a decision about the high-level structure of the game.

    +

    There exist multiple approaches here, which differ in their complexity, +extendability, and overall philosophy. The approach that we will be taking in +this tutorial is based on using the World component, together with a Camera.

    +

    The idea behind this approach is the following: imagine that your game world +exists independently from the device, that it exists already in our heads, and +on the sketch, even though we haven’t done any coding yet. This world will have +a certain size, and each element in the world will have certain coordinates. It +is up to us to decide what will be the size of the world, and what is the unit +of measurement for that size. The important part is that the world exists +independently from the device, and its dimensions likewise do not depend on the +pixel resolution of the screen.

    +

    All elements that are part of the world will be added to the World component, +and the World component will be then added to the game.

    +

    The second part of the overall structure is a camera (CameraComponent). +The purpose of the camera is to be able to look at the world, to make sure that +it renders at the right size on the screen of the user’s device.

    +

    Thus, the overall structure of the component tree will look approximately like +this:

    +
    KlondikeGame
    + ├─ World
    + │   ├─ Stock
    + │   ├─ Waste
    + │   ├─ Foundation (×4)
    + │   └─ Pile (×7)
    + └─ CameraComponent
    +
    +
    +

    For this game I’ve been drawing my image assets having in mind the dimension of +a single card at 1000×1400 pixels. So, this will serve as the reference size for +determining the overall layout. Another important measurement that affects the +layout is the inter-card distance. It seems like it should be somewhere between +150 to 200 units (relative to the card width), so we will declare it as a +variable cardGap that can be adjusted later if needed. For simplicity, both +the vertical and horizontal inter-card distance will be the same, and the +minimum padding between the cards and the edges of the screen will also be equal +to cardGap.

    +

    Alright, let’s put all this together and implement our KlondikeGame class.

    +

    First, we declare several global constants which describe the dimensions of a +card and the distance between cards. We declare them as constants because we are +not planning to change these values during the game:

    +
      static const double cardWidth = 1000.0;
    +  static const double cardHeight = 1400.0;
    +  static const double cardGap = 175.0;
    +  static const double cardRadius = 100.0;
    +  static final Vector2 cardSize = Vector2(cardWidth, cardHeight);
    +
    +
    +

    Next, we will create a Stock component, the Waste, four Foundations and +seven Piles, setting their sizes and positions in the world. The positions +are calculated using simple arithmetics. This should all happen inside the +onLoad method, after loading the sprite sheet:

    +
        final stock = Stock()
    +      ..size = cardSize
    +      ..position = Vector2(cardGap, cardGap);
    +    final waste = Waste()
    +      ..size = cardSize
    +      ..position = Vector2(cardWidth + 2 * cardGap, cardGap);
    +    final foundations = List.generate(
    +      4,
    +      (i) => Foundation()
    +        ..size = cardSize
    +        ..position =
    +            Vector2((i + 3) * (cardWidth + cardGap) + cardGap, cardGap),
    +    );
    +    final piles = List.generate(
    +      7,
    +      (i) => Pile()
    +        ..size = cardSize
    +        ..position = Vector2(
    +          cardGap + i * (cardWidth + cardGap),
    +          cardHeight + 2 * cardGap,
    +        ),
    +    );
    +
    +
    +

    Since Flame version 1.9.0, FlameGame sets up default world and camera +objects. KlondikeGame is an extension of FlameGame, so we can add to that +world all the components that we just created.

    +
        world.add(stock);
    +    world.add(waste);
    +    world.addAll(foundations);
    +    world.addAll(piles);
    +
    +
    +
    +

    Note

    +

    You may be wondering when you need to await the result of add(), and when +you don’t. The short answer is: usually you don’t need to wait, but if you want +to, then it won’t hurt either.

    +

    If you check the documentation for .add() method, you’ll see that the returned +future only waits until the component is finished loading, not until it is +actually mounted to the game. As such, you only have to wait for the future from +.add() if your logic requires that the component is fully loaded before it can +proceed. This is not very common.

    +

    If you don’t await the future from .add(), then the component will be added +to the game anyways, and in the same amount of time.

    +
    +

    Lastly, we use FlameGame’s camera object to look at the world. Internally, +the camera consists of two parts: a viewport and a viewfinder. The +default viewport is MaxViewport, which takes up the entire available screen +size – this is exactly what we need for our game, so no need to change +anything. The viewfinder, on the other hand, needs to be set up to take the +dimensions of the underlying world into account.

    +

    We want the entire card layout to be visible on the screen without the need to +scroll. In order to accomplish this, we specify that we want the entire world +size (which is 7*cardWidth + 8*cardGap by 4*cardHeight + 3*cardGap) to be +able to fit into the screen. The .visibleGameSize setting ensures that no +matter the size of the device, the zoom level will be adjusted such that the +specified chunk of the game world will be visible.

    +

    The game size calculation is obtained like this: there are 7 cards in the +tableau and 6 gaps between them, add 2 more “gaps” to account for padding, and +you get the width of 7*cardWidth + 8*cardGap. Vertically, there are two rows +of cards, but in the bottom row we need some extra space to be able to display +a tall pile – by my rough estimate, thrice the height of a card is sufficient +for this – which gives the total height of the game world as +4*cardHeight + 3*cardGap.

    +

    Next, we specify which part of the world will be in the “center” of the +viewport. In this case I specify that the “center” of the viewport should +be at the top center of the screen, and the corresponding point within +the game world is at coordinates [(7*cardWidth + 8*cardGap)/2, 0].

    +

    The reason for such choice for the viewfinder’s position and anchor is +because of how we want it to respond if the game size becomes too wide or +too tall: in case of too wide we want it to be centered on the screen, +but if the screen is too tall, we want the content to be aligned at the +top.

    +
        camera.viewfinder.visibleGameSize =
    +           Vector2(cardWidth * 7 + cardGap * 8, 4 * cardHeight + 3 * cardGap);
    +    camera.viewfinder.position = Vector2(cardWidth * 3.5 + cardGap * 4, 0);
    +    camera.viewfinder.anchor = Anchor.topCenter;
    +
    +
    +

    If you run the game now, you should see the placeholders for where the various +components will be. If you are running the game in the browser, try resizing the +window and see how the game responds to this.

    +
    +
    +components/foundation.dart
    +
    1import 'package:flame/components.dart';
    +2
    +3class Foundation extends PositionComponent {
    +4  @override
    +5  bool get debugMode => true;
    +6}
    +
    +
    +
    +components/pile.dart
    +
    1import 'package:flame/components.dart';
    +2
    +3class Pile extends PositionComponent {
    +4  @override
    +5  bool get debugMode => true;
    +6}
    +
    +
    +
    +components/stock.dart
    +
    1import 'package:flame/components.dart';
    +2
    +3class Stock extends PositionComponent {
    +4  @override
    +5  bool get debugMode => true;
    +6}
    +
    +
    +
    +components/waste.dart
    +
    1import 'package:flame/components.dart';
    +2
    +3class Waste extends PositionComponent {
    +4  @override
    +5  bool get debugMode => true;
    +6}
    +
    +
    +
    +klondike_game.dart
    +
     1import 'package:flame/components.dart';
    + 2import 'package:flame/flame.dart';
    + 3import 'package:flame/game.dart';
    + 4
    + 5import 'components/foundation.dart';
    + 6import 'components/pile.dart';
    + 7import 'components/stock.dart';
    + 8import 'components/waste.dart';
    + 9
    +10class KlondikeGame extends FlameGame {
    +11  static const double cardGap = 175.0;
    +12  static const double cardWidth = 1000.0;
    +13  static const double cardHeight = 1400.0;
    +14  static const double cardRadius = 100.0;
    +15  static final Vector2 cardSize = Vector2(cardWidth, cardHeight);
    +16
    +17  @override
    +18  Future<void> onLoad() async {
    +19    await Flame.images.load('klondike-sprites.png');
    +20
    +21    final stock = Stock()
    +22      ..size = cardSize
    +23      ..position = Vector2(cardGap, cardGap);
    +24    final waste = Waste()
    +25      ..size = cardSize
    +26      ..position = Vector2(cardWidth + 2 * cardGap, cardGap);
    +27    final foundations = List.generate(
    +28      4,
    +29      (i) => Foundation()
    +30        ..size = cardSize
    +31        ..position =
    +32            Vector2((i + 3) * (cardWidth + cardGap) + cardGap, cardGap),
    +33    );
    +34    final piles = List.generate(
    +35      7,
    +36      (i) => Pile()
    +37        ..size = cardSize
    +38        ..position = Vector2(
    +39          cardGap + i * (cardWidth + cardGap),
    +40          cardHeight + 2 * cardGap,
    +41        ),
    +42    );
    +43
    +44    world.add(stock);
    +45    world.add(waste);
    +46    world.addAll(foundations);
    +47    world.addAll(piles);
    +48
    +49    camera.viewfinder.visibleGameSize =
    +50        Vector2(cardWidth * 7 + cardGap * 8, 4 * cardHeight + 3 * cardGap);
    +51    camera.viewfinder.position = Vector2(cardWidth * 3.5 + cardGap * 4, 0);
    +52    camera.viewfinder.anchor = Anchor.topCenter;
    +53  }
    +54}
    +55
    +56Sprite klondikeSprite(double x, double y, double width, double height) {
    +57  return Sprite(
    +58    Flame.images.fromCache('klondike-sprites.png'),
    +59    srcPosition: Vector2(x, y),
    +60    srcSize: Vector2(width, height),
    +61  );
    +62}
    +
    +
    +
    +main.dart
    +
    1import 'package:flame/game.dart';
    +2import 'package:flutter/widgets.dart';
    +3
    +4import 'klondike_game.dart';
    +5
    +6void main() {
    +7  final game = KlondikeGame();
    +8  runApp(GameWidget(game: game));
    +9}
    +
    +
    +
    +

    And this is it with this step – we’ve created the basic game structure upon +which everything else will be built. In the next step, we’ll learn how to render +the card objects, which are the most important visual objects in this game.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/klondike/step3.html b/docs/1.18.0/tutorials/klondike/step3.html new file mode 100644 index 000000000..6a89f48b7 --- /dev/null +++ b/docs/1.18.0/tutorials/klondike/step3.html @@ -0,0 +1,1230 @@ + + + + + + + 3. Cards — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    3. Cards

    +

    In this chapter we will begin implementing the most visible component in the +game – the Card component, which corresponds to a single real-life card. +There will be 52 Card objects in the game.

    +

    Each card has a rank (from 1 to 13, where 1 is an Ace, and 13 is a King) +and a suit (from 0 to 3: hearts ♥, diamonds ♦, clubs ♣, and spades ♠). +Also, each card will have a boolean flag faceUp, which controls whether +the card is currently facing up or down. This property is important both for +rendering, and for certain aspects of the gameplay logic.

    +

    The rank and the suit are simple properties of a card, they aren’t components, +so we need to make a decision on how to represent them. There are several +possibilities: either as a simple int, or as an enum, or as objects. The +choice will depend on what operations we need to perform with them. For the +rank, we will need to be able to tell whether one rank is one higher/lower than +another rank. Also, we need to produce the text label and a sprite corresponding +to the given rank. For suits, we need to know whether two suits are of different +colors, and also produce a text label and a sprite. Given these requirements, +I decided to represent both Rank and Suit as classes.

    +
    +

    Suit

    +

    Create file suit.dart and declare an @immutable class Suit there, with no +parent. The @immutable annotation here is just a hint for us that the objects +of this class should not be modified after creation.

    +

    Next, we define the factory constructor for the class: Suit.fromInt(i). We +use a factory constructor here in order to enforce the singleton pattern for +the class: instead of creating a new object every time, we are returning one +of the pre-built objects that we store in the _singletons list:

    +
      factory Suit.fromInt(int index) {
    +    assert(index >= 0 && index <= 3);
    +    return _singletons[index];
    +  }
    +
    +
    +

    After that, there is a private constructor Suit._(). This constructor +initializes the main properties of each Suit object: the numeric value, the +string label, and the sprite object which we will later use to draw the suit +symbol on the canvas. The sprite object is initialized using the +klondikeSprite() function that we created in the previous chapter:

    +
      Suit._(this.value, this.label, double x, double y, double w, double h)
    +      : sprite = klondikeSprite(x, y, w, h);
    +
    +  final int value;
    +  final String label;
    +  final Sprite sprite;
    +
    +
    +

    Then comes the static list of all Suit objects in the game. Note that we +define it as static variable so it is evaluated lazily (as if it was marked +with the late keyword) meaning that it will be only initialized the first +time it is needed. This is important: as we can see above, the constructor +tries to retrieve an image from the global cache, so it can only be invoked +after the image is loaded into the cache.

    +
      static final List<Suit> _singletons = [
    +    Suit._(0, '♥', 1176, 17, 172, 183),
    +    Suit._(1, '♦', 973, 14, 177, 182),
    +    Suit._(2, '♣', 974, 226, 184, 172),
    +    Suit._(3, '♠', 1178, 220, 176, 182),
    +  ];
    +
    +
    +

    The last four numbers in the constructor are the coordinates of the sprite +image within the sprite sheet klondike-sprites.png. If you’re wondering how I +obtained these numbers, the answer is that I used a free online service +spritecow.com – it’s a handy tool for locating sprites within a sprite sheet.

    +

    Lastly, I have simple getters to determine the “color” of a suit. This will be +needed later when we need to enforce the rule that cards can only be placed +into columns by alternating colors.

    +
      /// Hearts and Diamonds are red, while Clubs and Spades are black.
    +  bool get isRed => value <= 1;
    +  bool get isBlack => value >= 2;
    +
    +
    +
    +
    +

    Rank

    +

    The Rank class is very similar to Suit. The main difference is that Rank +contains two sprites instead of one, separately for ranks of “red” and “black” +colors. The full code for the Rank class is as follows:

    +
    import 'package:flame/components.dart';
    +import 'package:flame/flame.dart';
    +import 'package:flutter/foundation.dart';
    +
    +@immutable
    +class Rank {
    +  factory Rank.fromInt(int value) {
    +    assert(value >= 1 && value <= 13);
    +    return _singletons[value - 1];
    +  }
    +
    +  Rank._(
    +    this.value,
    +    this.label,
    +    double x1,
    +    double y1,
    +    double x2,
    +    double y2,
    +    double w,
    +    double h,
    +  )   : redSprite = klondikeSprite(x1, y1, w, h),
    +        blackSprite = klondikeSprite(x2, y2, w, h);
    +
    +  final int value;
    +  final String label;
    +  final Sprite redSprite;
    +  final Sprite blackSprite;
    +
    +  static final List<Rank> _singletons = [
    +    Rank._(1, 'A', 335, 164, 789, 161, 120, 129),
    +    Rank._(2, '2', 20, 19, 15, 322, 83, 125),
    +    Rank._(3, '3', 122, 19, 117, 322, 80, 127),
    +    Rank._(4, '4', 213, 12, 208, 315, 93, 132),
    +    Rank._(5, '5', 314, 21, 309, 324, 85, 125),
    +    Rank._(6, '6', 419, 17, 414, 320, 84, 129),
    +    Rank._(7, '7', 509, 21, 505, 324, 92, 128),
    +    Rank._(8, '8', 612, 19, 607, 322, 78, 127),
    +    Rank._(9, '9', 709, 19, 704, 322, 84, 130),
    +    Rank._(10, '10', 810, 20, 805, 322, 137, 127),
    +    Rank._(11, 'J', 15, 170, 469, 167, 56, 126),
    +    Rank._(12, 'Q', 92, 168, 547, 165, 132, 128),
    +    Rank._(13, 'K', 243, 170, 696, 167, 92, 123),
    +  ];
    +}
    +
    +
    +
    +
    +

    Card component

    +

    Now that we have the Rank and the Suit classes, we can finally start +implementing the Card component. Create file components/card.dart and +declare the Card class extending from the PositionComponent:

    +
    class Card extends PositionComponent {}
    +
    +
    +

    The constructor of the class will take integer rank and suit, and make the +card initially facing down. Also, we initialize the size of the component to +be equal to the cardSize constant defined in the KlondikeGame class:

    +
      Card(int intRank, int intSuit)
    +      : rank = Rank.fromInt(intRank),
    +        suit = Suit.fromInt(intSuit),
    +        _faceUp = false,
    +        super(size: KlondikeGame.cardSize);
    +
    +  final Rank rank;
    +  final Suit suit;
    +  bool _faceUp;
    +
    +
    +

    The _faceUp property is private (indicated by the underscore) and non-final, +meaning that it can change during the lifetime of a card. We should create some +public accessors and mutators for this variable:

    +
      bool get isFaceUp => _faceUp;
    +  bool get isFaceDown => !_faceUp;
    +  void flip() => _faceUp = !_faceUp;
    +
    +
    +

    Lastly, let’s add a simple toString() implementation, which may turn out to +be useful when we need to debug the game:

    +
      @override
    +  String toString() => rank.label + suit.label; // e.g. "Q♠" or "10♦"
    +
    +
    +

    Before we proceed with implementing the rendering, we need to add some cards +into the game. Head over to the KlondikeGame class and add the following at +the bottom of the onLoad method:

    +
        final random = Random();
    +    for (var i = 0; i < 7; i++) {
    +      for (var j = 0; j < 4; j++) {
    +        final card = Card(random.nextInt(13) + 1, random.nextInt(4))
    +          ..position = Vector2(100 + i * 1150, 100 + j * 1500)
    +          ..addToParent(world);
    +        if (random.nextDouble() < 0.9) { // flip face up with 90% probability
    +          card.flip();
    +        }
    +      }
    +    }
    +
    +
    +

    This snippet is a temporary code – we will remove it in the next chapter – +but for now it lays down 28 random cards on the table, most of them facing up.

    +
    +

    Rendering

    +

    In order to be able to see a card, we need to implement its render() method. +Since the card has two distinct states – face up or down – we will +implement rendering for these two states separately. Add the following methods +into the Card class:

    +
      @override
    +  void render(Canvas canvas) {
    +    if (_faceUp) {
    +      _renderFront(canvas);
    +    } else {
    +      _renderBack(canvas);
    +    }
    +  }
    +
    +  void _renderFront(Canvas canvas) {}
    +  void _renderBack(Canvas canvas) {}
    +
    +
    +
    +
    +

    renderBack()

    +

    Since rendering the back of a card is simpler, we will do it first.

    +

    The render() method of a PositionComponent operates in a local coordinate +system, which means we don’t need to worry about where the card is located on +the screen. This local coordinate system has the origin at the top-left corner +of the component, and extends to the right by width and down by height +pixels.

    +

    There is a lot of artistic freedom in how to draw the back of a card, but my +implementation contains a solid background, a border, a flame logo in the +middle, and another decorative border:

    +
      void _renderBack(Canvas canvas) {
    +    canvas.drawRRect(cardRRect, backBackgroundPaint);
    +    canvas.drawRRect(cardRRect, backBorderPaint1);
    +    canvas.drawRRect(backRRectInner, backBorderPaint2);
    +    flameSprite.render(canvas, position: size / 2, anchor: Anchor.center);
    +  }
    +
    +
    +

    The most interesting part here is the rendering of a sprite: we want to +render it in the middle (size/2), and we use Anchor.center to tell the +engine that we want the center of the sprite to be at that point.

    +

    Various properties used in the _renderBack() method are defined as follows:

    +
      static final Paint backBackgroundPaint = Paint()
    +    ..color = const Color(0xff380c02);
    +  static final Paint backBorderPaint1 = Paint()
    +    ..color = const Color(0xffdbaf58)
    +    ..style = PaintingStyle.stroke
    +    ..strokeWidth = 10;
    +  static final Paint backBorderPaint2 = Paint()
    +    ..color = const Color(0x5CEF971B)
    +    ..style = PaintingStyle.stroke
    +    ..strokeWidth = 35;
    +  static final RRect cardRRect = RRect.fromRectAndRadius(
    +    KlondikeGame.cardSize.toRect(),
    +    const Radius.circular(KlondikeGame.cardRadius),
    +  );
    +  static final RRect backRRectInner = cardRRect.deflate(40);
    +  static final Sprite flameSprite = klondikeSprite(1367, 6, 357, 501);
    +
    +
    +

    I declared these properties as static because they will all be the same across +all 52 card objects, so we might as well save some resources by having them +initialized only once.

    +
    +
    +

    renderFront()

    +

    When rendering the face of a card, we will follow the standard card design: the +rank and the suit in two opposite corners, plus the number of pips equal to the +rank value. The court cards (jack, queen, king) will have special images in the +center.

    +

    As before, we begin by declaring some constants that will be used for rendering. +The background of a card will be black, whereas the border will be different +depending on whether the card is of a “red” suit or “black”:

    +
      static final Paint frontBackgroundPaint = Paint()
    +    ..color = const Color(0xff000000);
    +  static final Paint redBorderPaint = Paint()
    +    ..color = const Color(0xffece8a3)
    +    ..style = PaintingStyle.stroke
    +    ..strokeWidth = 10;
    +  static final Paint blackBorderPaint = Paint()
    +    ..color = const Color(0xff7ab2e8)
    +    ..style = PaintingStyle.stroke
    +    ..strokeWidth = 10;
    +
    +
    +

    Next, we also need the images for the court cards:

    +
      static final Sprite redJack = klondikeSprite(81, 565, 562, 488);
    +  static final Sprite redQueen = klondikeSprite(717, 541, 486, 515);
    +  static final Sprite redKing = klondikeSprite(1305, 532, 407, 549);
    +
    +
    +

    Note that I’m calling these sprites redJack, redQueen, and redKing. This +is because, after some trial, I found that the images that I have don’t look +very well on black-suit cards. So what I decided to do is to take these images +and tint them with a blueish hue. Tinting of a sprite can be achieved by +using a paint with colorFilter set to the specified color and the srcATop +blending mode:

    +
      static final blueFilter = Paint()
    +    ..colorFilter = const ColorFilter.mode(
    +      Color(0x880d8bff),
    +      BlendMode.srcATop,
    +    );
    +  static final Sprite blackJack = klondikeSprite(81, 565, 562, 488)
    +    ..paint = blueFilter;
    +  static final Sprite blackQueen = klondikeSprite(717, 541, 486, 515)
    +    ..paint = blueFilter;
    +  static final Sprite blackKing = klondikeSprite(1305, 532, 407, 549)
    +    ..paint = blueFilter;
    +
    +
    +

    Now we can start coding the render method itself. First, draw the background +and the card border:

    +
      void _renderFront(Canvas canvas) {
    +    canvas.drawRRect(cardRRect, frontBackgroundPaint);
    +    canvas.drawRRect(
    +      cardRRect,
    +      suit.isRed ? redBorderPaint : blackBorderPaint,
    +    );
    +  }
    +
    +
    +

    In order to draw the rest of the card, I need one more helper method. This +method will draw the provided sprite on the canvas at the specified place (the +location is relative to the dimensions of the card). The sprite can be +optionally scaled. In addition, if flag rotate=true is passed, the sprite +will be drawn as if it was rotated 180º around the center of the card:

    +
      void _drawSprite(
    +    Canvas canvas,
    +    Sprite sprite,
    +    double relativeX,
    +    double relativeY, {
    +    double scale = 1,
    +    bool rotate = false,
    +  }) {
    +    if (rotate) {
    +      canvas.save();
    +      canvas.translate(size.x / 2, size.y / 2);
    +      canvas.rotate(pi);
    +      canvas.translate(-size.x / 2, -size.y / 2);
    +    }
    +    sprite.render(
    +      canvas,
    +      position: Vector2(relativeX * size.x, relativeY * size.y),
    +      anchor: Anchor.center,
    +      size: sprite.srcSize.scaled(scale),
    +    );
    +    if (rotate) {
    +      canvas.restore();
    +    }
    +  }
    +
    +
    +

    Let’s draw the rank and the suit symbols in the corners of the card. Add the +following to the _renderFront() method:

    +
        final rankSprite = suit.isBlack ? rank.blackSprite : rank.redSprite;
    +    final suitSprite = suit.sprite;
    +    _drawSprite(canvas, rankSprite, 0.1, 0.08);
    +    _drawSprite(canvas, rankSprite, 0.1, 0.08, rotate: true);
    +    _drawSprite(canvas, suitSprite, 0.1, 0.18, scale: 0.5);
    +    _drawSprite(canvas, suitSprite, 0.1, 0.18, scale: 0.5, rotate: true);
    +
    +
    +

    The middle of the card is rendered in the same manner: we will create a big +switch statement on the card’s rank, and draw pips accordingly. The code +below may seem long, but it is actually quite repetitive and consists only +of drawing various sprites in different places on the card’s face:

    +
        switch (rank.value) {
    +      case 1:
    +        _drawSprite(canvas, suitSprite, 0.5, 0.5, scale: 2.5);
    +      case 2:
    +        _drawSprite(canvas, suitSprite, 0.5, 0.25);
    +        _drawSprite(canvas, suitSprite, 0.5, 0.25, rotate: true);
    +      case 3:
    +        _drawSprite(canvas, suitSprite, 0.5, 0.2);
    +        _drawSprite(canvas, suitSprite, 0.5, 0.5);
    +        _drawSprite(canvas, suitSprite, 0.5, 0.2, rotate: true);
    +      case 4:
    +        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +      case 5:
    +        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.5, 0.5);
    +      case 6:
    +        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +      case 7:
    +        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +        _drawSprite(canvas, suitSprite, 0.5, 0.35);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +      case 8:
    +        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +        _drawSprite(canvas, suitSprite, 0.5, 0.35);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.5, 0.35, rotate: true);
    +      case 9:
    +        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +        _drawSprite(canvas, suitSprite, 0.5, 0.3);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.4);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.4);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.4, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.4, rotate: true);
    +      case 10:
    +        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +        _drawSprite(canvas, suitSprite, 0.5, 0.3);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.4);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.4);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.5, 0.3, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.3, 0.4, rotate: true);
    +        _drawSprite(canvas, suitSprite, 0.7, 0.4, rotate: true);
    +      case 11:
    +        _drawSprite(canvas, suit.isRed? redJack : blackJack, 0.5, 0.5);
    +      case 12:
    +        _drawSprite(canvas, suit.isRed? redQueen : blackQueen, 0.5, 0.5);
    +      case 13:
    +        _drawSprite(canvas, suit.isRed? redKing : blackKing, 0.5, 0.5);
    +    }
    +
    +
    +

    And this is it with the rendering of the Card component. If you run the code +now, you would see four rows of cards neatly spread on the table. Refreshing +the page will lay down a new set of cards. Remember that we have laid these +cards in this way only temporarily, in order to be able to check that rendering +works properly.

    +

    In the next chapter we will discuss how to implement interactions with the +cards, that is, how to make them draggable and tappable.

    +
    +
    +components/card.dart
    +
      1import 'dart:math';
    +  2import 'dart:ui';
    +  3
    +  4import 'package:flame/components.dart';
    +  5import '../klondike_game.dart';
    +  6import '../rank.dart';
    +  7import '../suit.dart';
    +  8
    +  9class Card extends PositionComponent {
    + 10  Card(int intRank, int intSuit)
    + 11      : rank = Rank.fromInt(intRank),
    + 12        suit = Suit.fromInt(intSuit),
    + 13        _faceUp = false,
    + 14        super(size: KlondikeGame.cardSize);
    + 15
    + 16  final Rank rank;
    + 17  final Suit suit;
    + 18  bool _faceUp;
    + 19
    + 20  bool get isFaceUp => _faceUp;
    + 21  void flip() => _faceUp = !_faceUp;
    + 22
    + 23  @override
    + 24  String toString() => rank.label + suit.label; // e.g. "Q♠" or "10♦"
    + 25
    + 26  @override
    + 27  void render(Canvas canvas) {
    + 28    if (_faceUp) {
    + 29      _renderFront(canvas);
    + 30    } else {
    + 31      _renderBack(canvas);
    + 32    }
    + 33  }
    + 34
    + 35  static final Paint backBackgroundPaint = Paint()
    + 36    ..color = const Color(0xff380c02);
    + 37  static final Paint backBorderPaint1 = Paint()
    + 38    ..color = const Color(0xffdbaf58)
    + 39    ..style = PaintingStyle.stroke
    + 40    ..strokeWidth = 10;
    + 41  static final Paint backBorderPaint2 = Paint()
    + 42    ..color = const Color(0x5CEF971B)
    + 43    ..style = PaintingStyle.stroke
    + 44    ..strokeWidth = 35;
    + 45  static final RRect cardRRect = RRect.fromRectAndRadius(
    + 46    KlondikeGame.cardSize.toRect(),
    + 47    const Radius.circular(KlondikeGame.cardRadius),
    + 48  );
    + 49  static final RRect backRRectInner = cardRRect.deflate(40);
    + 50  static final Sprite flameSprite = klondikeSprite(1367, 6, 357, 501);
    + 51
    + 52  void _renderBack(Canvas canvas) {
    + 53    canvas.drawRRect(cardRRect, backBackgroundPaint);
    + 54    canvas.drawRRect(cardRRect, backBorderPaint1);
    + 55    canvas.drawRRect(backRRectInner, backBorderPaint2);
    + 56    flameSprite.render(canvas, position: size / 2, anchor: Anchor.center);
    + 57  }
    + 58
    + 59  static final Paint frontBackgroundPaint = Paint()
    + 60    ..color = const Color(0xff000000);
    + 61  static final Paint redBorderPaint = Paint()
    + 62    ..color = const Color(0xffece8a3)
    + 63    ..style = PaintingStyle.stroke
    + 64    ..strokeWidth = 10;
    + 65  static final Paint blackBorderPaint = Paint()
    + 66    ..color = const Color(0xff7ab2e8)
    + 67    ..style = PaintingStyle.stroke
    + 68    ..strokeWidth = 10;
    + 69  static final blueFilter = Paint()
    + 70    ..colorFilter = const ColorFilter.mode(
    + 71      Color(0x880d8bff),
    + 72      BlendMode.srcATop,
    + 73    );
    + 74  static final Sprite redJack = klondikeSprite(81, 565, 562, 488);
    + 75  static final Sprite redQueen = klondikeSprite(717, 541, 486, 515);
    + 76  static final Sprite redKing = klondikeSprite(1305, 532, 407, 549);
    + 77  static final Sprite blackJack = klondikeSprite(81, 565, 562, 488)
    + 78    ..paint = blueFilter;
    + 79  static final Sprite blackQueen = klondikeSprite(717, 541, 486, 515)
    + 80    ..paint = blueFilter;
    + 81  static final Sprite blackKing = klondikeSprite(1305, 532, 407, 549)
    + 82    ..paint = blueFilter;
    + 83
    + 84  void _renderFront(Canvas canvas) {
    + 85    canvas.drawRRect(cardRRect, frontBackgroundPaint);
    + 86    canvas.drawRRect(
    + 87      cardRRect,
    + 88      suit.isRed ? redBorderPaint : blackBorderPaint,
    + 89    );
    + 90
    + 91    final rankSprite = suit.isBlack ? rank.blackSprite : rank.redSprite;
    + 92    final suitSprite = suit.sprite;
    + 93    _drawSprite(canvas, rankSprite, 0.1, 0.08);
    + 94    _drawSprite(canvas, suitSprite, 0.1, 0.18, scale: 0.5);
    + 95    _drawSprite(canvas, rankSprite, 0.1, 0.08, rotate: true);
    + 96    _drawSprite(canvas, suitSprite, 0.1, 0.18, scale: 0.5, rotate: true);
    + 97    switch (rank.value) {
    + 98      case 1:
    + 99        _drawSprite(canvas, suitSprite, 0.5, 0.5, scale: 2.5);
    +100      case 2:
    +101        _drawSprite(canvas, suitSprite, 0.5, 0.25);
    +102        _drawSprite(canvas, suitSprite, 0.5, 0.25, rotate: true);
    +103      case 3:
    +104        _drawSprite(canvas, suitSprite, 0.5, 0.2);
    +105        _drawSprite(canvas, suitSprite, 0.5, 0.5);
    +106        _drawSprite(canvas, suitSprite, 0.5, 0.2, rotate: true);
    +107      case 4:
    +108        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +109        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +110        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +111        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +112      case 5:
    +113        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +114        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +115        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +116        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +117        _drawSprite(canvas, suitSprite, 0.5, 0.5);
    +118      case 6:
    +119        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +120        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +121        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +122        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +123        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +124        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +125      case 7:
    +126        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +127        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +128        _drawSprite(canvas, suitSprite, 0.5, 0.35);
    +129        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +130        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +131        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +132        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +133      case 8:
    +134        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +135        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +136        _drawSprite(canvas, suitSprite, 0.5, 0.35);
    +137        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +138        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +139        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +140        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +141        _drawSprite(canvas, suitSprite, 0.5, 0.35, rotate: true);
    +142      case 9:
    +143        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +144        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +145        _drawSprite(canvas, suitSprite, 0.5, 0.3);
    +146        _drawSprite(canvas, suitSprite, 0.3, 0.4);
    +147        _drawSprite(canvas, suitSprite, 0.7, 0.4);
    +148        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +149        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +150        _drawSprite(canvas, suitSprite, 0.3, 0.4, rotate: true);
    +151        _drawSprite(canvas, suitSprite, 0.7, 0.4, rotate: true);
    +152      case 10:
    +153        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +154        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +155        _drawSprite(canvas, suitSprite, 0.5, 0.3);
    +156        _drawSprite(canvas, suitSprite, 0.3, 0.4);
    +157        _drawSprite(canvas, suitSprite, 0.7, 0.4);
    +158        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +159        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +160        _drawSprite(canvas, suitSprite, 0.5, 0.3, rotate: true);
    +161        _drawSprite(canvas, suitSprite, 0.3, 0.4, rotate: true);
    +162        _drawSprite(canvas, suitSprite, 0.7, 0.4, rotate: true);
    +163      case 11:
    +164        _drawSprite(canvas, suit.isRed ? redJack : blackJack, 0.5, 0.5);
    +165      case 12:
    +166        _drawSprite(canvas, suit.isRed ? redQueen : blackQueen, 0.5, 0.5);
    +167      case 13:
    +168        _drawSprite(canvas, suit.isRed ? redKing : blackKing, 0.5, 0.5);
    +169    }
    +170  }
    +171
    +172  void _drawSprite(
    +173    Canvas canvas,
    +174    Sprite sprite,
    +175    double relativeX,
    +176    double relativeY, {
    +177    double scale = 1,
    +178    bool rotate = false,
    +179  }) {
    +180    if (rotate) {
    +181      canvas.save();
    +182      canvas.translate(size.x / 2, size.y / 2);
    +183      canvas.rotate(pi);
    +184      canvas.translate(-size.x / 2, -size.y / 2);
    +185    }
    +186    sprite.render(
    +187      canvas,
    +188      position: Vector2(relativeX * size.x, relativeY * size.y),
    +189      anchor: Anchor.center,
    +190      size: sprite.srcSize.scaled(scale),
    +191    );
    +192    if (rotate) {
    +193      canvas.restore();
    +194    }
    +195  }
    +196}
    +
    +
    +
    +components/foundation.dart
    +
    1import 'package:flame/components.dart';
    +2
    +3class Foundation extends PositionComponent {
    +4  @override
    +5  bool get debugMode => true;
    +6}
    +
    +
    +
    +components/pile.dart
    +
    1import 'package:flame/components.dart';
    +2
    +3class Pile extends PositionComponent {
    +4  @override
    +5  bool get debugMode => true;
    +6}
    +
    +
    +
    +components/stock.dart
    +
    1import 'package:flame/components.dart';
    +2
    +3class Stock extends PositionComponent {
    +4  @override
    +5  bool get debugMode => true;
    +6}
    +
    +
    +
    +components/waste.dart
    +
    1import 'package:flame/components.dart';
    +2
    +3class Waste extends PositionComponent {
    +4  @override
    +5  bool get debugMode => true;
    +6}
    +
    +
    +
    +klondike_game.dart
    +
     1import 'dart:math';
    + 2
    + 3import 'package:flame/components.dart';
    + 4import 'package:flame/flame.dart';
    + 5import 'package:flame/game.dart';
    + 6
    + 7import 'components/card.dart';
    + 8import 'components/foundation.dart';
    + 9import 'components/pile.dart';
    +10import 'components/stock.dart';
    +11import 'components/waste.dart';
    +12
    +13class KlondikeGame extends FlameGame {
    +14  static const double cardGap = 175.0;
    +15  static const double cardWidth = 1000.0;
    +16  static const double cardHeight = 1400.0;
    +17  static const double cardRadius = 100.0;
    +18  static final Vector2 cardSize = Vector2(cardWidth, cardHeight);
    +19
    +20  @override
    +21  Future<void> onLoad() async {
    +22    await Flame.images.load('klondike-sprites.png');
    +23
    +24    final stock = Stock()
    +25      ..size = cardSize
    +26      ..position = Vector2(cardGap, cardGap);
    +27    final waste = Waste()
    +28      ..size = cardSize
    +29      ..position = Vector2(cardWidth + 2 * cardGap, cardGap);
    +30    final foundations = List.generate(
    +31      4,
    +32      (i) => Foundation()
    +33        ..size = cardSize
    +34        ..position =
    +35            Vector2((i + 3) * (cardWidth + cardGap) + cardGap, cardGap),
    +36    );
    +37    final piles = List.generate(
    +38      7,
    +39      (i) => Pile()
    +40        ..size = cardSize
    +41        ..position = Vector2(
    +42          cardGap + i * (cardWidth + cardGap),
    +43          cardHeight + 2 * cardGap,
    +44        ),
    +45    );
    +46
    +47    world.add(stock);
    +48    world.add(waste);
    +49    world.addAll(foundations);
    +50    world.addAll(piles);
    +51
    +52    camera.viewfinder.visibleGameSize =
    +53        Vector2(cardWidth * 7 + cardGap * 8, 4 * cardHeight + 3 * cardGap);
    +54    camera.viewfinder.position = Vector2(cardWidth * 3.5 + cardGap * 4, 0);
    +55    camera.viewfinder.anchor = Anchor.topCenter;
    +56
    +57    final random = Random();
    +58    for (var i = 0; i < 7; i++) {
    +59      for (var j = 0; j < 4; j++) {
    +60        final card = Card(random.nextInt(13) + 1, random.nextInt(4))
    +61          ..position = Vector2(100 + i * 1150, 100 + j * 1500)
    +62          ..addToParent(world);
    +63        // flip the card face-up with 90% probability
    +64        if (random.nextDouble() < 0.9) {
    +65          card.flip();
    +66        }
    +67      }
    +68    }
    +69  }
    +70}
    +71
    +72Sprite klondikeSprite(double x, double y, double width, double height) {
    +73  return Sprite(
    +74    Flame.images.fromCache('klondike-sprites.png'),
    +75    srcPosition: Vector2(x, y),
    +76    srcSize: Vector2(width, height),
    +77  );
    +78}
    +
    +
    +
    +main.dart
    +
    1import 'package:flame/game.dart';
    +2import 'package:flutter/widgets.dart';
    +3
    +4import 'klondike_game.dart';
    +5
    +6void main() {
    +7  final game = KlondikeGame();
    +8  runApp(GameWidget(game: game));
    +9}
    +
    +
    +
    +rank.dart
    +
     1import 'package:flame/components.dart';
    + 2import 'package:flutter/foundation.dart';
    + 3import 'klondike_game.dart';
    + 4
    + 5@immutable
    + 6class Rank {
    + 7  factory Rank.fromInt(int value) {
    + 8    assert(
    + 9      value >= 1 && value <= 13,
    +10      'value is outside of the bounds of what a rank can be',
    +11    );
    +12    return _singletons[value - 1];
    +13  }
    +14
    +15  Rank._(
    +16    this.value,
    +17    this.label,
    +18    double x1,
    +19    double y1,
    +20    double x2,
    +21    double y2,
    +22    double w,
    +23    double h,
    +24  )   : redSprite = klondikeSprite(x1, y1, w, h),
    +25        blackSprite = klondikeSprite(x2, y2, w, h);
    +26
    +27  final int value;
    +28  final String label;
    +29  final Sprite redSprite;
    +30  final Sprite blackSprite;
    +31
    +32  static final List<Rank> _singletons = [
    +33    Rank._(1, 'A', 335, 164, 789, 161, 120, 129),
    +34    Rank._(2, '2', 20, 19, 15, 322, 83, 125),
    +35    Rank._(3, '3', 122, 19, 117, 322, 80, 127),
    +36    Rank._(4, '4', 213, 12, 208, 315, 93, 132),
    +37    Rank._(5, '5', 314, 21, 309, 324, 85, 125),
    +38    Rank._(6, '6', 419, 17, 414, 320, 84, 129),
    +39    Rank._(7, '7', 509, 21, 505, 324, 92, 128),
    +40    Rank._(8, '8', 612, 19, 607, 322, 78, 127),
    +41    Rank._(9, '9', 709, 19, 704, 322, 84, 130),
    +42    Rank._(10, '10', 810, 20, 805, 322, 137, 127),
    +43    Rank._(11, 'J', 15, 170, 469, 167, 56, 126),
    +44    Rank._(12, 'Q', 92, 168, 547, 165, 132, 128),
    +45    Rank._(13, 'K', 243, 170, 696, 167, 92, 123),
    +46  ];
    +47}
    +
    +
    +
    +suit.dart
    +
     1import 'package:flame/sprite.dart';
    + 2import 'package:flutter/foundation.dart';
    + 3import 'klondike_game.dart';
    + 4
    + 5@immutable
    + 6class Suit {
    + 7  factory Suit.fromInt(int index) {
    + 8    assert(
    + 9      index >= 0 && index <= 3,
    +10      'index is outside of the bounds of what a suit can be',
    +11    );
    +12    return _singletons[index];
    +13  }
    +14
    +15  Suit._(this.value, this.label, double x, double y, double w, double h)
    +16      : sprite = klondikeSprite(x, y, w, h);
    +17
    +18  final int value;
    +19  final String label;
    +20  final Sprite sprite;
    +21
    +22  static final List<Suit> _singletons = [
    +23    Suit._(0, '♥', 1176, 17, 172, 183),
    +24    Suit._(1, '♦', 973, 14, 177, 182),
    +25    Suit._(2, '♣', 974, 226, 184, 172),
    +26    Suit._(3, '♠', 1178, 220, 176, 182),
    +27  ];
    +28
    +29  /// Hearts and Diamonds are red, while Clubs and Spades are black.
    +30  bool get isRed => value <= 1;
    +31  bool get isBlack => value >= 2;
    +32}
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/klondike/step4.html b/docs/1.18.0/tutorials/klondike/step4.html new file mode 100644 index 000000000..1278b291d --- /dev/null +++ b/docs/1.18.0/tutorials/klondike/step4.html @@ -0,0 +1,2066 @@ + + + + + + + 4. Gameplay — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    4. Gameplay

    +

    In this chapter we will be implementing the core of Klondike’s gameplay: how the cards move between +the stock and the waste, the piles and the foundations.

    +

    Before we begin though, let’s clean up all those cards that we left scattered across the table in +the previous chapter. Open the KlondikeGame class and erase the loop at the bottom of onLoad() +that was adding 28 cards onto the table.

    +
    +

    The piles

    +

    Another small refactoring that we need to do is to rename our components: StockStockPile, +WasteWastePile, FoundationFoundationPile, and PileTableauPile. This is +because these components have some common features in how they handle interactions with the cards, +and it would be convenient to have all of them implement a common API. We will call the interface +that they will all be implementing the Pile class.

    +
    +

    Note

    +

    Refactors and changes in architecture happen during development all the time: +it’s almost impossible to get the structure right on the first try. Do not be +anxious about changing code that you have written in the past: it is a good +habit to have.

    +
    +

    After such a rename, we can begin implementing each of these components.

    +
    +

    Stock pile

    +

    The stock is a place in the top-left corner of the playing field which holds the cards that are +not currently in play. We will need to build the following functionality for this component:

    +
      +
    1. Ability to hold cards that are not currently in play, face down;

    2. +
    3. Tapping the stock should reveal top 3 cards and move them to the waste pile;

    4. +
    5. When the cards run out, there should be a visual indicating that this is the stock pile;

    6. +
    7. When the cards run out, tapping the empty stock should move all the cards from the waste pile +into the stock, turning them face down.

    8. +
    +

    The first question that needs to be decided here is this: who is going to own the Card components? +Previously we have been adding them directly to the game field, but now wouldn’t it be better to +say that the cards belong to the Stock component, or to the waste, or piles, or foundations? While +this approach is tempting, I believe it would make our life more complicated as we need to move a +card from one place to another.

    +

    So, I decided to stick with my first approach: the Card components are owned directly by the +KlondikeGame itself, whereas the StockPile and other piles are merely aware of which cards are +currently placed there.

    +

    Having this in mind, let’s start implementing the StockPile component:

    +
    class StockPile extends PositionComponent {
    +  StockPile({super.position}) : super(size: KlondikeGame.cardSize);
    +
    +  /// Which cards are currently placed onto this pile. The first card in the
    +  /// list is at the bottom, the last card is on top.
    +  final List<Card> _cards = [];
    +
    +  void acquireCard(Card card) {
    +    assert(!card.isFaceUp);
    +    card.position = position;
    +    card.priority = _cards.length;
    +    _cards.add(card);
    +  }
    +}
    +
    +
    +

    Here the acquireCard() method stores the provided card into the internal list _cards; it also +moves that card to the StockPile’s position and adjusts the cards priority so that they are +displayed in the right order. However, this method does not mount the card as a child of the +StockPile component – it remains belonging to the top-level game.

    +

    Speaking of the game class, let’s open the KlondikeGame and add the following lines to create a +full deck of 52 cards and put them onto the stock pile (this should be added at the end of the +onLoad method):

    +
    final cards = [
    +  for (var rank = 1; rank <= 13; rank++)
    +    for (var suit = 0; suit < 4; suit++)
    +      Card(rank, suit)
    +];
    +world.addAll(cards);
    +cards.forEach(stock.acquireCard);
    +
    +
    +

    This concludes the first step of our short plan at the beginning of this section. For the second +step, though, we need to have a waste pile – so let’s make a quick detour and implement the +WastePile class.

    +
    +
    +

    Waste pile

    +

    The waste is a pile next to the stock. During the course of the game we will be taking the cards +from the top of the stock pile and putting them into the waste. The functionality of this class is +quite simple: it holds a certain number of cards face up, fanning out the top 3.

    +

    Let’s start implementing the WastePile class same way as we did with the StockPile class, only +now the cards are expected to be face up:

    +
    class WastePile extends PositionComponent {
    +  WastePile({super.position}) : super(size: KlondikeGame.cardSize);
    +
    +  final List<Card> _cards = [];
    +
    +  void acquireCard(Card card) {
    +    assert(card.isFaceUp);
    +    card.position = position;
    +    card.priority = _cards.length;
    +    _cards.add(card);
    +  }
    +}
    +
    +
    +

    So far, this puts all cards into a single neat pile, whereas we wanted a fan-out of top three. So, +let’s add a dedicated method _fanOutTopCards() for this, which we will call at the end of each +acquireCard():

    +
      void _fanOutTopCards() {
    +    final n = _cards.length;
    +    for (var i = 0; i < n; i++) {
    +      _cards[i].position = position;
    +    }
    +    if (n == 2) {
    +      _cards[1].position.add(_fanOffset);
    +    } else if (n >= 3) {
    +      _cards[n - 2].position.add(_fanOffset);
    +      _cards[n - 1].position.addScaled(_fanOffset, 2);
    +    }
    +  }
    +
    +
    +

    The _fanOffset variable here helps determine the shift between cards in the fan, which I decided +to be about 20% of the card’s width:

    +
      final Vector2 _fanOffset = Vector2(KlondikeGame.cardWidth * 0.2, 0);
    +
    +
    +

    Now that the waste pile is ready, let’s get back to the StockPile.

    +
    +
    +

    Stock pile – tap to deal cards

    +

    The second item on our todo list is the first interactive functionality in the game: tap the stock +pile to deal 3 cards onto the waste.

    +

    Adding tap functionality to the components in Flame is quite simple: we just add the mixin +TapCallbacks to the component that we want to be tappable:

    +
    class StockPile extends PositionComponent with TapCallbacks { ... }
    +
    +
    +

    Oh, and we also need to say what we want to happen when the tap occurs. Here we want the top 3 cards +to be turned face up and moved to the waste pile. So, add the following method to the StockPile +class:

    +
      @override
    +  void onTapUp(TapUpEvent event) {
    +  final wastePile = parent!.firstChild<WastePile>()!;
    +    for (var i = 0; i < 3; i++) {
    +      if (_cards.isNotEmpty) {
    +        final card = _cards.removeLast();
    +        card.flip();
    +        wastePile.acquireCard(card);
    +      }
    +    }
    +  }
    +
    +
    +

    You have probably noticed that the cards move from one pile to another immediately, which looks very +unnatural. However, this is how it is going to be for now – we will defer making the game more +smooth till the next chapter of the tutorial.

    +

    Also, the cards are organized in a well-defined order right now, starting from Kings and ending with +Aces. This doesn’t make a very exciting gameplay though, so add line

    +
        cards.shuffle();
    +
    +
    +

    in the KlondikeGame class right after the list of cards is created.

    +
    +

    See also

    +

    For more information about tap functionality, see Tap Events.

    +
    +
    +
    +

    Stock pile – visual representation

    +

    Currently, when the stock pile has no cards, it simply shows an empty space – there is no visual +cue that this is where the stock is. Such cue is needed, though, because we want the user to be +able to click the stock pile when it is empty in order to move all the cards from the waste back to +the stock so that they can be dealt again.

    +

    In our case, the empty stock pile will have a card-like border, and a circle in the middle:

    +
      @override
    +  void render(Canvas canvas) {
    +    canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint);
    +    canvas.drawCircle(
    +      Offset(width / 2, height / 2),
    +      KlondikeGame.cardWidth * 0.3,
    +      _circlePaint,
    +    );
    +  }
    +
    +
    +

    where the paints are defined as

    +
      final _borderPaint = Paint()
    +    ..style = PaintingStyle.stroke
    +    ..strokeWidth = 10
    +    ..color = const Color(0xFF3F5B5D);
    +  final _circlePaint = Paint()
    +    ..style = PaintingStyle.stroke
    +    ..strokeWidth = 100
    +    ..color = const Color(0x883F5B5D);
    +
    +
    +

    and the cardRRect in the KlondikeGame class as

    +
      static final cardRRect = RRect.fromRectAndRadius(
    +    const Rect.fromLTWH(0, 0, cardWidth, cardHeight),
    +    const Radius.circular(cardRadius),
    +  );
    +
    +
    +

    Now when you click through the stock pile till the end, you should be able to see the placeholder +for the stock cards.

    +
    +
    +

    Stock pile – refill from the waste

    +

    The last piece of functionality to add, is to move the cards back from the waste pile into the stock +pile when the user taps on an empty stock. To implement this, we will modify the onTapUp() method +like so:

    +
      @override
    +  void onTapUp(TapUpEvent event) {
    +    final wastePile = parent!.firstChild<WastePile>()!;
    +    if (_cards.isEmpty) {
    +      wastePile.removeAllCards().reversed.forEach((card) {
    +        card.flip();
    +        acquireCard(card);
    +      });
    +    } else {
    +      for (var i = 0; i < 3; i++) {
    +        if (_cards.isNotEmpty) {
    +          final card = _cards.removeLast();
    +          card.flip();
    +          wastePile.acquireCard(card);
    +        }
    +      }
    +    }
    +  }
    +
    +
    +

    If you’re curious why we needed to reverse the list of cards removed from the waste pile, then it is +because we want to simulate the entire waste pile being turned over at once, and not each card being +flipped one by one in their places. You can check that this is working as intended by verifying that +on each subsequent run through the stock pile, the cards are dealt in the same order as they were +dealt in the first run.

    +

    The method WastePile.removeAllCards() still needs to be implemented though:

    +
      List<Card> removeAllCards() {
    +    final cards = _cards.toList();
    +    _cards.clear();
    +    return cards;
    +  }
    +
    +
    +

    This pretty much concludes the StockPile functionality, and we already implemented the WastePile +– so the only two components remaining are the FoundationPile and the TableauPile. We’ll start +with the first one because it looks simpler.

    +
    +
    +

    Foundation piles

    +

    The foundation piles are the four piles in the top right corner of the game. This is where we +will be building the ordered runs of cards from Ace to King. The functionality of this class is +similar to the StockPile and the WastePile: it has to be able to hold cards face up, and there +has to be some visual to show where the foundation is when there are no cards there.

    +

    First, let’s implement the card-holding logic:

    +
    class FoundationPile extends PositionComponent {
    +  FoundationPile({super.position}) : super(size: KlondikeGame.cardSize);
    +
    +  final List<Card> _cards = [];
    +
    +  void acquireCard(Card card) {
    +    assert(card.isFaceUp);
    +    card.position = position;
    +    card.priority = _cards.length;
    +    _cards.add(card);
    +  }
    +}
    +
    +
    +

    For visual representation of a foundation, I’ve decided to make a large icon of that foundation’s +suit, in grey color. Which means we’d need to update the definition of the class to include the +suit information:

    +
    class FoundationPile extends PositionComponent {
    +  FoundationPile(int intSuit, {super.position})
    +      : suit = Suit.fromInt(intSuit),
    +        super(size: KlondikeGame.cardSize);
    +
    +  final Suit suit;
    +  ...
    +}
    +
    +
    +

    The code in the KlondikeGame class that generates the foundations will have to be adjusted +accordingly in order to pass the suit index to each foundation.

    +

    Now, the rendering code for the foundation pile will look like this:

    +
      @override
    +  void render(Canvas canvas) {
    +    canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint);
    +    suit.sprite.render(
    +      canvas,
    +      position: size / 2,
    +      anchor: Anchor.center,
    +      size: Vector2.all(KlondikeGame.cardWidth * 0.6),
    +      overridePaint: _suitPaint,
    +    );
    +  }
    +
    +
    +

    Here we need to have two paint objects, one for the border and one for the suits:

    +
      final _borderPaint = Paint()
    +    ..style = PaintingStyle.stroke
    +    ..strokeWidth = 10
    +    ..color = const Color(0x50ffffff);
    +  late final _suitPaint = Paint()
    +    ..color = suit.isRed? const Color(0x3a000000) : const Color(0x64000000)
    +    ..blendMode = BlendMode.luminosity;
    +
    +
    +

    The suit paint uses BlendMode.luminosity in order to convert the regular yellow/blue colors of +the suit sprites into grayscale. The “color” of the paint is different depending whether the suit +is red or black because the original luminosity of those sprites is different. Therefore, I had to +pick two different colors in order to make them look the same in grayscale.

    +
    +
    +

    Tableau Piles

    +

    The last piece of the game to be implemented is the TableauPile component. There are seven of +these piles in total, and they are where the majority of the game play is happening.

    +

    The TableauPile also needs a visual representation, in order to indicate that it’s a place where +a King can be placed when it is empty. I believe it could be just an empty frame, and that should +be sufficient:

    +
    class TableauPile extends PositionComponent {
    +  TableauPile({super.position}) : super(size: KlondikeGame.cardSize);
    +
    +  final _borderPaint = Paint()
    +    ..style = PaintingStyle.stroke
    +    ..strokeWidth = 10
    +    ..color = const Color(0x50ffffff);
    +
    +  @override
    +  void render(Canvas canvas) {
    +    canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint);
    +  }
    +}
    +
    +
    +

    Oh, and the class will need to be able hold the cards too, obviously. Here, some of the cards will +be face down, while others will be face up. Also we will need a small amount of vertical fanning, +similar to how we did it for the WastePile component:

    +
      /// Which cards are currently placed onto this pile.
    +  final List<Card> _cards = [];
    +  final Vector2 _fanOffset = Vector2(0, KlondikeGame.cardHeight * 0.05);
    +
    +  void acquireCard(Card card) {
    +    if (_cards.isEmpty) {
    +      card.position = position;
    +    } else {
    +      card.position = _cards.last.position + _fanOffset;
    +    }
    +    card.priority = _cards.length;
    +    _cards.add(card);
    +  }
    +
    +
    +

    All that remains now is to head over to the KlondikeGame and make sure that the cards are dealt +into the TableauPiles at the beginning of the game. Modify the code at the end of the onLoad() +method so that it looks like this:

    +
      @override
    +  Future<void> onLoad() async {
    +    ...
    +
    +    final cards = [
    +      for (var rank = 1; rank <= 13; rank++)
    +        for (var suit = 0; suit < 4; suit++)
    +          Card(rank, suit)
    +    ];
    +    cards.shuffle();
    +    world.addAll(cards);
    +
    +    int cardToDeal = cards.length - 1;
    +    for (var i = 0; i < 7; i++) {
    +      for (var j = i; j < 7; j++) {
    +        piles[j].acquireCard(cards[cardToDeal--]);
    +      }
    +      piles[i].flipTopCard();
    +    }
    +    for(int n = 0; n <= cardToDeal; n++) {
    +      stock.acquireCard(cards[n]);
    +    }
    +  }
    +
    +
    +

    Note how we deal the cards from the deck and place them into TableauPiles one by one, and only +after that we put the remaining cards into the stock.

    +

    Recall that we decided earlier that all the cards would be owned by the KlondikeGame itself. So +they are put into a generated List structure called cards, shuffled and added to the world. This +List should always have 52 cards in it, so a descending index cardToDeal is used to deal 28 cards +one by one from the top of the deck into piles that acquire references to the cards in the deck. An +ascending index is used to deal the remaining 24 cards into the stock in correct shuffled order. At +the end of the deal there are still 52 Card objects in the cards list. In the card piles we +used removeList() to retrieve a card from a pile, but not here because it would remove cards +from KlondikeGame’s ownership.

    +

    The flipTopCard method in the TableauPile class is as trivial as it sounds:

    +
      void flipTopCard() {
    +    assert(_cards.last.isFaceDown);
    +    _cards.last.flip();
    +  }
    +
    +
    +

    If you run the game at this point, it would be nicely set up and look as if it was ready to play. +Except that we can’t move the cards yet, which is kinda a deal-breaker here. So without further ado, +presenting you the next section:

    +
    +
    +
    +

    Moving the cards

    +

    Moving the cards is a somewhat more complicated topic than what we have had so far. We will split +it into several smaller steps:

    +
      +
    1. Simple movement: grab a card and move it around.

    2. +
    3. Ensure that the user can only move the cards that they are allowed to.

    4. +
    5. Check that the cards are dropped at proper destinations.

    6. +
    7. Drag a run of cards.

    8. +
    +
    +

    1. Simple movement

    +

    So, we want to be able to drag the cards on the screen. This is even simpler than making the +StockPile tappable: just head over into the Card class and add the DragCallbacks mixin:

    +
    class Card extends PositionComponent with DragCallbacks {
    +}
    +
    +
    +

    The next step is to implement the actual drag event callbacks: onDragStart, onDragUpdate, and +onDragEnd.

    +

    When the drag gesture is initiated, the first thing that we need to do is to raise the priority of +the card, so that it is rendered above all others. Without this, the card would be occasionally +“sliding beneath” other cards, which would look most unnatural:

    +
      @override
    +  void onDragStart(DragStartEvent event) {
    +    priority = 100;
    +  }
    +
    +
    +

    During the drag, the onDragUpdate event will be called continuously. Using this callback we will +be updating the position of the card so that it follows the movement of the finger (or the mouse). +The event object passed to this callback contains the most recent coordinate of the point of +touch, and also the localDelta property – which is the displacement vector since the previous +call of onDragUpdate, considering the camera zoom.

    +
      @override
    +  void onDragUpdate(DragUpdateEvent event) {
    +    position += event.delta;
    +  }
    +
    +
    +

    So far this allows you to grab any card and drag it anywhere around the table. What we want, +however, is to be able to restrict where the card is allowed or not allowed to go. This is where +the core of the logic of the game begins.

    +
    +
    +

    2. Move only allowed cards

    +

    The first restriction that we impose is that the user should only be able to drag the cards that we +allow, which include: (1) the top card of a waste pile, (2) the top card of a foundation pile, and +(3) any face-up card in a tableau pile.

    +

    Thus, in order to determine whether a card can be moved or not, we need to know which pile it +currently belongs to. There could be several ways that we go about it, but seemingly the most +straightforward is to let every card keep a reference to the pile in which it currently resides.

    +

    So, let’s start by defining the abstract interface Pile that all our existing piles will be +implementing:

    +
    abstract class Pile {
    +  bool canMoveCard(Card card);
    +}
    +
    +
    +

    We will expand this class further later, but for now let’s make sure that each of the classes +StockPile, WastePile, FoundationPile, and TableauPile are marked as implementing this +interface:

    +
    class StockPile extends PositionComponent with TapCallbacks implements Pile {
    +  ...
    +  @override
    +  bool canMoveCard(Card card) => false;
    +}
    +
    +class WastePile extends PositionComponent implements Pile {
    +  ...
    +  @override
    +  bool canMoveCard(Card card) => _cards.isNotEmpty && card == _cards.last;
    +}
    +
    +class FoundationPile extends PositionComponent implements Pile {
    +  ...
    +  @override
    +  bool canMoveCard(Card card) => _cards.isNotEmpty && card == _cards.last;
    +}
    +
    +class TableauPile extends PositionComponent implements Pile {
    +  ...
    +  @override
    +  bool canMoveCard(Card card) => _cards.isNotEmpty && card == _cards.last;
    +}
    +
    +
    +

    We also wanted to let every Card know which pile it is currently in. For this, add the field +Pile? pile into the Card class, and make sure to set it in each pile’s acquireCard() method, +like so:

    +
      void acquireCard(Card card) {
    +    ...
    +    card.pile = this;
    +  }
    +
    +
    +

    Now we can put this new functionality to use: go into the Card.onDragStart() method and modify +it so that it would check whether the card is allowed to be moved before starting the drag:

    +
      void onDragStart(DragStartEvent event) {
    +    if (pile?.canMoveCard(this) ?? false) {
    +      super.onDragStart(event);
    +      priority = 100;
    +    }
    +  }
    +
    +
    +

    We have also added a call to super.onDragStart() which sets an _isDragged variable to true +in the DragCallbacks mixin, we need to check this flag via the public isDragged getter in +the onDragUpdate() method and use super.onDragEnd() in onDragEnd() so the flag is set back +to false:

    +
      @override
    +  void onDragUpdate(DragUpdateEvent event) {
    +    if (!isDragged) {
    +      return;
    +    }
    +    position += event.delta;
    +  }
    +
    +  @override
    +  void onDragEnd(DragEndEvent event) {
    +    super.onDragEnd(event);
    +  }
    +
    +
    +

    Now only the proper cards can be dragged, but they still drop at random positions on the table, +so let’s work on that.

    +
    +
    +

    3. Dropping the cards at proper locations

    +

    At this point what we want to do is to figure out where the dragged card is being dropped. More +specifically, we want to know into which pile it is being dropped. This can be achieved by using +the componentsAtPoint() API, which allows you to query which components are located at a given +position on the screen.

    +

    Thus, my first attempt at revising the onDragEnd callback looks like this:

    +
      @override
    +  void onDragEnd(DragEndEvent event) {
    +    if (!isDragged) {
    +      return;
    +    }
    +    super.onDragEnd(event);
    +    final dropPiles = parent!
    +        .componentsAtPoint(position + size / 2)
    +        .whereType<Pile>()
    +        .toList();
    +    if (dropPiles.isNotEmpty) {
    +      // if (card is allowed to be dropped into this pile) {
    +      //   remove the card from the current pile
    +      //   add the card into the new pile
    +      // }
    +    }
    +    // return the card to where it was originally
    +  }
    +
    +
    +

    This still contains several placeholders for the functionality that still needs to be implemented, +so let’s get to it.

    +

    First piece of the puzzle is the “is card allowed to be dropped here?” check. To implement this, +first head over into the Pile class and add the canAcceptCard() abstract method:

    +
    abstract class Pile {
    +  ...
    +  bool canAcceptCard(Card card);
    +}
    +
    +
    +

    Obviously this now needs to be implemented for every Pile subclass, so let’s get to it:

    +
    class FoundationPile ... implements Pile {
    +  ...
    +  @override
    +  bool canAcceptCard(Card card) {
    +    final topCardRank = _cards.isEmpty? 0 : _cards.last.rank.value;
    +    return card.suit == suit && card.rank.value == topCardRank + 1;
    +  }
    +}
    +
    +class TableauPile ... implements Pile {
    +  ...
    +  @override
    +  bool canAcceptCard(Card card) {
    +    if (_cards.isEmpty) {
    +      return card.rank.value == 13;
    +    } else {
    +      final topCard = _cards.last;
    +      return card.suit.isRed == !topCard.suit.isRed &&
    +          card.rank.value == topCard.rank.value - 1;
    +    }
    +  }
    +}
    +
    +
    +

    (for the StockPile and the WastePile the method should just return false, since no cards should +be dropped there).

    +

    Alright, next part is the “remove the card from its current pile”. Once again, let’s head over to +the Pile class and add the removeCard() abstract method:

    +
    abstract class Pile {
    +  ...
    +  void removeCard(Card card);
    +}
    +
    +
    +

    Then we need to re-visit all four pile subclasses and implement this method:

    +
    class StockPile ... implements Pile {
    +  ...
    +  @override
    +  void removeCard(Card card) => throw StateError('cannot remove cards from here');
    +}
    +
    +class WastePile ... implements Pile {
    +  ...
    +  @override
    +  void removeCard(Card card) {
    +    assert(canMoveCard(card));
    +    _cards.removeLast();
    +    _fanOutTopCards();
    +  }
    +}
    +
    +class FoundationPile ... implements Pile {
    +  ...
    +  @override
    +  void removeCard(Card card) {
    +    assert(canMoveCard(card));
    +    _cards.removeLast();
    +  }
    +}
    +
    +class TableauPile ... implements Pile {
    +  ...
    +  @override
    +  void removeCard(Card card) {
    +    assert(_cards.contains(card) && card.isFaceUp);
    +    final index = _cards.indexOf(card);
    +    _cards.removeRange(index, _cards.length);
    +    if (_cards.isNotEmpty && _cards.last.isFaceDown) {
    +      flipTopCard();
    +    }
    +  }
    +}
    +
    +
    +

    The next action in our pseudo-code is to “add the card to the new pile”. But this one we have +already implemented: it’s the acquireCard() method. So all we need is to declare it in the Pile +interface:

    +
    abstract class Pile {
    +  ...
    +  void acquireCard(Card card);
    +}
    +
    +
    +

    The last piece that’s missing is “return the card to where it was”. You can probably guess how we +are going to go about this one: add the returnCard() method into the Pile interface, and then +implement this method in all four pile subclasses:

    +
    class StockPile ... implements Pile {
    +  ...
    +  @override
    +  void returnCard(Card card) => throw StateError('cannot remove cards from here');
    +}
    +
    +class WastePile ... implements Pile {
    +  ...
    +  @override
    +  void returnCard(Card card) {
    +    card.priority = _cards.indexOf(card);
    +    _fanOutTopCards();
    +  }
    +}
    +
    +class FoundationPile ... implements Pile {
    +  ...
    +  @override
    +  void returnCard(Card card) {
    +    card.position = position;
    +    card.priority = _cards.indexOf(card);
    +  }
    +}
    +
    +class TableauPile ... implements Pile {
    +  ...
    +  @override
    +  void returnCard(Card card) {
    +    final index = _cards.indexOf(card);
    +    card.position =
    +        index == 0 ? position : _cards[index - 1].position + _fanOffset;
    +    card.priority = index;
    +  }
    +}
    +
    +
    +

    Now, putting this all together, the Card’s onDragEnd method will look like this:

    +
      @override
    +  void onDragEnd(DragEndEvent event) {
    +    if (!isDragged) {
    +      return;
    +    }
    +    super.onDragEnd(event);
    +    final dropPiles = parent!
    +        .componentsAtPoint(position + size / 2)
    +        .whereType<Pile>()
    +        .toList();
    +    if (dropPiles.isNotEmpty) {
    +      if (dropPiles.first.canAcceptCard(this)) {
    +        pile!.removeCard(this);
    +        dropPiles.first.acquireCard(this);
    +        return;
    +      }
    +    }
    +    pile!.returnCard(this);
    +  }
    +
    +
    +

    Ok, that was quite a lot of work – but if you run the game now, you’d be able to move the cards +properly from one pile to another, and they will never go where they are not supposed to go. The +only thing that remains is to be able to move multiple cards at once between tableau piles. So take +a short break, and then on to the next section!

    +
    +
    +

    4. Moving a run of cards

    +

    In this section we will be implementing the necessary changes to allow us to move small stacks of +cards between the tableau piles. Before we begin, though, we need to make a small fix first.

    +

    You have probably noticed when running the game in the previous section that the cards in the +tableau piles clamp too closely together. That is, they are at the correct distance when they face +down, but they should be at a larger distance when they face up, which is not currently the case. +This makes it really difficult to see which cards are available for dragging.

    +

    So, let’s head over into the TableauPile class and create a new method layOutCards(), whose job +would be to ensure that all cards currently in the pile have the right positions:

    +
      final Vector2 _fanOffset1 = Vector2(0, KlondikeGame.cardHeight * 0.05);
    +  final Vector2 _fanOffset2 = Vector2(0, KlondikeGame.cardHeight * 0.20);
    +
    +  void layOutCards() {
    +    if (_cards.isEmpty) {
    +      return;
    +    }
    +    _cards[0].position.setFrom(position);
    +    for (var i = 1; i < _cards.length; i++) {
    +      _cards[i].position
    +        ..setFrom(_cards[i - 1].position)
    +        ..add(_cards[i - 1].isFaceDown ? _fanOffset1 : _fanOffset2);
    +    }
    +  }
    +
    +
    +

    Make sure to call this method at the end of removeCard(), returnCard(), and acquireCard() – +replacing any current logic that handles card positioning.

    +

    Another problem that you may have noticed is that for taller card stacks it becomes hard to place a +card there. This is because our logic for determining in which pile the card is being dropped checks +whether the center of the card is inside any of the TableauPile components – but those components +have only the size of a single card! To fix this inconsistency, all we need is to declare that the +height of the tableau pile is at least as tall as all the cards in it, or even higher. Add this line +at the end of the layOutCards() method:

    +
        height = KlondikeGame.cardHeight * 1.5 + _cards.last.y - _cards.first.y;
    +
    +
    +

    The factor 1.5 here adds a little bit extra space at the bottom of each pile. The card to be +dropped should be overlapping the hitbox by a little over half its width and height. If you are +approaching from below, it would be just overlapping the nearest card (i.e. the one that is fully +visible). You can temporarily turn the debug mode on to see the hitboxes.

    +

    Illustration of Tableau Pile Hitboxes

    +

    Ok, let’s get to our main topic: how to move a stack of cards at once.

    +

    First thing that we’re going to add is the list of attachedCards for every card. This list will +be non-empty only when the card is being dragged while having other cards on top. Add the following +declaration to the Card class:

    +
      final List<Card> attachedCards = [];
    +
    +
    +

    Now, in order to create this list in onDragStart, we need to query the TableauPile for the list +of cards that are on top of the given card. Let’s add such a method into the TableauPile class:

    +
      List<Card> cardsOnTop(Card card) {
    +    assert(card.isFaceUp && _cards.contains(card));
    +    final index = _cards.indexOf(card);
    +    return _cards.getRange(index + 1, _cards.length).toList();
    +  }
    +
    +
    +

    While we are in the TableauPile class, let’s also update the canMoveCard() method to allow +dragging cards that are not necessarily on top:

    +
      @override
    +  bool canMoveCard(Card card) => card.isFaceUp;
    +
    +
    +

    Heading back into the Card class, we can use this method in order to populate the list of +attachedCards when the card starts to move:

    +
      @override
    +  void onDragStart(DragStartEvent event) {
    +    if (pile?.canMoveCard(this) ?? false) {
    +      super.onDragStart();
    +      priority = 100;
    +      if (pile is TableauPile) {
    +        attachedCards.clear();
    +        final extraCards = (pile! as TableauPile).cardsOnTop(this);
    +        for (final card in extraCards) {
    +          card.priority = attachedCards.length + 101;
    +          attachedCards.add(card);
    +        }
    +      }
    +    }
    +  }
    +
    +
    +

    Now all we need to do is to make sure that the attached cards are also moved with the main card in +the onDragUpdate method:

    +
      @override
    +  void onDragUpdate(DragUpdateEvent event) {
    +    if (!isDragged) {
    +      return;
    +    }
    +    final delta = event.delta;
    +    position.add(delta);
    +    attachedCards.forEach((card) => card.position.add(delta));
    +  }
    +
    +
    +

    This does the trick, almost. All that remains is to fix any loose ends. For example, we don’t want +to let the user drop a stack of cards onto a foundation pile, so let’s head over into the +FoundationPile class and modify the canAcceptCard() method accordingly:

    +
      @override
    +  bool canAcceptCard(Card card) {
    +    final topCardRank = _cards.isEmpty ? 0 : _cards.last.rank.value;
    +    return card.suit == suit &&
    +        card.rank.value == topCardRank + 1 &&
    +        card.attachedCards.isEmpty;
    +  }
    +
    +
    +

    Secondly, we need to properly take care of the stack of card as it is being dropped into a tableau +pile. So, go back into the Card class and update its onDragEnd() method to also move the +attached cards into the pile, and the same when it comes to returning the cards into the old pile:

    +
      @override
    +  void onDragEnd(DragEndEvent event) {
    +    if (!isDragged) {
    +      return;
    +    }
    +    super.onDragEnd(event);
    +    final dropPiles = parent!
    +        .componentsAtPoint(position + size / 2)
    +        .whereType<Pile>()
    +        .toList();
    +    if (dropPiles.isNotEmpty) {
    +      if (dropPiles.first.canAcceptCard(this)) {
    +        pile!.removeCard(this);
    +        dropPiles.first.acquireCard(this);
    +        if (attachedCards.isNotEmpty) {
    +          attachedCards.forEach((card) => dropPiles.first.acquireCard(card));
    +          attachedCards.clear();
    +        }
    +        return;
    +      }
    +    }
    +    pile!.returnCard(this);
    +    if (attachedCards.isNotEmpty) {
    +      attachedCards.forEach((card) => pile!.returnCard(card));
    +      attachedCards.clear();
    +    }
    +  }
    +
    +
    +

    Well, this is it! The game is now fully playable. Press the button below to see what the resulting +code looks like, or to play it live. In the next section we will discuss how to make it more +animated with the help of effects.

    +
    +
    +components/card.dart
    +
      1import 'dart:math';
    +  2import 'dart:ui';
    +  3
    +  4import 'package:flame/components.dart';
    +  5import 'package:flame/events.dart';
    +  6import '../klondike_game.dart';
    +  7import '../pile.dart';
    +  8import '../rank.dart';
    +  9import '../suit.dart';
    + 10import 'tableau_pile.dart';
    + 11
    + 12class Card extends PositionComponent with DragCallbacks {
    + 13  Card(int intRank, int intSuit)
    + 14      : rank = Rank.fromInt(intRank),
    + 15        suit = Suit.fromInt(intSuit),
    + 16        super(size: KlondikeGame.cardSize);
    + 17
    + 18  final Rank rank;
    + 19  final Suit suit;
    + 20  Pile? pile;
    + 21  bool _faceUp = false;
    + 22  bool _isDragging = false;
    + 23  final List<Card> attachedCards = [];
    + 24
    + 25  bool get isFaceUp => _faceUp;
    + 26  bool get isFaceDown => !_faceUp;
    + 27  void flip() => _faceUp = !_faceUp;
    + 28
    + 29  @override
    + 30  String toString() => rank.label + suit.label; // e.g. "Q♠" or "10♦"
    + 31
    + 32  //#region Rendering
    + 33
    + 34  @override
    + 35  void render(Canvas canvas) {
    + 36    if (_faceUp) {
    + 37      _renderFront(canvas);
    + 38    } else {
    + 39      _renderBack(canvas);
    + 40    }
    + 41  }
    + 42
    + 43  static final Paint backBackgroundPaint = Paint()
    + 44    ..color = const Color(0xff380c02);
    + 45  static final Paint backBorderPaint1 = Paint()
    + 46    ..color = const Color(0xffdbaf58)
    + 47    ..style = PaintingStyle.stroke
    + 48    ..strokeWidth = 10;
    + 49  static final Paint backBorderPaint2 = Paint()
    + 50    ..color = const Color(0x5CEF971B)
    + 51    ..style = PaintingStyle.stroke
    + 52    ..strokeWidth = 35;
    + 53  static final RRect cardRRect = RRect.fromRectAndRadius(
    + 54    KlondikeGame.cardSize.toRect(),
    + 55    const Radius.circular(KlondikeGame.cardRadius),
    + 56  );
    + 57  static final RRect backRRectInner = cardRRect.deflate(40);
    + 58  static final Sprite flameSprite = klondikeSprite(1367, 6, 357, 501);
    + 59
    + 60  void _renderBack(Canvas canvas) {
    + 61    canvas.drawRRect(cardRRect, backBackgroundPaint);
    + 62    canvas.drawRRect(cardRRect, backBorderPaint1);
    + 63    canvas.drawRRect(backRRectInner, backBorderPaint2);
    + 64    flameSprite.render(canvas, position: size / 2, anchor: Anchor.center);
    + 65  }
    + 66
    + 67  static final Paint frontBackgroundPaint = Paint()
    + 68    ..color = const Color(0xff000000);
    + 69  static final Paint redBorderPaint = Paint()
    + 70    ..color = const Color(0xffece8a3)
    + 71    ..style = PaintingStyle.stroke
    + 72    ..strokeWidth = 10;
    + 73  static final Paint blackBorderPaint = Paint()
    + 74    ..color = const Color(0xff7ab2e8)
    + 75    ..style = PaintingStyle.stroke
    + 76    ..strokeWidth = 10;
    + 77  static final blueFilter = Paint()
    + 78    ..colorFilter = const ColorFilter.mode(
    + 79      Color(0x880d8bff),
    + 80      BlendMode.srcATop,
    + 81    );
    + 82  static final Sprite redJack = klondikeSprite(81, 565, 562, 488);
    + 83  static final Sprite redQueen = klondikeSprite(717, 541, 486, 515);
    + 84  static final Sprite redKing = klondikeSprite(1305, 532, 407, 549);
    + 85  static final Sprite blackJack = klondikeSprite(81, 565, 562, 488)
    + 86    ..paint = blueFilter;
    + 87  static final Sprite blackQueen = klondikeSprite(717, 541, 486, 515)
    + 88    ..paint = blueFilter;
    + 89  static final Sprite blackKing = klondikeSprite(1305, 532, 407, 549)
    + 90    ..paint = blueFilter;
    + 91
    + 92  void _renderFront(Canvas canvas) {
    + 93    canvas.drawRRect(cardRRect, frontBackgroundPaint);
    + 94    canvas.drawRRect(
    + 95      cardRRect,
    + 96      suit.isRed ? redBorderPaint : blackBorderPaint,
    + 97    );
    + 98
    + 99    final rankSprite = suit.isBlack ? rank.blackSprite : rank.redSprite;
    +100    final suitSprite = suit.sprite;
    +101    _drawSprite(canvas, rankSprite, 0.1, 0.08);
    +102    _drawSprite(canvas, suitSprite, 0.1, 0.18, scale: 0.5);
    +103    _drawSprite(canvas, rankSprite, 0.1, 0.08, rotate: true);
    +104    _drawSprite(canvas, suitSprite, 0.1, 0.18, scale: 0.5, rotate: true);
    +105    switch (rank.value) {
    +106      case 1:
    +107        _drawSprite(canvas, suitSprite, 0.5, 0.5, scale: 2.5);
    +108      case 2:
    +109        _drawSprite(canvas, suitSprite, 0.5, 0.25);
    +110        _drawSprite(canvas, suitSprite, 0.5, 0.25, rotate: true);
    +111      case 3:
    +112        _drawSprite(canvas, suitSprite, 0.5, 0.2);
    +113        _drawSprite(canvas, suitSprite, 0.5, 0.5);
    +114        _drawSprite(canvas, suitSprite, 0.5, 0.2, rotate: true);
    +115      case 4:
    +116        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +117        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +118        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +119        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +120      case 5:
    +121        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +122        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +123        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +124        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +125        _drawSprite(canvas, suitSprite, 0.5, 0.5);
    +126      case 6:
    +127        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +128        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +129        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +130        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +131        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +132        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +133      case 7:
    +134        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +135        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +136        _drawSprite(canvas, suitSprite, 0.5, 0.35);
    +137        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +138        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +139        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +140        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +141      case 8:
    +142        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +143        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +144        _drawSprite(canvas, suitSprite, 0.5, 0.35);
    +145        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +146        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +147        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +148        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +149        _drawSprite(canvas, suitSprite, 0.5, 0.35, rotate: true);
    +150      case 9:
    +151        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +152        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +153        _drawSprite(canvas, suitSprite, 0.5, 0.3);
    +154        _drawSprite(canvas, suitSprite, 0.3, 0.4);
    +155        _drawSprite(canvas, suitSprite, 0.7, 0.4);
    +156        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +157        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +158        _drawSprite(canvas, suitSprite, 0.3, 0.4, rotate: true);
    +159        _drawSprite(canvas, suitSprite, 0.7, 0.4, rotate: true);
    +160      case 10:
    +161        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +162        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +163        _drawSprite(canvas, suitSprite, 0.5, 0.3);
    +164        _drawSprite(canvas, suitSprite, 0.3, 0.4);
    +165        _drawSprite(canvas, suitSprite, 0.7, 0.4);
    +166        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +167        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +168        _drawSprite(canvas, suitSprite, 0.5, 0.3, rotate: true);
    +169        _drawSprite(canvas, suitSprite, 0.3, 0.4, rotate: true);
    +170        _drawSprite(canvas, suitSprite, 0.7, 0.4, rotate: true);
    +171      case 11:
    +172        _drawSprite(canvas, suit.isRed ? redJack : blackJack, 0.5, 0.5);
    +173      case 12:
    +174        _drawSprite(canvas, suit.isRed ? redQueen : blackQueen, 0.5, 0.5);
    +175      case 13:
    +176        _drawSprite(canvas, suit.isRed ? redKing : blackKing, 0.5, 0.5);
    +177    }
    +178  }
    +179
    +180  void _drawSprite(
    +181    Canvas canvas,
    +182    Sprite sprite,
    +183    double relativeX,
    +184    double relativeY, {
    +185    double scale = 1,
    +186    bool rotate = false,
    +187  }) {
    +188    if (rotate) {
    +189      canvas.save();
    +190      canvas.translate(size.x / 2, size.y / 2);
    +191      canvas.rotate(pi);
    +192      canvas.translate(-size.x / 2, -size.y / 2);
    +193    }
    +194    sprite.render(
    +195      canvas,
    +196      position: Vector2(relativeX * size.x, relativeY * size.y),
    +197      anchor: Anchor.center,
    +198      size: sprite.srcSize.scaled(scale),
    +199    );
    +200    if (rotate) {
    +201      canvas.restore();
    +202    }
    +203  }
    +204
    +205  //#endregion
    +206
    +207  //#region Dragging
    +208
    +209  @override
    +210  void onDragStart(DragStartEvent event) {
    +211    super.onDragStart(event);
    +212    if (pile?.canMoveCard(this) ?? false) {
    +213      _isDragging = true;
    +214      priority = 100;
    +215      if (pile is TableauPile) {
    +216        attachedCards.clear();
    +217        final extraCards = (pile! as TableauPile).cardsOnTop(this);
    +218        for (final card in extraCards) {
    +219          card.priority = attachedCards.length + 101;
    +220          attachedCards.add(card);
    +221        }
    +222      }
    +223    }
    +224  }
    +225
    +226  @override
    +227  void onDragUpdate(DragUpdateEvent event) {
    +228    if (!_isDragging) {
    +229      return;
    +230    }
    +231    final delta = event.localDelta;
    +232    position.add(delta);
    +233    attachedCards.forEach((card) => card.position.add(delta));
    +234  }
    +235
    +236  @override
    +237  void onDragEnd(DragEndEvent event) {
    +238    super.onDragEnd(event);
    +239    if (!_isDragging) {
    +240      return;
    +241    }
    +242    _isDragging = false;
    +243    final dropPiles = parent!
    +244        .componentsAtPoint(position + size / 2)
    +245        .whereType<Pile>()
    +246        .toList();
    +247    if (dropPiles.isNotEmpty) {
    +248      if (dropPiles.first.canAcceptCard(this)) {
    +249        pile!.removeCard(this);
    +250        dropPiles.first.acquireCard(this);
    +251        if (attachedCards.isNotEmpty) {
    +252          attachedCards.forEach((card) => dropPiles.first.acquireCard(card));
    +253          attachedCards.clear();
    +254        }
    +255        return;
    +256      }
    +257    }
    +258    pile!.returnCard(this);
    +259    if (attachedCards.isNotEmpty) {
    +260      attachedCards.forEach((card) => pile!.returnCard(card));
    +261      attachedCards.clear();
    +262    }
    +263  }
    +264
    +265  //#endregion
    +266}
    +
    +
    +
    +components/foundation_pile.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:flame/components.dart';
    + 4
    + 5import '../klondike_game.dart';
    + 6import '../pile.dart';
    + 7import '../suit.dart';
    + 8import 'card.dart';
    + 9
    +10class FoundationPile extends PositionComponent implements Pile {
    +11  FoundationPile(int intSuit, {super.position})
    +12      : suit = Suit.fromInt(intSuit),
    +13        super(size: KlondikeGame.cardSize);
    +14
    +15  final Suit suit;
    +16  final List<Card> _cards = [];
    +17
    +18  //#region Pile API
    +19
    +20  @override
    +21  bool canMoveCard(Card card) {
    +22    return _cards.isNotEmpty && card == _cards.last;
    +23  }
    +24
    +25  @override
    +26  bool canAcceptCard(Card card) {
    +27    final topCardRank = _cards.isEmpty ? 0 : _cards.last.rank.value;
    +28    return card.suit == suit &&
    +29        card.rank.value == topCardRank + 1 &&
    +30        card.attachedCards.isEmpty;
    +31  }
    +32
    +33  @override
    +34  void removeCard(Card card) {
    +35    assert(canMoveCard(card));
    +36    _cards.removeLast();
    +37  }
    +38
    +39  @override
    +40  void returnCard(Card card) {
    +41    card.position = position;
    +42    card.priority = _cards.indexOf(card);
    +43  }
    +44
    +45  @override
    +46  void acquireCard(Card card) {
    +47    assert(card.isFaceUp);
    +48    card.position = position;
    +49    card.priority = _cards.length;
    +50    card.pile = this;
    +51    _cards.add(card);
    +52  }
    +53
    +54  //#endregion
    +55
    +56  //#region Rendering
    +57
    +58  final _borderPaint = Paint()
    +59    ..style = PaintingStyle.stroke
    +60    ..strokeWidth = 10
    +61    ..color = const Color(0x50ffffff);
    +62  late final _suitPaint = Paint()
    +63    ..color = suit.isRed ? const Color(0x3a000000) : const Color(0x64000000)
    +64    ..blendMode = BlendMode.luminosity;
    +65
    +66  @override
    +67  void render(Canvas canvas) {
    +68    canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint);
    +69    suit.sprite.render(
    +70      canvas,
    +71      position: size / 2,
    +72      anchor: Anchor.center,
    +73      size: Vector2.all(KlondikeGame.cardWidth * 0.6),
    +74      overridePaint: _suitPaint,
    +75    );
    +76  }
    +77
    +78  //#endregion
    +79}
    +
    +
    +
    +components/stock_pile.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:flame/components.dart';
    + 4import 'package:flame/events.dart';
    + 5
    + 6import '../klondike_game.dart';
    + 7import '../pile.dart';
    + 8import 'card.dart';
    + 9import 'waste_pile.dart';
    +10
    +11class StockPile extends PositionComponent with TapCallbacks implements Pile {
    +12  StockPile({super.position}) : super(size: KlondikeGame.cardSize);
    +13
    +14  /// Which cards are currently placed onto this pile. The first card in the
    +15  /// list is at the bottom, the last card is on top.
    +16  final List<Card> _cards = [];
    +17
    +18  //#region Pile API
    +19
    +20  @override
    +21  bool canMoveCard(Card card) => false;
    +22
    +23  @override
    +24  bool canAcceptCard(Card card) => false;
    +25
    +26  @override
    +27  void removeCard(Card card) => throw StateError('cannot remove cards');
    +28
    +29  @override
    +30  void returnCard(Card card) => throw StateError('cannot remove cards');
    +31
    +32  @override
    +33  void acquireCard(Card card) {
    +34    assert(card.isFaceDown);
    +35    card.pile = this;
    +36    card.position = position;
    +37    card.priority = _cards.length;
    +38    _cards.add(card);
    +39  }
    +40
    +41  //#endregion
    +42
    +43  @override
    +44  void onTapUp(TapUpEvent event) {
    +45    final wastePile = parent!.firstChild<WastePile>()!;
    +46    if (_cards.isEmpty) {
    +47      wastePile.removeAllCards().reversed.forEach((card) {
    +48        card.flip();
    +49        acquireCard(card);
    +50      });
    +51    } else {
    +52      for (var i = 0; i < 3; i++) {
    +53        if (_cards.isNotEmpty) {
    +54          final card = _cards.removeLast();
    +55          card.flip();
    +56          wastePile.acquireCard(card);
    +57        }
    +58      }
    +59    }
    +60  }
    +61
    +62  //#region Rendering
    +63
    +64  final _borderPaint = Paint()
    +65    ..style = PaintingStyle.stroke
    +66    ..strokeWidth = 10
    +67    ..color = const Color(0xFF3F5B5D);
    +68  final _circlePaint = Paint()
    +69    ..style = PaintingStyle.stroke
    +70    ..strokeWidth = 100
    +71    ..color = const Color(0x883F5B5D);
    +72
    +73  @override
    +74  void render(Canvas canvas) {
    +75    canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint);
    +76    canvas.drawCircle(
    +77      Offset(width / 2, height / 2),
    +78      KlondikeGame.cardWidth * 0.3,
    +79      _circlePaint,
    +80    );
    +81  }
    +82
    +83  //#endregion
    +84}
    +
    +
    +
    +components/tableau_pile.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:flame/components.dart';
    + 4
    + 5import '../klondike_game.dart';
    + 6import '../pile.dart';
    + 7import 'card.dart';
    + 8
    + 9class TableauPile extends PositionComponent implements Pile {
    +10  TableauPile({super.position}) : super(size: KlondikeGame.cardSize);
    +11
    +12  /// Which cards are currently placed onto this pile.
    +13  final List<Card> _cards = [];
    +14  final Vector2 _fanOffset1 = Vector2(0, KlondikeGame.cardHeight * 0.05);
    +15  final Vector2 _fanOffset2 = Vector2(0, KlondikeGame.cardHeight * 0.20);
    +16
    +17  //#region Pile API
    +18
    +19  @override
    +20  bool canMoveCard(Card card) => card.isFaceUp;
    +21
    +22  @override
    +23  bool canAcceptCard(Card card) {
    +24    if (_cards.isEmpty) {
    +25      return card.rank.value == 13;
    +26    } else {
    +27      final topCard = _cards.last;
    +28      return card.suit.isRed == !topCard.suit.isRed &&
    +29          card.rank.value == topCard.rank.value - 1;
    +30    }
    +31  }
    +32
    +33  @override
    +34  void removeCard(Card card) {
    +35    assert(_cards.contains(card) && card.isFaceUp);
    +36    final index = _cards.indexOf(card);
    +37    _cards.removeRange(index, _cards.length);
    +38    if (_cards.isNotEmpty && _cards.last.isFaceDown) {
    +39      flipTopCard();
    +40    }
    +41    layOutCards();
    +42  }
    +43
    +44  @override
    +45  void returnCard(Card card) {
    +46    card.priority = _cards.indexOf(card);
    +47    layOutCards();
    +48  }
    +49
    +50  @override
    +51  void acquireCard(Card card) {
    +52    card.pile = this;
    +53    card.priority = _cards.length;
    +54    _cards.add(card);
    +55    layOutCards();
    +56  }
    +57
    +58  //#endregion
    +59
    +60  void flipTopCard() {
    +61    assert(_cards.last.isFaceDown);
    +62    _cards.last.flip();
    +63  }
    +64
    +65  void layOutCards() {
    +66    if (_cards.isEmpty) {
    +67      return;
    +68    }
    +69    _cards[0].position.setFrom(position);
    +70    for (var i = 1; i < _cards.length; i++) {
    +71      _cards[i].position
    +72        ..setFrom(_cards[i - 1].position)
    +73        ..add(_cards[i - 1].isFaceDown ? _fanOffset1 : _fanOffset2);
    +74    }
    +75    height = KlondikeGame.cardHeight * 1.5 + _cards.last.y - _cards.first.y;
    +76  }
    +77
    +78  List<Card> cardsOnTop(Card card) {
    +79    assert(card.isFaceUp && _cards.contains(card));
    +80    final index = _cards.indexOf(card);
    +81    return _cards.getRange(index + 1, _cards.length).toList();
    +82  }
    +83
    +84  //#region Rendering
    +85
    +86  final _borderPaint = Paint()
    +87    ..style = PaintingStyle.stroke
    +88    ..strokeWidth = 10
    +89    ..color = const Color(0x50ffffff);
    +90
    +91  @override
    +92  void render(Canvas canvas) {
    +93    canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint);
    +94  }
    +95
    +96  //#endregion
    +97}
    +
    +
    +
    +components/waste_pile.dart
    +
     1import 'package:flame/components.dart';
    + 2
    + 3import '../klondike_game.dart';
    + 4import '../pile.dart';
    + 5import 'card.dart';
    + 6
    + 7class WastePile extends PositionComponent implements Pile {
    + 8  WastePile({super.position}) : super(size: KlondikeGame.cardSize);
    + 9
    +10  final List<Card> _cards = [];
    +11  final Vector2 _fanOffset = Vector2(KlondikeGame.cardWidth * 0.2, 0);
    +12
    +13  //#region Pile API
    +14
    +15  @override
    +16  bool canMoveCard(Card card) => _cards.isNotEmpty && card == _cards.last;
    +17
    +18  @override
    +19  bool canAcceptCard(Card card) => false;
    +20
    +21  @override
    +22  void removeCard(Card card) {
    +23    assert(canMoveCard(card));
    +24    _cards.removeLast();
    +25    _fanOutTopCards();
    +26  }
    +27
    +28  @override
    +29  void returnCard(Card card) {
    +30    card.priority = _cards.indexOf(card);
    +31    _fanOutTopCards();
    +32  }
    +33
    +34  @override
    +35  void acquireCard(Card card) {
    +36    assert(card.isFaceUp);
    +37    card.pile = this;
    +38    card.position = position;
    +39    card.priority = _cards.length;
    +40    _cards.add(card);
    +41    _fanOutTopCards();
    +42  }
    +43
    +44  //#endregion
    +45
    +46  List<Card> removeAllCards() {
    +47    final cards = _cards.toList();
    +48    _cards.clear();
    +49    return cards;
    +50  }
    +51
    +52  void _fanOutTopCards() {
    +53    final n = _cards.length;
    +54    for (var i = 0; i < n; i++) {
    +55      _cards[i].position = position;
    +56    }
    +57    if (n == 2) {
    +58      _cards[1].position.add(_fanOffset);
    +59    } else if (n >= 3) {
    +60      _cards[n - 2].position.add(_fanOffset);
    +61      _cards[n - 1].position.addScaled(_fanOffset, 2);
    +62    }
    +63  }
    +64}
    +
    +
    +
    +klondike_game.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:flame/components.dart';
    + 4import 'package:flame/flame.dart';
    + 5import 'package:flame/game.dart';
    + 6
    + 7import 'components/card.dart';
    + 8import 'components/foundation_pile.dart';
    + 9import 'components/stock_pile.dart';
    +10import 'components/tableau_pile.dart';
    +11import 'components/waste_pile.dart';
    +12
    +13class KlondikeGame extends FlameGame {
    +14  static const double cardGap = 175.0;
    +15  static const double cardWidth = 1000.0;
    +16  static const double cardHeight = 1400.0;
    +17  static const double cardRadius = 100.0;
    +18  static final Vector2 cardSize = Vector2(cardWidth, cardHeight);
    +19  static final cardRRect = RRect.fromRectAndRadius(
    +20    const Rect.fromLTWH(0, 0, cardWidth, cardHeight),
    +21    const Radius.circular(cardRadius),
    +22  );
    +23
    +24  @override
    +25  Future<void> onLoad() async {
    +26    await Flame.images.load('klondike-sprites.png');
    +27
    +28    final stock = StockPile(position: Vector2(cardGap, cardGap));
    +29    final waste =
    +30        WastePile(position: Vector2(cardWidth + 2 * cardGap, cardGap));
    +31    final foundations = List.generate(
    +32      4,
    +33      (i) => FoundationPile(
    +34        i,
    +35        position: Vector2((i + 3) * (cardWidth + cardGap) + cardGap, cardGap),
    +36      ),
    +37    );
    +38    final piles = List.generate(
    +39      7,
    +40      (i) => TableauPile(
    +41        position: Vector2(
    +42          cardGap + i * (cardWidth + cardGap),
    +43          cardHeight + 2 * cardGap,
    +44        ),
    +45      ),
    +46    );
    +47
    +48    world.add(stock);
    +49    world.add(waste);
    +50    world.addAll(foundations);
    +51    world.addAll(piles);
    +52
    +53    camera.viewfinder.visibleGameSize =
    +54        Vector2(cardWidth * 7 + cardGap * 8, 4 * cardHeight + 3 * cardGap);
    +55    camera.viewfinder.position = Vector2(cardWidth * 3.5 + cardGap * 4, 0);
    +56    camera.viewfinder.anchor = Anchor.topCenter;
    +57
    +58    final cards = [
    +59      for (var rank = 1; rank <= 13; rank++)
    +60        for (var suit = 0; suit < 4; suit++) Card(rank, suit),
    +61    ];
    +62    cards.shuffle();
    +63    world.addAll(cards);
    +64
    +65    var cardToDeal = cards.length - 1;
    +66    for (var i = 0; i < 7; i++) {
    +67      for (var j = i; j < 7; j++) {
    +68        piles[j].acquireCard(cards[cardToDeal--]);
    +69      }
    +70      piles[i].flipTopCard();
    +71    }
    +72    for (var n = 0; n <= cardToDeal; n++) {
    +73      stock.acquireCard(cards[n]);
    +74    }
    +75  }
    +76}
    +77
    +78Sprite klondikeSprite(double x, double y, double width, double height) {
    +79  return Sprite(
    +80    Flame.images.fromCache('klondike-sprites.png'),
    +81    srcPosition: Vector2(x, y),
    +82    srcSize: Vector2(width, height),
    +83  );
    +84}
    +
    +
    +
    +main.dart
    +
    1import 'package:flame/game.dart';
    +2import 'package:flutter/widgets.dart';
    +3
    +4import 'klondike_game.dart';
    +5
    +6void main() {
    +7  final game = KlondikeGame();
    +8  runApp(GameWidget(game: game));
    +9}
    +
    +
    +
    +pile.dart
    +
     1import 'components/card.dart';
    + 2
    + 3abstract class Pile {
    + 4  /// Returns true if the [card] can be taken away from this pile and moved
    + 5  /// somewhere else.
    + 6  bool canMoveCard(Card card);
    + 7
    + 8  /// Returns true if the [card] can be placed on top of this pile. The [card]
    + 9  /// may have other cards "attached" to it.
    +10  bool canAcceptCard(Card card);
    +11
    +12  /// Removes [card] from this pile; this method will only be called for a card
    +13  /// that both belong to this pile, and for which [canMoveCard] returns true.
    +14  void removeCard(Card card);
    +15
    +16  /// Places a single [card] on top of this pile. This method will only be
    +17  /// called for a card for which [canAcceptCard] returns true.
    +18  void acquireCard(Card card);
    +19
    +20  /// Returns the [card] (which already belongs to this pile) in its proper
    +21  /// place.
    +22  void returnCard(Card card);
    +23}
    +
    +
    +
    +rank.dart
    +
     1import 'package:flame/components.dart';
    + 2import 'package:flutter/foundation.dart';
    + 3import 'klondike_game.dart';
    + 4
    + 5@immutable
    + 6class Rank {
    + 7  factory Rank.fromInt(int value) {
    + 8    assert(
    + 9      value >= 1 && value <= 13,
    +10      'value is outside of the bounds of what a rank can be',
    +11    );
    +12    return _singletons[value - 1];
    +13  }
    +14
    +15  Rank._(
    +16    this.value,
    +17    this.label,
    +18    double x1,
    +19    double y1,
    +20    double x2,
    +21    double y2,
    +22    double w,
    +23    double h,
    +24  )   : redSprite = klondikeSprite(x1, y1, w, h),
    +25        blackSprite = klondikeSprite(x2, y2, w, h);
    +26
    +27  final int value;
    +28  final String label;
    +29  final Sprite redSprite;
    +30  final Sprite blackSprite;
    +31
    +32  static final List<Rank> _singletons = [
    +33    Rank._(1, 'A', 335, 164, 789, 161, 120, 129),
    +34    Rank._(2, '2', 20, 19, 15, 322, 83, 125),
    +35    Rank._(3, '3', 122, 19, 117, 322, 80, 127),
    +36    Rank._(4, '4', 213, 12, 208, 315, 93, 132),
    +37    Rank._(5, '5', 314, 21, 309, 324, 85, 125),
    +38    Rank._(6, '6', 419, 17, 414, 320, 84, 129),
    +39    Rank._(7, '7', 509, 21, 505, 324, 92, 128),
    +40    Rank._(8, '8', 612, 19, 607, 322, 78, 127),
    +41    Rank._(9, '9', 709, 19, 704, 322, 84, 130),
    +42    Rank._(10, '10', 810, 20, 805, 322, 137, 127),
    +43    Rank._(11, 'J', 15, 170, 469, 167, 56, 126),
    +44    Rank._(12, 'Q', 92, 168, 547, 165, 132, 128),
    +45    Rank._(13, 'K', 243, 170, 696, 167, 92, 123),
    +46  ];
    +47}
    +
    +
    +
    +suit.dart
    +
     1import 'package:flame/sprite.dart';
    + 2import 'package:flutter/foundation.dart';
    + 3import 'klondike_game.dart';
    + 4
    + 5@immutable
    + 6class Suit {
    + 7  factory Suit.fromInt(int index) {
    + 8    assert(
    + 9      index >= 0 && index <= 3,
    +10      'index is outside of the bounds of what a suit can be',
    +11    );
    +12    return _singletons[index];
    +13  }
    +14
    +15  Suit._(this.value, this.label, double x, double y, double w, double h)
    +16      : sprite = klondikeSprite(x, y, w, h);
    +17
    +18  final int value;
    +19  final String label;
    +20  final Sprite sprite;
    +21
    +22  static final List<Suit> _singletons = [
    +23    Suit._(0, '♥', 1176, 17, 172, 183),
    +24    Suit._(1, '♦', 973, 14, 177, 182),
    +25    Suit._(2, '♣', 974, 226, 184, 172),
    +26    Suit._(3, '♠', 1178, 220, 176, 182),
    +27  ];
    +28
    +29  /// Hearts and Diamonds are red, while Clubs and Spades are black.
    +30  bool get isRed => value <= 1;
    +31  bool get isBlack => value >= 2;
    +32}
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/klondike/step5.html b/docs/1.18.0/tutorials/klondike/step5.html new file mode 100644 index 000000000..2704215ea --- /dev/null +++ b/docs/1.18.0/tutorials/klondike/step5.html @@ -0,0 +1,2499 @@ + + + + + + + 5. Animations, restarting, buttons and a New World — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    5. Animations, restarting, buttons and a New World

    +

    In this chapter we will be showing various ways to make the Klondike game more fun and easier to +play. The topics to be covered are:

    +
      +
    • Klondike Draw 1 and Draw 3

    • +
    • Animating and automating moves

    • +
    • Detecting and celebrating a win

    • +
    • Ending and restarting the game

    • +
    • How to implement your own FlameGame world

    • +
    • Simple action-buttons

    • +
    • Anchors and co-ordinates

    • +
    • Random number generation and seeding

    • +
    • Effects and EffectControllers

    • +
    +
    +

    The Klondike draw

    +

    The Klondike patience game (or solitaire game in the USA) has two main variants: Draw 3 and Draw 1. +Currently the Klondike Flame Game is Draw 3, which is a lot more difficult than Draw 1, because +although you can see 3 cards, you can only move one of them and that move changes the “phase” of +other cards. So different cards are going to become available — not easy.

    +

    In Klondike Draw 1 just one card at a time is drawn from the Stock and shown, so every card in it is +available, and you can go through the Stock as many times as you like, just as in Klondike Draw 3.

    +

    So how do we implement Klondike Draw 1? Clearly only the Stock and Waste piles are involved, so +maybe we should have KlondikeGame provide a value 1 or 3 to each of them. They both have code for +constructors, so we could just add an extra parameter to that code, but in Flame there is another +way, which works even if your component has a default constructor (no code for it) or your game has +many game-wide values. Let us call our value klondikeDraw. In your class declaration add the +HasGameReference<MyGame> mixin, then write game.klondikeDraw wherever you need the value 1 or 3. +For class StockPile we will have:

    +
    class StockPile extends PositionComponent
    +    with TapCallbacks, HasGameReference<KlondikeGame>
    +    implements Pile {
    +
    +
    +

    and

    +
      @override
    +  void onTapUp(TapUpEvent event) {
    +    final wastePile = parent!.firstChild<WastePile>()!;
    +    if (_cards.isEmpty) {
    +      wastePile.removeAllCards().reversed.forEach((card) {
    +        card.flip();
    +        acquireCard(card);
    +      });
    +    } else {
    +      for (var i = 0; i < game.klondikeDraw; i++) {
    +        if (_cards.isNotEmpty) {
    +          final card = _cards.removeLast();
    +          card.flip();
    +          wastePile.acquireCard(card);
    +        }
    +      }
    +    }
    +  }
    +
    +
    +

    For class WastePile we will have:

    +
    class WastePile extends PositionComponent
    +    with HasGameReference<KlondikeGame>
    +    implements Pile {
    +
    +
    +

    and

    +
      void _fanOutTopCards() {
    +    if (game.klondikeDraw == 1) {   // No fan-out in Klondike Draw 1.
    +      return;
    +    }
    +    final n = _cards.length;
    +    for (var i = 0; i < n; i++) {
    +      _cards[i].position = position;
    +    }
    +    if (n == 2) {
    +      _cards[1].position.add(_fanOffset);
    +    } else if (n >= 3) {
    +      _cards[n - 2].position.add(_fanOffset);
    +      _cards[n - 1].position.addScaled(_fanOffset, 2);
    +    }
    +  }
    +
    +
    +

    That makes the Stock and Waste piles play either Klondike Draw 1 or Klondike Draw 3, but how do you +tell them which variant to play? For now, we will add a place-holder to the KlondikeGame class. +We just comment out whichever one we do not want and then rebuild.

    +
      // final int klondikeDraw = 3;
    +  final int klondikeDraw = 1;
    +
    +
    +

    This is fine as a temporary measure, when we have not yet decided how to handle some aspect of +our design, but ultimately we will have to provide some kind of input for the player to choose +which flavor of Klondike to play, such as a menu screen, a settings screen or a button. Flame can +incorporate Flutter widgets into a game and the next Tutorial (Ember) shows how to add a menu +widget, as its final step.

    +
    +
    +

    Making cards move

    +

    In Flame, if we need a component to do something, we use an Effect - a special component that can +attach to another component, such as a card, and modify its properties. That includes any kind of +motion (or change of position). We also need an EffectController, which provides timing for an +effect: when to start, how long to go for and what Curve to follow. The latter is not a curve in +space. It is a time-curve that specifies accelerations and decelerations during the time of the +effect, such as start moving a card quickly and then slow down as it approaches its destination.

    +

    To move a card, we will add a doMove() method to the Card class. It will require a to location +to go to. Optional parameters are speed: (default 10.0), start: (default zero), +curve: (default Curves.easeOutQuad) and onComplete: (default null, i.e. no callback when +the move finishes). Speed is in card widths per second. Usually we will provide a callback, because +a bit of gameplay must be done after the animated move. The default curve: parameter gives us +a fast-in/slow-out move, much as a human player would do. So the following code is added to the +end of the Card class:

    +
      void doMove(
    +    Vector2 to, {
    +    double speed = 10.0,
    +    double start = 0.0,
    +    Curve curve = Curves.easeOutQuad,
    +    VoidCallback? onComplete,
    +  }) {
    +    assert(speed > 0.0, 'Speed must be > 0 widths per second');
    +    final dt = (to - position).length / (speed * size.x);
    +    assert(dt > 0.0, 'Distance to move must be > 0');
    +    priority = 100;
    +    add(
    +      MoveToEffect(
    +        to,
    +        EffectController(duration: dt, startDelay: start, curve: curve),
    +        onComplete: () {
    +          onComplete?.call();
    +        },
    +      ),
    +    );
    +  }
    +
    +
    +

    To make this code compile we need to import 'package:flame/effects.dart' and +'package:flutter/animation.dart' at the top of the components/card.dart file. That done, we can +start using the new method to return the card(s) gracefully to where they came from, after being +dropped in an invalid position. First, we need a private data item to store a card’s position when +a drag-and-drop started. So let us insert new lines in two places as shown below:

    +
      bool _isDragging = false;
    +  Vector2 _whereCardStarted = Vector2(0, 0);
    +
    +  final List<Card> attachedCards = [];
    +
    +
    +
          _isDragging = true;
    +      priority = 100;
    +      // Copy each co-ord, else _whereCardStarted changes as the position does.
    +      _whereCardStarted = Vector2(position.x, position.y);
    +      if (pile is TableauPile) {
    +
    +
    +

    It would be a mistake to write _whereCardStarted = position; here. In Dart, that would just +copy a reference: so _whereCardStarted would point to the same data as position while the +drag occurred and the card’s position data changed. We can get around this by copying the card’s +current X and Y co-ordinates into a new Vector2 object.

    +

    To animate cards being returned to their original piles after an invalid drag-and-drop, we replace +five lines at the end of the onDragEnd() method with:

    +
        // Invalid drop (middle of nowhere, invalid pile or invalid card for pile).
    +    doMove(
    +      _whereCardStarted,
    +      onComplete: () {
    +        pile!.returnCard(this);
    +      },
    +    );
    +    if (attachedCards.isNotEmpty) {
    +      attachedCards.forEach((card) {
    +        final offset = card.position - position;
    +        card.doMove(
    +          _whereCardStarted + offset,
    +          onComplete: () {
    +            pile!.returnCard(card);
    +          },
    +        );
    +      });
    +      attachedCards.clear();
    +    }
    +
    +
    +

    In each case, we use the default speed of 10 card-widths per second. +Notice how the onComplete: parameters are used to return each card to the pile where it started. +It will then be added back to that pile’s list of contents. Notice also that the list of attached +cards (if any) is cleared immediately, as the animated cards start to move. This does not matter, +because each moving card has a MoveToEffect and an EffectController added to it and these +contain all the data needed to get the right card to the right place at the right time. Thus +no important information is lost by clearing the attached cards early. Also, by default, the +MoveToEffect and EffectController in each moving card automatically get detached and deleted +by Flame when the show is over.

    +

    Some other automatic and animated moves we can try are dealing the cards, flipping cards from Stock +to Waste pile, turning cards over automatically on the tableau piles, and settling cards into place +after a valid drag-and-drop. We will have a look at animating a flip first.

    +
    +
    +

    Animating a card-flip

    +

    Flutter and Flame do not yet support 3-D effects (as at October 2023), but we can emulate them. +To make a card look as if it is turning over, we will shrink the width of the back-view, switch +to the front view and expand back to full width. The code uses quite a few features of Effects +and EffectControllers:

    +
      void turnFaceUp({
    +    double time = 0.3,
    +    double start = 0.0,
    +    VoidCallback? onComplete,
    +  }) {
    +    assert(!_isFaceUpView, 'Card must be face-down before turning face-up.');
    +    assert(time > 0.0, 'Time to turn card over must be > 0');
    +    _isAnimatedFlip = true;
    +    anchor = Anchor.topCenter;
    +    position += Vector2(width / 2, 0);
    +    priority = 100;
    +    add(
    +      ScaleEffect.to(
    +        Vector2(scale.x / 100, scale.y),
    +        EffectController(
    +          startDelay: start,
    +          curve: Curves.easeOutSine,
    +          duration: time / 2,
    +          onMax: () {
    +            _isFaceUpView = true;
    +          },
    +          reverseDuration: time / 2,
    +          onMin: () {
    +            _isAnimatedFlip = false;
    +            _faceUp = true;
    +            anchor = Anchor.topLeft;
    +            position -= Vector2(width / 2, 0);
    +          },
    +        ),
    +        onComplete: () {
    +          onComplete?.call();
    +        },
    +      ),
    +    );
    +  }
    +
    +
    +

    So how does all this work? We have a default time of 0.3 seconds for the flip to occur, a start time +and an optional callback on completion, as before. Now we add a ScaleEffect to the card, +which shrinks it almost to zero width, but leaves the height unchanged. However, that must take +only half the time, then we must switch from the face-down to the face-up view of the card and +expand it back out, also in half the time.

    +

    This is where we use some of the fancier parameters of the EffectController class. The +duration: is set to time / 2 and we use an onMax: callback, with inline code to change the +view to face-up. That callback will happen after time / 2, when the Effect (whatever it is) +has reached its maximum (i.e. in this case, the view of the card has shrunk to a thin vertical +line). After the switch to face-up view, the EffectController will take the Effect into reverse +for reverseDuration: time / 2. Everything is reversed: the view of the card expands and the +curve: of time is applied in reverse order. In total, the timing follows a sine curve from +0 to pi, giving a smooth animation in which the width of the card-view is always the projection +into 2-D of its 3-D position. Wow! That’s a lot of work for a little EffectController!

    +

    We are not there yet! If you were to run just the add() part of the code, you would see some +ugly things happening. Yeah, yeah, been there, done that — when I was preparing this code! +First off, the card shrinks to a line at its left. That is because all cards in this game have +an Anchor at topLeft, which is the point used to set the card’s position. We would like +the card to flip around its vertical center-line. Easy, just set anchor = Anchor.topCenter +first: that makes the card flip realistically, but it jumps by half a card-width to the left +before flipping.

    +

    Long story short, see the lines between assert( and add( and their reversal in the onMin: +callback, which occurs when the Effect is finished, but before the final onComplete: callback. +At the beginning, the card’s rendering priority is set to 100, so that it will ride above all +other cards in the neighborhood. That value cannot always be saved and restored because we may +not know what the card’s priority should be in whatever Pile is receiving it. So we have made +sure that the receiver is always called in the onComplete: option, using a method that will +adjust the positions and priorities of the cards in the pile.

    +

    Last but not least, in the preceding code, notice the use of the variable _isAnimatedFlip. +This is a bool variable defined and initialized near the start of class Card in file +components/card.dart, along with another new bool called _isFaceUpView. Initially these +are set false, along with the existing bool _faceUp = false variable. What is the significance +of these variables? It is huge. A few lines further down, we see:

    +
      @override
    +  void render(Canvas canvas) {
    +    if (_isFaceUpView) {
    +      _renderFront(canvas);
    +    } else {
    +      _renderBack(canvas);
    +    }
    +  }
    +
    +
    +

    This is the code that makes every card visible on the screen, in either face-up or face-down state. +At the end of Klondike Tutorial Step 4, the if statement was if (_faceUp) {. This was OK +because all moves of cards were instantaneous (leaving aside drags and drops): any change in the +card’s face-up or face-down state could be rendered at the Flame Engine’s next tick or soon after. +This posed no problem when we started to animate card moves, provided there were no flips involved. +However, when we tapped a non-empty Stock Pile, the executed code was:

    +
      final card = _cards.removeLast();
    +  card.flip;
    +  wastePile.acquireCard(card);
    +
    +
    +

    And the first thing wastePile.acquireCard( does is assert(card.isFaceUp);, which fails if an +animated flip is keeping the card face-down while the first half of the flip is occurring.

    +
    +
    +

    Model and View

    +

    Clearly the card cannot be in two states at once: it is not Schrödinger’s cat! We can resolve the +dilemma by using two definitions of “face-up”: a Model type and a View type. The View version is +used in rendering and animation (i.e. what appears on the screen) and the Model version in the logic +of the game, the gameplay and its error-checks. That way, we do not have to revise all the logic +of the Piles in this game in order to animate some of it. A more complex game might benefit from +separating the Model and the View during the design and early coding stages — even into +separate classes. In this game we are using just a little separation of Model and View. The +_isAnimatedFlip variable is true while there is an animated flip going on, otherwise false, +and the Card class’s flip() function is expanded to:

    +
      void flip() {
    +    if (_isAnimatedFlip) {
    +      // Let the animation determine the FaceUp/FaceDown state.
    +      _faceUp = _isFaceUpView;
    +    } else {
    +      // No animation: flip and render the card immediately.
    +      _faceUp = !_faceUp;
    +      _isFaceUpView = _faceUp;
    +    }
    +  }
    +
    +
    +

    In the Klondike Tutorial game we are still having to trigger a Model update in the onComplete: +callback of the flip animation. It might be nice, for impatient or rapid-fingered players, to +transfer a card from Stock Pile to Waste Pile instantaneously, in the Model, leaving the animation +in the View to catch up later, with no onComplete: callback. That way, you could flip through +the Stock Pile very rapidly, by tapping fast. However, that is beyond the scope of this Tutorial.

    +
    +
    +

    Ending and restarting the game

    +

    As it stands, there is no easy way to finish the Klondike Tutorial game and start another, even if +you have won. We can only close the app and start it again. And there is no “reward” for winning.

    +

    There are various ways to tackle this, depending on the simplicity or complexity of your game and +on how long the onLoad() method is likely to take. They can range from writing your own +GameWidget, to doing a few simple re-initializations in your Game class (i.e. KlondikeGame in this +case).

    +

    In the GameWidget case you would supply the Game with a VoidCallback function parameter named +reset or restart. When the callback is invoked, it would use the Flutter conventions of a +StatefulWidget (e.g. setState(() {});) to force the widget to be rebuilt and replaced, thus +releasing all references to the current Game instance, its state and all of its memory. There could +also be Flutter code to run a menu or other startup screen.

    +

    Re-initialization should be undertaken only if the operations involved are few and simple. Otherwise +coding errors could lead to subtle problems, memory leaks and crashes in your game. It might be the +easiest way to go in Klondike (as it is in the Ember Tutorial). Basically, we must clear all the +card references out of all the Piles and then re-shuffle (or not) and re-deal, possibly changing +from Klondike Draw 3 to Klondike Draw 1 or vice-versa.

    +

    Well, that was not as easy as it looked! Re-initializing the Piles and each Card was easy +enough, but the difficult bit came next… Whether the player wins or restarts without winning, we +have 52 cards spread around various piles on the screen, some face-up and maybe some face-down. We +would like to animate the deal later, so it would be nice to collect the cards into a neat face-down +pile at top left, in the Stock Pile area: not the actual Stock Pile yet, because that gets created +during the deal.

    +

    Writing a simple little loop to set each Card face-down and use its doMove method to make it +move independently to the top left fails. It causes one of those “subtle problems” referred to +earlier. The cards all travel at the same speed but arrive at different times. The deal then +produces messy Tableau Piles with several cards out of position. Also the animated move of all +the cards to the Stock Pile area was a bit ugly.

    +

    The problem of the messy Tableau Piles was fixable, but at this point the reviewer of the code +and documentation proposed a completely new approach which avoids re-initializing anything and +creates all the Components from scratch, which is the preferred Flutter/Flame way of doing things.

    +
    +
    +

    A New World

    +
    +

    Start and restart actions

    +

    We wish to provide the following actions in the Klondike game:

    +
      +
    • A first start,

    • +
    • Any number of restarts with a new deal,

    • +
    • Any number of restarts with the same deal as before,

    • +
    • A switch between Klondike Draw 1 and Draw 3 and restart with a new deal, and

    • +
    • Have fun before restarting with a new deal (we’ll keep that as a surprise for later).

    • +
    +

    The proposal is to have a new KlondikeWorld class, which replaces the default world provided by +FlameGame. The new world contains (almost) everything we need to play the game and is created or +re-created during each of the above actions.

    +
    +
    +

    A stripped-down KlondikeGame class

    +

    Here is the new code for the KlondikeGame class (what is left of it).

    +
    enum Action { newDeal, sameDeal, changeDraw, haveFun }
    +
    +class KlondikeGame extends FlameGame<KlondikeWorld> {
    +  static const double cardGap = 175.0;
    +  static const double topGap = 500.0;
    +  static const double cardWidth = 1000.0;
    +  static const double cardHeight = 1400.0;
    +  static const double cardRadius = 100.0;
    +  static const double cardSpaceWidth = cardWidth + cardGap;
    +  static const double cardSpaceHeight = cardHeight + cardGap;
    +  static final Vector2 cardSize = Vector2(cardWidth, cardHeight);
    +  static final cardRRect = RRect.fromRectAndRadius(
    +    const Rect.fromLTWH(0, 0, cardWidth, cardHeight),
    +    const Radius.circular(cardRadius),
    +  );
    +
    +  // Constant used when creating Random seed.
    +  static const int maxInt = 0xFFFFFFFE; // = (2 to the power 32) - 1
    +
    +  // This KlondikeGame constructor also initiates the first KlondikeWorld.
    +  KlondikeGame() : super(world: KlondikeWorld());
    +
    +  // These three values persist between games and are starting conditions
    +  // for the next game to be played in KlondikeWorld. The actual seed is
    +  // computed in KlondikeWorld but is held here in case the player chooses
    +  // to replay a game by selecting Action.sameDeal.
    +  int klondikeDraw = 1;
    +  int seed = 1;
    +  Action action = Action.newDeal;
    +}
    +
    +
    +

    Huh! What happened to the onLoad() method? And what’s this seed thing? And how does +KlondikeWorld get into the act? Well, everything that used to be in the onLoad() method is now +in the onLoad() method of KlondikeWorld, which is an extension of the World class and is a type +of Component, so it can have an onLoad() method, as can any Component type. The content of +the method is much the same as before, except that world.add( becomes just add(. It also brings +in some addButton() references, but more on these later.

    +
    +
    +

    Using a Random Number Generator seed

    +

    The seed is a common games-programming technique in any programming environment. Usually it allows +you to start a Random Number Generator from a known point (called the seed) and give your game +reproducible behavior when you are in the development and testing stage. Here it is used to +provide exactly the same deal of the Klondike cards when the player requests Same deal.

    +
    +
    +

    Introducing the new KlondikeWorld class

    +

    The class KlondikeGame declaration specifies that this extension of the FlameGame class must +have a world of type KlondikeWorld (i.e. FlameGame<KlondikeWorld>). Didn’t know we could do +that for a game, did we? So how does the first instance of KlondikeWorld get created? It’s all in +the KlondikeGame constructor code:

    +
      KlondikeGame() : super(world: KlondikeWorld());
    +
    +
    +

    The constructor itself is a default constructor, but the colon : begins a constructor +initialization sequence which creates our world for the first time.

    +
    +
    +

    Buttons

    +

    We are going to use some buttons to activate the various ways of restarting the Klondike Game. First +we extend Flame’s ButtonComponent to create class FlatButton, adapted from a Flat Button which +used to be in Flame’s Examples pages. ButtonComponent uses two PositionComponents, one for when +the button is in its normal state (up) and one for when it is pressed. The two components are +mounted and rendered alternately as the user presses the button and releases it. To press the +button, tap and hold it down.

    +

    In our button, the two components are the button’s outlines - the buttonDown: one makes +the outline of the button turn red when it is pressed, as a warning, because the four button-actions +all end the current game and start another. That is also why they are positioned at the top of the +canvas, above all the cards, where you are less likely to press them accidentally. If you do press +one and have second thoughts, keep pressing and slide away, then the button will have no effect.

    +

    The four buttons trigger the restart actions described above and are labelled New deal, +Same deal, Draw 1 3 and Have fun. Flame also has a SpriteButtonComponent, based on two +alternating Sprites, a HudButtonComponent and an AdvancedButtonComponent. For further types +of buttons and controllers, it would be best to use a Flutter overlay, menu or settings widget and +have access to Flutter’s widgets for radio buttons, dropdown lists, sliders, etc. For the purposes +of this Tutorial our FlatButton will do fine.

    +

    We use the addButton() method, during our world’s onLoad(), to set up our four buttons and +add them to our world.

    +
        playAreaSize =
    +        Vector2(7 * cardSpaceWidth + cardGap, 4 * cardSpaceHeight + topGap);
    +    final gameMidX = playAreaSize.x / 2;
    +
    +    addButton('New deal', gameMidX, Action.newDeal);
    +    addButton('Same deal', gameMidX + cardSpaceWidth, Action.sameDeal);
    +    addButton('Draw 1 or 3', gameMidX + 2 * cardSpaceWidth, Action.changeDraw);
    +    addButton('Have fun', gameMidX + 3 * cardSpaceWidth, Action.haveFun);
    +
    +
    +

    That places them above our four Foundation piles and centrally aligned with them. The first +Foundation pile happens to be aligned around the top-center of the screen, so the first button +is centred above it.

    +
    +
    +

    Anchors and co-ordinates

    +

    The expressions here and in the addButton() method may seem odd because the cards and piles all +have Anchor.topLeft but the buttons have Anchor.center. The position co-ordinates of a Card +are where its top-left corner goes, but the position co-ordinates of a FlatButton are where its +center goes and the various parts of a FlatButton are arranged (internally) around its center. +These examples can give us some insight into how co-ordinate systems work in Flame.

    +
    +
    +

    The deal() method

    +

    The last thing the KlondikeWorld’s onLoad() method does is call the deal() method to shuffle +and deal the cards. This method is now in the KlondikeWorld class and so are the checkWin() and +letsCelebrate() methods, but more about those later. The deal process is the same as before but +now includes some animation:

    +
      void deal() {
    +    assert(cards.length == 52, 'There are ${cards.length} cards: should be 52');
    +
    +    if (game.action != Action.sameDeal) {
    +      // New deal: change the Random Number Generator's seed.
    +      game.seed = Random().nextInt(KlondikeGame.maxInt);
    +      if (game.action == Action.changeDraw) {
    +        game.klondikeDraw = (game.klondikeDraw == 3) ? 1 : 3;
    +      }
    +    }
    +    // For the "Same deal" option, re-use the previous seed, else use a new one.
    +    cards.shuffle(Random(game.seed));
    +
    +    var cardToDeal = cards.length - 1;
    +    var nMovingCards = 0;
    +    for (var i = 0; i < 7; i++) {
    +      for (var j = i; j < 7; j++) {
    +        final card = cards[cardToDeal--];
    +        card.doMove(
    +          tableauPiles[j].position,
    +          start: nMovingCards * 0.15,
    +          onComplete: () {
    +            tableauPiles[j].acquireCard(card);
    +            nMovingCards--;
    +            if (nMovingCards == 0) {
    +              var delayFactor = 0;
    +              for (final tableauPile in tableauPiles) {
    +                delayFactor++;
    +                tableauPile.flipTopCard(start: delayFactor * 0.15);
    +              }
    +            }
    +          },
    +        );
    +        nMovingCards++;
    +      }
    +    }
    +    for (var n = 0; n <= cardToDeal; n++) {
    +      stock.acquireCard(cards[n]);
    +    }
    +  }
    +
    +
    +

    First we implement the Action value for this game. In the very first game, the KlondikeGame class +sets defaults of Action.newDeal and klondikeDraw = 1, but after that the player can select an +action by pressing and releasing a button and KlondikeWorld saves it in KlondikeGame — or the player +wins the game, in which case Action.newDeal is selected and saved automatically. The action +usually generates and saves a new seed, but that is skipped if we have Action.sameDeal. Then we +shuffle the cards, using whatever seed applies.

    +

    The deal logic is the same as we used in Klondike Tutorial Step 4 and the animation is fairly easy. +We just use card.doMove( for each card, with a changing destination and an increasing start: +value, counting each moving card as it departs. For a few milliseconds after the loops terminate +nMovingCards will be at a maximum of 28 (i.e. 1 + 2 + 3 + 4 + 5 + 6 + 7) and the remaining 24 +cards will go into a properly constructed Stock Pile.

    +

    Then cards will be arriving over the next second or so and a problem arises. The cards do not +necessarily arrive in the order they are sent from the Stock Pile area. If we start turning over +the last cards in the columns too soon, we might turn over the wrong card and mess up the deal. The +following printout of the deal shows how arrivals can get out of order. The j variable is the +Tableau Pile number and i is the card’s position in the pile. The King of Hearts for Pile 6 is +arriving before the Queen of Clubs that is the last card in Pile 5. And there are two more cards +to go in Pile 6.

    +
    flutter: Move done, i 3, j 6, 6♠ 5 moving cards.
    +flutter: Move done, i 4, j 5, 9♥ 4 moving cards.
    +flutter: Move done, i 4, j 6, K♥ 3 moving cards.
    +flutter: Move done, i 5, j 5, Q♣ 2 moving cards.
    +flutter: Move done, i 5, j 6, 2♠ 1 moving cards.
    +flutter: Move done, i 6, j 6, 10♠ 0 moving cards.
    +flutter: Pile 0 [Q♦]
    +flutter: Pile 1 [J♣, Q♥]
    +flutter: Pile 2 [5♥, 5♦, J♦]
    +flutter: Pile 3 [A♠, Q♠, A♥, 5♠]
    +flutter: Pile 4 [8♦, 10♣, 7♥, 3♥, 4♥]
    +flutter: Pile 5 [4♠, 8♣, 5♣, 2♥, 9♥, Q♣]
    +flutter: Pile 6 [4♣, 3♦, K♦, 6♠, K♥, 2♠, 10♠]
    +
    +
    +

    So we count off the cards in the onComplete() callback code as they arrive. Only when all 28 cards +have arrived do we start turning over the last card of each Tableau Pile. When the deal has been +completed our KlondikeWorld is also complete and ready for play.

    +
    +
    +
    +

    More animations of moves

    +

    The Card class’s doMove() and turnFaceUp() methods have been combined into a doMoveAndFlip() +method, which is used to draw cards from the Stock Pile. The dropping of a card or cards onto a pile +after drag-and-drop also uses doMove() to settle the drop more gracefully. Finally, there is a +shortcut to auto-move a card onto its Foundation Pile if it is ready to go out. This adds +TapCallbacks to the Card class and an onTapUp() callback as follows:

    +
      onTapUp(TapUpEvent event) {
    +    if (isFaceUp) {
    +      final suitIndex = suit.value;
    +      if (game.foundations[suitIndex].canAcceptCard(this)) {
    +        pile!.removeCard(this);
    +        doMove(
    +          game.foundations[suitIndex].position,
    +          onComplete: () {
    +            game.foundations[suitIndex].acquireCard(this);
    +          },
    +        );
    +      }
    +    } else if (pile is StockPile) {
    +      game.stock.onTapUp(event);
    +    }
    +  }
    +
    +
    +

    If a card is ready to go out, just tap on it and it will move automatically to the correct +Foundation Pile for its suit. This saves a load of dragging-and-dropping when you are close to +winning the game! There is nothing new in the above code, except that if you tap the top card of +the Stock Pile, the Card object receives the tap first and forwards it on to the stock object.

    +
    +
    +

    A graphics glitch

    +

    If you moved multiple cards from one Tableau Pile to another, the internal code of the TableauPile +class would formerly (in Tutorial Step 4) move the cards into place abruptly, as soon as the +drag-and-drop ended. In the new code (Step 5), drags and drops use essentially the same code as +before, so it is tempting to get that code to do a multi-card move as a series of animated moves +each completing with an acquireCard call. But this caused some ugly graphics glitches. It +appears they were due to acquireCard also calling the layoutCards() method of TableauPile and +instantly re-arranging all the cards in the pile, every time a card was acquired. The problem has +been solved (with some difficulty as it turned out), by adding a dropCards method to +TableauPile, which mimics some of the existing actions while dovetailing some card animations +in as well.

    +

    The lesson to be learned is that it is worth giving some attention to animation and time-dependent +concerns at Game Design time. When was that? Back in Klondike Tutorial Step 1 Preparation and +Step 2 Scaffolding.

    +
    +
    +

    Winning the game

    +

    You win the game when all cards in all suits, Ace to King, have been moved to the Foundation Piles, +13 cards in each pile. The game now has code to recognize that event — an isFull test added to +the FoundationPile’s acquireCard() method, a callback to KlondikeWorld and a test as +to whether all four Foundations are full. Here is the code:

    +
    class FoundationPile extends PositionComponent implements Pile {
    +  FoundationPile(int intSuit, this.checkWin, {super.position})
    +      : suit = Suit.fromInt(intSuit),
    +        super(size: KlondikeGame.cardSize);
    +
    +  final VoidCallback checkWin;
    +
    +  final Suit suit;
    +  final List<Card> _cards = [];
    +
    +  //#region Pile API
    +
    +  bool get isFull => _cards.length == 13;
    +
    +
    +
      void acquireCard(Card card) {
    +    assert(card.isFaceUp);
    +    card.position = position;
    +    card.priority = _cards.length;
    +    card.pile = this;
    +    _cards.add(card);
    +    if (isFull) {
    +      checkWin(); // Get KlondikeWorld to check all FoundationPiles.
    +    }
    +  }
    +
    +
    +
      void checkWin()
    +  {
    +    var nComplete = 0;
    +    for (final f in foundations) {
    +      if (f.isFull) {
    +        nComplete++;
    +      }
    +    }
    +    if (nComplete == foundations.length) {
    +      letsCelebrate();
    +    }
    +  }
    +
    +
    +

    It is often possible to calculate whether you can win from a given position of the cards in a +Klondike game, or could have won but missed a vital move. It is frequently possible to calculate +whether the initial deal is winnable: a percentage of Klondike deals are not. But all that is far +beyond the scope of this Tutorial, so for now it is up to the player to work out whether to keep +playing and try to win — or give up and press one of the buttons.

    +
    +
    +

    Ending a game and re-starting it

    +

    A game ends either after the player wins or they press and release one of the buttons. At that +point the KlondikeGame class must hold all the data needed to start a new game, namely an Action +value, a klondikeDraw value (1 or 3) and a seed from the previous game. Each button has an +onReleased: callback provided by the addButton() method in KlondikeWorld, with code as follows:

    +
          onReleased: () {
    +        if (action == Action.haveFun) {
    +          // Shortcut to the "win" sequence, for Tutorial purposes only.
    +          letsCelebrate();
    +        } else {
    +          // Restart with a new deal or the same deal as before.
    +          game.action = action;
    +          game.world = KlondikeWorld();
    +        }
    +      },
    +
    +
    +

    The letsCelebrate() method is normally invoked only when the player wins. The functions of the +other three buttons are to set the Action value in KlondikeGame and to set world in FlameGame +to refer to a new KlondikeWorld, thus replacing the current one and leaving the former +KlondikeWorld’s storage to be disposed of by Garbage Collect. FlameGame will continue on to +trigger KlondikeWorld’s onLoad() method.

    +

    The letsCelebrate() method ends with similar code, but forces a new deal:

    +
                  game.action = Action.newDeal;
    +              game.world = KlondikeWorld();
    +
    +
    +
    +
    +

    The Have fun button

    +

    When you win the Klondike Game, the letsCelebrate() method puts on a little display. To save you +having to play and win a whole game before you see it — and to test the method, we have +provided the Have fun button. Of course a real game could not have such a button…

    +

    Well, this is it! The game is now more playable.

    +

    We could do more, but this game is a Tutorial above all else. Press the buttons below to see +what the final code looks like, or to play it live.

    +

    But it is also time to have a look at the Ember Tutorial!

    +
    +
    +components/card.dart
    +
      1import 'dart:math';
    +  2import 'dart:ui';
    +  3
    +  4import 'package:flame/components.dart';
    +  5import 'package:flame/effects.dart';
    +  6import 'package:flame/events.dart';
    +  7import 'package:flutter/animation.dart';
    +  8
    +  9import '../klondike_game.dart';
    + 10import '../klondike_world.dart';
    + 11import '../pile.dart';
    + 12import '../rank.dart';
    + 13import '../suit.dart';
    + 14import 'foundation_pile.dart';
    + 15import 'stock_pile.dart';
    + 16import 'tableau_pile.dart';
    + 17
    + 18class Card extends PositionComponent
    + 19    with DragCallbacks, TapCallbacks, HasWorldReference<KlondikeWorld> {
    + 20  Card(int intRank, int intSuit, {this.isBaseCard = false})
    + 21      : rank = Rank.fromInt(intRank),
    + 22        suit = Suit.fromInt(intSuit),
    + 23        super(
    + 24          size: KlondikeGame.cardSize,
    + 25        );
    + 26
    + 27  final Rank rank;
    + 28  final Suit suit;
    + 29  Pile? pile;
    + 30
    + 31  // A Base Card is rendered in outline only and is NOT playable. It can be
    + 32  // added to the base of a Pile (e.g. the Stock Pile) to allow it to handle
    + 33  // taps and short drags (on an empty Pile) with the same behavior and
    + 34  // tolerances as for regular cards (see KlondikeGame.dragTolerance) and using
    + 35  // the same event-handling code, but with different handleTapUp() methods.
    + 36  final bool isBaseCard;
    + 37
    + 38  bool _faceUp = false;
    + 39  bool _isAnimatedFlip = false;
    + 40  bool _isFaceUpView = false;
    + 41  bool _isDragging = false;
    + 42  Vector2 _whereCardStarted = Vector2(0, 0);
    + 43
    + 44  final List<Card> attachedCards = [];
    + 45
    + 46  bool get isFaceUp => _faceUp;
    + 47  bool get isFaceDown => !_faceUp;
    + 48  void flip() {
    + 49    if (_isAnimatedFlip) {
    + 50      // Let the animation determine the FaceUp/FaceDown state.
    + 51      _faceUp = _isFaceUpView;
    + 52    } else {
    + 53      // No animation: flip and render the card immediately.
    + 54      _faceUp = !_faceUp;
    + 55      _isFaceUpView = _faceUp;
    + 56    }
    + 57  }
    + 58
    + 59  @override
    + 60  String toString() => rank.label + suit.label; // e.g. "Q♠" or "10♦"
    + 61
    + 62  //#region Rendering
    + 63
    + 64  @override
    + 65  void render(Canvas canvas) {
    + 66    if (isBaseCard) {
    + 67      _renderBaseCard(canvas);
    + 68      return;
    + 69    }
    + 70    if (_isFaceUpView) {
    + 71      _renderFront(canvas);
    + 72    } else {
    + 73      _renderBack(canvas);
    + 74    }
    + 75  }
    + 76
    + 77  static final Paint backBackgroundPaint = Paint()
    + 78    ..color = const Color(0xff380c02);
    + 79  static final Paint backBorderPaint1 = Paint()
    + 80    ..color = const Color(0xffdbaf58)
    + 81    ..style = PaintingStyle.stroke
    + 82    ..strokeWidth = 10;
    + 83  static final Paint backBorderPaint2 = Paint()
    + 84    ..color = const Color(0x5CEF971B)
    + 85    ..style = PaintingStyle.stroke
    + 86    ..strokeWidth = 35;
    + 87  static final RRect cardRRect = RRect.fromRectAndRadius(
    + 88    KlondikeGame.cardSize.toRect(),
    + 89    const Radius.circular(KlondikeGame.cardRadius),
    + 90  );
    + 91  static final RRect backRRectInner = cardRRect.deflate(40);
    + 92  static final Sprite flameSprite = klondikeSprite(1367, 6, 357, 501);
    + 93
    + 94  void _renderBack(Canvas canvas) {
    + 95    canvas.drawRRect(cardRRect, backBackgroundPaint);
    + 96    canvas.drawRRect(cardRRect, backBorderPaint1);
    + 97    canvas.drawRRect(backRRectInner, backBorderPaint2);
    + 98    flameSprite.render(canvas, position: size / 2, anchor: Anchor.center);
    + 99  }
    +100
    +101  void _renderBaseCard(Canvas canvas) {
    +102    canvas.drawRRect(cardRRect, backBorderPaint1);
    +103  }
    +104
    +105  static final Paint frontBackgroundPaint = Paint()
    +106    ..color = const Color(0xff000000);
    +107  static final Paint redBorderPaint = Paint()
    +108    ..color = const Color(0xffece8a3)
    +109    ..style = PaintingStyle.stroke
    +110    ..strokeWidth = 10;
    +111  static final Paint blackBorderPaint = Paint()
    +112    ..color = const Color(0xff7ab2e8)
    +113    ..style = PaintingStyle.stroke
    +114    ..strokeWidth = 10;
    +115  static final blueFilter = Paint()
    +116    ..colorFilter = const ColorFilter.mode(
    +117      Color(0x880d8bff),
    +118      BlendMode.srcATop,
    +119    );
    +120  static final Sprite redJack = klondikeSprite(81, 565, 562, 488);
    +121  static final Sprite redQueen = klondikeSprite(717, 541, 486, 515);
    +122  static final Sprite redKing = klondikeSprite(1305, 532, 407, 549);
    +123  static final Sprite blackJack = klondikeSprite(81, 565, 562, 488)
    +124    ..paint = blueFilter;
    +125  static final Sprite blackQueen = klondikeSprite(717, 541, 486, 515)
    +126    ..paint = blueFilter;
    +127  static final Sprite blackKing = klondikeSprite(1305, 532, 407, 549)
    +128    ..paint = blueFilter;
    +129
    +130  void _renderFront(Canvas canvas) {
    +131    canvas.drawRRect(cardRRect, frontBackgroundPaint);
    +132    canvas.drawRRect(
    +133      cardRRect,
    +134      suit.isRed ? redBorderPaint : blackBorderPaint,
    +135    );
    +136
    +137    final rankSprite = suit.isBlack ? rank.blackSprite : rank.redSprite;
    +138    final suitSprite = suit.sprite;
    +139    _drawSprite(canvas, rankSprite, 0.1, 0.08);
    +140    _drawSprite(canvas, suitSprite, 0.1, 0.18, scale: 0.5);
    +141    _drawSprite(canvas, rankSprite, 0.1, 0.08, rotate: true);
    +142    _drawSprite(canvas, suitSprite, 0.1, 0.18, scale: 0.5, rotate: true);
    +143    switch (rank.value) {
    +144      case 1:
    +145        _drawSprite(canvas, suitSprite, 0.5, 0.5, scale: 2.5);
    +146      case 2:
    +147        _drawSprite(canvas, suitSprite, 0.5, 0.25);
    +148        _drawSprite(canvas, suitSprite, 0.5, 0.25, rotate: true);
    +149      case 3:
    +150        _drawSprite(canvas, suitSprite, 0.5, 0.2);
    +151        _drawSprite(canvas, suitSprite, 0.5, 0.5);
    +152        _drawSprite(canvas, suitSprite, 0.5, 0.2, rotate: true);
    +153      case 4:
    +154        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +155        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +156        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +157        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +158      case 5:
    +159        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +160        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +161        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +162        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +163        _drawSprite(canvas, suitSprite, 0.5, 0.5);
    +164      case 6:
    +165        _drawSprite(canvas, suitSprite, 0.3, 0.25);
    +166        _drawSprite(canvas, suitSprite, 0.7, 0.25);
    +167        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +168        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +169        _drawSprite(canvas, suitSprite, 0.3, 0.25, rotate: true);
    +170        _drawSprite(canvas, suitSprite, 0.7, 0.25, rotate: true);
    +171      case 7:
    +172        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +173        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +174        _drawSprite(canvas, suitSprite, 0.5, 0.35);
    +175        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +176        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +177        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +178        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +179      case 8:
    +180        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +181        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +182        _drawSprite(canvas, suitSprite, 0.5, 0.35);
    +183        _drawSprite(canvas, suitSprite, 0.3, 0.5);
    +184        _drawSprite(canvas, suitSprite, 0.7, 0.5);
    +185        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +186        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +187        _drawSprite(canvas, suitSprite, 0.5, 0.35, rotate: true);
    +188      case 9:
    +189        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +190        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +191        _drawSprite(canvas, suitSprite, 0.5, 0.3);
    +192        _drawSprite(canvas, suitSprite, 0.3, 0.4);
    +193        _drawSprite(canvas, suitSprite, 0.7, 0.4);
    +194        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +195        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +196        _drawSprite(canvas, suitSprite, 0.3, 0.4, rotate: true);
    +197        _drawSprite(canvas, suitSprite, 0.7, 0.4, rotate: true);
    +198      case 10:
    +199        _drawSprite(canvas, suitSprite, 0.3, 0.2);
    +200        _drawSprite(canvas, suitSprite, 0.7, 0.2);
    +201        _drawSprite(canvas, suitSprite, 0.5, 0.3);
    +202        _drawSprite(canvas, suitSprite, 0.3, 0.4);
    +203        _drawSprite(canvas, suitSprite, 0.7, 0.4);
    +204        _drawSprite(canvas, suitSprite, 0.3, 0.2, rotate: true);
    +205        _drawSprite(canvas, suitSprite, 0.7, 0.2, rotate: true);
    +206        _drawSprite(canvas, suitSprite, 0.5, 0.3, rotate: true);
    +207        _drawSprite(canvas, suitSprite, 0.3, 0.4, rotate: true);
    +208        _drawSprite(canvas, suitSprite, 0.7, 0.4, rotate: true);
    +209      case 11:
    +210        _drawSprite(canvas, suit.isRed ? redJack : blackJack, 0.5, 0.5);
    +211      case 12:
    +212        _drawSprite(canvas, suit.isRed ? redQueen : blackQueen, 0.5, 0.5);
    +213      case 13:
    +214        _drawSprite(canvas, suit.isRed ? redKing : blackKing, 0.5, 0.5);
    +215    }
    +216  }
    +217
    +218  void _drawSprite(
    +219    Canvas canvas,
    +220    Sprite sprite,
    +221    double relativeX,
    +222    double relativeY, {
    +223    double scale = 1,
    +224    bool rotate = false,
    +225  }) {
    +226    if (rotate) {
    +227      canvas.save();
    +228      canvas.translate(size.x / 2, size.y / 2);
    +229      canvas.rotate(pi);
    +230      canvas.translate(-size.x / 2, -size.y / 2);
    +231    }
    +232    sprite.render(
    +233      canvas,
    +234      position: Vector2(relativeX * size.x, relativeY * size.y),
    +235      anchor: Anchor.center,
    +236      size: sprite.srcSize.scaled(scale),
    +237    );
    +238    if (rotate) {
    +239      canvas.restore();
    +240    }
    +241  }
    +242
    +243  //#endregion
    +244
    +245  //#region Card-Dragging
    +246
    +247  @override
    +248  void onTapCancel(TapCancelEvent event) {
    +249    if (pile is StockPile) {
    +250      _isDragging = false;
    +251      handleTapUp();
    +252    }
    +253  }
    +254
    +255  @override
    +256  void onDragStart(DragStartEvent event) {
    +257    super.onDragStart(event);
    +258    if (pile is StockPile) {
    +259      _isDragging = false;
    +260      return;
    +261    }
    +262    // Clone the position, else _whereCardStarted changes as the position does.
    +263    _whereCardStarted = position.clone();
    +264    attachedCards.clear();
    +265    if (pile?.canMoveCard(this, MoveMethod.drag) ?? false) {
    +266      _isDragging = true;
    +267      priority = 100;
    +268      if (pile is TableauPile) {
    +269        final extraCards = (pile! as TableauPile).cardsOnTop(this);
    +270        for (final card in extraCards) {
    +271          card.priority = attachedCards.length + 101;
    +272          attachedCards.add(card);
    +273        }
    +274      }
    +275    }
    +276  }
    +277
    +278  @override
    +279  void onDragUpdate(DragUpdateEvent event) {
    +280    if (!_isDragging) {
    +281      return;
    +282    }
    +283    final delta = event.localDelta;
    +284    position.add(delta);
    +285    attachedCards.forEach((card) => card.position.add(delta));
    +286  }
    +287
    +288  @override
    +289  void onDragEnd(DragEndEvent event) {
    +290    super.onDragEnd(event);
    +291    if (!_isDragging) {
    +292      return;
    +293    }
    +294    _isDragging = false;
    +295
    +296    // If short drag, return card to Pile and treat it as having been tapped.
    +297    final shortDrag =
    +298        (position - _whereCardStarted).length < KlondikeGame.dragTolerance;
    +299    if (shortDrag && attachedCards.isEmpty) {
    +300      doMove(
    +301        _whereCardStarted,
    +302        onComplete: () {
    +303          pile!.returnCard(this);
    +304          // Card moves to its Foundation Pile next, if valid, or it stays put.
    +305          handleTapUp();
    +306        },
    +307      );
    +308      return;
    +309    }
    +310
    +311    // Find out what is under the center-point of this card when it is dropped.
    +312    final dropPiles = parent!
    +313        .componentsAtPoint(position + size / 2)
    +314        .whereType<Pile>()
    +315        .toList();
    +316    if (dropPiles.isNotEmpty) {
    +317      if (dropPiles.first.canAcceptCard(this)) {
    +318        // Found a Pile: move card(s) the rest of the way onto it.
    +319        pile!.removeCard(this, MoveMethod.drag);
    +320        if (dropPiles.first is TableauPile) {
    +321          // Get TableauPile to handle positions, priorities and moves of cards.
    +322          (dropPiles.first as TableauPile).dropCards(this, attachedCards);
    +323          attachedCards.clear();
    +324        } else {
    +325          // Drop a single card onto a FoundationPile.
    +326          final dropPosition = (dropPiles.first as FoundationPile).position;
    +327          doMove(
    +328            dropPosition,
    +329            onComplete: () {
    +330              dropPiles.first.acquireCard(this);
    +331            },
    +332          );
    +333        }
    +334        return;
    +335      }
    +336    }
    +337
    +338    // Invalid drop (middle of nowhere, invalid pile or invalid card for pile).
    +339    doMove(
    +340      _whereCardStarted,
    +341      onComplete: () {
    +342        pile!.returnCard(this);
    +343      },
    +344    );
    +345    if (attachedCards.isNotEmpty) {
    +346      attachedCards.forEach((card) {
    +347        final offset = card.position - position;
    +348        card.doMove(
    +349          _whereCardStarted + offset,
    +350          onComplete: () {
    +351            pile!.returnCard(card);
    +352          },
    +353        );
    +354      });
    +355      attachedCards.clear();
    +356    }
    +357  }
    +358
    +359  //#endregion
    +360
    +361  //#region Card-Tapping
    +362
    +363  // Tap a face-up card to make it auto-move and go out (if acceptable), but
    +364  // if it is face-down and on the Stock Pile, pass the event to that pile.
    +365
    +366  @override
    +367  void onTapUp(TapUpEvent event) {
    +368    handleTapUp();
    +369  }
    +370
    +371  void handleTapUp() {
    +372    // Can be called by onTapUp or after a very short (failed) drag-and-drop.
    +373    // We need to be more user-friendly towards taps that include a short drag.
    +374    if (pile?.canMoveCard(this, MoveMethod.tap) ?? false) {
    +375      final suitIndex = suit.value;
    +376      if (world.foundations[suitIndex].canAcceptCard(this)) {
    +377        pile!.removeCard(this, MoveMethod.tap);
    +378        doMove(
    +379          world.foundations[suitIndex].position,
    +380          onComplete: () {
    +381            world.foundations[suitIndex].acquireCard(this);
    +382          },
    +383        );
    +384      }
    +385    } else if (pile is StockPile) {
    +386      world.stock.handleTapUp(this);
    +387    }
    +388  }
    +389
    +390  //#endRegion
    +391
    +392  //#region Effects
    +393
    +394  void doMove(
    +395    Vector2 to, {
    +396    double speed = 10.0,
    +397    double start = 0.0,
    +398    int startPriority = 100,
    +399    Curve curve = Curves.easeOutQuad,
    +400    VoidCallback? onComplete,
    +401  }) {
    +402    assert(speed > 0.0, 'Speed must be > 0 widths per second');
    +403    final dt = (to - position).length / (speed * size.x);
    +404    assert(dt > 0, 'Distance to move must be > 0');
    +405    add(
    +406      CardMoveEffect(
    +407        to,
    +408        EffectController(duration: dt, startDelay: start, curve: curve),
    +409        transitPriority: startPriority,
    +410        onComplete: () {
    +411          onComplete?.call();
    +412        },
    +413      ),
    +414    );
    +415  }
    +416
    +417  void doMoveAndFlip(
    +418    Vector2 to, {
    +419    double speed = 10.0,
    +420    double start = 0.0,
    +421    Curve curve = Curves.easeOutQuad,
    +422    VoidCallback? whenDone,
    +423  }) {
    +424    assert(speed > 0.0, 'Speed must be > 0 widths per second');
    +425    final dt = (to - position).length / (speed * size.x);
    +426    assert(dt > 0, 'Distance to move must be > 0');
    +427    priority = 100;
    +428    add(
    +429      MoveToEffect(
    +430        to,
    +431        EffectController(duration: dt, startDelay: start, curve: curve),
    +432        onComplete: () {
    +433          turnFaceUp(
    +434            onComplete: whenDone,
    +435          );
    +436        },
    +437      ),
    +438    );
    +439  }
    +440
    +441  void turnFaceUp({
    +442    double time = 0.3,
    +443    double start = 0.0,
    +444    VoidCallback? onComplete,
    +445  }) {
    +446    assert(!_isFaceUpView, 'Card must be face-down before turning face-up.');
    +447    assert(time > 0.0, 'Time to turn card over must be > 0');
    +448    assert(start >= 0.0, 'Start tim must be >= 0');
    +449    _isAnimatedFlip = true;
    +450    anchor = Anchor.topCenter;
    +451    position += Vector2(width / 2, 0);
    +452    priority = 100;
    +453    add(
    +454      ScaleEffect.to(
    +455        Vector2(scale.x / 100, scale.y),
    +456        EffectController(
    +457          startDelay: start,
    +458          curve: Curves.easeOutSine,
    +459          duration: time / 2,
    +460          onMax: () {
    +461            _isFaceUpView = true;
    +462          },
    +463          reverseDuration: time / 2,
    +464          onMin: () {
    +465            _isAnimatedFlip = false;
    +466            _faceUp = true;
    +467            anchor = Anchor.topLeft;
    +468            position -= Vector2(width / 2, 0);
    +469          },
    +470        ),
    +471        onComplete: () {
    +472          onComplete?.call();
    +473        },
    +474      ),
    +475    );
    +476  }
    +477
    +478  //#endregion
    +479}
    +480
    +481class CardMoveEffect extends MoveToEffect {
    +482  CardMoveEffect(
    +483    super.destination,
    +484    super.controller, {
    +485    super.onComplete,
    +486    this.transitPriority = 100,
    +487  });
    +488
    +489  final int transitPriority;
    +490
    +491  @override
    +492  void onStart() {
    +493    super.onStart(); // Flame connects MoveToEffect to EffectController.
    +494    parent?.priority = transitPriority;
    +495  }
    +496}
    +
    +
    +
    +components/flat_button.dart
    +
     1import 'package:flame/components.dart';
    + 2import 'package:flame/input.dart';
    + 3import 'package:flame/text.dart';
    + 4import 'package:flutter/material.dart';
    + 5
    + 6class FlatButton extends ButtonComponent {
    + 7  FlatButton(
    + 8    String text, {
    + 9    super.size,
    +10    super.onReleased,
    +11    super.position,
    +12  }) : super(
    +13          button: ButtonBackground(const Color(0xffece8a3)),
    +14          buttonDown: ButtonBackground(Colors.red),
    +15          children: [
    +16            TextComponent(
    +17              text: text,
    +18              textRenderer: TextPaint(
    +19                style: TextStyle(
    +20                  fontSize: 0.5 * size!.y,
    +21                  fontWeight: FontWeight.bold,
    +22                  color: const Color(0xffdbaf58),
    +23                ),
    +24              ),
    +25              position: size / 2.0,
    +26              anchor: Anchor.center,
    +27            ),
    +28          ],
    +29          anchor: Anchor.center,
    +30        );
    +31}
    +32
    +33class ButtonBackground extends PositionComponent with HasAncestor<FlatButton> {
    +34  final _paint = Paint()..style = PaintingStyle.stroke;
    +35
    +36  late double cornerRadius;
    +37
    +38  ButtonBackground(Color color) {
    +39    _paint.color = color;
    +40  }
    +41
    +42  @override
    +43  void onMount() {
    +44    super.onMount();
    +45    size = ancestor.size;
    +46    cornerRadius = 0.3 * size.y;
    +47    _paint.strokeWidth = 0.05 * size.y;
    +48  }
    +49
    +50  late final _background = RRect.fromRectAndRadius(
    +51    size.toRect(),
    +52    Radius.circular(cornerRadius),
    +53  );
    +54
    +55  @override
    +56  void render(Canvas canvas) {
    +57    canvas.drawRRect(_background, _paint);
    +58  }
    +59}
    +
    +
    +
    +components/foundation_pile.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:flame/components.dart';
    + 4
    + 5import '../klondike_game.dart';
    + 6import '../pile.dart';
    + 7import '../suit.dart';
    + 8import 'card.dart';
    + 9
    +10class FoundationPile extends PositionComponent implements Pile {
    +11  FoundationPile(int intSuit, this.checkWin, {super.position})
    +12      : suit = Suit.fromInt(intSuit),
    +13        super(size: KlondikeGame.cardSize);
    +14
    +15  final VoidCallback checkWin;
    +16
    +17  final Suit suit;
    +18  final List<Card> _cards = [];
    +19
    +20  //#region Pile API
    +21
    +22  bool get isFull => _cards.length == 13;
    +23
    +24  @override
    +25  bool canMoveCard(Card card, MoveMethod method) =>
    +26      _cards.isNotEmpty && card == _cards.last && method != MoveMethod.tap;
    +27
    +28  @override
    +29  bool canAcceptCard(Card card) {
    +30    final topCardRank = _cards.isEmpty ? 0 : _cards.last.rank.value;
    +31    return card.suit == suit &&
    +32        card.rank.value == topCardRank + 1 &&
    +33        card.attachedCards.isEmpty;
    +34  }
    +35
    +36  @override
    +37  void removeCard(Card card, MoveMethod method) {
    +38    assert(canMoveCard(card, method));
    +39    _cards.removeLast();
    +40  }
    +41
    +42  @override
    +43  void returnCard(Card card) {
    +44    card.position = position;
    +45    card.priority = _cards.indexOf(card);
    +46  }
    +47
    +48  @override
    +49  void acquireCard(Card card) {
    +50    assert(card.isFaceUp);
    +51    card.position = position;
    +52    card.priority = _cards.length;
    +53    card.pile = this;
    +54    _cards.add(card);
    +55    if (isFull) {
    +56      checkWin(); // Get KlondikeWorld to check all FoundationPiles.
    +57    }
    +58  }
    +59
    +60  //#endregion
    +61
    +62  //#region Rendering
    +63
    +64  final _borderPaint = Paint()
    +65    ..style = PaintingStyle.stroke
    +66    ..strokeWidth = 10
    +67    ..color = const Color(0x50ffffff);
    +68  late final _suitPaint = Paint()
    +69    ..color = suit.isRed ? const Color(0x3a000000) : const Color(0x64000000)
    +70    ..blendMode = BlendMode.luminosity;
    +71
    +72  @override
    +73  void render(Canvas canvas) {
    +74    canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint);
    +75    suit.sprite.render(
    +76      canvas,
    +77      position: size / 2,
    +78      anchor: Anchor.center,
    +79      size: Vector2.all(KlondikeGame.cardWidth * 0.6),
    +80      overridePaint: _suitPaint,
    +81    );
    +82  }
    +83
    +84  //#endregion
    +85}
    +
    +
    +
    +components/stock_pile.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:flame/components.dart';
    + 4
    + 5import '../klondike_game.dart';
    + 6import '../pile.dart';
    + 7import 'card.dart';
    + 8import 'waste_pile.dart';
    + 9
    +10class StockPile extends PositionComponent
    +11    with HasGameReference<KlondikeGame>
    +12    implements Pile {
    +13  StockPile({super.position}) : super(size: KlondikeGame.cardSize);
    +14
    +15  /// Which cards are currently placed onto this pile. The first card in the
    +16  /// list is at the bottom, the last card is on top.
    +17  final List<Card> _cards = [];
    +18
    +19  //#region Pile API
    +20
    +21  @override
    +22  bool canMoveCard(Card card, MoveMethod method) => false;
    +23  // Can be moved by onTapUp callback (see below).
    +24
    +25  @override
    +26  bool canAcceptCard(Card card) => false;
    +27
    +28  @override
    +29  void removeCard(Card card, MoveMethod method) =>
    +30      throw StateError('cannot remove cards');
    +31
    +32  @override
    +33  // Card cannot be removed but could have been dragged out of place.
    +34  void returnCard(Card card) => card.priority = _cards.indexOf(card);
    +35
    +36  @override
    +37  void acquireCard(Card card) {
    +38    assert(card.isFaceDown);
    +39    card.pile = this;
    +40    card.position = position;
    +41    card.priority = _cards.length;
    +42    _cards.add(card);
    +43  }
    +44
    +45  //#endregion
    +46
    +47  void handleTapUp(Card card) {
    +48    final wastePile = parent!.firstChild<WastePile>()!;
    +49    if (_cards.isEmpty) {
    +50      assert(card.isBaseCard, 'Stock Pile is empty, but no Base Card present');
    +51      card.position = position; // Force Base Card (back) into correct position.
    +52      wastePile.removeAllCards().reversed.forEach((card) {
    +53        card.flip();
    +54        acquireCard(card);
    +55      });
    +56    } else {
    +57      for (var i = 0; i < game.klondikeDraw; i++) {
    +58        if (_cards.isNotEmpty) {
    +59          final card = _cards.removeLast();
    +60          card.doMoveAndFlip(
    +61            wastePile.position,
    +62            whenDone: () {
    +63              wastePile.acquireCard(card);
    +64            },
    +65          );
    +66        }
    +67      }
    +68    }
    +69  }
    +70
    +71  //#region Rendering
    +72
    +73  final _borderPaint = Paint()
    +74    ..style = PaintingStyle.stroke
    +75    ..strokeWidth = 10
    +76    ..color = const Color(0xFF3F5B5D);
    +77  final _circlePaint = Paint()
    +78    ..style = PaintingStyle.stroke
    +79    ..strokeWidth = 100
    +80    ..color = const Color(0x883F5B5D);
    +81
    +82  @override
    +83  void render(Canvas canvas) {
    +84    canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint);
    +85    canvas.drawCircle(
    +86      Offset(width / 2, height / 2),
    +87      KlondikeGame.cardWidth * 0.3,
    +88      _circlePaint,
    +89    );
    +90  }
    +91
    +92  //#endregion
    +93}
    +
    +
    +
    +components/tableau_pile.dart
    +
      1import 'dart:ui';
    +  2
    +  3import 'package:flame/components.dart';
    +  4
    +  5import '../klondike_game.dart';
    +  6import '../pile.dart';
    +  7import 'card.dart';
    +  8
    +  9class TableauPile extends PositionComponent implements Pile {
    + 10  TableauPile({super.position}) : super(size: KlondikeGame.cardSize);
    + 11
    + 12  /// Which cards are currently placed onto this pile.
    + 13  final List<Card> _cards = [];
    + 14  final Vector2 _fanOffset1 = Vector2(0, KlondikeGame.cardHeight * 0.05);
    + 15  final Vector2 _fanOffset2 = Vector2(0, KlondikeGame.cardHeight * 0.20);
    + 16
    + 17  //#region Pile API
    + 18
    + 19  @override
    + 20  bool canMoveCard(Card card, MoveMethod method) =>
    + 21      card.isFaceUp && (method == MoveMethod.drag || card == _cards.last);
    + 22  // Drag can move multiple cards: tap can move last card only (to Foundation).
    + 23
    + 24  @override
    + 25  bool canAcceptCard(Card card) {
    + 26    if (_cards.isEmpty) {
    + 27      return card.rank.value == 13;
    + 28    } else {
    + 29      final topCard = _cards.last;
    + 30      return card.suit.isRed == !topCard.suit.isRed &&
    + 31          card.rank.value == topCard.rank.value - 1;
    + 32    }
    + 33  }
    + 34
    + 35  @override
    + 36  void removeCard(Card card, MoveMethod method) {
    + 37    assert(_cards.contains(card) && card.isFaceUp);
    + 38    final index = _cards.indexOf(card);
    + 39    _cards.removeRange(index, _cards.length);
    + 40    if (_cards.isNotEmpty && _cards.last.isFaceDown) {
    + 41      flipTopCard();
    + 42      return;
    + 43    }
    + 44    layOutCards();
    + 45  }
    + 46
    + 47  @override
    + 48  void returnCard(Card card) {
    + 49    card.priority = _cards.indexOf(card);
    + 50    layOutCards();
    + 51  }
    + 52
    + 53  @override
    + 54  void acquireCard(Card card) {
    + 55    card.pile = this;
    + 56    card.priority = _cards.length;
    + 57    _cards.add(card);
    + 58    layOutCards();
    + 59  }
    + 60
    + 61  //#endregion
    + 62
    + 63  void dropCards(Card firstCard, [List<Card> attachedCards = const []]) {
    + 64    final cardList = [firstCard];
    + 65    cardList.addAll(attachedCards);
    + 66    Vector2 nextPosition = _cards.isEmpty ? position : _cards.last.position;
    + 67    var nCardsToMove = cardList.length;
    + 68    for (final card in cardList) {
    + 69      card.pile = this;
    + 70      card.priority = _cards.length;
    + 71      if (_cards.isNotEmpty) {
    + 72        nextPosition =
    + 73            nextPosition + (card.isFaceDown ? _fanOffset1 : _fanOffset2);
    + 74      }
    + 75      _cards.add(card);
    + 76      card.doMove(
    + 77        nextPosition,
    + 78        startPriority: card.priority,
    + 79        onComplete: () {
    + 80          nCardsToMove--;
    + 81          if (nCardsToMove == 0) {
    + 82            calculateHitArea(); // Expand the hit-area.
    + 83          }
    + 84        },
    + 85      );
    + 86    }
    + 87  }
    + 88
    + 89  void flipTopCard({double start = 0.1}) {
    + 90    assert(_cards.last.isFaceDown);
    + 91    _cards.last.turnFaceUp(
    + 92      start: start,
    + 93      onComplete: layOutCards,
    + 94    );
    + 95  }
    + 96
    + 97  void layOutCards() {
    + 98    if (_cards.isEmpty) {
    + 99      calculateHitArea(); // Shrink hit-area when all cards have been removed.
    +100      return;
    +101    }
    +102    _cards[0].position.setFrom(position);
    +103    _cards[0].priority = 0;
    +104    for (var i = 1; i < _cards.length; i++) {
    +105      _cards[i].priority = i;
    +106      _cards[i].position
    +107        ..setFrom(_cards[i - 1].position)
    +108        ..add(_cards[i - 1].isFaceDown ? _fanOffset1 : _fanOffset2);
    +109    }
    +110    calculateHitArea(); // Adjust hit-area to more cards or fewer cards.
    +111  }
    +112
    +113  void calculateHitArea() {
    +114    height = KlondikeGame.cardHeight * 1.5 +
    +115        (_cards.length < 2 ? 0.0 : _cards.last.y - _cards.first.y);
    +116  }
    +117
    +118  List<Card> cardsOnTop(Card card) {
    +119    assert(card.isFaceUp && _cards.contains(card));
    +120    final index = _cards.indexOf(card);
    +121    return _cards.getRange(index + 1, _cards.length).toList();
    +122  }
    +123
    +124  //#region Rendering
    +125
    +126  final _borderPaint = Paint()
    +127    ..style = PaintingStyle.stroke
    +128    ..strokeWidth = 10
    +129    ..color = const Color(0x50ffffff);
    +130
    +131  @override
    +132  void render(Canvas canvas) {
    +133    canvas.drawRRect(KlondikeGame.cardRRect, _borderPaint);
    +134  }
    +135
    +136  //#endregion
    +137}
    +
    +
    +
    +components/waste_pile.dart
    +
     1import 'package:flame/components.dart';
    + 2
    + 3import '../klondike_game.dart';
    + 4import '../pile.dart';
    + 5import 'card.dart';
    + 6
    + 7class WastePile extends PositionComponent
    + 8    with HasGameReference<KlondikeGame>
    + 9    implements Pile {
    +10  WastePile({super.position}) : super(size: KlondikeGame.cardSize);
    +11
    +12  final List<Card> _cards = [];
    +13  final Vector2 _fanOffset = Vector2(KlondikeGame.cardWidth * 0.2, 0);
    +14
    +15  //#region Pile API
    +16
    +17  @override
    +18  bool canMoveCard(Card card, MoveMethod method) =>
    +19      _cards.isNotEmpty && card == _cards.last; // Tap and drag are both OK.
    +20
    +21  @override
    +22  bool canAcceptCard(Card card) => false;
    +23
    +24  @override
    +25  void removeCard(Card card, MoveMethod method) {
    +26    assert(canMoveCard(card, method));
    +27    _cards.removeLast();
    +28    _fanOutTopCards();
    +29  }
    +30
    +31  @override
    +32  void returnCard(Card card) {
    +33    card.priority = _cards.indexOf(card);
    +34    _fanOutTopCards();
    +35  }
    +36
    +37  @override
    +38  void acquireCard(Card card) {
    +39    assert(card.isFaceUp);
    +40    card.pile = this;
    +41    card.position = position;
    +42    card.priority = _cards.length;
    +43    _cards.add(card);
    +44    _fanOutTopCards();
    +45  }
    +46
    +47  //#endregion
    +48
    +49  List<Card> removeAllCards() {
    +50    final cards = _cards.toList();
    +51    _cards.clear();
    +52    return cards;
    +53  }
    +54
    +55  void _fanOutTopCards() {
    +56    if (game.klondikeDraw == 1) {
    +57      // No fan-out in Klondike Draw 1.
    +58      return;
    +59    }
    +60    final n = _cards.length;
    +61    for (var i = 0; i < n; i++) {
    +62      _cards[i].position = position;
    +63    }
    +64    if (n == 2) {
    +65      _cards[1].position.add(_fanOffset);
    +66    } else if (n >= 3) {
    +67      _cards[n - 2].position.add(_fanOffset);
    +68      _cards[n - 1].position.addScaled(_fanOffset, 2);
    +69    }
    +70  }
    +71}
    +
    +
    +
    +klondike_game.dart
    +
     1import 'dart:ui';
    + 2
    + 3import 'package:flame/components.dart';
    + 4import 'package:flame/flame.dart';
    + 5import 'package:flame/game.dart';
    + 6
    + 7import 'klondike_world.dart';
    + 8
    + 9enum Action { newDeal, sameDeal, changeDraw, haveFun }
    +10
    +11class KlondikeGame extends FlameGame<KlondikeWorld> {
    +12  static const double cardGap = 175.0;
    +13  static const double topGap = 500.0;
    +14  static const double cardWidth = 1000.0;
    +15  static const double cardHeight = 1400.0;
    +16  static const double cardRadius = 100.0;
    +17  static const double cardSpaceWidth = cardWidth + cardGap;
    +18  static const double cardSpaceHeight = cardHeight + cardGap;
    +19  static final Vector2 cardSize = Vector2(cardWidth, cardHeight);
    +20  static final cardRRect = RRect.fromRectAndRadius(
    +21    const Rect.fromLTWH(0, 0, cardWidth, cardHeight),
    +22    const Radius.circular(cardRadius),
    +23  );
    +24
    +25  /// Constant used to decide when a short drag is treated as a TapUp event.
    +26  static const double dragTolerance = cardWidth / 5;
    +27
    +28  /// Constant used when creating Random seed.
    +29  static const int maxInt = 0xFFFFFFFE; // = (2 to the power 32) - 1
    +30
    +31  // This KlondikeGame constructor also initiates the first KlondikeWorld.
    +32  KlondikeGame() : super(world: KlondikeWorld());
    +33
    +34  // These three values persist between games and are starting conditions
    +35  // for the next game to be played in KlondikeWorld. The actual seed is
    +36  // computed in KlondikeWorld but is held here in case the player chooses
    +37  // to replay a game by selecting Action.sameDeal.
    +38  int klondikeDraw = 1;
    +39  int seed = 1;
    +40  Action action = Action.newDeal;
    +41}
    +42
    +43Sprite klondikeSprite(double x, double y, double width, double height) {
    +44  return Sprite(
    +45    Flame.images.fromCache('klondike-sprites.png'),
    +46    srcPosition: Vector2(x, y),
    +47    srcSize: Vector2(width, height),
    +48  );
    +49}
    +
    +
    +
    +klondike_world.dart
    +
      1import 'dart:math';
    +  2
    +  3import 'package:flame/components.dart';
    +  4import 'package:flame/flame.dart';
    +  5
    +  6import 'components/card.dart';
    +  7import 'components/flat_button.dart';
    +  8import 'components/foundation_pile.dart';
    +  9import 'components/stock_pile.dart';
    + 10import 'components/tableau_pile.dart';
    + 11import 'components/waste_pile.dart';
    + 12
    + 13import 'klondike_game.dart';
    + 14
    + 15class KlondikeWorld extends World with HasGameReference<KlondikeGame> {
    + 16  final cardGap = KlondikeGame.cardGap;
    + 17  final topGap = KlondikeGame.topGap;
    + 18  final cardSpaceWidth = KlondikeGame.cardSpaceWidth;
    + 19  final cardSpaceHeight = KlondikeGame.cardSpaceHeight;
    + 20
    + 21  final stock = StockPile(position: Vector2(0.0, 0.0));
    + 22  final waste = WastePile(position: Vector2(0.0, 0.0));
    + 23  final List<FoundationPile> foundations = [];
    + 24  final List<TableauPile> tableauPiles = [];
    + 25  final List<Card> cards = [];
    + 26  late Vector2 playAreaSize;
    + 27
    + 28  @override
    + 29  Future<void> onLoad() async {
    + 30    await Flame.images.load('klondike-sprites.png');
    + 31
    + 32    stock.position = Vector2(cardGap, topGap);
    + 33    waste.position = Vector2(cardSpaceWidth + cardGap, topGap);
    + 34
    + 35    for (var i = 0; i < 4; i++) {
    + 36      foundations.add(
    + 37        FoundationPile(
    + 38          i,
    + 39          checkWin,
    + 40          position: Vector2((i + 3) * cardSpaceWidth + cardGap, topGap),
    + 41        ),
    + 42      );
    + 43    }
    + 44    for (var i = 0; i < 7; i++) {
    + 45      tableauPiles.add(
    + 46        TableauPile(
    + 47          position: Vector2(
    + 48            i * cardSpaceWidth + cardGap,
    + 49            cardSpaceHeight + topGap,
    + 50          ),
    + 51        ),
    + 52      );
    + 53    }
    + 54
    + 55    // Add a Base Card to the Stock Pile, above the pile and below other cards.
    + 56    final baseCard = Card(1, 0, isBaseCard: true);
    + 57    baseCard.position = stock.position;
    + 58    baseCard.priority = -1;
    + 59    baseCard.pile = stock;
    + 60    stock.priority = -2;
    + 61
    + 62    for (var rank = 1; rank <= 13; rank++) {
    + 63      for (var suit = 0; suit < 4; suit++) {
    + 64        final card = Card(rank, suit);
    + 65        card.position = stock.position;
    + 66        cards.add(card);
    + 67      }
    + 68    }
    + 69
    + 70    add(stock);
    + 71    add(waste);
    + 72    addAll(foundations);
    + 73    addAll(tableauPiles);
    + 74    addAll(cards);
    + 75    add(baseCard);
    + 76
    + 77    playAreaSize =
    + 78        Vector2(7 * cardSpaceWidth + cardGap, 4 * cardSpaceHeight + topGap);
    + 79    final gameMidX = playAreaSize.x / 2;
    + 80
    + 81    addButton('New deal', gameMidX, Action.newDeal);
    + 82    addButton('Same deal', gameMidX + cardSpaceWidth, Action.sameDeal);
    + 83    addButton('Draw 1 or 3', gameMidX + 2 * cardSpaceWidth, Action.changeDraw);
    + 84    addButton('Have fun', gameMidX + 3 * cardSpaceWidth, Action.haveFun);
    + 85
    + 86    final camera = game.camera;
    + 87    camera.viewfinder.visibleGameSize = playAreaSize;
    + 88    camera.viewfinder.position = Vector2(gameMidX, 0);
    + 89    camera.viewfinder.anchor = Anchor.topCenter;
    + 90
    + 91    deal();
    + 92  }
    + 93
    + 94  void addButton(String label, double buttonX, Action action) {
    + 95    final button = FlatButton(
    + 96      label,
    + 97      size: Vector2(KlondikeGame.cardWidth, 0.6 * topGap),
    + 98      position: Vector2(buttonX, topGap / 2),
    + 99      onReleased: () {
    +100        if (action == Action.haveFun) {
    +101          // Shortcut to the "win" sequence, for Tutorial purposes only.
    +102          letsCelebrate();
    +103        } else {
    +104          // Restart with a new deal or the same deal as before.
    +105          game.action = action;
    +106          game.world = KlondikeWorld();
    +107        }
    +108      },
    +109    );
    +110    add(button);
    +111  }
    +112
    +113  void deal() {
    +114    assert(cards.length == 52, 'There are ${cards.length} cards: should be 52');
    +115
    +116    if (game.action != Action.sameDeal) {
    +117      // New deal: change the Random Number Generator's seed.
    +118      game.seed = Random().nextInt(KlondikeGame.maxInt);
    +119      if (game.action == Action.changeDraw) {
    +120        game.klondikeDraw = (game.klondikeDraw == 3) ? 1 : 3;
    +121      }
    +122    }
    +123    // For the "Same deal" option, re-use the previous seed, else use a new one.
    +124    cards.shuffle(Random(game.seed));
    +125
    +126    // Each card dealt must be seen to come from the top of the deck!
    +127    var dealPriority = 1;
    +128    for (final card in cards) {
    +129      card.priority = dealPriority++;
    +130    }
    +131
    +132    // Change priority as cards take off: so later cards fly above earlier ones.
    +133    var cardToDeal = cards.length - 1;
    +134    var nMovingCards = 0;
    +135    for (var i = 0; i < 7; i++) {
    +136      for (var j = i; j < 7; j++) {
    +137        final card = cards[cardToDeal--];
    +138        card.doMove(
    +139          tableauPiles[j].position,
    +140          speed: 15.0,
    +141          start: nMovingCards * 0.15,
    +142          startPriority: 100 + nMovingCards,
    +143          onComplete: () {
    +144            tableauPiles[j].acquireCard(card);
    +145            nMovingCards--;
    +146            if (nMovingCards == 0) {
    +147              var delayFactor = 0;
    +148              for (final tableauPile in tableauPiles) {
    +149                delayFactor++;
    +150                tableauPile.flipTopCard(start: delayFactor * 0.15);
    +151              }
    +152            }
    +153          },
    +154        );
    +155        nMovingCards++;
    +156      }
    +157    }
    +158    for (var n = 0; n <= cardToDeal; n++) {
    +159      stock.acquireCard(cards[n]);
    +160    }
    +161  }
    +162
    +163  void checkWin() {
    +164    // Callback from a Foundation Pile when it is full (Ace to King).
    +165    var nComplete = 0;
    +166    for (final f in foundations) {
    +167      if (f.isFull) {
    +168        nComplete++;
    +169      }
    +170    }
    +171    if (nComplete == foundations.length) {
    +172      letsCelebrate();
    +173    }
    +174  }
    +175
    +176  void letsCelebrate({int phase = 1}) {
    +177    // Deal won: bring all cards to the middle of the screen (phase 1)
    +178    // then scatter them to points just outside the screen (phase 2).
    +179    //
    +180    // First get the device's screen-size in game co-ordinates, then get the
    +181    // top-left of the off-screen area that will accept the scattered cards.
    +182    // Note: The play area is anchored at TopCenter, so topLeft.y is fixed.
    +183
    +184    final cameraZoom = game.camera.viewfinder.zoom;
    +185    final zoomedScreen = game.size / cameraZoom;
    +186    final screenCenter = (playAreaSize - KlondikeGame.cardSize) / 2;
    +187    final topLeft = Vector2(
    +188      (playAreaSize.x - zoomedScreen.x) / 2 - KlondikeGame.cardWidth,
    +189      -KlondikeGame.cardHeight,
    +190    );
    +191    final nCards = cards.length;
    +192    final offscreenHeight = zoomedScreen.y + KlondikeGame.cardSize.y;
    +193    final offscreenWidth = zoomedScreen.x + KlondikeGame.cardSize.x;
    +194    final spacing = 2.0 * (offscreenHeight + offscreenWidth) / nCards;
    +195
    +196    // Starting points, directions and lengths of offscreen rect's sides.
    +197    final corner = [
    +198      Vector2(0.0, 0.0),
    +199      Vector2(0.0, offscreenHeight),
    +200      Vector2(offscreenWidth, offscreenHeight),
    +201      Vector2(offscreenWidth, 0.0),
    +202    ];
    +203    final direction = [
    +204      Vector2(0.0, 1.0),
    +205      Vector2(1.0, 0.0),
    +206      Vector2(0.0, -1.0),
    +207      Vector2(-1.0, 0.0),
    +208    ];
    +209    final length = [
    +210      offscreenHeight,
    +211      offscreenWidth,
    +212      offscreenHeight,
    +213      offscreenWidth,
    +214    ];
    +215
    +216    var side = 0;
    +217    var cardsToMove = nCards;
    +218    var offScreenPosition = corner[side] + topLeft;
    +219    var space = length[side];
    +220    var cardNum = 0;
    +221
    +222    while (cardNum < nCards) {
    +223      final cardIndex = phase == 1 ? cardNum : nCards - cardNum - 1;
    +224      final card = cards[cardIndex];
    +225      card.priority = cardIndex + 1;
    +226      if (card.isFaceDown) {
    +227        card.flip();
    +228      }
    +229      // Start cards a short time apart to give a riffle effect.
    +230      final delay = phase == 1 ? cardNum * 0.02 : 0.5 + cardNum * 0.04;
    +231      final destination = (phase == 1) ? screenCenter : offScreenPosition;
    +232      card.doMove(
    +233        destination,
    +234        speed: (phase == 1) ? 15.0 : 5.0,
    +235        start: delay,
    +236        onComplete: () {
    +237          cardsToMove--;
    +238          if (cardsToMove == 0) {
    +239            if (phase == 1) {
    +240              letsCelebrate(phase: 2);
    +241            } else {
    +242              // Restart with a new deal after winning or pressing "Have fun".
    +243              game.action = Action.newDeal;
    +244              game.world = KlondikeWorld();
    +245            }
    +246          }
    +247        },
    +248      );
    +249      cardNum++;
    +250      if (phase == 1) {
    +251        continue;
    +252      }
    +253
    +254      // Phase 2: next card goes to same side with full spacing, if possible.
    +255      offScreenPosition = offScreenPosition + direction[side] * spacing;
    +256      space = space - spacing;
    +257      if ((space < 0.0) && (side < 3)) {
    +258        // Out of space: change to the next side and use excess spacing there.
    +259        side++;
    +260        offScreenPosition = corner[side] + topLeft - direction[side] * space;
    +261        space = length[side] + space;
    +262      }
    +263    }
    +264  }
    +265}
    +
    +
    +
    +main.dart
    +
    1import 'package:flame/game.dart';
    +2import 'package:flutter/widgets.dart';
    +3
    +4import 'klondike_game.dart';
    +5
    +6void main() {
    +7  final game = KlondikeGame();
    +8  runApp(GameWidget(game: game));
    +9}
    +
    +
    +
    +pile.dart
    +
     1import 'components/card.dart';
    + 2
    + 3enum MoveMethod { drag, tap }
    + 4
    + 5abstract class Pile {
    + 6  /// Returns true if the [card] can be taken away from this pile and moved
    + 7  /// somewhere else. A tapping move may need additional validation.
    + 8  bool canMoveCard(Card card, MoveMethod method);
    + 9
    +10  /// Returns true if the [card] can be placed on top of this pile. The [card]
    +11  /// may have other cards "attached" to it.
    +12  bool canAcceptCard(Card card);
    +13
    +14  /// Removes [card] from this pile; this method will only be called for a card
    +15  /// that both belong to this pile, and for which [canMoveCard] returns true.
    +16  void removeCard(Card card, MoveMethod method);
    +17
    +18  /// Places a single [card] on top of this pile. This method will only be
    +19  /// called for a card for which [canAcceptCard] returns true.
    +20  void acquireCard(Card card);
    +21
    +22  /// Returns a [card], which already belongs to this pile, to its proper place.
    +23  void returnCard(Card card);
    +24}
    +
    +
    +
    +rank.dart
    +
     1import 'package:flame/components.dart';
    + 2import 'package:flutter/foundation.dart';
    + 3import 'klondike_game.dart';
    + 4
    + 5@immutable
    + 6class Rank {
    + 7  factory Rank.fromInt(int value) {
    + 8    assert(
    + 9      value >= 1 && value <= 13,
    +10      'value is outside of the bounds of what a rank can be',
    +11    );
    +12    return _singletons[value - 1];
    +13  }
    +14
    +15  Rank._(
    +16    this.value,
    +17    this.label,
    +18    double x1,
    +19    double y1,
    +20    double x2,
    +21    double y2,
    +22    double w,
    +23    double h,
    +24  )   : redSprite = klondikeSprite(x1, y1, w, h),
    +25        blackSprite = klondikeSprite(x2, y2, w, h);
    +26
    +27  final int value;
    +28  final String label;
    +29  final Sprite redSprite;
    +30  final Sprite blackSprite;
    +31
    +32  static final List<Rank> _singletons = [
    +33    Rank._(1, 'A', 335, 164, 789, 161, 120, 129),
    +34    Rank._(2, '2', 20, 19, 15, 322, 83, 125),
    +35    Rank._(3, '3', 122, 19, 117, 322, 80, 127),
    +36    Rank._(4, '4', 213, 12, 208, 315, 93, 132),
    +37    Rank._(5, '5', 314, 21, 309, 324, 85, 125),
    +38    Rank._(6, '6', 419, 17, 414, 320, 84, 129),
    +39    Rank._(7, '7', 509, 21, 505, 324, 92, 128),
    +40    Rank._(8, '8', 612, 19, 607, 322, 78, 127),
    +41    Rank._(9, '9', 709, 19, 704, 322, 84, 130),
    +42    Rank._(10, '10', 810, 20, 805, 322, 137, 127),
    +43    Rank._(11, 'J', 15, 170, 469, 167, 56, 126),
    +44    Rank._(12, 'Q', 92, 168, 547, 165, 132, 128),
    +45    Rank._(13, 'K', 243, 170, 696, 167, 92, 123),
    +46  ];
    +47}
    +
    +
    +
    +suit.dart
    +
     1import 'package:flame/sprite.dart';
    + 2import 'package:flutter/foundation.dart';
    + 3import 'klondike_game.dart';
    + 4
    + 5@immutable
    + 6class Suit {
    + 7  factory Suit.fromInt(int index) {
    + 8    assert(
    + 9      index >= 0 && index <= 3,
    +10      'index is outside of the bounds of what a suit can be',
    +11    );
    +12    return _singletons[index];
    +13  }
    +14
    +15  Suit._(this.value, this.label, double x, double y, double w, double h)
    +16      : sprite = klondikeSprite(x, y, w, h);
    +17
    +18  final int value;
    +19  final String label;
    +20  final Sprite sprite;
    +21
    +22  static final List<Suit> _singletons = [
    +23    Suit._(0, '♥', 1176, 17, 172, 183),
    +24    Suit._(1, '♦', 973, 14, 177, 182),
    +25    Suit._(2, '♣', 974, 226, 184, 172),
    +26    Suit._(3, '♠', 1178, 220, 176, 182),
    +27  ];
    +28
    +29  /// Hearts and Diamonds are red, while Clubs and Spades are black.
    +30  bool get isRed => value <= 1;
    +31  bool get isBlack => value >= 2;
    +32}
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/platformer/platformer.html b/docs/1.18.0/tutorials/platformer/platformer.html new file mode 100644 index 000000000..a36a78324 --- /dev/null +++ b/docs/1.18.0/tutorials/platformer/platformer.html @@ -0,0 +1,377 @@ + + + + + + + Ember Quest Game Tutorial — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Ember Quest Game Tutorial

    +

    In this tutorial, we will follow a step-by-step process for coding a game using the Flame +engine.

    +

    This tutorial assumes that you have at least some familiarity with common programming concepts, and +with the Dart programming language.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/platformer/step_1.html b/docs/1.18.0/tutorials/platformer/step_1.html new file mode 100644 index 000000000..f088e2250 --- /dev/null +++ b/docs/1.18.0/tutorials/platformer/step_1.html @@ -0,0 +1,463 @@ + + + + + + + 1. Preparation — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    1. Preparation

    +

    Before you begin any kind of game project, you need an idea of what you want to make and I like to +then give it a name. For this tutorial and game, Ember will be on a quest to gather as many +(GitHub) stars as possible and I will call the game, Ember Quest.

    +

    Now it is time to get started, but first you need to go to the bare flame game +tutorial and complete the necessary setup steps. When you come back, you +should already have the main.dart file with the following content:

    +
    import 'package:flame/game.dart';
    +import 'package:flutter/widgets.dart';
    +
    +void main() {
    +  final game = FlameGame();
    +  runApp(GameWidget(game: game));
    +}
    +
    +
    +
    +

    Planning

    +

    Like in the klondike tutorial, starting a new game can feel overwhelming. +I like to first decide what platform I am trying to target. Will this be a mobile game, a desktop +game, or maybe a web game, with Flutter and Flame, these are all possible. For this game though, I +am going to focus on a web game. This means my users will interact with the game using their +keyboards.

    +

    Starting with a simple sketch (it doesn’t have to be perfect as mine is very rough) is +the best way to get an understanding of what will need to be accomplished. For the sketch below, +we know we will need the following:

    +
      +
    • Player Class

    • +
    • Enemy Class

    • +
    • Star Class

    • +
    • Platform Class

    • +
    • Ground Class

    • +
    • HUD Class (health and stars collected)

    • +
    +

    Sketch of Ember Quest

    +

    All of these will be brought together in EmberQuestGame derived from FlameGame.

    +
    +
    +

    Assets

    +

    Every game needs assets. Assets are images, sprites, animations, sounds, etc. Now, I am not an +artist, but because I am basing this game on Ember, the flame mascot, and Ember is already designed, +it sets the tone that this will be a pixel art game. There are numerous sites available that +provide free pixel art that can be used in games, but please check and comply with the licensing and +always provide valid creator attribution. For this game though, I am going to take a chance and +make my artwork using an online pixel art tool. If you decide to use this tool, multiple online +tutorials will assist you with the basic operations as well as exporting the assets. Now normally, +most games will utilize sprite sheets. These combine many images into one larger image that can be +sectioned and used as individual images. For this tutorial though, I specifically will save the +images individually as I want to demonstrate the Flame engine’s caching abilities. Ember and the +water enemy are sprite sheets though as they contain multiple images to create animations.

    +

    Right-click the images below, choose “Save as…”, and store them in the assets/images folder of the +project. At this point our project’s structure looks like this:

    +
    emberquest/
    + ├─assets/
    + │  └─images/
    + │     ├─block.png
    + │     ├─ember.png
    + │     ├─ground.png
    + │     ├─heart_half.png
    + │     ├─heart.png
    + │     ├─star.png
    + │     └─water_enemy.png
    + ├─lib/
    + │  └─main.dart
    + └─pubspec.yaml
    +
    +
    +

    Platform Block +Ember Animation +Ground Block +HUD Heart Half Opacity +HUD Heart Full Opacity +Star +Water Enemy Animation

    +
    +

    Note

    +

    You may ask, why are the images different sizes?

    +

    As I was using the online tool to make the assets, I had trouble getting the +detail I desired for the game in a 16x16 block. The heart worked out in 32x32 +and the ground as well as the star were 64x64. Regardless, the asset size does +not matter for the game as we will resize as needed.

    +
    +

    Also, you need to tell Flutter about these images (just having them inside the assets folder is +not enough). To do this, let’s add the following lines into the pubspec.yaml file:

    +
    flutter:
    +  assets:
    +    - assets/images/
    +
    +
    +

    Alright, enough with preparing – onward to coding!

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/platformer/step_2.html b/docs/1.18.0/tutorials/platformer/step_2.html new file mode 100644 index 000000000..a649a44b9 --- /dev/null +++ b/docs/1.18.0/tutorials/platformer/step_2.html @@ -0,0 +1,566 @@ + + + + + + + 2. Start Coding — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    2. Start Coding

    +
    +

    The Plan

    +

    Now that we have the assets loaded and a very rough idea of what classes we will need, we need to +start thinking about how we will implement this game and our goals. To do this, let’s break down +what the game should do:

    +
      +
    • Ember should be able to be controlled to move left, right, and jump.

    • +
    • The level will be infinite, so we need a way to randomly load sections of the level.

    • +
    • The objective is to collect stars while avoiding enemies.

    • +
    • Enemies cannot be killed as you need to use the platforms to avoid them.

    • +
    • If Ember is hit by an enemy, it should reduce Ember’s health by 1.

    • +
    • Ember should have 3 lives to lose.

    • +
    • There should be pits that if Ember falls into, it is automatically game over.

    • +
    • There should be a main menu and a game-over screen that lets the player start over.

    • +
    +

    Now that this is planned out, I know you are probably as excited as I am to begin and I just want to +see Ember on the screen. So let’s do that first.

    +
    +

    Note

    +

    Why did I choose to make this game an infinite side scrolling platformer?

    +

    Well, I wanted to be able to showcase random level loading. No two game plays +will be the same. This exact setup can easily be adapted to be a traditional +level game. As you make your way through this tutorial, you will see how we +could modify the level code to have an end. I will add a note in that section +to explain the appropriate mechanics.

    +
    +
    +
    +

    Loading Assets

    +

    For Ember to be displayed, we will need to load the assets. This can be done in main.dart, but by +so doing, we will quickly clutter the file. To keep our game organized, we should create files that +have a single focus. So let’s create a file in the lib folder called ember_quest.dart. In that +file, we will add:

    +
    import 'package:flame/game.dart';
    +
    +class EmberQuestGame extends FlameGame {
    +  EmberQuestGame();
    +
    +  @override
    +  Future<void> onLoad() async {
    +    await images.loadAll([
    +      'block.png',
    +      'ember.png',
    +      'ground.png',
    +      'heart_half.png',
    +      'heart.png',
    +      'star.png',
    +      'water_enemy.png',
    +    ]);
    +
    +  }
    +}
    +
    +
    +

    As I mentioned in the assets section, we are using multiple individual image +files and for performance reasons, we should leverage Flame’s built-in caching system which will +only load the files once, but allow us to access them as many times as needed without an impact to +the game. await images.loadAll() takes a list of the file names that are found in assets/images +and loads them to cache.

    +
    +
    +

    Scaffolding

    +

    So now that we have our game file, let’s prepare the main.dart file to receive our newly created +FlameGame. Change your entire main.dart file to the following:

    +
    import 'package:flame/game.dart';
    +import 'package:flutter/material.dart';
    +
    +import 'ember_quest.dart';
    +
    +void main() {
    +  runApp(
    +    const GameWidget<EmberQuestGame>.controlled(
    +      gameFactory: EmberQuestGame.new,
    +    ),
    +  );
    +}
    +
    +
    +

    You can run this file and you should just have a blank screen now. Let’s get Ember loaded!

    +
    +
    +

    CameraComponent and World

    +

    To move around in the world we are going the use the built-in CameraComponent and World that +exists on the FlameGame class. +We are going to add all our components to the world and follow the player with the camera.

    +
    import 'package:flame/components.dart';
    +import 'package:flame/game.dart';
    +
    +class EmberQuestGame extends FlameGame {
    +  @override
    +  Future<void> onLoad() async {
    +    await images.loadAll([
    +      'block.png',
    +      'ember.png',
    +      'ground.png',
    +      'heart_half.png',
    +      'heart.png',
    +      'star.png',
    +      'water_enemy.png',
    +    ]);
    +
    +    // Everything in this tutorial assumes that the position
    +    // of the `CameraComponent`s viewfinder (where the camera is looking)
    +    // is in the top left corner, that's why we set the anchor here.
    +    camera.viewfinder.anchor = Anchor.topLeft;
    +  }
    +}
    +
    +
    +
    +
    +

    Ember Time

    +

    Keeping your game files organized can always be a challenge. I like to keep things logically +organized by how they will be involved in my game. So for Ember, let’s create the following folder, +lib/actors and in that folder, create ember.dart. In that file, add the following code:

    +
    import 'package:flame/components.dart';
    +
    +import '../ember_quest.dart';
    +
    +class EmberPlayer extends SpriteAnimationComponent
    +    with HasGameReference<EmberQuestGame> {
    +  EmberPlayer({
    +    required super.position,
    +  }) : super(size: Vector2.all(64), anchor: Anchor.center);
    +
    +  @override
    +  void onLoad() {
    +    animation = SpriteAnimation.fromFrameData(
    +      game.images.fromCache('ember.png'),
    +      SpriteAnimationData.sequenced(
    +        amount: 4,
    +        textureSize: Vector2.all(16),
    +        stepTime: 0.12,
    +      ),
    +    );
    +  }
    +}
    +
    +
    +

    This file uses the HasGameRef mixin which allows us to reach back to ember_quest.dart and +leverage any of the variables or methods that are defined in the game class. You can see this in +use with the line game.images.fromCache('ember.png'). Earlier, we loaded all the files into +cache, so to use that file now, we call fromCache so it can be leveraged by the SpriteAnimation. +The EmberPlayer class is extending a SpriteAnimationComponent which allows us to define +animation as well as position it accordingly in our game world. When we construct this class, the +default size of Vector2.all(64) is defined as the size of Ember in our game world should be 64x64. +You may notice that in the animation SpriteAnimationData, the textureSize is defined as +Vector2.all(16) or 16x16. This is because the individual frame in our ember.png is 16x16 and +there are 4 frames in total. To define the speed of the animation, stepTime is used and set at +0.12 seconds per frame. You can change the stepTime to any length that makes the animation seem +correct for your game vision.

    +

    Now before you rush to run the game again, we have to add Ember to the game world. To do this, go +back to ember_quest.dart and add the following:

    +
    import 'package:flame/game.dart';
    +
    +import 'actors/ember.dart';
    +
    +class EmberQuestGame extends FlameGame {
    +  late EmberPlayer _ember;
    +  
    +  @override
    +  Future<void> onLoad() async {
    +    await images.loadAll([
    +      'block.png',
    +      'ember.png',
    +      'ground.png',
    +      'heart_half.png',
    +      'heart.png',
    +      'star.png',
    +      'water_enemy.png',
    +    ]);
    +
    +    camera.viewfinder.anchor = Anchor.topLeft;
    +    
    +    _ember = EmberPlayer(
    +      position: Vector2(128, canvasSize.y - 70),
    +    );
    +    world.add(_ember);
    +  }
    +}
    +
    +
    +

    Run your game now and you should now see Ember flickering in the lower left-hand corner.

    +
    +
    +

    Building Blocks

    +

    Now that we have Ember showing on screen and we know our basic environment is all working correctly, +it’s time to create a world for Embers Quest! Proceed on to 3. Building the World!

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/platformer/step_3.html b/docs/1.18.0/tutorials/platformer/step_3.html new file mode 100644 index 000000000..fb661ccf2 --- /dev/null +++ b/docs/1.18.0/tutorials/platformer/step_3.html @@ -0,0 +1,778 @@ + + + + + + + 3. Building the World — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    3. Building the World

    +
    +

    Creating Segments

    +

    For this world to be infinite, the best way to approach this is to create segments that can be +reloaded over and over. To do this, we need a rough sketch of what our level segments will look +like. I have created the following sketch to show what the segments would look like and how they can +be repeated:

    +

    Level Segment Sketch

    +

    Each segment is a 10x10 grid and each block is 64 pixels x 64 pixels. This means Ember Quest has a +height of 640 with an infinite width. In my design, there must always be a ground +block at the beginning and the end. Additionally, there must be at least 3 ground blocks that come +before an enemy, including if the segment wraps to another segment. This is because the plan is to +have the enemies traverse back and forth for 3 blocks. Now that we have a plan for the segments, +let’s create a segment manager class.

    +
    +

    Segment Manager

    +

    To get started, we have to understand that we will be referencing our blocks in the segment manager, +so first create a new folder called lib/objects. In that folder, create 3 files called +ground_block.dart, platform_block.dart, and star.dart. Those files just need basic +boilerplate code for the class, so create the following in their respective files:

    +
    class GroundBlock {}
    +
    +class PlatformBlock {}
    +
    +class Star {}
    +
    +
    +

    Also, create water_enemy.dart in the lib/actors folder using this boilerplate code:

    +
    class WaterEnemy {}
    +
    +
    +

    Now we can create a file called segment_manager.dart which will be placed in a new folder called +lib/managers. The segment manager is the heart and soul, if you will, of Ember Quest. This is +where you can get as creative as you want. You do not have to follow my design, just remember that +whatever you design, the segment must follow the rules outlined above. Add the following code to +segment_manager.dart:

    +
    class Block {
    +  // gridPosition position is always segment based X,Y.
    +  // 0,0 is the bottom left corner.
    +  // 10,10 is the upper right corner.
    +  final Vector2 gridPosition;
    +  final Type blockType;
    +  Block(this.gridPosition, this.blockType);
    +}
    +
    +final segments = [
    +  segment0,
    +];
    +
    +final segment0 = [
    +
    +];
    +
    +
    +

    So what this does, is allows us to create segments (segment0, segment1, etc) in a list format that +gets added to the segments list. The individual segments will be made up of multiple entries of the +Block class. This information will allow us to translate the block position from a 10x10 grid to +the actual pixel position in the game world. To create a segment, you need to create +entries for each block that you wish to be rendered from the sketch.

    +

    To understand each segment, if we start in the bottom left corner of the grid in the sketch, we see +that we should place a Block() in the segment0 list with a first parameter gridPosition of a +Vector2(0,0) and a blockType of the GroundBlock class that we created earlier. Remember, the +very bottom left cell is x=0 and y=0 thus the Vector2(x,y) is Vector2(0,0).

    +

    Segment 0 Sketch

    +

    The full segment would look like this:

    +
    final segment0 = [
    +  Block(Vector2(0, 0), GroundBlock),
    +  Block(Vector2(1, 0), GroundBlock),
    +  Block(Vector2(2, 0), GroundBlock),
    +  Block(Vector2(3, 0), GroundBlock),
    +  Block(Vector2(4, 0), GroundBlock),
    +  Block(Vector2(5, 0), GroundBlock),
    +  Block(Vector2(5, 1), WaterEnemy),
    +  Block(Vector2(5, 3), PlatformBlock),
    +  Block(Vector2(6, 0), GroundBlock),
    +  Block(Vector2(6, 3), PlatformBlock),
    +  Block(Vector2(7, 0), GroundBlock),
    +  Block(Vector2(7, 3), PlatformBlock),
    +  Block(Vector2(8, 0), GroundBlock),
    +  Block(Vector2(8, 3), PlatformBlock),
    +  Block(Vector2(9, 0), GroundBlock),
    +];
    +
    +
    +

    Proceed to build the remaining segments. The full segment manager should look like this:

    +
    import 'package:flame/components.dart';
    +
    +import '../actors/water_enemy.dart';
    +import '../objects/ground_block.dart';
    +import '../objects/platform_block.dart';
    +import '../objects/star.dart';
    +
    +class Block {
    +  // gridPosition position is always segment based X,Y.
    +  // 0,0 is the bottom left corner.
    +  // 10,10 is the upper right corner.
    +  final Vector2 gridPosition;
    +  final Type blockType;
    +  Block(this.gridPosition, this.blockType);
    +}
    +
    +final segments = [
    +  segment0,
    +  segment1,
    +  segment2,
    +  segment3,
    +  segment4,
    +];
    +
    +final segment0 = [
    +  Block(Vector2(0, 0), GroundBlock),
    +  Block(Vector2(1, 0), GroundBlock),
    +  Block(Vector2(2, 0), GroundBlock),
    +  Block(Vector2(3, 0), GroundBlock),
    +  Block(Vector2(4, 0), GroundBlock),
    +  Block(Vector2(5, 0), GroundBlock),
    +  Block(Vector2(5, 1), WaterEnemy),
    +  Block(Vector2(5, 3), PlatformBlock),
    +  Block(Vector2(6, 0), GroundBlock),
    +  Block(Vector2(6, 3), PlatformBlock),
    +  Block(Vector2(7, 0), GroundBlock),
    +  Block(Vector2(7, 3), PlatformBlock),
    +  Block(Vector2(8, 0), GroundBlock),
    +  Block(Vector2(8, 3), PlatformBlock),
    +  Block(Vector2(9, 0), GroundBlock),
    +];
    +
    +final segment1 = [
    +  Block(Vector2(0, 0), GroundBlock),
    +  Block(Vector2(1, 0), GroundBlock),
    +  Block(Vector2(1, 1), PlatformBlock),
    +  Block(Vector2(1, 2), PlatformBlock),
    +  Block(Vector2(1, 3), PlatformBlock),
    +  Block(Vector2(2, 6), PlatformBlock),
    +  Block(Vector2(3, 6), PlatformBlock),
    +  Block(Vector2(6, 5), PlatformBlock),
    +  Block(Vector2(7, 5), PlatformBlock),
    +  Block(Vector2(7, 7), Star),
    +  Block(Vector2(8, 0), GroundBlock),
    +  Block(Vector2(8, 1), PlatformBlock),
    +  Block(Vector2(8, 5), PlatformBlock),
    +  Block(Vector2(8, 6), WaterEnemy),
    +  Block(Vector2(9, 0), GroundBlock),
    +];
    +
    +final segment2 = [
    +  Block(Vector2(0, 0), GroundBlock),
    +  Block(Vector2(1, 0), GroundBlock),
    +  Block(Vector2(2, 0), GroundBlock),
    +  Block(Vector2(3, 0), GroundBlock),
    +  Block(Vector2(3, 3), PlatformBlock),
    +  Block(Vector2(4, 0), GroundBlock),
    +  Block(Vector2(4, 3), PlatformBlock),
    +  Block(Vector2(5, 0), GroundBlock),
    +  Block(Vector2(5, 3), PlatformBlock),
    +  Block(Vector2(5, 4), WaterEnemy),
    +  Block(Vector2(6, 0), GroundBlock),
    +  Block(Vector2(6, 3), PlatformBlock),
    +  Block(Vector2(6, 4), PlatformBlock),
    +  Block(Vector2(6, 5), PlatformBlock),
    +  Block(Vector2(6, 7), Star),
    +  Block(Vector2(7, 0), GroundBlock),
    +  Block(Vector2(8, 0), GroundBlock),
    +  Block(Vector2(9, 0), GroundBlock),
    +];
    +
    +final segment3 = [
    +  Block(Vector2(0, 0), GroundBlock),
    +  Block(Vector2(1, 0), GroundBlock),
    +  Block(Vector2(1, 1), WaterEnemy),
    +  Block(Vector2(2, 0), GroundBlock),
    +  Block(Vector2(2, 1), PlatformBlock),
    +  Block(Vector2(2, 2), PlatformBlock),
    +  Block(Vector2(4, 4), PlatformBlock),
    +  Block(Vector2(6, 6), PlatformBlock),
    +  Block(Vector2(7, 0), GroundBlock),
    +  Block(Vector2(7, 1), PlatformBlock),
    +  Block(Vector2(8, 0), GroundBlock),
    +  Block(Vector2(8, 8), Star),
    +  Block(Vector2(9, 0), GroundBlock),
    +];
    +
    +final segment4 = [
    +  Block(Vector2(0, 0), GroundBlock),
    +  Block(Vector2(1, 0), GroundBlock),
    +  Block(Vector2(2, 0), GroundBlock),
    +  Block(Vector2(2, 3), PlatformBlock),
    +  Block(Vector2(3, 0), GroundBlock),
    +  Block(Vector2(3, 1), WaterEnemy),
    +  Block(Vector2(3, 3), PlatformBlock),
    +  Block(Vector2(4, 0), GroundBlock),
    +  Block(Vector2(5, 0), GroundBlock),
    +  Block(Vector2(5, 5), PlatformBlock),
    +  Block(Vector2(6, 0), GroundBlock),
    +  Block(Vector2(6, 5), PlatformBlock),
    +  Block(Vector2(6, 7), Star),
    +  Block(Vector2(7, 0), GroundBlock),
    +  Block(Vector2(8, 0), GroundBlock),
    +  Block(Vector2(8, 3), PlatformBlock),
    +  Block(Vector2(9, 0), GroundBlock),
    +  Block(Vector2(9, 1), WaterEnemy),
    +  Block(Vector2(9, 3), PlatformBlock),
    +];
    +
    +
    +
    +
    +

    Loading the Segments into the World

    +

    Now that our segments are defined, we need to create a way to load these blocks into our world. To +do that, we are going to start work in the ember_quest.dart file. We will create a loadSegments +method that when given an index for the segments list, will then loop through that segment from +our segment_manager and we will add the appropriate blocks later. It should look like this:

    +
    void loadGameSegments(int segmentIndex, double xPositionOffset) {
    +    for (final block in segments[segmentIndex]) {
    +      switch (block.blockType) {
    +        case GroundBlock:
    +        case PlatformBlock:
    +        case Star:
    +        case WaterEnemy:
    +      }
    +    }
    +  }
    +
    +
    +

    You will need to add the following imports if they were not auto-imported:

    +
    import 'actors/water_enemy.dart';
    +import 'managers/segment_manager.dart';
    +import 'objects/ground_block.dart';
    +import 'objects/platform_block.dart';
    +import 'objects/star.dart';
    +
    +
    +

    Now we can refactor our game a bit and create an initializeGame() method which will call our +loadGameSegments method.

    +
      void initializeGame() {
    +    // Assume that size.x < 3200
    +    final segmentsToLoad = (size.x / 640).ceil();
    +    segmentsToLoad.clamp(0, segments.length);
    +
    +    for (var i = 0; i <= segmentsToLoad; i++) {
    +      loadGameSegments(i, (640 * i).toDouble());
    +    }
    +
    +    _ember = EmberPlayer(
    +      position: Vector2(128, canvasSize.y - 70),
    +    );
    +    world.add(_ember);
    +  }
    +
    +
    +

    We simply are taking the width of the game screen, divide that by 640 (10 blocks in a segment times +64 pixels wide for each block), and round that up. As we only defined 5 segments total, we need to +restrict that integer from 0 to the length of the segments list in case the user has a really wide +screen. Then we simply loop through the number of segmentsToLoad and call loadGameSegments with +the integer to load and then calculate the offset.

    +

    Additionally, I have moved the Ember-related code from the onLoad method to our new +initializeGame method. This means I can now make the call in onLoad to initializeGame such +as:

    +
    @override
    +  Future<void> onLoad() async {
    +    await images.loadAll([
    +      'block.png',
    +      'ember.png',
    +      'ground.png',
    +      'heart_half.png',
    +      'heart.png',
    +      'star.png',
    +      'water_enemy.png',
    +    ]);
    +    
    +    camera.viewfinder.anchor = Anchor.topLeft;
    +    initializeGame();
    +  }
    +
    +
    +

    At this point, you probably have errors for all the object classes and the enemy class, but don’t +worry, we will solve those right now.

    +
    +
    +

    The Platform Block

    +

    One of the easiest blocks to start with is the Platform Block. There are two things that we need to +develop beyond getting the sprite to be displayed; that is, we need to place it in the correct +position and as Ember moves across the screen, we need to remove the blocks once they are off the +screen. In Ember Quest, the player can only move forward, so this will keep the game lightweight as +it’s an infinite level.

    +

    Open the lib/objects/platform_block.dart file and add the following code:

    +
    import 'package:flame/collisions.dart';
    +import 'package:flame/components.dart';
    +
    +import '../ember_quest.dart';
    +
    +class PlatformBlock extends SpriteComponent
    +    with HasGameReference<EmberQuestGame> {
    +  final Vector2 gridPosition;
    +  double xOffset;
    +
    +  PlatformBlock({
    +    required this.gridPosition,
    +    required this.xOffset,
    +  }) : super(size: Vector2.all(64), anchor: Anchor.bottomLeft);
    +
    +  @override
    +  void onLoad() {
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    super.update(dt);
    +  }
    +}
    +
    +
    +

    We are going to extend the Flame SpriteComponent and we will need the HasGameRef mixin to access +our game class just like we did before. We are starting with the empty onLoad and update +methods and we will begin adding code to create the functionality that is necessary for the game.

    +

    The secret to any gaming engine is the game loop. This is an infinite loop that calls all the +objects in your game so you can provide updates. The update method is the hook into this and it +uses a double dt to pass to your method the amount of time in seconds since it was last +called. This dt variable then allows you to calculate how far your component needs to move +on-screen.

    +

    All components in our game will need to move at the same speed, so to do this, open +lib/ember_quest.dart, and let’s define a global variable called objectSpeed. At the top of the +EmberQuestGame class, add:

    +
      late EmberPlayer _ember;
    +  double objectSpeed = 0.0;
    +
    +
    +

    So to implement that movement, declare a variable at the top of the PlatformBlock class and make +your update method look like this:

    +
    final Vector2 velocity = Vector2.zero();
    +
    +
    +
      @override
    +  void update(double dt) {
    +    velocity.x = game.objectSpeed;
    +    position += velocity * dt;
    +    if (position.x < -size.x) removeFromParent();
    +    super.update(dt);
    +  }
    +
    +
    +

    All that is happening is we define a base velocity that is instantiated at 0 on both axes and then +we update velocity using the global objectSpeed variable for the x-axis. As this is our +platform block, it will only scroll left and right, so our y-axis in the velocity will always be 0 +as do not want our blocks jumping.

    +

    Next, we update the position which is a special variable built into the Flame engine components. +By multiplying the velocity vector by the dt we can move our component to the required amount.

    +

    Finally, if x value of position is -size.x (this means off the left side of the screen by the +width of the image) then remove this platform block from the game entirely.

    +

    Now we just need to finish the onLoad method. So make your onLoad method look like this:

    +
      @override
    +  void onLoad() {
    +    final platformImage = game.images.fromCache('block.png');
    +    sprite = Sprite(platformImage);
    +    position = Vector2((gridPosition.x * size.x) + xOffset,
    +        game.size.y - (gridPosition.y * size.y),
    +    );
    +    add(RectangleHitbox(collisionType: CollisionType.passive));
    +  }
    +
    +
    +

    First, we retrieve the image from cache as we did before, and because this is a SpriteComponent +we can use the built-in sprite variable to assign the image to the component. Next, we need to +calculate its starting position. This is where all the magic happens, so let’s break this down.

    +

    Just like in the update method we will be setting the position variable to a Vector2. To +determine where it needs to be, we need to calculate the x and y positions. Focusing on the x +first, we can see that we are taking gridPosition.x times the width of the image and then we will +add that to the xOffset that we pass in. With the y-axis, we will take the height of the +game and we will subtract the gridPosition.y times the height of the image.

    +

    Lastly, as we want Ember to be able to interact with the platform, we will add a RectangleHitbox +with a passive CollisionType. Collisions will be explained more in a later chapter.

    +
    +

    Display the Platform

    +

    In our loadGameSegments method from earlier, we will need to add the call to add our block. We +will need to define gridPosition and xOffset to be passed in. gridPosition will be a +Vector2 and xOffset is a double as that will be used to calculate the x-axis offset for +the block in a Vector2. So add the following to your loadGameSegments method:

    +
    case PlatformBlock:
    +  add(PlatformBlock(
    +    gridPosition: block.gridPosition,
    +    xOffset: xPositionOffset,
    +  ));
    +
    +
    +

    If you run your code, you should now see:

    +

    Platforms Displayed

    +

    While this does run, the black just makes it look like Ember is in a dungeon. Let’s change that +background real quick so there is a nice blue sky. Just add the following code to +lib/ember_quest.dart:

    +
    import 'package:flutter/material.dart';
    +
    +@override
    +Color backgroundColor() {
    +  return const Color.fromARGB(255, 173, 223, 247);
    +}
    +
    +
    +

    Excellent! Ember is now in front of a blue sky.

    +

    On to 4. Adding the Remaining Components, where we will add the rest of the components now that we have a basic +understanding of what we are going to accomplish.

    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/platformer/step_4.html b/docs/1.18.0/tutorials/platformer/step_4.html new file mode 100644 index 000000000..a36c518ec --- /dev/null +++ b/docs/1.18.0/tutorials/platformer/step_4.html @@ -0,0 +1,737 @@ + + + + + + + 4. Adding the Remaining Components — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    4. Adding the Remaining Components

    +
    +

    Star

    +

    The star is pretty simple. It is just like the Platform block except we are going to add an effect +to make it pulse in size. For the effect to look correct, we need to change the object’s Anchor +to center. This means we will need to adjust the position by half of the image size. For brevity, +I am going to add the whole class and explain the additional changes after.

    +
    import 'package:flame/collisions.dart';
    +import 'package:flame/components.dart';
    +import 'package:flame/effects.dart';
    +import 'package:flutter/material.dart';
    +
    +import '../ember_quest.dart';
    +
    +class Star extends SpriteComponent
    +    with HasGameReference<EmberQuestGame> {
    +  final Vector2 gridPosition;
    +  double xOffset;
    +
    +  final Vector2 velocity = Vector2.zero();
    +
    +  Star({
    +    required this.gridPosition,
    +    required this.xOffset,
    +  }) : super(size: Vector2.all(64), anchor: Anchor.center);
    +
    +  @override
    +  void onLoad() {
    +    final starImage = game.images.fromCache('star.png');
    +    sprite = Sprite(starImage);
    +    position = Vector2(
    +      (gridPosition.x * size.x) + xOffset + (size.x / 2),
    +      game.size.y - (gridPosition.y * size.y) - (size.y / 2),
    +    );
    +    add(RectangleHitbox(collisionType: CollisionType.passive));
    +    add(
    +      SizeEffect.by(
    +        Vector2(-24, -24),
    +        EffectController(
    +          duration: .75,
    +          reverseDuration: .5,
    +          infinite: true,
    +          curve: Curves.easeOut,
    +        ),
    +      ),
    +    );
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    velocity.x = game.objectSpeed;
    +    position += velocity * dt;
    +    if (position.x < -size.x) removeFromParent();
    +    super.update(dt);
    +  }
    +}
    +
    +
    +

    So the only change between the Star and the Platform beyond the anchor is simply the following:

    +
    add(
    +  SizeEffect.by(
    +    Vector2(-24, -24),
    +    EffectController(
    +      duration: .75,
    +      reverseDuration: .5,
    +      infinite: true,
    +      curve: Curves.easeOut,
    +    ),
    +  ),
    +);
    +
    +
    +

    The SizeEffect is best explained by going to their +docs. In short, we simply reduce the size of the star +by -24 pixels in both directions and we make it pulse infinitely using the EffectController.

    +

    Don’t forget to add the star to your lib/ember_quest.dart file by doing:

    +
    case Star:
    +  world.add(
    +    Star(
    +      gridPosition: block.gridPosition,
    +      xOffset: xPositionOffset,
    +    ),
    +  );
    +
    +
    +

    If you run your game, you should now see pulsating stars!

    +
    +
    +

    Water Enemy

    +

    Now that we understand adding effects to our objects, let’s do the same for the water drop enemy. +Open lib/actors/water_enemy.dart and add the following code:

    +
    import 'package:flame/collisions.dart';
    +import 'package:flame/components.dart';
    +import 'package:flame/effects.dart';
    +
    +import '../ember_quest.dart';
    +
    +class WaterEnemy extends SpriteAnimationComponent
    +    with HasGameReference<EmberQuestGame> {
    +  final Vector2 gridPosition;
    +  double xOffset;
    +
    +  final Vector2 velocity = Vector2.zero();
    +
    +  WaterEnemy({
    +    required this.gridPosition,
    +    required this.xOffset,
    +  }) : super(size: Vector2.all(64), anchor: Anchor.bottomLeft);
    +
    +  @override
    +  void onLoad() {
    +    animation = SpriteAnimation.fromFrameData(
    +      game.images.fromCache('water_enemy.png'),
    +      SpriteAnimationData.sequenced(
    +        amount: 2,
    +        textureSize: Vector2.all(16),
    +        stepTime: 0.70,
    +      ),
    +    );
    +    position = Vector2(
    +      (gridPosition.x * size.x) + xOffset,
    +      game.size.y - (gridPosition.y * size.y),
    +    );
    +    add(RectangleHitbox(collisionType: CollisionType.passive));
    +    add(
    +      MoveEffect.by(
    +        Vector2(-2 * size.x, 0),
    +        EffectController(
    +          duration: 3,
    +          alternate: true,
    +          infinite: true,
    +        ),
    +      ),
    +    );
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    velocity.x = game.objectSpeed;
    +    position += velocity * dt;
    +    if (position.x < -size.x) removeFromParent();
    +    super.update(dt);
    +  }
    +}
    +
    +
    +

    The water drop enemy is an animation just like Ember, so this class is extending the +SpriteAnimationComponent class but it uses all of the previous code we have used for the Star and +the Platform. The only difference will be instead of the SizeEffect, we are going to use the +MoveEffect. The best resource for information will be their help +docs.

    +

    In short, the MoveEffect will last for 3 seconds, alternate directions, and run infinitely. It +will move our enemy to the left, 128 pixels (-2 x image width).

    +

    Don’t forget to add the water enemy to your lib/ember_quest.dart file by doing:

    +
    case WaterEnemy:
    +    world.add(
    +      WaterEnemy(
    +       gridPosition: block.gridPosition,
    +       xOffset: xPositionOffset,
    +      ),
    +    );
    +
    +
    +

    If you run the game now, the Water Enemy should be displayed and moving!

    +

    Water Enemies

    +
    +
    +

    Ground Blocks

    +

    Finally, the last component that needs to be displayed is the Ground Block! This component is more +complex than the others as we need to identify two times during a block’s life cycle.

    +
      +
    • When the block is added, if it is the last block in the segment, we need to update a global value +as to its position.

    • +
    • When the block is removed, if it was the first block in the segment, we need to randomly get the +next segment to load.

    • +
    +

    So let’s start with the basic class which is nothing more than a copy of the Platform Block.

    +
    import 'package:flame/collisions.dart';
    +import 'package:flame/components.dart';
    +import 'package:flutter/material.dart';
    +
    +import '../ember_quest.dart';
    +
    +class GroundBlock extends SpriteComponent with HasGameReference<EmberQuestGame> {
    +  final Vector2 gridPosition;
    +  double xOffset;
    +
    +  final Vector2 velocity = Vector2.zero();
    +
    +  GroundBlock({
    +    required this.gridPosition,
    +    required this.xOffset,
    +  }) : super(size: Vector2.all(64), anchor: Anchor.bottomLeft);
    +
    +  @override
    +  void onLoad() {
    +    final groundImage = game.images.fromCache('ground.png');
    +    sprite = Sprite(groundImage);
    +    position = Vector2(
    +      gridPosition.x * size.x + xOffset,
    +      game.size.y - gridPosition.y * size.y,
    +    );
    +    add(RectangleHitbox(collisionType: CollisionType.passive));
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    velocity.x = game.objectSpeed;
    +    position += velocity * dt;
    +    super.update(dt);
    +  }
    +}
    +
    +
    +

    The first thing we will tackle is registering the block globally if it is the absolute last block to +be loaded. To do this, add two new global variables in lib/ember_quest.dart called:

    +
      late double lastBlockXPosition = 0.0;
    +  late UniqueKey lastBlockKey;
    +
    +
    +

    Declare the following variable at the top of your Ground Block class:

    +
    final UniqueKey _blockKey = UniqueKey();
    +
    +
    +

    Now in your Ground Block’s onLoad method, add the following at the end of the method:

    +
    if (gridPosition.x == 9 && position.x > game.lastBlockXPosition) {
    +  game.lastBlockKey = _blockKey;
    +  game.lastBlockXPosition = position.x + size.x;
    +}
    +
    +
    +

    All that is happening is if this block is the 10th block (9 as the segment grid is 0 based) AND +this block’s position is greater than the global lastBlockXPosition, set the global block key to be +this block’s key and set the global lastBlockXPosition to be this blocks position plus the width of +the image (the anchor is bottom left and we want the next block to align right next to it).

    +

    Now we can address updating this information, so in the update method, add the following code:

    +
      @override
    +  void update(double dt) {
    +    velocity.x = game.objectSpeed;
    +    position += velocity * dt;
    +
    +    if (gridPosition.x == 9) {
    +      if (game.lastBlockKey == _blockKey) {
    +        game.lastBlockXPosition = position.x + size.x - 10;
    +      }
    +    }
    +
    +    super.update(dt);
    +  }
    +
    +
    +

    game.lastBlockXPosition is being updated by the block’s current x-axis position plus its width - +10 pixels. This will cause a little overlap, but due to the potential variance in dt this +prevents gaps in the map as it loads while a player is moving.

    +
    +

    Loading the Next Random Segment

    +

    To load the next random segment, we will use the Random() function that is built-in to +dart:math. The following line of code gets a random integer from 0 (inclusive) to the max number +in the passed parameter (exclusive).

    +
    Random().nextInt(segments.length),
    +
    +
    +

    Back in our Ground Block, we can now add the following to our ‘update’ method before +the other block we just added:

    +
    if (position.x < -size.x) {
    +  removeFromParent();
    +  if (gridPosition.x == 0) {
    +    game.loadGameSegments(
    +      Random().nextInt(segments.length),
    +      game.lastBlockXPosition,
    +    );
    +  }
    +}
    +
    +
    +

    This simply extends the code that we have in our other objects, where once the block is off the +screen and if the block is the first block of the segment, we will call the loadGameSegments +method in our game class, get a random number between 0 and the number of segments and pass in the +offset. If Random() or segments.length does not auto-import, you will need:

    +
    import 'dart:math';
    +
    +import '../managers/segment_manager.dart';
    +
    +
    +

    So our full Ground Block class should look like this:

    +
    import 'dart:math';
    +
    +import 'package:flame/collisions.dart';
    +import 'package:flame/components.dart';
    +import 'package:flutter/material.dart';
    +
    +import '../ember_quest.dart';
    +import '../managers/segment_manager.dart';
    +
    +class GroundBlock extends SpriteComponent with HasGameReference<EmberQuestGame> {
    +  final Vector2 gridPosition;
    +  double xOffset;
    +  
    +  final UniqueKey _blockKey = UniqueKey();
    +  final Vector2 velocity = Vector2.zero();
    +
    +  GroundBlock({
    +    required this.gridPosition,
    +    required this.xOffset,
    +  }) : super(size: Vector2.all(64), anchor: Anchor.bottomLeft);
    +
    +  @override
    +  void onLoad() {
    +    final groundImage = game.images.fromCache('ground.png');
    +    sprite = Sprite(groundImage);
    +    position = Vector2(
    +      gridPosition.x * size.x + xOffset,
    +      game.size.y - gridPosition.y * size.y,
    +    );
    +    add(RectangleHitbox(collisionType: CollisionType.passive));
    +    if (gridPosition.x == 9 && position.x > game.lastBlockXPosition) {
    +      game.lastBlockKey = _blockKey;
    +      game.lastBlockXPosition = position.x + size.x;
    +    }
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    velocity.x = game.objectSpeed;
    +    position += velocity * dt;
    +
    +    if (position.x < -size.x) {
    +      removeFromParent();
    +      if (gridPosition.x == 0) {
    +        game.loadGameSegments(
    +          Random().nextInt(segments.length),
    +          game.lastBlockXPosition,
    +        );
    +      }
    +    }
    +    if (gridPosition.x == 9) {
    +      if (game.lastBlockKey == _blockKey) {
    +        game.lastBlockXPosition = position.x + size.x - 10;
    +      }
    +    }
    +
    +    super.update(dt);
    +  }
    +}
    +
    +
    +

    Finally, don’t forget to add your Ground Block to lib/ember_quest.dart by adding the following:

    +
    case GroundBlock:
    +  world.add(
    +    GroundBlock(
    +      gridPosition: block.gridPosition,
    +      xOffset: xPositionOffset,
    +    ),
    +  );
    +
    +
    +

    If you run your code, your game should now look like this:

    +

    Ground Blocks

    +

    You might say, but wait! Ember is in the middle of the ground and that is correct because Ember’s +Anchor is set to center. This is ok and we will be addressing this in 5. Controlling Movement where we will +be adding movement and collisions to Ember!

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/platformer/step_5.html b/docs/1.18.0/tutorials/platformer/step_5.html new file mode 100644 index 000000000..e6a8dec74 --- /dev/null +++ b/docs/1.18.0/tutorials/platformer/step_5.html @@ -0,0 +1,645 @@ + + + + + + + 5. Controlling Movement — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    5. Controlling Movement

    +

    If you were waiting for some serious coding, this chapter is it. Prepare yourself as we dive in!

    +
    +

    Keyboard Controls

    +

    The first step will be to allow control of Ember via the keyboard. We need to start by adding the +appropriate mixins to the game class and Ember. Add the following:

    +

    lib/ember_quest.dart

    +
    import 'package:flame/events.dart';
    +
    +class EmberQuestGame extends FlameGame with HasKeyboardHandlerComponents {
    +
    +
    +

    lib/actors/ember.dart

    +
    class EmberPlayer extends SpriteAnimationComponent
    +    with KeyboardHandler, HasGameReference<EmberQuestGame> {
    +
    +
    +

    Now we can add a new method:

    +
      @override
    +  bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
    +    return true;
    +  }
    +
    +
    +

    Like before, if this did not trigger an auto-import, you will need the following:

    +
    import 'package:flutter/services.dart';
    +
    +
    +

    To control Ember’s movement, it is easiest to set a variable where we think of the direction of +movement like a normalized vector, meaning the value will be restricted to -1, 0, or 1. So let’s +set a variable at the top of the class:

    +
      int horizontalDirection = 0;
    +
    +
    +

    Now in our onKeyEvent method, we can register the key pressed by adding:

    +
    @override
    +  bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
    +    horizontalDirection = 0;
    +    horizontalDirection += (keysPressed.contains(LogicalKeyboardKey.keyA) ||
    +            keysPressed.contains(LogicalKeyboardKey.arrowLeft))
    +        ? -1
    +        : 0;
    +    horizontalDirection += (keysPressed.contains(LogicalKeyboardKey.keyD) ||
    +            keysPressed.contains(LogicalKeyboardKey.arrowRight))
    +        ? 1
    +        : 0;
    +
    +    return true;
    +  }
    +
    +
    +

    Let’s make Ember move by adding a few lines of code and creating our update method. First, we +need to define a velocity variable for Ember. Add the following at the top of the EmberPlayer +class:

    +
    final Vector2 velocity = Vector2.zero();
    +final double moveSpeed = 200;
    +
    +
    +

    This establishes a base velocity of 0 and stores moveSpeed so we can adjust as necessary to suit +how the game-play should be. Next, add the update method with the following:

    +
      @override
    +  void update(double dt) {
    +    velocity.x = horizontalDirection * moveSpeed;
    +    position += velocity * dt;
    +    super.update(dt);
    +  }
    +
    +
    +

    If you run the game now, Ember moves left and right using the arrow keys or the A and D keys. +You may have noticed that Ember doesn’t look back if you are going left, to fix that, add the +following code at the end of your update method:

    +
    if (horizontalDirection < 0 && scale.x > 0) {
    +  flipHorizontally();
    +} else if (horizontalDirection > 0 && scale.x < 0) {
    +  flipHorizontally();
    +}
    +
    +
    +

    Now Ember looks in the direction they are traveling.

    +
    +
    +

    Collisions

    +

    It is time to get into the thick of it with collisions. I highly suggest reading the +documentation to understand how collisions work in Flame. The +first thing we need to do is make the game aware that collisions are going to occur using the +HasCollisionDetection mixin. Add that to lib/ember_quest.dart like:

    +
    class EmberQuestGame extends FlameGame
    +    with HasCollisionDetection, HasKeyboardHandlerComponents {
    +
    +
    +

    Next, add the CollisionCallbacks mixin to lib/actors/ember.dart like:

    +
    class EmberPlayer extends SpriteAnimationComponent
    +    with KeyboardHandler, CollisionCallbacks, HasGameReference<EmberQuestGame> {
    +
    +
    +

    If it did not auto-import, you will need the following:

    +
    import 'package:flame/collisions.dart';
    +
    +
    +

    Now add the following onCollision method:

    +
    @override
    +void onCollision(Set<Vector2> intersectionPoints, PositionComponent other) {
    +  if (other is GroundBlock || other is PlatformBlock) {
    +    if (intersectionPoints.length == 2) {
    +      // Calculate the collision normal and separation distance.
    +      final mid = (intersectionPoints.elementAt(0) +
    +        intersectionPoints.elementAt(1)) / 2;
    +
    +      final collisionNormal = absoluteCenter - mid;
    +      final separationDistance = (size.x / 2) - collisionNormal.length;
    +      collisionNormal.normalize();
    +
    +      // If collision normal is almost upwards,
    +      // ember must be on ground.
    +      if (fromAbove.dot(collisionNormal) > 0.9) {
    +        isOnGround = true;
    +      }
    +
    +      // Resolve collision by moving ember along
    +      // collision normal by separation distance.
    +      position += collisionNormal.scaled(separationDistance);
    +      }
    +    }
    +
    +  super.onCollision(intersectionPoints, other);
    +}
    +
    +
    +

    You will need to import the following:

    +
    import '../objects/ground_block.dart';
    +import '../objects/platform_block.dart';
    +
    +
    +

    As well as create these class variables:

    +
      final Vector2 fromAbove = Vector2(0, -1);
    +  bool isOnGround = false;
    +
    +
    +

    For the collisions to be activated for Ember, we need to add a CircleHitbox, so in the onLoad +method, add the following:

    +
    add(CircleHitbox());
    +
    +
    +

    Now that we have the basic collisions created, we can add gravity so Ember exists in a game world +with very basic physics. To do that, we need to create some more variables:

    +
      final double gravity = 15;
    +  final double jumpSpeed = 600;
    +  final double terminalVelocity = 150;
    +
    +  bool hasJumped = false;
    +
    +
    +

    Now we can add Ember’s ability to jump by adding the following to our onKeyEvent method:

    +
    hasJumped = keysPressed.contains(LogicalKeyboardKey.space);
    +
    +
    +

    Finally, in our update method we can tie this all together with:

    +
    // Apply basic gravity
    +velocity.y += gravity;
    +
    +// Determine if ember has jumped
    +if (hasJumped) {
    +  if (isOnGround) {
    +    velocity.y = -jumpSpeed;
    +    isOnGround = false;
    +  }
    +  hasJumped = false;
    +}
    +
    +// Prevent ember from jumping to crazy fast as well as descending too fast and 
    +// crashing through the ground or a platform.
    +velocity.y = velocity.y.clamp(-jumpSpeed, terminalVelocity);
    +
    +
    +

    Earlier I mentioned that Ember was in the center of the grass, to solve this and show how collisions +and gravity work with Ember, I like to add a little drop-in when you start the game. So in +lib/ember_quest.dart in the initializeGame method, change the following:

    +
    _ember = EmberPlayer(
    +  position: Vector2(128, canvasSize.y - 128),
    +);
    +
    +
    +

    If you run the game now, Ember should be created and fall to the ground; then you can jump around!

    +
    +

    Collisions with Objects

    +

    Adding the collisions with the other objects is fairly trivial. All we need to do is add the +following to the bottom of the onCollision method:

    +
    if (other is Star) {
    +  other.removeFromParent();
    +}
    +
    +if (other is WaterEnemy) {
    +  hit();
    +}
    +
    +
    +

    When Ember collides with a star, the game will remove the star, and to implement the hit method for +when Ember collides with an enemy, we need to do the following:

    +

    Add the following variable at the top of the EmberPlayer class:

    +
    bool hitByEnemy = false;
    +
    +
    +

    Additionally, add this method to the EmberPlayer class:

    +
    // This method runs an opacity effect on ember
    +// to make it blink.
    +void hit() {
    +  if (!hitByEnemy) {
    +    hitByEnemy = true;
    +  }
    +  add(
    +    OpacityEffect.fadeOut(
    +    EffectController(
    +      alternate: true,
    +      duration: 0.1,
    +      repeatCount: 6,
    +    ),
    +    )..onComplete = () {
    +      hitByEnemy = false;
    +    },
    +  );
    +}
    +
    +
    +

    If the auto-imports did not occur, you will need to add the following imports to your file:

    +
    import 'package:flame/effects.dart';
    +
    +import '../objects/star.dart';
    +import 'water_enemy.dart';
    +
    +
    +

    If you run the game now, you should be able to move around, make stars disappear, and if you +collide with an enemy, Ember should blink.

    +
    +
    +
    +

    Adding the Scrolling

    +

    This is our last task with Ember. We need to restrict Ember’s movement because as of now, Ember can +go off-screen and we never move the map. So to implement this feature, we simply need to add the +following to the end of our update method:

    +
    game.objectSpeed = 0;
    +// Prevent ember from going backwards at screen edge.
    +if (position.x - 36 <= 0 && horizontalDirection < 0) {
    +  velocity.x = 0;
    +}
    +// Prevent ember from going beyond half screen.
    +if (position.x + 64 >= game.size.x / 2 && horizontalDirection > 0) {
    +  velocity.x = 0;
    +  game.objectSpeed = -moveSpeed;
    +}
    +
    +position += velocity * dt;
    +super.update(dt);
    +
    +
    +

    If you run the game now, Ember can’t move off-screen to the left, and as Ember moves to the right, +once they get to the middle of the screen, the rest of the objects scroll by. This is because we +are now updating game.objectSpeed which we established early on in the series. Additionally, +you will see the next random segment be generated and added to the level based on the work we did in +Ground Block.

    +
    +

    Note

    +

    As I mentioned earlier, I would add a section on how this game could be adapted +to a traditional level game. As we built the segments in 3. Building the World, we +could add a segment that has a door or a special block. For every X number of +segments loaded, we could then add that special segment. When Ember reaches that +object, we could reload the level and start all over maintaining the stars +collected and health.

    +
    +

    We are almost done! In 6. Adding the HUD, we will add the health system, keep track of +the score, and provide a HUD to relay that information to the player.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/platformer/step_6.html b/docs/1.18.0/tutorials/platformer/step_6.html new file mode 100644 index 000000000..40db38804 --- /dev/null +++ b/docs/1.18.0/tutorials/platformer/step_6.html @@ -0,0 +1,556 @@ + + + + + + + 6. Adding the HUD — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    6. Adding the HUD

    +
    +

    Setting up the HUD

    +

    Now that the game is up and running, the rest of the code should come fairly easily. To prepare for +the hud, we need to add some variables in lib/ember_quest.dart. Add the following to the top of +the class:

    +
    int starsCollected = 0;
    +int health = 3;
    +
    +
    +

    Start by creating a folder called lib/overlays, and in that folder, create a component called +heart.dart. This is going to be the health monitoring component in the upper left-hand corner of +the game. Add the following code:

    +
    import 'package:ember_quest/ember_quest.dart';
    +import 'package:flame/components.dart';
    +
    +enum HeartState {
    +  available,
    +  unavailable,
    +}
    +
    +class HeartHealthComponent extends SpriteGroupComponent<HeartState>
    +    with HasGameReference<EmberQuestGame> {
    +  final int heartNumber;
    +
    +  HeartHealthComponent({
    +    required this.heartNumber,
    +    required super.position,
    +    required super.size,
    +    super.scale,
    +    super.angle,
    +    super.anchor,
    +    super.priority,
    +  });
    +
    +  @override
    +  Future<void> onLoad() async {
    +    await super.onLoad();
    +    final availableSprite = await game.loadSprite(
    +      'heart.png',
    +      srcSize: Vector2.all(32),
    +    );
    +
    +    final unavailableSprite = await game.loadSprite(
    +      'heart_half.png',
    +      srcSize: Vector2.all(32),
    +    );
    +
    +    sprites = {
    +      HeartState.available: availableSprite,
    +      HeartState.unavailable: unavailableSprite,
    +    };
    +
    +    current = HeartState.available;
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    if (game.health < heartNumber) {
    +      current = HeartState.unavailable;
    +    } else {
    +      current = HeartState.available;
    +    }
    +    super.update(dt);
    +  }
    +}
    +
    +
    +

    The HeartHealthComponent is just a SpriteGroupComponent +that uses the heart images that were created early on. The unique thing that is being done, is when +the component is created, it requires a heartNumber, so in the update method, we check to see if +the game.health is less than the heartNumber and if so, change the state of the component to +unavailable.

    +

    To put this all together, create hud.dart in the same folder and add the following code:

    +
    import 'package:flame/components.dart';
    +import 'package:flutter/material.dart';
    +
    +import '../ember_quest.dart';
    +import 'heart.dart';
    +
    +class Hud extends PositionComponent with HasGameReference<EmberQuestGame> {
    +  Hud({
    +    super.position,
    +    super.size,
    +    super.scale,
    +    super.angle,
    +    super.anchor,
    +    super.children,
    +    super.priority = 5,
    +  });
    +
    +  late TextComponent _scoreTextComponent;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    _scoreTextComponent = TextComponent(
    +      text: '${game.starsCollected}',
    +      textRenderer: TextPaint(
    +        style: const TextStyle(
    +          fontSize: 32,
    +          color: Color.fromRGBO(10, 10, 10, 1),
    +        ),
    +      ),
    +      anchor: Anchor.center,
    +      position: Vector2(game.size.x - 60, 20),
    +    );
    +    add(_scoreTextComponent);
    +
    +    final starSprite = await game.loadSprite('star.png');
    +    add(
    +      SpriteComponent(
    +        sprite: starSprite,
    +        position: Vector2(game.size.x - 100, 20),
    +        size: Vector2.all(32),
    +        anchor: Anchor.center,
    +      ),
    +    );
    +
    +    for (var i = 1; i <= game.health; i++) {
    +      final positionX = 40 * i;
    +      await add(
    +        HeartHealthComponent(
    +          heartNumber: i,
    +          position: Vector2(positionX.toDouble(), 20),
    +          size: Vector2.all(32),
    +        ),
    +      );
    +    }
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    _scoreTextComponent.text = '${game.starsCollected}';
    +  }
    +}
    +
    +
    +

    In the onLoad method, you can see where we loop from 1 to the game.health amount, to create +the number of hearts necessary. The last step is to add the hud to the game.

    +

    Go to lib/ember_quest.dart and add the following code in the initializeGame method:

    +
    camera.viewport.add(Hud());
    +
    +
    +

    If the auto-import did not occur, you will need to add:

    +
    import 'overlays/hud.dart';
    +
    +
    +

    If you run the game now, you should see:

    +

    HUD Loaded

    +
    +
    +

    Updating the HUD Data

    +

    The last thing we need to do before closing out the HUD is to update the data. To do this, we need +to open lib/actors/ember.dart and add the following code:

    +

    onCollision

    +
    if (other is Star) {
    +  other.removeFromParent();
    +  game.starsCollected++;
    +}
    +
    +
    +
    void hit() {
    +  if (!hitByEnemy) {
    +    game.health--;
    +    hitByEnemy = true;
    +  }
    +  add(
    +    OpacityEffect.fadeOut(
    +      EffectController(
    +        alternate: true,
    +        duration: 0.1,
    +        repeatCount: 5,
    +      ),
    +    )..onComplete = () {
    +      hitByEnemy = false;
    +    },
    +  );
    +}
    +
    +
    +

    If you run the game now, you will see that your health is updated and the stars are incremented as +appropriate. Finally, in 7. Adding Menus, we will finish the game by adding the main menu and the +game-over menu.

    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/platformer/step_7.html b/docs/1.18.0/tutorials/platformer/step_7.html new file mode 100644 index 000000000..916a3e58a --- /dev/null +++ b/docs/1.18.0/tutorials/platformer/step_7.html @@ -0,0 +1,1589 @@ + + + + + + + 7. Adding Menus — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    7. Adding Menus

    +

    To add menus to the game, we will leverage Flame’s built-in +overlay system.

    + +
    +

    Game Over Menu

    +

    Next, create a file called lib/overlays/game_over.dart and add the following code:

    +
    import 'package:flutter/material.dart';
    +
    +import '../ember_quest.dart';
    +
    +class GameOver extends StatelessWidget {
    +  // Reference to parent game.
    +  final EmberQuestGame game;
    +  const GameOver({super.key, required this.game});
    +
    +  @override
    +  Widget build(BuildContext context) {
    +    const blackTextColor = Color.fromRGBO(0, 0, 0, 1.0);
    +    const whiteTextColor = Color.fromRGBO(255, 255, 255, 1.0);
    +
    +    return Material(
    +      color: Colors.transparent,
    +      child: Center(
    +        child: Container(
    +          padding: const EdgeInsets.all(10.0),
    +          height: 200,
    +          width: 300,
    +          decoration: const BoxDecoration(
    +            color: blackTextColor,
    +            borderRadius: const BorderRadius.all(
    +              Radius.circular(20),
    +            ),
    +          ),
    +          child: Column(
    +            mainAxisAlignment: MainAxisAlignment.center,
    +            children: [
    +              const Text(
    +                'Game Over',
    +                style: TextStyle(
    +                  color: whiteTextColor,
    +                  fontSize: 24,
    +                ),
    +              ),
    +              const SizedBox(height: 40),
    +              SizedBox(
    +                width: 200,
    +                height: 75,
    +                child: ElevatedButton(
    +                  onPressed: () {
    +                    game.reset();
    +                    game.overlays.remove('GameOver');
    +                  },
    +                  style: ElevatedButton.styleFrom(
    +                    backgroundColor: whiteTextColor,
    +                  ),
    +                  child: const Text(
    +                    'Play Again',
    +                    style: TextStyle(
    +                      fontSize: 28.0,
    +                      color: blackTextColor,
    +                    ),
    +                  ),
    +                ),
    +              ),
    +            ],
    +          ),
    +        ),
    +      ),
    +    );
    +  }
    +}
    +
    +
    +

    As with the Main Menu, this is all standard Flutter widgets except for the call to remove the +overlay and also the call to game.reset() which we will create now.

    +

    Open lib/ember_quest.dart and add / update the following code:

    +
    @override
    +Future<void> onLoad() async {
    +  await images.loadAll([
    +      'block.png',
    +      'ember.png',
    +      'ground.png',
    +      'heart_half.png',
    +      'heart.png',
    +      'star.png',
    +      'water_enemy.png',
    +  ]);
    +  
    +  camera.viewfinder.anchor = Anchor.topLeft;
    +  initializeGame(true);
    +}
    +
    +void initializeGame(bool loadHud) {
    +  // Assume that size.x < 3200
    +  final segmentsToLoad = (size.x / 640).ceil();
    +  segmentsToLoad.clamp(0, segments.length);
    +
    +  for (var i = 0; i <= segmentsToLoad; i++) {
    +    loadGameSegments(i, (640 * i).toDouble());
    +  }
    +
    +  _ember = EmberPlayer(
    +    position: Vector2(128, canvasSize.y - 128),
    +  );
    +  add(_ember);
    +  if (loadHud) {
    +    add(Hud());
    +  }
    +}
    +
    +void reset() {
    +  starsCollected = 0;
    +  health = 3;
    +  initializeGame(false);
    +}
    +
    +
    +

    You may notice that we have added a parameter to the initializeGame method which allows us to +bypass adding the HUD to the game. This is because in the coming section, when Ember’s health drops +to 0, we will wipe the game, but we do not need to remove the HUD, as we just simply need to reset +the values using reset().

    +
    +
    +

    Displaying the Menus

    +

    To display the menus, add the following code to lib/main.dart:

    +
    void main() {
    +  runApp(
    +    GameWidget<EmberQuestGame>.controlled(
    +      gameFactory: EmberQuestGame.new,
    +      overlayBuilderMap: {
    +        'MainMenu': (_, game) => MainMenu(game: game),
    +        'GameOver': (_, game) => GameOver(game: game),
    +      },
    +      initialActiveOverlays: const ['MainMenu'],
    +    ),
    +  );
    +}
    +
    +
    +

    If the menus did not auto-import, add the following:

    +
    import 'overlays/game_over.dart';
    +import 'overlays/main_menu.dart';
    +
    +
    +

    If you run the game now, you should be greeted with the Main Menu overlay. Pressing play will +remove it and allow you to start playing the game.

    +
    +

    Health Check for Game Over

    +

    Our last step to finish Ember Quest is to add a game-over mechanism. This is fairly simple but +requires us to place similar code in all of our components. So let’s get started!

    +

    In lib/actors/ember.dart, in the update method, add the following:

    +
    // If ember fell in pit, then game over.
    +if (position.y > game.size.y + size.y) {
    +  game.health = 0;
    +}
    +
    +if (game.health <= 0) {
    +  removeFromParent();
    +}
    +
    +
    +

    In lib/actors/water_enemy.dart, in the update method update the following code:

    +
    if (position.x < -size.x || game.health <= 0) {
    +  removeFromParent();
    +}
    +
    +
    +

    In lib/objects/ground_block.dart, in the update method update the following code:

    +
    if (game.health <= 0) {
    +  removeFromParent();
    +}
    +
    +
    +

    In lib/objects/platform_block.dart, in the update method update the following code:

    +
    if (position.x < -size.x || game.health <= 0) {
    +  removeFromParent();
    +}
    +
    +
    +

    In lib/objects/star.dart, in the update method update the following code:

    +
    if (position.x < -size.x || game.health <= 0) {
    +  removeFromParent();
    +}
    +
    +
    +

    Finally, in lib/ember_quest.dart, add the following update method:

    +
    @override
    +void update(double dt) {
    +  if (health <= 0) {
    +    overlays.add('GameOver');
    +  }
    +  super.update(dt);
    +}
    +
    +
    +
    +
    +
    +

    Congratulations

    +

    You made it! You have a working Ember Quest. Press the button below to see what the resulting code +looks like or to play it live.

    +
    +
    +actors/ember.dart
    +
      1import 'package:flame/collisions.dart';
    +  2import 'package:flame/components.dart';
    +  3import 'package:flame/effects.dart';
    +  4import 'package:flutter/services.dart';
    +  5
    +  6import '../ember_quest.dart';
    +  7import '../objects/ground_block.dart';
    +  8import '../objects/platform_block.dart';
    +  9import '../objects/star.dart';
    + 10import 'water_enemy.dart';
    + 11
    + 12class EmberPlayer extends SpriteAnimationComponent
    + 13    with KeyboardHandler, CollisionCallbacks, HasGameReference<EmberQuestGame> {
    + 14  EmberPlayer({
    + 15    required super.position,
    + 16  }) : super(size: Vector2.all(64), anchor: Anchor.center);
    + 17
    + 18  final Vector2 velocity = Vector2.zero();
    + 19  final Vector2 fromAbove = Vector2(0, -1);
    + 20  final double gravity = 15;
    + 21  final double jumpSpeed = 600;
    + 22  final double moveSpeed = 200;
    + 23  final double terminalVelocity = 150;
    + 24  int horizontalDirection = 0;
    + 25
    + 26  bool hasJumped = false;
    + 27  bool isOnGround = false;
    + 28  bool hitByEnemy = false;
    + 29
    + 30  @override
    + 31  Future<void> onLoad() async {
    + 32    animation = SpriteAnimation.fromFrameData(
    + 33      game.images.fromCache('ember.png'),
    + 34      SpriteAnimationData.sequenced(
    + 35        amount: 4,
    + 36        textureSize: Vector2.all(16),
    + 37        stepTime: 0.12,
    + 38      ),
    + 39    );
    + 40
    + 41    add(
    + 42      CircleHitbox(),
    + 43    );
    + 44  }
    + 45
    + 46  @override
    + 47  bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
    + 48    horizontalDirection = 0;
    + 49    horizontalDirection += (keysPressed.contains(LogicalKeyboardKey.keyA) ||
    + 50            keysPressed.contains(LogicalKeyboardKey.arrowLeft))
    + 51        ? -1
    + 52        : 0;
    + 53    horizontalDirection += (keysPressed.contains(LogicalKeyboardKey.keyD) ||
    + 54            keysPressed.contains(LogicalKeyboardKey.arrowRight))
    + 55        ? 1
    + 56        : 0;
    + 57
    + 58    hasJumped = keysPressed.contains(LogicalKeyboardKey.space);
    + 59    return true;
    + 60  }
    + 61
    + 62  @override
    + 63  void update(double dt) {
    + 64    velocity.x = horizontalDirection * moveSpeed;
    + 65    game.objectSpeed = 0;
    + 66    // Prevent ember from going backwards at screen edge.
    + 67    if (position.x - 36 <= 0 && horizontalDirection < 0) {
    + 68      velocity.x = 0;
    + 69    }
    + 70    // Prevent ember from going beyond half screen.
    + 71    if (position.x + 64 >= game.size.x / 2 && horizontalDirection > 0) {
    + 72      velocity.x = 0;
    + 73      game.objectSpeed = -moveSpeed;
    + 74    }
    + 75
    + 76    // Apply basic gravity.
    + 77    velocity.y += gravity;
    + 78
    + 79    // Determine if ember has jumped.
    + 80    if (hasJumped) {
    + 81      if (isOnGround) {
    + 82        velocity.y = -jumpSpeed;
    + 83        isOnGround = false;
    + 84      }
    + 85      hasJumped = false;
    + 86    }
    + 87
    + 88    // Prevent ember from jumping to crazy fast.
    + 89    velocity.y = velocity.y.clamp(-jumpSpeed, terminalVelocity);
    + 90
    + 91    // Adjust ember position.
    + 92    position += velocity * dt;
    + 93
    + 94    // If ember fell in pit, then game over.
    + 95    if (position.y > game.size.y + size.y) {
    + 96      game.health = 0;
    + 97    }
    + 98
    + 99    if (game.health <= 0) {
    +100      removeFromParent();
    +101    }
    +102
    +103    // Flip ember if needed.
    +104    if (horizontalDirection < 0 && scale.x > 0) {
    +105      flipHorizontally();
    +106    } else if (horizontalDirection > 0 && scale.x < 0) {
    +107      flipHorizontally();
    +108    }
    +109    super.update(dt);
    +110  }
    +111
    +112  @override
    +113  void onCollision(Set<Vector2> intersectionPoints, PositionComponent other) {
    +114    if (other is GroundBlock || other is PlatformBlock) {
    +115      if (intersectionPoints.length == 2) {
    +116        // Calculate the collision normal and separation distance.
    +117        final mid = (intersectionPoints.elementAt(0) +
    +118                intersectionPoints.elementAt(1)) /
    +119            2;
    +120
    +121        final collisionNormal = absoluteCenter - mid;
    +122        final separationDistance = (size.x / 2) - collisionNormal.length;
    +123        collisionNormal.normalize();
    +124
    +125        // If collision normal is almost upwards,
    +126        // ember must be on ground.
    +127        if (fromAbove.dot(collisionNormal) > 0.9) {
    +128          isOnGround = true;
    +129        }
    +130
    +131        // Resolve collision by moving ember along
    +132        // collision normal by separation distance.
    +133        position += collisionNormal.scaled(separationDistance);
    +134      }
    +135    }
    +136
    +137    if (other is Star) {
    +138      other.removeFromParent();
    +139      game.starsCollected++;
    +140    }
    +141
    +142    if (other is WaterEnemy) {
    +143      hit();
    +144    }
    +145    super.onCollision(intersectionPoints, other);
    +146  }
    +147
    +148  // This method runs an opacity effect on ember
    +149  // to make it blink.
    +150  void hit() {
    +151    if (!hitByEnemy) {
    +152      game.health--;
    +153      hitByEnemy = true;
    +154    }
    +155    add(
    +156      OpacityEffect.fadeOut(
    +157        EffectController(
    +158          alternate: true,
    +159          duration: 0.1,
    +160          repeatCount: 5,
    +161        ),
    +162      )..onComplete = () {
    +163          hitByEnemy = false;
    +164        },
    +165    );
    +166  }
    +167}
    +
    +
    +
    +actors/water_enemy.dart
    +
     1import 'package:flame/collisions.dart';
    + 2import 'package:flame/components.dart';
    + 3import 'package:flame/effects.dart';
    + 4
    + 5import '../ember_quest.dart';
    + 6
    + 7class WaterEnemy extends SpriteAnimationComponent
    + 8    with HasGameReference<EmberQuestGame> {
    + 9  final Vector2 gridPosition;
    +10  double xOffset;
    +11
    +12  final Vector2 velocity = Vector2.zero();
    +13
    +14  WaterEnemy({
    +15    required this.gridPosition,
    +16    required this.xOffset,
    +17  }) : super(size: Vector2.all(64), anchor: Anchor.bottomLeft);
    +18
    +19  @override
    +20  Future<void> onLoad() async {
    +21    animation = SpriteAnimation.fromFrameData(
    +22      game.images.fromCache('water_enemy.png'),
    +23      SpriteAnimationData.sequenced(
    +24        amount: 2,
    +25        textureSize: Vector2.all(16),
    +26        stepTime: 0.70,
    +27      ),
    +28    );
    +29    position = Vector2(
    +30      (gridPosition.x * size.x) + xOffset,
    +31      game.size.y - (gridPosition.y * size.y),
    +32    );
    +33    add(RectangleHitbox(collisionType: CollisionType.passive));
    +34    add(
    +35      MoveEffect.by(
    +36        Vector2(-2 * size.x, 0),
    +37        EffectController(
    +38          duration: 3,
    +39          alternate: true,
    +40          infinite: true,
    +41        ),
    +42      ),
    +43    );
    +44  }
    +45
    +46  @override
    +47  void update(double dt) {
    +48    velocity.x = game.objectSpeed;
    +49    position += velocity * dt;
    +50    if (position.x < -size.x || game.health <= 0) {
    +51      removeFromParent();
    +52    }
    +53    super.update(dt);
    +54  }
    +55}
    +
    +
    +
    +ember_quest.dart
    +
      1import 'package:flame/components.dart';
    +  2import 'package:flame/events.dart';
    +  3import 'package:flame/game.dart';
    +  4import 'package:flutter/material.dart';
    +  5
    +  6import 'actors/ember.dart';
    +  7import 'actors/water_enemy.dart';
    +  8import 'managers/segment_manager.dart';
    +  9import 'objects/ground_block.dart';
    + 10import 'objects/platform_block.dart';
    + 11import 'objects/star.dart';
    + 12import 'overlays/hud.dart';
    + 13
    + 14class EmberQuestGame extends FlameGame
    + 15    with HasCollisionDetection, HasKeyboardHandlerComponents {
    + 16  EmberQuestGame();
    + 17
    + 18  late EmberPlayer _ember;
    + 19  late double lastBlockXPosition = 0.0;
    + 20  late UniqueKey lastBlockKey;
    + 21
    + 22  int starsCollected = 0;
    + 23  int health = 3;
    + 24  double cloudSpeed = 0.0;
    + 25  double objectSpeed = 0.0;
    + 26
    + 27  @override
    + 28  Future<void> onLoad() async {
    + 29    //debugMode = true; // Uncomment to see the bounding boxes
    + 30    await images.loadAll([
    + 31      'block.png',
    + 32      'ember.png',
    + 33      'ground.png',
    + 34      'heart_half.png',
    + 35      'heart.png',
    + 36      'star.png',
    + 37      'water_enemy.png',
    + 38    ]);
    + 39    camera.viewfinder.anchor = Anchor.topLeft;
    + 40
    + 41    initializeGame(loadHud: true);
    + 42  }
    + 43
    + 44  @override
    + 45  void update(double dt) {
    + 46    if (health <= 0) {
    + 47      overlays.add('GameOver');
    + 48    }
    + 49    super.update(dt);
    + 50  }
    + 51
    + 52  @override
    + 53  Color backgroundColor() {
    + 54    return const Color.fromARGB(255, 173, 223, 247);
    + 55  }
    + 56
    + 57  void loadGameSegments(int segmentIndex, double xPositionOffset) {
    + 58    for (final block in segments[segmentIndex]) {
    + 59      final component = switch (block.blockType) {
    + 60        GroundBlock _ => GroundBlock(
    + 61            gridPosition: block.gridPosition,
    + 62            xOffset: xPositionOffset,
    + 63          ),
    + 64        PlatformBlock _ => PlatformBlock(
    + 65            gridPosition: block.gridPosition,
    + 66            xOffset: xPositionOffset,
    + 67          ),
    + 68        Star _ => Star(
    + 69            gridPosition: block.gridPosition,
    + 70            xOffset: xPositionOffset,
    + 71          ),
    + 72        WaterEnemy _ => WaterEnemy(
    + 73            gridPosition: block.gridPosition,
    + 74            xOffset: xPositionOffset,
    + 75          ),
    + 76        _ => throw UnimplementedError(),
    + 77      };
    + 78      world.add(component);
    + 79    }
    + 80  }
    + 81
    + 82  void initializeGame({required bool loadHud}) {
    + 83    // Assume that size.x < 3200
    + 84    final segmentsToLoad = (size.x / 640).ceil();
    + 85    segmentsToLoad.clamp(0, segments.length);
    + 86
    + 87    for (var i = 0; i <= segmentsToLoad; i++) {
    + 88      loadGameSegments(i, (640 * i).toDouble());
    + 89    }
    + 90
    + 91    _ember = EmberPlayer(
    + 92      position: Vector2(128, canvasSize.y - 128),
    + 93    );
    + 94    world.add(_ember);
    + 95    if (loadHud) {
    + 96      camera.viewport.add(Hud());
    + 97    }
    + 98  }
    + 99
    +100  void reset() {
    +101    starsCollected = 0;
    +102    health = 3;
    +103    initializeGame(loadHud: false);
    +104  }
    +105}
    +
    +
    +
    +main.dart
    +
     1import 'package:flame/game.dart';
    + 2import 'package:flutter/material.dart';
    + 3
    + 4import 'ember_quest.dart';
    + 5import 'overlays/game_over.dart';
    + 6import 'overlays/main_menu.dart';
    + 7
    + 8void main() {
    + 9  runApp(
    +10    GameWidget<EmberQuestGame>.controlled(
    +11      gameFactory: EmberQuestGame.new,
    +12      overlayBuilderMap: {
    +13        'MainMenu': (_, game) => MainMenu(game: game),
    +14        'GameOver': (_, game) => GameOver(game: game),
    +15      },
    +16      initialActiveOverlays: const ['MainMenu'],
    +17    ),
    +18  );
    +19}
    +
    +
    +
    +managers/segment_manager.dart
    +
      1import 'package:flame/components.dart';
    +  2
    +  3import '../actors/water_enemy.dart';
    +  4import '../objects/ground_block.dart';
    +  5import '../objects/platform_block.dart';
    +  6import '../objects/star.dart';
    +  7
    +  8class Block {
    +  9  // gridPosition position is always segment based X,Y.
    + 10  // 0,0 is the bottom left corner.
    + 11  // 10,10 is the upper right corner.
    + 12  final Vector2 gridPosition;
    + 13  final Type blockType;
    + 14  Block(this.gridPosition, this.blockType);
    + 15}
    + 16
    + 17final segments = [
    + 18  segment0,
    + 19  segment1,
    + 20  segment2,
    + 21  segment3,
    + 22  segment4,
    + 23];
    + 24
    + 25final segment0 = [
    + 26  Block(Vector2(0, 0), GroundBlock),
    + 27  Block(Vector2(1, 0), GroundBlock),
    + 28  Block(Vector2(2, 0), GroundBlock),
    + 29  Block(Vector2(3, 0), GroundBlock),
    + 30  Block(Vector2(4, 0), GroundBlock),
    + 31  Block(Vector2(5, 0), GroundBlock),
    + 32  Block(Vector2(5, 1), WaterEnemy),
    + 33  Block(Vector2(5, 3), PlatformBlock),
    + 34  Block(Vector2(6, 0), GroundBlock),
    + 35  Block(Vector2(6, 3), PlatformBlock),
    + 36  Block(Vector2(7, 0), GroundBlock),
    + 37  Block(Vector2(7, 3), PlatformBlock),
    + 38  Block(Vector2(8, 0), GroundBlock),
    + 39  Block(Vector2(8, 3), PlatformBlock),
    + 40  Block(Vector2(9, 0), GroundBlock),
    + 41];
    + 42
    + 43final segment1 = [
    + 44  Block(Vector2(0, 0), GroundBlock),
    + 45  Block(Vector2(1, 0), GroundBlock),
    + 46  Block(Vector2(1, 1), PlatformBlock),
    + 47  Block(Vector2(1, 2), PlatformBlock),
    + 48  Block(Vector2(1, 3), PlatformBlock),
    + 49  Block(Vector2(2, 6), PlatformBlock),
    + 50  Block(Vector2(3, 6), PlatformBlock),
    + 51  Block(Vector2(6, 5), PlatformBlock),
    + 52  Block(Vector2(7, 5), PlatformBlock),
    + 53  Block(Vector2(7, 7), Star),
    + 54  Block(Vector2(8, 0), GroundBlock),
    + 55  Block(Vector2(8, 1), PlatformBlock),
    + 56  Block(Vector2(8, 5), PlatformBlock),
    + 57  Block(Vector2(8, 6), WaterEnemy),
    + 58  Block(Vector2(9, 0), GroundBlock),
    + 59];
    + 60
    + 61final segment2 = [
    + 62  Block(Vector2(0, 0), GroundBlock),
    + 63  Block(Vector2(1, 0), GroundBlock),
    + 64  Block(Vector2(2, 0), GroundBlock),
    + 65  Block(Vector2(3, 0), GroundBlock),
    + 66  Block(Vector2(3, 3), PlatformBlock),
    + 67  Block(Vector2(4, 0), GroundBlock),
    + 68  Block(Vector2(4, 3), PlatformBlock),
    + 69  Block(Vector2(5, 0), GroundBlock),
    + 70  Block(Vector2(5, 3), PlatformBlock),
    + 71  Block(Vector2(5, 4), WaterEnemy),
    + 72  Block(Vector2(6, 0), GroundBlock),
    + 73  Block(Vector2(6, 3), PlatformBlock),
    + 74  Block(Vector2(6, 4), PlatformBlock),
    + 75  Block(Vector2(6, 5), PlatformBlock),
    + 76  Block(Vector2(6, 7), Star),
    + 77  Block(Vector2(7, 0), GroundBlock),
    + 78  Block(Vector2(8, 0), GroundBlock),
    + 79  Block(Vector2(9, 0), GroundBlock),
    + 80];
    + 81
    + 82final segment3 = [
    + 83  Block(Vector2(0, 0), GroundBlock),
    + 84  Block(Vector2(1, 0), GroundBlock),
    + 85  Block(Vector2(1, 1), WaterEnemy),
    + 86  Block(Vector2(2, 0), GroundBlock),
    + 87  Block(Vector2(2, 1), PlatformBlock),
    + 88  Block(Vector2(2, 2), PlatformBlock),
    + 89  Block(Vector2(4, 4), PlatformBlock),
    + 90  Block(Vector2(6, 6), PlatformBlock),
    + 91  Block(Vector2(7, 0), GroundBlock),
    + 92  Block(Vector2(7, 1), PlatformBlock),
    + 93  Block(Vector2(8, 0), GroundBlock),
    + 94  Block(Vector2(8, 8), Star),
    + 95  Block(Vector2(9, 0), GroundBlock),
    + 96];
    + 97
    + 98final segment4 = [
    + 99  Block(Vector2(0, 0), GroundBlock),
    +100  Block(Vector2(1, 0), GroundBlock),
    +101  Block(Vector2(2, 0), GroundBlock),
    +102  Block(Vector2(2, 3), PlatformBlock),
    +103  Block(Vector2(3, 0), GroundBlock),
    +104  Block(Vector2(3, 1), WaterEnemy),
    +105  Block(Vector2(3, 3), PlatformBlock),
    +106  Block(Vector2(4, 0), GroundBlock),
    +107  Block(Vector2(5, 0), GroundBlock),
    +108  Block(Vector2(5, 5), PlatformBlock),
    +109  Block(Vector2(6, 0), GroundBlock),
    +110  Block(Vector2(6, 5), PlatformBlock),
    +111  Block(Vector2(6, 7), Star),
    +112  Block(Vector2(7, 0), GroundBlock),
    +113  Block(Vector2(8, 0), GroundBlock),
    +114  Block(Vector2(8, 3), PlatformBlock),
    +115  Block(Vector2(9, 0), GroundBlock),
    +116  Block(Vector2(9, 1), WaterEnemy),
    +117  Block(Vector2(9, 3), PlatformBlock),
    +118];
    +
    +
    +
    +objects/ground_block.dart
    +
     1import 'dart:math';
    + 2
    + 3import 'package:flame/collisions.dart';
    + 4import 'package:flame/components.dart';
    + 5import 'package:flutter/material.dart';
    + 6
    + 7import '../ember_quest.dart';
    + 8import '../managers/segment_manager.dart';
    + 9
    +10class GroundBlock extends SpriteComponent
    +11    with HasGameReference<EmberQuestGame> {
    +12  final Vector2 gridPosition;
    +13  double xOffset;
    +14
    +15  final UniqueKey _blockKey = UniqueKey();
    +16  final Vector2 velocity = Vector2.zero();
    +17
    +18  GroundBlock({
    +19    required this.gridPosition,
    +20    required this.xOffset,
    +21  }) : super(size: Vector2.all(64), anchor: Anchor.bottomLeft);
    +22
    +23  @override
    +24  Future<void> onLoad() async {
    +25    final groundImage = game.images.fromCache('ground.png');
    +26    sprite = Sprite(groundImage);
    +27    position = Vector2(
    +28      (gridPosition.x * size.x) + xOffset,
    +29      game.size.y - (gridPosition.y * size.y),
    +30    );
    +31    add(RectangleHitbox(collisionType: CollisionType.passive));
    +32    if (gridPosition.x == 9 && position.x > game.lastBlockXPosition) {
    +33      game.lastBlockKey = _blockKey;
    +34      game.lastBlockXPosition = position.x + size.x;
    +35    }
    +36  }
    +37
    +38  @override
    +39  void update(double dt) {
    +40    velocity.x = game.objectSpeed;
    +41    position += velocity * dt;
    +42
    +43    if (position.x < -size.x) {
    +44      removeFromParent();
    +45      if (gridPosition.x == 0) {
    +46        game.loadGameSegments(
    +47          Random().nextInt(segments.length),
    +48          game.lastBlockXPosition,
    +49        );
    +50      }
    +51    }
    +52    if (gridPosition.x == 9) {
    +53      if (game.lastBlockKey == _blockKey) {
    +54        game.lastBlockXPosition = position.x + size.x - 10;
    +55      }
    +56    }
    +57    if (game.health <= 0) {
    +58      removeFromParent();
    +59    }
    +60
    +61    super.update(dt);
    +62  }
    +63}
    +
    +
    +
    +objects/platform_block.dart
    +
     1import 'package:flame/collisions.dart';
    + 2import 'package:flame/components.dart';
    + 3
    + 4import '../ember_quest.dart';
    + 5
    + 6class PlatformBlock extends SpriteComponent
    + 7    with HasGameReference<EmberQuestGame> {
    + 8  final Vector2 gridPosition;
    + 9  double xOffset;
    +10
    +11  final Vector2 velocity = Vector2.zero();
    +12
    +13  PlatformBlock({
    +14    required this.gridPosition,
    +15    required this.xOffset,
    +16  }) : super(size: Vector2.all(64), anchor: Anchor.bottomLeft);
    +17
    +18  @override
    +19  Future<void> onLoad() async {
    +20    final platformImage = game.images.fromCache('block.png');
    +21    sprite = Sprite(platformImage);
    +22    position = Vector2(
    +23      (gridPosition.x * size.x) + xOffset,
    +24      game.size.y - (gridPosition.y * size.y),
    +25    );
    +26    add(RectangleHitbox(collisionType: CollisionType.passive));
    +27  }
    +28
    +29  @override
    +30  void update(double dt) {
    +31    velocity.x = game.objectSpeed;
    +32    position += velocity * dt;
    +33    if (position.x < -size.x || game.health <= 0) {
    +34      removeFromParent();
    +35    }
    +36    super.update(dt);
    +37  }
    +38}
    +
    +
    +
    +objects/star.dart
    +
     1import 'package:flame/collisions.dart';
    + 2import 'package:flame/components.dart';
    + 3import 'package:flame/effects.dart';
    + 4import 'package:flutter/material.dart';
    + 5
    + 6import '../ember_quest.dart';
    + 7
    + 8class Star extends SpriteComponent with HasGameReference<EmberQuestGame> {
    + 9  final Vector2 gridPosition;
    +10  double xOffset;
    +11
    +12  final Vector2 velocity = Vector2.zero();
    +13
    +14  Star({
    +15    required this.gridPosition,
    +16    required this.xOffset,
    +17  }) : super(size: Vector2.all(64), anchor: Anchor.center);
    +18
    +19  @override
    +20  Future<void> onLoad() async {
    +21    final starImage = game.images.fromCache('star.png');
    +22    sprite = Sprite(starImage);
    +23    position = Vector2(
    +24      (gridPosition.x * size.x) + xOffset + (size.x / 2),
    +25      game.size.y - (gridPosition.y * size.y) - (size.y / 2),
    +26    );
    +27    add(RectangleHitbox(collisionType: CollisionType.passive));
    +28    add(
    +29      SizeEffect.by(
    +30        Vector2(-24, -24),
    +31        EffectController(
    +32          duration: .75,
    +33          reverseDuration: .5,
    +34          infinite: true,
    +35          curve: Curves.easeOut,
    +36        ),
    +37      ),
    +38    );
    +39  }
    +40
    +41  @override
    +42  void update(double dt) {
    +43    velocity.x = game.objectSpeed;
    +44    position += velocity * dt;
    +45    if (position.x < -size.x || game.health <= 0) {
    +46      removeFromParent();
    +47    }
    +48    super.update(dt);
    +49  }
    +50}
    +
    +
    +
    +overlays/game_over.dart
    +
     1import 'package:flutter/material.dart';
    + 2
    + 3import '../ember_quest.dart';
    + 4
    + 5class GameOver extends StatelessWidget {
    + 6  // Reference to parent game.
    + 7  final EmberQuestGame game;
    + 8  const GameOver({required this.game, super.key});
    + 9
    +10  @override
    +11  Widget build(BuildContext context) {
    +12    const blackTextColor = Color.fromRGBO(0, 0, 0, 1.0);
    +13    const whiteTextColor = Color.fromRGBO(255, 255, 255, 1.0);
    +14
    +15    return Material(
    +16      color: Colors.transparent,
    +17      child: Center(
    +18        child: Container(
    +19          padding: const EdgeInsets.all(10.0),
    +20          height: 200,
    +21          width: 300,
    +22          decoration: const BoxDecoration(
    +23            color: blackTextColor,
    +24            borderRadius: BorderRadius.all(
    +25              Radius.circular(20),
    +26            ),
    +27          ),
    +28          child: Column(
    +29            mainAxisAlignment: MainAxisAlignment.center,
    +30            children: [
    +31              const Text(
    +32                'Game Over',
    +33                style: TextStyle(
    +34                  color: whiteTextColor,
    +35                  fontSize: 24,
    +36                ),
    +37              ),
    +38              const SizedBox(height: 40),
    +39              SizedBox(
    +40                width: 200,
    +41                height: 75,
    +42                child: ElevatedButton(
    +43                  onPressed: () {
    +44                    game.reset();
    +45                    game.overlays.remove('GameOver');
    +46                  },
    +47                  style: ElevatedButton.styleFrom(
    +48                    backgroundColor: whiteTextColor,
    +49                  ),
    +50                  child: const Text(
    +51                    'Play Again',
    +52                    style: TextStyle(
    +53                      fontSize: 28.0,
    +54                      color: blackTextColor,
    +55                    ),
    +56                  ),
    +57                ),
    +58              ),
    +59            ],
    +60          ),
    +61        ),
    +62      ),
    +63    );
    +64  }
    +65}
    +
    +
    +
    +overlays/heart.dart
    +
     1import 'package:flame/components.dart';
    + 2
    + 3import '../ember_quest.dart';
    + 4
    + 5enum HeartState {
    + 6  available,
    + 7  unavailable,
    + 8}
    + 9
    +10class HeartHealthComponent extends SpriteGroupComponent<HeartState>
    +11    with HasGameReference<EmberQuestGame> {
    +12  final int heartNumber;
    +13
    +14  HeartHealthComponent({
    +15    required this.heartNumber,
    +16    required super.position,
    +17    required super.size,
    +18    super.scale,
    +19    super.angle,
    +20    super.anchor,
    +21    super.priority,
    +22  });
    +23
    +24  @override
    +25  Future<void> onLoad() async {
    +26    await super.onLoad();
    +27    final availableSprite = await game.loadSprite(
    +28      'heart.png',
    +29      srcSize: Vector2.all(32),
    +30    );
    +31
    +32    final unavailableSprite = await game.loadSprite(
    +33      'heart_half.png',
    +34      srcSize: Vector2.all(32),
    +35    );
    +36
    +37    sprites = {
    +38      HeartState.available: availableSprite,
    +39      HeartState.unavailable: unavailableSprite,
    +40    };
    +41
    +42    current = HeartState.available;
    +43  }
    +44
    +45  @override
    +46  void update(double dt) {
    +47    if (game.health < heartNumber) {
    +48      current = HeartState.unavailable;
    +49    } else {
    +50      current = HeartState.available;
    +51    }
    +52    super.update(dt);
    +53  }
    +54}
    +
    +
    +
    +overlays/hud.dart
    +
     1import 'package:flame/components.dart';
    + 2import 'package:flutter/material.dart';
    + 3
    + 4import '../ember_quest.dart';
    + 5import 'heart.dart';
    + 6
    + 7class Hud extends PositionComponent with HasGameReference<EmberQuestGame> {
    + 8  Hud({
    + 9    super.position,
    +10    super.size,
    +11    super.scale,
    +12    super.angle,
    +13    super.anchor,
    +14    super.children,
    +15    super.priority = 5,
    +16  });
    +17
    +18  late TextComponent _scoreTextComponent;
    +19
    +20  @override
    +21  Future<void>? onLoad() async {
    +22    _scoreTextComponent = TextComponent(
    +23      text: '${game.starsCollected}',
    +24      textRenderer: TextPaint(
    +25        style: const TextStyle(
    +26          fontSize: 32,
    +27          color: Color.fromRGBO(10, 10, 10, 1),
    +28        ),
    +29      ),
    +30      anchor: Anchor.center,
    +31      position: Vector2(game.size.x - 60, 20),
    +32    );
    +33    add(_scoreTextComponent);
    +34
    +35    final starSprite = await game.loadSprite('star.png');
    +36    add(
    +37      SpriteComponent(
    +38        sprite: starSprite,
    +39        position: Vector2(game.size.x - 100, 20),
    +40        size: Vector2.all(32),
    +41        anchor: Anchor.center,
    +42      ),
    +43    );
    +44
    +45    for (var i = 1; i <= game.health; i++) {
    +46      final positionX = 40 * i;
    +47      await add(
    +48        HeartHealthComponent(
    +49          heartNumber: i,
    +50          position: Vector2(positionX.toDouble(), 20),
    +51          size: Vector2.all(32),
    +52        ),
    +53      );
    +54    }
    +55
    +56    return super.onLoad();
    +57  }
    +58
    +59  @override
    +60  void update(double dt) {
    +61    _scoreTextComponent.text = '${game.starsCollected}';
    +62    super.update(dt);
    +63  }
    +64}
    +
    +
    +
    +overlays/main_menu.dart
    +
     1import 'package:flutter/material.dart';
    + 2
    + 3import '../ember_quest.dart';
    + 4
    + 5class MainMenu extends StatelessWidget {
    + 6  // Reference to parent game.
    + 7  final EmberQuestGame game;
    + 8
    + 9  const MainMenu({required this.game, super.key});
    +10
    +11  @override
    +12  Widget build(BuildContext context) {
    +13    const blackTextColor = Color.fromRGBO(0, 0, 0, 1.0);
    +14    const whiteTextColor = Color.fromRGBO(255, 255, 255, 1.0);
    +15
    +16    return Material(
    +17      color: Colors.transparent,
    +18      child: Center(
    +19        child: Container(
    +20          padding: const EdgeInsets.all(10.0),
    +21          height: 300,
    +22          width: 300,
    +23          decoration: const BoxDecoration(
    +24            color: blackTextColor,
    +25            borderRadius: BorderRadius.all(
    +26              Radius.circular(20),
    +27            ),
    +28          ),
    +29          child: Column(
    +30            mainAxisAlignment: MainAxisAlignment.center,
    +31            children: [
    +32              const Text(
    +33                'Ember Quest',
    +34                style: TextStyle(
    +35                  color: whiteTextColor,
    +36                  fontSize: 24,
    +37                ),
    +38              ),
    +39              const SizedBox(height: 40),
    +40              SizedBox(
    +41                width: 200,
    +42                height: 75,
    +43                child: ElevatedButton(
    +44                  onPressed: () {
    +45                    game.overlays.remove('MainMenu');
    +46                  },
    +47                  style: ElevatedButton.styleFrom(
    +48                    backgroundColor: whiteTextColor,
    +49                  ),
    +50                  child: const Text(
    +51                    'Play',
    +52                    style: TextStyle(
    +53                      fontSize: 40.0,
    +54                      color: blackTextColor,
    +55                    ),
    +56                  ),
    +57                ),
    +58              ),
    +59              const SizedBox(height: 20),
    +60              const Text(
    +61                '''Use WASD or Arrow Keys for movement.
    +62Space bar to jump.
    +63Collect as many stars as you can and avoid enemies!''',
    +64                textAlign: TextAlign.center,
    +65                style: TextStyle(
    +66                  color: whiteTextColor,
    +67                  fontSize: 14,
    +68                ),
    +69              ),
    +70            ],
    +71          ),
    +72        ),
    +73      ),
    +74    );
    +75  }
    +76}
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/space_shooter/space_shooter.html b/docs/1.18.0/tutorials/space_shooter/space_shooter.html new file mode 100644 index 000000000..238b09f70 --- /dev/null +++ b/docs/1.18.0/tutorials/space_shooter/space_shooter.html @@ -0,0 +1,377 @@ + + + + + + + Space Shooter Game Tutorial — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Space Shooter Game Tutorial

    +

    In this tutorial, we will follow a step-by-step process for coding a game using the Flame +engine.

    +

    This tutorial assumes that you have at least some familiarity with common programming concepts, and +with the Dart programming language.

    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/space_shooter/step_1.html b/docs/1.18.0/tutorials/space_shooter/step_1.html new file mode 100644 index 000000000..47faa04cf --- /dev/null +++ b/docs/1.18.0/tutorials/space_shooter/step_1.html @@ -0,0 +1,478 @@ + + + + + + + Getting Started — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Getting Started

    +

    This tutorial will guide you on the development of a full Flame game, starting from the ground up, +step by step. By the end of it, you will have built a classic Space Shooter game, featuring +animations, input using gestures, mouse and keyboard controls, collision detections, and so on.

    +

    This first part will introduce you to:

    +
      +
    • FlameGame: The base class for games using the Flame Component System.

    • +
    • GameWidget: The Widget that will insert your game into the Flutter widget tree.

    • +
    • PositionComponent: One of the most basic Flame components holds both a position and +dimension in the game space.

    • +
    +

    Let’s start by creating our game class and the GameWidget that will run it.

    +
    import 'package:flutter/material.dart';
    +import 'package:flame/game.dart';
    +
    +class SpaceShooterGame extends FlameGame {
    +}
    +
    +void main() {
    +  runApp(GameWidget(game: SpaceShooterGame()));
    +}
    +
    +
    +

    That is it! If you run this, you will only see an empty black screen for now, from that, we can +start implementing our game.

    +

    Next, let’s create our player component. To do so, we will create a new class based on Flame’s +PositionComponent. This component is the base for all components that have a position and a size +on the game screen. For now, our component will only render a white square; it could be +implemented as follows:

    +
    import 'package:flame/components.dart';
    +
    +class Player extends PositionComponent {
    +  static final _paint = Paint()..color = Colors.white;
    +
    +  @override
    +  void render(Canvas canvas) {
    +    canvas.drawRect(size.toRect(), _paint);
    +  }
    +}
    +
    +
    +

    Now, let’s add our new component to the game. Adding any component on game startup should be done +in the onLoad method, so let’s override FlameGame.onLoad and add our logic there. The modified +code will look like the following:

    +
    class SpaceShooterGame extends FlameGame {
    +  @override
    +  Future<void> onLoad() async {
    +    await super.onLoad();
    +
    +    add(
    +      Player()
    +        ..position = size / 2
    +        ..width = 50
    +        ..height = 100
    +        ..anchor = Anchor.center,
    +    );
    +  }
    +}
    +
    +
    +

    If you run this, you will now see a white rectangle being rendered in the center of the screen.

    +

    A couple of points worth commenting:

    +
      +
    • size is a Vector2 variable from the game class and it holds the current dimension of the game +area, where x is the horizontal dimension or the width, and y is the vertical dimension or the +height.

    • +
    • By default, Flame follows Flutter’s canvas anchoring, which means that (0, 0) is anchored on the +top left corner of the canvas. So the game and all components use that same anchor by default. We +can change this by changing our component’s anchor attribute to Anchor.center, which will make +our life way easier if you want to center the component on the screen.

    • +
    +

    And that is it for this first part! In this first step, we learned the basics of how to create a +game class, insert it into the Flutter widget tree, and render a simple component.

    +
    +
    +main.dart
    +
     1import 'package:flame/components.dart';
    + 2import 'package:flame/game.dart';
    + 3import 'package:flutter/material.dart';
    + 4
    + 5void main() {
    + 6  runApp(GameWidget(game: SpaceShooterGame()));
    + 7}
    + 8
    + 9class Player extends PositionComponent {
    +10  static final _paint = Paint()..color = Colors.white;
    +11  @override
    +12  void render(Canvas canvas) {
    +13    canvas.drawRect(size.toRect(), _paint);
    +14  }
    +15}
    +16
    +17class SpaceShooterGame extends FlameGame {
    +18  @override
    +19  Future<void> onLoad() async {
    +20    add(
    +21      Player()
    +22        ..position = size / 2
    +23        ..width = 50
    +24        ..height = 100
    +25        ..anchor = Anchor.center,
    +26    );
    +27  }
    +28}
    +
    +
    +
    +

    Next step: Controlling the player and adding some graphics

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/space_shooter/step_2.html b/docs/1.18.0/tutorials/space_shooter/step_2.html new file mode 100644 index 000000000..e609a3ef7 --- /dev/null +++ b/docs/1.18.0/tutorials/space_shooter/step_2.html @@ -0,0 +1,593 @@ + + + + + + + Controlling the player and adding some graphics — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Controlling the player and adding some graphics

    +

    Now that we have the base for our game and a component for our player, let’s add some interactivity +to it. We can begin by allowing the player to be controlled by mouse/touch gestures.

    +

    There are a couple of ways of doing that in Flame. For this tutorial, we will do that by using one +of Flame’s gesture detectors: PanDetector.

    +

    This detector will make our game class receive pan (or drag) events. To do so, we just need to add +the PanDetector mixin to our game class and override its listener methods; in our case, we will +use the onPanUpdate method. The updated code will look like the following:

    +
    import 'package:flame/input.dart';
    +
    +class SpaceShooterGame extends FlameGame with PanDetector {
    +  late Player player;
    +
    +  @override
    +  void onLoad() {
    +    // omitted
    +  }
    +
    +  @override
    +  void onPanUpdate(DragUpdateInfo info) {
    +  }
    +}
    +
    +
    +

    At this point, our game should be receiving all the pan update inputs, but we are not doing anything +with these events.

    +

    We now need a way to move our player. That can be achieved by simply saving our Player component +to a variable inside our game class, adding a method move to our Player, and just connect +them:

    +
    class Player extends PositionComponent { 
    +  static final _paint = Paint()..color = Colors.white;
    +  
    +  @override
    +  void render(Canvas canvas) {
    +    canvas.drawRect(size.toRect(), _paint);
    +  }
    +
    +  void move(Vector2 delta) {
    +    position.add(delta);
    +  }
    +}
    +
    +class SpaceShooterGame extends FlameGame with PanDetector {
    +  late Player player;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    await super.onLoad();
    +
    +    player = Player()
    +      ..position = size / 2
    +      ..width = 50
    +      ..height = 100
    +      ..anchor = Anchor.center;
    +
    +    add(player);
    +  }
    +
    +  @override
    +  void onPanUpdate(DragUpdateInfo info) {
    +    player.move(info.delta.game);
    +  }
    +}
    +
    +
    +

    That is it! If you drag the screen, the player should follow your movement and we have just +implemented our very first interactive game!

    +

    Before we move to our next step, let’s replace that boring white rectangle with some cool graphics.

    +

    Flame provides many classes to help us with graphical rendering. For this step, we are going to use +the Sprite class.

    +

    Sprites are used in Flame to render static images or portions of them in the game. To render a +Sprite inside a FlameGame, we should use the SpriteComponent class, which wraps the Sprite +features into a component.

    +

    So let’s refactor our current implementation, first, we can replace our inheritance from +PositionComponent to SpriteComponent (which is a component that extends from +PositionComponent) and load the sprite:

    +
    class Player extends SpriteComponent {
    +  void move(Vector2 delta) {
    +    position.add(delta);
    +  }
    +}
    +
    +class SpaceShooterGame extends FlameGame with PanDetector {
    +  late Player player;
    +
    +  @override
    +  Future<void>? onLoad() async {
    +    await super.onLoad();
    +
    +    final playerSprite = await loadSprite('player-sprite.png');
    +    player = Player()
    +      ..sprite = playerSprite
    +      ..x = size.x / 2
    +      ..y = size.y / 2
    +      ..width = 50
    +      ..height = 100
    +      ..anchor = Anchor.center;
    +
    +    add(player);
    +  }
    +
    +  @override
    +  void onPanUpdate(DragUpdateInfo info) {
    +    player.move(info.delta.game);
    +  }
    +}
    +
    +
    +

    And now, you should see a small blue spaceship on the screen!

    +

    A couple of notes worth mentioning:

    +
      +
    • Unlike PositionComponent, SpriteComponent has an implementation for the render method, so we +can delete the previous override.

    • +
    • FlameGame has a couple of methods for loading assets, like loadSprite. Those methods are +quite useful, because when used, FlameGame will take care of cleaning any cache when the game is +removed from the Flutter widget tree.

    • +
    +

    Before we close this step, there is one small improvement that we can do. Right now, we are loading +the sprite and passing it to our component. For now, this may seem fine, but imagine a game with +a lot of components; if the game is responsible for loading assets for all components, our code can +become a mess quite fast.

    +

    Just like FlameGame, components also have an onLoad method that can be overridden to do +initializations. But before we implement our player’s load method, note that we use an attribute and +the loadSprite method from the FlameGame class.

    +

    That is not a problem! Every time our component needs to access things from its game class, we can +mix our component with the HasGameRef mixin; that will add a new variable to our component called +gameRef which will point to the game instance where the component is running. Now, let’s refactor +our game a little bit:

    +
    class Player extends SpriteComponent with HasGameRef<SpaceShooterGame> {
    +
    +  Player() : super(
    +    size: Vector2(100, 150),
    +    anchor: Anchor.center,
    +  );
    +
    +  @override
    +  Future<void> onLoad() async {
    +    await super.onLoad();
    +
    +    sprite = await gameRef.loadSprite('player-sprite.png');
    +
    +    position = gameRef.size / 2;
    +  }
    +
    +  void move(Vector2 delta) {
    +    position.add(delta);
    +  }
    +}
    +
    +class SpaceShooterGame extends FlameGame with PanDetector {
    +  late Player player;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    await super.onLoad();
    +
    +    player = Player();
    +
    +    add(player);
    +  }
    +
    +  @override
    +  void onPanUpdate(DragUpdateInfo info) {
    +    player.move(info.delta.game);
    +  }
    +}
    +
    +
    +

    If you run the game now, you will not notice any visual differences, but now we have a more scalable +structure for developing our game. And that closes this step!

    +
    +
    +main.dart
    +
     1import 'package:flame/components.dart';
    + 2import 'package:flame/events.dart';
    + 3import 'package:flame/game.dart';
    + 4import 'package:flame/input.dart';
    + 5import 'package:flutter/material.dart';
    + 6
    + 7void main() {
    + 8  runApp(GameWidget(game: SpaceShooterGame()));
    + 9}
    +10
    +11class SpaceShooterGame extends FlameGame with PanDetector {
    +12  late Player player;
    +13
    +14  @override
    +15  Future<void> onLoad() async {
    +16    player = Player();
    +17    add(player);
    +18  }
    +19
    +20  @override
    +21  void onPanUpdate(DragUpdateInfo info) {
    +22    player.move(info.delta.global);
    +23  }
    +24}
    +25
    +26class Player extends SpriteComponent with HasGameReference<SpaceShooterGame> {
    +27  Player()
    +28      : super(
    +29          size: Vector2(100, 150),
    +30          anchor: Anchor.center,
    +31        );
    +32
    +33  @override
    +34  Future<void> onLoad() async {
    +35    await super.onLoad();
    +36
    +37    sprite = await game.loadSprite('player-sprite.png');
    +38
    +39    position = game.size / 2;
    +40    anchor = Anchor.center;
    +41  }
    +42
    +43  void move(Vector2 delta) {
    +44    position.add(delta);
    +45  }
    +46}
    +
    +
    +
    +

    Next step: Adding animations and depth

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/space_shooter/step_3.html b/docs/1.18.0/tutorials/space_shooter/step_3.html new file mode 100644 index 000000000..ce1b6be09 --- /dev/null +++ b/docs/1.18.0/tutorials/space_shooter/step_3.html @@ -0,0 +1,559 @@ + + + + + + + Adding animations and depth — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Adding animations and depth

    +

    We now have something that looks more like a game, having graphics for our spaceship and being +able to directly control it.

    +

    But our game so far is too boring, the starship is just a static sprite and the background is +just a black screen.

    +

    In this step we will look at how to improve that, we will replace the static graphics of the player +with an animation and create a cool sense of depth and movement by adding a parallax to the +background of the game.

    +

    So lets start by adding the animation to the player ship! For that, we will something that we +call Sprite Animations, which is an animation that is composed by a collection of sprites, each +one representing one frame, and the animation effect is achieved by rendering one sprite after +the other over a time frame.

    +

    To better visualize this, this is the animation that we will be using, note how the image holds 4 +individual images (or frames).

    +

    +

    Flame provides us with a specialized classes to deal with such images: SpriteAnimation and its component +wrapper SpriteAnimationComponent and changing our Player component to be an animation is quite +simple, take a look at how the component will look like now:

    +
    class Player extends SpriteAnimationComponent
    +    with HasGameReference<SpaceShooterGame> {
    +
    +  Player() : super(
    +    size: Vector2(100, 150),
    +    anchor: Anchor.center,
    +  );
    +
    +  @override
    +  Future<void> onLoad() async {
    +    await super.onLoad();
    +
    +    animation = await game.loadSpriteAnimation(
    +      'player.png',
    +      SpriteAnimationData.sequenced(
    +        amount: 4,
    +        stepTime: .2,
    +        textureSize: Vector2(32, 48),
    +      ),
    +    );
    +
    +    position = game.size / 2;
    +  }
    +
    +  // Other methods omitted
    +}
    +
    +
    +

    So lets break down the changes:

    +
      +
    • First we changed our Player component to extend from SpriteAnimationComponent instead of +SpriteComponent

    • +
    • In the onLoad method we are now using the game.loadSpriteAnimation helper instead of the +loadSprite one, and setting the animation attribute with its returned value.

    • +
    +

    The SpriteAnimationData class might look complicated at first glance, but it is actually quite +simple, note how we used the sequenced constructor, which is a helper to load animation images +where the frames are already laid down in the sequence that they will play, then:

    +
      +
    • amount defines how many frames the animation has, in this case 4

    • +
    • stepTime is the time in seconds that each frame will be rendered, before it gets replaced +with the next one.

    • +
    • textureSize is the size in pixels which defines each frame of the image.

    • +
    +

    With all of this information, the SpriteAnimationComponent will now automatically play the +animation!

    +

    Now lets add some depth and energy to our game background. Of course there are many ways of +doing so, in this tutorial we will explore the idea of parallax scrolling. If you never heard +about it, it consist of a technique where background images move past the camera with different +speeds, this not only creates the sensation of depth but also improves the movement feeling +of the game a lot. If you want to read more about Parallax Scrolling, check this article +from Wikipedia.

    +

    Flame provides classes to implement parallax scrolling out of the box, these classes are Parallax and +ParallaxComponent, so lets take a look at how we can add that new feature to the game:

    +
    class SpaceShooterGame extends FlameGame with PanDetector {
    +  late Player player;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    final parallax = await loadParallaxComponent(
    +      [
    +        ParallaxImageData('stars_0.png'),
    +        ParallaxImageData('stars_1.png'),
    +        ParallaxImageData('stars_2.png'),
    +      ],
    +      baseVelocity: Vector2(0, -5),
    +      repeat: ImageRepeat.repeat,
    +      velocityMultiplierDelta: Vector2(0, 5),
    +    );
    +    add(parallax);
    +
    +    player = Player();
    +    add(player);
    +  }
    +
    +  @override
    +  void onPanUpdate(DragUpdateInfo info) {
    +    player.move(info.delta.global);
    +  }
    +}
    +
    +
    +

    Looking at the code above we notice that we are now using the loadParallaxComponent helper +method from the FlameGame class to directly load a ParallaxComponent and add it to our game.

    +

    The arguments used there are as follows:

    +
      +
    • The first argument is a positional one, which should be a list of ParallaxDatas. There are a +couple of types of ParallaxDatas in Flame, in this tutorial we are using the ParallaxImageData +which describes a layer in the parallax scrolling effect that is an image. This list will tell +Flame about all the layers that we want in our parallax.

    • +
    • baseVelocity is the base value for all the values, so by passing a Vector2(0, -5) to it +means that the slower of the layers will move at 0 pixels per second on the x axis and -5 +pixels per second on the y axis.

    • +
    • Finally velocityMultiplierDelta is a vector that is applied to the base value for each layer, +and in our example the multiplication rate is 5 on only the y axis.

    • +
    +

    Give it a try by running the game now, you will notice that it looks way more dynamic now, giving a +more convincing feeling to the player that the spaceship is really crossing the stars!

    +
    +
    +main.dart
    +
     1import 'package:flame/components.dart';
    + 2import 'package:flame/events.dart';
    + 3import 'package:flame/game.dart';
    + 4import 'package:flame/input.dart';
    + 5import 'package:flame/parallax.dart';
    + 6import 'package:flutter/material.dart';
    + 7
    + 8void main() {
    + 9  runApp(GameWidget(game: SpaceShooterGame()));
    +10}
    +11
    +12class SpaceShooterGame extends FlameGame with PanDetector {
    +13  late Player player;
    +14
    +15  @override
    +16  Future<void> onLoad() async {
    +17    final parallax = await loadParallaxComponent(
    +18      [
    +19        ParallaxImageData('stars_0.png'),
    +20        ParallaxImageData('stars_1.png'),
    +21        ParallaxImageData('stars_2.png'),
    +22      ],
    +23      baseVelocity: Vector2(0, -5),
    +24      repeat: ImageRepeat.repeat,
    +25      velocityMultiplierDelta: Vector2(0, 5),
    +26    );
    +27    add(parallax);
    +28
    +29    player = Player();
    +30    add(player);
    +31  }
    +32
    +33  @override
    +34  void onPanUpdate(DragUpdateInfo info) {
    +35    player.move(info.delta.global);
    +36  }
    +37}
    +38
    +39class Player extends SpriteAnimationComponent
    +40    with HasGameReference<SpaceShooterGame> {
    +41  Player()
    +42      : super(
    +43          size: Vector2(100, 150),
    +44          anchor: Anchor.center,
    +45        );
    +46
    +47  @override
    +48  Future<void> onLoad() async {
    +49    await super.onLoad();
    +50
    +51    animation = await game.loadSpriteAnimation(
    +52      'player.png',
    +53      SpriteAnimationData.sequenced(
    +54        amount: 4,
    +55        stepTime: .2,
    +56        textureSize: Vector2(32, 48),
    +57      ),
    +58    );
    +59
    +60    position = game.size / 2;
    +61  }
    +62
    +63  void move(Vector2 delta) {
    +64    position.add(delta);
    +65  }
    +66}
    +
    +
    +
    +

    Next step: Adding bullets

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/space_shooter/step_4.html b/docs/1.18.0/tutorials/space_shooter/step_4.html new file mode 100644 index 000000000..51d53435d --- /dev/null +++ b/docs/1.18.0/tutorials/space_shooter/step_4.html @@ -0,0 +1,694 @@ + + + + + + + Adding bullets — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Adding bullets

    +

    For this next step we will add a very important feature to any space shooter game, shooting!

    +

    Here is how we will implement it: since we already control our space ship by dragging on the screen +with the mouse/fingers, we will make the ship auto shoot when the player starts dragging and +stop shooting when the gesture/input has ended.

    +

    First, let’s create a Bullet component that will represent the shots in the game.

    +
    class Bullet extends SpriteAnimationComponent
    +    with HasGameReference<SpaceShooterGame> {
    +  Bullet({
    +    super.position,
    +  }) : super(
    +          size: Vector2(25, 50),
    +          anchor: Anchor.center,
    +        );
    +
    +  @override
    +  Future<void> onLoad() async {
    +    await super.onLoad();
    +
    +    animation = await game.loadSpriteAnimation(
    +      'bullet.png',
    +      SpriteAnimationData.sequenced(
    +        amount: 4,
    +        stepTime: .2,
    +        textureSize: Vector2(8, 16),
    +      ),
    +    );
    +  }
    +}
    +
    +
    +

    So far, this does not introduce any new concepts, we just created a component and set +up its animations attributes.

    +

    The Bullet behavior is a simple one, it always moves towards the top of the screen and should +be removed from the game if it is not visible anymore, so let’s add an update method to it +and make it happen:

    +
    class Bullet extends SpriteAnimationComponent
    +    with HasGameReference<SpaceShooterGame> {
    +  Bullet({
    +    super.position,
    +  }) : super(
    +          size: Vector2(25, 50),
    +          anchor: Anchor.center,
    +        );
    +
    +  @override
    +  Future<void> onLoad() async {
    +    // Omitted
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    super.update(dt);
    +
    +    position.y += dt * -500;
    +
    +    if (position.y < -height) {
    +      removeFromParent();
    +    }
    +  }
    +}
    +
    +
    +

    The above code should be straight forward, but lets break it down:

    +
      +
    • We add to the bullet’s y axis position at a rate of -500 pixels per second. Remember going up +in the y axis means getting closer to 0 since the top left corner of the screen is 0, 0.

    • +
    • If the y is smaller than the negative value of the bullet’s height, means that the component is +completely off the screen and it can be removed.

    • +
    +

    Right, we now have a Bullet class ready, so lets start to implement the action of shooting. +First thing, let’s create two empty methods in the Player class, startShooting() and +stopShooting().

    +
    class Player extends SpriteAnimationComponent
    +    with HasGameReference<SpaceShooterGame> {
    +
    +  // Rest of implementation omitted
    +
    +  void startShooting() {
    +    // TODO
    +  }
    +
    +  void stopShooting() {
    +    // TODO
    +  }
    +}
    +
    +
    +

    And let’s hook into those methods from the game class by using the onPanStart() +and onPanEnd() methods from the PanDetector mixin that we already have been using for the ship +movement:

    +
    class SpaceShooterGame extends FlameGame with PanDetector {
    +  late Player player;
    +
    +  // Rest of implementation omitted
    +
    +  @override
    +  void onPanUpdate(DragUpdateInfo info) {
    +    player.move(info.delta.global);
    +  }
    +
    +  @override
    +  void onPanStart(DragStartInfo info) {
    +    player.startShooting();
    +  }
    +
    +  @override
    +  void onPanEnd(DragEndInfo info) {
    +    player.stopShooting();
    +  }
    +}
    +
    +
    +

    We now have everything set up, so let’s write the shooting routine in our player class.

    +

    Remember, the shooting behavior will be adding bullets through time intervals when the player is +dragging the starship.

    +

    We could implement the time interval code and the spawning manually, but Flame +provides a component out of the box for that, the SpawnComponent, so let’s take advantage of it:

    +
    class Player extends SpriteAnimationComponent
    +    with HasGameReference<SpaceShooterGame> {
    +  late final SpawnComponent _bulletSpawner;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    // Loading animation omitted
    +
    +    _bulletSpawner = SpawnComponent(
    +      period: .2,
    +      selfPositioning: true,
    +      factory: (index) {
    +        return Bullet(
    +          position: position +
    +              Vector2(
    +                0,
    +                -height / 2,
    +              ),
    +        );
    +
    +        return bullet;
    +      },
    +      autoStart: false,
    +    );
    +
    +    game.add(_bulletSpawner);
    +  }
    +
    +  void move(Vector2 delta) {
    +    position.add(delta);
    +  }
    +
    +  void startShooting() {
    +    _bulletSpawner.timer.start();
    +  }
    +
    +  void stopShooting() {
    +    _bulletSpawner.timer.stop();
    +  }
    +}
    +
    +
    +

    Hopefully the code above speaks for itself, but let’s look at it in more detail:

    +
      +
    • First we declared a SpawnComponent called _bulletSpawner in our game class, we needed it +to be an variable accessible to the whole component since we will be accessing it in the +startShooting and stopShooting methods.

    • +
    • We initialize our _bulletSpawner in the onLoad method. In the first argument, period, we set +how much time in seconds it will take between calls, and we choose .2 seconds for now.

    • +
    • We set selfPositioning: true so the spawn component doesn’t try to position the created component +since we want to handle that ourselves to make the bullets spawn out of the ship.

    • +
    • The factory attribute receives a function that will be called every time the period is
      +reached and return the created component.

    • +
    • We set autoStart: false so it does not start by default.

    • +
    • Finally we add the _bulletSpawner to our component, so it can be processed in the game loop.

    • +
    • Note how the _bulletSpawner is added to the game instead of the player, since the bullets +are part of the whole game and not the player itself.

    • +
    +

    With the _bulletSpawner all set up, the only missing piece now is starting the +_bulletSpawner.timer in startShooting() and stopping it in the stopShooting()!

    +

    And that closes this step, putting us real close to a real game!

    +
    +
    +main.dart
    +
      1import 'package:flame/components.dart';
    +  2import 'package:flame/events.dart';
    +  3import 'package:flame/game.dart';
    +  4import 'package:flame/input.dart';
    +  5import 'package:flame/parallax.dart';
    +  6import 'package:flutter/material.dart';
    +  7
    +  8void main() {
    +  9  runApp(GameWidget(game: SpaceShooterGame()));
    + 10}
    + 11
    + 12class SpaceShooterGame extends FlameGame with PanDetector {
    + 13  late Player player;
    + 14
    + 15  @override
    + 16  Future<void> onLoad() async {
    + 17    final parallax = await loadParallaxComponent(
    + 18      [
    + 19        ParallaxImageData('stars_0.png'),
    + 20        ParallaxImageData('stars_1.png'),
    + 21        ParallaxImageData('stars_2.png'),
    + 22      ],
    + 23      baseVelocity: Vector2(0, -5),
    + 24      repeat: ImageRepeat.repeat,
    + 25      velocityMultiplierDelta: Vector2(0, 5),
    + 26    );
    + 27    add(parallax);
    + 28
    + 29    player = Player();
    + 30    add(player);
    + 31  }
    + 32
    + 33  @override
    + 34  void onPanUpdate(DragUpdateInfo info) {
    + 35    player.move(info.delta.global);
    + 36  }
    + 37
    + 38  @override
    + 39  void onPanStart(DragStartInfo info) {
    + 40    player.startShooting();
    + 41  }
    + 42
    + 43  @override
    + 44  void onPanEnd(DragEndInfo info) {
    + 45    player.stopShooting();
    + 46  }
    + 47}
    + 48
    + 49class Player extends SpriteAnimationComponent
    + 50    with HasGameReference<SpaceShooterGame> {
    + 51  Player()
    + 52      : super(
    + 53          size: Vector2(100, 150),
    + 54          anchor: Anchor.center,
    + 55        );
    + 56
    + 57  late final SpawnComponent _bulletSpawner;
    + 58
    + 59  @override
    + 60  Future<void> onLoad() async {
    + 61    await super.onLoad();
    + 62
    + 63    animation = await game.loadSpriteAnimation(
    + 64      'player.png',
    + 65      SpriteAnimationData.sequenced(
    + 66        amount: 4,
    + 67        stepTime: .2,
    + 68        textureSize: Vector2(32, 48),
    + 69      ),
    + 70    );
    + 71
    + 72    position = game.size / 2;
    + 73
    + 74    _bulletSpawner = SpawnComponent(
    + 75      period: .2,
    + 76      selfPositioning: true,
    + 77      factory: (index) {
    + 78        return Bullet(
    + 79          position: position +
    + 80              Vector2(
    + 81                0,
    + 82                -height / 2,
    + 83              ),
    + 84        );
    + 85      },
    + 86      autoStart: false,
    + 87    );
    + 88
    + 89    game.add(_bulletSpawner);
    + 90  }
    + 91
    + 92  void move(Vector2 delta) {
    + 93    position.add(delta);
    + 94  }
    + 95
    + 96  void startShooting() {
    + 97    _bulletSpawner.timer.start();
    + 98  }
    + 99
    +100  void stopShooting() {
    +101    _bulletSpawner.timer.stop();
    +102  }
    +103}
    +104
    +105class Bullet extends SpriteAnimationComponent
    +106    with HasGameReference<SpaceShooterGame> {
    +107  Bullet({
    +108    super.position,
    +109  }) : super(
    +110          size: Vector2(25, 50),
    +111          anchor: Anchor.center,
    +112        );
    +113
    +114  @override
    +115  Future<void> onLoad() async {
    +116    await super.onLoad();
    +117
    +118    animation = await game.loadSpriteAnimation(
    +119      'bullet.png',
    +120      SpriteAnimationData.sequenced(
    +121        amount: 4,
    +122        stepTime: .2,
    +123        textureSize: Vector2(8, 16),
    +124      ),
    +125    );
    +126  }
    +127
    +128  @override
    +129  void update(double dt) {
    +130    super.update(dt);
    +131
    +132    position.y += dt * -500;
    +133
    +134    if (position.y < -height) {
    +135      removeFromParent();
    +136    }
    +137  }
    +138}
    +
    +
    +
    +

    Next step: Adding Enemies

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/space_shooter/step_5.html b/docs/1.18.0/tutorials/space_shooter/step_5.html new file mode 100644 index 000000000..69d785e35 --- /dev/null +++ b/docs/1.18.0/tutorials/space_shooter/step_5.html @@ -0,0 +1,638 @@ + + + + + + + Adding Enemies — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Adding Enemies

    +

    Now that the starship is able to shoot, we need something for the player to shoot at! So for +this step we will work on adding enemies to the game.

    +

    First, let’s create an Enemy class that will represent the enemies in game:

    +
    class Enemy extends SpriteAnimationComponent
    +    with HasGameReference<SpaceShooterGame> {
    +
    +  Enemy({
    +    super.position,
    +  }) : super(
    +          size: Vector2.all(enemySize),
    +          anchor: Anchor.center,
    +        );
    +
    +
    +  static const enemySize = 50.0;
    +
    +  @override
    +  Future<void> onLoad() async {
    +    await super.onLoad();
    +
    +    animation = await game.loadSpriteAnimation(
    +      'enemy.png',
    +      SpriteAnimationData.sequenced(
    +        amount: 4,
    +        stepTime: .2,
    +        textureSize: Vector2.all(16),
    +      ),
    +    );
    +  }
    +
    +  @override
    +  void update(double dt) {
    +    super.update(dt);
    +
    +    position.y += dt * 250;
    +
    +    if (position.y > game.size.y) {
    +      removeFromParent();
    +    }
    +  }
    +}
    +
    +
    +

    Note that for now, the Enemy class is super similar to the Bullet one, the only differences are +their sizes, animation information and that bullets travel from bottom to top, while enemies travel from +top to bottom, so nothing new here.

    +

    Next we need to make the enemies spawn in the game, the logic here will be simple: +we will make enemies spawn from the top of the screen at a random position on the x axis.

    +

    Once again, we could manually add all the time based events in the game’s update() method, maintain +a random instance to get the enemy x position and so on and so forth, but Flame provides us with a +way to avoid having to write all that by ourselves: we can use the SpawnComponent! So in the +SpaceShooterGame.onLoad() method let’s add the following code:

    +
        add(
    +      SpawnComponent(
    +        factory: (index) {
    +          return Enemy();
    +        },
    +        period: 1,
    +        area: Rectangle.fromLTWH(0, 0, size.x, -Enemy.enemySize),
    +      ),
    +    );
    +
    +
    +

    The SpawnComponent will take a couple of arguments, let’s review them as they appear in the code:

    +
      +
    • factory receives a function which has the index of the component that should be created. We +don’t use the index in our code, but it is useful to create more advanced spawn routines. +This function should return the created component, in our case a new instance of Enemy.

    • +
    • period simply define the interval in which a new component will be spawned.

    • +
    • area defines the possible area where the components can be placed once created. In our case they +should be placed in the area above the screen top, so they can be seen as they are arriving into the +playable area.

    • +
    +

    And this concludes this short step!

    +
    +
    +main.dart
    +
      1import 'package:flame/components.dart';
    +  2import 'package:flame/events.dart';
    +  3import 'package:flame/experimental.dart';
    +  4import 'package:flame/game.dart';
    +  5import 'package:flame/input.dart';
    +  6import 'package:flame/parallax.dart';
    +  7import 'package:flutter/material.dart';
    +  8
    +  9void main() {
    + 10  runApp(GameWidget(game: SpaceShooterGame()));
    + 11}
    + 12
    + 13class SpaceShooterGame extends FlameGame with PanDetector {
    + 14  late Player player;
    + 15
    + 16  @override
    + 17  Future<void> onLoad() async {
    + 18    final parallax = await loadParallaxComponent(
    + 19      [
    + 20        ParallaxImageData('stars_0.png'),
    + 21        ParallaxImageData('stars_1.png'),
    + 22        ParallaxImageData('stars_2.png'),
    + 23      ],
    + 24      baseVelocity: Vector2(0, -5),
    + 25      repeat: ImageRepeat.repeat,
    + 26      velocityMultiplierDelta: Vector2(0, 5),
    + 27    );
    + 28    add(parallax);
    + 29
    + 30    player = Player();
    + 31    add(player);
    + 32
    + 33    add(
    + 34      SpawnComponent(
    + 35        factory: (index) {
    + 36          return Enemy();
    + 37        },
    + 38        period: 1,
    + 39        area: Rectangle.fromLTWH(0, 0, size.x, -Enemy.enemySize),
    + 40      ),
    + 41    );
    + 42  }
    + 43
    + 44  @override
    + 45  void onPanUpdate(DragUpdateInfo info) {
    + 46    player.move(info.delta.global);
    + 47  }
    + 48
    + 49  @override
    + 50  void onPanStart(DragStartInfo info) {
    + 51    player.startShooting();
    + 52  }
    + 53
    + 54  @override
    + 55  void onPanEnd(DragEndInfo info) {
    + 56    player.stopShooting();
    + 57  }
    + 58}
    + 59
    + 60class Player extends SpriteAnimationComponent
    + 61    with HasGameReference<SpaceShooterGame> {
    + 62  Player()
    + 63      : super(
    + 64          size: Vector2(100, 150),
    + 65          anchor: Anchor.center,
    + 66        );
    + 67
    + 68  late final SpawnComponent _bulletSpawner;
    + 69
    + 70  @override
    + 71  Future<void> onLoad() async {
    + 72    await super.onLoad();
    + 73
    + 74    animation = await game.loadSpriteAnimation(
    + 75      'player.png',
    + 76      SpriteAnimationData.sequenced(
    + 77        amount: 4,
    + 78        stepTime: .2,
    + 79        textureSize: Vector2(32, 48),
    + 80      ),
    + 81    );
    + 82
    + 83    position = game.size / 2;
    + 84
    + 85    _bulletSpawner = SpawnComponent(
    + 86      period: .2,
    + 87      selfPositioning: true,
    + 88      factory: (index) {
    + 89        return Bullet(
    + 90          position: position +
    + 91              Vector2(
    + 92                0,
    + 93                -height / 2,
    + 94              ),
    + 95        );
    + 96      },
    + 97      autoStart: false,
    + 98    );
    + 99
    +100    game.add(_bulletSpawner);
    +101  }
    +102
    +103  void move(Vector2 delta) {
    +104    position.add(delta);
    +105  }
    +106
    +107  void startShooting() {
    +108    _bulletSpawner.timer.start();
    +109  }
    +110
    +111  void stopShooting() {
    +112    _bulletSpawner.timer.stop();
    +113  }
    +114}
    +115
    +116class Bullet extends SpriteAnimationComponent
    +117    with HasGameReference<SpaceShooterGame> {
    +118  Bullet({
    +119    super.position,
    +120  }) : super(
    +121          size: Vector2(25, 50),
    +122          anchor: Anchor.center,
    +123        );
    +124
    +125  @override
    +126  Future<void> onLoad() async {
    +127    await super.onLoad();
    +128
    +129    animation = await game.loadSpriteAnimation(
    +130      'bullet.png',
    +131      SpriteAnimationData.sequenced(
    +132        amount: 4,
    +133        stepTime: .2,
    +134        textureSize: Vector2(8, 16),
    +135      ),
    +136    );
    +137  }
    +138
    +139  @override
    +140  void update(double dt) {
    +141    super.update(dt);
    +142
    +143    position.y += dt * -500;
    +144
    +145    if (position.y < -height) {
    +146      removeFromParent();
    +147    }
    +148  }
    +149}
    +150
    +151class Enemy extends SpriteAnimationComponent
    +152    with HasGameReference<SpaceShooterGame> {
    +153  Enemy({
    +154    super.position,
    +155  }) : super(
    +156          size: Vector2.all(enemySize),
    +157          anchor: Anchor.center,
    +158        );
    +159
    +160  static const enemySize = 50.0;
    +161
    +162  @override
    +163  Future<void> onLoad() async {
    +164    await super.onLoad();
    +165
    +166    animation = await game.loadSpriteAnimation(
    +167      'enemy.png',
    +168      SpriteAnimationData.sequenced(
    +169        amount: 4,
    +170        stepTime: .2,
    +171        textureSize: Vector2.all(16),
    +172      ),
    +173    );
    +174  }
    +175
    +176  @override
    +177  void update(double dt) {
    +178    super.update(dt);
    +179
    +180    position.y += dt * 250;
    +181
    +182    if (position.y > game.size.y) {
    +183      removeFromParent();
    +184    }
    +185  }
    +186}
    +
    +
    +
    +

    Next step: Collision Detection

    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/space_shooter/step_6.html b/docs/1.18.0/tutorials/space_shooter/step_6.html new file mode 100644 index 000000000..57a8c9baa --- /dev/null +++ b/docs/1.18.0/tutorials/space_shooter/step_6.html @@ -0,0 +1,747 @@ + + + + + + + Enemies and Bullets collision — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Enemies and Bullets collision

    +

    Right, we are really close to a playable game, we have enemies and we have the ability to shoot bullets +at them! We now need to do something when a bullet hits an enemy.

    +

    Flame provides a collision detection system out of the box, which we will use to implement our +logic when a bullet and an enemy come into contact. The result will be that both are removed!

    +

    First we need to let our FlameGame know that we want collisions between components to +be checked. In order to do so, simply add the HasCollisionDetection mixin to the declaration +of the game class:

    +
    class SpaceShooterGame extends FlameGame
    +    with PanDetector, HasCollisionDetection {
    +    // ...
    +}
    +
    +
    +

    With that, Flame now will start to check if components have collided with each other. Next we need to +identify which components can cause collisions.

    +

    In our case those are the Bullet and Enemy components and we need to add hitboxes to them.

    +

    A hitbox is nothing more than a defined part of the component’s area that can hit +other objects. Flame offers a collection of classes to define a hitbox, the simplest of them is +the RectangleHitbox, which like the name implies, will set a rectangular area as the component’s +hitbox.

    +

    Hitboxes are also components, so we can simply add them to the components that we want to have hitboxes. +Let’s start by adding the following line to the Enemy class:

    +
    add(RectangleHitbox());
    +
    +
    +

    For the bullet we will do the same, but with a slight difference:

    +
    add(
    +  RectangleHitbox(
    +    collisionType: CollisionType.passive,
    +  ),
    +);
    +
    +
    +

    The collisionTypes are very important to understand, since they can directly impact the game +performance!

    +

    There are three types of collisions in Flame:

    +
      +
    • active collides with other hitboxes of type active or passive

    • +
    • passive collides with other hitboxes of type active

    • +
    • inactive will not collide with any other hitbox

    • +
    +

    Usually it is smart to mark hitboxes from components that will have a higher number of instances +as passive, so they will be taken into account for collision, but they themselves will not check +their own collisions, drastically reducing the number of checking, giving a better performance +to the game!

    +

    And since in this game we anticipate that there will be more bullets than enemies, we set the +bullets to have a passive collision type!

    +

    From this point on, Flame will take care of checking the collision between those two components and +we now need to do something when this occurs.

    +

    We start by receiving the collision events in one of the classes. Since Bullets have a +passive collision type, we will also add the collision checking logic to the Enemy class.

    +

    To listen for collision events we need to add the CollisionCallbacks mixin to the component. +By doing so we will be able to override some methods like onCollisionStart() and onCollisionEnd().

    +

    So let’s make a few changes to the Enemy class:

    +
    class Enemy extends SpriteAnimationComponent
    +    with HasGameReference<SpaceShooterGame>, CollisionCallbacks {
    +
    +  // Other methods omitted
    +
    +  @override
    +  void onCollisionStart(
    +    Set<Vector2> intersectionPoints,
    +    PositionComponent other,
    +  ) {
    +    super.onCollisionStart(intersectionPoints, other);
    +
    +    if (other is Bullet) {
    +      removeFromParent();
    +      other.removeFromParent();
    +    }
    +  }
    +}
    +
    +
    +

    As you can see, we added the mixin to the class, overrode the onCollisionStart method, +where we check whether the component that collided with us was a Bullet and if it was, then +we remove both the current Enemy instance and the Bullet.

    +

    If you run the game now you will finally be able to defeat the enemies crawling down the screen!

    +

    To add some final touches, let’s add some explosion animations to introduce more action to the game!

    +

    First, let’s create the explosion class:

    +
    class Explosion extends SpriteAnimationComponent
    +    with HasGameReference<SpaceShooterGame> {
    +  Explosion({
    +    super.position,
    +  }) : super(
    +          size: Vector2.all(150),
    +          anchor: Anchor.center,
    +          removeOnFinish: true,
    +        );
    +
    +
    +  @override
    +  Future<void> onLoad() async {
    +    await super.onLoad();
    +
    +    animation = await game.loadSpriteAnimation(
    +      'explosion.png',
    +      SpriteAnimationData.sequenced(
    +        amount: 6,
    +        stepTime: .1,
    +        textureSize: Vector2.all(32),
    +        loop: false,
    +      ),
    +    );
    +  }
    +}
    +
    +
    +

    There is not much new in it, the biggest difference compared to the other animation components is +that we are passing loop: false in the SpriteAnimationData.sequenced constructor and that we are +setting removeOnFinish: true;. We do that so that when the animation is finished, it will +automatically be removed from the game!

    +

    And finally, we make a small change in the onCollisionStart() method in the Enemy class +in order to add the explosion to the game:

    +
      @override
    +  void onCollisionStart(
    +    Set<Vector2> intersectionPoints,
    +    PositionComponent other,
    +  ) {
    +    super.onCollisionStart(intersectionPoints, other);
    +
    +    if (other is Bullet) {
    +      removeFromParent();
    +      other.removeFromParent();
    +      game.add(Explosion(position: position));
    +    }
    +  }
    +
    +
    +

    And that is it! We finally have a game which provides all the minimum necessary elements for a space +shooter, from here you can use what you learned to build more features in the game like making +the player suffer damage if it clashes with an enemy, or make the enemies shoot back, or maybe +both?

    +

    Good hunting pilot, and happy coding!

    +
    +
    +main.dart
    +
      1import 'package:flame/collisions.dart';
    +  2import 'package:flame/components.dart';
    +  3import 'package:flame/events.dart';
    +  4import 'package:flame/experimental.dart';
    +  5import 'package:flame/game.dart';
    +  6import 'package:flame/input.dart';
    +  7import 'package:flame/parallax.dart';
    +  8import 'package:flutter/material.dart';
    +  9
    + 10void main() {
    + 11  runApp(GameWidget(game: SpaceShooterGame()));
    + 12}
    + 13
    + 14class SpaceShooterGame extends FlameGame
    + 15    with PanDetector, HasCollisionDetection {
    + 16  late Player player;
    + 17
    + 18  @override
    + 19  Future<void> onLoad() async {
    + 20    final parallax = await loadParallaxComponent(
    + 21      [
    + 22        ParallaxImageData('stars_0.png'),
    + 23        ParallaxImageData('stars_1.png'),
    + 24        ParallaxImageData('stars_2.png'),
    + 25      ],
    + 26      baseVelocity: Vector2(0, -5),
    + 27      repeat: ImageRepeat.repeat,
    + 28      velocityMultiplierDelta: Vector2(0, 5),
    + 29    );
    + 30    add(parallax);
    + 31
    + 32    player = Player();
    + 33    add(player);
    + 34
    + 35    add(
    + 36      SpawnComponent(
    + 37        factory: (index) {
    + 38          return Enemy();
    + 39        },
    + 40        period: 1,
    + 41        area: Rectangle.fromLTWH(0, 0, size.x, -Enemy.enemySize),
    + 42      ),
    + 43    );
    + 44  }
    + 45
    + 46  @override
    + 47  void onPanUpdate(DragUpdateInfo info) {
    + 48    player.move(info.delta.global);
    + 49  }
    + 50
    + 51  @override
    + 52  void onPanStart(DragStartInfo info) {
    + 53    player.startShooting();
    + 54  }
    + 55
    + 56  @override
    + 57  void onPanEnd(DragEndInfo info) {
    + 58    player.stopShooting();
    + 59  }
    + 60}
    + 61
    + 62class Player extends SpriteAnimationComponent
    + 63    with HasGameReference<SpaceShooterGame> {
    + 64  Player()
    + 65      : super(
    + 66          size: Vector2(100, 150),
    + 67          anchor: Anchor.center,
    + 68        );
    + 69
    + 70  late final SpawnComponent _bulletSpawner;
    + 71
    + 72  @override
    + 73  Future<void> onLoad() async {
    + 74    await super.onLoad();
    + 75
    + 76    animation = await game.loadSpriteAnimation(
    + 77      'player.png',
    + 78      SpriteAnimationData.sequenced(
    + 79        amount: 4,
    + 80        stepTime: .2,
    + 81        textureSize: Vector2(32, 48),
    + 82      ),
    + 83    );
    + 84
    + 85    position = game.size / 2;
    + 86
    + 87    _bulletSpawner = SpawnComponent(
    + 88      period: .2,
    + 89      selfPositioning: true,
    + 90      factory: (index) {
    + 91        return Bullet(
    + 92          position: position +
    + 93              Vector2(
    + 94                0,
    + 95                -height / 2,
    + 96              ),
    + 97        );
    + 98      },
    + 99      autoStart: false,
    +100    );
    +101
    +102    game.add(_bulletSpawner);
    +103  }
    +104
    +105  void move(Vector2 delta) {
    +106    position.add(delta);
    +107  }
    +108
    +109  void startShooting() {
    +110    _bulletSpawner.timer.start();
    +111  }
    +112
    +113  void stopShooting() {
    +114    _bulletSpawner.timer.stop();
    +115  }
    +116}
    +117
    +118class Bullet extends SpriteAnimationComponent
    +119    with HasGameReference<SpaceShooterGame> {
    +120  Bullet({
    +121    super.position,
    +122  }) : super(
    +123          size: Vector2(25, 50),
    +124          anchor: Anchor.center,
    +125        );
    +126
    +127  @override
    +128  Future<void> onLoad() async {
    +129    await super.onLoad();
    +130
    +131    animation = await game.loadSpriteAnimation(
    +132      'bullet.png',
    +133      SpriteAnimationData.sequenced(
    +134        amount: 4,
    +135        stepTime: .2,
    +136        textureSize: Vector2(8, 16),
    +137      ),
    +138    );
    +139
    +140    add(
    +141      RectangleHitbox(
    +142        collisionType: CollisionType.passive,
    +143      ),
    +144    );
    +145  }
    +146
    +147  @override
    +148  void update(double dt) {
    +149    super.update(dt);
    +150
    +151    position.y += dt * -500;
    +152
    +153    if (position.y < -height) {
    +154      removeFromParent();
    +155    }
    +156  }
    +157}
    +158
    +159class Enemy extends SpriteAnimationComponent
    +160    with HasGameReference<SpaceShooterGame>, CollisionCallbacks {
    +161  Enemy({
    +162    super.position,
    +163  }) : super(
    +164          size: Vector2.all(enemySize),
    +165          anchor: Anchor.center,
    +166        );
    +167
    +168  static const enemySize = 50.0;
    +169
    +170  @override
    +171  Future<void> onLoad() async {
    +172    await super.onLoad();
    +173
    +174    animation = await game.loadSpriteAnimation(
    +175      'enemy.png',
    +176      SpriteAnimationData.sequenced(
    +177        amount: 4,
    +178        stepTime: .2,
    +179        textureSize: Vector2.all(16),
    +180      ),
    +181    );
    +182
    +183    add(RectangleHitbox());
    +184  }
    +185
    +186  @override
    +187  void update(double dt) {
    +188    super.update(dt);
    +189
    +190    position.y += dt * 250;
    +191
    +192    if (position.y > game.size.y) {
    +193      removeFromParent();
    +194    }
    +195  }
    +196
    +197  @override
    +198  void onCollisionStart(
    +199    Set<Vector2> intersectionPoints,
    +200    PositionComponent other,
    +201  ) {
    +202    super.onCollisionStart(intersectionPoints, other);
    +203
    +204    if (other is Bullet) {
    +205      removeFromParent();
    +206      other.removeFromParent();
    +207      game.add(Explosion(position: position));
    +208    }
    +209  }
    +210}
    +211
    +212class Explosion extends SpriteAnimationComponent
    +213    with HasGameReference<SpaceShooterGame> {
    +214  Explosion({
    +215    super.position,
    +216  }) : super(
    +217          size: Vector2.all(150),
    +218          anchor: Anchor.center,
    +219          removeOnFinish: true,
    +220        );
    +221
    +222  @override
    +223  Future<void> onLoad() async {
    +224    await super.onLoad();
    +225
    +226    animation = await game.loadSpriteAnimation(
    +227      'explosion.png',
    +228      SpriteAnimationData.sequenced(
    +229        amount: 6,
    +230        stepTime: .1,
    +231        textureSize: Vector2.all(32),
    +232        loop: false,
    +233      ),
    +234    );
    +235  }
    +236}
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/1.18.0/tutorials/tutorials.html b/docs/1.18.0/tutorials/tutorials.html new file mode 100644 index 000000000..bfa13c7ce --- /dev/null +++ b/docs/1.18.0/tutorials/tutorials.html @@ -0,0 +1,384 @@ + + + + + + + Tutorials — Flame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Flame logo: a fiery symbol along with the FLAME wordmark. + + +
    + +
    + + + + + + +
    + + + +
    +
    + +
    + +
    +

    Tutorials

    +

    The following are tutorials that are maintained with every release of Flame.

    +
      +
    • Bare Flame game – this tutorial focuses on setting up your environment for making a new +Flame game. This “initial state” is assumed as a starting point for all other tutorials.

    • +
    • Klondike game tutorial – in this tutorial, we will build the Klondike +solitaire card game.

    • +
    • Ember Quest Game Tutorial – in this tutorial, we will build Ember Quest, a simple +side-scrolling platformer.

    • +
    • Space Shooter Game Tutorial – in this tutorial, we will build Space Shooter, a classic +top-down shooting game.

    • +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/latest/README.html b/docs/latest/README.html index 8fb7fe4d3..264495dac 100644 --- a/docs/latest/README.html +++ b/docs/latest/README.html @@ -299,7 +299,7 @@
  • "),ex:s("v"),qa:s("v"),ZD:s("v"),hN:s("v"),HB:s("v"),IF:s("v"),Xl:s("v"),YP:s("v"),_:s("v"),Ze:s("v"),BJ:s("v"),Wq:s("v"),Qa:s("v"),vl:s("v"),kH:s("v"),Up:s("v"),mE:s("v"),m4:s("v>"),ZM:s("v"),Aa:s("v"),lX:s("v"),CE:s("v"),LE:s("v"),XS:s("v"),DA:s("v"),E9:s("v"),bp:s("v"),z8:s("v"),xU:s("v"),Pt:s("v"),i0:s("v"),uf:s("v"),EN:s("v"),kZ:s("v>"),no:s("v"),zA:s("v"),wQ:s("v>"),Rh:s("v>"),zx:s("v>"),SR:s("v>"),gd:s("v>"),dD:s("v>"),mo:s("v>"),iQ:s("v"),vf:s("v"),H4:s("v"),AB:s("v"),oJ:s("v"),om:s("v>"),Zq:s("v"),jm:s("v"),XZ:s("v"),Fa:s("v"),fJ:s("v"),VB:s("v"),wu:s("v"),VO:s("v"),O_:s("v"),xB:s("v"),lc:s("v"),oM:s("v"),nm:s("v"),A:s("v"),Vn:s("v"),K0:s("v"),Li:s("v"),J4:s("v"),G5:s("v>"),ML:s("v>"),q1:s("v>"),k5:s("v"),Pr:s("v"),fQ:s("v"),cN:s("v"),sa:s("v"),is:s("v"),Y4:s("v"),Rv:s("v"),_f:s("v"),ER:s("v"),L5:s("v"),Y6:s("v"),X_:s("v>"),qd:s("v>"),i1:s("v>"),Zb:s("v>"),Eo:s("v"),ss:s("v"),a9:s("v>"),eo:s("v"),tn:s("v>"),H7:s("v>"),n4:s("v>"),_I:s("v"),ND:s("v"),cc:s("v"),Xr:s("v"),Ji:s("v"),YE:s("v"),tc:s("v"),c:s("v"),wP:s("v"),Qg:s("v"),jl:s("v"),yv:s("v"),wi:s("v"),g8:s("v>"),n9:s("v"),W5:s("v"),nx:s("v"),OB:s("v"),zY:s("v"),Vm:s("v"),Vc:s("v"),o1:s("v"),OM:s("v>"),Gv:s("v>"),AT:s("v>"),m5:s("v>"),sb:s("v>"),B3:s("v>"),Vz:s("v>"),ZS:s("v"),eR:s("v"),dK:s("v"),m9:s("v"),hc:s("v"),Sd:s("v"),H9:s("v"),KJ:s("v"),Cg:s("v"),wc:s("v"),cD:s("v"),ZY:s("v"),UZ:s("v"),Id:s("v"),sK:s("v"),D9:s("v"),bf:s("v"),RW:s("v"),nc:s("v>"),M0:s("v"),Ic:s("v"),DZ:s("v"),y9:s("v"),o2:s("v"),kG:s("v"),Am:s("v"),Fq:s("v"),eF:s("v>"),Co:s("v<+(h,Tn)>"),Qc:s("v<+end,start(a,a)>"),U4:s("v<+data,event,timeStamp(H,l,bv)>"),AO:s("v"),QZ:s("v"),Pc:s("v"),Ik:s("v"),La:s("v"),xT:s("v"),TT:s("v"),Ry:s("v"),RX:s("v"),QT:s("v"),VM:s("v"),CK:s("v
    "),vj:s("v"),Va:s("v"),D1:s("v"),u1:s("v"),Bd:s("v"),QF:s("v"),o4:s("v"),Qo:s("v"),Qe:s("v"),zz:s("v"),fe:s("v"),kO:s("v"),F9:s("v"),N_:s("v"),bP:s("v"),sv:s("v"),ET:s("v"),Ds:s("v"),X4:s("v"),A5:s("v"),iU:s("v"),Sf:s("v"),hF:s("v"),T:s("v"),oU:s("v"),yy:s("v"),PL:s("v"),bt:s("v"),nk:s("v"),r6:s("v"),Lx:s("v"),J9:s("v"),Od:s("v"),Of:s("v"),VS:s("v"),fm:s("v"),Ne:s("v"),FO:s("v>>"),hp:s("v"),th:s("v"),bZ:s("v"),uj:s("v"),F7:s("v"),NQ:s("v"),nF:s("v"),XE:s("v"),LX:s("v"),ZB:s("v>"),d:s("v
    "),HQ:s("v"),zB:s("v"),Vf:s("v"),DV:s("v"),MA:s("v"),BB:s("v"),p:s("v"),GA:s("v"),Ec:s("v"),ov:s("v"),po:s("v"),kD:s("v"),Na:s("v"),SW:s("v"),c3:s("v"),TV:s("v"),wD:s("v"),Sr:s("v"),an:s("v"),CZ:s("v"),mz:s("v"),he:s("v"),TW:s("v"),zj:s("v"),IU:s("v"),_k:s("v"),CH:s("v"),QW:s("v"),m7:s("v"),Ei:s("v"),jE:s("v"),qi:s("v"),uD:s("v"),M6:s("v"),au:s("v"),s6:s("v"),lb:s("v"),YK:s("v"),Z4:s("v"),V_:s("v"),lD:s("v"),PN:s("v"),D8:s("v"),mh:s("v"),NB:s("v"),cR:s("v"),NM:s("v"),HZ:s("v"),n:s("v"),ee:s("v<@>"),t:s("v"),eh:s("v"),tZ:s("v"),M:s("v"),JK:s("v"),cA:s("v"),iG:s("v"),oP:s("v?>"),Fi:s("v"),_m:s("v"),Z:s("v"),a0:s("v"),Zt:s("v()>"),iL:s("v()>"),rS:s("v"),sA:s("v"),u:s("v<~()>"),SM:s("v<~(B,eh?)>"),ot:s("v<~(cm)>"),x8:s("v<~(mY)>"),j2:s("v<~(bv)>"),s2:s("v<~(zq)>"),Jh:s("v<~(H)>"),ha:s("cw<@>"),bz:s("O5"),lZ:s("aV"),L:s("ln"),dC:s("cG<@>"),e:s("l"),Sg:s("vu"),Qq:s("vv"),ON:s("zP"),a5:s("zQ"),Hf:s("jI"),Cl:s("py"),D2:s("ha"),XU:s("pz(kt)"),Bw:s("fB"),j0:s("zT"),vW:s("m7"),eN:s("zU"),SQ:s("FG"),Dk:s("zV"),XK:s("hs"),Il:s("Oi"),bR:s("cK"),NE:s("cK"),am:s("cK"),ku:s("cK"),hA:s("cK"),re:s("cK>"),af:s("cK"),xC:s("zX"),L7:s("jJ"),Cy:s("zY"),v9:s("rD"),h_:s("a62"),kd:s("ic"),IE:s("FH"),xj:s("lp"),Po:s("lp"),mT:s("lp<@>"),rf:s("Ol"),F1:s("jK"),hz:s("ne"),jQ:s("d4"),yM:s("FP"),JO:s("iM"),w4:s("FQ"),cS:s("mb>"),z_:s("A2"),uW:s("A2"),wO:s("A3<@>"),NJ:s("A6"),Rk:s("H"),gZ:s("H"),pN:s("H"),Px:s("H"),WI:s("H"),lf:s("H"),Ip:s("H"),aa:s("H"),EO:s("H"),qC:s("H"),YN:s("H"),UX:s("H"),LF:s("H"),Xf:s("H"),I1:s("H"),xc:s("H"),n7:s("H"),yp:s("H"),Tp:s("H"),d0:s("H"),Xw:s("H"),j:s("H<@>"),Cm:s("H"),iM:s("H"),Dn:s("H"),I_:s("aq"),f0:s("rG"),da:s("rH"),bd:s("u"),Un:s("Aa"),Q7:s("Ab"),bS:s("bnR"),X6:s("Ac"),sP:s("G_"),zI:s("hR"),CW:s("G0"),Kz:s("a6x"),tO:s("bK"),WK:s("bK"),UH:s("bK"),DC:s("bK"),q9:s("bK"),Yn:s("bK"),sO:s("bK"),sw:s("bK>"),qE:s("bK>"),Dx:s("OD<@,@>"),hq:s("pE"),bn:s("bA"),B8:s("bA"),Ha:s("bA"),kY:s("bA"),nf:s("bA"),GU:s("bA"),a:s("bA"),_P:s("bA"),e3:s("bA"),f:s("bA<@,@>"),xE:s("bA"),pE:s("bA"),rr:s("bA<~(cg),by?>"),C9:s("e7"),OW:s("W"),HA:s("W"),gH:s("W"),Rj:s("W"),a4:s("W"),cj:s("W"),OL:s("W"),Yg:s("W"),qQ:s("W"),rB:s("W"),bK:s("W"),qn:s("W"),gn:s("W"),b1:s("W>"),la:s("W,je>"),An:s("W"),Tr:s("W"),E0:s("OJ>"),iB:s("bH2"),c4:s("ON"),Oc:s("Ag"),xV:s("by"),Yt:s("bZq"),k_:s("Aj"),l:s("rK"),oh:s("G7"),sW:s("G7"),Pw:s("pJ"),xS:s("mf"),sg:s("a6Z"),UV:s("rM"),Pb:s("f4"),q8:s("vH"),ZA:s("OX"),Nn:s("rN"),rs:s("jd"),ni:s("vI"),_h:s("pL"),e0:s("Am"),wd:s("mg"),Wz:s("nh"),Lb:s("ih"),sc:s("P2"),Es:s("Ao"),Sw:s("rO"),Dl:s("Ap"),lQ:s("P8"),Xg:s("Aq"),cM:s("Ar"),P7:s("As"),ff:s("P9"),RZ:s("Av"),Ml:s("Aw"),FM:s("dt<@>"),WT:s("dt)>"),rT:s("dt,f3)>"),tj:s("dt)>"),Jb:s("dt)>"),yi:s("dt)>"),Go:s("dt(a0,f3)>"),r_:s("dt(a0)>"),iz:s("dt(a0)>"),KW:s("dt(a0)>"),Le:s("dt(a0)>"),L8:s("dt(a0)>"),En:s("dt(a0)>"),Qt:s("dt(a0)>"),eJ:s("dt(a0)>"),zJ:s("dt(a0)>"),ts:s("dt(a0)>"),G0:s("dt(a0,f3)>"),Th:s("dt(a0)>"),Nm:s("dt(a0)>"),e9:s("dt(a0,a0)>"),ao:s("dt(a0,a0,f3)>"),yX:s("dt(a0)>"),e_:s("dt(a0)>"),jq:s("dt(a0)>"),Lz:s("dt(a0,f3)>"),l6:s("dt(a0,f3,a0,f3)>"),ud:s("dt,ri)>"),cp:s("dt,a0)>"),Td:s("dt,a0)>"),jU:s("dt,ri)>"),sB:s("dt,f3)>"),IG:s("dt)>"),UG:s("dt)>"),rH:s("dt)>"),oe:s("dt)>"),p2:s("dt)>"),MZ:s("Gh"),jW:s("vL"),A3:s("mi"),UE:s("Gj"),Gb:s("Gk"),zd:s("rQ"),uK:s("oq"),SK:s("Gl"),ZR:s("vN"),Uk:s("AA"),JU:s("AB"),_A:s("Pl"),Jg:s("fS"),Tm:s("fS"),w3:s("fS"),ji:s("fS"),WA:s("fS"),ZE:s("fS"),bj:s("aJ"),Te:s("rR"),P:s("bR"),y3:s("d7"),K:s("B"),Xi:s("Pp"),xA:s("B(k)"),_a:s("B(k{params:B?})"),qF:s("bW"),fy:s("bW<~()>"),wS:s("bW<~(cm)>"),jc:s("bW<~(mY)>"),qb:s("Go"),iS:s("Pr"),pw:s("AE"),o:s("i"),gY:s("or"),M2:s("vO"),o0:s("Pv"),er:s("cM"),Tq:s("mn<+(h,fl)>"),mA:s("mn"),Jd:s("mn"),Aw:s("mn"),JD:s("AI"),Hl:s("rT"),N1:s("Gt"),AE:s("rU"),_1:s("hu"),Mf:s("Gv"),aN:s("vQ"),sd:s("bg5"),Q2:s("je"),qA:s("pO"),vI:s("Gy"),PC:s("pP"),tr:s("jO"),LL:s("a8p"),gp:s("a8q"),P2:s("rW>"),Ex:s("rX"),g_:s("a8r"),Rp:s("ni"),Fw:s("hb"),IL:s("hb"),_X:s("ba<@>"),x7:s("ff"),W8:s("bow"),Y9:s("AM"),C6:s("AN"),Zf:s("rZ"),rM:s("mq"),Wk:s("PL"),Nt:s("jf"),D3:s("PM"),jT:s("w_"),zM:s("hT"),on:s("PW"),ix:s("fT"),v3:s("K"),YA:s("ot"),NA:s("t_"),mX:s("GH"),BV:s("bZP"),w2:s("t1"),ge:s("AR"),Ko:s("AS"),kf:s("t4"),Au:s("hc"),pY:s("t5"),qL:s("cg"),GG:s("bZV"),XA:s("t6"),Jm:s("ms"),n2:s("AT"),WQ:s("AU"),w5:s("t7"),DB:s("AV"),PB:s("AW"),Mj:s("AX"),xb:s("AY"),ks:s("jP"),oN:s("AZ"),ru:s("a0"),AZ:s("a0(a0,f3)"),Xm:s("a0(a0,k)"),Xx:s("a0(a0)"),vD:s("a0(a0)"),g6:s("a0"),Gj:s("a0"),Xe:s("a0(a0)"),oa:s("a0"),ic:s("a0"),R_:s("a0(a0)"),qc:s("a0"),uU:s("a0"),Gf:s("a0"),P6:s("a0"),Fg:s("a0"),JM:s("a0(a0)"),Bl:s("a0"),nr:s("a0"),Ob:s("a0"),_4:s("a0"),uX:s("a0"),LU:s("a0(a0)"),lW:s("a0(a0)"),rq:s("a0(a0)"),dA:s("a0(a0)"),gK:s("a0(a0)"),Sy:s("a0(a0,f3)"),GW:s("a0(a0,k)"),PU:s("a0(a0)"),Sz:s("a0(a0)"),A7:s("a0(a0,a0)"),KC:s("a0(a0,a0,f3)"),sx:s("a0(a0,a0,k)"),g0:s("a0(a0)"),CI:s("a0(a0)"),GX:s("a0(a0)"),ne:s("a0"),VF:s("a0(a0,f3)"),GL:s("a0(a0,k)"),B7:s("a0(a0,f3,a0,f3)"),yt:s("a0(a0,k,a0,k)"),uC:s("a99"),kj:s("c_q"),Kj:s("au"),du:s("ax"),bb:s("GM"),VL:s("tc"),JS:s("Q8"),lJ:s("td"),FN:s("mu"),EW:s("fD"),bc:s("nl<@>"),Ff:s("Qb"),nu:s("Qc"),yH:s("bN"),SA:s("a9p"),Qi:s("te"),qm:s("tg"),OK:s("B5>"),KK:s("a9r"),PH:s("jR>"),eg:s("hd"),jX:s("H0"),M7:s("w8"),CY:s("w9"),k9:s("B6"),ez:s("wa"),OG:s("B7"),sD:s("mv"),Ps:s("ti"),e7:s("wb"),sr:s("P"),pK:s("c_z"),f7:s("+()"),_0:s("+(h,fl)"),BZ:s("+(h,jE?)"),Yr:s("+(CR,T)"),mi:s("+(B?,B?)"),ox:s("+(h?,fx)"),YT:s("A"),Bb:s("hv"),r0:s("bq"),u4:s("bq>"),VJ:s("bq<+(h,fl)>"),WV:s("bq"),nt:s("bq"),ZV:s("bq"),MD:s("bq"),CP:s("bq"),OY:s("bq"),Lc:s("bq"),vq:s("bq"),hC:s("bq"),MB:s("bq"),sE:s("bq"),lk:s("bq<@>"),n3:s("bq<~>"),Qz:s("a9O"),ae:s("Qr"),TA:s("Bb"),MY:s("Qt"),NW:s("Qu"),x:s("Y"),vB:s("H3"),DW:s("Bc"),f1:s("QE"),I9:s("L"),F5:s("b6"),GM:s("bx"),U6:s("pV"),Wx:s("tj"),nl:s("fh"),Ss:s("H5"),Jc:s("H7"),Cn:s("H8"),dw:s("QT"),Ju:s("Bf"),E1:s("QU"),VW:s("iP"),xL:s("aal"),qJ:s("Bh"),mg:s("hU"),UM:s("ox"),yk:s("aQn<@>"),Wd:s("Hd"),dZ:s("R_"),yb:s("hw"),z4:s("fV"),k2:s("R3"),Ba:s("cz